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_disable(struct nic *nic, void *hwdev __unused)
static void amd8111e_init_hw_default(struct amd8111e_priv *lp)
static int amd8111e_get_mac_address(struct amd8111e_priv *lp)
static void amd8111e_enable_interrupt(struct amd8111e_priv *lp)
static struct nic_operations amd8111e_operations
static void amd8111e_force_interrupt(struct amd8111e_priv *lp)
static struct pci_device_id amd8111e_nics[]
static int amd8111e_poll(struct nic *nic, int retrieve)
static void amd8111e_transmit(struct nic *nic, const char *dst_addr, unsigned int type, unsigned int size, const char *packet)
static void amd8111e_probe_ext_phy(struct amd8111e_priv *lp)
static void amd8111e_wait_link(struct amd8111e_priv *lp)
static int amd8111e_start(struct amd8111e_priv *lp)
static void amd8111e_disable_interrupt(struct amd8111e_priv *lp)
static void amd8111e_restart(struct amd8111e_priv *lp)
static void amd8111e_irq(struct nic *nic, irq_action_t action)
static int amd8111e_wait_tx_ring(struct amd8111e_priv *lp, unsigned int index)
static int amd8111e_init_tx_ring(struct amd8111e_priv *lp)
static int amd8111e_probe(struct nic *nic, struct pci_device *pdev)
static void amd8111e_poll_link(struct amd8111e_priv *lp)
static int amd8111e_init_rx_ring(struct amd8111e_priv *lp)
static int amd8111e_read_phy(struct amd8111e_priv *lp, int phy_addr, int reg, u32 *val)
#define XMT_RING_BASE_ADDR1
#define XMT_RING_BASE_ADDR0
#define RCV_RING_BASE_ADDR0
#define XMT_RING_BASE_ADDR2
#define XMT_RING_BASE_ADDR3
uint32_t type
Operating system type.
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
#define __unused
Declare a variable or data structure as unused.
#define DBG(...)
Print a debugging message.
uint16_t size
Buffer size.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define le16_to_cpu(value)
#define cpu_to_le32(value)
#define cpu_to_le16(value)
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
void iounmap(volatile const void *io_addr)
Unmap I/O address.
void * pci_ioremap(struct pci_device *pci, unsigned long bus_addr, size_t len)
Map PCI bus address as an I/O address.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
int dummy_connect(struct nic *nic __unused)
Media Independent Interface constants.
static unsigned int unsigned int reg
#define DRIVER(_name_text, _unused2, _unused3, _name, _probe, _disable, _fake_bss)
#define PCI_DRIVER(_name, _ids, _class)
unsigned long pci_bar_size(struct pci_device *pci, unsigned int reg)
Get the size of a PCI BAR.
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
unsigned long pci_bar_start(struct pci_device *pci, unsigned int reg)
Find the start of a PCI BAR.
#define PCI_ROM(_vendor, _device, _name, _description, _data)
#define PCI_BASE_ADDRESS_0
unsigned char rx_buf[NUM_RX_SLOTS][RX_BUF_LEN]
unsigned char tx_buf[NUM_TX_SLOTS][TX_BUF_LEN]
struct amd8111e_tx_desc tx_ring[NUM_TX_SLOTS]
struct amd8111e_rx_desc rx_ring[NUM_RX_SLOTS]
u8 data[ETH_FRAME_LEN - ETH_HLEN]
unsigned char * node_addr
struct nic_operations * nic_op
A PCI device ID list entry.
unsigned long ioaddr
I/O address.
uint8_t irq
Interrupt number.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
int printf(const char *fmt,...)
Write a formatted string to the console.