skfbi.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:74k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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