iPXE
Functions | Variables
rdc.c File Reference

RDC R6040 network driver. More...

#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <byteswap.h>
#include <ipxe/netdevice.h>
#include <ipxe/ethernet.h>
#include <ipxe/if_ether.h>
#include <ipxe/iobuf.h>
#include <ipxe/malloc.h>
#include <ipxe/pci.h>
#include "rdc.h"

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static int rdc_reset (struct rdc_nic *rdc)
 Reset hardware. More...
 
static int rdc_mii_read (struct mii_interface *mdio, unsigned int phy, unsigned int reg)
 Read from MII register. More...
 
static int rdc_mii_write (struct mii_interface *mdio, unsigned int phy, unsigned int reg, unsigned int data)
 Write to MII register. More...
 
static int rdc_init_phy (struct rdc_nic *rdc)
 Initialise PHY. More...
 
static int rdc_check_link (struct net_device *netdev)
 Check link state. More...
 
static int rdc_create_ring (struct rdc_nic *rdc, struct rdc_ring *ring)
 Create descriptor ring. More...
 
static void rdc_destroy_ring (struct rdc_nic *rdc, struct rdc_ring *ring)
 Destroy descriptor ring. More...
 
static void rdc_refill_rx (struct rdc_nic *rdc)
 Refill receive descriptor ring. More...
 
static int rdc_open (struct net_device *netdev)
 Open network device. More...
 
static void rdc_close (struct net_device *netdev)
 Close network device. More...
 
static int rdc_transmit (struct net_device *netdev, struct io_buffer *iobuf)
 Transmit packet. More...
 
static void rdc_poll_tx (struct net_device *netdev)
 Poll for completed packets. More...
 
static void rdc_poll_rx (struct net_device *netdev)
 Poll for received packets. More...
 
static void rdc_poll (struct net_device *netdev)
 Poll for completed and received packets. More...
 
static void rdc_irq (struct net_device *netdev, int enable)
 Enable or disable interrupts. More...
 
static int rdc_probe (struct pci_device *pci)
 Probe PCI device. More...
 
static void rdc_remove (struct pci_device *pci)
 Remove PCI device. More...
 

Variables

static struct mii_operations rdc_mii_operations
 RDC MII operations. More...
 
static struct net_device_operations rdc_operations
 RDC network device operations. More...
 
static struct pci_device_id rdc_nics []
 RDC PCI device IDs. More...
 
struct pci_driver rdc_driver __pci_driver
 RDC PCI driver. More...
 

Detailed Description

RDC R6040 network driver.

Definition in file rdc.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ rdc_reset()

static int rdc_reset ( struct rdc_nic rdc)
static

Reset hardware.

Parameters
rdcRDC device
Return values
rcReturn status code

Definition at line 58 of file rdc.c.

58  {
59  unsigned int i;
60 
61  /* Reset NIC */
62  writew ( RDC_MCR1_RST, rdc->regs + RDC_MCR1 );
63 
64  /* Wait for reset to complete */
65  for ( i = 0 ; i < RDC_RESET_MAX_WAIT_MS ; i++ ) {
66 
67  /* Check for reset completion */
68  if ( readw ( rdc->regs + RDC_MCR1 ) & RDC_MCR1_RST ) {
69  mdelay ( 1 );
70  continue;
71  }
72 
73  /* Reset internal state machine */
74  writew ( RDC_MACSM_RST, rdc->regs + RDC_MACSM );
75  writew ( 0, rdc->regs + RDC_MACSM );
77 
78  return 0;
79  }
80 
81  DBGC ( rdc, "RDC %p timed out waiting for reset\n", rdc );
82  return -ETIMEDOUT;
83 }
#define RDC_MACSM
MAC state machine register.
Definition: rdc.h:115
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
#define RDC_MACSM_RESET_DELAY_MS
Time to wait after resetting MAC state machine.
Definition: rdc.h:119
#define DBGC(...)
Definition: compiler.h:505
#define RDC_MACSM_RST
Reset state machine.
Definition: rdc.h:116
#define RDC_RESET_MAX_WAIT_MS
Maximum time to wait for reset.
Definition: rdc.h:51
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
#define writew
Definition: w89c840.c:159
#define RDC_MCR1_RST
MAC reset.
Definition: rdc.h:48
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:669
#define RDC_MCR1
MAC control register 1.
Definition: rdc.h:47
void * regs
Registers.
Definition: rdc.h:178

References DBGC, ETIMEDOUT, mdelay(), RDC_MACSM, RDC_MACSM_RESET_DELAY_MS, RDC_MACSM_RST, RDC_MCR1, RDC_MCR1_RST, RDC_RESET_MAX_WAIT_MS, readw(), rdc_nic::regs, and writew.

Referenced by rdc_probe(), and rdc_remove().

◆ rdc_mii_read()

static int rdc_mii_read ( struct mii_interface mdio,
unsigned int  phy,
unsigned int  reg 
)
static

Read from MII register.

Parameters
mdioMII interface
phyPHY address
regRegister address
Return values
valueData read, or negative error

Definition at line 100 of file rdc.c.

101  {
102  struct rdc_nic *rdc = container_of ( mdio, struct rdc_nic, mdio );
103  uint16_t mmdio;
104  unsigned int i;
105 
106  /* Initiate read */
107  mmdio = ( RDC_MMDIO_MIIRD | RDC_MMDIO_PHYAD ( phy ) |
108  RDC_MMDIO_REGAD ( reg ) );
109  writew ( mmdio, rdc->regs + RDC_MMDIO );
110 
111  /* Wait for read to complete */
112  for ( i = 0 ; i < RDC_MII_MAX_WAIT_US ; i++ ) {
113 
114  /* Check for read completion */
115  if ( readw ( rdc->regs + RDC_MMDIO ) & RDC_MMDIO_MIIRD ) {
116  udelay ( 1 );
117  continue;
118  }
119 
120  /* Return register value */
121  return ( readw ( rdc->regs + RDC_MMRD ) );
122  }
123 
124  DBGC ( rdc, "RDC %p timed out waiting for MII read\n", rdc );
125  return -ETIMEDOUT;
126 }
unsigned short uint16_t
Definition: stdint.h:11
static unsigned int unsigned int reg
Definition: myson.h:162
#define RDC_MMDIO_PHYAD(x)
PHY address.
Definition: rdc.h:64
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
#define DBGC(...)
Definition: compiler.h:505
An RDC network card.
Definition: rdc.h:176
#define RDC_MMRD
MAC MDIO read data register.
Definition: rdc.h:71
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:35
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition: timer.c:60
#define RDC_MMDIO_REGAD(x)
Register address.
Definition: rdc.h:65
struct mii_interface mdio
MII interface.
Definition: rdc.h:182
#define RDC_MMDIO_MIIRD
MDIO read.
Definition: rdc.h:63
#define writew
Definition: w89c840.c:159
#define RDC_MMDIO
MAC MDIO control register.
Definition: rdc.h:61
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:669
void * regs
Registers.
Definition: rdc.h:178
#define RDC_MII_MAX_WAIT_US
Maximum time to wait for an MII read or write.
Definition: rdc.h:68

