1 1.3 tsutsui /* $NetBSD: wereg.h,v 1.3 2010/03/19 15:59:22 tsutsui Exp $ */ 2 1.1 jdolecek 3 1.1 jdolecek /* 4 1.1 jdolecek * National Semiconductor DS8390 NIC register definitions. 5 1.1 jdolecek * 6 1.1 jdolecek * Copyright (C) 1993, David Greenman. This software may be used, modified, 7 1.1 jdolecek * copied, distributed, and sold, in both source and binary form provided that 8 1.1 jdolecek * the above copyright and these terms are retained. Under no circumstances is 9 1.1 jdolecek * the author responsible for the proper functioning of this software, nor does 10 1.1 jdolecek * the author assume any responsibility for damages incurred with its use. 11 1.1 jdolecek */ 12 1.1 jdolecek 13 1.1 jdolecek /* 14 1.1 jdolecek * Definitions for Western digital/SMC WD80x3 series ASIC 15 1.1 jdolecek */ 16 1.1 jdolecek 17 1.1 jdolecek /* 18 1.1 jdolecek * Memory Select Register (MSR) 19 1.1 jdolecek */ 20 1.1 jdolecek #define WE_MSR 0 21 1.1 jdolecek 22 1.1 jdolecek /* next three definitions for Toshiba */ 23 1.1 jdolecek #define WE_MSR_POW 0x02 /* 0 = power save, 1 = normal (R/W) */ 24 1.1 jdolecek #define WE_MSR_BSY 0x04 /* gate array busy (R) */ 25 1.1 jdolecek #define WE_MSR_LEN 0x20 /* 0 = 16-bit, 1 = 8-bit (R/W) */ 26 1.1 jdolecek 27 1.1 jdolecek #define WE_MSR_ADDR 0x3f /* Memory decode bits 18-13 */ 28 1.1 jdolecek #define WE_MSR_MENB 0x40 /* Memory enable */ 29 1.1 jdolecek #define WE_MSR_RST 0x80 /* Reset board */ 30 1.1 jdolecek 31 1.1 jdolecek /* 32 1.1 jdolecek * Interface Configuration Register (ICR) 33 1.1 jdolecek */ 34 1.1 jdolecek #define WE_ICR 1 35 1.1 jdolecek 36 1.1 jdolecek #define WE_ICR_16BIT 0x01 /* 16-bit interface */ 37 1.1 jdolecek #define WE_ICR_OAR 0x02 /* select register (0=BIO 1=EAR) */ 38 1.1 jdolecek #define WE_ICR_IR2 0x04 /* high order bit of encoded IRQ */ 39 1.1 jdolecek #define WE_ICR_MSZ 0x08 /* memory size (0=8k 1=32k) */ 40 1.1 jdolecek #define WE_ICR_RLA 0x10 /* recall LAN address */ 41 1.1 jdolecek #define WE_ICR_RX7 0x20 /* recall all but i/o and LAN address */ 42 1.1 jdolecek #define WE_ICR_RIO 0x40 /* recall i/o address */ 43 1.1 jdolecek #define WE_ICR_STO 0x80 /* store to non-volatile memory */ 44 1.1 jdolecek #ifdef TOSH_ETHER 45 1.1 jdolecek #define WE_ICR_MEM 0xe0 /* shared mem address A15-A13 (R/W) */ 46 1.1 jdolecek #define WE_ICR_MSZ1 0x0f /* memory size, 0x08 = 64K, 0x04 = 32K, 47 1.1 jdolecek 0x02 = 16K, 0x01 = 8K */ 48 1.1 jdolecek /* 64K can only be used if mem address 49 1.1 jdolecek above 1MB */ 50 1.1 jdolecek /* IAR holds address A23-A16 (R/W) */ 51 1.1 jdolecek #endif 52 1.1 jdolecek 53 1.1 jdolecek /* 54 1.1 jdolecek * IO Address Register (IAR) 55 1.1 jdolecek */ 56 1.1 jdolecek #define WE_IAR 2 57 1.1 jdolecek 58 1.1 jdolecek /* 59 1.1 jdolecek * EEROM Address Register 60 1.1 jdolecek */ 61 1.1 jdolecek #define WE_EAR 3 62 1.1 jdolecek 63 1.1 jdolecek /* 64 1.1 jdolecek * Interrupt Request Register (IRR) 65 1.1 jdolecek */ 66 1.1 jdolecek #define WE_IRR 4 67 1.1 jdolecek 68 1.1 jdolecek #define WE_IRR_0WS 0x01 /* use 0 wait-states on 8 bit bus */ 69 1.1 jdolecek #define WE_IRR_OUT1 0x02 /* WD83C584 pin 1 output */ 70 1.1 jdolecek #define WE_IRR_OUT2 0x04 /* WD83C584 pin 2 output */ 71 1.1 jdolecek #define WE_IRR_OUT3 0x08 /* WD83C584 pin 3 output */ 72 1.1 jdolecek #define WE_IRR_FLASH 0x10 /* Flash RAM is in the ROM socket */ 73 1.1 jdolecek 74 1.1 jdolecek /* 75 1.1 jdolecek * The three bits of the encoded IRQ are decoded as follows: 76 1.1 jdolecek * 77 1.1 jdolecek * IR2 IR1 IR0 IRQ 78 1.1 jdolecek * 0 0 0 2/9 79 1.1 jdolecek * 0 0 1 3 80 1.1 jdolecek * 0 1 0 5 81 1.1 jdolecek * 0 1 1 7 82 1.1 jdolecek * 1 0 0 10 83 1.1 jdolecek * 1 0 1 11 84 1.1 jdolecek * 1 1 0 15 85 1.1 jdolecek * 1 1 1 4 86 1.1 jdolecek */ 87 1.1 jdolecek #define WE_IRR_IR0 0x20 /* bit 0 of encoded IRQ */ 88 1.1 jdolecek #define WE_IRR_IR1 0x40 /* bit 1 of encoded IRQ */ 89 1.1 jdolecek #define WE_IRR_IEN 0x80 /* Interrupt enable */ 90 1.1 jdolecek 91 1.1 jdolecek /* 92 1.1 jdolecek * LA Address Register (LAAR) 93 1.1 jdolecek */ 94 1.1 jdolecek #define WE_LAAR 5 95 1.1 jdolecek 96 1.1 jdolecek #define WE_LAAR_ADDRHI 0x1f /* bits 23-19 of RAM address */ 97 1.1 jdolecek #define WE_LAAR_0WS16 0x20 /* enable 0 wait-states on 16 bit bus */ 98 1.1 jdolecek #define WE_LAAR_L16EN 0x40 /* enable 16-bit operation */ 99 1.1 jdolecek #define WE_LAAR_M16EN 0x80 /* enable 16-bit memory access */ 100 1.1 jdolecek 101 1.1 jdolecek /* i/o base offset to station address/card-ID PROM */ 102 1.1 jdolecek #define WE_PROM 8 103 1.1 jdolecek 104 1.1 jdolecek /* 105 1.1 jdolecek * 83C790 specific registers 106 1.1 jdolecek */ 107 1.1 jdolecek /* 108 1.1 jdolecek * Hardware Support Register (HWR) ('790) 109 1.1 jdolecek */ 110 1.1 jdolecek #define WE790_HWR 4 111 1.1 jdolecek 112 1.1 jdolecek #define WE790_HWR_RST 0x10 /* hardware reset */ 113 1.1 jdolecek #define WE790_HWR_LPRM 0x40 /* LAN PROM select */ 114 1.1 jdolecek #define WE790_HWR_SWH 0x80 /* switch register set */ 115 1.1 jdolecek 116 1.1 jdolecek /* 117 1.1 jdolecek * ICR790 Interrupt Control Register for the 83C790 118 1.1 jdolecek */ 119 1.1 jdolecek #define WE790_ICR 6 120 1.1 jdolecek 121 1.1 jdolecek #define WE790_ICR_EIL 0x01 /* enable interrupts */ 122 1.1 jdolecek 123 1.1 jdolecek /* 124 1.1 jdolecek * REV/IOPA Revision / I/O Pipe register for the 83C79X 125 1.1 jdolecek */ 126 1.1 jdolecek #define WE790_REV 7 127 1.1 jdolecek 128 1.1 jdolecek #define WE790_REV_790 0x20 129 1.1 jdolecek #define WE790_REV_795 0x40 130 1.1 jdolecek 131 1.1 jdolecek /* 132 1.1 jdolecek * 79X RAM Address Register (RAR) 133 1.1 jdolecek * Enabled with SWH bit=1 in HWR register 134 1.1 jdolecek */ 135 1.1 jdolecek 136 1.1 jdolecek #define WE790_RAR 0x0b 137 1.1 jdolecek 138 1.3 tsutsui #define WE790_RAR_OFF 0x0f /* memory address offset */ 139 1.3 tsutsui #define WE790_RAR_SZ 0x30 /* mask of memory buffer size */ 140 1.1 jdolecek #define WE790_RAR_SZ8 0x00 /* 8k memory buffer */ 141 1.1 jdolecek #define WE790_RAR_SZ16 0x10 /* 16k memory buffer */ 142 1.1 jdolecek #define WE790_RAR_SZ32 0x20 /* 32k memory buffer */ 143 1.1 jdolecek #define WE790_RAR_SZ64 0x30 /* 64k memory buffer */ 144 1.3 tsutsui #define WE790_RAR_BASE 0x40 /* mask of memory base address */ 145 1.3 tsutsui #define WE790_RAR_BASE0 0x00 /* base is 0x0C0000 */ 146 1.3 tsutsui #define WE790_RAR_BASE1 0x40 /* base is 0x0E0000 */ 147 1.3 tsutsui #if 0 148 1.3 tsutsui #define WE790_RAR_BASE2 0x80 /* base is 0xFC0000 */ 149 1.3 tsutsui #define WE790_RAR_BASE3 0xc0 /* base is 0xFE0000 */ 150 1.3 tsutsui #endif 151 1.3 tsutsui #define WE790_RAR_BASE_SHIFT 17 /* base is switched by A17 */ 152 1.3 tsutsui #define WE790_RAR_OFF_SHIFT 13 /* offset is specified by A16-A13 */ 153 1.1 jdolecek 154 1.1 jdolecek /* 155 1.1 jdolecek * General Control Register (GCR) 156 1.1 jdolecek * Enabled with SWH bit == 1 in HWR register 157 1.1 jdolecek */ 158 1.1 jdolecek #define WE790_GCR 0x0d 159 1.1 jdolecek 160 1.1 jdolecek #define WE790_GCR_LIT 0x01 /* on for UTP */ 161 1.1 jdolecek #define WE790_GCR_GPOUT 0x02 /* if BNC is enabled */ 162 1.1 jdolecek #define WE790_GCR_IR0 0x04 /* bit 0 of encoded IRQ */ 163 1.1 jdolecek #define WE790_GCR_IR1 0x08 /* bit 1 of encoded IRQ */ 164 1.1 jdolecek #define WE790_GCR_ZWSEN 0x20 /* zero wait state enable */ 165 1.1 jdolecek #define WE790_GCR_IR2 0x40 /* bit 2 of encoded IRQ */ 166 1.1 jdolecek /* 167 1.1 jdolecek * The three bits of the encoded IRQ are decoded as follows: 168 1.1 jdolecek * 169 1.1 jdolecek * IR2 IR1 IR0 IRQ 170 1.1 jdolecek * 0 0 0 none 171 1.1 jdolecek * 0 0 1 9 172 1.1 jdolecek * 0 1 0 3 173 1.1 jdolecek * 0 1 1 5 174 1.1 jdolecek * 1 0 0 7 175 1.1 jdolecek * 1 0 1 10 176 1.1 jdolecek * 1 1 0 11 177 1.1 jdolecek * 1 1 1 15 178 1.1 jdolecek */ 179 1.1 jdolecek 180 1.1 jdolecek /* i/o base offset to CARD ID */ 181 1.1 jdolecek #define WE_CARD_ID WE_PROM+6 182 1.1 jdolecek 183 1.1 jdolecek /* Board type codes in card ID */ 184 1.1 jdolecek #define WE_TYPE_WD8003S 0x02 185 1.1 jdolecek #define WE_TYPE_WD8003E 0x03 186 1.1 jdolecek #define WE_TYPE_WD8013EBT 0x05 187 1.1 jdolecek #define WE_TYPE_TOSHIBA1 0x11 /* named PCETA1 */ 188 1.1 jdolecek #define WE_TYPE_TOSHIBA2 0x12 /* named PCETA2 */ 189 1.1 jdolecek #define WE_TYPE_TOSHIBA3 0x13 /* named PCETB */ 190 1.1 jdolecek #define WE_TYPE_TOSHIBA4 0x14 /* named PCETC */ 191 1.1 jdolecek #define WE_TYPE_WD8003W 0x24 192 1.1 jdolecek #define WE_TYPE_WD8003EB 0x25 193 1.1 jdolecek #define WE_TYPE_WD8013W 0x26 194 1.1 jdolecek #define WE_TYPE_WD8013EP 0x27 195 1.1 jdolecek #define WE_TYPE_WD8013WC 0x28 196 1.1 jdolecek #define WE_TYPE_WD8013EPC 0x29 197 1.1 jdolecek #define WE_TYPE_SMC8216T 0x2a 198 1.1 jdolecek #define WE_TYPE_SMC8216C 0x2b 199 1.1 jdolecek #define WE_TYPE_WD8013EBP 0x2c 200 1.1 jdolecek 201 1.1 jdolecek /* Bit definitions in card ID */ 202 1.1 jdolecek #define WE_REV_MASK 0x1f /* Revision mask */ 203 1.1 jdolecek #define WE_SOFTCONFIG 0x20 /* Soft config */ 204 1.1 jdolecek #define WE_LARGERAM 0x40 /* Large RAM */ 205 1.1 jdolecek #define WE_MICROCHANEL 0x80 /* Microchannel bus (vs. isa) */ 206 1.1 jdolecek 207 1.1 jdolecek /* 208 1.1 jdolecek * Checksum total. All 8 bytes in station address PROM will add up to this. 209 1.1 jdolecek */ 210 1.1 jdolecek #ifdef TOSH_ETHER 211 1.1 jdolecek #define WE_ROM_CHECKSUM_TOTAL 0xA5 212 1.1 jdolecek #else 213 1.1 jdolecek #define WE_ROM_CHECKSUM_TOTAL 0xFF 214 1.1 jdolecek #endif 215 1.1 jdolecek 216 1.1 jdolecek #define WE_NIC_OFFSET 0x10 /* I/O base offset to NIC */ 217 1.1 jdolecek #define WE_ASIC_OFFSET 0 /* I/O base offset to ASIC */ 218 1.1 jdolecek #define WE_NIC_NPORTS 16 219 1.1 jdolecek #define WE_ASIC_NPORTS 16 220 1.1 jdolecek #define WE_NPORTS (WE_NIC_NPORTS + WE_ASIC_NPORTS) 221 1.1 jdolecek 222 1.1 jdolecek #define WE_PAGE_OFFSET 0 /* page offset for NIC access to mem */ 223