45 #define NUM_TX_SLOTS 2 46 #define NUM_RX_SLOTS 4 47 #define TX_SLOTS_MASK 1 48 #define RX_SLOTS_MASK 3 50 #define TX_BUF_LEN 1536 51 #define RX_BUF_LEN 1536 53 #define TX_PKT_LEN_MAX (ETH_FRAME_LEN - ETH_HLEN) 54 #define RX_PKT_LEN_MIN 60 55 #define RX_PKT_LEN_MAX ETH_FRAME_LEN 57 #define TX_TIMEOUT 3000 58 #define TX_PROCESS_TIME 10 59 #define TX_RETRY (TX_TIMEOUT / TX_PROCESS_TIME) 61 #define PHY_RW_RETRY 10 108 #define amd8111e NIC_FAKE_BSS ( struct amd8111e_priv ) 138 unsigned int reg_val;
139 void *mmio = lp->
mmio;
220 void *mmio = lp->
mmio;
273 void *mmio = lp->
mmio;
274 unsigned int reg_val;
293 *
val = reg_val & 0xffff;
303 void *mmio = lp->
mmio;
304 unsigned int reg_val;
332 for (i = 0x1e; i >= 0; i--) {
345 printf(
"Found MII PHY ID 0x%08x at address 0x%02x\n",
348 printf(
"Couldn't detect MII PHY, assuming address 0x01\n");
353 void *mmio = lp->
mmio;
365 void *mmio = lp->
mmio;
374 void *mmio = lp->
mmio;
383 void *mmio = lp->
mmio;
467 unsigned int status, speed;
490 printf(
"Link is up: %s Mbps %s duplex\n",
491 lp->
speed ?
"100" :
"10", lp->
duplex ?
"full" :
"half");
504 printf(
"\nStarting nic...\n");
511 printf(
"Waiting link up...\n");
531 printf(
"amd8111e_transmit(): too large packet, drop\n");
569 unsigned int index, pkt_ok;
655 unsigned long mmio_start, mmio_len;
663 memset(lp, 0,
sizeof(*lp));
679 PCI_ROM(0x1022, 0x7462,
"amd8111e",
"AMD8111E", 0),
static void amd8111e_force_interrupt(struct amd8111e_priv *lp)
uint8_t irq
Interrupt number.
uint8_t readb(volatile uint8_t *io_addr)
Read byte from memory-mapped device.
int printf(const char *fmt,...)
Write a formatted string to the console.
static unsigned int unsigned int reg
unsigned long ioaddr
I/O address.
#define XMT_RING_BASE_ADDR2
static struct pci_device_id amd8111e_nics[]
uint32_t type
Operating system type.
uint16_t size
Buffer size.
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
unsigned long pci_bar_size(struct pci_device *pci, unsigned int reg)
Get the size of a PCI BAR.
static int amd8111e_poll(struct nic *nic, int retrieve)
#define PCI_BASE_ADDRESS_0
static void amd8111e_irq(struct nic *nic, irq_action_t action)
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
int dummy_connect(struct nic *nic __unused)
struct amd8111e_tx_desc tx_ring[NUM_TX_SLOTS]
void writeb(uint8_t data, volatile uint8_t *io_addr)
Write byte to memory-mapped device.
static int amd8111e_read_phy(struct amd8111e_priv *lp, int phy_addr, int reg, u32 *val)
static int amd8111e_get_mac_address(struct amd8111e_priv *lp)
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
static void amd8111e_poll_link(struct amd8111e_priv *lp)
#define __unused
Declare a variable or data structure as unused.
#define XMT_RING_BASE_ADDR0
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
unsigned char tx_buf[NUM_TX_SLOTS][TX_BUF_LEN]
#define RCV_RING_BASE_ADDR0
unsigned long pci_bar_start(struct pci_device *pci, unsigned int reg)
Find the start of a PCI BAR.
static int amd8111e_start(struct amd8111e_priv *lp)
static int amd8111e_init_tx_ring(struct amd8111e_priv *lp)
#define cpu_to_le32(value)
static void amd8111e_wait_link(struct amd8111e_priv *lp)
static struct nic_operations amd8111e_operations
static void amd8111e_probe_ext_phy(struct amd8111e_priv *lp)
static void amd8111e_enable_interrupt(struct amd8111e_priv *lp)
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
static int amd8111e_probe(struct nic *nic, struct pci_device *pdev)
A PCI device ID list entry.
#define le16_to_cpu(value)
u8 data[ETH_FRAME_LEN - ETH_HLEN]
static void amd8111e_restart(struct amd8111e_priv *lp)
DRIVER("AMD8111E", nic_driver, pci_driver, amd8111e_driver, amd8111e_probe, amd8111e_disable, amd8111e)
static void amd8111e_init_hw_default(struct amd8111e_priv *lp)
static void amd8111e_disable_interrupt(struct amd8111e_priv *lp)
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
unsigned char * node_addr
static int amd8111e_init_rx_ring(struct amd8111e_priv *lp)
Media Independent Interface constants.
PCI_DRIVER(amd8111e_driver, amd8111e_nics, PCI_NO_CLASS)
#define cpu_to_le16(value)
void iounmap(volatile const void *io_addr)
Unmap I/O address.
FILE_LICENCE(GPL2_OR_LATER)
#define DBG(...)
Print a debugging message.
struct nic_operations * nic_op
unsigned char rx_buf[NUM_RX_SLOTS][RX_BUF_LEN]
void * pci_ioremap(struct pci_device *pci, unsigned long bus_addr, size_t len)
Map PCI bus address as an I/O address.
static void amd8111e_disable(struct nic *nic, void *hwdev __unused)
int(* connect)(struct nic *)
#define PCI_ROM(_vendor, _device, _name, _description, _data)
#define XMT_RING_BASE_ADDR3
static void amd8111e_transmit(struct nic *nic, const char *dst_addr, unsigned int type, unsigned int size, const char *packet)
static int amd8111e_wait_tx_ring(struct amd8111e_priv *lp, unsigned int index)
#define XMT_RING_BASE_ADDR1
void * memset(void *dest, int character, size_t len) __nonnull
struct amd8111e_rx_desc rx_ring[NUM_RX_SLOTS]