References container_of, DBGC, ETIMEDOUT, rdc_nic::mdio, RDC_MII_MAX_WAIT_US, RDC_MMDIO, RDC_MMDIO_MIIRD, RDC_MMDIO_PHYAD, RDC_MMDIO_REGAD, RDC_MMRD, readw(), reg, rdc_nic::regs, udelay(), and writew.

◆ rdc_mii_write()

static int rdc_mii_write ( struct mii_interface mdio,
unsigned int  phy,
unsigned int  reg,
unsigned int  data 
)
static

Write to MII register.

Parameters
mdioMII interface
phyPHY address
regRegister address
dataData to write
Return values
rcReturn status code

Definition at line 137 of file rdc.c.

138  {
139  struct rdc_nic *rdc = container_of ( mdio, struct rdc_nic, mdio );
140  uint16_t mmdio;
141  unsigned int i;
142 
143  /* Initiate write */
144  mmdio = ( RDC_MMDIO_MIIWR | RDC_MMDIO_PHYAD ( phy ) |
145  RDC_MMDIO_REGAD ( reg ) );
146  writew ( data, rdc->regs + RDC_MMWD );
147  writew ( mmdio, rdc->regs + RDC_MMDIO );
148 
149  /* Wait for write to complete */
150  for ( i = 0 ; i < RDC_MII_MAX_WAIT_US ; i++ ) {
151 
152  /* Check for write completion */
153  if ( readw ( rdc->regs + RDC_MMDIO ) & RDC_MMDIO_MIIWR ) {
154  udelay ( 1 );
155  continue;
156  }
157 
158  return 0;
159  }
160 
161  DBGC ( rdc, "RDC %p timed out waiting for MII write\n", rdc );
162  return -ETIMEDOUT;
163 }
unsigned short uint16_t
Definition: stdint.h:11
static unsigned int unsigned int reg
Definition: myson.h:162
#define RDC_MMDIO_PHYAD(x)
PHY address.
Definition: rdc.h:64
#define RDC_MMWD
MAC MDIO write data register.
Definition: rdc.h:74
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
#define DBGC(...)
Definition: compiler.h:505
An RDC network card.
Definition: rdc.h:176
#define RDC_MMDIO_MIIWR
MDIO write.
Definition: rdc.h:62
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:35
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition: timer.c:60
#define RDC_MMDIO_REGAD(x)
Register address.
Definition: rdc.h:65
struct mii_interface mdio
MII interface.
Definition: rdc.h:182
#define writew
Definition: w89c840.c:159
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define RDC_MMDIO
MAC MDIO control register.
Definition: rdc.h:61
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:669
void * regs
Registers.
Definition: rdc.h:178
#define RDC_MII_MAX_WAIT_US
Maximum time to wait for an MII read or write.
Definition: rdc.h:68

References container_of, data, DBGC, ETIMEDOUT, rdc_nic::mdio, RDC_MII_MAX_WAIT_US, RDC_MMDIO, RDC_MMDIO_MIIWR, RDC_MMDIO_PHYAD, RDC_MMDIO_REGAD, RDC_MMWD, readw(), reg, rdc_nic::regs, udelay(), and writew.

◆ rdc_init_phy()

static int rdc_init_phy ( struct rdc_nic rdc)
static

Initialise PHY.

Parameters
rdcRDC device
Return values
rcReturn status code

Definition at line 184 of file rdc.c.

