17c478bd9Sstevel@tonic-gate /************************************************************************** 27c478bd9Sstevel@tonic-gate ETHERBOOT - BOOTP/TFTP Bootstrap Program 37c478bd9Sstevel@tonic-gate 47c478bd9Sstevel@tonic-gate Author: Martin Renters 57c478bd9Sstevel@tonic-gate Date: Jun/94 67c478bd9Sstevel@tonic-gate 77c478bd9Sstevel@tonic-gate **************************************************************************/ 87c478bd9Sstevel@tonic-gate 97c478bd9Sstevel@tonic-gate #define VENDOR_NONE 0 107c478bd9Sstevel@tonic-gate #define VENDOR_WD 1 117c478bd9Sstevel@tonic-gate #define VENDOR_NOVELL 2 127c478bd9Sstevel@tonic-gate #define VENDOR_3COM 3 137c478bd9Sstevel@tonic-gate 147c478bd9Sstevel@tonic-gate #define FLAG_PIO 0x01 157c478bd9Sstevel@tonic-gate #define FLAG_16BIT 0x02 167c478bd9Sstevel@tonic-gate #define FLAG_790 0x04 177c478bd9Sstevel@tonic-gate 187c478bd9Sstevel@tonic-gate #define MEM_8192 32 197c478bd9Sstevel@tonic-gate #define MEM_16384 64 207c478bd9Sstevel@tonic-gate #define MEM_32768 128 217c478bd9Sstevel@tonic-gate 227c478bd9Sstevel@tonic-gate #define ISA_MAX_ADDR 0x400 237c478bd9Sstevel@tonic-gate 247c478bd9Sstevel@tonic-gate /************************************************************************** 257c478bd9Sstevel@tonic-gate Western Digital/SMC Board Definitions 267c478bd9Sstevel@tonic-gate **************************************************************************/ 277c478bd9Sstevel@tonic-gate #define WD_LOW_BASE 0x200 287c478bd9Sstevel@tonic-gate #define WD_HIGH_BASE 0x3e0 297c478bd9Sstevel@tonic-gate #ifndef WD_DEFAULT_MEM 307c478bd9Sstevel@tonic-gate #define WD_DEFAULT_MEM 0xD0000 317c478bd9Sstevel@tonic-gate #endif 327c478bd9Sstevel@tonic-gate #define WD_NIC_ADDR 0x10 337c478bd9Sstevel@tonic-gate 347c478bd9Sstevel@tonic-gate /************************************************************************** 357c478bd9Sstevel@tonic-gate Western Digital/SMC ASIC Addresses 367c478bd9Sstevel@tonic-gate **************************************************************************/ 377c478bd9Sstevel@tonic-gate #define WD_MSR 0x00 387c478bd9Sstevel@tonic-gate #define WD_ICR 0x01 397c478bd9Sstevel@tonic-gate #define WD_IAR 0x02 407c478bd9Sstevel@tonic-gate #define WD_BIO 0x03 417c478bd9Sstevel@tonic-gate #define WD_IRR 0x04 427c478bd9Sstevel@tonic-gate #define WD_LAAR 0x05 437c478bd9Sstevel@tonic-gate #define WD_IJR 0x06 447c478bd9Sstevel@tonic-gate #define WD_GP2 0x07 457c478bd9Sstevel@tonic-gate #define WD_LAR 0x08 467c478bd9Sstevel@tonic-gate #define WD_BID 0x0E 477c478bd9Sstevel@tonic-gate 487c478bd9Sstevel@tonic-gate #define WD_ICR_16BIT 0x01 497c478bd9Sstevel@tonic-gate 507c478bd9Sstevel@tonic-gate #define WD_MSR_MENB 0x40 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate #define WD_LAAR_L16EN 0x40 537c478bd9Sstevel@tonic-gate #define WD_LAAR_M16EN 0x80 547c478bd9Sstevel@tonic-gate 557c478bd9Sstevel@tonic-gate #define WD_SOFTCONFIG 0x20 567c478bd9Sstevel@tonic-gate 577c478bd9Sstevel@tonic-gate /************************************************************************** 587c478bd9Sstevel@tonic-gate Western Digital/SMC Board Types 597c478bd9Sstevel@tonic-gate **************************************************************************/ 607c478bd9Sstevel@tonic-gate #define TYPE_WD8003S 0x02 617c478bd9Sstevel@tonic-gate #define TYPE_WD8003E 0x03 627c478bd9Sstevel@tonic-gate #define TYPE_WD8013EBT 0x05 637c478bd9Sstevel@tonic-gate #define TYPE_WD8003W 0x24 647c478bd9Sstevel@tonic-gate #define TYPE_WD8003EB 0x25 657c478bd9Sstevel@tonic-gate #define TYPE_WD8013W 0x26 667c478bd9Sstevel@tonic-gate #define TYPE_WD8013EP 0x27 677c478bd9Sstevel@tonic-gate #define TYPE_WD8013WC 0x28 687c478bd9Sstevel@tonic-gate #define TYPE_WD8013EPC 0x29 697c478bd9Sstevel@tonic-gate #define TYPE_SMC8216T 0x2a 707c478bd9Sstevel@tonic-gate #define TYPE_SMC8216C 0x2b 717c478bd9Sstevel@tonic-gate #define TYPE_SMC8416T 0x00 /* Bogus entries: the 8416 generates the */ 727c478bd9Sstevel@tonic-gate #define TYPE_SMC8416C 0x00 /* the same codes as the 8216. */ 737c478bd9Sstevel@tonic-gate #define TYPE_SMC8013EBP 0x2c 747c478bd9Sstevel@tonic-gate 757c478bd9Sstevel@tonic-gate /************************************************************************** 767c478bd9Sstevel@tonic-gate 3com 3c503 definitions 777c478bd9Sstevel@tonic-gate **************************************************************************/ 787c478bd9Sstevel@tonic-gate 797c478bd9Sstevel@tonic-gate #ifndef _3COM_BASE 807c478bd9Sstevel@tonic-gate #define _3COM_BASE 0x300 817c478bd9Sstevel@tonic-gate #endif 827c478bd9Sstevel@tonic-gate 837c478bd9Sstevel@tonic-gate #define _3COM_TX_PAGE_OFFSET_8BIT 0x20 847c478bd9Sstevel@tonic-gate #define _3COM_TX_PAGE_OFFSET_16BIT 0x0 857c478bd9Sstevel@tonic-gate #define _3COM_RX_PAGE_OFFSET_16BIT 0x20 867c478bd9Sstevel@tonic-gate 877c478bd9Sstevel@tonic-gate #define _3COM_ASIC_OFFSET 0x400 887c478bd9Sstevel@tonic-gate #define _3COM_NIC_OFFSET 0x0 897c478bd9Sstevel@tonic-gate 907c478bd9Sstevel@tonic-gate #define _3COM_PSTR 0 917c478bd9Sstevel@tonic-gate #define _3COM_PSPR 1 927c478bd9Sstevel@tonic-gate 937c478bd9Sstevel@tonic-gate #define _3COM_BCFR 3 947c478bd9Sstevel@tonic-gate #define _3COM_BCFR_2E0 0x01 957c478bd9Sstevel@tonic-gate #define _3COM_BCFR_2A0 0x02 967c478bd9Sstevel@tonic-gate #define _3COM_BCFR_280 0x04 977c478bd9Sstevel@tonic-gate #define _3COM_BCFR_250 0x08 987c478bd9Sstevel@tonic-gate #define _3COM_BCFR_350 0x10 997c478bd9Sstevel@tonic-gate #define _3COM_BCFR_330 0x20 1007c478bd9Sstevel@tonic-gate #define _3COM_BCFR_310 0x40 1017c478bd9Sstevel@tonic-gate #define _3COM_BCFR_300 0x80 1027c478bd9Sstevel@tonic-gate #define _3COM_PCFR 4 1037c478bd9Sstevel@tonic-gate #define _3COM_PCFR_PIO 0 1047c478bd9Sstevel@tonic-gate #define _3COM_PCFR_C8000 0x10 1057c478bd9Sstevel@tonic-gate #define _3COM_PCFR_CC000 0x20 1067c478bd9Sstevel@tonic-gate #define _3COM_PCFR_D8000 0x40 1077c478bd9Sstevel@tonic-gate #define _3COM_PCFR_DC000 0x80 1087c478bd9Sstevel@tonic-gate #define _3COM_CR 6 1097c478bd9Sstevel@tonic-gate #define _3COM_CR_RST 0x01 /* Reset GA and NIC */ 1107c478bd9Sstevel@tonic-gate #define _3COM_CR_XSEL 0x02 /* Transceiver select. BNC=1(def) AUI=0 */ 1117c478bd9Sstevel@tonic-gate #define _3COM_CR_EALO 0x04 /* window EA PROM 0-15 to I/O base */ 1127c478bd9Sstevel@tonic-gate #define _3COM_CR_EAHI 0x08 /* window EA PROM 16-31 to I/O base */ 1137c478bd9Sstevel@tonic-gate #define _3COM_CR_SHARE 0x10 /* select interrupt sharing option */ 1147c478bd9Sstevel@tonic-gate #define _3COM_CR_DBSEL 0x20 /* Double buffer select */ 1157c478bd9Sstevel@tonic-gate #define _3COM_CR_DDIR 0x40 /* DMA direction select */ 1167c478bd9Sstevel@tonic-gate #define _3COM_CR_START 0x80 /* Start DMA controller */ 1177c478bd9Sstevel@tonic-gate #define _3COM_GACFR 5 1187c478bd9Sstevel@tonic-gate #define _3COM_GACFR_MBS0 0x01 1197c478bd9Sstevel@tonic-gate #define _3COM_GACFR_MBS1 0x02 1207c478bd9Sstevel@tonic-gate #define _3COM_GACFR_MBS2 0x04 1217c478bd9Sstevel@tonic-gate #define _3COM_GACFR_RSEL 0x08 /* enable shared memory */ 1227c478bd9Sstevel@tonic-gate #define _3COM_GACFR_TEST 0x10 /* for GA testing */ 1237c478bd9Sstevel@tonic-gate #define _3COM_GACFR_OWS 0x20 /* select 0WS access to GA */ 1247c478bd9Sstevel@tonic-gate #define _3COM_GACFR_TCM 0x40 /* Mask DMA interrupts */ 1257c478bd9Sstevel@tonic-gate #define _3COM_GACFR_NIM 0x80 /* Mask NIC interrupts */ 1267c478bd9Sstevel@tonic-gate #define _3COM_STREG 7 1277c478bd9Sstevel@tonic-gate #define _3COM_STREG_REV 0x07 /* GA revision */ 1287c478bd9Sstevel@tonic-gate #define _3COM_STREG_DIP 0x08 /* DMA in progress */ 1297c478bd9Sstevel@tonic-gate #define _3COM_STREG_DTC 0x10 /* DMA terminal count */ 1307c478bd9Sstevel@tonic-gate #define _3COM_STREG_OFLW 0x20 /* Overflow */ 1317c478bd9Sstevel@tonic-gate #define _3COM_STREG_UFLW 0x40 /* Underflow */ 1327c478bd9Sstevel@tonic-gate #define _3COM_STREG_DPRDY 0x80 /* Data port ready */ 1337c478bd9Sstevel@tonic-gate #define _3COM_IDCFR 8 1347c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_DRQ0 0x01 /* DMA request 1 select */ 1357c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_DRQ1 0x02 /* DMA request 2 select */ 1367c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_DRQ2 0x04 /* DMA request 3 select */ 1377c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_UNUSED 0x08 /* not used */ 1387c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_IRQ2 0x10 /* Interrupt request 2 select */ 1397c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_IRQ3 0x20 /* Interrupt request 3 select */ 1407c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_IRQ4 0x40 /* Interrupt request 4 select */ 1417c478bd9Sstevel@tonic-gate #define _3COM_IDCFR_IRQ5 0x80 /* Interrupt request 5 select */ 1427c478bd9Sstevel@tonic-gate #define _3COM_IRQ2 2 1437c478bd9Sstevel@tonic-gate #define _3COM_IRQ3 3 1447c478bd9Sstevel@tonic-gate #define _3COM_IRQ4 4 1457c478bd9Sstevel@tonic-gate #define _3COM_IRQ5 5 1467c478bd9Sstevel@tonic-gate #define _3COM_DAMSB 9 1477c478bd9Sstevel@tonic-gate #define _3COM_DALSB 0x0a 1487c478bd9Sstevel@tonic-gate #define _3COM_VPTR2 0x0b 1497c478bd9Sstevel@tonic-gate #define _3COM_VPTR1 0x0c 1507c478bd9Sstevel@tonic-gate #define _3COM_VPTR0 0x0d 1517c478bd9Sstevel@tonic-gate #define _3COM_RFMSB 0x0e 1527c478bd9Sstevel@tonic-gate #define _3COM_RFLSB 0x0f 1537c478bd9Sstevel@tonic-gate 1547c478bd9Sstevel@tonic-gate /************************************************************************** 1557c478bd9Sstevel@tonic-gate NE1000/2000 definitions 1567c478bd9Sstevel@tonic-gate **************************************************************************/ 1577c478bd9Sstevel@tonic-gate #define NE_ASIC_OFFSET 0x10 1587c478bd9Sstevel@tonic-gate #define NE_RESET 0x0F /* Used to reset card */ 1597c478bd9Sstevel@tonic-gate #define NE_DATA 0x00 /* Used to read/write NIC mem */ 1607c478bd9Sstevel@tonic-gate 1617c478bd9Sstevel@tonic-gate #define COMPEX_RL2000_TRIES 200 1627c478bd9Sstevel@tonic-gate 1637c478bd9Sstevel@tonic-gate /************************************************************************** 1647c478bd9Sstevel@tonic-gate 8390 Register Definitions 1657c478bd9Sstevel@tonic-gate **************************************************************************/ 1667c478bd9Sstevel@tonic-gate #define D8390_P0_COMMAND 0x00 1677c478bd9Sstevel@tonic-gate #define D8390_P0_PSTART 0x01 1687c478bd9Sstevel@tonic-gate #define D8390_P0_PSTOP 0x02 1697c478bd9Sstevel@tonic-gate #define D8390_P0_BOUND 0x03 1707c478bd9Sstevel@tonic-gate #define D8390_P0_TSR 0x04 1717c478bd9Sstevel@tonic-gate #define D8390_P0_TPSR 0x04 1727c478bd9Sstevel@tonic-gate #define D8390_P0_TBCR0 0x05 1737c478bd9Sstevel@tonic-gate #define D8390_P0_TBCR1 0x06 1747c478bd9Sstevel@tonic-gate #define D8390_P0_ISR 0x07 1757c478bd9Sstevel@tonic-gate #define D8390_P0_RSAR0 0x08 1767c478bd9Sstevel@tonic-gate #define D8390_P0_RSAR1 0x09 1777c478bd9Sstevel@tonic-gate #define D8390_P0_RBCR0 0x0A 1787c478bd9Sstevel@tonic-gate #define D8390_P0_RBCR1 0x0B 1797c478bd9Sstevel@tonic-gate #define D8390_P0_RSR 0x0C 1807c478bd9Sstevel@tonic-gate #define D8390_P0_RCR 0x0C 1817c478bd9Sstevel@tonic-gate #define D8390_P0_TCR 0x0D 1827c478bd9Sstevel@tonic-gate #define D8390_P0_DCR 0x0E 1837c478bd9Sstevel@tonic-gate #define D8390_P0_IMR 0x0F 1847c478bd9Sstevel@tonic-gate #define D8390_P1_COMMAND 0x00 1857c478bd9Sstevel@tonic-gate #define D8390_P1_PAR0 0x01 1867c478bd9Sstevel@tonic-gate #define D8390_P1_PAR1 0x02 1877c478bd9Sstevel@tonic-gate #define D8390_P1_PAR2 0x03 1887c478bd9Sstevel@tonic-gate #define D8390_P1_PAR3 0x04 1897c478bd9Sstevel@tonic-gate #define D8390_P1_PAR4 0x05 1907c478bd9Sstevel@tonic-gate #define D8390_P1_PAR5 0x06 1917c478bd9Sstevel@tonic-gate #define D8390_P1_CURR 0x07 1927c478bd9Sstevel@tonic-gate #define D8390_P1_MAR0 0x08 1937c478bd9Sstevel@tonic-gate 1947c478bd9Sstevel@tonic-gate #define D8390_COMMAND_PS0 0x0 /* Page 0 select */ 1957c478bd9Sstevel@tonic-gate #define D8390_COMMAND_PS1 0x40 /* Page 1 select */ 1967c478bd9Sstevel@tonic-gate #define D8390_COMMAND_PS2 0x80 /* Page 2 select */ 1977c478bd9Sstevel@tonic-gate #define D8390_COMMAND_RD2 0x20 /* Remote DMA control */ 1987c478bd9Sstevel@tonic-gate #define D8390_COMMAND_RD1 0x10 1997c478bd9Sstevel@tonic-gate #define D8390_COMMAND_RD0 0x08 2007c478bd9Sstevel@tonic-gate #define D8390_COMMAND_TXP 0x04 /* transmit packet */ 2017c478bd9Sstevel@tonic-gate #define D8390_COMMAND_STA 0x02 /* start */ 2027c478bd9Sstevel@tonic-gate #define D8390_COMMAND_STP 0x01 /* stop */ 2037c478bd9Sstevel@tonic-gate 2047c478bd9Sstevel@tonic-gate #define D8390_RCR_MON 0x20 /* monitor mode */ 2057c478bd9Sstevel@tonic-gate 2067c478bd9Sstevel@tonic-gate #define D8390_DCR_FT1 0x40 2077c478bd9Sstevel@tonic-gate #define D8390_DCR_LS 0x08 /* Loopback select */ 2087c478bd9Sstevel@tonic-gate #define D8390_DCR_WTS 0x01 /* Word transfer select */ 2097c478bd9Sstevel@tonic-gate 2107c478bd9Sstevel@tonic-gate #define D8390_ISR_PRX 0x01 /* successful recv */ 2117c478bd9Sstevel@tonic-gate #define D8390_ISR_PTX 0x02 /* successful xmit */ 2127c478bd9Sstevel@tonic-gate #define D8390_ISR_RXE 0x04 /* receive error */ 2137c478bd9Sstevel@tonic-gate #define D8390_ISR_TXE 0x08 /* transmit error */ 2147c478bd9Sstevel@tonic-gate #define D8390_ISR_OVW 0x10 /* Overflow */ 2157c478bd9Sstevel@tonic-gate #define D8390_ISR_CNT 0x20 /* Counter overflow */ 2167c478bd9Sstevel@tonic-gate #define D8390_ISR_RDC 0x40 /* Remote DMA complete */ 2177c478bd9Sstevel@tonic-gate #define D8390_ISR_RST 0x80 /* reset */ 2187c478bd9Sstevel@tonic-gate 2197c478bd9Sstevel@tonic-gate #define D8390_RSTAT_PRX 0x01 /* successful recv */ 2207c478bd9Sstevel@tonic-gate #define D8390_RSTAT_CRC 0x02 /* CRC error */ 2217c478bd9Sstevel@tonic-gate #define D8390_RSTAT_FAE 0x04 /* Frame alignment error */ 2227c478bd9Sstevel@tonic-gate #define D8390_RSTAT_OVER 0x08 /* FIFO overrun */ 2237c478bd9Sstevel@tonic-gate 2247c478bd9Sstevel@tonic-gate #define D8390_TXBUF_SIZE 6 2257c478bd9Sstevel@tonic-gate #define D8390_RXBUF_END 32 2267c478bd9Sstevel@tonic-gate #define D8390_PAGE_SIZE 256 2277c478bd9Sstevel@tonic-gate 2287c478bd9Sstevel@tonic-gate struct ringbuffer { 2297c478bd9Sstevel@tonic-gate unsigned char status; 2307c478bd9Sstevel@tonic-gate unsigned char next; 2317c478bd9Sstevel@tonic-gate unsigned short len; 2327c478bd9Sstevel@tonic-gate }; 2337c478bd9Sstevel@tonic-gate /* 2347c478bd9Sstevel@tonic-gate * Local variables: 2357c478bd9Sstevel@tonic-gate * c-basic-offset: 8 2367c478bd9Sstevel@tonic-gate * End: 2377c478bd9Sstevel@tonic-gate */ 2387c478bd9Sstevel@tonic-gate 239