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 execption */ 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 execption */ 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 1920