184  {
185  int rc;
186 
187  /* Find PHY address */
188  if ( ( rc = mii_find ( &rdc->mii ) ) != 0 ) {
189  DBGC ( rdc, "RDC %p could not find PHY address: %s\n",
190  rdc, strerror ( rc ) );
191  return rc;
192  }
193 
194  /* Reset PHY */
195  if ( ( rc = mii_reset ( &rdc->mii ) ) != 0 ) {
196  DBGC ( rdc, "RDC %p could not reset PHY: %s\n",
197  rdc, strerror ( rc ) );
198  return rc;
199  }
200 
201  return 0;
202 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
int mii_reset(struct mii_device *mii)
Reset MII device.
Definition: mii.c:74
int mii_find(struct mii_device *mii)
Find PHY address.
Definition: mii.c:157
struct mii_device mii
MII device.
Definition: rdc.h:184

References DBGC, rdc_nic::mii, mii_find(), mii_reset(), rc, and strerror().

Referenced by rdc_probe().

◆ rdc_check_link()

static int rdc_check_link ( struct net_device netdev)
static

Check link state.

Parameters
netdevNetwork device
Return values
rcReturn status code

Definition at line 210 of file rdc.c.

210  {
211  struct rdc_nic *rdc = netdev->priv;
212  int rc;
213 
214  /* Check link state */
215  if ( ( rc = mii_check_link ( &rdc->mii, netdev ) ) != 0 ) {
216  DBGC ( rdc, "RDC %p could not check link: %s\n",
217  rdc, strerror ( rc ) );
218  return rc;
219  }
220 
221  return 0;
222 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
An RDC network card.
Definition: rdc.h:176
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
int mii_check_link(struct mii_device *mii, struct net_device *netdev)
Update link status via MII.
Definition: mii.c:126
struct mii_device mii
MII device.
Definition: rdc.h:184

References DBGC, rdc_nic::mii, mii_check_link(), netdev, net_device::priv, rc, and strerror().

Referenced by rdc_open(), rdc_poll(), and rdc_probe().

◆ rdc_create_ring()

static int rdc_create_ring ( struct rdc_nic rdc,
struct rdc_ring ring 
)
static

Create descriptor ring.

Parameters
rdcRDC device
ringDescriptor ring
Return values
rcReturn status code

Definition at line 238 of file rdc.c.

238  {
239  size_t len = ( ring->count * sizeof ( ring->desc[0] ) );
240  struct rdc_descriptor *desc;
241  struct rdc_descriptor *next;
243  unsigned int i;
244 
245  /* Allocate descriptor ring */
246  ring->desc = dma_alloc ( rdc->dma, &ring->map, len, len );
247  if ( ! ring->desc )
248  return -ENOMEM;
249 
250  /* Initialise descriptor ring */
251  memset ( ring->desc, 0, len );
252  for ( i = 0 ; i < ring->count ; i++ ) {
253  desc = &ring->desc[i];
254  next = &ring->desc[ ( i + 1 ) & ( ring->count - 1 ) ];
255  desc->next = cpu_to_le32 ( dma ( &ring->map, next ) );
256  }
257 
258  /* Program ring address */
259  start = dma ( &ring->map, ring->desc );
260  writew ( ( start >> 0 ), ( rdc->regs + ring->reg + RDC_MxDSA_LO ) );
261  writew ( ( start >> 16 ), ( rdc->regs + ring->reg + RDC_MxDSA_HI ) );
262 
263  DBGC ( rdc, "RDC %p ring %#02x is at [%08lx,%08lx)\n",
264  rdc, ring->reg, virt_to_phys ( ring->desc ),
265  ( virt_to_phys ( ring->desc ) + len ) );
266  return 0;
267 }
uint32_t next
Next descriptor address.
Definition: myson.h:18
uint64_t desc
Microcode descriptor list physical address.
Definition: ucode.h:12
#define DBGC(...)
Definition: compiler.h:505
static __always_inline unsigned long virt_to_phys(volatile const void *addr)
Convert virtual address to a physical address.
Definition: uaccess.h:287
uint32_t start
Starting offset.
Definition: netvsc.h:12
An RDC descriptor.
Definition: rdc.h:20
struct dma_mapping map
Descriptor ring DMA mapping.
Definition: rdc.h:134
#define ENOMEM
Not enough space.
Definition: errno.h:534
unsigned int reg
Start address register 0.
Definition: rdc.h:143
#define cpu_to_le32(value)
Definition: byteswap.h:107
struct dma_device * dma
DMA device.
Definition: rdc.h:180
void * dma_alloc(struct dma_device *dma, struct dma_mapping *map, size_t len, size_t align)
Allocate and map DMA-coherent buffer.
unsigned long physaddr_t
Definition: stdint.h:20
unsigned int count
Number of descriptors.
Definition: rdc.h:141
uint32_t len
Length.
Definition: ena.h:14
#define writew
Definition: w89c840.c:159
#define RDC_MxDSA_HI
MAC descriptor start address low half.
Definition: rdc.h:86
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
#define RDC_MxDSA_LO
MAC descriptor start address low half.
Definition: rdc.h:83
static __always_inline physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
Definition: dma.h:436
void * regs
Registers.
Definition: rdc.h:178
void * memset(void *dest, int character, size_t len) __nonnull

References rdc_ring::count, cpu_to_le32, DBGC, desc, rdc_ring::desc, rdc_nic::dma, dma(), dma_alloc(), ENOMEM, len, rdc_ring::map, memset(), next, RDC_MxDSA_HI, RDC_MxDSA_LO, rdc_ring::reg, rdc_nic::regs, start, virt_to_phys(), and writew.

Referenced by rdc_open().

◆ rdc_destroy_ring()

static void rdc_destroy_ring ( struct rdc_nic rdc,
struct rdc_ring ring 
)
static

Destroy descriptor ring.

Parameters
rdcRDC device
ringDescriptor ring

Definition at line 275 of file rdc.c.

275  {
276  size_t len = ( ring->count * sizeof ( ring->desc[0] ) );
277 
278  /* Clear ring address */
279  writew ( 0, ( rdc->regs + ring->reg + RDC_MxDSA_LO ) );
280  writew ( 0, ( rdc->regs + ring->reg + RDC_MxDSA_HI ) );
281 
282  /* Free descriptors */
283  dma_free ( &ring->map, ring->desc, len );
284  ring->desc = NULL;
285 
286  /* Reset ring */
287  ring->prod = 0;
288  ring->cons = 0;
289 }
struct dma_mapping map
Descriptor ring DMA mapping.
Definition: rdc.h:134
void dma_free(struct dma_mapping *map, void *addr, size_t len)
Unmap and free DMA-coherent buffer.
unsigned int prod
Producer index.
Definition: rdc.h:136
unsigned int reg
Start address register 0.
Definition: rdc.h:143
unsigned int cons
Consumer index.
Definition: rdc.h:138
unsigned int count
Number of descriptors.
Definition: rdc.h:141
uint32_t len
Length.
Definition: ena.h:14
#define writew
Definition: w89c840.c:159
#define RDC_MxDSA_HI
MAC descriptor start address low half.
Definition: rdc.h:86
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
#define RDC_MxDSA_LO
MAC descriptor start address low half.
Definition: rdc.h:83
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
void * regs
Registers.
Definition: rdc.h:178

References rdc_ring::cons, rdc_ring::count, rdc_ring::desc, dma_free(), len, rdc_ring::map, NULL, rdc_ring::prod, RDC_MxDSA_HI, RDC_MxDSA_LO, rdc_ring::reg, rdc_nic::regs, and writew.

Referenced by rdc_close(), and rdc_open().

◆ rdc_refill_rx()

static void rdc_refill_rx ( struct rdc_nic rdc)
static

Refill receive descriptor ring.

Parameters
rdcRDC device

Definition at line 296 of file rdc.c.

296  {
297  struct rdc_descriptor *rx;
298  struct io_buffer *iobuf;
299  unsigned int rx_idx;
300 
301  /* Refill ring */
302  while ( ( rdc->rx.prod - rdc->rx.cons ) < RDC_NUM_RX_DESC ) {
303 
304  /* Allocate I/O buffer */
305  iobuf = alloc_rx_iob ( RDC_RX_MAX_LEN, rdc->dma );
306  if ( ! iobuf ) {
307  /* Wait for next refill */
308  break;
309  }
310 
311  /* Get next receive descriptor */
312  rx_idx = ( rdc->rx.prod++ % RDC_NUM_RX_DESC );
313  rx = &rdc->rx.desc[rx_idx];
314 
315  /* Populate receive descriptor */
316  rx->len = cpu_to_le16 ( RDC_RX_MAX_LEN );
317  rx->addr = cpu_to_le32 ( iob_dma ( iobuf ) );
318  wmb();
319  rx->flags = cpu_to_le16 ( RDC_FL_OWNED );
320 
321  /* Record I/O buffer */
322  assert ( rdc->rx_iobuf[rx_idx] == NULL );
323  rdc->rx_iobuf[rx_idx] = iobuf;
324 
325  DBGC2 ( rdc, "RDC %p RX %d is [%lx,%lx)\n",
326  rdc, rx_idx, virt_to_phys ( iobuf->data ),
327  ( virt_to_phys ( iobuf->data ) + RDC_RX_MAX_LEN ) );
328  }
329 }
wmb()
static __always_inline unsigned long virt_to_phys(volatile const void *addr)
Convert virtual address to a physical address.
Definition: uaccess.h:287
#define RDC_FL_OWNED
Descriptor is owned by NIC.
Definition: rdc.h:34
struct rdc_ring rx
Receive descriptor ring.
Definition: rdc.h:189
An RDC descriptor.
Definition: rdc.h:20
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static __always_inline physaddr_t iob_dma(struct io_buffer *iobuf)
Get I/O buffer DMA address.
Definition: iobuf.h:264
unsigned int prod
Producer index.
Definition: rdc.h:136
struct io_buffer * rx_iobuf[RDC_NUM_RX_DESC]
Receive I/O buffers.
Definition: rdc.h:191
#define cpu_to_le32(value)
Definition: byteswap.h:107
#define RDC_NUM_RX_DESC
Number of receive descriptors.
Definition: rdc.h:170
unsigned int cons
Consumer index.
Definition: rdc.h:138
struct io_buffer * alloc_rx_iob(size_t len, struct dma_device *dma)
Allocate and map I/O buffer for receive DMA.
Definition: iobuf.c:181
struct dma_device * dma
DMA device.
Definition: rdc.h:180
#define DBGC2(...)
Definition: compiler.h:522
void * data
Start of data.
Definition: iobuf.h:48
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.
Definition: wpa.h:234
#define cpu_to_le16(value)
Definition: byteswap.h:106
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
#define RDC_RX_MAX_LEN
Receive buffer length.
Definition: rdc.h:173
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
A persistent I/O buffer.
Definition: iobuf.h:33

References alloc_rx_iob(), assert(), rdc_ring::cons, cpu_to_le16, cpu_to_le32, io_buffer::data, DBGC2, rdc_ring::desc, rdc_nic::dma, iob_dma(), NULL, rdc_ring::prod, RDC_FL_OWNED, RDC_NUM_RX_DESC, RDC_RX_MAX_LEN, rdc_nic::rx, rx, rdc_nic::rx_iobuf, virt_to_phys(), and wmb().

Referenced by rdc_open(), and rdc_poll().

◆ rdc_open()

static int rdc_open ( struct net_device netdev)
static

Open network device.

Parameters
netdevNetwork device
Return values
rcReturn status code

Definition at line 337 of file rdc.c.

337  {
338  struct rdc_nic *rdc = netdev->priv;
339  int rc;
340 
341  /* Create transmit descriptor ring */
342  if ( ( rc = rdc_create_ring ( rdc, &rdc->tx ) ) != 0 )
343  goto err_create_tx;
344 
345  /* Create receive descriptor ring */
346  if ( ( rc = rdc_create_ring ( rdc, &rdc->rx ) ) != 0 )
347  goto err_create_rx;
348 
349  /* Program receive buffer length */
350  writew ( RDC_RX_MAX_LEN, rdc->regs + RDC_MRBSR );
351 
352  /* Enable transmit and receive */
354  RDC_MCR0_RXEN ),
355  rdc->regs + RDC_MCR0 );
356 
357  /* Enable PHY status polling */
359  RDC_MPSCCR_SLOW ),
360  rdc->regs + RDC_MPSCCR );
361 
362  /* Fill receive ring */
363  rdc_refill_rx ( rdc );
364 
365  /* Update link state */
367 
368  return 0;
369 
370  rdc_destroy_ring ( rdc, &rdc->rx );
371  err_create_rx:
372  rdc_destroy_ring ( rdc, &rdc->tx );
373  err_create_tx:
374  return rc;
375 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static int rdc_create_ring(struct rdc_nic *rdc, struct rdc_ring *ring)
Create descriptor ring.
Definition: rdc.c:238
#define RDC_MCR0_TXEN
Transmit enable.
Definition: rdc.h:42
static int rdc_check_link(struct net_device *netdev)
Check link state.
Definition: rdc.c:210
static void rdc_destroy_ring(struct rdc_nic *rdc, struct rdc_ring *ring)
Destroy descriptor ring.
Definition: rdc.c:275
#define RDC_MPSCCR
MAC PHY status change configuration register.
Definition: rdc.h:109
An RDC network card.
Definition: rdc.h:176
struct rdc_ring rx
Receive descriptor ring.
Definition: rdc.h:189
#define RDC_MRBSR
MAC receive buffer size register.
Definition: rdc.h:58
#define RDC_MCR0_PROMISC
Promiscuous mode.
Definition: rdc.h:43
struct rdc_ring tx
Transmit descriptor ring.
Definition: rdc.h:187
void * priv
Driver private data.
Definition: netdevice.h:431
#define RDC_MPSCCR_SLOW
Poll slowly.
Definition: rdc.h:112
static struct net_device * netdev
Definition: gdbudp.c:52
#define RDC_MCR0_RXEN
Receive enable.
Definition: rdc.h:44
#define RDC_MPSCCR_EN
PHY status change enable.
Definition: rdc.h:110
#define writew
Definition: w89c840.c:159
#define RDC_MCR0
MAC control register 0.
Definition: rdc.h:40
unsigned int address
PHY address.
Definition: mii.h:53
static void rdc_refill_rx(struct rdc_nic *rdc)
Refill receive descriptor ring.
Definition: rdc.c:296
#define RDC_MPSCCR_PHYAD(x)
PHY address.
Definition: rdc.h:111
#define RDC_RX_MAX_LEN
Receive buffer length.
Definition: rdc.h:173
void * regs
Registers.
Definition: rdc.h:178
struct mii_device mii
MII device.
Definition: rdc.h:184
#define RDC_MCR0_FD
Full duplex.
Definition: rdc.h:41

