11da177e4SLinus Torvalds /* Copyright, 1988-1992, Russell Nelson, Crynwr Software 21da177e4SLinus Torvalds 31da177e4SLinus Torvalds This program is free software; you can redistribute it and/or modify 41da177e4SLinus Torvalds it under the terms of the GNU General Public License as published by 51da177e4SLinus Torvalds the Free Software Foundation, version 1. 61da177e4SLinus Torvalds 71da177e4SLinus Torvalds This program is distributed in the hope that it will be useful, 81da177e4SLinus Torvalds but WITHOUT ANY WARRANTY; without even the implied warranty of 91da177e4SLinus Torvalds MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 101da177e4SLinus Torvalds GNU General Public License for more details. 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds You should have received a copy of the GNU General Public License 131da177e4SLinus Torvalds along with this program; if not, write to the Free Software 141da177e4SLinus Torvalds Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 151da177e4SLinus Torvalds */ 161da177e4SLinus Torvalds 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds #define PP_ChipID 0x0000 /* offset 0h -> Corp -ID */ 191da177e4SLinus Torvalds /* offset 2h -> Model/Product Number */ 201da177e4SLinus Torvalds /* offset 3h -> Chip Revision Number */ 211da177e4SLinus Torvalds 221da177e4SLinus Torvalds #define PP_ISAIOB 0x0020 /* IO base address */ 231da177e4SLinus Torvalds #define PP_CS8900_ISAINT 0x0022 /* ISA interrupt select */ 241da177e4SLinus Torvalds #define PP_CS8920_ISAINT 0x0370 /* ISA interrupt select */ 251da177e4SLinus Torvalds #define PP_CS8900_ISADMA 0x0024 /* ISA Rec DMA channel */ 261da177e4SLinus Torvalds #define PP_CS8920_ISADMA 0x0374 /* ISA Rec DMA channel */ 271da177e4SLinus Torvalds #define PP_ISASOF 0x0026 /* ISA DMA offset */ 281da177e4SLinus Torvalds #define PP_DmaFrameCnt 0x0028 /* ISA DMA Frame count */ 291da177e4SLinus Torvalds #define PP_DmaByteCnt 0x002A /* ISA DMA Byte count */ 301da177e4SLinus Torvalds #define PP_CS8900_ISAMemB 0x002C /* Memory base */ 311da177e4SLinus Torvalds #define PP_CS8920_ISAMemB 0x0348 /* */ 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds #define PP_ISABootBase 0x0030 /* Boot Prom base */ 341da177e4SLinus Torvalds #define PP_ISABootMask 0x0034 /* Boot Prom Mask */ 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds /* EEPROM data and command registers */ 371da177e4SLinus Torvalds #define PP_EECMD 0x0040 /* NVR Interface Command register */ 381da177e4SLinus Torvalds #define PP_EEData 0x0042 /* NVR Interface Data Register */ 391da177e4SLinus Torvalds #define PP_DebugReg 0x0044 /* Debug Register */ 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds #define PP_RxCFG 0x0102 /* Rx Bus config */ 421da177e4SLinus Torvalds #define PP_RxCTL 0x0104 /* Receive Control Register */ 431da177e4SLinus Torvalds #define PP_TxCFG 0x0106 /* Transmit Config Register */ 441da177e4SLinus Torvalds #define PP_TxCMD 0x0108 /* Transmit Command Register */ 451da177e4SLinus Torvalds #define PP_BufCFG 0x010A /* Bus configuration Register */ 461da177e4SLinus Torvalds #define PP_LineCTL 0x0112 /* Line Config Register */ 471da177e4SLinus Torvalds #define PP_SelfCTL 0x0114 /* Self Command Register */ 481da177e4SLinus Torvalds #define PP_BusCTL 0x0116 /* ISA bus control Register */ 491da177e4SLinus Torvalds #define PP_TestCTL 0x0118 /* Test Register */ 501da177e4SLinus Torvalds #define PP_AutoNegCTL 0x011C /* Auto Negotiation Ctrl */ 511da177e4SLinus Torvalds 521da177e4SLinus Torvalds #define PP_ISQ 0x0120 /* Interrupt Status */ 531da177e4SLinus Torvalds #define PP_RxEvent 0x0124 /* Rx Event Register */ 541da177e4SLinus Torvalds #define PP_TxEvent 0x0128 /* Tx Event Register */ 551da177e4SLinus Torvalds #define PP_BufEvent 0x012C /* Bus Event Register */ 561da177e4SLinus Torvalds #define PP_RxMiss 0x0130 /* Receive Miss Count */ 571da177e4SLinus Torvalds #define PP_TxCol 0x0132 /* Transmit Collision Count */ 581da177e4SLinus Torvalds #define PP_LineST 0x0134 /* Line State Register */ 591da177e4SLinus Torvalds #define PP_SelfST 0x0136 /* Self State register */ 601da177e4SLinus Torvalds #define PP_BusST 0x0138 /* Bus Status */ 611da177e4SLinus Torvalds #define PP_TDR 0x013C /* Time Domain Reflectometry */ 621da177e4SLinus Torvalds #define PP_AutoNegST 0x013E /* Auto Neg Status */ 631da177e4SLinus Torvalds #define PP_TxCommand 0x0144 /* Tx Command */ 641da177e4SLinus Torvalds #define PP_TxLength 0x0146 /* Tx Length */ 651da177e4SLinus Torvalds #define PP_LAF 0x0150 /* Hash Table */ 661da177e4SLinus Torvalds #define PP_IA 0x0158 /* Physical Address Register */ 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds #define PP_RxStatus 0x0400 /* Receive start of frame */ 691da177e4SLinus Torvalds #define PP_RxLength 0x0402 /* Receive Length of frame */ 701da177e4SLinus Torvalds #define PP_RxFrame 0x0404 /* Receive frame pointer */ 711da177e4SLinus Torvalds #define PP_TxFrame 0x0A00 /* Transmit frame pointer */ 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds /* Primary I/O Base Address. If no I/O base is supplied by the user, then this */ 741da177e4SLinus Torvalds /* can be used as the default I/O base to access the PacketPage Area. */ 751da177e4SLinus Torvalds #define DEFAULTIOBASE 0x0300 761da177e4SLinus Torvalds #define FIRST_IO 0x020C /* First I/O port to check */ 771da177e4SLinus Torvalds #define LAST_IO 0x037C /* Last I/O port to check (+10h) */ 781da177e4SLinus Torvalds #define ADD_MASK 0x3000 /* Mask it use of the ADD_PORT register */ 791da177e4SLinus Torvalds #define ADD_SIG 0x3000 /* Expected ID signature */ 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds /* On Macs, we only need use the ISA I/O stuff until we do MEMORY_ON */ 821da177e4SLinus Torvalds #ifdef CONFIG_MAC 831da177e4SLinus Torvalds #define LCSLOTBASE 0xfee00000 841da177e4SLinus Torvalds #define MMIOBASE 0x40000 851da177e4SLinus Torvalds #endif 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds #define CHIP_EISA_ID_SIG 0x630E /* Product ID Code for Crystal Chip (CS8900 spec 4.3) */ 8801bdc033SDenis Vlasenko #define CHIP_EISA_ID_SIG_STR "0x630E" 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds #ifdef IBMEIPKT 911da177e4SLinus Torvalds #define EISA_ID_SIG 0x4D24 /* IBM */ 921da177e4SLinus Torvalds #define PART_NO_SIG 0x1010 /* IBM */ 931da177e4SLinus Torvalds #define MONGOOSE_BIT 0x0000 /* IBM */ 941da177e4SLinus Torvalds #else 951da177e4SLinus Torvalds #define EISA_ID_SIG 0x630E /* PnP Vendor ID (same as chip id for Crystal board) */ 961da177e4SLinus Torvalds #define PART_NO_SIG 0x4000 /* ID code CS8920 board (PnP Vendor Product code) */ 971da177e4SLinus Torvalds #define MONGOOSE_BIT 0x2000 /* PART_NO_SIG + MONGOOSE_BUT => ID of mongoose */ 981da177e4SLinus Torvalds #endif 991da177e4SLinus Torvalds 1001da177e4SLinus Torvalds #define PRODUCT_ID_ADD 0x0002 /* Address of product ID */ 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds /* Mask to find out the types of registers */ 1031da177e4SLinus Torvalds #define REG_TYPE_MASK 0x001F 1041da177e4SLinus Torvalds 1051da177e4SLinus Torvalds /* Eeprom Commands */ 1061da177e4SLinus Torvalds #define ERSE_WR_ENBL 0x00F0 1071da177e4SLinus Torvalds #define ERSE_WR_DISABLE 0x0000 1081da177e4SLinus Torvalds 1091da177e4SLinus Torvalds /* Defines Control/Config register quintuplet numbers */ 1101da177e4SLinus Torvalds #define RX_BUF_CFG 0x0003 1111da177e4SLinus Torvalds #define RX_CONTROL 0x0005 1121da177e4SLinus Torvalds #define TX_CFG 0x0007 1131da177e4SLinus Torvalds #define TX_COMMAND 0x0009 1141da177e4SLinus Torvalds #define BUF_CFG 0x000B 1151da177e4SLinus Torvalds #define LINE_CONTROL 0x0013 1161da177e4SLinus Torvalds #define SELF_CONTROL 0x0015 1171da177e4SLinus Torvalds #define BUS_CONTROL 0x0017 1181da177e4SLinus Torvalds #define TEST_CONTROL 0x0019 1191da177e4SLinus Torvalds 1201da177e4SLinus Torvalds /* Defines Status/Count registers quintuplet numbers */ 1211da177e4SLinus Torvalds #define RX_EVENT 0x0004 1221da177e4SLinus Torvalds #define TX_EVENT 0x0008 1231da177e4SLinus Torvalds #define BUF_EVENT 0x000C 1241da177e4SLinus Torvalds #define RX_MISS_COUNT 0x0010 1251da177e4SLinus Torvalds #define TX_COL_COUNT 0x0012 1261da177e4SLinus Torvalds #define LINE_STATUS 0x0014 1271da177e4SLinus Torvalds #define SELF_STATUS 0x0016 1281da177e4SLinus Torvalds #define BUS_STATUS 0x0018 1291da177e4SLinus Torvalds #define TDR 0x001C 1301da177e4SLinus Torvalds 1311da177e4SLinus Torvalds /* PP_RxCFG - Receive Configuration and Interrupt Mask bit definition - Read/write */ 1321da177e4SLinus Torvalds #define SKIP_1 0x0040 1331da177e4SLinus Torvalds #define RX_STREAM_ENBL 0x0080 1341da177e4SLinus Torvalds #define RX_OK_ENBL 0x0100 1351da177e4SLinus Torvalds #define RX_DMA_ONLY 0x0200 1361da177e4SLinus Torvalds #define AUTO_RX_DMA 0x0400 1371da177e4SLinus Torvalds #define BUFFER_CRC 0x0800 1381da177e4SLinus Torvalds #define RX_CRC_ERROR_ENBL 0x1000 1391da177e4SLinus Torvalds #define RX_RUNT_ENBL 0x2000 1401da177e4SLinus Torvalds #define RX_EXTRA_DATA_ENBL 0x4000 1411da177e4SLinus Torvalds 1421da177e4SLinus Torvalds /* PP_RxCTL - Receive Control bit definition - Read/write */ 1431da177e4SLinus Torvalds #define RX_IA_HASH_ACCEPT 0x0040 1441da177e4SLinus Torvalds #define RX_PROM_ACCEPT 0x0080 1451da177e4SLinus Torvalds #define RX_OK_ACCEPT 0x0100 1461da177e4SLinus Torvalds #define RX_MULTCAST_ACCEPT 0x0200 1471da177e4SLinus Torvalds #define RX_IA_ACCEPT 0x0400 1481da177e4SLinus Torvalds #define RX_BROADCAST_ACCEPT 0x0800 1491da177e4SLinus Torvalds #define RX_BAD_CRC_ACCEPT 0x1000 1501da177e4SLinus Torvalds #define RX_RUNT_ACCEPT 0x2000 1511da177e4SLinus Torvalds #define RX_EXTRA_DATA_ACCEPT 0x4000 1521da177e4SLinus Torvalds #define RX_ALL_ACCEPT (RX_PROM_ACCEPT|RX_BAD_CRC_ACCEPT|RX_RUNT_ACCEPT|RX_EXTRA_DATA_ACCEPT) 1531da177e4SLinus Torvalds /* Default receive mode - individually addressed, broadcast, and error free */ 1541da177e4SLinus Torvalds #define DEF_RX_ACCEPT (RX_IA_ACCEPT | RX_BROADCAST_ACCEPT | RX_OK_ACCEPT) 1551da177e4SLinus Torvalds 1561da177e4SLinus Torvalds /* PP_TxCFG - Transmit Configuration Interrupt Mask bit definition - Read/write */ 1571da177e4SLinus Torvalds #define TX_LOST_CRS_ENBL 0x0040 1581da177e4SLinus Torvalds #define TX_SQE_ERROR_ENBL 0x0080 1591da177e4SLinus Torvalds #define TX_OK_ENBL 0x0100 1601da177e4SLinus Torvalds #define TX_LATE_COL_ENBL 0x0200 1611da177e4SLinus Torvalds #define TX_JBR_ENBL 0x0400 1621da177e4SLinus Torvalds #define TX_ANY_COL_ENBL 0x0800 1631da177e4SLinus Torvalds #define TX_16_COL_ENBL 0x8000 1641da177e4SLinus Torvalds 1651da177e4SLinus Torvalds /* PP_TxCMD - Transmit Command bit definition - Read-only */ 1661da177e4SLinus Torvalds #define TX_START_4_BYTES 0x0000 1671da177e4SLinus Torvalds #define TX_START_64_BYTES 0x0040 1681da177e4SLinus Torvalds #define TX_START_128_BYTES 0x0080 1691da177e4SLinus Torvalds #define TX_START_ALL_BYTES 0x00C0 1701da177e4SLinus Torvalds #define TX_FORCE 0x0100 1711da177e4SLinus Torvalds #define TX_ONE_COL 0x0200 1721da177e4SLinus Torvalds #define TX_TWO_PART_DEFF_DISABLE 0x0400 1731da177e4SLinus Torvalds #define TX_NO_CRC 0x1000 1741da177e4SLinus Torvalds #define TX_RUNT 0x2000 1751da177e4SLinus Torvalds 1761da177e4SLinus Torvalds /* PP_BufCFG - Buffer Configuration Interrupt Mask bit definition - Read/write */ 1771da177e4SLinus Torvalds #define GENERATE_SW_INTERRUPT 0x0040 1781da177e4SLinus Torvalds #define RX_DMA_ENBL 0x0080 1791da177e4SLinus Torvalds #define READY_FOR_TX_ENBL 0x0100 1801da177e4SLinus Torvalds #define TX_UNDERRUN_ENBL 0x0200 1811da177e4SLinus Torvalds #define RX_MISS_ENBL 0x0400 1821da177e4SLinus Torvalds #define RX_128_BYTE_ENBL 0x0800 1831da177e4SLinus Torvalds #define TX_COL_COUNT_OVRFLOW_ENBL 0x1000 1841da177e4SLinus Torvalds #define RX_MISS_COUNT_OVRFLOW_ENBL 0x2000 1851da177e4SLinus Torvalds #define RX_DEST_MATCH_ENBL 0x8000 1861da177e4SLinus Torvalds 1871da177e4SLinus Torvalds /* PP_LineCTL - Line Control bit definition - Read/write */ 1881da177e4SLinus Torvalds #define SERIAL_RX_ON 0x0040 1891da177e4SLinus Torvalds #define SERIAL_TX_ON 0x0080 1901da177e4SLinus Torvalds #define AUI_ONLY 0x0100 1911da177e4SLinus Torvalds #define AUTO_AUI_10BASET 0x0200 1921da177e4SLinus Torvalds #define MODIFIED_BACKOFF 0x0800 1931da177e4SLinus Torvalds #define NO_AUTO_POLARITY 0x1000 1941da177e4SLinus Torvalds #define TWO_PART_DEFDIS 0x2000 1951da177e4SLinus Torvalds #define LOW_RX_SQUELCH 0x4000 1961da177e4SLinus Torvalds 1971da177e4SLinus Torvalds /* PP_SelfCTL - Software Self Control bit definition - Read/write */ 1981da177e4SLinus Torvalds #define POWER_ON_RESET 0x0040 1991da177e4SLinus Torvalds #define SW_STOP 0x0100 2001da177e4SLinus Torvalds #define SLEEP_ON 0x0200 2011da177e4SLinus Torvalds #define AUTO_WAKEUP 0x0400 2021da177e4SLinus Torvalds #define HCB0_ENBL 0x1000 2031da177e4SLinus Torvalds #define HCB1_ENBL 0x2000 2041da177e4SLinus Torvalds #define HCB0 0x4000 2051da177e4SLinus Torvalds #define HCB1 0x8000 2061da177e4SLinus Torvalds 2071da177e4SLinus Torvalds /* PP_BusCTL - ISA Bus Control bit definition - Read/write */ 2081da177e4SLinus Torvalds #define RESET_RX_DMA 0x0040 2091da177e4SLinus Torvalds #define MEMORY_ON 0x0400 2101da177e4SLinus Torvalds #define DMA_BURST_MODE 0x0800 2111da177e4SLinus Torvalds #define IO_CHANNEL_READY_ON 0x1000 2121da177e4SLinus Torvalds #define RX_DMA_SIZE_64K 0x2000 2131da177e4SLinus Torvalds #define ENABLE_IRQ 0x8000 2141da177e4SLinus Torvalds 2151da177e4SLinus Torvalds /* PP_TestCTL - Test Control bit definition - Read/write */ 2161da177e4SLinus Torvalds #define LINK_OFF 0x0080 2171da177e4SLinus Torvalds #define ENDEC_LOOPBACK 0x0200 2181da177e4SLinus Torvalds #define AUI_LOOPBACK 0x0400 2191da177e4SLinus Torvalds #define BACKOFF_OFF 0x0800 2201da177e4SLinus Torvalds #define FDX_8900 0x4000 2211da177e4SLinus Torvalds #define FAST_TEST 0x8000 2221da177e4SLinus Torvalds 2231da177e4SLinus Torvalds /* PP_RxEvent - Receive Event Bit definition - Read-only */ 2241da177e4SLinus Torvalds #define RX_IA_HASHED 0x0040 2251da177e4SLinus Torvalds #define RX_DRIBBLE 0x0080 2261da177e4SLinus Torvalds #define RX_OK 0x0100 2271da177e4SLinus Torvalds #define RX_HASHED 0x0200 2281da177e4SLinus Torvalds #define RX_IA 0x0400 2291da177e4SLinus Torvalds #define RX_BROADCAST 0x0800 2301da177e4SLinus Torvalds #define RX_CRC_ERROR 0x1000 2311da177e4SLinus Torvalds #define RX_RUNT 0x2000 2321da177e4SLinus Torvalds #define RX_EXTRA_DATA 0x4000 2331da177e4SLinus Torvalds 2341da177e4SLinus Torvalds #define HASH_INDEX_MASK 0x0FC00 2351da177e4SLinus Torvalds 2361da177e4SLinus Torvalds /* PP_TxEvent - Transmit Event Bit definition - Read-only */ 2371da177e4SLinus Torvalds #define TX_LOST_CRS 0x0040 2381da177e4SLinus Torvalds #define TX_SQE_ERROR 0x0080 2391da177e4SLinus Torvalds #define TX_OK 0x0100 2401da177e4SLinus Torvalds #define TX_LATE_COL 0x0200 2411da177e4SLinus Torvalds #define TX_JBR 0x0400 2421da177e4SLinus Torvalds #define TX_16_COL 0x8000 2431da177e4SLinus Torvalds #define TX_SEND_OK_BITS (TX_OK|TX_LOST_CRS) 2441da177e4SLinus Torvalds #define TX_COL_COUNT_MASK 0x7800 2451da177e4SLinus Torvalds 2461da177e4SLinus Torvalds /* PP_BufEvent - Buffer Event Bit definition - Read-only */ 2471da177e4SLinus Torvalds #define SW_INTERRUPT 0x0040 2481da177e4SLinus Torvalds #define RX_DMA 0x0080 2491da177e4SLinus Torvalds #define READY_FOR_TX 0x0100 2501da177e4SLinus Torvalds #define TX_UNDERRUN 0x0200 2511da177e4SLinus Torvalds #define RX_MISS 0x0400 2521da177e4SLinus Torvalds #define RX_128_BYTE 0x0800 2531da177e4SLinus Torvalds #define TX_COL_OVRFLW 0x1000 2541da177e4SLinus Torvalds #define RX_MISS_OVRFLW 0x2000 2551da177e4SLinus Torvalds #define RX_DEST_MATCH 0x8000 2561da177e4SLinus Torvalds 2571da177e4SLinus Torvalds /* PP_LineST - Ethernet Line Status bit definition - Read-only */ 2581da177e4SLinus Torvalds #define LINK_OK 0x0080 2591da177e4SLinus Torvalds #define AUI_ON 0x0100 2601da177e4SLinus Torvalds #define TENBASET_ON 0x0200 2611da177e4SLinus Torvalds #define POLARITY_OK 0x1000 2621da177e4SLinus Torvalds #define CRS_OK 0x4000 2631da177e4SLinus Torvalds 2641da177e4SLinus Torvalds /* PP_SelfST - Chip Software Status bit definition */ 2651da177e4SLinus Torvalds #define ACTIVE_33V 0x0040 2661da177e4SLinus Torvalds #define INIT_DONE 0x0080 2671da177e4SLinus Torvalds #define SI_BUSY 0x0100 2681da177e4SLinus Torvalds #define EEPROM_PRESENT 0x0200 2691da177e4SLinus Torvalds #define EEPROM_OK 0x0400 2701da177e4SLinus Torvalds #define EL_PRESENT 0x0800 2711da177e4SLinus Torvalds #define EE_SIZE_64 0x1000 2721da177e4SLinus Torvalds 2731da177e4SLinus Torvalds /* PP_BusST - ISA Bus Status bit definition */ 2741da177e4SLinus Torvalds #define TX_BID_ERROR 0x0080 2751da177e4SLinus Torvalds #define READY_FOR_TX_NOW 0x0100 2761da177e4SLinus Torvalds 2771da177e4SLinus Torvalds /* PP_AutoNegCTL - Auto Negotiation Control bit definition */ 2781da177e4SLinus Torvalds #define RE_NEG_NOW 0x0040 2791da177e4SLinus Torvalds #define ALLOW_FDX 0x0080 2801da177e4SLinus Torvalds #define AUTO_NEG_ENABLE 0x0100 2811da177e4SLinus Torvalds #define NLP_ENABLE 0x0200 2821da177e4SLinus Torvalds #define FORCE_FDX 0x8000 2831da177e4SLinus Torvalds #define AUTO_NEG_BITS (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE) 2841da177e4SLinus Torvalds #define AUTO_NEG_MASK (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE|ALLOW_FDX|RE_NEG_NOW) 2851da177e4SLinus Torvalds 2861da177e4SLinus Torvalds /* PP_AutoNegST - Auto Negotiation Status bit definition */ 2871da177e4SLinus Torvalds #define AUTO_NEG_BUSY 0x0080 2881da177e4SLinus Torvalds #define FLP_LINK 0x0100 2891da177e4SLinus Torvalds #define FLP_LINK_GOOD 0x0800 2901da177e4SLinus Torvalds #define LINK_FAULT 0x1000 2911da177e4SLinus Torvalds #define HDX_ACTIVE 0x4000 2921da177e4SLinus Torvalds #define FDX_ACTIVE 0x8000 2931da177e4SLinus Torvalds 2941da177e4SLinus Torvalds /* The following block defines the ISQ event types */ 2951da177e4SLinus Torvalds #define ISQ_RECEIVER_EVENT 0x04 2961da177e4SLinus Torvalds #define ISQ_TRANSMITTER_EVENT 0x08 2971da177e4SLinus Torvalds #define ISQ_BUFFER_EVENT 0x0c 2981da177e4SLinus Torvalds #define ISQ_RX_MISS_EVENT 0x10 2991da177e4SLinus Torvalds #define ISQ_TX_COL_EVENT 0x12 3001da177e4SLinus Torvalds 3011da177e4SLinus Torvalds #define ISQ_EVENT_MASK 0x003F /* ISQ mask to find out type of event */ 3021da177e4SLinus Torvalds #define ISQ_HIST 16 /* small history buffer */ 3031da177e4SLinus Torvalds #define AUTOINCREMENT 0x8000 /* Bit mask to set bit-15 for autoincrement */ 3041da177e4SLinus Torvalds 3051da177e4SLinus Torvalds #define TXRXBUFSIZE 0x0600 3061da177e4SLinus Torvalds #define RXDMABUFSIZE 0x8000 3071da177e4SLinus Torvalds #define RXDMASIZE 0x4000 3081da177e4SLinus Torvalds #define TXRX_LENGTH_MASK 0x07FF 3091da177e4SLinus Torvalds 3101da177e4SLinus Torvalds /* rx options bits */ 3111da177e4SLinus Torvalds #define RCV_WITH_RXON 1 /* Set SerRx ON */ 3121da177e4SLinus Torvalds #define RCV_COUNTS 2 /* Use Framecnt1 */ 3131da177e4SLinus Torvalds #define RCV_PONG 4 /* Pong respondent */ 3141da177e4SLinus Torvalds #define RCV_DONG 8 /* Dong operation */ 3151da177e4SLinus Torvalds #define RCV_POLLING 0x10 /* Poll RxEvent */ 3161da177e4SLinus Torvalds #define RCV_ISQ 0x20 /* Use ISQ, int */ 3171da177e4SLinus Torvalds #define RCV_AUTO_DMA 0x100 /* Set AutoRxDMAE */ 3181da177e4SLinus Torvalds #define RCV_DMA 0x200 /* Set RxDMA only */ 3191da177e4SLinus Torvalds #define RCV_DMA_ALL 0x400 /* Copy all DMA'ed */ 3201da177e4SLinus Torvalds #define RCV_FIXED_DATA 0x800 /* Every frame same */ 3211da177e4SLinus Torvalds #define RCV_IO 0x1000 /* Use ISA IO only */ 3221da177e4SLinus Torvalds #define RCV_MEMORY 0x2000 /* Use ISA Memory */ 3231da177e4SLinus Torvalds 3241da177e4SLinus Torvalds #define RAM_SIZE 0x1000 /* The card has 4k bytes or RAM */ 3251da177e4SLinus Torvalds #define PKT_START PP_TxFrame /* Start of packet RAM */ 3261da177e4SLinus Torvalds 3273b68d70dSLennert Buytenhek #define RX_FRAME_PORT 0x0000 3281da177e4SLinus Torvalds #define TX_FRAME_PORT RX_FRAME_PORT 3293b68d70dSLennert Buytenhek #define TX_CMD_PORT 0x0004 3301da177e4SLinus Torvalds #define TX_NOW 0x0000 /* Tx packet after 5 bytes copied */ 3311da177e4SLinus Torvalds #define TX_AFTER_381 0x0040 /* Tx packet after 381 bytes copied */ 3321da177e4SLinus Torvalds #define TX_AFTER_ALL 0x00c0 /* Tx packet after all bytes copied */ 3333b68d70dSLennert Buytenhek #define TX_LEN_PORT 0x0006 3343b68d70dSLennert Buytenhek #define ISQ_PORT 0x0008 3353b68d70dSLennert Buytenhek #define ADD_PORT 0x000A 3363b68d70dSLennert Buytenhek #define DATA_PORT 0x000C 3371da177e4SLinus Torvalds 3381da177e4SLinus Torvalds #define EEPROM_WRITE_EN 0x00F0 3391da177e4SLinus Torvalds #define EEPROM_WRITE_DIS 0x0000 3401da177e4SLinus Torvalds #define EEPROM_WRITE_CMD 0x0100 3411da177e4SLinus Torvalds #define EEPROM_READ_CMD 0x0200 3421da177e4SLinus Torvalds 3431da177e4SLinus Torvalds /* Receive Header */ 3441da177e4SLinus Torvalds /* Description of header of each packet in receive area of memory */ 3451da177e4SLinus Torvalds #define RBUF_EVENT_LOW 0 /* Low byte of RxEvent - status of received frame */ 3461da177e4SLinus Torvalds #define RBUF_EVENT_HIGH 1 /* High byte of RxEvent - status of received frame */ 3471da177e4SLinus Torvalds #define RBUF_LEN_LOW 2 /* Length of received data - low byte */ 3481da177e4SLinus Torvalds #define RBUF_LEN_HI 3 /* Length of received data - high byte */ 3491da177e4SLinus Torvalds #define RBUF_HEAD_LEN 4 /* Length of this header */ 3501da177e4SLinus Torvalds 3511da177e4SLinus Torvalds #define CHIP_READ 0x1 /* Used to mark state of the repins code (chip or dma) */ 3521da177e4SLinus Torvalds #define DMA_READ 0x2 /* Used to mark state of the repins code (chip or dma) */ 3531da177e4SLinus Torvalds 3541da177e4SLinus Torvalds /* for bios scan */ 3551da177e4SLinus Torvalds /* */ 3561da177e4SLinus Torvalds #ifdef CSDEBUG 3571da177e4SLinus Torvalds /* use these values for debugging bios scan */ 3581da177e4SLinus Torvalds #define BIOS_START_SEG 0x00000 3591da177e4SLinus Torvalds #define BIOS_OFFSET_INC 0x0010 3601da177e4SLinus Torvalds #else 3611da177e4SLinus Torvalds #define BIOS_START_SEG 0x0c000 3621da177e4SLinus Torvalds #define BIOS_OFFSET_INC 0x0200 3631da177e4SLinus Torvalds #endif 3641da177e4SLinus Torvalds 3651da177e4SLinus Torvalds #define BIOS_LAST_OFFSET 0x0fc00 3661da177e4SLinus Torvalds 3671da177e4SLinus Torvalds /* Byte offsets into the EEPROM configuration buffer */ 3681da177e4SLinus Torvalds #define ISA_CNF_OFFSET 0x6 3691da177e4SLinus Torvalds #define TX_CTL_OFFSET (ISA_CNF_OFFSET + 8) /* 8900 eeprom */ 3701da177e4SLinus Torvalds #define AUTO_NEG_CNF_OFFSET (ISA_CNF_OFFSET + 8) /* 8920 eeprom */ 3711da177e4SLinus Torvalds 3721da177e4SLinus Torvalds /* the assumption here is that the bits in the eeprom are generally */ 3731da177e4SLinus Torvalds /* in the same position as those in the autonegctl register. */ 3741da177e4SLinus Torvalds /* Of course the IMM bit is not in that register so it must be */ 3751da177e4SLinus Torvalds /* masked out */ 3761da177e4SLinus Torvalds #define EE_FORCE_FDX 0x8000 3771da177e4SLinus Torvalds #define EE_NLP_ENABLE 0x0200 3781da177e4SLinus Torvalds #define EE_AUTO_NEG_ENABLE 0x0100 3791da177e4SLinus Torvalds #define EE_ALLOW_FDX 0x0080 3801da177e4SLinus Torvalds #define EE_AUTO_NEG_CNF_MASK (EE_FORCE_FDX|EE_NLP_ENABLE|EE_AUTO_NEG_ENABLE|EE_ALLOW_FDX) 3811da177e4SLinus Torvalds 3821da177e4SLinus Torvalds #define IMM_BIT 0x0040 /* ignore missing media */ 3831da177e4SLinus Torvalds 3841da177e4SLinus Torvalds #define ADAPTER_CNF_OFFSET (AUTO_NEG_CNF_OFFSET + 2) 3851da177e4SLinus Torvalds #define A_CNF_10B_T 0x0001 3861da177e4SLinus Torvalds #define A_CNF_AUI 0x0002 3871da177e4SLinus Torvalds #define A_CNF_10B_2 0x0004 3881da177e4SLinus Torvalds #define A_CNF_MEDIA_TYPE 0x0070 3891da177e4SLinus Torvalds #define A_CNF_MEDIA_AUTO 0x0070 3901da177e4SLinus Torvalds #define A_CNF_MEDIA_10B_T 0x0020 3911da177e4SLinus Torvalds #define A_CNF_MEDIA_AUI 0x0040 3921da177e4SLinus Torvalds #define A_CNF_MEDIA_10B_2 0x0010 3931da177e4SLinus Torvalds #define A_CNF_DC_DC_POLARITY 0x0080 3941da177e4SLinus Torvalds #define A_CNF_NO_AUTO_POLARITY 0x2000 3951da177e4SLinus Torvalds #define A_CNF_LOW_RX_SQUELCH 0x4000 3961da177e4SLinus Torvalds #define A_CNF_EXTND_10B_2 0x8000 3971da177e4SLinus Torvalds 3981da177e4SLinus Torvalds #define PACKET_PAGE_OFFSET 0x8 3991da177e4SLinus Torvalds 4001da177e4SLinus Torvalds /* Bit definitions for the ISA configuration word from the EEPROM */ 4011da177e4SLinus Torvalds #define INT_NO_MASK 0x000F 4021da177e4SLinus Torvalds #define DMA_NO_MASK 0x0070 4031da177e4SLinus Torvalds #define ISA_DMA_SIZE 0x0200 4041da177e4SLinus Torvalds #define ISA_AUTO_RxDMA 0x0400 4051da177e4SLinus Torvalds #define ISA_RxDMA 0x0800 4061da177e4SLinus Torvalds #define DMA_BURST 0x1000 4071da177e4SLinus Torvalds #define STREAM_TRANSFER 0x2000 4081da177e4SLinus Torvalds #define ANY_ISA_DMA (ISA_AUTO_RxDMA | ISA_RxDMA) 4091da177e4SLinus Torvalds 4101da177e4SLinus Torvalds /* DMA controller registers */ 4111da177e4SLinus Torvalds #define DMA_BASE 0x00 /* DMA controller base */ 4121da177e4SLinus Torvalds #define DMA_BASE_2 0x0C0 /* DMA controller base */ 4131da177e4SLinus Torvalds 4141da177e4SLinus Torvalds #define DMA_STAT 0x0D0 /* DMA controller status register */ 4151da177e4SLinus Torvalds #define DMA_MASK 0x0D4 /* DMA controller mask register */ 4161da177e4SLinus Torvalds #define DMA_MODE 0x0D6 /* DMA controller mode register */ 4171da177e4SLinus Torvalds #define DMA_RESETFF 0x0D8 /* DMA controller first/last flip flop */ 4181da177e4SLinus Torvalds 4191da177e4SLinus Torvalds /* DMA data */ 4201da177e4SLinus Torvalds #define DMA_DISABLE 0x04 /* Disable channel n */ 4211da177e4SLinus Torvalds #define DMA_ENABLE 0x00 /* Enable channel n */ 4221da177e4SLinus Torvalds /* Demand transfers, incr. address, auto init, writes, ch. n */ 4231da177e4SLinus Torvalds #define DMA_RX_MODE 0x14 4241da177e4SLinus Torvalds /* Demand transfers, incr. address, auto init, reads, ch. n */ 4251da177e4SLinus Torvalds #define DMA_TX_MODE 0x18 4261da177e4SLinus Torvalds 4271da177e4SLinus Torvalds #define DMA_SIZE (16*1024) /* Size of dma buffer - 16k */ 4281da177e4SLinus Torvalds 4291da177e4SLinus Torvalds #define CS8900 0x0000 4301da177e4SLinus Torvalds #define CS8920 0x4000 4311da177e4SLinus Torvalds #define CS8920M 0x6000 4321da177e4SLinus Torvalds #define REVISON_BITS 0x1F00 4331da177e4SLinus Torvalds #define EEVER_NUMBER 0x12 4341da177e4SLinus Torvalds #define CHKSUM_LEN 0x14 4351da177e4SLinus Torvalds #define CHKSUM_VAL 0x0000 4361da177e4SLinus Torvalds #define START_EEPROM_DATA 0x001c /* Offset into eeprom for start of data */ 4371da177e4SLinus Torvalds #define IRQ_MAP_EEPROM_DATA 0x0046 /* Offset into eeprom for the IRQ map */ 4381da177e4SLinus Torvalds #define IRQ_MAP_LEN 0x0004 /* No of bytes to read for the IRQ map */ 4391da177e4SLinus Torvalds #define PNP_IRQ_FRMT 0x0022 /* PNP small item IRQ format */ 4401da177e4SLinus Torvalds #define CS8900_IRQ_MAP 0x1c20 /* This IRQ map is fixed */ 4411da177e4SLinus Torvalds 4421da177e4SLinus Torvalds #define CS8920_NO_INTS 0x0F /* Max CS8920 interrupt select # */ 4431da177e4SLinus Torvalds 4441da177e4SLinus Torvalds #define PNP_ADD_PORT 0x0279 4451da177e4SLinus Torvalds #define PNP_WRITE_PORT 0x0A79 4461da177e4SLinus Torvalds 4471da177e4SLinus Torvalds #define GET_PNP_ISA_STRUCT 0x40 4481da177e4SLinus Torvalds #define PNP_ISA_STRUCT_LEN 0x06 4491da177e4SLinus Torvalds #define PNP_CSN_CNT_OFF 0x01 4501da177e4SLinus Torvalds #define PNP_RD_PORT_OFF 0x02 4511da177e4SLinus Torvalds #define PNP_FUNCTION_OK 0x00 4521da177e4SLinus Torvalds #define PNP_WAKE 0x03 4531da177e4SLinus Torvalds #define PNP_RSRC_DATA 0x04 4541da177e4SLinus Torvalds #define PNP_RSRC_READY 0x01 4551da177e4SLinus Torvalds #define PNP_STATUS 0x05 4561da177e4SLinus Torvalds #define PNP_ACTIVATE 0x30 4571da177e4SLinus Torvalds #define PNP_CNF_IO_H 0x60 4581da177e4SLinus Torvalds #define PNP_CNF_IO_L 0x61 4591da177e4SLinus Torvalds #define PNP_CNF_INT 0x70 4601da177e4SLinus Torvalds #define PNP_CNF_DMA 0x74 4611da177e4SLinus Torvalds #define PNP_CNF_MEM 0x48 462