34 #if !defined(INCLUDE_NS8390) && !defined(INCLUDE_WD) && \ 35 !defined(INCLUDE_NE) && !defined(INCLUDE_3C503) 38 # define INCLUDE_NS8390 1 53 static unsigned char eth_laar;
61 static struct wd_board {
87 static unsigned char t503_output;
90 #if defined(INCLUDE_WD) 91 #define ASIC_PIO WD_IAR 92 #define eth_probe wd_probe 93 #if defined(INCLUDE_3C503) || defined(INCLUDE_NE) || defined(INCLUDE_NS8390) 94 Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE,
INCLUDE_NS8390 98 #if defined(INCLUDE_3C503) 99 #define eth_probe t503_probe 100 #if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || defined(INCLUDE_WD) 101 Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE,
INCLUDE_NS8390 105 #if defined(INCLUDE_NE) 106 #define eth_probe ne_probe 107 #if defined(INCLUDE_NS8390) || defined(INCLUDE_3C503) || defined(INCLUDE_WD) 108 Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE,
INCLUDE_NS8390 112 #if defined(INCLUDE_NS8390) 113 #define eth_probe nepci_probe 114 #if defined(INCLUDE_NE) || defined(INCLUDE_3C503) || defined(INCLUDE_WD) 115 Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE,
INCLUDE_NS8390 119 #if defined(INCLUDE_3C503) 120 #define ASIC_PIO _3COM_RFMSB 122 #if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) 123 #define ASIC_PIO NE_DATA 127 #if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || (defined(INCLUDE_3C503) && !defined(T503_SHMEM)) || (defined(INCLUDE_WD) && defined(WD_790_PIO)) 154 cnt = (cnt + 1) >> 1;
180 #ifdef COMPEX_RL2000_FIX 206 cnt = (cnt + 1) >> 1;
226 #ifdef COMPEX_RL2000_FIX 233 printf(
"Warning: Compex RL2000 aborted wait!\n");
254 unsigned char mcfilter[8];
256 memset(mcfilter, 0xFF, 8);
263 printf(
"Error SMC 83C690 Multicast filter read/write mishap %d\n",i);
349 #ifndef INCLUDE_3C503 410 #if defined(INCLUDE_3C503) || (defined(INCLUDE_WD) && ! defined(WD_790_PIO)) 417 *((
char *)eth_vmem+12) = t>>8;
418 *((
char *)eth_vmem+13) = t;
421 while (s <
ETH_ZLEN) *((
char *)eth_vmem+(s++)) = 0;
439 *((
char *)eth_vmem+12) = t>>8;
440 *((
char *)eth_vmem+13) = t;
443 while (s <
ETH_ZLEN) *((
char *)eth_vmem+(s++)) = 0;
453 #if defined(INCLUDE_3C503) 456 #if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || (defined(INCLUDE_3C503) && !defined(T503_SHMEM)) || (defined(INCLUDE_WD) && defined(WD_790_PIO)) 460 type = (t >> 8) | (t << 8);
470 #if defined(INCLUDE_3C503) 505 unsigned char rstat, curr,
next;
506 unsigned short len, frag;
507 unsigned short pktoff;
511 #ifndef INCLUDE_3C503 526 if (curr ==
next)
return(0);
528 if ( ! retrieve )
return 1;
548 pktoff +=
sizeof(pkthdr);
550 len = pkthdr.len - 4;
553 printf(
"Bogus packet, ignoring\n");
630 #ifdef INCLUDE_NS8390 637 #ifdef INCLUDE_NS8390 638 unsigned short pci_probe_addrs[] = { pci->
ioaddr, 0 };
639 unsigned short *probe_addrs = pci_probe_addrs;
651 struct wd_board *brd;
652 unsigned short chksum;
660 if ((chksum & 0xFF) == 0xFF &&
674 for (brd = wd_boards; brd->name; brd++)
675 if (brd->id ==
c)
break;
677 printf(
"Unknown WD/SMC NIC type %hhX\n",
c);
697 if (((
addr >> 4) & 3) == 0) {
720 ((
unsigned)(
eth_bmem >> 11) & 0x40) |
762 int iobase_reg, membase_reg;
763 static unsigned short base[] = {
764 0x300, 0x310, 0x330, 0x350,
765 0x250, 0x280, 0x2A0, 0x2E0, 0 };
787 if ((iobase_reg & (iobase_reg - 1)) ||
788 (membase_reg & (membase_reg - 1)))
795 switch (membase_reg) {
848 DBG (
", %s, MAC Addr %s\n",
nic->
flags ?
"AUI" :
"internal xcvr",
868 for(i = 0; i < 0x2000; ++i)
870 printf (
"Failed to clear 3c503 shared mem.\n");
881 #if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) 888 unsigned char romdata[16];
889 unsigned char testbuf[32];
891 static unsigned char test[] =
"NE*000 memory";
892 static unsigned short base[] = {
898 if (probe_addrs ==
NULL || probe_addrs[0] == 0)
901 for (idx = 0; (
eth_nic_base = probe_addrs[idx]) != 0; ++idx) {
916 #ifdef NS8390_FORCE_16BIT 947 DBG (
"\nNE%c000 base %4.4x, MAC Addr %s\n",
963 dev->devid.device_id =
htons(0x812a);
967 dev->devid.device_id =
htons(0x80f3);
971 dev->devid.device_id =
htons(0x80d6);
983 ISA_ROM(
"wd",
"WD8003/8013, SMC8216/8416, SMC 83c790 (EtherEZ)");
993 ISA_ROM(
"3c503",
"3Com503, Etherlink II[/16]");
1003 ISA_ROM(
"ne",
"NE1000/2000 and clones");
1006 #ifdef INCLUDE_NS8390 1009 PCI_ROM(0x1050, 0x0940,
"winbond940",
"Winbond NE2000-PCI", 0),
1010 PCI_ROM(0x1050, 0x5a5a,
"winbond940f",
"Winbond W89c940F", 0),
1011 PCI_ROM(0x10bd, 0x0e34,
"surecom-ne34",
"Surecom NE34", 0),
1012 PCI_ROM(0x10ec, 0x8029,
"rtl8029",
"Realtek 8029", 0),
1013 PCI_ROM(0x1106, 0x0926,
"via86c926",
"Via 86c926", 0),
1014 PCI_ROM(0x1186, 0x0300,
"dlink-528",
"D-Link DE-528", 0),
1015 PCI_ROM(0x11f6, 0x1401,
"compexrl2000",
"Compex ReadyLink 2000", 0),
1016 PCI_ROM(0x12c3, 0x0058,
"holtek80232",
"Holtek HT80232", 0),
1017 PCI_ROM(0x12c3, 0x5598,
"holtek80229",
"Holtek HT80229", 0),
1018 PCI_ROM(0x4a14, 0x5000,
"nv5000sc",
"NetVin NV5000SC", 0),
1019 PCI_ROM(0x8e2e, 0x3000,
"ktiet32p2",
"KTI ET32P2", 0),
static unsigned char eth_memsize
static struct pci_device_id nepci_nics[]
static __always_inline void off_t int c
int printf(const char *fmt,...)
Write a formatted string to the console.
uint16_t inw(volatile uint16_t *io_addr)
Read 16-bit word from I/O-mapped device.
uint32_t next
Next descriptor address.
#define outw(data, io_addr)
unsigned long ioaddr
I/O address.
static unsigned short eth_asic_base
#define D8390_COMMAND_PS1
uint32_t type
Operating system type.
PCI_DRIVER(nepci_driver, nepci_nics, PCI_NO_CLASS)
#define _3COM_STREG_DPRDY
static void eth_rx_overrun(struct nic *nic)
int dummy_connect(struct nic *nic __unused)
static unsigned char eth_vendor
static __always_inline void * bus_to_virt(unsigned long bus_addr)
Convert bus address to a virtual address.
static int ns8390_poll(struct nic *nic, int retrieve)
static struct nic_operations ns8390_operations
static void eth_pio_read(unsigned int src, unsigned char *dst, unsigned int cnt)
#define D8390_COMMAND_RD0
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static void ns8390_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p)
static unsigned char eth_flags
#define __unused
Declare a variable or data structure as unused.
#define D8390_COMMAND_RD1
#define GENERIC_ISAPNP_VENDOR
uint8_t id
Request identifier.
static void eth_pio_write(const unsigned char *src, unsigned int dst, unsigned int cnt)
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
static unsigned short eth_nic_base
static void ns8390_reset(struct nic *nic)
#define D8390_COMMAND_PS0
static void ns8390_disable(struct nic *nic)
#define _3COM_ASIC_OFFSET
#define COMPEX_RL2000_TRIES
uint8_t inb(volatile uint8_t *io_addr)
Read byte from I/O-mapped device.
A PCI device ID list entry.
#define __isa_driver
Declare an ISA driver.
#define ISA_ROM(IMAGE, DESCRIPTION)
#define D8390_COMMAND_RD2
#define D8390_COMMAND_TXP
unsigned char * node_addr
DRIVER("NE2000/PCI", nic_driver, pci_driver, nepci_driver, nepci_probe, ns8390_disable)
#define outb(data, io_addr)
#define D8390_COMMAND_STP
static unsigned char eth_rx_start
static void ns8390_irq(struct nic *nic __unused, irq_action_t action __unused)
static int ne_probe(struct nic *nic, struct isa_device *isa)
unsigned long currticks(void)
Get current system time in ticks.
#define DBG(...)
Print a debugging message.
struct nic_operations * nic_op
static unsigned char eth_tx_start
static unsigned char eth_drain_receiver
static void enable_multicast(unsigned short eth_nic_base)
int(* connect)(struct nic *)
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
#define NULL
NULL pointer (VOID *)
#define PCI_ROM(_vendor, _device, _name, _description, _data)
#define D8390_COMMAND_STA
void * memset(void *dest, int character, size_t len) __nonnull