81 DBGC ( rdc,
"RDC %p timed out waiting for reset\n", rdc );
124 DBGC ( rdc,
"RDC %p timed out waiting for MII read\n", rdc );
138 unsigned int reg,
unsigned int data ) {
161 DBGC ( rdc,
"RDC %p timed out waiting for MII write\n", rdc );
189 DBGC ( rdc,
"RDC %p could not find PHY address: %s\n",
196 DBGC ( rdc,
"RDC %p could not reset PHY: %s\n",
216 DBGC ( rdc,
"RDC %p could not check link: %s\n",
239 size_t len = ( ring->
count *
sizeof ( ring->
desc[0] ) );
252 for ( i = 0 ; i < ring->
count ; i++ ) {
263 DBGC ( rdc,
"RDC %p ring %#02x is at [%08lx,%08lx)\n",
276 size_t len = ( ring->
count *
sizeof ( ring->
desc[0] ) );
325 DBGC2 ( rdc,
"RDC %p RX %d is [%lx,%lx)\n",
418 DBGC ( rdc,
"RDC %p out of transmit descriptors\n", rdc );
467 DBGC2 ( rdc,
"RDC %p TX %d complete\n", rdc, tx_idx );
507 DBGC2 ( rdc,
"RDC %p RX %d complete (length %zd)\n",
511 DBGC2 ( rdc,
"RDC %p RX %d error (length %zd, " 512 "flags %#04x)\n", rdc, rx_idx,
len,
547 DBGC ( rdc,
"RDC %p unexpected MISR %#04x\n", rdc, misr );
609 memset ( rdc, 0,
sizeof ( *rdc ) );
642 goto err_register_netdev;
685 PCI_ROM ( 0x17f3, 0x6040,
"r6040",
"RDC R6040", 0 ),
unsigned long membase
Memory base.
struct arbelprm_rc_send_wqe rc
static int rdc_create_ring(struct rdc_nic *rdc, struct rdc_ring *ring)
Create descriptor ring.
#define iob_put(iobuf, len)
struct dma_device dma
DMA device.
void netdev_rx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard received packet.
#define RDC_MIRQ_RX
Receive complete.
#define RDC_MACSM
MAC state machine register.
static unsigned int unsigned int reg
#define RDC_MCR0_TXEN
Transmit enable.
static void rdc_init_ring(struct rdc_ring *ring, unsigned int count, unsigned int reg)
Initialise descriptor ring.
#define RDC_MID2
MAC address word 2.
static int rdc_check_link(struct net_device *netdev)
Check link state.
int(* open)(struct net_device *netdev)
Open network device.
#define RDC_MID1
MAC address word 1.
static void rdc_destroy_ring(struct rdc_nic *rdc, struct rdc_ring *ring)
Destroy descriptor ring.
uint32_t next
Next descriptor address.
void netdev_tx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard transmitted packet.
#define RDC_MMDIO_PHYAD(x)
PHY address.
#define RDC_MTDSA
MAC transmit descriptor start address.
#define RDC_MMWD
MAC MDIO write data register.
uint16_t readw(volatile uint16_t *io_addr)
Read 16-bit word from memory-mapped device.
static void netdev_tx_complete_next(struct net_device *netdev)
Complete network transmission.
struct pci_device_id * ids
PCI ID table.
#define RDC_MACSM_RESET_DELAY_MS
Time to wait after resetting MAC state machine.
int(* read)(struct mii_interface *mdio, unsigned int phy, unsigned int reg)
Read from MII register.
static int rdc_reset(struct rdc_nic *rdc)
Reset hardware.
static int rdc_open(struct net_device *netdev)
Open network device.
uint64_t desc
Microcode descriptor list physical address.
#define RDC_MTPR_TM2TX
Trigger MAC to transmit.
static int rdc_mii_read(struct mii_interface *mdio, unsigned int phy, unsigned int reg)
Read from MII register.
#define RDC_MPSCCR
MAC PHY status change configuration register.
uint8_t mac[ETH_ALEN]
MAC address.
#define RDC_MACSM_RST
Reset state machine.
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
struct pci_driver rdc_driver __pci_driver
RDC PCI driver.
static __always_inline unsigned long virt_to_phys(volatile const void *addr)
Convert virtual address to a physical address.
static int rdc_mii_write(struct mii_interface *mdio, unsigned int phy, unsigned int reg, unsigned int data)
Write to MII register.
struct device dev
Generic device.
#define RDC_MMRD
MAC MDIO read data register.
#define RDC_FL_OWNED
Descriptor is owned by NIC.
#define RDC_MIER
MAC interrupt enable register.
#define ENOTSUP
Operation not supported.
static void mdio_init(struct mii_interface *mdio, struct mii_operations *op)
Initialise MII interface.
static struct mii_operations rdc_mii_operations
RDC MII operations.
struct rdc_ring rx
Receive descriptor ring.
Dynamic memory allocation.
static __always_inline int iob_map_tx(struct io_buffer *iobuf, struct dma_device *dma)
Map I/O buffer for transmit DMA.
uint32_t start
Starting offset.
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
#define RDC_NUM_TX_DESC
Number of transmit descriptors.
#define RDC_MID0
MAC address word 0.
static void pci_set_drvdata(struct pci_device *pci, void *priv)
Set PCI driver-private data.
struct dma_mapping map
Descriptor ring DMA mapping.
#define ENOMEM
Not enough space.
#define RDC_MMDIO_MIIWR
MDIO write.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define RDC_MRBSR
MAC receive buffer size register.
static void rdc_poll_tx(struct net_device *netdev)
Poll for completed packets.
#define RDC_FL_OK
Packet OK.
#define RDC_MCR0_PROMISC
Promiscuous mode.
static void rdc_poll_rx(struct net_device *netdev)
Poll for received packets.
void dma_free(struct dma_mapping *map, void *addr, size_t len)
Unmap and free DMA-coherent buffer.
static void rdc_close(struct net_device *netdev)
Close network device.
static int rdc_probe(struct pci_device *pci)
Probe PCI device.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
#define container_of(ptr, type, field)
Get containing structure.
#define RDC_MIRQ_RX_EARLY
Receive early interrupt.
struct rdc_ring tx
Transmit descriptor ring.
void * priv
Driver private data.
#define RDC_MPSCCR_SLOW
Poll slowly.
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
static struct net_device * netdev
static __always_inline physaddr_t iob_dma(struct io_buffer *iobuf)
Get I/O buffer DMA address.
static struct net_device_operations rdc_operations
RDC network device operations.
unsigned int prod
Producer index.
struct io_buffer * rx_iobuf[RDC_NUM_RX_DESC]
Receive I/O buffers.
void unregister_netdev(struct net_device *netdev)
Unregister network device.
unsigned int reg
Start address register 0.
#define cpu_to_le32(value)
#define RDC_NUM_RX_DESC
Number of receive descriptors.
unsigned int cons
Consumer index.
#define iob_unput(iobuf, len)
static struct pci_device_id rdc_nics[]
RDC PCI device IDs.
char * strerror(int errno)
Retrieve string representation of error number.
struct io_buffer * alloc_rx_iob(size_t len, struct dma_device *dma)
Allocate and map I/O buffer for receive DMA.
#define RDC_MMDIO_REGAD(x)
Register address.
int register_netdev(struct net_device *netdev)
Register network device.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
RDC R6040 network driver.
#define ENODEV
No such device.
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
struct dma_device * dma
DMA device.
struct mii_interface mdio
MII interface.
#define RDC_MCR0_RXEN
Receive enable.
int mii_reset(struct mii_device *mii)
Reset MII device.
A PCI device ID list entry.
#define RDC_MIRQ_RX_EMPTY
Receive descriptor unavailable.
#define le16_to_cpu(value)
int mii_check_link(struct mii_device *mii, struct net_device *netdev)
Update link status via MII.
#define RDC_MPSCCR_EN
PHY status change enable.
static struct xen_remove_from_physmap * remove
#define RDC_BAR_SIZE
RDC BAR size.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
Network device operations.
void netdev_rx(struct net_device *netdev, struct io_buffer *iobuf)
Add packet to receive queue.
struct device * dev
Underlying hardware device.
static int rdc_init_phy(struct rdc_nic *rdc)
Initialise PHY.
static void mii_init(struct mii_device *mii, struct mii_interface *mdio, unsigned int address)
Initialise MII device.
void * dma_alloc(struct dma_device *dma, struct dma_mapping *map, size_t len, size_t align)
Allocate and map DMA-coherent buffer.
Network device management.
MII interface operations.
#define RDC_RESET_MAX_WAIT_MS
Maximum time to wait for reset.
static void * pci_get_drvdata(struct pci_device *pci)
Get PCI driver-private data.
int mii_find(struct mii_device *mii)
Find PHY address.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
static void rdc_remove(struct pci_device *pci)
Remove PCI device.
unsigned int count
Number of descriptors.
void free_rx_iob(struct io_buffer *iobuf)
Unmap and free I/O buffer for receive DMA.
#define ENOBUFS
No buffer space available.
#define RDC_MTPR
MAC transmit poll command register.
#define RDC_MMDIO_MIIRD
MDIO read.
int(* probe)(struct pci_device *pci)
Probe device.
void * data
Start of data.
#define EIO
Input/output error.
#define RDC_MxDSA_HI
MAC descriptor start address low half.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.
#define RDC_MCR0
MAC control register 0.
#define cpu_to_le16(value)
void iounmap(volatile const void *io_addr)
Unmap I/O address.
uint8_t data[48]
Additional event data.
struct rdc_descriptor * desc
Descriptors.
unsigned int address
PHY address.
#define RDC_MMDIO
MAC MDIO control register.
#define RDC_MISR
MAC interrupt status register.
#define RDC_MCR1_RST
MAC reset.
static void rdc_refill_rx(struct rdc_nic *rdc)
Refill receive descriptor ring.
#define RDC_MIRQ_LINK
Link status changed.
#define RDC_MIRQ_TX
Transmit complete.
#define RDC_MRDSA
MAC receive descriptor start address.
#define RDC_MxDSA_LO
MAC descriptor start address low half.
static __always_inline physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
void * pci_ioremap(struct pci_device *pci, unsigned long bus_addr, size_t len)
Map PCI bus address as an I/O address.
#define RDC_MPSCCR_PHYAD(x)
PHY address.
#define RDC_RX_MAX_LEN
Receive buffer length.
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
#define NULL
NULL pointer (VOID *)
#define ETIMEDOUT
Connection timed out.
#define PCI_ROM(_vendor, _device, _name, _description, _data)
void iob_pad(struct io_buffer *iobuf, size_t min_len)
Pad I/O buffer.
#define RDC_MCR1
MAC control register 1.
static void rdc_irq(struct net_device *netdev, int enable)
Enable or disable interrupts.
struct mii_device mii
MII device.
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
#define RDC_MII_MAX_WAIT_US
Maximum time to wait for an MII read or write.
static void rdc_poll(struct net_device *netdev)
Poll for completed and received packets.
void * memset(void *dest, int character, size_t len) __nonnull
#define RDC_MCR0_FD
Full duplex.
static int rdc_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.