References mii_device::address, rdc_nic::mii, netdev, net_device::priv, rc, rdc_check_link(), rdc_create_ring(), rdc_destroy_ring(), RDC_MCR0, RDC_MCR0_FD, RDC_MCR0_PROMISC, RDC_MCR0_RXEN, RDC_MCR0_TXEN, RDC_MPSCCR, RDC_MPSCCR_EN, RDC_MPSCCR_PHYAD, RDC_MPSCCR_SLOW, RDC_MRBSR, rdc_refill_rx(), RDC_RX_MAX_LEN, rdc_nic::regs, rdc_nic::rx, rdc_nic::tx, and writew.

◆ rdc_close()

static void rdc_close ( struct net_device netdev)
static

Close network device.

Parameters
netdevNetwork device

Definition at line 382 of file rdc.c.

382  {
383  struct rdc_nic *rdc = netdev->priv;
384  unsigned int i;
385 
386  /* Disable NIC */
387  writew ( 0, rdc->regs + RDC_MCR0 );
388 
389  /* Destroy receive descriptor ring */
390  rdc_destroy_ring ( rdc, &rdc->rx );
391 
392  /* Discard any unused receive buffers */
393  for ( i = 0 ; i < RDC_NUM_RX_DESC ; i++ ) {
394  if ( rdc->rx_iobuf[i] )
395  free_rx_iob ( rdc->rx_iobuf[i] );
396  rdc->rx_iobuf[i] = NULL;
397  }
398 
399  /* Destroy transmit descriptor ring */
400  rdc_destroy_ring ( rdc, &rdc->tx );
401 }
static void rdc_destroy_ring(struct rdc_nic *rdc, struct rdc_ring *ring)
Destroy descriptor ring.
Definition: rdc.c:275
An RDC network card.
Definition: rdc.h:176
struct rdc_ring rx
Receive descriptor ring.
Definition: rdc.h:189
struct rdc_ring tx
Transmit descriptor ring.
Definition: rdc.h:187
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
struct io_buffer * rx_iobuf[RDC_NUM_RX_DESC]
Receive I/O buffers.
Definition: rdc.h:191
#define RDC_NUM_RX_DESC
Number of receive descriptors.
Definition: rdc.h:170
void free_rx_iob(struct io_buffer *iobuf)
Unmap and free I/O buffer for receive DMA.
Definition: iobuf.c:208
#define writew
Definition: w89c840.c:159
#define RDC_MCR0
MAC control register 0.
Definition: rdc.h:40
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
void * regs
Registers.
Definition: rdc.h:178

