34#if !defined(INCLUDE_NS8390) && !defined(INCLUDE_WD) && \
35 !defined(INCLUDE_NE) && !defined(INCLUDE_3C503)
38# define INCLUDE_NS8390 1
53static unsigned char eth_laar;
61static struct wd_board {
87static 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)
94Error 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)
101Error 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)
108Error 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)
115Error 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);
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;
526 if (curr ==
next)
return(0);
528 if ( ! retrieve )
return 1;
548 pktoff +=
sizeof(pkthdr);
553 printf(
"Bogus packet, ignoring\n");
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);
983ISA_ROM(
"wd",
"WD8003/8013, SMC8216/8416, SMC 83c790 (EtherEZ)");
993ISA_ROM(
"3c503",
"3Com503, Etherlink II[/16]");
1003ISA_ROM(
"ne",
"NE1000/2000 and clones");
1006#ifdef INCLUDE_NS8390
1009PCI_ROM(0x1050, 0x0940,
"winbond940",
"Winbond NE2000-PCI", 0),
1010PCI_ROM(0x1050, 0x5a5a,
"winbond940f",
"Winbond W89c940F", 0),
1011PCI_ROM(0x10bd, 0x0e34,
"surecom-ne34",
"Surecom NE34", 0),
1012PCI_ROM(0x10ec, 0x8029,
"rtl8029",
"Realtek 8029", 0),
1013PCI_ROM(0x1106, 0x0926,
"via86c926",
"Via 86c926", 0),
1014PCI_ROM(0x1186, 0x0300,
"dlink-528",
"D-Link DE-528", 0),
1015PCI_ROM(0x11f6, 0x1401,
"compexrl2000",
"Compex ReadyLink 2000", 0),
1016PCI_ROM(0x12c3, 0x0058,
"holtek80232",
"Holtek HT80232", 0),
1017PCI_ROM(0x12c3, 0x5598,
"holtek80229",
"Holtek HT80229", 0),
1018PCI_ROM(0x4a14, 0x5000,
"nv5000sc",
"NetVin NV5000SC", 0),
1019PCI_ROM(0x8e2e, 0x3000,
"ktiet32p2",
"KTI ET32P2", 0),
static unsigned short eth_nic_base
#define NULL
NULL pointer (VOID *)
uint32_t next
Next descriptor address.
uint32_t addr
Buffer address.
uint8_t id
Request identifier.
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.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define outb(data, io_addr)
static __always_inline void * bus_to_virt(unsigned long bus_addr)
Convert bus address to a virtual address.
#define outw(data, io_addr)
#define __isa_driver
Declare an ISA driver.
#define ISA_ROM(IMAGE, DESCRIPTION)
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
#define GENERIC_ISAPNP_VENDOR
int dummy_connect(struct nic *nic __unused)
static unsigned char eth_drain_receiver
static unsigned char eth_vendor
static int ne_probe(struct nic *nic, struct isa_device *isa)
static unsigned char eth_tx_start
static unsigned short eth_asic_base
static unsigned char eth_rx_start
static unsigned char eth_flags
static unsigned char eth_memsize
#define DRIVER(_name_text, _unused2, _unused3, _name, _probe, _disable, _fake_bss)
#define PCI_DRIVER(_name, _ids, _class)
struct @002057171240057303273132130141036221271355330106 no_fake_bss
static void enable_multicast(unsigned short eth_nic_base)
static int ns8390_poll(struct nic *nic, int retrieve)
static void ns8390_reset(struct nic *nic)
static struct pci_device_id nepci_nics[]
static void eth_rx_overrun(struct nic *nic)
static void eth_pio_write(const unsigned char *src, unsigned int dst, unsigned int cnt)
static struct nic_operations ns8390_operations
static void eth_pio_read(unsigned int src, unsigned char *dst, unsigned int cnt)
static void ns8390_irq(struct nic *nic __unused, irq_action_t action __unused)
static void ns8390_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p)
static void ns8390_disable(struct nic *nic, void *hwdev __unused)
#define D8390_COMMAND_STA
#define COMPEX_RL2000_TRIES
#define D8390_COMMAND_PS1
#define D8390_COMMAND_PS0
#define D8390_COMMAND_RD0
#define D8390_COMMAND_RD1
#define D8390_COMMAND_TXP
#define _3COM_STREG_DPRDY
#define _3COM_ASIC_OFFSET
#define D8390_COMMAND_RD2
#define D8390_COMMAND_STP
#define PCI_ROM(_vendor, _device, _name, _description, _data)
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
unsigned char * node_addr
struct nic_operations * nic_op
A PCI device ID list entry.
unsigned long ioaddr
I/O address.
unsigned long currticks(void)
Get current system time in ticks.
int printf(const char *fmt,...)
Write a formatted string to the console.