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