References free_rx_iob(), netdev, NULL, net_device::priv, rdc_destroy_ring(), RDC_MCR0, RDC_NUM_RX_DESC, rdc_nic::regs, rdc_nic::rx, rdc_nic::rx_iobuf, rdc_nic::tx, and writew.

◆ rdc_transmit()

static int rdc_transmit ( struct net_device netdev,
struct io_buffer iobuf 
)
static

Transmit packet.

Parameters
netdevNetwork device
iobufI/O buffer
Return values
rcReturn status code

Definition at line 410 of file rdc.c.

410  {
411  struct rdc_nic *rdc = netdev->priv;
412  struct rdc_descriptor *tx;
413  unsigned int tx_idx;
414  int rc;
415 
416  /* Get next transmit descriptor */
417  if ( ( rdc->tx.prod - rdc->tx.cons ) >= RDC_NUM_TX_DESC ) {
418  DBGC ( rdc, "RDC %p out of transmit descriptors\n", rdc );
419  return -ENOBUFS;
420  }
421  tx_idx = ( rdc->tx.prod % RDC_NUM_TX_DESC );
422  tx = &rdc->tx.desc[tx_idx];
423 
424  /* Pad to minimum length */
425  iob_pad ( iobuf, ETH_ZLEN );
426 
427  /* Map I/O buffer */
428  if ( ( rc = iob_map_tx ( iobuf, rdc->dma ) ) != 0 )
429  return rc;
430 
431  /* Update producer index */
432  rdc->tx.prod++;
433 
434  /* Populate transmit descriptor */
435  tx->len = cpu_to_le16 ( iob_len ( iobuf ) );
436  tx->addr = cpu_to_le32 ( iob_dma ( iobuf ) );
437  wmb();
438  tx->flags = cpu_to_le16 ( RDC_FL_OWNED );
439  wmb();
440 
441  /* Notify card that there are packets ready to transmit */
442  writew ( RDC_MTPR_TM2TX, rdc->regs + RDC_MTPR );
443 
444  return 0;
445 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
wmb()
#define DBGC(...)
Definition: compiler.h:505
#define RDC_MTPR_TM2TX
Trigger MAC to transmit.
Definition: rdc.h:55
An RDC network card.
Definition: rdc.h:176
#define RDC_FL_OWNED
Descriptor is owned by NIC.
Definition: rdc.h:34
static __always_inline int iob_map_tx(struct io_buffer *iobuf, struct dma_device *dma)
Map I/O buffer for transmit DMA.
Definition: iobuf.h:240
An RDC descriptor.
Definition: rdc.h:20
#define RDC_NUM_TX_DESC
Number of transmit descriptors.
Definition: rdc.h:164
struct rdc_ring tx
Transmit descriptor ring.
Definition: rdc.h:187
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
static __always_inline physaddr_t iob_dma(struct io_buffer *iobuf)
Get I/O buffer DMA address.
Definition: iobuf.h:264
unsigned int prod
Producer index.
Definition: rdc.h:136
#define cpu_to_le32(value)
Definition: byteswap.h:107
unsigned int cons
Consumer index.
Definition: rdc.h:138
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
Definition: iobuf.h:155
struct dma_device * dma
DMA device.
Definition: rdc.h:180
#define ETH_ZLEN
Definition: if_ether.h:10
#define ENOBUFS
No buffer space available.
Definition: errno.h:498
#define RDC_MTPR
MAC transmit poll command register.
Definition: rdc.h:54
#define writew
Definition: w89c840.c:159
#define cpu_to_le16(value)
Definition: byteswap.h:106
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
void iob_pad(struct io_buffer *iobuf, size_t min_len)
Pad I/O buffer.
Definition: iobpad.c:49
void * regs
Registers.
Definition: rdc.h:178
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
Definition: wpa.h:237

References rdc_ring::cons, cpu_to_le16, cpu_to_le32, DBGC, rdc_ring::desc, rdc_nic::dma, ENOBUFS, ETH_ZLEN, iob_dma(), iob_len(), iob_map_tx(), iob_pad(), netdev, net_device::priv, rdc_ring::prod, rc, RDC_FL_OWNED, RDC_MTPR, RDC_MTPR_TM2TX, RDC_NUM_TX_DESC, rdc_nic::regs, rdc_nic::tx, tx, wmb(), and writew.

◆ rdc_poll_tx()

static void rdc_poll_tx ( struct net_device netdev)
static

Poll for completed packets.

Parameters
netdevNetwork device

Definition at line 452 of file rdc.c.

452  {
453  struct rdc_nic *rdc = netdev->priv;
454  struct rdc_descriptor *tx;
455  unsigned int tx_idx;
456 
457  /* Check for completed packets */
458  while ( rdc->tx.cons != rdc->tx.prod ) {
459 
460  /* Get next transmit descriptor */
461  tx_idx = ( rdc->tx.cons % RDC_NUM_TX_DESC );
462  tx = &rdc->tx.desc[tx_idx];
463 
464  /* Stop if descriptor is still in use */
465  if ( tx->flags & cpu_to_le16 ( RDC_FL_OWNED ) )
466  return;
467  DBGC2 ( rdc, "RDC %p TX %d complete\n", rdc, tx_idx );
468 
469  /* Complete transmit descriptor */
470  rdc->tx.cons++;
472  }
473 }
static void netdev_tx_complete_next(struct net_device *netdev)
Complete network transmission.
Definition: netdevice.h:764
An RDC network card.
Definition: rdc.h:176
#define RDC_FL_OWNED
Descriptor is owned by NIC.
Definition: rdc.h:34
An RDC descriptor.
Definition: rdc.h:20
#define RDC_NUM_TX_DESC
Number of transmit descriptors.
Definition: rdc.h:164
struct rdc_ring tx
Transmit descriptor ring.
Definition: rdc.h:187
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
unsigned int prod
Producer index.
Definition: rdc.h:136
unsigned int cons
Consumer index.
Definition: rdc.h:138
#define DBGC2(...)
Definition: compiler.h:522
#define cpu_to_le16(value)
Definition: byteswap.h:106
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
Definition: wpa.h:237

References rdc_ring::cons, cpu_to_le16, DBGC2, rdc_ring::desc, netdev, netdev_tx_complete_next(), net_device::priv, rdc_ring::prod, RDC_FL_OWNED, RDC_NUM_TX_DESC, rdc_nic::tx, and tx.

Referenced by rdc_poll().

◆ rdc_poll_rx()

static void rdc_poll_rx ( struct net_device netdev)
static

Poll for received packets.

Parameters
netdevNetwork device

Definition at line 480 of file rdc.c.

480  {
481  struct rdc_nic *rdc = netdev->priv;
482  struct rdc_descriptor *rx;
483  struct io_buffer *iobuf;
484  unsigned int rx_idx;
485  size_t len;
486 
487  /* Check for received packets */
488  while ( rdc->rx.cons != rdc->rx.prod ) {
489 
490  /* Get next receive descriptor */
491  rx_idx = ( rdc->rx.cons % RDC_NUM_RX_DESC );
492  rx = &rdc->rx.desc[rx_idx];
493 
494  /* Stop if descriptor is still in use */
495  if ( rx->flags & cpu_to_le16 ( RDC_FL_OWNED ) )
496  return;
497 
498  /* Populate I/O buffer */
499  iobuf = rdc->rx_iobuf[rx_idx];
500  rdc->rx_iobuf[rx_idx] = NULL;
501  len = le16_to_cpu ( rx->len );
502  iob_put ( iobuf, len );
503  iob_unput ( iobuf, 4 /* strip CRC */ );
504 
505  /* Hand off to network stack */
506  if ( rx->flags & cpu_to_le16 ( RDC_FL_OK ) ) {
507  DBGC2 ( rdc, "RDC %p RX %d complete (length %zd)\n",
508  rdc, rx_idx, len );
509  netdev_rx ( netdev, iobuf );
510  } else {
511  DBGC2 ( rdc, "RDC %p RX %d error (length %zd, "
512  "flags %#04x)\n", rdc, rx_idx, len,
513  le16_to_cpu ( rx->flags ) );
514  netdev_rx_err ( netdev, iobuf, -EIO );
515  }
516  rdc->rx.cons++;
517  }
518 }
#define iob_put(iobuf, len)
Definition: iobuf.h:120
void netdev_rx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard received packet.
Definition: netdevice.c:586
An RDC network card.
Definition: rdc.h:176
#define RDC_FL_OWNED
Descriptor is owned by NIC.
Definition: rdc.h:34
struct rdc_ring rx
Receive descriptor ring.
Definition: rdc.h:189
An RDC descriptor.
Definition: rdc.h:20
#define RDC_FL_OK
Packet OK.
Definition: rdc.h:37
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
unsigned int prod
Producer index.
Definition: rdc.h:136
struct io_buffer * rx_iobuf[RDC_NUM_RX_DESC]
Receive I/O buffers.
Definition: rdc.h:191
#define RDC_NUM_RX_DESC
Number of receive descriptors.
Definition: rdc.h:170
unsigned int cons
Consumer index.
Definition: rdc.h:138
#define iob_unput(iobuf, len)
Definition: iobuf.h:135
#define le16_to_cpu(value)
Definition: byteswap.h:112
void netdev_rx(struct net_device *netdev, struct io_buffer *iobuf)
Add packet to receive queue.
Definition: netdevice.c:548
uint32_t len
Length.
Definition: ena.h:14
#define DBGC2(...)
Definition: compiler.h:522
#define EIO
Input/output error.
Definition: errno.h:433
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.
Definition: wpa.h:234
#define cpu_to_le16(value)
Definition: byteswap.h:106
struct rdc_descriptor * desc
Descriptors.
Definition: rdc.h:132
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
A persistent I/O buffer.
Definition: iobuf.h:33

References rdc_ring::cons, cpu_to_le16, DBGC2, rdc_ring::desc, EIO, iob_put, iob_unput, le16_to_cpu, len, netdev, netdev_rx(), netdev_rx_err(), NULL, net_device::priv, rdc_ring::prod, RDC_FL_OK, RDC_FL_OWNED, RDC_NUM_RX_DESC, rdc_nic::rx, rx, and rdc_nic::rx_iobuf.

Referenced by rdc_poll().

◆ rdc_poll()

static void rdc_poll ( struct net_device netdev)
static

Poll for completed and received packets.

Parameters
netdevNetwork device

Definition at line 525 of file rdc.c.

525  {
526  struct rdc_nic *rdc = netdev->priv;
527  uint16_t misr;
528 
529  /* Check for (and acknowledge) interrupts */
530  misr = readw ( rdc->regs + RDC_MISR );
531 
532  /* Poll for TX completions, if applicable */
533  if ( misr & RDC_MIRQ_TX )
534  rdc_poll_tx ( netdev );
535 
536  /* Poll for RX completions, if applicable */
537  if ( misr & RDC_MIRQ_RX )
538  rdc_poll_rx ( netdev );
539 
540  /* Check link state, if applicable */
541  if ( misr & RDC_MIRQ_LINK )
543 
544  /* Check for unexpected interrupts */
545  if ( misr & ~( RDC_MIRQ_LINK | RDC_MIRQ_TX | RDC_MIRQ_RX_EARLY |
547  DBGC ( rdc, "RDC %p unexpected MISR %#04x\n", rdc, misr );
548  /* Report as a TX error */
550  }
551 
552  /* Refill receive ring */
553  rdc_refill_rx ( rdc );
554 }
unsigned short uint16_t
Definition: stdint.h:11
#define RDC_MIRQ_RX
Receive complete.
Definition: rdc.h:94
static int rdc_check_link(struct net_device *netdev)
Check link state.
Definition: rdc.c:210
void netdev_tx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard transmitted packet.
Definition: netdevice.c:440
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
#define DBGC(...)
Definition: compiler.h:505
An RDC network card.
Definition: rdc.h:176
#define ENOTSUP
Operation not supported.
Definition: errno.h:589
static void rdc_poll_tx(struct net_device *netdev)
Poll for completed packets.
Definition: rdc.c:452
static void rdc_poll_rx(struct net_device *netdev)
Poll for received packets.
Definition: rdc.c:480
#define RDC_MIRQ_RX_EARLY
Receive early interrupt.
Definition: rdc.h:92
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
#define RDC_MIRQ_RX_EMPTY
Receive descriptor unavailable.
Definition: rdc.h:93
#define RDC_MISR
MAC interrupt status register.
Definition: rdc.h:89
static void rdc_refill_rx(struct rdc_nic *rdc)
Refill receive descriptor ring.
Definition: rdc.c:296
#define RDC_MIRQ_LINK
Link status changed.
Definition: rdc.h:90
#define RDC_MIRQ_TX
Transmit complete.
Definition: rdc.h:91
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
void * regs
Registers.
Definition: rdc.h:178

References DBGC, ENOTSUP, netdev, netdev_tx_err(), NULL, net_device::priv, rdc_check_link(), RDC_MIRQ_LINK, RDC_MIRQ_RX, RDC_MIRQ_RX_EARLY, RDC_MIRQ_RX_EMPTY, RDC_MIRQ_TX, RDC_MISR, rdc_poll_rx(), rdc_poll_tx(), rdc_refill_rx(), readw(), and rdc_nic::regs.

◆ rdc_irq()

static void rdc_irq ( struct net_device netdev,
int  enable 
)
static

Enable or disable interrupts.

Parameters
netdevNetwork device
enableInterrupts should be enabled

Definition at line 562 of file rdc.c.

562  {
563  struct rdc_nic *rdc = netdev->priv;
564  uint16_t mier;
565 
566  /* Enable/disable interrupts */
567  mier = ( enable ? ( RDC_MIRQ_LINK | RDC_MIRQ_TX | RDC_MIRQ_RX ) : 0 );
568  writew ( mier, rdc->regs + RDC_MIER );
569 }
unsigned short uint16_t
Definition: stdint.h:11
#define RDC_MIRQ_RX
Receive complete.
Definition: rdc.h:94
An RDC network card.
Definition: rdc.h:176
#define RDC_MIER
MAC interrupt enable register.
Definition: rdc.h:97
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
#define writew
Definition: w89c840.c:159
#define RDC_MIRQ_LINK
Link status changed.
Definition: rdc.h:90
#define RDC_MIRQ_TX
Transmit complete.
Definition: rdc.h:91
void * regs
Registers.
Definition: rdc.h:178

References netdev, net_device::priv, RDC_MIER, RDC_MIRQ_LINK, RDC_MIRQ_RX, RDC_MIRQ_TX, rdc_nic::regs, and writew.

◆ rdc_probe()

static int rdc_probe ( struct pci_device pci)
static

Probe PCI device.

Parameters
pciPCI device
Return values
rcReturn status code

Definition at line 593 of file rdc.c.

593  {
594  struct net_device *netdev;
595  struct rdc_nic *rdc;
596  union rdc_mac mac;
597  int rc;
598 
599  /* Allocate and initialise net device */
600  netdev = alloc_etherdev ( sizeof ( *rdc ) );
601  if ( ! netdev ) {
602  rc = -ENOMEM;
603  goto err_alloc;
604  }
606  rdc = netdev->priv;
607  pci_set_drvdata ( pci, netdev );
608  netdev->dev = &pci->dev;
609  memset ( rdc, 0, sizeof ( *rdc ) );
610  rdc->dma = &pci->dma;
611  mdio_init ( &rdc->mdio, &rdc_mii_operations );
612  mii_init ( &rdc->mii, &rdc->mdio, 0 );
615 
616  /* Fix up PCI device */
617  adjust_pci_device ( pci );
618 
619  /* Map registers */
620  rdc->regs = pci_ioremap ( pci, pci->membase, RDC_BAR_SIZE );
621  if ( ! rdc->regs ) {
622  rc = -ENODEV;
623  goto err_ioremap;
624  }
625 
626  /* Fetch MAC address */
627  mac.mid[0] = cpu_to_le16 ( readw ( rdc->regs + RDC_MID0 ) );
628  mac.mid[1] = cpu_to_le16 ( readw ( rdc->regs + RDC_MID1 ) );
629  mac.mid[2] = cpu_to_le16 ( readw ( rdc->regs + RDC_MID2 ) );
630  memcpy ( netdev->hw_addr, mac.raw, ETH_ALEN );
631 
632  /* Reset the NIC */
633  if ( ( rc = rdc_reset ( rdc ) ) != 0 )
634  goto err_reset;
635 
636  /* Initialise PHY */
637  if ( ( rc = rdc_init_phy ( rdc ) ) != 0 )
638  goto err_init_phy;
639 
640  /* Register network device */
641  if ( ( rc = register_netdev ( netdev ) ) != 0 )
642  goto err_register_netdev;
643 
644  /* Set initial link state */
646 
647  return 0;
648 
650  err_register_netdev:
651  err_init_phy:
652  rdc_reset ( rdc );
653  err_reset:
654  iounmap ( rdc->regs );
655  err_ioremap:
657  netdev_put ( netdev );
658  err_alloc:
659  return rc;
660 }
unsigned long membase
Memory base.
Definition: pci.h:215
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
struct dma_device dma
DMA device.
Definition: pci.h:210
static void rdc_init_ring(struct rdc_ring *ring, unsigned int count, unsigned int reg)
Initialise descriptor ring.
Definition: rdc.h:154
#define RDC_MID2
MAC address word 2.
Definition: rdc.h:106
static int rdc_check_link(struct net_device *netdev)
Check link state.
Definition: rdc.c:210
#define RDC_MID1
MAC address word 1.
Definition: rdc.h:103
#define RDC_MTDSA
MAC transmit descriptor start address.
Definition: rdc.h:77
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
static int rdc_reset(struct rdc_nic *rdc)
Reset hardware.
Definition: rdc.c:58
uint8_t mac[ETH_ALEN]
MAC address.
Definition: ena.h:24
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
Definition: pci.c:154
struct device dev
Generic device.
Definition: pci.h:208
An RDC network card.
Definition: rdc.h:176
static void mdio_init(struct mii_interface *mdio, struct mii_operations *op)
Initialise MII interface.
Definition: mii.h:63
static struct mii_operations rdc_mii_operations
RDC MII operations.
Definition: rdc.c:166
struct rdc_ring rx
Receive descriptor ring.
Definition: rdc.h:189
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
Definition: netdevice.h:515
#define RDC_NUM_TX_DESC
Number of transmit descriptors.
Definition: rdc.h:164
#define RDC_MID0
MAC address word 0.
Definition: rdc.h:100
static void pci_set_drvdata(struct pci_device *pci, void *priv)
Set PCI driver-private data.
Definition: pci.h:359
#define ENOMEM
Not enough space.
Definition: errno.h:534
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
Definition: netdevice.h:572
struct rdc_ring tx
Transmit descriptor ring.
Definition: rdc.h:187
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
static struct net_device_operations rdc_operations
RDC network device operations.
Definition: rdc.c:572
void unregister_netdev(struct net_device *netdev)
Unregister network device.
Definition: netdevice.c:941
#define RDC_NUM_RX_DESC
Number of receive descriptors.
Definition: rdc.h:170
int register_netdev(struct net_device *netdev)
Register network device.
Definition: netdevice.c:759
A network device.
Definition: netdevice.h:352
#define ENODEV
No such device.
Definition: errno.h:509
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
Definition: netdevice.h:528
struct dma_device * dma
DMA device.
Definition: rdc.h:180
struct mii_interface mdio
MII interface.
Definition: rdc.h:182
#define ETH_ALEN
Definition: if_ether.h:8
#define RDC_BAR_SIZE
RDC BAR size.
Definition: rdc.h:17
A MAC address.
Definition: rdc.h:122
struct device * dev
Underlying hardware device.
Definition: netdevice.h:364
static int rdc_init_phy(struct rdc_nic *rdc)
Initialise PHY.
Definition: rdc.c:184
static void mii_init(struct mii_device *mii, struct mii_interface *mdio, unsigned int address)
Initialise MII device.
Definition: mii.h:75
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
Definition: ethernet.c:264
#define cpu_to_le16(value)
Definition: byteswap.h:106
void iounmap(volatile const void *io_addr)
Unmap I/O address.
#define RDC_MRDSA
MAC receive descriptor start address.
Definition: rdc.h:80
void * pci_ioremap(struct pci_device *pci, unsigned long bus_addr, size_t len)
Map PCI bus address as an I/O address.
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
Definition: netdevice.h:381
void * regs
Registers.
Definition: rdc.h:178
struct mii_device mii
MII device.
Definition: rdc.h:184
void * memset(void *dest, int character, size_t len) __nonnull

References adjust_pci_device(), alloc_etherdev(), cpu_to_le16, pci_device::dev, net_device::dev, rdc_nic::dma, pci_device::dma, ENODEV, ENOMEM, ETH_ALEN, net_device::hw_addr, iounmap(), mac, rdc_nic::mdio, mdio_init(), pci_device::membase, memcpy(), memset(), rdc_nic::mii, mii_init(), netdev, netdev_init(), netdev_nullify(), netdev_put(), pci_ioremap(), pci_set_drvdata(), net_device::priv, rc, RDC_BAR_SIZE, rdc_check_link(), rdc_init_phy(), rdc_init_ring(), RDC_MID0, RDC_MID1, RDC_MID2, rdc_mii_operations, RDC_MRDSA, RDC_MTDSA, RDC_NUM_RX_DESC, RDC_NUM_TX_DESC, rdc_operations, rdc_reset(), readw(), register_netdev(), rdc_nic::regs, rdc_nic::rx, rdc_nic::tx, and unregister_netdev().

◆ rdc_remove()

static void rdc_remove ( struct pci_device pci)
static

Remove PCI device.

Parameters
pciPCI device

Definition at line 667 of file rdc.c.

667  {
668  struct net_device *netdev = pci_get_drvdata ( pci );
669  struct rdc_nic *rdc = netdev->priv;
670 
671  /* Unregister network device */
673 
674  /* Reset card */
675  rdc_reset ( rdc );
676 
677  /* Free network device */
678  iounmap ( rdc->regs );
680  netdev_put ( netdev );
681 }
static int rdc_reset(struct rdc_nic *rdc)
Reset hardware.
Definition: rdc.c:58
An RDC network card.
Definition: rdc.h:176
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
Definition: netdevice.h:572
void * priv
Driver private data.
Definition: netdevice.h:431
static struct net_device * netdev
Definition: gdbudp.c:52
void unregister_netdev(struct net_device *netdev)
Unregister network device.
Definition: netdevice.c:941
A network device.
Definition: netdevice.h:352
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
Definition: netdevice.h:528
static void * pci_get_drvdata(struct pci_device *pci)
Get PCI driver-private data.
Definition: pci.h:369
void iounmap(volatile const void *io_addr)
Unmap I/O address.
void * regs
Registers.
Definition: rdc.h:178

References iounmap(), netdev, netdev_nullify(), netdev_put(), pci_get_drvdata(), net_device::priv, rdc_reset(), rdc_nic::regs, and unregister_netdev().

Variable Documentation

◆ rdc_mii_operations

struct mii_operations rdc_mii_operations
static
Initial value:
= {
.read = rdc_mii_read,
.write = rdc_mii_write,
}
static int rdc_mii_read(struct mii_interface *mdio, unsigned int phy, unsigned int reg)
Read from MII register.
Definition: rdc.c:100
static int rdc_mii_write(struct mii_interface *mdio, unsigned int phy, unsigned int reg, unsigned int data)
Write to MII register.
Definition: rdc.c:137

RDC MII operations.

Definition at line 166 of file rdc.c.

Referenced by rdc_probe().

◆ rdc_operations

struct net_device_operations rdc_operations
static
Initial value:
= {
.open = rdc_open,
.close = rdc_close,
.transmit = rdc_transmit,
.poll = rdc_poll,
.irq = rdc_irq,
}
static int rdc_open(struct net_device *netdev)
Open network device.
Definition: rdc.c:337
static void rdc_close(struct net_device *netdev)
Close network device.
Definition: rdc.c:382
static void rdc_irq(struct net_device *netdev, int enable)
Enable or disable interrupts.
Definition: rdc.c:562
static void rdc_poll(struct net_device *netdev)
Poll for completed and received packets.
Definition: rdc.c:525
static int rdc_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
Definition: rdc.c:410

RDC network device operations.

Definition at line 572 of file rdc.c.

Referenced by rdc_probe().

◆ rdc_nics

struct pci_device_id rdc_nics[]
static
Initial value:
= {
PCI_ROM ( 0x17f3, 0x6040, "r6040", "RDC R6040", 0 ),
}
#define PCI_ROM(_vendor, _device, _name, _description, _data)
Definition: pci.h:303

RDC PCI device IDs.

Definition at line 684 of file rdc.c.

◆ __pci_driver

struct pci_driver rdc_driver __pci_driver
Initial value:
= {
.ids = rdc_nics,
.id_count = ( sizeof ( rdc_nics ) / sizeof ( rdc_nics[0] ) ),
.probe = rdc_probe,
}
static int rdc_probe(struct pci_device *pci)
Probe PCI device.
Definition: rdc.c:593
static struct pci_device_id rdc_nics[]
RDC PCI device IDs.
Definition: rdc.c:684
static struct xen_remove_from_physmap * remove
Definition: xenmem.h:39
static void rdc_remove(struct pci_device *pci)
Remove PCI device.
Definition: rdc.c:667

RDC PCI driver.

Definition at line 689 of file rdc.c.