11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  3c359.h (c) 2000 Mike Phillips (mikep@linuxtr.net) All Rights Reserved
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Linux driver for 3Com 3C359 Token Link PCI XL cards.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  This software may be used and distributed according to the terms
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  of the GNU General Public License Version 2 or (at your option)
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  any later verion, incorporated herein by reference.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Memory Access Commands */
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_BYTE_READ 0x28 << 24
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_BYTE_WRITE 0x18 << 24
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WORD_READ 0x20 << 24
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WORD_WRITE 0x10 << 24
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_BYTE_READ 0x88 << 24
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_BYTE_WRITE 0x48 << 24
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_WORD_READ 0x80 << 24
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_WORD_WRITE 0x40 << 24
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_BYTE_READ 0x8C << 24
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_BYTE_WRITE 0x4C << 24
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_WORD_READ 0x84 << 24
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_WORD_WRITE 0x44 << 24
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PMBAR 0x1C80
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PMB_CPHOLD (1<<10)
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CPATTENTION 0x180D
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CPA_PMBARVIS (1<<7)
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CPA_MEMWREN (1<<6)
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SWITCHSETTINGS 0x1C88
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EECONTROL 0x1C8A
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEDATA 0x1C8C
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEREAD 0x0080
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEWRITE 0x0040
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEERASE 0x0060
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EE_ENABLE_WRITE 0x0030
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEBUSY (1<<15)
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WRBR 0xCDE02
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WWOR 0xCDE04
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WWCR 0xCDE06
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MACSTATUS 0xCDE08
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_RW 0xCDE0B
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_AND 0xCDE2B
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_SET 0xCDE4B
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXBUFAREA 0xCDE10
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXEARLYTHRESH 0xCDE12
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXSTARTTHRESH 0x58
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNPRIREQTHRESH 0x2C
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_CSRB (1<<5)
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_RASB (1<<4)
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_SRBFR (1<<3)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_ASBFR (1<<2)
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MISR_ARBF (1<<1)
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MISR Flags memory locations */
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_SSBF 0xDFFE0
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_ARBF 0xDFFE1
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_ASBFR 0xDFFE2
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_SRBFR 0xDFFE3
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_RASB 0xDFFE4
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MF_CSRB 0xDFFE5
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_MACDATA 0x10
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_MAC_ACCESS_CMD 0x14
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_TIMER 0x1A
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_DMA_CTRL 0x20
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_DNLISTPTR 0x24
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_HASHFILTER 0x28
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_CONFIG 0x29
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_DNPRIREQTHRESH 0x2C
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_DNPOLL 0x2D
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_UPPKTSTATUS 0x30
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_FREETIMER 0x34
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_COUNTDOWN 0x36
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_UPLISTPTR 0x38
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_UPPOLL 0x3C
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_UPBURSTTHRESH 0x40
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_DNBURSTTHRESH 0x41
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_INTSTATUS_AUTO 0x56
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_TXSTARTTHRESH 0x58
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_INTERRUPTENABLE 0x5A
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_INDICATIONENABLE 0x5C
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_COMMAND 0x5E  /* These two are meant to be the same */
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MMIO_INTSTATUS 0x5E /* Makes the code more readable this way */
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTSTAT_CMD_IN_PROGRESS (1<<12)
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTSTAT_SRB (1<<14)
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTSTAT_INTLATCH (1<<0)
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Indication / Interrupt Mask
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Annoyingly the bits to be set in the indication and interrupt enable
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * do not match with the actual bits received in the interrupt, although
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * they are in the same order.
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The mapping for the indication / interrupt are:
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Bit	Indication / Interrupt
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   0	HostError
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   1	txcomplete
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   2	updneeded
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   3	rxcomplete
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   4	intrequested
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   5	macerror
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   6  dncomplete
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   7	upcomplete
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   8	txunderrun
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   9	asbf
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  10	srbr
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  11	arbc
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  The only ones we don't want to receive are txcomplete and rxcomplete
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  we use dncomplete and upcomplete instead.
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INT_MASK 0xFF5
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Note the subtle difference here, IND and INT */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SETINDENABLE (8<<12)
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SETINTENABLE (7<<12)
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRBBIT (1<<10)
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASBBIT (1<<9)
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARBBIT (1<<11)
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB 0xDFE90
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASB 0xDFED0
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARB 0xD0000
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SCRATCH 0xDFEF0
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INT_REQUEST 0x6000 /* (6 << 12) */
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACK_INTERRUPT 0x6800 /* (13 <<11) */
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define GLOBAL_RESET 0x00
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNDISABLE 0x5000
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNENABLE 0x4800
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNSTALL 0x3002
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNRESET 0x5800
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNUNSTALL 0x3003
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPRESET 0x2800
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPSTALL 0x3000
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPUNSTALL 0x3001
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SETCONFIG 0x4000
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SETTXSTARTTHRESH 0x9800
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Received Interrupts */
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASBFINT (1<<13)
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRBRINT (1<<14)
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARBCINT (1<<15)
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXUNDERRUN (1<<11)
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPCOMPINT (1<<10)
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNCOMPINT (1<<9)
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HARDERRINT (1<<7)
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXCOMPLETE (1<<4)
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXCOMPINT (1<<2)
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HOSTERRINT (1<<1)
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive descriptor bits */
1599914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXOVERRUN cpu_to_le32(1<<19)
1609914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXFC cpu_to_le32(1<<21)
1619914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXAR cpu_to_le32(1<<22)
1629914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXUPDCOMPLETE cpu_to_le32(1<<23)
1639914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXUPDFULL cpu_to_le32(1<<24)
1649914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define RXUPLASTFRAG cpu_to_le32(1<<31)
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit descriptor bits */
1679914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define TXDNCOMPLETE cpu_to_le32(1<<16)
1689914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define TXTXINDICATE cpu_to_le32(1<<27)
1699914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define TXDPDEMPTY cpu_to_le32(1<<29)
1709914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define TXDNINDICATE cpu_to_le32(1<<31)
1719914cad54c79d0b89b1f066c0894f00e1344131cAl Viro#define TXDNFRAGLAST cpu_to_le32(1<<31)
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Interrupts to Acknowledge */
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LATCH_ACK 1
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXCOMPACK (1<<1)
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTREQACK (1<<2)
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DNCOMPACK (1<<3)
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPCOMPACK (1<<4)
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASBFACK (1<<5)
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRBRACK (1<<6)
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARBCACK (1<<7)
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XL_IO_SPACE 128
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB_COMMAND_SIZE 50
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Adapter Commands */
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REQUEST_INT 0x00
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MODIFY_OPEN_PARMS 0x01
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESTORE_OPEN_PARMS 0x02
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OPEN_NIC 0x03
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CLOSE_NIC 0x04
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_SLEEP_MODE 0x05
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_GROUP_ADDRESS 0x06
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_FUNC_ADDRESS 0x07
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define READ_LOG 0x08
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_MULTICAST_MODE 0x0C
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CHANGE_WAKEUP_PATTERN 0x0D
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define GET_STATISTICS 0x13
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_RECEIVE_MODE 0x1F
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ARB Commands */
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECEIVE_DATA 0x81
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RING_STATUS_CHANGE 0x84
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ASB Commands */
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASB_RECEIVE_DATE 0x81
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Defines for LAN STATUS CHANGE reports */
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_SIG_LOSS 0x8000
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_HARD_ERR 0x4000
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_SOFT_ERR 0x2000
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_TRAN_BCN 0x1000
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_LWF      0x0800
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_ARW      0x0400
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_FPE      0x0200
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_RR       0x0100
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_CO       0x0080
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_SS       0x0040
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_RING_REC 0x0020
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_SR_CO    0x0010
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LSC_FDX_MODE 0x0004
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XL_MAX_ADAPTERS 8 /* 0x08 __MODULE_STRING can't hand 0xnn */
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3c359 defaults for buffers */
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XL_RX_RING_SIZE 16 /* must be a power of 2 */
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XL_TX_RING_SIZE 16 /* must be a power of 2 */
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PKT_BUF_SZ 4096 /* Default packet size */
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3c359 data structures */
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct xl_tx_desc {
2359914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 dnnextptr;
2369914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 framestartheader;
2379914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 buffer;
2389914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 buffer_length;
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct xl_rx_desc {
2429914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 upnextptr;
2439914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 framestatus;
2449914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 upfragaddr;
2459914cad54c79d0b89b1f066c0894f00e1344131cAl Viro	__le32 upfraglen;
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct xl_private {
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* These two structures must be aligned on 8 byte boundaries */
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* struct xl_rx_desc xl_rx_ring[XL_RX_RING_SIZE]; */
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* struct xl_tx_desc xl_tx_ring[XL_TX_RING_SIZE]; */
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct xl_rx_desc *xl_rx_ring ;
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct xl_tx_desc *xl_tx_ring ;
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *tx_ring_skb[XL_TX_RING_SIZE], *rx_ring_skb[XL_RX_RING_SIZE];
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int tx_ring_head, tx_ring_tail ;
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rx_ring_tail, rx_ring_no ;
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int free_ring_entries ;
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 srb;
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 arb;
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 asb;
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 __iomem *xl_mmio;
2675d9bac8ece5e2a64a2a450c7e2d6901ed9152052Andrew Morton	const char *xl_card_name;
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *pdev ;
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t xl_lock ;
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile int srb_queued;
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct wait_queue *srb_wait;
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile int asb_queued;
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 mac_buffer ;
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 xl_lan_status ;
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 xl_ring_speed ;
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 pkt_buf_sz ;
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 xl_message_level;
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 xl_copy_all_options ;
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char xl_functional_addr[4] ;
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 xl_addr_table_addr, xl_parms_addr ;
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 xl_laa[6] ;
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 rx_ring_dma_addr ;
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 tx_ring_dma_addr ;
2874b6ece97e0b61306d4b8de6820f602e4cf5d8d6bJaswinder Singh Rajput
2884b6ece97e0b61306d4b8de6820f602e4cf5d8d6bJaswinder Singh Rajput	/* firmware section */
2894b6ece97e0b61306d4b8de6820f602e4cf5d8d6bJaswinder Singh Rajput	const struct firmware *fw;
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
292