xref: /linux/drivers/net/ethernet/cirrus/cs89x0.h (revision cbecf716ca618fd44feda6bd9a64a8179d031fc5)
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