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