Annotation of Gnu-Mach/linux/src/drivers/net/hp100.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * hp100.h: Hewlett Packard HP10/100VG ANY LAN ethernet driver for Linux.
        !             3:  *
        !             4:  * $Id: hp100.h,v 1.1 1999/04/26 05:52:20 tb Exp $
        !             5:  *
        !             6:  * Authors:  Jaroslav Kysela, <[email protected]>
        !             7:  *           Siegfried Loeffler <[email protected]>
        !             8:  *
        !             9:  * This driver is based on the 'hpfepkt' crynwr packet driver.
        !            10:  *
        !            11:  * This source/code is public free; you can distribute it and/or modify 
        !            12:  * it under terms of the GNU General Public License (published by the
        !            13:  * Free Software Foundation) either version two of this License, or any 
        !            14:  * later version.
        !            15:  */
        !            16: 
        !            17: /****************************************************************************
        !            18:  *  Hardware Constants
        !            19:  ****************************************************************************/
        !            20: 
        !            21: /* 
        !            22:  * Page Identifiers
        !            23:  * (Swap Paging Register, PAGING, bits 3:0, Offset 0x02)
        !            24:  */
        !            25: 
        !            26: #define HP100_PAGE_PERFORMANCE 0x0     /* Page 0 */
        !            27: #define HP100_PAGE_MAC_ADDRESS 0x1     /* Page 1 */
        !            28: #define HP100_PAGE_HW_MAP      0x2     /* Page 2 */
        !            29: #define HP100_PAGE_EEPROM_CTRL 0x3     /* Page 3 */
        !            30: #define HP100_PAGE_MAC_CTRL    0x4     /* Page 4 */
        !            31: #define HP100_PAGE_MMU_CFG     0x5     /* Page 5 */
        !            32: #define HP100_PAGE_ID_MAC_ADDR 0x6     /* Page 6 */
        !            33: #define HP100_PAGE_MMU_POINTER 0x7     /* Page 7 */
        !            34: 
        !            35: 
        !            36: /* Registers that are present on all pages  */
        !            37: 
        !            38: #define HP100_REG_HW_ID                0x00    /* R:  (16) Unique card ID           */
        !            39: #define HP100_REG_TRACE                0x00    /* W:  (16) Used for debug output    */
        !            40: #define HP100_REG_PAGING       0x02    /* R:  (16),15:4 Card ID             */
        !            41:                                         /* W:  (16),3:0 Switch pages         */
        !            42: #define HP100_REG_OPTION_LSW   0x04    /* RW: (16) Select card functions    */
        !            43: #define HP100_REG_OPTION_MSW   0x06    /* RW: (16) Select card functions    */
        !            44:                                         
        !            45: /*  Page 0 - Performance  */
        !            46: 
        !            47: #define HP100_REG_IRQ_STATUS   0x08    /* RW: (16) Which ints are pending   */
        !            48: #define HP100_REG_IRQ_MASK     0x0a    /* RW: (16) Select ints to allow     */
        !            49: #define HP100_REG_FRAGMENT_LEN 0x0c    /* W: (16)12:0 Current fragment len */
        !            50: /* Note: For 32 bit systems, fragment len and offset registers are available */
        !            51: /*       at offset 0x28 and 0x2c, where they can be written as 32bit values. */
        !            52: #define HP100_REG_OFFSET       0x0e    /* RW: (16)12:0 Offset to start read */
        !            53: #define HP100_REG_DATA32       0x10    /* RW: (32) I/O mode data port       */
        !            54: #define HP100_REG_DATA16       0x12    /* RW: WORDs must be read from here  */
        !            55: #define HP100_REG_TX_MEM_FREE  0x14    /* RD: (32) Amount of free Tx mem    */
        !            56: #define HP100_REG_TX_PDA_L      0x14    /* W: (32) BM: Ptr to PDL, Low Pri  */
        !            57: #define HP100_REG_TX_PDA_H      0x1c    /* W: (32) BM: Ptr to PDL, High Pri */
        !            58: #define HP100_REG_RX_PKT_CNT   0x18    /* RD: (8) Rx count of pkts on card  */
        !            59: #define HP100_REG_TX_PKT_CNT   0x19    /* RD: (8) Tx count of pkts on card  */
        !            60: #define HP100_REG_RX_PDL        0x1a    /* R: (8) BM: # rx pdl not executed */
        !            61: #define HP100_REG_TX_PDL        0x1b    /* R: (8) BM: # tx pdl not executed */
        !            62: #define HP100_REG_RX_PDA        0x18    /* W: (32) BM: Up to 31 addresses */
        !            63:                                         /*             which point to a PDL */
        !            64: #define HP100_REG_SL_EARLY      0x1c    /*    (32) Enhanced Slave Early Rx */
        !            65: #define HP100_REG_STAT_DROPPED  0x20    /* R (12) Dropped Packet Counter */
        !            66: #define HP100_REG_STAT_ERRORED  0x22    /* R (8) Errored Packet Counter */
        !            67: #define HP100_REG_STAT_ABORT    0x23    /* R (8) Abort Counter/OW Coll. Flag */
        !            68: #define HP100_REG_RX_RING       0x24    /* W (32) Slave: RX Ring Pointers */
        !            69: #define HP100_REG_32_FRAGMENT_LEN 0x28  /* W (13) Slave: Fragment Length Reg */
        !            70: #define HP100_REG_32_OFFSET     0x2c    /* W (16) Slave: Offset Register */
        !            71: 
        !            72: /*  Page 1 - MAC Address/Hash Table  */
        !            73: 
        !            74: #define HP100_REG_MAC_ADDR     0x08    /* RW: (8) Cards MAC address         */
        !            75: #define HP100_REG_HASH_BYTE0   0x10    /* RW: (8) Cards multicast filter    */
        !            76:                                         
        !            77: /*  Page 2 - Hardware Mapping  */
        !            78: 
        !            79: #define HP100_REG_MEM_MAP_LSW  0x08    /* RW: (16) LSW of cards mem addr    */
        !            80: #define HP100_REG_MEM_MAP_MSW  0x0a    /* RW: (16) MSW of cards mem addr    */
        !            81: #define HP100_REG_IO_MAP       0x0c    /* RW: (8) Cards I/O address         */
        !            82: #define HP100_REG_IRQ_CHANNEL  0x0d    /* RW: (8) IRQ and edge/level int    */
        !            83: #define HP100_REG_SRAM         0x0e    /* RW: (8) How much RAM on card      */
        !            84: #define HP100_REG_BM           0x0f    /* RW: (8) Controls BM functions     */
        !            85: 
        !            86: /* New on Page 2 for ETR chips: */
        !            87: #define HP100_REG_MODECTRL1     0x10    /* RW: (8) Mode Control 1 */
        !            88: #define HP100_REG_MODECTRL2     0x11    /* RW: (8) Mode Control 2 */
        !            89: #define HP100_REG_PCICTRL1      0x12    /* RW: (8) PCI Cfg 1 */
        !            90: #define HP100_REG_PCICTRL2      0x13    /* RW: (8) PCI Cfg 2 */
        !            91: #define HP100_REG_PCIBUSMLAT    0x15    /* RW: (8) PCI Bus Master Latency */
        !            92: #define HP100_REG_EARLYTXCFG    0x16    /* RW: (16) Early TX Cfg/Cntrl Reg */
        !            93: #define HP100_REG_EARLYRXCFG    0x18    /* RW: (8) Early RX Cfg/Cntrl Reg */
        !            94: #define HP100_REG_ISAPNPCFG1    0x1a    /* RW: (8) ISA PnP Cfg/Cntrl Reg 1 */
        !            95: #define HP100_REG_ISAPNPCFG2    0x1b    /* RW: (8) ISA PnP Cfg/Cntrl Reg 2 */
        !            96:                                         
        !            97: /*  Page 3 - EEPROM/Boot ROM  */
        !            98: 
        !            99: #define HP100_REG_EEPROM_CTRL  0x08    /* RW: (16) Used to load EEPROM      */
        !           100: #define HP100_REG_BOOTROM_CTRL  0x0a
        !           101:                                         
        !           102: /*  Page 4 - LAN Configuration  (MAC_CTRL) */
        !           103: 
        !           104: #define HP100_REG_10_LAN_CFG_1 0x08    /* RW: (8) Set 10M XCVR functions   */
        !           105: #define HP100_REG_10_LAN_CFG_2  0x09    /* RW: (8)     10M XCVR functions   */
        !           106: #define HP100_REG_VG_LAN_CFG_1 0x0a    /* RW: (8) Set 100M XCVR functions  */
        !           107: #define HP100_REG_VG_LAN_CFG_2  0x0b    /* RW: (8) 100M LAN Training cfgregs */
        !           108: #define HP100_REG_MAC_CFG_1    0x0c    /* RW: (8) Types of pkts to accept   */
        !           109: #define HP100_REG_MAC_CFG_2    0x0d    /* RW: (8) Misc MAC functions        */
        !           110: #define HP100_REG_MAC_CFG_3     0x0e    /* RW: (8) Misc MAC functions */
        !           111: #define HP100_REG_MAC_CFG_4     0x0f    /* R:  (8) Misc MAC states */
        !           112: #define HP100_REG_DROPPED      0x10    /* R:  (16),11:0 Pkts cant fit in mem*/
        !           113: #define HP100_REG_CRC          0x12    /* R:  (8) Pkts with CRC             */
        !           114: #define HP100_REG_ABORT                0x13    /* R:  (8) Aborted Tx pkts           */
        !           115: #define HP100_REG_TRAIN_REQUEST 0x14    /* RW: (16) Endnode MAC register.*/
        !           116: #define HP100_REG_TRAIN_ALLOW   0x16    /* R:  (16) Hub allowed register */
        !           117:                     
        !           118: /*  Page 5 - MMU  */
        !           119: 
        !           120: #define HP100_REG_RX_MEM_STOP  0x0c    /* RW: (16) End of Rx ring addr      */
        !           121: #define HP100_REG_TX_MEM_STOP  0x0e    /* RW: (16) End of Tx ring addr      */
        !           122: #define HP100_REG_PDL_MEM_STOP  0x10    /* Not used by 802.12 devices */
        !           123: #define HP100_REG_ECB_MEM_STOP  0x14    /* I've no idea what this is */
        !           124:           
        !           125: /*  Page 6 - Card ID/Physical LAN Address  */
        !           126: 
        !           127: #define HP100_REG_BOARD_ID     0x08    /* R:  (8) EISA/ISA card ID          */
        !           128: #define HP100_REG_BOARD_IO_CHCK 0x0c   /* R:  (8) Added to ID to get FFh    */
        !           129: #define HP100_REG_SOFT_MODEL   0x0d    /* R:  (8) Config program defined    */
        !           130: #define HP100_REG_LAN_ADDR     0x10    /* R:  (8) MAC addr of card          */
        !           131: #define HP100_REG_LAN_ADDR_CHCK 0x16   /* R:  (8) Added to addr to get FFh  */
        !           132:                                         
        !           133: /*  Page 7 - MMU Current Pointers  */
        !           134: 
        !           135: #define HP100_REG_PTR_RXSTART  0x08    /* R:  (16) Current begin of Rx ring */
        !           136: #define HP100_REG_PTR_RXEND    0x0a    /* R:  (16) Current end of Rx ring   */
        !           137: #define HP100_REG_PTR_TXSTART  0x0c    /* R:  (16) Current begin of Tx ring */
        !           138: #define HP100_REG_PTR_TXEND    0x0e    /* R:  (16) Current end of Rx ring   */
        !           139: #define HP100_REG_PTR_RPDLSTART 0x10
        !           140: #define HP100_REG_PTR_RPDLEND   0x12
        !           141: #define HP100_REG_PTR_RINGPTRS  0x14
        !           142: #define HP100_REG_PTR_MEMDEBUG  0x1a
        !           143: /* ------------------------------------------------------------------------ */
        !           144: 
        !           145: 
        !           146: /* 
        !           147:  * Hardware ID Register I (Always available, HW_ID, Offset 0x00)
        !           148:  */
        !           149: #define HP100_HW_ID_CASCADE     0x4850  /* Identifies Cascade Chip */
        !           150: 
        !           151: /* 
        !           152:  * Hardware ID Register 2 & Paging Register
        !           153:  * (Always available, PAGING, Offset 0x02)
        !           154:  * Bits 15:4 are for the Chip ID 
        !           155:  */
        !           156: #define HP100_CHIPID_MASK        0xFFF0
        !           157: #define HP100_CHIPID_SHASTA      0x5350  /* Not 802.12 compliant */
        !           158:                                          /* EISA BM/SL, MCA16/32 SL, ISA SL */
        !           159: #define HP100_CHIPID_RAINIER     0x5360  /* Not 802.12 compliant EISA BM,*/
        !           160:                                          /* PCI SL, MCA16/32 SL, ISA SL */
        !           161: #define HP100_CHIPID_LASSEN      0x5370  /* 802.12 compliant PCI BM, PCI SL */
        !           162:                                          /* LRF supported */
        !           163: 
        !           164: /*
        !           165:  *  Option Registers I and II 
        !           166:  * (Always available, OPTION_LSW, Offset 0x04-0x05)
        !           167:  */
        !           168: #define HP100_DEBUG_EN         0x8000  /* 0:Dis., 1:Enable Debug Dump Ptr. */
        !           169: #define HP100_RX_HDR           0x4000  /* 0:Dis., 1:Enable putting pkt into */
        !           170:                                         /*   system mem. before Rx interrupt */
        !           171: #define HP100_MMAP_DIS         0x2000  /* 0:Enable, 1:Disable mem.mapping. */
        !           172:                                         /*   MMAP_DIS must be 0 and MEM_EN */
        !           173:                                         /*   must be 1 for memory-mapped */
        !           174:                                         /*   mode to be enabled */
        !           175: #define HP100_EE_EN            0x1000  /* 0:Disable,1:Enable EEPROM writing */
        !           176: #define HP100_BM_WRITE         0x0800  /* 0:Slave, 1:Bus Master for Tx data */
        !           177: #define HP100_BM_READ          0x0400  /* 0:Slave, 1:Bus Master for Rx data */
        !           178: #define HP100_TRI_INT          0x0200  /* 0:Don't, 1:Do tri-state the int */
        !           179: #define HP100_MEM_EN           0x0040  /* Config program set this to */
        !           180:                                         /*   0:Disable, 1:Enable mem map. */
        !           181:                                         /*   See MMAP_DIS. */
        !           182: #define HP100_IO_EN            0x0020  /* 1:Enable I/O transfers */
        !           183: #define HP100_BOOT_EN          0x0010  /* 1:Enable boot ROM access */
        !           184: #define HP100_FAKE_INT         0x0008  /* 1:int */
        !           185: #define HP100_INT_EN           0x0004  /* 1:Enable ints from card */
        !           186: #define HP100_HW_RST           0x0002  /* 0:Reset, 1:Out of reset */
        !           187:                                         /* NIC reset on 0 to 1 transition */
        !           188: 
        !           189: /*
        !           190:  *  Option Register III 
        !           191:  * (Always available, OPTION_MSW, Offset 0x06)
        !           192:  */
        !           193: #define HP100_PRIORITY_TX      0x0080  /* 1:Do all Tx pkts as priority */
        !           194: #define HP100_EE_LOAD          0x0040  /* 1:EEPROM loading, 0 when done */
        !           195: #define HP100_ADV_NXT_PKT      0x0004  /* 1:Advance to next pkt in Rx queue */
        !           196:                                         /*   h/w will set to 0 when done */
        !           197: #define HP100_TX_CMD           0x0002  /* 1:Tell h/w download done, h/w */
        !           198:                                         /*   will set to 0 when done */
        !           199: 
        !           200: /*
        !           201:  * Interrupt Status Registers I and II
        !           202:  * (Page PERFORMANCE, IRQ_STATUS, Offset 0x08-0x09)
        !           203:  * Note: With old chips, these Registers will clear when 1 is written to them
        !           204:  *       with new chips this depends on setting of CLR_ISMODE
        !           205:  */
        !           206: #define HP100_RX_EARLY_INT      0x2000
        !           207: #define HP100_RX_PDA_ZERO       0x1000
        !           208: #define HP100_RX_PDL_FILL_COMPL 0x0800
        !           209: #define HP100_RX_PACKET                0x0400  /* 0:No, 1:Yes pkt has been Rx */
        !           210: #define HP100_RX_ERROR         0x0200  /* 0:No, 1:Yes Rx pkt had error */
        !           211: #define HP100_TX_PDA_ZERO       0x0020  /* 1 when PDA count goes to zero */
        !           212: #define HP100_TX_SPACE_AVAIL   0x0010  /* 0:<8192, 1:>=8192 Tx free bytes */
        !           213: #define HP100_TX_COMPLETE      0x0008  /* 0:No, 1:Yes a Tx has completed */
        !           214: #define HP100_MISC_ERROR        0x0004  /* 0:No, 1:Lan Link down or bus error*/
        !           215: #define HP100_TX_ERROR         0x0002  /* 0:No, 1:Yes Tx pkt had error */
        !           216: 
        !           217: /*
        !           218:  * Xmit Memory Free Count
        !           219:  * (Page PERFORMANCE, TX_MEM_FREE, Offset 0x14) (Read only, 32bit)
        !           220:  */
        !           221: #define HP100_AUTO_COMPARE     0x80000000      /* Tx Space avail & pkts<255 */
        !           222: #define HP100_FREE_SPACE       0x7fffffe0      /* Tx free memory */
        !           223: 
        !           224: /*
        !           225:  *  IRQ Channel
        !           226:  * (Page HW_MAP, IRQ_CHANNEL, Offset 0x0d)
        !           227:  */
        !           228: #define HP100_ZERO_WAIT_EN     0x80    /* 0:No, 1:Yes asserts NOWS signal */
        !           229: #define HP100_IRQ_SCRAMBLE      0x40
        !           230: #define HP100_BOND_HP           0x20
        !           231: #define HP100_LEVEL_IRQ                0x10    /* 0:Edge, 1:Level type interrupts. */
        !           232:                                         /* (Only valid on EISA cards) */
        !           233: #define HP100_IRQMASK          0x0F    /* Isolate the IRQ bits */
        !           234: 
        !           235: /*
        !           236:  * SRAM Parameters
        !           237:  * (Page HW_MAP, SRAM, Offset 0x0e)
        !           238:  */
        !           239: #define HP100_RAM_SIZE_MASK    0xe0    /* AND to get SRAM size index */
        !           240: #define HP100_RAM_SIZE_SHIFT   0x05    /* Shift count(put index in lwr bits)*/
        !           241: 
        !           242: /*
        !           243:  * Bus Master Register
        !           244:  * (Page HW_MAP, BM, Offset 0x0f)
        !           245:  */
        !           246: #define HP100_BM_BURST_RD       0x01    /* EISA only: 1=Use burst trans. fm system */
        !           247:                                         /* memory to chip (tx) */
        !           248: #define HP100_BM_BURST_WR       0x02    /* EISA only: 1=Use burst trans. fm system */
        !           249:                                         /* memory to chip (rx) */
        !           250: #define HP100_BM_MASTER                0x04    /* 0:Slave, 1:BM mode */
        !           251: #define HP100_BM_PAGE_CK        0x08    /* This bit should be set whenever in*/
        !           252:                                         /* an EISA system */
        !           253: #define HP100_BM_PCI_8CLK       0x40    /* ... cycles 8 clocks apart */
        !           254: 
        !           255: 
        !           256: /* 
        !           257:  * Mode Control Register I
        !           258:  * (Page HW_MAP, MODECTRL1, Offset0x10)
        !           259:  */
        !           260: #define HP100_TX_DUALQ          0x10
        !           261:    /* If set and BM -> dual tx pda queues*/
        !           262: #define HP100_ISR_CLRMODE       0x02   /* If set ISR will clear all pending */
        !           263:                                        /* interrupts on read (etr only?) */
        !           264: #define HP100_EE_NOLOAD         0x04   /* Status whether res will be loaded */
        !           265:                                        /* from the eeprom */
        !           266: #define HP100_TX_CNT_FLG        0x08   /* Controls Early TX Reg Cnt Field */
        !           267: #define HP100_PDL_USE3          0x10   /* If set BM engine will read only */
        !           268:                                        /* first three data elements of a PDL */
        !           269:                                        /* on the first access. */
        !           270: #define HP100_BUSTYPE_MASK      0xe0   /* Three bit bus type info */
        !           271: 
        !           272: /*
        !           273:  * Mode Control Register II
        !           274:  * (Page HW_MAP, MODECTRL2, Offset0x11)
        !           275:  */
        !           276: #define HP100_EE_MASK           0x0f   /* Tell EEPROM circuit not to load */ 
        !           277:                                        /* certain resources */
        !           278: #define HP100_DIS_CANCEL        0x20   /* For tx dualq mode operation */
        !           279: #define HP100_EN_PDL_WB         0x40   /* 1: Status of PDL completion may be */
        !           280:                                        /* written back to system mem */
        !           281: #define HP100_EN_BUS_FAIL       0x80   /* Enables bus-fail portion of misc */
        !           282:                                        /* interrupt */
        !           283: 
        !           284: /* 
        !           285:  * PCI Configuration and Control Register I
        !           286:  * (Page HW_MAP, PCICTRL1, Offset 0x12)
        !           287:  */
        !           288: #define HP100_LO_MEM            0x01   /* 1: Mapped Mem requested below 1MB */
        !           289: #define HP100_NO_MEM            0x02   /* 1: Disables Req for sysmem to PCI */ 
        !           290:                                        /* bios */
        !           291: #define HP100_USE_ISA           0x04   /* 1: isa type decodes will occur */
        !           292:                                        /* simultaneously with PCI decodes */
        !           293: #define HP100_IRQ_HI_MASK       0xf0   /* pgmed by pci bios */
        !           294: #define HP100_PCI_IRQ_HI_MASK   0x78    /* Isolate 4 bits for PCI IRQ  */
        !           295:  
        !           296: /*
        !           297:  * PCI Configuration and Control Register II
        !           298:  * (Page HW_MAP, PCICTRL2, Offset 0x13)
        !           299:  */
        !           300: #define HP100_RD_LINE_PDL       0x01   /* 1: PCI command Memory Read Line en */
        !           301: #define HP100_RD_TX_DATA_MASK   0x06   /* choose PCI memread cmds for TX */ 
        !           302: #define HP100_MWI               0x08   /* 1: en. PCI memory write invalidate */
        !           303: #define HP100_ARB_MODE          0x10   /* Select PCI arbitor type */
        !           304: #define HP100_STOP_EN           0x20   /* Enables PCI state machine to issue */
        !           305:                                        /* pci stop if cascade not ready */
        !           306: #define HP100_IGNORE_PAR        0x40   /* 1: PCI state machine ignores parity*/
        !           307: #define HP100_PCI_RESET         0x80   /* 0->1: Reset PCI block */
        !           308: 
        !           309: /*
        !           310:  * Early TX Configuration and Control Register
        !           311:  * (Page HW_MAP, EARLYTXCFG, Offset 0x16)
        !           312:  */
        !           313: #define HP100_EN_EARLY_TX       0x8000  /* 1=Enable Early TX */
        !           314: #define HP100_EN_ADAPTIVE       0x4000  /* 1=Enable adaptive mode */
        !           315: #define HP100_EN_TX_UR_IRQ      0x2000  /* reserved, must be 0 */
        !           316: #define HP100_EN_LOW_TX         0x1000  /* reserved, must be 0 */
        !           317: #define HP100_ET_CNT_MASK       0x0fff  /* bits 11..0: ET counters */
        !           318: 
        !           319: /*
        !           320:  * Early RX Configuration and Control Register
        !           321:  * (Page HW_MAP, EARLYRXCFG, Offset 0x18)
        !           322:  */
        !           323: #define HP100_EN_EARLY_RX       0x80     /* 1=Enable Early RX */
        !           324: #define HP100_EN_LOW_RX         0x40     /* reserved, must be 0 */
        !           325: #define HP100_RX_TRIP_MASK      0x1f     /* bits 4..0: threshold at which the
        !           326:                                          * early rx circuit will start the
        !           327:                                          * dma of received packet into system
        !           328:                                          * memory for BM */
        !           329: 
        !           330: /*
        !           331:  *  Serial Devices Control Register
        !           332:  * (Page EEPROM_CTRL, EEPROM_CTRL, Offset 0x08)
        !           333:  */
        !           334: #define HP100_EEPROM_LOAD      0x0001  /* 0->1 loads EEPROM into registers. */
        !           335:                                         /* When it goes back to 0, load is   */
        !           336:                                         /* complete. This should take ~600us.*/
        !           337: 
        !           338: /*
        !           339:  * 10MB LAN Control and Configuration Register I
        !           340:  * (Page MAC_CTRL, 10_LAN_CFG_1, Offset 0x08)
        !           341:  */
        !           342: #define HP100_MAC10_SEL                0xc0    /* Get bits to indicate MAC */
        !           343: #define HP100_AUI_SEL          0x20    /* Status of AUI selection */
        !           344: #define HP100_LOW_TH           0x10    /* 0:No, 1:Yes allow better cabling */
        !           345: #define HP100_LINK_BEAT_DIS    0x08    /* 0:Enable, 1:Disable link beat */
        !           346: #define HP100_LINK_BEAT_ST     0x04    /* 0:No, 1:Yes link beat being Rx */
        !           347: #define HP100_R_ROL_ST         0x02    /* 0:No, 1:Yes Rx twisted pair has */
        !           348:                                         /*             been reversed */
        !           349: #define HP100_AUI_ST           0x01    /* 0:No, 1:Yes use AUI on TP card */
        !           350: 
        !           351: /*
        !           352:  * 10 MB LAN Control and Configuration Register II
        !           353:  * (Page MAC_CTRL, 10_LAN_CFG_2, Offset 0x09)
        !           354:  */
        !           355: #define HP100_SQU_ST           0x01    /* 0:No, 1:Yes collision signal sent */
        !           356:                                         /*       after Tx.Only used for AUI. */
        !           357: #define HP100_FULLDUP           0x02    /* 1: LXT901 XCVR fullduplx enabled */
        !           358: #define HP100_DOT3_MAC          0x04    /* 1: DOT 3 Mac sel. unless Autosel */
        !           359: 
        !           360: /*
        !           361:  * MAC Selection, use with MAC10_SEL bits
        !           362:  */
        !           363: #define HP100_AUTO_SEL_10      0x0     /* Auto select */
        !           364: #define HP100_XCVR_LXT901_10   0x1     /* LXT901 10BaseT transceiver */
        !           365: #define HP100_XCVR_7213                0x2     /* 7213 transceiver */
        !           366: #define HP100_XCVR_82503       0x3     /* 82503 transceiver */
        !           367: 
        !           368: /*
        !           369:  *  100MB LAN Training Register
        !           370:  * (Page MAC_CTRL, VG_LAN_CFG_2, Offset 0x0b) (old, pre 802.12)
        !           371:  */
        !           372: #define HP100_FRAME_FORMAT     0x08    /* 0:802.3, 1:802.5 frames */
        !           373: #define HP100_BRIDGE           0x04    /* 0:No, 1:Yes tell hub i am a bridge */
        !           374: #define HP100_PROM_MODE                0x02    /* 0:No, 1:Yes tell hub card is */
        !           375:                                         /*         promiscuous */
        !           376: #define HP100_REPEATER         0x01    /* 0:No, 1:Yes tell hub MAC wants to */
        !           377:                                         /*         be a cascaded repeater */
        !           378: 
        !           379: /*
        !           380:  * 100MB LAN Control and Configuration Register
        !           381:  * (Page MAC_CTRL, VG_LAN_CFG_1, Offset 0x0a) 
        !           382:  */
        !           383: #define HP100_VG_SEL           0x80    /* 0:No, 1:Yes use 100 Mbit MAC */
        !           384: #define HP100_LINK_UP_ST       0x40    /* 0:No, 1:Yes endnode logged in */
        !           385: #define HP100_LINK_CABLE_ST    0x20    /* 0:No, 1:Yes cable can hear tones */
        !           386:                                         /*         from  hub */
        !           387: #define HP100_LOAD_ADDR                0x10    /* 0->1 card addr will be sent  */
        !           388:                                         /* 100ms later the link status  */
        !           389:                                         /* bits are valid */
        !           390: #define HP100_LINK_CMD         0x08    /* 0->1 link will attempt to log in. */
        !           391:                                         /* 100ms later the link status */
        !           392:                                         /* bits are valid */
        !           393: #define HP100_TRN_DONE          0x04    /* NEW ETR-Chips only: Will be reset */
        !           394:                                         /* after LinkUp Cmd is given and set */
        !           395:                                         /* when training has completed. */
        !           396: #define HP100_LINK_GOOD_ST     0x02    /* 0:No, 1:Yes cable passed training */
        !           397: #define HP100_VG_RESET         0x01    /* 0:Yes, 1:No reset the 100VG MAC */
        !           398: 
        !           399: 
        !           400: /*
        !           401:  *  MAC Configuration Register I
        !           402:  * (Page MAC_CTRL, MAC_CFG_1, Offset 0x0c)
        !           403:  */
        !           404: #define HP100_RX_IDLE          0x80    /* 0:Yes, 1:No currently receiving pkts */
        !           405: #define HP100_TX_IDLE          0x40    /* 0:Yes, 1:No currently Txing pkts */
        !           406: #define HP100_RX_EN            0x20    /* 1: allow receiving of pkts */
        !           407: #define HP100_TX_EN            0x10    /* 1: allow transmitting of pkts */
        !           408: #define HP100_ACC_ERRORED      0x08    /* 0:No, 1:Yes allow Rx of errored pkts */
        !           409: #define HP100_ACC_MC           0x04    /* 0:No, 1:Yes allow Rx of multicast pkts */
        !           410: #define HP100_ACC_BC           0x02    /* 0:No, 1:Yes allow Rx of broadcast pkts */
        !           411: #define HP100_ACC_PHY          0x01    /* 0:No, 1:Yes allow Rx of ALL phys. pkts */
        !           412: #define HP100_MAC1MODEMASK     0xf0    /* Hide ACC bits */
        !           413: #define HP100_MAC1MODE1                0x00    /* Receive nothing, must also disable RX */
        !           414: #define HP100_MAC1MODE2                0x00
        !           415: #define HP100_MAC1MODE3                HP100_MAC1MODE2 | HP100_ACC_BC
        !           416: #define HP100_MAC1MODE4                HP100_MAC1MODE3 | HP100_ACC_MC
        !           417: #define HP100_MAC1MODE5                HP100_MAC1MODE4 /* set mc hash to all ones also */
        !           418: #define HP100_MAC1MODE6                HP100_MAC1MODE5 | HP100_ACC_PHY /* Promiscuous */
        !           419: /* Note MODE6 will receive all GOOD packets on the LAN. This really needs
        !           420:    a mode 7 defined to be LAN Analyzer mode, which will receive errored and
        !           421:    runt packets, and keep the CRC bytes. */
        !           422: #define HP100_MAC1MODE7                HP100_MAC1MODE6 | HP100_ACC_ERRORED
        !           423: 
        !           424: /*
        !           425:  *  MAC Configuration Register II 
        !           426:  * (Page MAC_CTRL, MAC_CFG_2, Offset 0x0d)
        !           427:  */
        !           428: #define HP100_TR_MODE          0x80    /* 0:No, 1:Yes support Token Ring formats */
        !           429: #define HP100_TX_SAME          0x40    /* 0:No, 1:Yes Tx same packet continuous */
        !           430: #define HP100_LBK_XCVR         0x20    /* 0:No, 1:Yes loopback through MAC & */
        !           431:                                         /*   transceiver */
        !           432: #define HP100_LBK_MAC          0x10    /* 0:No, 1:Yes loopback through MAC */
        !           433: #define HP100_CRC_I            0x08    /* 0:No, 1:Yes inhibit CRC on Tx packets */
        !           434: #define HP100_ACCNA             0x04    /* 1: For 802.5: Accept only token ring
        !           435:                                         * group addr that maches NA mask */
        !           436: #define HP100_KEEP_CRC         0x02    /* 0:No, 1:Yes keep CRC on Rx packets. */
        !           437:                                         /*   The length will reflect this. */
        !           438: #define HP100_ACCFA             0x01    /* 1: For 802.5: Accept only functional
        !           439:                                         * addrs that match FA mask (page1) */
        !           440: #define HP100_MAC2MODEMASK     0x02
        !           441: #define HP100_MAC2MODE1                0x00
        !           442: #define HP100_MAC2MODE2                0x00
        !           443: #define HP100_MAC2MODE3                0x00
        !           444: #define HP100_MAC2MODE4                0x00
        !           445: #define HP100_MAC2MODE5                0x00
        !           446: #define HP100_MAC2MODE6                0x00
        !           447: #define HP100_MAC2MODE7                KEEP_CRC
        !           448: 
        !           449: /*
        !           450:  * MAC Configuration Register III 
        !           451:  * (Page MAC_CTRL, MAC_CFG_3, Offset 0x0e) 
        !           452:  */
        !           453: #define HP100_PACKET_PACE       0x03     /* Packet Pacing:
        !           454:                                          * 00: No packet pacing
        !           455:                                           * 01: 8 to 16 uS delay
        !           456:                                           * 10: 16 to 32 uS delay
        !           457:                                           * 11: 32 to 64 uS delay
        !           458:                                          */
        !           459: #define HP100_LRF_EN            0x04     /* 1: External LAN Rcv Filter and
        !           460:                                          * TCP/IP Checksumming enabled. */
        !           461: #define HP100_AUTO_MODE         0x10     /* 1: AutoSelect between 10/100 */
        !           462: 
        !           463: /*
        !           464:  * MAC Configuration Register IV 
        !           465:  * (Page MAC_CTRL, MAC_CFG_4, Offset 0x0f)
        !           466:  */
        !           467: #define HP100_MAC_SEL_ST        0x01      /* (R): Status of external VGSEL
        !           468:                                           * Signal, 1=100VG, 0=10Mbit sel. */
        !           469: #define HP100_LINK_FAIL_ST      0x02      /* (R): Status of Link Fail portion
        !           470:                                            * of the Misc. Interrupt */
        !           471: 
        !           472: /* 
        !           473:  *  100 MB LAN Training Request/Allowed Registers 
        !           474:  * (Page MAC_CTRL, TRAIN_REQUEST and TRAIN_ALLOW, Offset 0x14-0x16)(ETR parts only)
        !           475:  */
        !           476: #define HP100_MACRQ_REPEATER         0x0001  /* 1: MAC tells HUB it wants to be 
        !           477:                                              *    a cascaded repeater
        !           478:                                              * 0: ... wants to be a DTE */
        !           479: #define HP100_MACRQ_PROMSC           0x0006  /* 2 bits: Promiscious mode
        !           480:                                              * 00: Rcv only unicast packets
        !           481:                                              *     specifically addr to this
        !           482:                                              *     endnode
        !           483:                                              * 10: Rcv all pckts fwded by 
        !           484:                                              *     the local repeater */
        !           485: #define HP100_MACRQ_FRAMEFMT_EITHER  0x0018  /* 11: either format allowed */
        !           486: #define HP100_MACRQ_FRAMEFMT_802_3   0x0000  /* 00: 802.3 is requested */
        !           487: #define HP100_MACRQ_FRAMEFMT_802_5   0x0010  /* 10: 802.5 format is requested */
        !           488: #define HP100_CARD_MACVER            0xe000  /* R: 3 bit Cards 100VG MAC version */
        !           489: #define HP100_MALLOW_REPEATER        0x0001  /* If reset, requested access as an
        !           490:                                              * end node is allowed */
        !           491: #define HP100_MALLOW_PROMSC          0x0004  /* 2 bits: Promiscious mode
        !           492:                                              * 00: Rcv only unicast packets
        !           493:                                              *     specifically addr to this
        !           494:                                              *     endnode
        !           495:                                              * 10: Rcv all pckts fwded by 
        !           496:                                              *     the local repeater */
        !           497: #define HP100_MALLOW_FRAMEFMT        0x00e0  /* 2 bits: Frame Format
        !           498:                                              * 00: 802.3 format will be used
        !           499:                                              * 10: 802.5 format will be used */
        !           500: #define HP100_MALLOW_ACCDENIED       0x0400  /* N bit */
        !           501: #define HP100_MALLOW_CONFIGURE       0x0f00  /* C bit */
        !           502: #define HP100_MALLOW_DUPADDR         0x1000  /* D bit */
        !           503: #define HP100_HUB_MACVER             0xe000  /* R: 3 bit 802.12 MAC/RMAC training */
        !           504:                                              /*    protocol of repeater */
        !           505: 
        !           506: /* ****************************************************************************** */
        !           507: 
        !           508: /*
        !           509:  *  Set/Reset bits
        !           510:  */
        !           511: #define HP100_SET_HB           0x0100  /* 0:Set fields to 0 whose mask is 1 */
        !           512: #define HP100_SET_LB           0x0001  /* HB sets upper byte, LB sets lower byte */
        !           513: #define HP100_RESET_HB         0x0000  /* For readability when resetting bits */
        !           514: #define HP100_RESET_LB         0x0000  /* For readability when resetting bits */
        !           515: 
        !           516: /*
        !           517:  *  Misc. Constants
        !           518:  */
        !           519: #define HP100_LAN_100          100     /* lan_type value for VG */
        !           520: #define HP100_LAN_10           10      /* lan_type value for 10BaseT */
        !           521: #define HP100_LAN_ERR          (-1)    /* lan_type value for link down */
        !           522: 
        !           523: #define TRUE 1
        !           524: #define FALSE 0
        !           525: 
        !           526: 
        !           527: /* 
        !           528:  * Bus Master Data Structures  ----------------------------------------------
        !           529:  */
        !           530: 
        !           531: #define MAX_RX_PDL              30   /* Card limit = 31 */
        !           532: #define MAX_RX_FRAG             2    /* Don't need more... */
        !           533: #define MAX_TX_PDL              29
        !           534: #define MAX_TX_FRAG             2   /* Limit = 31 */
        !           535: 
        !           536: /* Define total PDL area size in bytes (should be 4096) */
        !           537: /* This is the size of kernel (dma) memory that will be allocated. */
        !           538: #define MAX_RINGSIZE ((MAX_RX_FRAG*8+4+4)*MAX_RX_PDL+(MAX_TX_FRAG*8+4+4)*MAX_TX_PDL)+16
        !           539: 
        !           540: /* Ethernet Packet Sizes */
        !           541: #define MIN_ETHER_SIZE          60
        !           542: #define MAX_ETHER_SIZE          1514    /* Needed for preallocation of */
        !           543:                                         /* skb buffer when busmastering */
        !           544: 
        !           545: /* Tx or Rx Ring Entry */
        !           546: typedef struct hp100_ring {
        !           547:   u_int                     *pdl;       /* Address of PDLs PDH, dword before
        !           548:                                         * this address is used for rx hdr */
        !           549:   u_int                     pdl_paddr;  /* Physical address of PDL */
        !           550:   struct sk_buff            *skb;
        !           551:   struct hp100_ring         *next;      
        !           552: } hp100_ring_t;
        !           553: 
        !           554: 
        !           555: 
        !           556: /* Mask for Header Descriptor */
        !           557: #define HP100_PKT_LEN_MASK     0x1FFF  /* AND with RxLength to get length */
        !           558: 
        !           559: 
        !           560: /* Receive Packet Status.  Note, the error bits are only valid if ACC_ERRORED 
        !           561:    bit in the MAC Configuration Register 1 is set. */
        !           562: #define HP100_RX_PRI           0x8000  /* 0:No, 1:Yes packet is priority */
        !           563: #define HP100_SDF_ERR          0x4000  /* 0:No, 1:Yes start of frame error */
        !           564: #define HP100_SKEW_ERR         0x2000  /* 0:No, 1:Yes skew out of range */
        !           565: #define HP100_BAD_SYMBOL_ERR   0x1000  /* 0:No, 1:Yes invalid symbol received */
        !           566: #define HP100_RCV_IPM_ERR      0x0800  /* 0:No, 1:Yes pkt had an invalid packet */
        !           567:                                         /*   marker */
        !           568: #define HP100_SYMBOL_BAL_ERR   0x0400  /* 0:No, 1:Yes symbol balance error */
        !           569: #define HP100_VG_ALN_ERR       0x0200  /* 0:No, 1:Yes non-octet received */
        !           570: #define HP100_TRUNC_ERR                0x0100  /* 0:No, 1:Yes the packet was truncated */
        !           571: #define HP100_RUNT_ERR         0x0040  /* 0:No, 1:Yes pkt length < Min Pkt */
        !           572:                                         /*   Length Reg. */
        !           573: #define HP100_ALN_ERR          0x0010  /* 0:No, 1:Yes align error. */
        !           574: #define HP100_CRC_ERR          0x0008  /* 0:No, 1:Yes CRC occurred. */
        !           575: 
        !           576: /* The last three bits indicate the type of destination address */
        !           577: 
        !           578: #define HP100_MULTI_ADDR_HASH  0x0006  /* 110: Addr multicast, matched hash */
        !           579: #define HP100_BROADCAST_ADDR   0x0003  /* x11: Addr broadcast */
        !           580: #define HP100_MULTI_ADDR_NO_HASH 0x0002        /* 010: Addr multicast, didn't match hash */
        !           581: #define HP100_PHYS_ADDR_MATCH  0x0001  /* x01: Addr was physical and mine */
        !           582: #define HP100_PHYS_ADDR_NO_MATCH 0x0000        /* x00: Addr was physical but not mine */
        !           583: 
        !           584: /*
        !           585:  *  macros
        !           586:  */
        !           587: 
        !           588: #define hp100_inb( reg ) \
        !           589:         inb( ioaddr + HP100_REG_##reg )
        !           590: #define hp100_inw( reg ) \
        !           591:        inw( ioaddr + HP100_REG_##reg )
        !           592: #define hp100_inl( reg ) \
        !           593:        inl( ioaddr + HP100_REG_##reg )
        !           594: #define hp100_outb( data, reg ) \
        !           595:        outb( data, ioaddr + HP100_REG_##reg )
        !           596: #define hp100_outw( data, reg ) \
        !           597:        outw( data, ioaddr + HP100_REG_##reg )
        !           598: #define hp100_outl( data, reg ) \
        !           599:        outl( data, ioaddr + HP100_REG_##reg )
        !           600: #define hp100_orb( data, reg ) \
        !           601:        outb( inb( ioaddr + HP100_REG_##reg ) | (data), ioaddr + HP100_REG_##reg )
        !           602: #define hp100_orw( data, reg ) \
        !           603:        outw( inw( ioaddr + HP100_REG_##reg ) | (data), ioaddr + HP100_REG_##reg )
        !           604: #define hp100_andb( data, reg ) \
        !           605:        outb( inb( ioaddr + HP100_REG_##reg ) & (data), ioaddr + HP100_REG_##reg )
        !           606: #define hp100_andw( data, reg ) \
        !           607:        outw( inw( ioaddr + HP100_REG_##reg ) & (data), ioaddr + HP100_REG_##reg )
        !           608: 
        !           609: #define hp100_page( page ) \
        !           610:        outw( HP100_PAGE_##page, ioaddr + HP100_REG_PAGING )
        !           611: #define hp100_ints_off() \
        !           612:        outw( HP100_INT_EN | HP100_RESET_LB, ioaddr + HP100_REG_OPTION_LSW )
        !           613: #define hp100_ints_on() \
        !           614:        outw( HP100_INT_EN | HP100_SET_LB, ioaddr + HP100_REG_OPTION_LSW )
        !           615: #define hp100_mem_map_enable() \
        !           616:        outw( HP100_MMAP_DIS | HP100_RESET_HB, ioaddr + HP100_REG_OPTION_LSW )
        !           617: #define hp100_mem_map_disable() \
        !           618:        outw( HP100_MMAP_DIS | HP100_SET_HB, ioaddr + HP100_REG_OPTION_LSW )
        !           619: 
        !           620: 
        !           621: /*
        !           622:  * Local variables:
        !           623:  *  c-indent-level: 2
        !           624:  *  tab-width: 8
        !           625:  * End:
        !           626: */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.