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 139 unsigned int reg_val;
221 void *mmio = lp->
mmio;
274 void *mmio = lp->
mmio;
275 unsigned int reg_val;
294 *
val = reg_val & 0xffff;
304 void *mmio = lp->
mmio;
305 unsigned int reg_val;
333 for (i = 0x1e; i >= 0; i--) {
346 printf(
"Found MII PHY ID 0x%08x at address 0x%02x\n",
349 printf(
"Couldn't detect MII PHY, assuming address 0x01\n");
354 void *mmio = lp->
mmio;
366 void *mmio = lp->
mmio;
375 void *mmio = lp->
mmio;
384 void *mmio = lp->
mmio;
468 unsigned int status, speed;
491 printf(
"Link is up: %s Mbps %s duplex\n",
492 lp->
speed ?
"100" :
"10", lp->
duplex ?
"full" :
"half");
505 printf(
"\nStarting nic...\n");
512 printf(
"Waiting link up...\n");
532 printf(
"amd8111e_transmit(): too large packet, drop\n");
570 unsigned int index, pkt_ok;
656 unsigned long mmio_start, mmio_len;
664 memset(lp, 0,
sizeof(*lp));
680 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.
uint8_t size
Entry size (in 32-bit words)
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
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)
DRIVER("AMD8111E", nic_driver, pci_driver, amd8111e_driver, amd8111e_probe, amd8111e_disable)
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)
static void amd8111e_disable(struct nic *nic)
#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)
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)
static struct amd8111e_priv amd8111e
#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.
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]