Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /****************************************************************************** |
| 2 | * |
| 3 | * (C)Copyright 1998,1999 SysKonnect, |
| 4 | * a business unit of Schneider & Koch & Co. Datensysteme GmbH. |
| 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by |
| 8 | * the Free Software Foundation; either version 2 of the License, or |
| 9 | * (at your option) any later version. |
| 10 | * |
| 11 | * The information in this file is provided "AS IS" without warranty. |
| 12 | * |
| 13 | ******************************************************************************/ |
| 14 | |
| 15 | #ifndef _SKFBI_H_ |
| 16 | #define _SKFBI_H_ |
| 17 | |
| 18 | #ifdef SYNC |
| 19 | #define exist_board_far exist_board |
| 20 | #define get_board_para_far get_board_para |
| 21 | #endif |
| 22 | |
| 23 | /* |
| 24 | * physical address offset + IO-Port base address |
| 25 | */ |
| 26 | #ifndef PCI |
| 27 | #define ADDR(a) ((a)+smc->hw.iop) |
| 28 | #define ADDRS(smc,a) ((a)+(smc)->hw.iop) |
| 29 | #endif |
| 30 | |
| 31 | /* |
| 32 | * FDDI-Fx (x := {I(SA), E(ISA), M(CA), P(CI)}) |
| 33 | * address calculation & function defines |
| 34 | */ |
| 35 | |
| 36 | #ifdef EISA |
| 37 | |
| 38 | /* |
| 39 | * Configuration PROM: !! all 8-Bit IO's !! |
| 40 | * |<- MAC-Address ->| |
| 41 | * /-+--+--+--+--+-//-+--+--+--+--+-//-+--+--+--+--+-//-+--+--+--+--+-/ |
| 42 | * val: |PROD_ID0..3| | free | |00|00|5A|40| |nn|mm|00|00| |
| 43 | * /-+--+--+--+--+-//-+--+--+--+--+-//-+--+--+--+--+-//-+--+--+--+--+-/ |
| 44 | * IO- ^ ^ ^ ^ ^ |
| 45 | * port 0C80 0C83 0C88 0C90 0C98 |
| 46 | * | \ |
| 47 | * | \ |
| 48 | * | \______________________________________________ |
| 49 | * EISA Expansion Board Product ID: \ |
| 50 | * BIT: |7 6 5 4 3 2 1 0| \ |
| 51 | * | PROD_ID0 | PROD_ID1 | PROD_ID2 | PROD_ID3 | |
| 52 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 53 | * |0| MAN_C0 | MAN_C1 | MAN_C2 | PROD1 | PROD0 | REV1 | REV0 | |
| 54 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 55 | * ^=reserved | product numb. | revision numb | |
| 56 | * MAN_Cx = compressed manufacterer code (x:=0..2) |
| 57 | * ASCII : 'A'..'Z' : 0x41..0x5A -> compr.(c-0x40) : 0x01..0x1A (5Bits!) |
| 58 | */ |
| 59 | |
| 60 | #ifndef MULT_OEM |
| 61 | #ifndef OEM_CONCEPT |
| 62 | #define MAN_C0 ('S'-0x40) |
| 63 | #define MAN_C1 ('K'-0x40) |
| 64 | #define MAN_C2 ('D'-0x40) |
| 65 | #define PROD_ID0 (u_char)((MAN_C0<<2) | (MAN_C1>>3)) |
| 66 | #define PROD_ID1 (u_char)(((MAN_C1<<5) & 0xff) | MAN_C2) |
| 67 | #define PROD_ID2 (u_char)(1) /* prod. nr. */ |
| 68 | #define PROD_ID3 (u_char)(0) /* rev. nr. */ |
| 69 | |
| 70 | #ifndef OEM_USER_DATA |
| 71 | #define OEM_USER_DATA "SK-NET FDDI V2.0 Userdata" |
| 72 | #endif |
| 73 | #else /* OEM_CONCEPT */ |
| 74 | |
| 75 | /* MAN_C(0|1|2) no longer present (ra). */ |
| 76 | #define PROD_ID0 (u_char)OEM_PROD_ID0 |
| 77 | #define PROD_ID1 (u_char)OEM_PROD_ID1 |
| 78 | #define PROD_ID2 (u_char)OEM_PROD_ID2 |
| 79 | #define PROD_ID3 (u_char)OEM_PROD_ID3 |
| 80 | #endif /* OEM_CONCEPT */ |
| 81 | |
| 82 | #define SKLOGO PROD_ID0, PROD_ID1, PROD_ID2, PROD_ID3 |
| 83 | #endif /* MULT_OEM */ |
| 84 | |
| 85 | #define SADDRL (0) /* start address SKLOGO */ |
| 86 | #define SA_MAC (0x10) /* start addr. MAC_AD within the PROM */ |
| 87 | #define PRA_OFF (4) |
| 88 | #define SA_PMD_TYPE (8) /* start addr. PMD-Type */ |
| 89 | |
| 90 | #define SKFDDI_PSZ 32 /* address PROM size */ |
| 91 | |
| 92 | /* |
| 93 | * address transmission from logical to physical offset address on board |
| 94 | */ |
| 95 | #define FMA(a) (0x0400|((a)<<1)) /* FORMAC+ (r/w) */ |
| 96 | #define P1A(a) (0x0800|((a)<<1)) /* PLC1 (r/w) */ |
| 97 | #define P2A(a) (0x0840|((a)<<1)) /* PLC2 (r/w) */ |
| 98 | #define TIA(a) (0x0880|((a)<<1)) /* Timer (r/w) */ |
| 99 | #define PRA(a) (0x0c80| (a)) /* configuration PROM */ |
| 100 | #define C0A(a) (0x0c84| (a)) /* config. RAM */ |
| 101 | #define C1A(a) (0x0ca0| (a)) /* IRQ-, DMA-nr., EPROM type */ |
| 102 | #define C2A(a) (0x0ca4| (a)) /* EPROM and PAGE selector */ |
| 103 | |
| 104 | #define CONF C0A(0) /* config RAM (card enable bit port) */ |
| 105 | #define PGRA C2A(0) /* Flash page register */ |
| 106 | #define CDID PRA(0) /* Card ID I/O port addr. offset */ |
| 107 | |
| 108 | |
| 109 | /* |
| 110 | * physical address offset + slot specific IO-Port base address |
| 111 | */ |
| 112 | #define FM_A(a) (FMA(a)+smc->hw.iop) /* FORMAC Plus physical addr */ |
| 113 | #define P1_A(a) (P1A(a)+smc->hw.iop) /* PLC1 (r/w) */ |
| 114 | #define P2_A(a) (P2A(a)+smc->hw.iop) /* PLC2 (r/w) */ |
| 115 | #define TI_A(a) (TIA(a)+smc->hw.iop) /* Timer (r/w) */ |
| 116 | #define PR_A(a) (PRA(a)+smc->hw.iop) /* config. PROM */ |
| 117 | #define C0_A(a) (C0A(a)+smc->hw.iop) /* config. RAM */ |
| 118 | #define C1_A(a) (C1A(a)+smc->hw.iop) /* config. RAM */ |
| 119 | #define C2_A(a) (C2A(a)+smc->hw.iop) /* config. RAM */ |
| 120 | |
| 121 | |
| 122 | #define CSRA 0x0008 /* control/status register address (r/w) */ |
| 123 | #define ISRA 0x0008 /* int. source register address (upper 8Bits) */ |
| 124 | #define PLC1I 0x001a /* clear PLC1 interrupt (write only) */ |
| 125 | #define PLC2I 0x0020 /* clear PLC2 interrupt (write only) */ |
| 126 | #define CSFA 0x001c /* control/status FIFO BUSY flags (read only) */ |
| 127 | #define RQAA 0x001c /* Request reg. (write only) */ |
| 128 | #define WCTA 0x001e /* word counter (r/w) */ |
| 129 | #define FFLAG 0x005e /* FLAG/V_FULL (FIFO almost full, write only)*/ |
| 130 | |
| 131 | #define CSR_A (CSRA+smc->hw.iop) /* control/status register address (r/w) */ |
| 132 | #ifdef UNIX |
| 133 | #define CSR_AS(smc) (CSRA+(smc)->hw.iop) /* control/status register address (r/w) */ |
| 134 | #endif |
| 135 | #define ISR_A (ISRA+smc->hw.iop) /* int. source register address (upper 8Bits) */ |
| 136 | #define PLC1_I (PLC1I+smc->hw.iop) /* clear PLC1 internupt (write only) */ |
| 137 | #define PLC2_I (PLC2I+smc->hw.iop) /* clear PLC2 interrupt (write only) */ |
| 138 | #define CSF_A (CSFA+smc->hw.iop) /* control/status FIFO BUSY flags (r/w) */ |
| 139 | #define RQA_A (RQAA+smc->hw.iop) /* Request reg. (write only) */ |
| 140 | #define WCT_A (WCTA+smc->hw.iop) /* word counter (r/w) */ |
| 141 | #define FFLAG_A (FFLAG+smc->hw.iop) /* FLAG/V_FULL (FIFO almost full, write only)*/ |
| 142 | |
| 143 | /* |
| 144 | * control/status register CSRA bits |
| 145 | */ |
| 146 | /* write */ |
| 147 | #define CS_CRESET 0x01 /* Card reset (0=reset) */ |
| 148 | #define CS_RESET_FIFO 0x02 /* FIFO reset (0=reset) */ |
| 149 | #define CS_IMSK 0x04 /* enable IRQ (1=enable, 0=disable) */ |
| 150 | #define CS_EN_IRQ_TC 0x08 /* enable IRQ from transfer counter */ |
| 151 | #define CS_BYPASS 0x20 /* bypass switch (0=remove, 1=insert)*/ |
| 152 | #define CS_LED_0 0x40 /* switch LED 0 */ |
| 153 | #define CS_LED_1 0x80 /* switch LED 1 */ |
| 154 | /* read */ |
| 155 | #define CS_BYSTAT 0x40 /* 0=Bypass exist, 1= ..not */ |
| 156 | #define CS_SAS 0x80 /* single attachement station (=1) */ |
| 157 | |
| 158 | /* |
| 159 | * control/status register CSFA bits (FIFO) |
| 160 | */ |
| 161 | #define CSF_MUX0 0x01 |
| 162 | #define CSF_MUX1 0x02 |
| 163 | #define CSF_HSREQ0 0x04 |
| 164 | #define CSF_HSREQ1 0x08 |
| 165 | #define CSF_HSREQ2 0x10 |
| 166 | #define CSF_BUSY_DMA 0x40 |
| 167 | #define CSF_BUSY_FIFO 0x80 |
| 168 | |
| 169 | /* |
| 170 | * Interrupt source register ISRA (upper 8 data bits) read only & low activ. |
| 171 | */ |
| 172 | #define IS_MINTR1 0x0100 /* FORMAC ST1U/L & ~IMSK1U/L*/ |
| 173 | #define IS_MINTR2 0x0200 /* FORMAC ST2U/L & ~IMSK2U/L*/ |
| 174 | #define IS_PLINT1 0x0400 /* PLC1 */ |
| 175 | #define IS_PLINT2 0x0800 /* PLC2 */ |
| 176 | #define IS_TIMINT 0x1000 /* Timer 82C54-2 */ |
| 177 | #define IS_TC 0x2000 /* transf. counter */ |
| 178 | |
| 179 | #define ALL_IRSR (IS_MINTR1|IS_MINTR2|IS_PLINT1|IS_PLINT2|IS_TIMINT|IS_TC) |
| 180 | |
| 181 | /* |
| 182 | * CONFIG<0> RAM (C0_A()) |
| 183 | */ |
| 184 | #define CFG_CARD_EN 0x01 /* card enable */ |
| 185 | |
| 186 | /* |
| 187 | * CONFIG<1> RAM (C1_A()) |
| 188 | */ |
| 189 | #define CFG_IRQ_SEL 0x03 /* IRQ select (4 nr.) */ |
| 190 | #define CFG_IRQ_TT 0x04 /* IRQ trigger type (LEVEL/EDGE) */ |
| 191 | #define CFG_DRQ_SEL 0x18 /* DMA requ. (4 nr.) */ |
| 192 | #define CFG_BOOT_EN 0x20 /* 0=BOOT-, 1=Application Software */ |
| 193 | #define CFG_PROG_EN 0x40 /* V_Prog for FLASH_PROM (1=on) */ |
| 194 | |
| 195 | /* |
| 196 | * CONFIG<2> RAM (C2_A()) |
| 197 | */ |
| 198 | #define CFG_EPROM_SEL 0x0f /* FPROM start address selection */ |
| 199 | #define CFG_PAGE 0xf0 /* FPROM page selection */ |
| 200 | |
| 201 | |
| 202 | #define READ_PROM(a) ((u_char)inp(a)) |
| 203 | #define GET_PAGE(i) outp(C2_A(0),((int)(i)<<4) | (inp(C2_A(0)) & ~CFG_PAGE)) |
| 204 | #define FPROM_SW() (inp(C1_A(0)) & CFG_BOOT_EN) |
| 205 | |
| 206 | #define MAX_PAGES 16 /* 16 pages */ |
| 207 | #define MAX_FADDR 0x2000 /* 8K per page */ |
| 208 | #define VPP_ON() outp(C1_A(0),inp(C1_A(0)) | CFG_PROG_EN) |
| 209 | #define VPP_OFF() outp(C1_A(0),inp(C1_A(0)) & ~CFG_PROG_EN) |
| 210 | |
| 211 | #define DMA_BUSY() (inpw(CSF_A) & CSF_BUSY_DMA) |
| 212 | #define FIFO_BUSY() (inpw(CSF_A) & CSF_BUSY_FIFO) |
| 213 | #define DMA_FIFO_BUSY() (inpw(CSF_A) & (CSF_BUSY_DMA | CSF_BUSY_FIFO)) |
| 214 | #define BUS_CHECK() |
| 215 | |
| 216 | #ifdef UNISYS |
| 217 | /* For UNISYS use another macro with drv_usecewait function */ |
| 218 | #define CHECK_DMA() {u_long k = 1000000; \ |
| 219 | while (k && (DMA_BUSY())) { k--; drv_usecwait(20); } \ |
| 220 | if (!k) SMT_PANIC(smc,HWM_E0003,HWM_E0003_MSG) ; } |
| 221 | #else |
| 222 | #define CHECK_DMA() {u_long k = 1000000 ;\ |
| 223 | while (k && (DMA_BUSY())) k-- ;\ |
| 224 | if (!k) SMT_PANIC(smc,HWM_E0003,HWM_E0003_MSG) ; } |
| 225 | #endif |
| 226 | |
| 227 | #define CHECK_FIFO() {u_long k = 1000000 ;\ |
| 228 | while (k && (FIFO_BUSY())) k-- ;\ |
| 229 | if (!k) SMT_PANIC(smc,HWM_E0019,HWM_E0019_MSG) ; } |
| 230 | |
| 231 | #define CHECK_DMA_FIFO() {u_long k = 1000000 ;\ |
| 232 | while (k && (DMA_FIFO_BUSY())) k-- ;\ |
| 233 | if (!k) SMT_PANIC(smc,HWM_E0004,HWM_E0004_MSG) ; } |
| 234 | |
| 235 | #define GET_ISR() ~inpw(ISR_A) |
| 236 | #define CHECK_ISR() ~inpw(ISR_A) |
| 237 | |
| 238 | #ifndef UNIX |
| 239 | #ifndef WINNT |
| 240 | #define CLI_FBI() outpw(CSR_A,(inpw(CSR_A)&\ |
| 241 | (CS_CRESET|CS_BYPASS))|CS_RESET_FIFO|smc->hw.led) |
| 242 | #else /* WINNT */ |
| 243 | #define CLI_FBI() outpw(CSR_A,(l_inpw(CSR_A)&\ |
| 244 | (CS_CRESET|CS_BYPASS))|CS_RESET_FIFO|smc->hw.led) |
| 245 | #endif /* WINNT */ |
| 246 | #else /* UNIX */ |
| 247 | #define CLI_FBI(smc) outpw(CSR_AS(smc),(inpw(CSR_AS(smc))&\ |
| 248 | (CS_CRESET|CS_BYPASS))|CS_RESET_FIFO|(smc)->hw.led) |
| 249 | #endif |
| 250 | |
| 251 | #ifndef UNIX |
| 252 | #define STI_FBI() outpw(CSR_A,(inpw(CSR_A)&\ |
| 253 | (CS_CRESET|CS_BYPASS|CS_RESET_FIFO))|CS_IMSK|smc->hw.led) |
| 254 | #else |
| 255 | #define STI_FBI(smc) outpw(CSR_AS(smc),(inpw(CSR_AS(smc))&\ |
| 256 | (CS_CRESET|CS_BYPASS|CS_RESET_FIFO))|CS_IMSK|(smc)->hw.led) |
| 257 | #endif |
| 258 | |
| 259 | /* EISA DMA Controller */ |
| 260 | #define DMA_WRITE_SINGLE_MASK_BIT_M 0x0a /* Master DMA Controller */ |
| 261 | #define DMA_WRITE_SINGLE_MASK_BIT_S 0xd4 /* Slave DMA Controller */ |
| 262 | #define DMA_CLEAR_BYTE_POINTER_M 0x0c |
| 263 | #define DMA_CLEAR_BYTE_POINTER_S 0xd8 |
| 264 | |
| 265 | #endif /* EISA */ |
| 266 | |
| 267 | #ifdef MCA |
| 268 | |
| 269 | /* |
| 270 | * POS Register: !! all I/O's are 8-Bit !! |
| 271 | */ |
| 272 | #define POS_SYS_SETUP 0x94 /* system setup register */ |
| 273 | #define POS_SYSTEM 0xff /* system mode */ |
| 274 | |
| 275 | #define POS_CHANNEL_POS 0x96 /* register slot ID */ |
| 276 | #define POS_CHANNEL_BIT 0x08 /* mask for -"- */ |
| 277 | |
| 278 | #define POS_BASE 0x100 /* POS base address */ |
| 279 | #define POS_ID_LOW POS_BASE /* card ID low */ |
| 280 | #define POS_ID_HIGH (POS_BASE+1) /* card ID high */ |
| 281 | #define POS_102 (POS_BASE+2) /* card en., arbitration level .. */ |
| 282 | #define POS_103 (POS_BASE+3) /* FPROM addr, page */ |
| 283 | #define POS_104 (POS_BASE+4) /* I/O, IRQ */ |
| 284 | #define POS_105 (POS_BASE+5) /* POS_CHCK */ |
| 285 | #define POS_106 (POS_BASE+6) /* to read VPD */ |
| 286 | #define POS_107 (POS_BASE+7) /* added without function */ |
| 287 | |
| 288 | /* FM1 card IDs */ |
| 289 | #define FM1_CARD_ID0 0x83 |
| 290 | #define FM1_CARD_ID1 0 |
| 291 | |
| 292 | #define FM1_IBM_ID0 0x9c |
| 293 | #define FM1_IBM_ID1 0x8f |
| 294 | |
| 295 | |
| 296 | /* FM2 card IDs */ |
| 297 | #define FM2_CARD_ID0 0xab |
| 298 | #define FM2_CARD_ID1 0 |
| 299 | |
| 300 | #define FM2_IBM_ID0 0x7e |
| 301 | #define FM2_IBM_ID1 0x8f |
| 302 | |
| 303 | /* Board revision. */ |
| 304 | #define FM1_REV 0 |
| 305 | #define FM2_REV 1 |
| 306 | |
| 307 | #define MAX_SLOT 8 |
| 308 | |
| 309 | /* |
| 310 | * POS_102 |
| 311 | */ |
| 312 | #define POS_CARD_EN 0x01 /* card enable =1 */ |
| 313 | #define POS_SDAT_EN 0x02 /* enable 32-bit streaming data mode */ |
| 314 | #define POS_EN_CHKINT 0x04 /* enable int. from check line asserted */ |
| 315 | #define POS_EN_BUS_ERR 0x08 /* enable int. on invalid busmaster transf. */ |
| 316 | #define POS_FAIRNESS 0x10 /* fairnes on =1 */ |
| 317 | /* attention: arbitration level used with bit 0 POS 105 */ |
| 318 | #define POS_LARBIT 0xe0 /* arbitration level (0,0,0)->level = 0x8 |
| 319 | (1,1,1)->level = 0xf */ |
| 320 | /* |
| 321 | * POS_103 |
| 322 | */ |
| 323 | #define POS_PAGE 0x07 /* FPROM page selection */ |
| 324 | #define POS_BOOT_EN 0x08 /* boot PROM enable =1 */ |
| 325 | #define POS_MSEL 0x70 /* memory start address for FPROM mapping */ |
| 326 | #define PROG_EN 0x80 /* FM1: Vpp prog on/off */ |
| 327 | #define POS_SDR 0x80 /* FM2: Streaming data bit */ |
| 328 | |
| 329 | /* |
| 330 | * POS_104 |
| 331 | */ |
| 332 | #define POS_IOSEL 0x3f /* selected I/O base address */ |
| 333 | #define POS_IRQSEL 0xc0 /* selected interrupt */ |
| 334 | |
| 335 | /* |
| 336 | * POS_105 |
| 337 | */ |
| 338 | #define POS_CHCK 0x80 |
| 339 | #define POS_SYNC_ERR 0x20 /* FM2: synchronous error reporting */ |
| 340 | #define POS_PAR_DATA 0x10 /* FM2: data parity enable bit */ |
| 341 | #define POS_PAR_ADDR 0x08 /* FM2: address parity enable bit */ |
| 342 | #define POS_IRQHSEL 0x02 /* FM2: Highest bit for IRQ_selection */ |
| 343 | #define POS_HARBIT 0x01 /* Highest bit in Bus arbitration selection */ |
| 344 | |
| 345 | #define SA_MAC (0) /* start addr. MAC_AD within the PROM */ |
| 346 | #define PRA_OFF (0) |
| 347 | #define SA_PMD_TYPE (8) /* start addr. PMD-Type */ |
| 348 | |
| 349 | /* |
| 350 | * address transmission from logical to physical offset address on board |
| 351 | */ |
| 352 | #define FMA(a) (0x0100|((a)<<1)) /* FORMAC+ (r/w) */ |
| 353 | #define P2(a) (0x00c0|((a)<<1)) /* PLC2 (r/w) (DAS) */ |
| 354 | #define P1(a) (0x0080|((a)<<1)) /* PLC1 (r/w) */ |
| 355 | #define TI(a) (0x0060|((a)<<1)) /* Timer (r/w) */ |
| 356 | #define PR(a) (0x0040|((a)<<1)) /* configuration PROM */ |
| 357 | #define CS(a) (0x0020| (a)) /* control/status */ |
| 358 | #define FF(a) (0x0010|((a)<<1)) /* FIFO ASIC */ |
| 359 | #define CT(a) (0x0000|((a)<<1)) /* counter */ |
| 360 | |
| 361 | /* |
| 362 | * counter |
| 363 | */ |
| 364 | #define ACLA CT(0) /* address counter low */ |
| 365 | #define ACHA CT(1) /* address counter high */ |
| 366 | #define BCN CT(2) /* byte counter */ |
| 367 | #define MUX CT(3) /* MUX-register */ |
| 368 | #define WCN CT(0x08) /* word counter */ |
| 369 | #define FFLG CT(0x09) /* FIFO Flags */ |
| 370 | |
| 371 | /* |
| 372 | * test/control register (FM2 only) |
| 373 | */ |
| 374 | #define CNT_TST 0x018 /* Counter test control register */ |
| 375 | #define CNT_STP 0x01a /* Counter test step reg. (8 Bit) */ |
| 376 | |
| 377 | /* |
| 378 | * CS register (read only) |
| 379 | */ |
| 380 | #define CSRA CS(0) /* control/status register address */ |
| 381 | #define CSFA CS(2) /* control/status FIFO BUSY ... */ |
| 382 | #define ISRA CS(4) /* first int. source register address */ |
| 383 | #define ISR2 CS(6) /* second int. source register address */ |
| 384 | #define LEDR CS(0x0c) /* LED register r/w */ |
| 385 | #define CSIL CS(0x10) /* I/O mapped POS_ID_low (100) */ |
| 386 | #define CSIH CS(0x12) /* - " - POS_ID_HIGH (101) */ |
| 387 | #define CSA CS(0x14) /* - " - POS_102 */ |
| 388 | #define CSM CS(0x0e) /* - " - POS_103 */ |
| 389 | #define CSM_FM1 CS(0x16) /* - " - POS_103 (copy in FM1) */ |
| 390 | #define CSI CS(0x18) /* - " - POS_104 */ |
| 391 | #define CSS CS(0x1a) /* - " - POS_105 */ |
| 392 | #define CSP_06 CS(0x1c) /* - " - POS_106 */ |
| 393 | #define WDOG_ST 0x1c /* Watchdog status (FM2 only) */ |
| 394 | #define WDOG_EN 0x1c /* Watchdog enabling (FM2 only, 8Bit) */ |
| 395 | #define WDOG_DIS 0x1e /* Watchdog disabling (FM2 only, 8Bit) */ |
| 396 | |
| 397 | #define PGRA CSM /* Flash page register */ |
| 398 | |
| 399 | |
| 400 | #define WCTA FF(0) /* word counter */ |
| 401 | #define FFLAG FF(1) /* FLAG/V_FULL (FIFO almost full, write only)*/ |
| 402 | |
| 403 | /* |
| 404 | * Timer register (FM2 only) |
| 405 | */ |
| 406 | #define RTM_CNT 0x28 /* RTM Counter */ |
| 407 | #define TI_DIV 0x60 /* Timer Prescaler */ |
| 408 | #define TI_CH1 0x62 /* Timer channel 1 counter */ |
| 409 | #define TI_STOP 0x64 /* Stop timer on channel 1 */ |
| 410 | #define TI_STRT 0x66 /* Start timer on channel 1 */ |
| 411 | #define TI_INI2 0x68 /* Timer: Bus master preemption */ |
| 412 | #define TI_CNT2 0x6a /* Timer */ |
| 413 | #define TI_INI3 0x6c /* Timer: Streaming data */ |
| 414 | #define TI_CNT3 0x6e /* Timer */ |
| 415 | #define WDOG_LO 0x70 /* Watchdog counter low */ |
| 416 | #define WDOG_HI 0x72 /* Watchdog counter high */ |
| 417 | #define RTM_PRE 0x74 /* restr. token prescaler */ |
| 418 | #define RTM_TIM 0x76 /* restr. token timer */ |
| 419 | |
| 420 | /* |
| 421 | * Recommended Timeout values (for FM2 timer only) |
| 422 | */ |
| 423 | #define TOUT_BM_PRE 188 /* 3.76 usec */ |
| 424 | #define TOUT_S_DAT 374 /* 7.48 usec */ |
| 425 | |
| 426 | /* |
| 427 | * CS register (write only) |
| 428 | */ |
| 429 | #define HSR(p) CS(0x18|(p)) /* Host request register */ |
| 430 | |
| 431 | #define RTM_PUT 0x36 /* restr. token counter write */ |
| 432 | #define RTM_GET 0x28 /* - " - clear */ |
| 433 | #define RTM_CLEAR 0x34 /* - " - read */ |
| 434 | |
| 435 | /* |
| 436 | * BCN Bit definitions |
| 437 | */ |
| 438 | #define BCN_BUSY 0x8000 /* DMA Busy flag */ |
| 439 | #define BCN_AZERO 0x4000 /* Almost zero flag (BCN < 4) */ |
| 440 | #define BCN_STREAM 0x2000 /* Allow streaming data (BCN >= 8) */ |
| 441 | |
| 442 | /* |
| 443 | * WCN Bit definitions |
| 444 | */ |
| 445 | #define WCN_ZERO 0x2000 /* Zero flag (counted to zero) */ |
| 446 | #define WCN_AZERO 0x1000 /* Almost zero flag (BCN < 4) */ |
| 447 | |
| 448 | /* |
| 449 | * CNT_TST Bit definitions |
| 450 | */ |
| 451 | #define CNT_MODE 0x01 /* Go into test mode */ |
| 452 | #define CNT_D32 0x02 /* 16/32 BIT test mode */ |
| 453 | |
| 454 | /* |
| 455 | * FIFO Flag FIFO Flags/Vfull register |
| 456 | */ |
| 457 | #define FF_VFULL 0x003f /* V_full value mask */ |
| 458 | #define FFLG_FULL 0x2000 /* FULL flag */ |
| 459 | #define FFLG_A_FULL 0x1000 /* Almost full flag */ |
| 460 | #define FFLG_VFULL 0x0800 /* V_full Flag */ |
| 461 | #define FFLG_A_EMP 0x0400 /* almost empty flag */ |
| 462 | #define FFLG_EMP 0x0200 /* empty flag */ |
| 463 | #define FFLG_T_EMP 0x0100 /* totally empty flag */ |
| 464 | |
| 465 | /* |
| 466 | * WDOG Watchdog status register |
| 467 | */ |
| 468 | #define WDOG_ALM 0x01 /* Watchdog alarm Bit */ |
| 469 | #define WDOG_ACT 0x02 /* Watchdog active Bit */ |
| 470 | |
| 471 | /* |
| 472 | * CS(0) CONTROLS |
| 473 | */ |
| 474 | #define CS_CRESET 0x0001 |
| 475 | #define FIFO_RST 0x0002 |
| 476 | #define CS_IMSK 0x0004 |
| 477 | #define EN_IRQ_CHCK 0x0008 |
| 478 | #define EN_IRQ_TOKEN 0x0010 |
| 479 | #define EN_IRQ_TC 0x0020 |
| 480 | #define TOKEN_STATUS 0x0040 |
| 481 | #define RTM_CHANGE 0x0080 |
| 482 | |
| 483 | #define CS_SAS 0x0100 |
| 484 | #define CS_BYSTAT 0x0200 /* bypass connected (0=conn.) */ |
| 485 | #define CS_BYPASS 0x0400 /* bypass on/off indication */ |
| 486 | |
| 487 | /* |
| 488 | * CS(2) FIFOSTAT |
| 489 | */ |
| 490 | #define HSREQ 0x0007 |
| 491 | #define BIGDIR 0x0008 |
| 492 | #define CSF_BUSY_FIFO 0x0010 |
| 493 | #define CSF_BUSY_DMA 0x0020 |
| 494 | #define SLOT_32 0x0040 |
| 495 | |
| 496 | #define LED_0 0x0001 |
| 497 | #define LED_1 0x0002 |
| 498 | #define LED_2 0x0100 |
| 499 | |
| 500 | #define MAX_PAGES 8 /* pages */ |
| 501 | #define MAX_FADDR 0x4000 /* 16K per page */ |
| 502 | |
| 503 | /* |
| 504 | * IRQ = ISRA || ISR2 ; |
| 505 | * |
| 506 | * ISRA = IRQ_OTH_EN && (IS_LAN | IS_BUS) ; |
| 507 | * ISR2 = IRQ_TC_EN && IS_TC ; |
| 508 | * |
| 509 | * IS_LAN = (IS_MINTR1 | IS_MINTR2 | IS_PLINT1 | IS_PLINT2 | IS_TIMINT) || |
| 510 | * (IRQ_EN_TOKEN && IS_TOKEN) ; |
| 511 | * IS_BUS = IRQ_CHCK_EN && (IS_BUSERR | IS_CHCK_L) ; |
| 512 | */ |
| 513 | /* |
| 514 | * ISRA !!! activ high !!! |
| 515 | */ |
| 516 | #define IS_MINTR1 0x0001 /* FORMAC ST1U/L & ~IMSK1U/L*/ |
| 517 | #define IS_MINTR2 0x0002 /* FORMAC ST2U/L & ~IMSK2U/L*/ |
| 518 | #define IS_PLINT1 0x0004 /* PLC1 */ |
| 519 | #define IS_PLINT2 0x0008 /* PLC2 */ |
| 520 | #define IS_TIMINT 0x0010 /* Timer 82C54-2 */ |
| 521 | #define IS_TOKEN 0x0020 /* restrictet token monitoring */ |
| 522 | #define IS_CHCK_L 0x0040 /* check line asserted */ |
| 523 | #define IS_BUSERR 0x0080 /* bus error */ |
| 524 | /* |
| 525 | * ISR2 |
| 526 | */ |
| 527 | #define IS_TC 0x0001 /* terminal count irq */ |
| 528 | #define IS_SFDBKRTN 0x0002 /* selected feedback return */ |
| 529 | #define IS_D16 0x0004 /* DS16 */ |
| 530 | #define IS_D32 0x0008 /* DS32 */ |
| 531 | #define IS_DPEI 0x0010 /* Data Parity Indication */ |
| 532 | |
| 533 | #define ALL_IRSR 0x00ff |
| 534 | |
| 535 | #define FM_A(a) ADDR(FMA(a)) /* FORMAC Plus physical addr */ |
| 536 | #define P1_A(a) ADDR(P1(a)) /* PLC1 (r/w) */ |
| 537 | #define P2_A(a) ADDR(P2(a)) /* PLC2 (r/w) (DAS) */ |
| 538 | #define TI_A(a) ADDR(TI(a)) /* Timer (r/w) FM1 only! */ |
| 539 | #define PR_A(a) ADDR(PR(a)) /* config. PROM */ |
| 540 | #define CS_A(a) ADDR(CS(a)) /* control/status */ |
| 541 | |
| 542 | #define ISR1_A ADDR(ISRA) /* first int. source register address */ |
| 543 | #define ISR2_A ADDR(ISR2) /* second -"- */ |
| 544 | #define CSR_A ADDR(CSRA) /* control/status register address */ |
| 545 | #define CSF_A ADDR(CSFA) /* control/status FIFO BUSY flags (r/w) */ |
| 546 | |
| 547 | #define CSIL_A ADDR(CSIL) /* I/O mapped POS_ID_low (102) */ |
| 548 | #define CSIH_A ADDR(CSIH) /* - " - POS_ID_HIGH (101) */ |
| 549 | #define CSA_A ADDR(CSA) /* - " - POS_102 */ |
| 550 | #define CSI_A ADDR(CSI) /* - " - POS_104 */ |
| 551 | #define CSM_A ADDR(CSM) /* - " - POS_103 */ |
| 552 | #define CSM_FM1_A ADDR(CSM_FM1) /* - " - POS_103 (2nd copy, FM1) */ |
| 553 | #define CSP_06_A ADDR(CSP_06) /* - " - POS_106 */ |
| 554 | |
| 555 | #define WCT_A ADDR(WCTA) /* word counter (r/w) */ |
| 556 | #define FFLAG_A ADDR(FFLAG) /* FLAG/V_FULL (FIFO almost full, write only)*/ |
| 557 | |
| 558 | #define ACL_A ADDR(ACLA) /* address counter low */ |
| 559 | #define ACH_A ADDR(ACHA) /* address counter high */ |
| 560 | #define BCN_A ADDR(BCN) /* byte counter */ |
| 561 | #define MUX_A ADDR(MUX) /* MUX-register */ |
| 562 | |
| 563 | #define ISR_A ADDR(ISRA) /* Interrupt Source Register */ |
| 564 | #define FIFO_RESET_A ADDR(FIFO_RESET) /* reset the FIFO */ |
| 565 | #define FIFO_EN_A ADDR(FIFO_EN) /* enable the FIFO */ |
| 566 | |
| 567 | #define WDOG_EN_A ADDR(WDOG_EN) /* reset and start the WDOG */ |
| 568 | #define WDOG_DIS_A ADDR(WDOG_DIS) /* disable the WDOG */ |
| 569 | /* |
| 570 | * all control reg. (read!) are 8 bit (except PAGE_RG_A and LEDR_A) |
| 571 | */ |
| 572 | #define HSR_A(p) ADDR(HSR(p)) /* Host request register */ |
| 573 | |
| 574 | #define STAT_BYP 0 /* bypass station */ |
| 575 | #define STAT_INS 2 /* insert station */ |
| 576 | #define BYPASS(o) CS(0x10|(o)) /* o=STAT_BYP || STAT_INS */ |
| 577 | |
| 578 | #define IRQ_TC_EN CS(0x0b) /* enable/disable IRQ on TC */ |
| 579 | #define IRQ_TC_DIS CS(0x0a) |
| 580 | #define IRQ_TOKEN_EN CS(9) /* enable/disable IRQ on restr. Token */ |
| 581 | #define IRQ_TOKEN_DIS CS(8) |
| 582 | #define IRQ_CHCK_EN CS(7) /* -"- IRQ after CHCK line */ |
| 583 | #define IRQ_CHCK_DIS CS(6) |
| 584 | #define IRQ_OTH_EN CS(5) /* -"- other IRQ's */ |
| 585 | #define IRQ_OTH_DIS CS(4) |
| 586 | #define FIFO_EN CS(3) /* disable (reset), enable FIFO */ |
| 587 | #define FIFO_RESET CS(2) |
| 588 | #define CARD_EN CS(1) /* disable (reset), enable card */ |
| 589 | #define CARD_DIS CS(0) |
| 590 | |
| 591 | #define LEDR_A ADDR(LEDR) /* D0=green, D1=yellow, D8=L2 */ |
| 592 | #define PAGE_RG_A ADDR(CSM) /* D<2..0> */ |
| 593 | #define IRQ_CHCK_EN_A ADDR(IRQ_CHCK_EN) |
| 594 | #define IRQ_CHCK_DIS_A ADDR(IRQ_CHCK_DIS) |
| 595 | |
| 596 | #define GET_PAGE(bank) outpw(PAGE_RG_A,(inpw(PAGE_RG_A) &\ |
| 597 | (~POS_PAGE)) |(int) (bank)) |
| 598 | #define VPP_ON() if (smc->hw.rev == FM1_REV) { \ |
| 599 | outpw(PAGE_RG_A, \ |
| 600 | (inpw(PAGE_RG_A) & POS_PAGE) | PROG_EN); \ |
| 601 | } |
| 602 | #define VPP_OFF() if (smc->hw.rev == FM1_REV) { \ |
| 603 | outpw(PAGE_RG_A,(inpw(PAGE_RG_A) & POS_PAGE)); \ |
| 604 | } |
| 605 | |
| 606 | #define SKFDDI_PSZ 16 /* address PROM size */ |
| 607 | |
| 608 | #define READ_PROM(a) ((u_char)inp(a)) |
| 609 | |
| 610 | #define GET_ISR() ~inpw(ISR1_A) |
| 611 | #ifndef TCI |
| 612 | #define CHECK_ISR() ~inpw(ISR1_A) |
| 613 | #define CHECK_ISR_SMP(iop) ~inpw((iop)+ISRA) |
| 614 | #else |
| 615 | #define CHECK_ISR() (~inpw(ISR1_A) | ~inpw(ISR2_A)) |
| 616 | #define CHECK_ISR_SMP(iop) (~inpw((iop)+ISRA) | ~inpw((iop)+ISR2)) |
| 617 | #endif |
| 618 | |
| 619 | #define DMA_BUSY() (inpw(CSF_A) & CSF_BUSY_DMA) |
| 620 | #define FIFO_BUSY() (inpw(CSF_A) & CSF_BUSY_FIFO) |
| 621 | #define DMA_FIFO_BUSY() (inpw(CSF_A) & (CSF_BUSY_DMA | CSF_BUSY_FIFO)) |
| 622 | #define BUS_CHECK() { int i ; \ |
| 623 | if ((i = GET_ISR()) & IS_BUSERR) \ |
| 624 | SMT_PANIC(smc,HWM_E0020,HWM_E0020_MSG) ; \ |
| 625 | if (i & IS_CHCK_L) \ |
| 626 | SMT_PANIC(smc,HWM_E0014,HWM_E0014_MSG) ; \ |
| 627 | } |
| 628 | |
| 629 | #define CHECK_DMA() { u_long k = 10000 ; \ |
| 630 | while (k && (DMA_BUSY())) { \ |
| 631 | k-- ; \ |
| 632 | BUS_CHECK() ; \ |
| 633 | } \ |
| 634 | if (!k) SMT_PANIC(smc,HWM_E0003,HWM_E0003_MSG) ; } |
| 635 | |
| 636 | #define CHECK_FIFO() {u_long k = 1000000 ;\ |
| 637 | while (k && (FIFO_BUSY())) k-- ;\ |
| 638 | if (!k) SMT_PANIC(smc,HWM_E0019,HWM_E0019_MSG) ; } |
| 639 | |
| 640 | #define CHECK_DMA_FIFO() {u_long k = 1000000 ;\ |
| 641 | while (k && (DMA_FIFO_BUSY())) { \ |
| 642 | k-- ;\ |
| 643 | BUS_CHECK() ; \ |
| 644 | } \ |
| 645 | if (!k) SMT_PANIC(smc,HWM_E0004,HWM_E0004_MSG) ; } |
| 646 | |
| 647 | #ifndef UNIX |
| 648 | #define CLI_FBI() outp(ADDR(IRQ_OTH_DIS),0) |
| 649 | #else |
| 650 | #define CLI_FBI(smc) outp(ADDRS((smc),IRQ_OTH_DIS),0) |
| 651 | #endif |
| 652 | |
| 653 | #ifndef TCI |
| 654 | #define CLI_FBI_SMP(iop) outp((iop)+IRQ_OTH_DIS,0) |
| 655 | #else |
| 656 | #define CLI_FBI_SMP(iop) outp((iop)+IRQ_OTH_DIS,0) ;\ |
| 657 | outp((iop)+IRQ_TC_DIS,0) |
| 658 | #endif |
| 659 | |
| 660 | #ifndef UNIX |
| 661 | #define STI_FBI() outp(ADDR(IRQ_OTH_EN),0) |
| 662 | #else |
| 663 | #define STI_FBI(smc) outp(ADDRS((smc),IRQ_OTH_EN),0) |
| 664 | #endif |
| 665 | |
| 666 | /* |
| 667 | * Terminal count primitives |
| 668 | */ |
| 669 | #define CLI_TCI(smc) outp(ADDRS((smc),IRQ_TC_DIS),0) |
| 670 | #define STI_TCI(smc) outp(ADDRS((smc),IRQ_TC_EN),0) |
| 671 | #define CHECK_TC(smc,k) {(k) = 10000 ;\ |
| 672 | while ((k) && (~inpw(ISR2_A) & IS_TC)) (k)-- ;\ |
| 673 | if (!k) SMT_PANIC(smc,HWM_E0018,HWM_E0018_MSG) ; } |
| 674 | |
| 675 | #endif /* MCA */ |
| 676 | |
| 677 | #ifdef ISA |
| 678 | |
| 679 | /* |
| 680 | * address transmission from logic NPADDR6-0 to physical offset address on board |
| 681 | */ |
| 682 | #define FMA(a) (0x8000|(((a)&0x07)<<1)|(((a)&0x78)<<7)) /* FORMAC+ (r/w) */ |
| 683 | #define PRA(a) (0x1000|(((a)&0x07)<<1)|(((a)&0x18)<<7)) /* PROM (read only)*/ |
| 684 | #define P1A(a) (0x4000|(((a)&0x07)<<1)|(((a)&0x18)<<7)) /* PLC1 (r/w) */ |
| 685 | #define P2A(a) (0x5000|(((a)&0x07)<<1)|(((a)&0x18)<<7)) /* PLC2 (r/w) */ |
| 686 | #define TIA(a) (0x6000|(((a)&0x03)<<1)) /* Timer (r/w) */ |
| 687 | |
| 688 | #define ISRA 0x0000 /* int. source register address (read only) */ |
| 689 | #define ACLA 0x0000 /* address counter low address (write only) */ |
| 690 | #define ACHA 0x0002 /* address counter high address (write only) */ |
| 691 | #define TRCA 0x0004 /* transfer counter address (write only) */ |
| 692 | #define PGRA 0x0006 /* page register address (write only) */ |
| 693 | #define RQAA 0x2000 /* Request reg. (write only) */ |
| 694 | #define CSRA 0x3000 /* control/status register address (r/w) */ |
| 695 | |
| 696 | /* |
| 697 | * physical address offset + IO-Port base address |
| 698 | */ |
| 699 | #define FM_A(a) (FMA(a)+smc->hw.iop) /* FORMAC Plus physical addr */ |
| 700 | #define PR_A(a) (PRA(a)+smc->hw.iop) /* PROM (read only)*/ |
| 701 | #define P1_A(a) (P1A(a)+smc->hw.iop) /* PLC1 (r/w) */ |
| 702 | #define P2_A(a) (P2A(a)+smc->hw.iop) /* PLC2 (r/w) */ |
| 703 | #define TI_A(a) (TIA(a)+smc->hw.iop) /* Timer (r/w) */ |
| 704 | |
| 705 | #define ISR_A (0x0000+smc->hw.iop) /* int. source register address (read only) */ |
| 706 | #define ACL_A (0x0000+smc->hw.iop) /* address counter low address (write only) */ |
| 707 | #define ACH_A (0x0002+smc->hw.iop) /* address counter high address (write only)*/ |
| 708 | #define TRC_A (0x0004+smc->hw.iop) /* transfer counter address (write only) */ |
| 709 | #define PGR_A (0x0006+smc->hw.iop) /* page register address (write only) */ |
| 710 | #define RQA_A (0x2000+smc->hw.iop) /* Request reg. (write only) */ |
| 711 | #define CSR_A (0x3000+smc->hw.iop) /* control/status register address (r/w) */ |
| 712 | #ifdef UNIX |
| 713 | #define CSR_AS(smc) (0x3000+(smc)->hw.iop) /* control/status register address */ |
| 714 | #endif |
| 715 | #define PLC1_I (0x3400+smc->hw.iop) /* clear PLC1 interrupt bit */ |
| 716 | #define PLC2_I (0x3800+smc->hw.iop) /* clear PLC2 interrupt bit */ |
| 717 | |
| 718 | #ifndef MULT_OEM |
| 719 | #ifndef OEM_CONCEPT |
| 720 | #define SKLOGO_STR "SKFDDI" |
| 721 | #else /* OEM_CONCEPT */ |
| 722 | #define SKLOGO_STR OEM_FDDI_LOGO |
| 723 | #endif /* OEM_CONCEPT */ |
| 724 | #endif /* MULT_OEM */ |
| 725 | #define SADDRL (24) /* start address SKLOGO */ |
| 726 | #define SA_MAC (0) /* start addr. MAC_AD within the PROM */ |
| 727 | #define PRA_OFF (0) |
| 728 | #define SA_PMD_TYPE (8) /* start addr. PMD-Type */ |
| 729 | |
| 730 | #define CDID (PRA(SADDRL)) /* Card ID int/O port addr. offset */ |
| 731 | #define NEXT_CDID ((PRA(SADDRL+1)) - CDID) |
| 732 | |
| 733 | #define SKFDDI_PSZ 32 /* address PROM size */ |
| 734 | |
| 735 | #define READ_PROM(a) ((u_char)inpw(a)) |
| 736 | #define GET_PAGE(i) outpw(PGR_A,(int)(i)) |
| 737 | |
| 738 | #define MAX_PAGES 16 /* 16 pages */ |
| 739 | #define MAX_FADDR 0x2000 /* 8K per page */ |
| 740 | #define VPP_OFF() outpw(CSR_A,(inpw(CSR_A) & (CS_CRESET|CS_BYPASS))) |
| 741 | #define VPP_ON() outpw(CSR_A,(inpw(CSR_A) & (CS_CRESET|CS_BYPASS)) | \ |
| 742 | CS_VPPSW) |
| 743 | |
| 744 | /* |
| 745 | * control/status register CSRA bits (log. addr: 0x3000) |
| 746 | */ |
| 747 | /* write */ |
| 748 | #define CS_CRESET 0x01 /* Card reset (0=reset) */ |
| 749 | #define CS_IMSK 0x02 /* enable IRQ (1=enable, 0=disable) */ |
| 750 | #define CS_RESINT1 0x04 /* PLINT1 reset */ |
| 751 | #define CS_VPPSW 0x10 /* 12V power switch (0=off, 1=on) */ |
| 752 | #define CS_BYPASS 0x20 /* bypass switch (0=remove, 1=insert)*/ |
| 753 | #define CS_RESINT2 0x40 /* PLINT2 reset */ |
| 754 | /* read */ |
| 755 | #define CS_BUSY 0x04 /* master transfer activ (=1) */ |
| 756 | #define CS_SW_EPROM 0x08 /* 0=Application Soft. 1=BOOT-EPROM */ |
| 757 | #define CS_BYSTAT 0x40 /* 0=Bypass exist, 1= ..not */ |
| 758 | #define CS_SAS 0x80 /* single attachement station (=1) */ |
| 759 | |
| 760 | /* |
| 761 | * Interrupt source register ISRA (log. addr: 0x0000) read only & low activ. |
| 762 | */ |
| 763 | #define IS_MINTR1 0x01 /* FORMAC ST1U/L && ~IMSK1U/L*/ |
| 764 | #define IS_MINTR2 0x02 /* FORMAC ST2U/L && ~IMSK2U/L*/ |
| 765 | #define IS_PLINT1 0x04 /* PLC1 */ |
| 766 | #define IS_PLINT2 0x08 /* PLC2 */ |
| 767 | #define IS_TIMINT 0x10 /* Timer 82C54-2 */ |
| 768 | |
| 769 | #define ALL_IRSR (IS_MINTR1|IS_MINTR2|IS_PLINT1|IS_PLINT2|IS_TIMINT) |
| 770 | |
| 771 | #define FPROM_SW() (inpw(CSR_A)&CS_SW_EPROM) |
| 772 | #define DMA_BUSY() (inpw(CSR_A)&CS_BUSY) |
| 773 | #define CHECK_FIFO() |
| 774 | #define BUS_CHECK() |
| 775 | |
| 776 | /* |
| 777 | * set Host Request register (wr.) |
| 778 | */ |
| 779 | #define SET_HRQ(qup) outpw(RQA_A+((qup)<<1),0) |
| 780 | |
| 781 | #ifndef UNIX |
| 782 | #ifndef WINNT |
| 783 | #define CLI_FBI() outpw(CSR_A,(inpw(CSR_A)&(CS_CRESET|CS_BYPASS|CS_VPPSW))) |
| 784 | #else |
| 785 | #define CLI_FBI() outpw(CSR_A,(l_inpw(CSR_A) & \ |
| 786 | (CS_CRESET|CS_BYPASS|CS_VPPSW))) |
| 787 | #endif |
| 788 | #else |
| 789 | #define CLI_FBI(smc) outpw(CSR_AS(smc),(inpw(CSR_AS(smc))& \ |
| 790 | (CS_CRESET|CS_BYPASS|CS_VPPSW))) |
| 791 | #endif |
| 792 | |
| 793 | #ifndef UNIX |
| 794 | #define STI_FBI() outpw(CSR_A,(inpw(CSR_A) & \ |
| 795 | (CS_CRESET|CS_BYPASS|CS_VPPSW)) | CS_IMSK) |
| 796 | #else |
| 797 | #define STI_FBI(smc) outpw(CSR_AS(smc),(inpw(CSR_AS(smc)) & \ |
| 798 | (CS_CRESET|CS_BYPASS|CS_VPPSW)) | CS_IMSK) |
| 799 | #endif |
| 800 | |
| 801 | #define CHECK_DMA() {unsigned k = 10000 ;\ |
| 802 | while (k && (DMA_BUSY())) k-- ;\ |
| 803 | if (!k) SMT_PANIC(smc,HWM_E0003,HWM_E0003_MSG) ; } |
| 804 | |
| 805 | #define GET_ISR() ~inpw(ISR_A) |
| 806 | |
| 807 | #endif /* ISA */ |
| 808 | |
| 809 | /*--------------------------------------------------------------------------*/ |
| 810 | #ifdef PCI |
| 811 | |
| 812 | /* |
| 813 | * (DV) = only defined for Da Vinci |
| 814 | * (ML) = only defined for Monalisa |
| 815 | */ |
| 816 | |
| 817 | /* |
| 818 | * Configuration Space header |
| 819 | */ |
| 820 | #define PCI_VENDOR_ID 0x00 /* 16 bit Vendor ID */ |
| 821 | #define PCI_DEVICE_ID 0x02 /* 16 bit Device ID */ |
| 822 | #define PCI_COMMAND 0x04 /* 16 bit Command */ |
| 823 | #define PCI_STATUS 0x06 /* 16 bit Status */ |
| 824 | #define PCI_REV_ID 0x08 /* 8 bit Revision ID */ |
| 825 | #define PCI_CLASS_CODE 0x09 /* 24 bit Class Code */ |
| 826 | #define PCI_CACHE_LSZ 0x0c /* 8 bit Cache Line Size */ |
| 827 | #define PCI_LAT_TIM 0x0d /* 8 bit Latency Timer */ |
| 828 | #define PCI_HEADER_T 0x0e /* 8 bit Header Type */ |
| 829 | #define PCI_BIST 0x0f /* 8 bit Built-in selftest */ |
| 830 | #define PCI_BASE_1ST 0x10 /* 32 bit 1st Base address */ |
| 831 | #define PCI_BASE_2ND 0x14 /* 32 bit 2nd Base address */ |
| 832 | /* Byte 18..2b: Reserved */ |
| 833 | #define PCI_SUB_VID 0x2c /* 16 bit Subsystem Vendor ID */ |
| 834 | #define PCI_SUB_ID 0x2e /* 16 bit Subsystem ID */ |
| 835 | #define PCI_BASE_ROM 0x30 /* 32 bit Expansion ROM Base Address */ |
| 836 | /* Byte 34..33: Reserved */ |
| 837 | #define PCI_CAP_PTR 0x34 /* 8 bit (ML) Capabilities Ptr */ |
| 838 | /* Byte 35..3b: Reserved */ |
| 839 | #define PCI_IRQ_LINE 0x3c /* 8 bit Interrupt Line */ |
| 840 | #define PCI_IRQ_PIN 0x3d /* 8 bit Interrupt Pin */ |
| 841 | #define PCI_MIN_GNT 0x3e /* 8 bit Min_Gnt */ |
| 842 | #define PCI_MAX_LAT 0x3f /* 8 bit Max_Lat */ |
| 843 | /* Device Dependent Region */ |
| 844 | #define PCI_OUR_REG 0x40 /* 32 bit (DV) Our Register */ |
| 845 | #define PCI_OUR_REG_1 0x40 /* 32 bit (ML) Our Register 1 */ |
| 846 | #define PCI_OUR_REG_2 0x44 /* 32 bit (ML) Our Register 2 */ |
| 847 | /* Power Management Region */ |
| 848 | #define PCI_PM_CAP_ID 0x48 /* 8 bit (ML) Power Management Cap. ID */ |
| 849 | #define PCI_PM_NITEM 0x49 /* 8 bit (ML) Next Item Ptr */ |
| 850 | #define PCI_PM_CAP_REG 0x4a /* 16 bit (ML) Power Management Capabilities */ |
| 851 | #define PCI_PM_CTL_STS 0x4c /* 16 bit (ML) Power Manag. Control/Status */ |
| 852 | /* Byte 0x4e: Reserved */ |
| 853 | #define PCI_PM_DAT_REG 0x4f /* 8 bit (ML) Power Manag. Data Register */ |
| 854 | /* VPD Region */ |
| 855 | #define PCI_VPD_CAP_ID 0x50 /* 8 bit (ML) VPD Cap. ID */ |
| 856 | #define PCI_VPD_NITEM 0x51 /* 8 bit (ML) Next Item Ptr */ |
| 857 | #define PCI_VPD_ADR_REG 0x52 /* 16 bit (ML) VPD Address Register */ |
| 858 | #define PCI_VPD_DAT_REG 0x54 /* 32 bit (ML) VPD Data Register */ |
| 859 | /* Byte 58..ff: Reserved */ |
| 860 | |
| 861 | /* |
| 862 | * I2C Address (PCI Config) |
| 863 | * |
| 864 | * Note: The temperature and voltage sensors are relocated on a different |
| 865 | * I2C bus. |
| 866 | */ |
| 867 | #define I2C_ADDR_VPD 0xA0 /* I2C address for the VPD EEPROM */ |
| 868 | |
| 869 | /* |
| 870 | * Define Bits and Values of the registers |
| 871 | */ |
| 872 | /* PCI_VENDOR_ID 16 bit Vendor ID */ |
| 873 | /* PCI_DEVICE_ID 16 bit Device ID */ |
| 874 | /* Values for Vendor ID and Device ID shall be patched into the code */ |
| 875 | /* PCI_COMMAND 16 bit Command */ |
| 876 | #define PCI_FBTEN 0x0200 /* Bit 9: Fast Back-To-Back enable */ |
| 877 | #define PCI_SERREN 0x0100 /* Bit 8: SERR enable */ |
| 878 | #define PCI_ADSTEP 0x0080 /* Bit 7: Address Stepping */ |
| 879 | #define PCI_PERREN 0x0040 /* Bit 6: Parity Report Response enable */ |
| 880 | #define PCI_VGA_SNOOP 0x0020 /* Bit 5: VGA palette snoop */ |
| 881 | #define PCI_MWIEN 0x0010 /* Bit 4: Memory write an inv cycl ena */ |
| 882 | #define PCI_SCYCEN 0x0008 /* Bit 3: Special Cycle enable */ |
| 883 | #define PCI_BMEN 0x0004 /* Bit 2: Bus Master enable */ |
| 884 | #define PCI_MEMEN 0x0002 /* Bit 1: Memory Space Access enable */ |
| 885 | #define PCI_IOEN 0x0001 /* Bit 0: IO Space Access enable */ |
| 886 | |
| 887 | /* PCI_STATUS 16 bit Status */ |
| 888 | #define PCI_PERR 0x8000 /* Bit 15: Parity Error */ |
| 889 | #define PCI_SERR 0x4000 /* Bit 14: Signaled SERR */ |
| 890 | #define PCI_RMABORT 0x2000 /* Bit 13: Received Master Abort */ |
| 891 | #define PCI_RTABORT 0x1000 /* Bit 12: Received Target Abort */ |
| 892 | #define PCI_STABORT 0x0800 /* Bit 11: Sent Target Abort */ |
| 893 | #define PCI_DEVSEL 0x0600 /* Bit 10..9: DEVSEL Timing */ |
| 894 | #define PCI_DEV_FAST (0<<9) /* fast */ |
| 895 | #define PCI_DEV_MEDIUM (1<<9) /* medium */ |
| 896 | #define PCI_DEV_SLOW (2<<9) /* slow */ |
| 897 | #define PCI_DATAPERR 0x0100 /* Bit 8: DATA Parity error detected */ |
| 898 | #define PCI_FB2BCAP 0x0080 /* Bit 7: Fast Back-to-Back Capability */ |
| 899 | #define PCI_UDF 0x0040 /* Bit 6: User Defined Features */ |
| 900 | #define PCI_66MHZCAP 0x0020 /* Bit 5: 66 MHz PCI bus clock capable */ |
| 901 | #define PCI_NEWCAP 0x0010 /* Bit 4: New cap. list implemented */ |
| 902 | |
| 903 | #define PCI_ERRBITS (PCI_PERR|PCI_SERR|PCI_RMABORT|PCI_STABORT|PCI_DATAPERR) |
| 904 | |
| 905 | /* PCI_REV_ID 8 bit Revision ID */ |
| 906 | /* PCI_CLASS_CODE 24 bit Class Code */ |
| 907 | /* Byte 2: Base Class (02) */ |
| 908 | /* Byte 1: SubClass (02) */ |
| 909 | /* Byte 0: Programming Interface (00) */ |
| 910 | |
| 911 | /* PCI_CACHE_LSZ 8 bit Cache Line Size */ |
| 912 | /* Possible values: 0,2,4,8,16 */ |
| 913 | |
| 914 | /* PCI_LAT_TIM 8 bit Latency Timer */ |
| 915 | |
| 916 | /* PCI_HEADER_T 8 bit Header Type */ |
| 917 | #define PCI_HD_MF_DEV 0x80 /* Bit 7: 0= single, 1= multi-func dev */ |
| 918 | #define PCI_HD_TYPE 0x7f /* Bit 6..0: Header Layout 0= normal */ |
| 919 | |
| 920 | /* PCI_BIST 8 bit Built-in selftest */ |
| 921 | #define PCI_BIST_CAP 0x80 /* Bit 7: BIST Capable */ |
| 922 | #define PCI_BIST_ST 0x40 /* Bit 6: Start BIST */ |
| 923 | #define PCI_BIST_RET 0x0f /* Bit 3..0: Completion Code */ |
| 924 | |
| 925 | /* PCI_BASE_1ST 32 bit 1st Base address */ |
| 926 | #define PCI_MEMSIZE 0x800L /* use 2 kB Memory Base */ |
| 927 | #define PCI_MEMBASE_BITS 0xfffff800L /* Bit 31..11: Memory Base Address */ |
| 928 | #define PCI_MEMSIZE_BIIS 0x000007f0L /* Bit 10..4: Memory Size Req. */ |
| 929 | #define PCI_PREFEN 0x00000008L /* Bit 3: Prefetchable */ |
| 930 | #define PCI_MEM_TYP 0x00000006L /* Bit 2..1: Memory Type */ |
| 931 | #define PCI_MEM32BIT (0<<1) /* Base addr anywhere in 32 Bit range */ |
| 932 | #define PCI_MEM1M (1<<1) /* Base addr below 1 MegaByte */ |
| 933 | #define PCI_MEM64BIT (2<<1) /* Base addr anywhere in 64 Bit range */ |
| 934 | #define PCI_MEMSPACE 0x00000001L /* Bit 0: Memory Space Indic. */ |
| 935 | |
| 936 | /* PCI_BASE_2ND 32 bit 2nd Base address */ |
| 937 | #define PCI_IOBASE 0xffffff00L /* Bit 31..8: I/O Base address */ |
| 938 | #define PCI_IOSIZE 0x000000fcL /* Bit 7..2: I/O Size Requirements */ |
| 939 | #define PCI_IOSPACE 0x00000001L /* Bit 0: I/O Space Indicator */ |
| 940 | |
| 941 | /* PCI_SUB_VID 16 bit Subsystem Vendor ID */ |
| 942 | /* PCI_SUB_ID 16 bit Subsystem ID */ |
| 943 | |
| 944 | /* PCI_BASE_ROM 32 bit Expansion ROM Base Address */ |
| 945 | #define PCI_ROMBASE 0xfffe0000L /* Bit 31..17: ROM BASE address (1st) */ |
| 946 | #define PCI_ROMBASZ 0x0001c000L /* Bit 16..14: Treat as BASE or SIZE */ |
| 947 | #define PCI_ROMSIZE 0x00003800L /* Bit 13..11: ROM Size Requirements */ |
| 948 | #define PCI_ROMEN 0x00000001L /* Bit 0: Address Decode enable */ |
| 949 | |
| 950 | /* PCI_CAP_PTR 8 bit New Capabilities Pointers */ |
| 951 | /* PCI_IRQ_LINE 8 bit Interrupt Line */ |
| 952 | /* PCI_IRQ_PIN 8 bit Interrupt Pin */ |
| 953 | /* PCI_MIN_GNT 8 bit Min_Gnt */ |
| 954 | /* PCI_MAX_LAT 8 bit Max_Lat */ |
| 955 | /* Device Dependent Region */ |
| 956 | /* PCI_OUR_REG (DV) 32 bit Our Register */ |
| 957 | /* PCI_OUR_REG_1 (ML) 32 bit Our Register 1 */ |
| 958 | /* Bit 31..29: reserved */ |
| 959 | #define PCI_PATCH_DIR (3L<<27) /*(DV) Bit 28..27: Ext Patchs direction */ |
| 960 | #define PCI_PATCH_DIR_0 (1L<<27) /*(DV) Type of the pins EXT_PATCHS<1..0> */ |
| 961 | #define PCI_PATCH_DIR_1 (1L<<28) /* 0 = input */ |
| 962 | /* 1 = output */ |
| 963 | #define PCI_EXT_PATCHS (3L<<25) /*(DV) Bit 26..25: Extended Patches */ |
| 964 | #define PCI_EXT_PATCH_0 (1L<<25) /*(DV) */ |
| 965 | #define PCI_EXT_PATCH_1 (1L<<26) /* CLK for MicroWire (ML) */ |
| 966 | #define PCI_VIO (1L<<25) /*(ML) */ |
| 967 | #define PCI_EN_BOOT (1L<<24) /* Bit 24: Enable BOOT via ROM */ |
| 968 | /* 1 = Don't boot with ROM */ |
| 969 | /* 0 = Boot with ROM */ |
| 970 | #define PCI_EN_IO (1L<<23) /* Bit 23: Mapping to IO space */ |
| 971 | #define PCI_EN_FPROM (1L<<22) /* Bit 22: FLASH mapped to mem? */ |
| 972 | /* 1 = Map Flash to Memory */ |
| 973 | /* 0 = Disable all addr. decoding */ |
| 974 | #define PCI_PAGESIZE (3L<<20) /* Bit 21..20: FLASH Page Size */ |
| 975 | #define PCI_PAGE_16 (0L<<20) /* 16 k pages */ |
| 976 | #define PCI_PAGE_32K (1L<<20) /* 32 k pages */ |
| 977 | #define PCI_PAGE_64K (2L<<20) /* 64 k pages */ |
| 978 | #define PCI_PAGE_128K (3L<<20) /* 128 k pages */ |
| 979 | /* Bit 19: reserved (ML) and (DV) */ |
| 980 | #define PCI_PAGEREG (7L<<16) /* Bit 18..16: Page Register */ |
| 981 | /* Bit 15: reserved */ |
| 982 | #define PCI_FORCE_BE (1L<<14) /* Bit 14: Assert all BEs on MR */ |
| 983 | #define PCI_DIS_MRL (1L<<13) /* Bit 13: Disable Mem R Line */ |
| 984 | #define PCI_DIS_MRM (1L<<12) /* Bit 12: Disable Mem R multip */ |
| 985 | #define PCI_DIS_MWI (1L<<11) /* Bit 11: Disable Mem W & inv */ |
| 986 | #define PCI_DISC_CLS (1L<<10) /* Bit 10: Disc: cacheLsz bound */ |
| 987 | #define PCI_BURST_DIS (1L<<9) /* Bit 9: Burst Disable */ |
| 988 | #define PCI_BYTE_SWAP (1L<<8) /*(DV) Bit 8: Byte Swap in DATA */ |
| 989 | #define PCI_SKEW_DAS (0xfL<<4) /* Bit 7..4: Skew Ctrl, DAS Ext */ |
| 990 | #define PCI_SKEW_BASE (0xfL<<0) /* Bit 3..0: Skew Ctrl, Base */ |
| 991 | |
| 992 | /* PCI_OUR_REG_2 (ML) 32 bit Our Register 2 (Monalisa only) */ |
| 993 | #define PCI_VPD_WR_TH (0xffL<<24) /* Bit 24..31 VPD Write Threshold */ |
| 994 | #define PCI_DEV_SEL (0x7fL<<17) /* Bit 17..23 EEPROM Device Select */ |
| 995 | #define PCI_VPD_ROM_SZ (7L<<14) /* Bit 14..16 VPD ROM Size */ |
| 996 | /* Bit 12..13 reserved */ |
| 997 | #define PCI_PATCH_DIR2 (0xfL<<8) /* Bit 8..11 Ext Patchs dir 2..5 */ |
| 998 | #define PCI_PATCH_DIR_2 (1L<<8) /* Bit 8 CS for MicroWire */ |
| 999 | #define PCI_PATCH_DIR_3 (1L<<9) |
| 1000 | #define PCI_PATCH_DIR_4 (1L<<10) |
| 1001 | #define PCI_PATCH_DIR_5 (1L<<11) |
| 1002 | #define PCI_EXT_PATCHS2 (0xfL<<4) /* Bit 4..7 Extended Patches */ |
| 1003 | #define PCI_EXT_PATCH_2 (1L<<4) /* Bit 4 CS for MicroWire */ |
| 1004 | #define PCI_EXT_PATCH_3 (1L<<5) |
| 1005 | #define PCI_EXT_PATCH_4 (1L<<6) |
| 1006 | #define PCI_EXT_PATCH_5 (1L<<7) |
| 1007 | #define PCI_EN_DUMMY_RD (1L<<3) /* Bit 3 Enable Dummy Read */ |
| 1008 | #define PCI_REV_DESC (1L<<2) /* Bit 2 Reverse Desc. Bytes */ |
| 1009 | #define PCI_USEADDR64 (1L<<1) /* Bit 1 Use 64 Bit Addresse */ |
| 1010 | #define PCI_USEDATA64 (1L<<0) /* Bit 0 Use 64 Bit Data bus ext*/ |
| 1011 | |
| 1012 | /* Power Management Region */ |
| 1013 | /* PCI_PM_CAP_ID 8 bit (ML) Power Management Cap. ID */ |
| 1014 | /* PCI_PM_NITEM 8 bit (ML) Next Item Ptr */ |
| 1015 | /* PCI_PM_CAP_REG 16 bit (ML) Power Management Capabilities*/ |
| 1016 | #define PCI_PME_SUP (0x1f<<11) /* Bit 11..15 PM Manag. Event Support*/ |
| 1017 | #define PCI_PM_D2_SUB (1<<10) /* Bit 10 D2 Support Bit */ |
| 1018 | #define PCI_PM_D1_SUB (1<<9) /* Bit 9 D1 Support Bit */ |
| 1019 | /* Bit 6..8 reserved */ |
| 1020 | #define PCI_PM_DSI (1<<5) /* Bit 5 Device Specific Init.*/ |
| 1021 | #define PCI_PM_APS (1<<4) /* Bit 4 Auxialiary Power Src */ |
| 1022 | #define PCI_PME_CLOCK (1<<3) /* Bit 3 PM Event Clock */ |
| 1023 | #define PCI_PM_VER (7<<0) /* Bit 0..2 PM PCI Spec. version */ |
| 1024 | |
| 1025 | /* PCI_PM_CTL_STS 16 bit (ML) Power Manag. Control/Status */ |
| 1026 | #define PCI_PME_STATUS (1<<15) /* Bit 15 PFA doesn't sup. PME#*/ |
| 1027 | #define PCI_PM_DAT_SCL (3<<13) /* Bit 13..14 dat reg Scaling factor */ |
| 1028 | #define PCI_PM_DAT_SEL (0xf<<9) /* Bit 9..12 PM data selector field */ |
| 1029 | /* Bit 7.. 2 reserved */ |
| 1030 | #define PCI_PM_STATE (3<<0) /* Bit 0.. 1 Power Management State */ |
| 1031 | #define PCI_PM_STATE_D0 (0<<0) /* D0: Operational (default) */ |
| 1032 | #define PCI_PM_STATE_D1 (1<<0) /* D1: not supported */ |
| 1033 | #define PCI_PM_STATE_D2 (2<<0) /* D2: not supported */ |
| 1034 | #define PCI_PM_STATE_D3 (3<<0) /* D3: HOT, Power Down and Reset */ |
| 1035 | |
| 1036 | /* PCI_PM_DAT_REG 8 bit (ML) Power Manag. Data Register */ |
| 1037 | /* VPD Region */ |
| 1038 | /* PCI_VPD_CAP_ID 8 bit (ML) VPD Cap. ID */ |
| 1039 | /* PCI_VPD_NITEM 8 bit (ML) Next Item Ptr */ |
| 1040 | /* PCI_VPD_ADR_REG 16 bit (ML) VPD Address Register */ |
| 1041 | #define PCI_VPD_FLAG (1<<15) /* Bit 15 starts VPD rd/wd cycle*/ |
| 1042 | |
| 1043 | /* PCI_VPD_DAT_REG 32 bit (ML) VPD Data Register */ |
| 1044 | |
| 1045 | /* |
| 1046 | * Control Register File: |
| 1047 | * Bank 0 |
| 1048 | */ |
| 1049 | #define B0_RAP 0x0000 /* 8 bit register address port */ |
| 1050 | /* 0x0001 - 0x0003: reserved */ |
| 1051 | #define B0_CTRL 0x0004 /* 8 bit control register */ |
| 1052 | #define B0_DAS 0x0005 /* 8 Bit control register (DAS) */ |
| 1053 | #define B0_LED 0x0006 /* 8 Bit LED register */ |
| 1054 | #define B0_TST_CTRL 0x0007 /* 8 bit test control register */ |
| 1055 | #define B0_ISRC 0x0008 /* 32 bit Interrupt source register */ |
| 1056 | #define B0_IMSK 0x000c /* 32 bit Interrupt mask register */ |
| 1057 | |
| 1058 | /* 0x0010 - 0x006b: formac+ (supernet_3) fequently used registers */ |
| 1059 | #define B0_CMDREG1 0x0010 /* write command reg 1 instruction */ |
| 1060 | #define B0_CMDREG2 0x0014 /* write command reg 2 instruction */ |
| 1061 | #define B0_ST1U 0x0010 /* read upper 16-bit of status reg 1 */ |
| 1062 | #define B0_ST1L 0x0014 /* read lower 16-bit of status reg 1 */ |
| 1063 | #define B0_ST2U 0x0018 /* read upper 16-bit of status reg 2 */ |
| 1064 | #define B0_ST2L 0x001c /* read lower 16-bit of status reg 2 */ |
| 1065 | |
| 1066 | #define B0_MARR 0x0020 /* r/w the memory read addr register */ |
| 1067 | #define B0_MARW 0x0024 /* r/w the memory write addr register*/ |
| 1068 | #define B0_MDRU 0x0028 /* r/w upper 16-bit of mem. data reg */ |
| 1069 | #define B0_MDRL 0x002c /* r/w lower 16-bit of mem. data reg */ |
| 1070 | |
| 1071 | #define B0_MDREG3 0x0030 /* r/w Mode Register 3 */ |
| 1072 | #define B0_ST3U 0x0034 /* read upper 16-bit of status reg 3 */ |
| 1073 | #define B0_ST3L 0x0038 /* read lower 16-bit of status reg 3 */ |
| 1074 | #define B0_IMSK3U 0x003c /* r/w upper 16-bit of IMSK reg 3 */ |
| 1075 | #define B0_IMSK3L 0x0040 /* r/w lower 16-bit of IMSK reg 3 */ |
| 1076 | #define B0_IVR 0x0044 /* read Interrupt Vector register */ |
| 1077 | #define B0_IMR 0x0048 /* r/w Interrupt mask register */ |
| 1078 | /* 0x4c Hidden */ |
| 1079 | |
| 1080 | #define B0_CNTRL_A 0x0050 /* control register A (r/w) */ |
| 1081 | #define B0_CNTRL_B 0x0054 /* control register B (r/w) */ |
| 1082 | #define B0_INTR_MASK 0x0058 /* interrupt mask (r/w) */ |
| 1083 | #define B0_XMIT_VECTOR 0x005c /* transmit vector register (r/w) */ |
| 1084 | |
| 1085 | #define B0_STATUS_A 0x0060 /* status register A (read only) */ |
| 1086 | #define B0_STATUS_B 0x0064 /* status register B (read only) */ |
| 1087 | #define B0_CNTRL_C 0x0068 /* control register C (r/w) */ |
| 1088 | #define B0_MDREG1 0x006c /* r/w Mode Register 1 */ |
| 1089 | |
| 1090 | #define B0_R1_CSR 0x0070 /* 32 bit BMU control/status reg (rec q 1) */ |
| 1091 | #define B0_R2_CSR 0x0074 /* 32 bit BMU control/status reg (rec q 2)(DV)*/ |
| 1092 | #define B0_XA_CSR 0x0078 /* 32 bit BMU control/status reg (a xmit q) */ |
| 1093 | #define B0_XS_CSR 0x007c /* 32 bit BMU control/status reg (s xmit q) */ |
| 1094 | |
| 1095 | /* |
| 1096 | * Bank 1 |
| 1097 | * - completely empty (this is the RAP Block window) |
| 1098 | * Note: if RAP = 1 this page is reserved |
| 1099 | */ |
| 1100 | |
| 1101 | /* |
| 1102 | * Bank 2 |
| 1103 | */ |
| 1104 | #define B2_MAC_0 0x0100 /* 8 bit MAC address Byte 0 */ |
| 1105 | #define B2_MAC_1 0x0101 /* 8 bit MAC address Byte 1 */ |
| 1106 | #define B2_MAC_2 0x0102 /* 8 bit MAC address Byte 2 */ |
| 1107 | #define B2_MAC_3 0x0103 /* 8 bit MAC address Byte 3 */ |
| 1108 | #define B2_MAC_4 0x0104 /* 8 bit MAC address Byte 4 */ |
| 1109 | #define B2_MAC_5 0x0105 /* 8 bit MAC address Byte 5 */ |
| 1110 | #define B2_MAC_6 0x0106 /* 8 bit MAC address Byte 6 (== 0) (DV) */ |
| 1111 | #define B2_MAC_7 0x0107 /* 8 bit MAC address Byte 7 (== 0) (DV) */ |
| 1112 | |
| 1113 | #define B2_CONN_TYP 0x0108 /* 8 bit Connector type */ |
| 1114 | #define B2_PMD_TYP 0x0109 /* 8 bit PMD type */ |
| 1115 | /* 0x010a - 0x010b: reserved */ |
| 1116 | /* Eprom registers are currently of no use */ |
| 1117 | #define B2_E_0 0x010c /* 8 bit EPROM Byte 0 */ |
| 1118 | #define B2_E_1 0x010d /* 8 bit EPROM Byte 1 */ |
| 1119 | #define B2_E_2 0x010e /* 8 bit EPROM Byte 2 */ |
| 1120 | #define B2_E_3 0x010f /* 8 bit EPROM Byte 3 */ |
| 1121 | #define B2_FAR 0x0110 /* 32 bit Flash-Prom Address Register/Counter */ |
| 1122 | #define B2_FDP 0x0114 /* 8 bit Flash-Prom Data Port */ |
| 1123 | /* 0x0115 - 0x0117: reserved */ |
| 1124 | #define B2_LD_CRTL 0x0118 /* 8 bit loader control */ |
| 1125 | #define B2_LD_TEST 0x0119 /* 8 bit loader test */ |
| 1126 | /* 0x011a - 0x011f: reserved */ |
| 1127 | #define B2_TI_INI 0x0120 /* 32 bit Timer init value */ |
| 1128 | #define B2_TI_VAL 0x0124 /* 32 bit Timer value */ |
| 1129 | #define B2_TI_CRTL 0x0128 /* 8 bit Timer control */ |
| 1130 | #define B2_TI_TEST 0x0129 /* 8 Bit Timer Test */ |
| 1131 | /* 0x012a - 0x012f: reserved */ |
| 1132 | #define B2_WDOG_INI 0x0130 /* 32 bit Watchdog init value */ |
| 1133 | #define B2_WDOG_VAL 0x0134 /* 32 bit Watchdog value */ |
| 1134 | #define B2_WDOG_CRTL 0x0138 /* 8 bit Watchdog control */ |
| 1135 | #define B2_WDOG_TEST 0x0139 /* 8 Bit Watchdog Test */ |
| 1136 | /* 0x013a - 0x013f: reserved */ |
| 1137 | #define B2_RTM_INI 0x0140 /* 32 bit RTM init value */ |
| 1138 | #define B2_RTM_VAL 0x0144 /* 32 bit RTM value */ |
| 1139 | #define B2_RTM_CRTL 0x0148 /* 8 bit RTM control */ |
| 1140 | #define B2_RTM_TEST 0x0149 /* 8 Bit RTM Test */ |
| 1141 | |
| 1142 | #define B2_TOK_COUNT 0x014c /* (ML) 32 bit Token Counter */ |
| 1143 | #define B2_DESC_ADDR_H 0x0150 /* (ML) 32 bit Desciptor Base Addr Reg High */ |
| 1144 | #define B2_CTRL_2 0x0154 /* (ML) 8 bit Control Register 2 */ |
| 1145 | #define B2_IFACE_REG 0x0155 /* (ML) 8 bit Interface Register */ |
| 1146 | /* 0x0156: reserved */ |
| 1147 | #define B2_TST_CTRL_2 0x0157 /* (ML) 8 bit Test Control Register 2 */ |
| 1148 | #define B2_I2C_CTRL 0x0158 /* (ML) 32 bit I2C Control Register */ |
| 1149 | #define B2_I2C_DATA 0x015c /* (ML) 32 bit I2C Data Register */ |
| 1150 | |
| 1151 | #define B2_IRQ_MOD_INI 0x0160 /* (ML) 32 bit IRQ Moderation Timer Init Reg. */ |
| 1152 | #define B2_IRQ_MOD_VAL 0x0164 /* (ML) 32 bit IRQ Moderation Timer Value */ |
| 1153 | #define B2_IRQ_MOD_CTRL 0x0168 /* (ML) 8 bit IRQ Moderation Timer Control */ |
| 1154 | #define B2_IRQ_MOD_TEST 0x0169 /* (ML) 8 bit IRQ Moderation Timer Test */ |
| 1155 | /* 0x016a - 0x017f: reserved */ |
| 1156 | |
| 1157 | /* |
| 1158 | * Bank 3 |
| 1159 | */ |
| 1160 | /* |
| 1161 | * This is a copy of the Configuration register file (lower half) |
| 1162 | */ |
| 1163 | #define B3_CFG_SPC 0x180 |
| 1164 | |
| 1165 | /* |
| 1166 | * Bank 4 |
| 1167 | */ |
| 1168 | #define B4_R1_D 0x0200 /* 4*32 bit current receive Descriptor */ |
| 1169 | #define B4_R1_DA 0x0210 /* 32 bit current rec desc address */ |
| 1170 | #define B4_R1_AC 0x0214 /* 32 bit current receive Address Count */ |
| 1171 | #define B4_R1_BC 0x0218 /* 32 bit current receive Byte Counter */ |
| 1172 | #define B4_R1_CSR 0x021c /* 32 bit BMU Control/Status Register */ |
| 1173 | #define B4_R1_F 0x0220 /* 32 bit flag register */ |
| 1174 | #define B4_R1_T1 0x0224 /* 32 bit Test Register 1 */ |
| 1175 | #define B4_R1_T1_TR 0x0224 /* 8 bit Test Register 1 TR */ |
| 1176 | #define B4_R1_T1_WR 0x0225 /* 8 bit Test Register 1 WR */ |
| 1177 | #define B4_R1_T1_RD 0x0226 /* 8 bit Test Register 1 RD */ |
| 1178 | #define B4_R1_T1_SV 0x0227 /* 8 bit Test Register 1 SV */ |
| 1179 | #define B4_R1_T2 0x0228 /* 32 bit Test Register 2 */ |
| 1180 | #define B4_R1_T3 0x022c /* 32 bit Test Register 3 */ |
| 1181 | #define B4_R1_DA_H 0x0230 /* (ML) 32 bit Curr Rx Desc Address High */ |
| 1182 | #define B4_R1_AC_H 0x0234 /* (ML) 32 bit Curr Addr Counter High dword */ |
| 1183 | /* 0x0238 - 0x023f: reserved */ |
| 1184 | /* Receive queue 2 is removed on Monalisa */ |
| 1185 | #define B4_R2_D 0x0240 /* 4*32 bit current receive Descriptor (q2) */ |
| 1186 | #define B4_R2_DA 0x0250 /* 32 bit current rec desc address (q2) */ |
| 1187 | #define B4_R2_AC 0x0254 /* 32 bit current receive Address Count (q2) */ |
| 1188 | #define B4_R2_BC 0x0258 /* 32 bit current receive Byte Counter (q2) */ |
| 1189 | #define B4_R2_CSR 0x025c /* 32 bit BMU Control/Status Register (q2) */ |
| 1190 | #define B4_R2_F 0x0260 /* 32 bit flag register (q2) */ |
| 1191 | #define B4_R2_T1 0x0264 /* 32 bit Test Register 1 (q2) */ |
| 1192 | #define B4_R2_T1_TR 0x0264 /* 8 bit Test Register 1 TR (q2) */ |
| 1193 | #define B4_R2_T1_WR 0x0265 /* 8 bit Test Register 1 WR (q2) */ |
| 1194 | #define B4_R2_T1_RD 0x0266 /* 8 bit Test Register 1 RD (q2) */ |
| 1195 | #define B4_R2_T1_SV 0x0267 /* 8 bit Test Register 1 SV (q2) */ |
| 1196 | #define B4_R2_T2 0x0268 /* 32 bit Test Register 2 (q2) */ |
| 1197 | #define B4_R2_T3 0x026c /* 32 bit Test Register 3 (q2) */ |
| 1198 | /* 0x0270 - 0x027c: reserved */ |
| 1199 | |
| 1200 | /* |
| 1201 | * Bank 5 |
| 1202 | */ |
| 1203 | #define B5_XA_D 0x0280 /* 4*32 bit current transmit Descriptor (xa) */ |
| 1204 | #define B5_XA_DA 0x0290 /* 32 bit current tx desc address (xa) */ |
| 1205 | #define B5_XA_AC 0x0294 /* 32 bit current tx Address Count (xa) */ |
| 1206 | #define B5_XA_BC 0x0298 /* 32 bit current tx Byte Counter (xa) */ |
| 1207 | #define B5_XA_CSR 0x029c /* 32 bit BMU Control/Status Register (xa) */ |
| 1208 | #define B5_XA_F 0x02a0 /* 32 bit flag register (xa) */ |
| 1209 | #define B5_XA_T1 0x02a4 /* 32 bit Test Register 1 (xa) */ |
| 1210 | #define B5_XA_T1_TR 0x02a4 /* 8 bit Test Register 1 TR (xa) */ |
| 1211 | #define B5_XA_T1_WR 0x02a5 /* 8 bit Test Register 1 WR (xa) */ |
| 1212 | #define B5_XA_T1_RD 0x02a6 /* 8 bit Test Register 1 RD (xa) */ |
| 1213 | #define B5_XA_T1_SV 0x02a7 /* 8 bit Test Register 1 SV (xa) */ |
| 1214 | #define B5_XA_T2 0x02a8 /* 32 bit Test Register 2 (xa) */ |
| 1215 | #define B5_XA_T3 0x02ac /* 32 bit Test Register 3 (xa) */ |
| 1216 | #define B5_XA_DA_H 0x02b0 /* (ML) 32 bit Curr Tx Desc Address High */ |
| 1217 | #define B5_XA_AC_H 0x02b4 /* (ML) 32 bit Curr Addr Counter High dword */ |
| 1218 | /* 0x02b8 - 0x02bc: reserved */ |
| 1219 | #define B5_XS_D 0x02c0 /* 4*32 bit current transmit Descriptor (xs) */ |
| 1220 | #define B5_XS_DA 0x02d0 /* 32 bit current tx desc address (xs) */ |
| 1221 | #define B5_XS_AC 0x02d4 /* 32 bit current transmit Address Count(xs) */ |
| 1222 | #define B5_XS_BC 0x02d8 /* 32 bit current transmit Byte Counter (xs) */ |
| 1223 | #define B5_XS_CSR 0x02dc /* 32 bit BMU Control/Status Register (xs) */ |
| 1224 | #define B5_XS_F 0x02e0 /* 32 bit flag register (xs) */ |
| 1225 | #define B5_XS_T1 0x02e4 /* 32 bit Test Register 1 (xs) */ |
| 1226 | #define B5_XS_T1_TR 0x02e4 /* 8 bit Test Register 1 TR (xs) */ |
| 1227 | #define B5_XS_T1_WR 0x02e5 /* 8 bit Test Register 1 WR (xs) */ |
| 1228 | #define B5_XS_T1_RD 0x02e6 /* 8 bit Test Register 1 RD (xs) */ |
| 1229 | #define B5_XS_T1_SV 0x02e7 /* 8 bit Test Register 1 SV (xs) */ |
| 1230 | #define B5_XS_T2 0x02e8 /* 32 bit Test Register 2 (xs) */ |
| 1231 | #define B5_XS_T3 0x02ec /* 32 bit Test Register 3 (xs) */ |
| 1232 | #define B5_XS_DA_H 0x02f0 /* (ML) 32 bit Curr Tx Desc Address High */ |
| 1233 | #define B5_XS_AC_H 0x02f4 /* (ML) 32 bit Curr Addr Counter High dword */ |
| 1234 | /* 0x02f8 - 0x02fc: reserved */ |
| 1235 | |
| 1236 | /* |
| 1237 | * Bank 6 |
| 1238 | */ |
| 1239 | /* External PLC-S registers (SN2 compatibility for DV) */ |
| 1240 | /* External registers (ML) */ |
| 1241 | #define B6_EXT_REG 0x300 |
| 1242 | |
| 1243 | /* |
| 1244 | * Bank 7 |
| 1245 | */ |
| 1246 | /* DAS PLC-S Registers */ |
| 1247 | |
| 1248 | /* |
| 1249 | * Bank 8 - 15 |
| 1250 | */ |
| 1251 | /* IFCP registers */ |
| 1252 | |
| 1253 | /*---------------------------------------------------------------------------*/ |
| 1254 | /* Definitions of the Bits in the registers */ |
| 1255 | |
| 1256 | /* B0_RAP 16 bit register address port */ |
| 1257 | #define RAP_RAP 0x0f /* Bit 3..0: 0 = block0, .., f = block15 */ |
| 1258 | |
| 1259 | /* B0_CTRL 8 bit control register */ |
| 1260 | #define CTRL_FDDI_CLR (1<<7) /* Bit 7: (ML) Clear FDDI Reset */ |
| 1261 | #define CTRL_FDDI_SET (1<<6) /* Bit 6: (ML) Set FDDI Reset */ |
| 1262 | #define CTRL_HPI_CLR (1<<5) /* Bit 5: Clear HPI SM reset */ |
| 1263 | #define CTRL_HPI_SET (1<<4) /* Bit 4: Set HPI SM reset */ |
| 1264 | #define CTRL_MRST_CLR (1<<3) /* Bit 3: Clear Master reset */ |
| 1265 | #define CTRL_MRST_SET (1<<2) /* Bit 2: Set Master reset */ |
| 1266 | #define CTRL_RST_CLR (1<<1) /* Bit 1: Clear Software reset */ |
| 1267 | #define CTRL_RST_SET (1<<0) /* Bit 0: Set Software reset */ |
| 1268 | |
| 1269 | /* B0_DAS 8 Bit control register (DAS) */ |
| 1270 | #define BUS_CLOCK (1<<7) /* Bit 7: (ML) Bus Clock 0/1 = 33/66MHz */ |
| 1271 | #define BUS_SLOT_SZ (1<<6) /* Bit 6: (ML) Slot Size 0/1 = 32/64 bit slot*/ |
| 1272 | /* Bit 5..4: reserved */ |
| 1273 | #define DAS_AVAIL (1<<3) /* Bit 3: 1 = DAS, 0 = SAS */ |
| 1274 | #define DAS_BYP_ST (1<<2) /* Bit 2: 1 = avail,SAS, 0 = not avail */ |
| 1275 | #define DAS_BYP_INS (1<<1) /* Bit 1: 1 = insert Bypass */ |
| 1276 | #define DAS_BYP_RMV (1<<0) /* Bit 0: 1 = remove Bypass */ |
| 1277 | |
| 1278 | /* B0_LED 8 Bit LED register */ |
| 1279 | /* Bit 7..6: reserved */ |
| 1280 | #define LED_2_ON (1<<5) /* Bit 5: 1 = switch LED_2 on (left,gn)*/ |
| 1281 | #define LED_2_OFF (1<<4) /* Bit 4: 1 = switch LED_2 off */ |
| 1282 | #define LED_1_ON (1<<3) /* Bit 3: 1 = switch LED_1 on (mid,yel)*/ |
| 1283 | #define LED_1_OFF (1<<2) /* Bit 2: 1 = switch LED_1 off */ |
| 1284 | #define LED_0_ON (1<<1) /* Bit 1: 1 = switch LED_0 on (rght,gn)*/ |
| 1285 | #define LED_0_OFF (1<<0) /* Bit 0: 1 = switch LED_0 off */ |
| 1286 | /* This hardware defines are very ugly therefore we define some others */ |
| 1287 | |
| 1288 | #define LED_GA_ON LED_2_ON /* S port = A port */ |
| 1289 | #define LED_GA_OFF LED_2_OFF /* S port = A port */ |
| 1290 | #define LED_MY_ON LED_1_ON |
| 1291 | #define LED_MY_OFF LED_1_OFF |
| 1292 | #define LED_GB_ON LED_0_ON |
| 1293 | #define LED_GB_OFF LED_0_OFF |
| 1294 | |
| 1295 | /* B0_TST_CTRL 8 bit test control register */ |
| 1296 | #define TST_FRC_DPERR_MR (1<<7) /* Bit 7: force DATAPERR on MST RE. */ |
| 1297 | #define TST_FRC_DPERR_MW (1<<6) /* Bit 6: force DATAPERR on MST WR. */ |
| 1298 | #define TST_FRC_DPERR_TR (1<<5) /* Bit 5: force DATAPERR on TRG RE. */ |
| 1299 | #define TST_FRC_DPERR_TW (1<<4) /* Bit 4: force DATAPERR on TRG WR. */ |
| 1300 | #define TST_FRC_APERR_M (1<<3) /* Bit 3: force ADDRPERR on MST */ |
| 1301 | #define TST_FRC_APERR_T (1<<2) /* Bit 2: force ADDRPERR on TRG */ |
| 1302 | #define TST_CFG_WRITE_ON (1<<1) /* Bit 1: ena configuration reg. WR */ |
| 1303 | #define TST_CFG_WRITE_OFF (1<<0) /* Bit 0: dis configuration reg. WR */ |
| 1304 | |
| 1305 | /* B0_ISRC 32 bit Interrupt source register */ |
| 1306 | /* Bit 31..28: reserved */ |
| 1307 | #define IS_I2C_READY (1L<<27) /* Bit 27: (ML) IRQ on end of I2C tx */ |
| 1308 | #define IS_IRQ_SW (1L<<26) /* Bit 26: (ML) SW forced IRQ */ |
| 1309 | #define IS_EXT_REG (1L<<25) /* Bit 25: (ML) IRQ from external reg*/ |
| 1310 | #define IS_IRQ_STAT (1L<<24) /* Bit 24: IRQ status exception */ |
| 1311 | /* PERR, RMABORT, RTABORT DATAPERR */ |
| 1312 | #define IS_IRQ_MST_ERR (1L<<23) /* Bit 23: IRQ master error */ |
| 1313 | /* RMABORT, RTABORT, DATAPERR */ |
| 1314 | #define IS_TIMINT (1L<<22) /* Bit 22: IRQ_TIMER */ |
| 1315 | #define IS_TOKEN (1L<<21) /* Bit 21: IRQ_RTM */ |
| 1316 | /* |
| 1317 | * Note: The DAS is our First Port (!=PA) |
| 1318 | */ |
| 1319 | #define IS_PLINT1 (1L<<20) /* Bit 20: IRQ_PHY_DAS */ |
| 1320 | #define IS_PLINT2 (1L<<19) /* Bit 19: IRQ_IFCP_4 */ |
| 1321 | #define IS_MINTR3 (1L<<18) /* Bit 18: IRQ_IFCP_3/IRQ_PHY */ |
| 1322 | #define IS_MINTR2 (1L<<17) /* Bit 17: IRQ_IFCP_2/IRQ_MAC_2 */ |
| 1323 | #define IS_MINTR1 (1L<<16) /* Bit 16: IRQ_IFCP_1/IRQ_MAC_1 */ |
| 1324 | /* Receive Queue 1 */ |
| 1325 | #define IS_R1_P (1L<<15) /* Bit 15: Parity Error (q1) */ |
| 1326 | #define IS_R1_B (1L<<14) /* Bit 14: End of Buffer (q1) */ |
| 1327 | #define IS_R1_F (1L<<13) /* Bit 13: End of Frame (q1) */ |
| 1328 | #define IS_R1_C (1L<<12) /* Bit 12: Encoding Error (q1) */ |
| 1329 | /* Receive Queue 2 */ |
| 1330 | #define IS_R2_P (1L<<11) /* Bit 11: (DV) Parity Error (q2) */ |
| 1331 | #define IS_R2_B (1L<<10) /* Bit 10: (DV) End of Buffer (q2) */ |
| 1332 | #define IS_R2_F (1L<<9) /* Bit 9: (DV) End of Frame (q2) */ |
| 1333 | #define IS_R2_C (1L<<8) /* Bit 8: (DV) Encoding Error (q2) */ |
| 1334 | /* Asynchronous Transmit queue */ |
| 1335 | /* Bit 7: reserved */ |
| 1336 | #define IS_XA_B (1L<<6) /* Bit 6: End of Buffer (xa) */ |
| 1337 | #define IS_XA_F (1L<<5) /* Bit 5: End of Frame (xa) */ |
| 1338 | #define IS_XA_C (1L<<4) /* Bit 4: Encoding Error (xa) */ |
| 1339 | /* Synchronous Transmit queue */ |
| 1340 | /* Bit 3: reserved */ |
| 1341 | #define IS_XS_B (1L<<2) /* Bit 2: End of Buffer (xs) */ |
| 1342 | #define IS_XS_F (1L<<1) /* Bit 1: End of Frame (xs) */ |
| 1343 | #define IS_XS_C (1L<<0) /* Bit 0: Encoding Error (xs) */ |
| 1344 | |
| 1345 | /* |
| 1346 | * Define all valid interrupt source Bits from GET_ISR () |
| 1347 | */ |
| 1348 | #define ALL_IRSR 0x01ffff77L /* (DV) */ |
| 1349 | #define ALL_IRSR_ML 0x0ffff077L /* (ML) */ |
| 1350 | |
| 1351 | |
| 1352 | /* B0_IMSK 32 bit Interrupt mask register */ |
| 1353 | /* |
| 1354 | * The Bit definnition of this register are the same as of the interrupt |
| 1355 | * source register. These definition are directly derived from the Hardware |
| 1356 | * spec. |
| 1357 | */ |
| 1358 | /* Bit 31..28: reserved */ |
| 1359 | #define IRQ_I2C_READY (1L<<27) /* Bit 27: (ML) IRQ on end of I2C tx */ |
| 1360 | #define IRQ_SW (1L<<26) /* Bit 26: (ML) SW forced IRQ */ |
| 1361 | #define IRQ_EXT_REG (1L<<25) /* Bit 25: (ML) IRQ from external reg*/ |
| 1362 | #define IRQ_STAT (1L<<24) /* Bit 24: IRQ status exception */ |
| 1363 | /* PERR, RMABORT, RTABORT DATAPERR */ |
| 1364 | #define IRQ_MST_ERR (1L<<23) /* Bit 23: IRQ master error */ |
| 1365 | /* RMABORT, RTABORT, DATAPERR */ |
| 1366 | #define IRQ_TIMER (1L<<22) /* Bit 22: IRQ_TIMER */ |
| 1367 | #define IRQ_RTM (1L<<21) /* Bit 21: IRQ_RTM */ |
| 1368 | #define IRQ_DAS (1L<<20) /* Bit 20: IRQ_PHY_DAS */ |
| 1369 | #define IRQ_IFCP_4 (1L<<19) /* Bit 19: IRQ_IFCP_4 */ |
| 1370 | #define IRQ_IFCP_3 (1L<<18) /* Bit 18: IRQ_IFCP_3/IRQ_PHY */ |
| 1371 | #define IRQ_IFCP_2 (1L<<17) /* Bit 17: IRQ_IFCP_2/IRQ_MAC_2 */ |
| 1372 | #define IRQ_IFCP_1 (1L<<16) /* Bit 16: IRQ_IFCP_1/IRQ_MAC_1 */ |
| 1373 | /* Receive Queue 1 */ |
| 1374 | #define IRQ_R1_P (1L<<15) /* Bit 15: Parity Error (q1) */ |
| 1375 | #define IRQ_R1_B (1L<<14) /* Bit 14: End of Buffer (q1) */ |
| 1376 | #define IRQ_R1_F (1L<<13) /* Bit 13: End of Frame (q1) */ |
| 1377 | #define IRQ_R1_C (1L<<12) /* Bit 12: Encoding Error (q1) */ |
| 1378 | /* Receive Queue 2 */ |
| 1379 | #define IRQ_R2_P (1L<<11) /* Bit 11: (DV) Parity Error (q2) */ |
| 1380 | #define IRQ_R2_B (1L<<10) /* Bit 10: (DV) End of Buffer (q2) */ |
| 1381 | #define IRQ_R2_F (1L<<9) /* Bit 9: (DV) End of Frame (q2) */ |
| 1382 | #define IRQ_R2_C (1L<<8) /* Bit 8: (DV) Encoding Error (q2) */ |
| 1383 | /* Asynchronous Transmit queue */ |
| 1384 | /* Bit 7: reserved */ |
| 1385 | #define IRQ_XA_B (1L<<6) /* Bit 6: End of Buffer (xa) */ |
| 1386 | #define IRQ_XA_F (1L<<5) /* Bit 5: End of Frame (xa) */ |
| 1387 | #define IRQ_XA_C (1L<<4) /* Bit 4: Encoding Error (xa) */ |
| 1388 | /* Synchronous Transmit queue */ |
| 1389 | /* Bit 3: reserved */ |
| 1390 | #define IRQ_XS_B (1L<<2) /* Bit 2: End of Buffer (xs) */ |
| 1391 | #define IRQ_XS_F (1L<<1) /* Bit 1: End of Frame (xs) */ |
| 1392 | #define IRQ_XS_C (1L<<0) /* Bit 0: Encoding Error (xs) */ |
| 1393 | |
| 1394 | /* 0x0010 - 0x006b: formac+ (supernet_3) fequently used registers */ |
| 1395 | /* B0_R1_CSR 32 bit BMU control/status reg (rec q 1 ) */ |
| 1396 | /* B0_R2_CSR 32 bit BMU control/status reg (rec q 2 ) */ |
| 1397 | /* B0_XA_CSR 32 bit BMU control/status reg (a xmit q ) */ |
| 1398 | /* B0_XS_CSR 32 bit BMU control/status reg (s xmit q ) */ |
| 1399 | /* The registers are the same as B4_R1_CSR, B4_R2_CSR, B5_Xa_CSR, B5_XS_CSR */ |
| 1400 | |
| 1401 | /* B2_MAC_0 8 bit MAC address Byte 0 */ |
| 1402 | /* B2_MAC_1 8 bit MAC address Byte 1 */ |
| 1403 | /* B2_MAC_2 8 bit MAC address Byte 2 */ |
| 1404 | /* B2_MAC_3 8 bit MAC address Byte 3 */ |
| 1405 | /* B2_MAC_4 8 bit MAC address Byte 4 */ |
| 1406 | /* B2_MAC_5 8 bit MAC address Byte 5 */ |
| 1407 | /* B2_MAC_6 8 bit MAC address Byte 6 (== 0) (DV) */ |
| 1408 | /* B2_MAC_7 8 bit MAC address Byte 7 (== 0) (DV) */ |
| 1409 | |
| 1410 | /* B2_CONN_TYP 8 bit Connector type */ |
| 1411 | /* B2_PMD_TYP 8 bit PMD type */ |
| 1412 | /* Values of connector and PMD type comply to SysKonnect internal std */ |
| 1413 | |
| 1414 | /* The EPROM register are currently of no use */ |
| 1415 | /* B2_E_0 8 bit EPROM Byte 0 */ |
| 1416 | /* B2_E_1 8 bit EPROM Byte 1 */ |
| 1417 | /* B2_E_2 8 bit EPROM Byte 2 */ |
| 1418 | /* B2_E_3 8 bit EPROM Byte 3 */ |
| 1419 | |
| 1420 | /* B2_FAR 32 bit Flash-Prom Address Register/Counter */ |
| 1421 | #define FAR_ADDR 0x1ffffL /* Bit 16..0: FPROM Address mask */ |
| 1422 | |
| 1423 | /* B2_FDP 8 bit Flash-Prom Data Port */ |
| 1424 | |
| 1425 | /* B2_LD_CRTL 8 bit loader control */ |
| 1426 | /* Bits are currently reserved */ |
| 1427 | |
| 1428 | /* B2_LD_TEST 8 bit loader test */ |
| 1429 | #define LD_T_ON (1<<3) /* Bit 3: Loader Testmode on */ |
| 1430 | #define LD_T_OFF (1<<2) /* Bit 2: Loader Testmode off */ |
| 1431 | #define LD_T_STEP (1<<1) /* Bit 1: Decrement FPROM addr. Counter */ |
| 1432 | #define LD_START (1<<0) /* Bit 0: Start loading FPROM */ |
| 1433 | |
| 1434 | /* B2_TI_INI 32 bit Timer init value */ |
| 1435 | /* B2_TI_VAL 32 bit Timer value */ |
| 1436 | /* B2_TI_CRTL 8 bit Timer control */ |
| 1437 | /* B2_TI_TEST 8 Bit Timer Test */ |
| 1438 | /* B2_WDOG_INI 32 bit Watchdog init value */ |
| 1439 | /* B2_WDOG_VAL 32 bit Watchdog value */ |
| 1440 | /* B2_WDOG_CRTL 8 bit Watchdog control */ |
| 1441 | /* B2_WDOG_TEST 8 Bit Watchdog Test */ |
| 1442 | /* B2_RTM_INI 32 bit RTM init value */ |
| 1443 | /* B2_RTM_VAL 32 bit RTM value */ |
| 1444 | /* B2_RTM_CRTL 8 bit RTM control */ |
| 1445 | /* B2_RTM_TEST 8 Bit RTM Test */ |
| 1446 | /* B2_<TIM>_CRTL 8 bit <TIM> control */ |
| 1447 | /* B2_IRQ_MOD_INI 32 bit IRQ Moderation Timer Init Reg. (ML) */ |
| 1448 | /* B2_IRQ_MOD_VAL 32 bit IRQ Moderation Timer Value (ML) */ |
| 1449 | /* B2_IRQ_MOD_CTRL 8 bit IRQ Moderation Timer Control (ML) */ |
| 1450 | /* B2_IRQ_MOD_TEST 8 bit IRQ Moderation Timer Test (ML) */ |
| 1451 | #define GET_TOK_CT (1<<4) /* Bit 4: Get the Token Counter (RTM) */ |
| 1452 | #define TIM_RES_TOK (1<<3) /* Bit 3: RTM Status: 1 == restricted */ |
| 1453 | #define TIM_ALARM (1<<3) /* Bit 3: Timer Alarm (WDOG) */ |
| 1454 | #define TIM_START (1<<2) /* Bit 2: Start Timer (TI,WDOG,RTM,IRQ_MOD)*/ |
| 1455 | #define TIM_STOP (1<<1) /* Bit 1: Stop Timer (TI,WDOG,RTM,IRQ_MOD) */ |
| 1456 | #define TIM_CL_IRQ (1<<0) /* Bit 0: Clear Timer IRQ (TI,WDOG,RTM) */ |
| 1457 | /* B2_<TIM>_TEST 8 Bit <TIM> Test */ |
| 1458 | #define TIM_T_ON (1<<2) /* Bit 2: Test mode on (TI,WDOG,RTM,IRQ_MOD) */ |
| 1459 | #define TIM_T_OFF (1<<1) /* Bit 1: Test mode off (TI,WDOG,RTM,IRQ_MOD) */ |
| 1460 | #define TIM_T_STEP (1<<0) /* Bit 0: Test step (TI,WDOG,RTM,IRQ_MOD) */ |
| 1461 | |
| 1462 | /* B2_TOK_COUNT 0x014c (ML) 32 bit Token Counter */ |
| 1463 | /* B2_DESC_ADDR_H 0x0150 (ML) 32 bit Desciptor Base Addr Reg High */ |
| 1464 | /* B2_CTRL_2 0x0154 (ML) 8 bit Control Register 2 */ |
| 1465 | /* Bit 7..5: reserved */ |
| 1466 | #define CTRL_CL_I2C_IRQ (1<<4) /* Bit 4: Clear I2C IRQ */ |
| 1467 | #define CTRL_ST_SW_IRQ (1<<3) /* Bit 3: Set IRQ SW Request */ |
| 1468 | #define CTRL_CL_SW_IRQ (1<<2) /* Bit 2: Clear IRQ SW Request */ |
| 1469 | #define CTRL_STOP_DONE (1<<1) /* Bit 1: Stop Master is finished */ |
| 1470 | #define CTRL_STOP_MAST (1<<0) /* Bit 0: Command Bit to stop the master*/ |
| 1471 | |
| 1472 | /* B2_IFACE_REG 0x0155 (ML) 8 bit Interface Register */ |
| 1473 | /* Bit 7..3: reserved */ |
| 1474 | #define IF_I2C_DATA_DIR (1<<2) /* Bit 2: direction of IF_I2C_DATA*/ |
| 1475 | #define IF_I2C_DATA (1<<1) /* Bit 1: I2C Data Port */ |
| 1476 | #define IF_I2C_CLK (1<<0) /* Bit 0: I2C Clock Port */ |
| 1477 | |
| 1478 | /* 0x0156: reserved */ |
| 1479 | /* B2_TST_CTRL_2 0x0157 (ML) 8 bit Test Control Register 2 */ |
| 1480 | /* Bit 7..4: reserved */ |
| 1481 | /* force the following error on */ |
| 1482 | /* the next master read/write */ |
| 1483 | #define TST_FRC_DPERR_MR64 (1<<3) /* Bit 3: DataPERR RD 64 */ |
| 1484 | #define TST_FRC_DPERR_MW64 (1<<2) /* Bit 2: DataPERR WR 64 */ |
| 1485 | #define TST_FRC_APERR_1M64 (1<<1) /* Bit 1: AddrPERR on 1. phase */ |
| 1486 | #define TST_FRC_APERR_2M64 (1<<0) /* Bit 0: AddrPERR on 2. phase */ |
| 1487 | |
| 1488 | /* B2_I2C_CTRL 0x0158 (ML) 32 bit I2C Control Register */ |
| 1489 | #define I2C_FLAG (1L<<31) /* Bit 31: Start read/write if WR */ |
| 1490 | #define I2C_ADDR (0x7fffL<<16) /* Bit 30..16: Addr to be read/written*/ |
| 1491 | #define I2C_DEV_SEL (0x7fL<<9) /* Bit 9..15: I2C Device Select */ |
| 1492 | /* Bit 5.. 8: reserved */ |
| 1493 | #define I2C_BURST_LEN (1L<<4) /* Bit 4 Burst Len, 1/4 bytes */ |
| 1494 | #define I2C_DEV_SIZE (7L<<1) /* Bit 1.. 3: I2C Device Size */ |
| 1495 | #define I2C_025K_DEV (0L<<1) /* 0: 256 Bytes or smaller*/ |
| 1496 | #define I2C_05K_DEV (1L<<1) /* 1: 512 Bytes */ |
| 1497 | #define I2C_1K_DEV (2L<<1) /* 2: 1024 Bytes */ |
| 1498 | #define I2C_2K_DEV (3L<<1) /* 3: 2048 Bytes */ |
| 1499 | #define I2C_4K_DEV (4L<<1) /* 4: 4096 Bytes */ |
| 1500 | #define I2C_8K_DEV (5L<<1) /* 5: 8192 Bytes */ |
| 1501 | #define I2C_16K_DEV (6L<<1) /* 6: 16384 Bytes */ |
| 1502 | #define I2C_32K_DEV (7L<<1) /* 7: 32768 Bytes */ |
| 1503 | #define I2C_STOP_BIT (1<<0) /* Bit 0: Interrupt I2C transfer */ |
| 1504 | |
| 1505 | /* |
| 1506 | * I2C Addresses |
| 1507 | * |
| 1508 | * The temperature sensor and the voltage sensor are on the same I2C bus. |
| 1509 | * Note: The voltage sensor (Micorwire) will be selected by PCI_EXT_PATCH_1 |
| 1510 | * in PCI_OUR_REG 1. |
| 1511 | */ |
| 1512 | #define I2C_ADDR_TEMP 0x90 /* I2C Address Temperature Sensor */ |
| 1513 | |
| 1514 | /* B2_I2C_DATA 0x015c (ML) 32 bit I2C Data Register */ |
| 1515 | |
| 1516 | /* B4_R1_D 4*32 bit current receive Descriptor (q1) */ |
| 1517 | /* B4_R1_DA 32 bit current rec desc address (q1) */ |
| 1518 | /* B4_R1_AC 32 bit current receive Address Count (q1) */ |
| 1519 | /* B4_R1_BC 32 bit current receive Byte Counter (q1) */ |
| 1520 | /* B4_R1_CSR 32 bit BMU Control/Status Register (q1) */ |
| 1521 | /* B4_R1_F 32 bit flag register (q1) */ |
| 1522 | /* B4_R1_T1 32 bit Test Register 1 (q1) */ |
| 1523 | /* B4_R1_T2 32 bit Test Register 2 (q1) */ |
| 1524 | /* B4_R1_T3 32 bit Test Register 3 (q1) */ |
| 1525 | /* B4_R2_D 4*32 bit current receive Descriptor (q2) */ |
| 1526 | /* B4_R2_DA 32 bit current rec desc address (q2) */ |
| 1527 | /* B4_R2_AC 32 bit current receive Address Count (q2) */ |
| 1528 | /* B4_R2_BC 32 bit current receive Byte Counter (q2) */ |
| 1529 | /* B4_R2_CSR 32 bit BMU Control/Status Register (q2) */ |
| 1530 | /* B4_R2_F 32 bit flag register (q2) */ |
| 1531 | /* B4_R2_T1 32 bit Test Register 1 (q2) */ |
| 1532 | /* B4_R2_T2 32 bit Test Register 2 (q2) */ |
| 1533 | /* B4_R2_T3 32 bit Test Register 3 (q2) */ |
| 1534 | /* B5_XA_D 4*32 bit current receive Descriptor (xa) */ |
| 1535 | /* B5_XA_DA 32 bit current rec desc address (xa) */ |
| 1536 | /* B5_XA_AC 32 bit current receive Address Count (xa) */ |
| 1537 | /* B5_XA_BC 32 bit current receive Byte Counter (xa) */ |
| 1538 | /* B5_XA_CSR 32 bit BMU Control/Status Register (xa) */ |
| 1539 | /* B5_XA_F 32 bit flag register (xa) */ |
| 1540 | /* B5_XA_T1 32 bit Test Register 1 (xa) */ |
| 1541 | /* B5_XA_T2 32 bit Test Register 2 (xa) */ |
| 1542 | /* B5_XA_T3 32 bit Test Register 3 (xa) */ |
| 1543 | /* B5_XS_D 4*32 bit current receive Descriptor (xs) */ |
| 1544 | /* B5_XS_DA 32 bit current rec desc address (xs) */ |
| 1545 | /* B5_XS_AC 32 bit current receive Address Count (xs) */ |
| 1546 | /* B5_XS_BC 32 bit current receive Byte Counter (xs) */ |
| 1547 | /* B5_XS_CSR 32 bit BMU Control/Status Register (xs) */ |
| 1548 | /* B5_XS_F 32 bit flag register (xs) */ |
| 1549 | /* B5_XS_T1 32 bit Test Register 1 (xs) */ |
| 1550 | /* B5_XS_T2 32 bit Test Register 2 (xs) */ |
| 1551 | /* B5_XS_T3 32 bit Test Register 3 (xs) */ |
| 1552 | /* B5_<xx>_CSR 32 bit BMU Control/Status Register (xx) */ |
| 1553 | #define CSR_DESC_CLEAR (1L<<21) /* Bit 21: Clear Reset for Descr */ |
| 1554 | #define CSR_DESC_SET (1L<<20) /* Bit 20: Set Reset for Descr */ |
| 1555 | #define CSR_FIFO_CLEAR (1L<<19) /* Bit 19: Clear Reset for FIFO */ |
| 1556 | #define CSR_FIFO_SET (1L<<18) /* Bit 18: Set Reset for FIFO */ |
| 1557 | #define CSR_HPI_RUN (1L<<17) /* Bit 17: Release HPI SM */ |
| 1558 | #define CSR_HPI_RST (1L<<16) /* Bit 16: Reset HPI SM to Idle */ |
| 1559 | #define CSR_SV_RUN (1L<<15) /* Bit 15: Release Supervisor SM */ |
| 1560 | #define CSR_SV_RST (1L<<14) /* Bit 14: Reset Supervisor SM */ |
| 1561 | #define CSR_DREAD_RUN (1L<<13) /* Bit 13: Release Descr Read SM */ |
| 1562 | #define CSR_DREAD_RST (1L<<12) /* Bit 12: Reset Descr Read SM */ |
| 1563 | #define CSR_DWRITE_RUN (1L<<11) /* Bit 11: Rel. Descr Write SM */ |
| 1564 | #define CSR_DWRITE_RST (1L<<10) /* Bit 10: Reset Descr Write SM */ |
| 1565 | #define CSR_TRANS_RUN (1L<<9) /* Bit 9: Release Transfer SM */ |
| 1566 | #define CSR_TRANS_RST (1L<<8) /* Bit 8: Reset Transfer SM */ |
| 1567 | /* Bit 7..5: reserved */ |
| 1568 | #define CSR_START (1L<<4) /* Bit 4: Start Rec/Xmit Queue */ |
| 1569 | #define CSR_IRQ_CL_P (1L<<3) /* Bit 3: Clear Parity IRQ, Rcv */ |
| 1570 | #define CSR_IRQ_CL_B (1L<<2) /* Bit 2: Clear EOB IRQ */ |
| 1571 | #define CSR_IRQ_CL_F (1L<<1) /* Bit 1: Clear EOF IRQ */ |
| 1572 | #define CSR_IRQ_CL_C (1L<<0) /* Bit 0: Clear ERR IRQ */ |
| 1573 | |
| 1574 | #define CSR_SET_RESET (CSR_DESC_SET|CSR_FIFO_SET|CSR_HPI_RST|CSR_SV_RST|\ |
| 1575 | CSR_DREAD_RST|CSR_DWRITE_RST|CSR_TRANS_RST) |
| 1576 | #define CSR_CLR_RESET (CSR_DESC_CLEAR|CSR_FIFO_CLEAR|CSR_HPI_RUN|CSR_SV_RUN|\ |
| 1577 | CSR_DREAD_RUN|CSR_DWRITE_RUN|CSR_TRANS_RUN) |
| 1578 | |
| 1579 | |
| 1580 | /* B5_<xx>_F 32 bit flag register (xx) */ |
| 1581 | /* Bit 28..31: reserved */ |
| 1582 | #define F_ALM_FULL (1L<<27) /* Bit 27: (ML) FIFO almost full */ |
| 1583 | #define F_FIFO_EOF (1L<<26) /* Bit 26: (ML) Fag bit in FIFO */ |
| 1584 | #define F_WM_REACHED (1L<<25) /* Bit 25: (ML) Watermark reached */ |
| 1585 | #define F_UP_DW_USED (1L<<24) /* Bit 24: (ML) Upper Dword used (bug)*/ |
| 1586 | /* Bit 23: reserved */ |
| 1587 | #define F_FIFO_LEVEL (0x1fL<<16) /* Bit 16..22:(ML) # of Qwords in FIFO*/ |
| 1588 | /* Bit 8..15: reserved */ |
| 1589 | #define F_ML_WATER_M 0x0000ffL /* Bit 0.. 7:(ML) Watermark */ |
| 1590 | #define FLAG_WATER 0x00001fL /* Bit 4..0:(DV) Level of req data tr.*/ |
| 1591 | |
| 1592 | /* B5_<xx>_T1 32 bit Test Register 1 (xx) */ |
| 1593 | /* Holds four State Machine control Bytes */ |
| 1594 | #define SM_CRTL_SV (0xffL<<24) /* Bit 31..24: Control Supervisor SM */ |
| 1595 | #define SM_CRTL_RD (0xffL<<16) /* Bit 23..16: Control Read Desc SM */ |
| 1596 | #define SM_CRTL_WR (0xffL<<8) /* Bit 15..8: Control Write Desc SM */ |
| 1597 | #define SM_CRTL_TR (0xffL<<0) /* Bit 7..0: Control Transfer SM */ |
| 1598 | |
| 1599 | /* B4_<xx>_T1_TR 8 bit Test Register 1 TR (xx) */ |
| 1600 | /* B4_<xx>_T1_WR 8 bit Test Register 1 WR (xx) */ |
| 1601 | /* B4_<xx>_T1_RD 8 bit Test Register 1 RD (xx) */ |
| 1602 | /* B4_<xx>_T1_SV 8 bit Test Register 1 SV (xx) */ |
| 1603 | /* The control status byte of each machine looks like ... */ |
| 1604 | #define SM_STATE 0xf0 /* Bit 7..4: State which shall be loaded */ |
| 1605 | #define SM_LOAD 0x08 /* Bit 3: Load the SM with SM_STATE */ |
| 1606 | #define SM_TEST_ON 0x04 /* Bit 2: Switch on SM Test Mode */ |
| 1607 | #define SM_TEST_OFF 0x02 /* Bit 1: Go off the Test Mode */ |
| 1608 | #define SM_STEP 0x01 /* Bit 0: Step the State Machine */ |
| 1609 | |
| 1610 | /* The coding of the states */ |
| 1611 | #define SM_SV_IDLE 0x0 /* Supervisor Idle Tr/Re */ |
| 1612 | #define SM_SV_RES_START 0x1 /* Supervisor Res_Start Tr/Re */ |
| 1613 | #define SM_SV_GET_DESC 0x3 /* Supervisor Get_Desc Tr/Re */ |
| 1614 | #define SM_SV_CHECK 0x2 /* Supervisor Check Tr/Re */ |
| 1615 | #define SM_SV_MOV_DATA 0x6 /* Supervisor Move_Data Tr/Re */ |
| 1616 | #define SM_SV_PUT_DESC 0x7 /* Supervisor Put_Desc Tr/Re */ |
| 1617 | #define SM_SV_SET_IRQ 0x5 /* Supervisor Set_Irq Tr/Re */ |
| 1618 | |
| 1619 | #define SM_RD_IDLE 0x0 /* Read Desc. Idle Tr/Re */ |
| 1620 | #define SM_RD_LOAD 0x1 /* Read Desc. Load Tr/Re */ |
| 1621 | #define SM_RD_WAIT_TC 0x3 /* Read Desc. Wait_TC Tr/Re */ |
| 1622 | #define SM_RD_RST_EOF 0x6 /* Read Desc. Reset_EOF Re */ |
| 1623 | #define SM_RD_WDONE_R 0x2 /* Read Desc. Wait_Done Re */ |
| 1624 | #define SM_RD_WDONE_T 0x4 /* Read Desc. Wait_Done Tr */ |
| 1625 | |
| 1626 | #define SM_TR_IDLE 0x0 /* Trans. Data Idle Tr/Re */ |
| 1627 | #define SM_TR_LOAD 0x3 /* Trans. Data Load Tr/Re */ |
| 1628 | #define SM_TR_LOAD_R_ML 0x1 /* Trans. Data Load /Re (ML) */ |
| 1629 | #define SM_TR_WAIT_TC 0x2 /* Trans. Data Wait_TC Tr/Re */ |
| 1630 | #define SM_TR_WDONE 0x4 /* Trans. Data Wait_Done Tr/Re */ |
| 1631 | |
| 1632 | #define SM_WR_IDLE 0x0 /* Write Desc. Idle Tr/Re */ |
| 1633 | #define SM_WR_ABLEN 0x1 /* Write Desc. Act_Buf_Length Tr/Re */ |
| 1634 | #define SM_WR_LD_A4 0x2 /* Write Desc. Load_A4 Re */ |
| 1635 | #define SM_WR_RES_OWN 0x2 /* Write Desc. Res_OWN Tr */ |
| 1636 | #define SM_WR_WAIT_EOF 0x3 /* Write Desc. Wait_EOF Re */ |
| 1637 | #define SM_WR_LD_N2C_R 0x4 /* Write Desc. Load_N2C Re */ |
| 1638 | #define SM_WR_WAIT_TC_R 0x5 /* Write Desc. Wait_TC Re */ |
| 1639 | #define SM_WR_WAIT_TC4 0x6 /* Write Desc. Wait_TC4 Re */ |
| 1640 | #define SM_WR_LD_A_T 0x6 /* Write Desc. Load_A Tr */ |
| 1641 | #define SM_WR_LD_A_R 0x7 /* Write Desc. Load_A Re */ |
| 1642 | #define SM_WR_WAIT_TC_T 0x7 /* Write Desc. Wait_TC Tr */ |
| 1643 | #define SM_WR_LD_N2C_T 0xc /* Write Desc. Load_N2C Tr */ |
| 1644 | #define SM_WR_WDONE_T 0x9 /* Write Desc. Wait_Done Tr */ |
| 1645 | #define SM_WR_WDONE_R 0xc /* Write Desc. Wait_Done Re */ |
| 1646 | #define SM_WR_LD_D_AD 0xe /* Write Desc. Load_Dumr_A Re (ML) */ |
| 1647 | #define SM_WR_WAIT_D_TC 0xf /* Write Desc. Wait_Dumr_TC Re (ML) */ |
| 1648 | |
| 1649 | /* B5_<xx>_T2 32 bit Test Register 2 (xx) */ |
| 1650 | /* Note: This register is only defined for the transmit queues */ |
| 1651 | /* Bit 31..8: reserved */ |
| 1652 | #define AC_TEST_ON (1<<7) /* Bit 7: Address Counter Test Mode on */ |
| 1653 | #define AC_TEST_OFF (1<<6) /* Bit 6: Address Counter Test Mode off*/ |
| 1654 | #define BC_TEST_ON (1<<5) /* Bit 5: Byte Counter Test Mode on */ |
| 1655 | #define BC_TEST_OFF (1<<4) /* Bit 4: Byte Counter Test Mode off */ |
| 1656 | #define TEST_STEP04 (1<<3) /* Bit 3: Inc AC/Dec BC by 4 */ |
| 1657 | #define TEST_STEP03 (1<<2) /* Bit 2: Inc AC/Dec BC by 3 */ |
| 1658 | #define TEST_STEP02 (1<<1) /* Bit 1: Inc AC/Dec BC by 2 */ |
| 1659 | #define TEST_STEP01 (1<<0) /* Bit 0: Inc AC/Dec BC by 1 */ |
| 1660 | |
| 1661 | /* B5_<xx>_T3 32 bit Test Register 3 (xx) */ |
| 1662 | /* Note: This register is only defined for the transmit queues */ |
| 1663 | /* Bit 31..8: reserved */ |
| 1664 | #define T3_MUX_2 (1<<7) /* Bit 7: (ML) Mux position MSB */ |
| 1665 | #define T3_VRAM_2 (1<<6) /* Bit 6: (ML) Virtual RAM buffer addr MSB */ |
| 1666 | #define T3_LOOP (1<<5) /* Bit 5: Set Loopback (Xmit) */ |
| 1667 | #define T3_UNLOOP (1<<4) /* Bit 4: Unset Loopback (Xmit) */ |
| 1668 | #define T3_MUX (3<<2) /* Bit 3..2: Mux position */ |
| 1669 | #define T3_VRAM (3<<0) /* Bit 1..0: Virtual RAM buffer Address */ |
| 1670 | |
| 1671 | /* PCI card IDs */ |
| 1672 | /* |
| 1673 | * Note: The following 4 byte definitions shall not be used! Use OEM Concept! |
| 1674 | */ |
| 1675 | #define PCI_VEND_ID0 0x48 /* PCI vendor ID (SysKonnect) */ |
| 1676 | #define PCI_VEND_ID1 0x11 /* PCI vendor ID (SysKonnect) */ |
| 1677 | /* (High byte) */ |
| 1678 | #define PCI_DEV_ID0 0x00 /* PCI device ID */ |
| 1679 | #define PCI_DEV_ID1 0x40 /* PCI device ID (High byte) */ |
| 1680 | |
| 1681 | /*#define PCI_CLASS 0x02*/ /* PCI class code: network device */ |
| 1682 | #define PCI_NW_CLASS 0x02 /* PCI class code: network device */ |
| 1683 | #define PCI_SUB_CLASS 0x02 /* PCI subclass ID: FDDI device */ |
| 1684 | #define PCI_PROG_INTFC 0x00 /* PCI programming Interface (=0) */ |
| 1685 | |
| 1686 | /* |
| 1687 | * address transmission from logical to physical offset address on board |
| 1688 | */ |
| 1689 | #define FMA(a) (0x0400|((a)<<2)) /* FORMAC+ (r/w) (SN3) */ |
| 1690 | #define P1(a) (0x0380|((a)<<2)) /* PLC1 (r/w) (DAS) */ |
| 1691 | #define P2(a) (0x0600|((a)<<2)) /* PLC2 (r/w) (covered by the SN3) */ |
| 1692 | #define PRA(a) (B2_MAC_0 + (a)) /* configuration PROM (MAC address) */ |
| 1693 | |
| 1694 | /* |
| 1695 | * FlashProm specification |
| 1696 | */ |
| 1697 | #define MAX_PAGES 0x20000L /* Every byte has a single page */ |
| 1698 | #define MAX_FADDR 1 /* 1 byte per page */ |
| 1699 | |
| 1700 | /* |
| 1701 | * Receive / Transmit Buffer Control word |
| 1702 | */ |
| 1703 | #define BMU_OWN (1UL<<31) /* OWN bit: 0 == host, 1 == adapter */ |
| 1704 | #define BMU_STF (1L<<30) /* Start of Frame ? */ |
| 1705 | #define BMU_EOF (1L<<29) /* End of Frame ? */ |
| 1706 | #define BMU_EN_IRQ_EOB (1L<<28) /* Enable "End of Buffer" IRQ */ |
| 1707 | #define BMU_EN_IRQ_EOF (1L<<27) /* Enable "End of Frame" IRQ */ |
| 1708 | #define BMU_DEV_0 (1L<<26) /* RX: don't transfer to system mem */ |
| 1709 | #define BMU_SMT_TX (1L<<25) /* TX: if set, buffer type SMT_MBuf */ |
| 1710 | #define BMU_ST_BUF (1L<<25) /* RX: copy of start of frame */ |
| 1711 | #define BMU_UNUSED (1L<<24) /* Set if the Descr is curr unused */ |
| 1712 | #define BMU_SW (3L<<24) /* 2 Bits reserved for SW usage */ |
| 1713 | #define BMU_CHECK 0x00550000L /* To identify the control word */ |
| 1714 | #define BMU_BBC 0x0000FFFFL /* R/T Buffer Byte Count */ |
| 1715 | |
| 1716 | /* |
| 1717 | * physical address offset + IO-Port base address |
| 1718 | */ |
| 1719 | #ifdef MEM_MAPPED_IO |
| 1720 | #define ADDR(a) (char far *) smc->hw.iop+(a) |
| 1721 | #define ADDRS(smc,a) (char far *) (smc)->hw.iop+(a) |
| 1722 | #else |
| 1723 | #define ADDR(a) (((a)>>7) ? (outp(smc->hw.iop+B0_RAP,(a)>>7), \ |
| 1724 | (smc->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0)))) : \ |
| 1725 | (smc->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0)))) |
| 1726 | #define ADDRS(smc,a) (((a)>>7) ? (outp((smc)->hw.iop+B0_RAP,(a)>>7), \ |
| 1727 | ((smc)->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0)))) : \ |
| 1728 | ((smc)->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0)))) |
| 1729 | #endif |
| 1730 | |
| 1731 | /* |
| 1732 | * Define a macro to access the configuration space |
| 1733 | */ |
| 1734 | #define PCI_C(a) ADDR(B3_CFG_SPC + (a)) /* PCI Config Space */ |
| 1735 | |
| 1736 | #define EXT_R(a) ADDR(B6_EXT_REG + (a)) /* External Registers */ |
| 1737 | |
| 1738 | /* |
| 1739 | * Define some values needed for the MAC address (PROM) |
| 1740 | */ |
| 1741 | #define SA_MAC (0) /* start addr. MAC_AD within the PROM */ |
| 1742 | #define PRA_OFF (0) /* offset correction when 4th byte reading */ |
| 1743 | |
| 1744 | #define SKFDDI_PSZ 8 /* address PROM size */ |
| 1745 | |
| 1746 | #define FM_A(a) ADDR(FMA(a)) /* FORMAC Plus physical addr */ |
| 1747 | #define P1_A(a) ADDR(P1(a)) /* PLC1 (r/w) */ |
| 1748 | #define P2_A(a) ADDR(P2(a)) /* PLC2 (r/w) (DAS) */ |
| 1749 | #define PR_A(a) ADDR(PRA(a)) /* config. PROM (MAC address) */ |
| 1750 | |
| 1751 | /* |
| 1752 | * Macro to read the PROM |
| 1753 | */ |
| 1754 | #define READ_PROM(a) ((u_char)inp(a)) |
| 1755 | |
| 1756 | #define GET_PAGE(bank) outpd(ADDR(B2_FAR),bank) |
| 1757 | #define VPP_ON() |
| 1758 | #define VPP_OFF() |
| 1759 | |
| 1760 | /* |
| 1761 | * Note: Values of the Interrupt Source Register are defined above |
| 1762 | */ |
| 1763 | #define ISR_A ADDR(B0_ISRC) |
| 1764 | #define GET_ISR() inpd(ISR_A) |
| 1765 | #define GET_ISR_SMP(iop) inpd((iop)+B0_ISRC) |
| 1766 | #define CHECK_ISR() (inpd(ISR_A) & inpd(ADDR(B0_IMSK))) |
| 1767 | #define CHECK_ISR_SMP(iop) (inpd((iop)+B0_ISRC) & inpd((iop)+B0_IMSK)) |
| 1768 | |
| 1769 | #define BUS_CHECK() |
| 1770 | |
| 1771 | /* |
| 1772 | * CLI_FBI: Disable Board Interrupts |
| 1773 | * STI_FBI: Enable Board Interrupts |
| 1774 | */ |
| 1775 | #ifndef UNIX |
| 1776 | #define CLI_FBI() outpd(ADDR(B0_IMSK),0) |
| 1777 | #else |
| 1778 | #define CLI_FBI(smc) outpd(ADDRS((smc),B0_IMSK),0) |
| 1779 | #endif |
| 1780 | |
| 1781 | #ifndef UNIX |
| 1782 | #define STI_FBI() outpd(ADDR(B0_IMSK),smc->hw.is_imask) |
| 1783 | #else |
| 1784 | #define STI_FBI(smc) outpd(ADDRS((smc),B0_IMSK),(smc)->hw.is_imask) |
| 1785 | #endif |
| 1786 | |
| 1787 | #define CLI_FBI_SMP(iop) outpd((iop)+B0_IMSK,0) |
| 1788 | #define STI_FBI_SMP(smc,iop) outpd((iop)+B0_IMSK,(smc)->hw.is_imask) |
| 1789 | |
| 1790 | #endif /* PCI */ |
| 1791 | /*--------------------------------------------------------------------------*/ |
| 1792 | |
| 1793 | /* |
| 1794 | * 12 bit transfer (dword) counter: |
| 1795 | * (ISA: 2*trc = number of byte) |
| 1796 | * (EISA: 4*trc = number of byte) |
| 1797 | * (MCA: 4*trc = number of byte) |
| 1798 | */ |
| 1799 | #define MAX_TRANS (0x0fff) |
| 1800 | |
| 1801 | /* |
| 1802 | * PC PIC |
| 1803 | */ |
| 1804 | #define MST_8259 (0x20) |
| 1805 | #define SLV_8259 (0xA0) |
| 1806 | |
| 1807 | #define TPS (18) /* ticks per second */ |
| 1808 | |
| 1809 | /* |
| 1810 | * error timer defs |
| 1811 | */ |
| 1812 | #define TN (4) /* number of supported timer = TN+1 */ |
| 1813 | #define SNPPND_TIME (5) /* buffer memory access over mem. data reg. */ |
| 1814 | |
| 1815 | #define MAC_AD 0x405a0000 |
| 1816 | |
| 1817 | #define MODR1 FM_A(FM_MDREG1) /* mode register 1 */ |
| 1818 | #define MODR2 FM_A(FM_MDREG2) /* mode register 2 */ |
| 1819 | |
| 1820 | #define CMDR1 FM_A(FM_CMDREG1) /* command register 1 */ |
| 1821 | #define CMDR2 FM_A(FM_CMDREG2) /* command register 2 */ |
| 1822 | |
| 1823 | |
| 1824 | /* |
| 1825 | * function defines |
| 1826 | */ |
| 1827 | #define CLEAR(io,mask) outpw((io),inpw(io)&(~(mask))) |
| 1828 | #define SET(io,mask) outpw((io),inpw(io)|(mask)) |
| 1829 | #define GET(io,mask) (inpw(io)&(mask)) |
| 1830 | #define SETMASK(io,val,mask) outpw((io),(inpw(io) & ~(mask)) | (val)) |
| 1831 | |
| 1832 | /* |
| 1833 | * PHY Port A (PA) = PLC 1 |
| 1834 | * With SuperNet 3 PHY-A and PHY S are identical. |
| 1835 | */ |
| 1836 | #define PLC(np,reg) (((np) == PA) ? P2_A(reg) : P1_A(reg)) |
| 1837 | |
| 1838 | /* |
| 1839 | * set memory address register for write and read |
| 1840 | */ |
| 1841 | #define MARW(ma) outpw(FM_A(FM_MARW),(unsigned int)(ma)) |
| 1842 | #define MARR(ma) outpw(FM_A(FM_MARR),(unsigned int)(ma)) |
| 1843 | |
| 1844 | /* |
| 1845 | * read/write from/to memory data register |
| 1846 | */ |
| 1847 | /* write double word */ |
| 1848 | #define MDRW(dd) outpw(FM_A(FM_MDRU),(unsigned int)((dd)>>16)) ;\ |
| 1849 | outpw(FM_A(FM_MDRL),(unsigned int)(dd)) |
| 1850 | |
| 1851 | #ifndef WINNT |
| 1852 | /* read double word */ |
| 1853 | #define MDRR() (((long)inpw(FM_A(FM_MDRU))<<16) + inpw(FM_A(FM_MDRL))) |
| 1854 | |
| 1855 | /* read FORMAC+ 32-bit status register */ |
| 1856 | #define GET_ST1() (((long)inpw(FM_A(FM_ST1U))<<16) + inpw(FM_A(FM_ST1L))) |
| 1857 | #define GET_ST2() (((long)inpw(FM_A(FM_ST2U))<<16) + inpw(FM_A(FM_ST2L))) |
| 1858 | #ifdef SUPERNET_3 |
| 1859 | #define GET_ST3() (((long)inpw(FM_A(FM_ST3U))<<16) + inpw(FM_A(FM_ST3L))) |
| 1860 | #endif |
| 1861 | #else |
| 1862 | /* read double word */ |
| 1863 | #define MDRR() inp2w((FM_A(FM_MDRU)),(FM_A(FM_MDRL))) |
| 1864 | |
| 1865 | /* read FORMAC+ 32-bit status register */ |
| 1866 | #define GET_ST1() inp2w((FM_A(FM_ST1U)),(FM_A(FM_ST1L))) |
| 1867 | #define GET_ST2() inp2w((FM_A(FM_ST2U)),(FM_A(FM_ST2L))) |
| 1868 | #ifdef SUPERNET_3 |
| 1869 | #define GET_ST3() inp2w((FM_A(FM_ST3U)),(FM_A(FM_ST3L))) |
| 1870 | #endif |
| 1871 | #endif |
| 1872 | |
| 1873 | /* Special timer macro for 82c54 */ |
| 1874 | /* timer access over data bus bit 8..15 */ |
| 1875 | #define OUT_82c54_TIMER(port,val) outpw(TI_A(port),(val)<<8) |
| 1876 | #define IN_82c54_TIMER(port) ((inpw(TI_A(port))>>8) & 0xff) |
| 1877 | |
| 1878 | |
| 1879 | #ifdef DEBUG |
| 1880 | #define DB_MAC(mac,st) {if (debug_mac & 0x1)\ |
| 1881 | printf("M") ;\ |
| 1882 | if (debug_mac & 0x2)\ |
| 1883 | printf("\tMAC %d status 0x%08lx\n",mac,st) ;\ |
| 1884 | if (debug_mac & 0x4)\ |
| 1885 | dp_mac(mac,st) ;\ |
| 1886 | } |
| 1887 | |
| 1888 | #define DB_PLC(p,iev) { if (debug_plc & 0x1)\ |
| 1889 | printf("P") ;\ |
| 1890 | if (debug_plc & 0x2)\ |
| 1891 | printf("\tPLC %s Int 0x%04x\n", \ |
| 1892 | (p == PA) ? "A" : "B", iev) ;\ |
| 1893 | if (debug_plc & 0x4)\ |
| 1894 | dp_plc(p,iev) ;\ |
| 1895 | } |
| 1896 | |
| 1897 | #define DB_TIMER() { if (debug_timer & 0x1)\ |
| 1898 | printf("T") ;\ |
| 1899 | if (debug_timer & 0x2)\ |
| 1900 | printf("\tTimer ISR\n") ;\ |
| 1901 | } |
| 1902 | |
| 1903 | #else /* no DEBUG */ |
| 1904 | |
| 1905 | #define DB_MAC(mac,st) |
| 1906 | #define DB_PLC(p,iev) |
| 1907 | #define DB_TIMER() |
| 1908 | |
| 1909 | #endif /* no DEBUG */ |
| 1910 | |
| 1911 | #define INC_PTR(sp,cp,ep) if (++cp == ep) cp = sp |
| 1912 | /* |
| 1913 | * timer defs |
| 1914 | */ |
| 1915 | #define COUNT(t) ((t)<<6) /* counter */ |
| 1916 | #define RW_OP(o) ((o)<<4) /* read/write operation */ |
| 1917 | #define TMODE(m) ((m)<<1) /* timer mode */ |
| 1918 | |
| 1919 | #endif |