commented early_printk patch because of rejects.
[linux-flexiantxendom0-3.2.10.git] / drivers / net / sk98lin / h / skgehw.h
1 /******************************************************************************
2  *
3  * Name:        skgehw.h
4  * Project:     Gigabit Ethernet Adapters, Common Modules
5  * Version:     $Revision: 1.53 $
6  * Date:        $Date: 2003/07/04 12:39:01 $
7  * Purpose:     Defines and Macros for the Gigabit Ethernet Adapter Product Family
8  *
9  ******************************************************************************/
10
11 /******************************************************************************
12  *
13  *      (C)Copyright 1998-2002 SysKonnect.
14  *      (C)Copyright 2002-2003 Marvell.
15  *
16  *      This program is free software; you can redistribute it and/or modify
17  *      it under the terms of the GNU General Public License as published by
18  *      the Free Software Foundation; either version 2 of the License, or
19  *      (at your option) any later version.
20  *
21  *      The information in this file is provided "AS IS" without warranty.
22  *
23  ******************************************************************************/
24
25 /******************************************************************************
26  *
27  * History:
28  * $Log: skgehw.h,v $
29  * Revision 1.53  2003/07/04 12:39:01  rschmidt
30  * Added SK_FAR to pointers in XM_IN32() and GM_IN32() macros (for PXE)
31  * Editorial changes
32  *
33  * Revision 1.52  2003/05/13 17:16:36  mkarl
34  * Added SK_FAR for PXE.
35  * Editorial changes.
36  *
37  * Revision 1.51  2003/04/08 16:31:50  rschmidt
38  * Added defines for new Chip IDs (YUKON-Lite, YUKON-LP)
39  * Editorial changes
40  *
41  * Revision 1.50  2003/03/31 07:29:45  mkarl
42  * Corrected Copyright.
43  * Editorial changes.
44  *
45  * Revision 1.49  2003/01/28 09:43:49  rschmidt
46  * Added defines for PCI-Spec. 2.3 IRQ
47  * Added defines for CLK_RUN (YUKON-Lite)
48  * Editorial changes
49  *
50  * Revision 1.48  2002/12/05 10:25:11  rschmidt
51  * Added defines for Half Duplex Burst Mode On/Off
52  * Added defines for Rx GMAC FIFO Flush feature
53  * Editorial changes
54  *
55  * Revision 1.47  2002/11/12 17:01:31  rschmidt
56  * Added defines for WOL_CTL_DEFAULT
57  * Editorial changes
58  *
59  * Revision 1.46  2002/10/14 14:47:57  rschmidt
60  * Corrected bit mask for HW self test results
61  * Added defines for WOL Registers
62  * Editorial changes
63  *
64  * Revision 1.45  2002/10/11 09:25:22  mkarl
65  * Added bit mask for HW self test results.
66  *
67  * Revision 1.44  2002/08/16 14:44:36  rschmidt
68  * Added define GPC_HWCFG_GMII_FIB for YUKON Fiber
69  *
70  * Revision 1.43  2002/08/12 13:31:50  rschmidt
71  * Corrected macros for GMAC Address Registers: GM_INADDR(),
72  * GM_OUTADDR(), GM_INHASH, GM_OUTHASH.
73  * Editorial changes
74  *
75  * Revision 1.42  2002/08/08 15:37:56  rschmidt
76  * Added defines for Power Management Capabilities
77  * Editorial changes
78  *
79  * Revision 1.41  2002/07/23 16:02:25  rschmidt
80  * Added macro WOL_REG() to access WOL reg. (HW-Bug in YUKON 1st rev.)
81  *
82  * Revision 1.40  2002/07/15 15:41:37  rschmidt
83  * Added new defines for Power Management Cap. & Control
84  * Editorial changes
85  *
86  * Revision 1.39  2002/06/10 09:37:07  rschmidt
87  * Added macros for the ADDR-Modul
88  *
89  * Revision 1.38  2002/06/05 08:15:19  rschmidt
90  * Added defines for WOL Registers
91  * Editorial changes
92  *
93  * Revision 1.37  2002/04/25 11:39:23  rschmidt
94  * Added new defines for PCI Our Register 1
95  * Added new registers and defines for YUKON (Rx FIFO, Tx FIFO,
96  * Time Stamp Timer, GMAC Control, GPHY Control,Link Control,
97  * GMAC IRQ Source and Mask, Wake-up Frame Pattern Match);
98  * Added new defines for Control/Status (VAUX available)
99  * Added Chip ID for YUKON
100  * Added define for descriptors with UDP ext. for YUKON
101  * Added macros to access the GMAC
102  * Added new Phy Type for Marvell 88E1011S (GPHY)
103  * Editorial changes
104  *
105  * Revision 1.36  2000/11/09 12:32:49  rassmann
106  * Renamed variables.
107  *
108  * Revision 1.35  2000/05/19 10:17:13  cgoos
109  * Added inactivity check in PHY_READ (in DEBUG mode only).
110  *
111  * Revision 1.34  1999/11/22 13:53:40  cgoos
112  * Changed license header to GPL.
113  *
114  * Revision 1.33  1999/08/27 11:17:10  malthoff
115  * It's more savely to put brackets around macro parameters.
116  * Brackets added for PHY_READ and PHY_WRITE.
117  *
118  * Revision 1.32  1999/05/19 07:31:01  cgoos
119  * Changes for 1000Base-T.
120  * Added HWAC_LINK_LED macro.
121  *
122  * Revision 1.31  1999/03/12 13:27:40  malthoff
123  * Remove __STDC__.
124  *
125  * Revision 1.30  1999/02/09 09:28:20  malthoff
126  * Add PCI_ERRBITS.
127  *
128  * Revision 1.29  1999/01/26 08:55:48  malthoff
129  * Bugfix: The 16 bit field relations inside the descriptor are
130  *      endianess dependend if the descriptor reversal feature
131  *      (PCI_REV_DESC bit in PCI_OUR_REG_2) is enabled.
132  *      Drivers which use this feature has to set the define
133  *      SK_USE_REV_DESC.
134  *
135  * Revision 1.28  1998/12/10 11:10:22  malthoff
136  * bug fix: IS_IRQ_STAT and IS_IRQ_MST_ERR has been twisted.
137  *
138  * Revision 1.27  1998/11/13 14:19:21  malthoff
139  * Bug Fix: The bit definition of B3_PA_CTRL has completely
140  * changed from HW Spec v1.3 to v1.5.
141  *
142  * Revision 1.26  1998/11/04 08:31:48  cgoos
143  * Fixed byte ordering in XM_OUTADDR/XM_OUTHASH macros.
144  *
145  * Revision 1.25  1998/11/04 07:16:25  cgoos
146  * Changed byte ordering in XM_INADDR/XM_INHASH again.
147  *
148  * Revision 1.24  1998/11/02 11:08:43  malthoff
149  * RxCtrl and TxCtrl must be volatile.
150  *
151  * Revision 1.23  1998/10/28 13:50:45  malthoff
152  * Fix: Endian support missing in XM_IN/OUT-ADDR/HASH macros.
153  *
154  * Revision 1.22  1998/10/26 08:01:36  malthoff
155  * RX_MFF_CTRL1 is split up into RX_MFF_CTRL1,
156  * RX_MFF_STAT_TO, and RX_MFF_TIST_TO.
157  * TX_MFF_CTRL1 is split up TX_MFF_CTRL1 and TX_MFF_WAF.
158  *
159  * Revision 1.21  1998/10/20 07:43:10  malthoff
160  * Fix: XM_IN/OUT/ADDR/HASH macros:
161  * The pointer must be casted.
162  *
163  * Revision 1.20  1998/10/19 15:53:59  malthoff
164  * Remove ML proto definitions.
165  *
166  * Revision 1.19  1998/10/16 14:40:17  gklug
167  * fix: typo B0_XM_IMSK regs
168  *
169  * Revision 1.18  1998/10/16 09:46:54  malthoff
170  * Remove temp defines for ML diag prototype.
171  * Fix register definition for B0_XM1_PHY_DATA, B0_XM1_PHY_DATA
172  * B0_XM2_PHY_DATA, B0_XM2_PHY_ADDR, B0_XA1_CSR, B0_XS1_CSR,
173  * B0_XS2_CSR, and B0_XA2_CSR.
174  *
175  * Revision 1.17  1998/10/14 06:03:14  cgoos
176  * Changed shifted constant to ULONG.
177  *
178  * Revision 1.16  1998/10/09 07:05:41  malthoff
179  * Rename ALL_PA_ENA_TO to PA_ENA_TO_ALL.
180  *
181  * Revision 1.15  1998/10/05 07:54:23  malthoff
182  * Split up RB_CTRL and it's bit definition into
183  * RB_CTRL, RB_TST1, and RB_TST2.
184  * Rename RB_RX_HTPP to RB_RX_LTPP.
185  * Add ALL_PA_ENA_TO. Modify F_WATER_MARK
186  * according to HW Spec. v1.5.
187  * Add MFF_TX_CTRL_DEF.
188  *
189  * Revision 1.14  1998/09/28 13:31:16  malthoff
190  * bug fix: B2_MAC_3 is 0x110 not 0x114
191  *
192  * Revision 1.13  1998/09/24 14:42:56  malthoff
193  * Split the RX_MFF_TST into RX_MFF_CTRL2,
194  * RX_MFF_TST1, and RX_MFF_TST2.
195  * Rename RX_MFF_CTRL to RX_MFF_CTRL1.
196  * Add BMU bit CSR_SV_IDLE.
197  * Add macros PHY_READ() and PHY_WRITE().
198  * Rename macro SK_ADDR() to SK_HW_ADDR()
199  * because of conflicts with the Address Module.
200  *
201  * Revision 1.12  1998/09/16 07:25:33  malthoff
202  * Change the parameter order in the XM_INxx and XM_OUTxx macros,
203  * to have the IoC as first parameter.
204  *
205  * Revision 1.11  1998/09/03 09:58:41  malthoff
206  * Rework the XM_xxx macros. Use {} instead of () to
207  * be compatible with SK_xxx macros which are defined
208  * with {}.
209  *
210  * Revision 1.10  1998/09/02 11:16:39  malthoff
211  * Temporary modify B2_I2C_SW to make tests with
212  * the GE/ML prototype.
213  *
214  * Revision 1.9  1998/08/19 09:11:49  gklug
215  * fix: struct are removed from c-source (see CCC)
216  * add: typedefs for all structs
217  *
218  * Revision 1.8  1998/08/18 08:27:27  malthoff
219  * Add some temporary workarounds to test GE
220  * sources with the ML.
221  *
222  * Revision 1.7  1998/07/03 14:42:26  malthoff
223  * bug fix: Correct macro XMA().
224  * Add temporary workaround to access the PCI config space over I/O
225  *
226  * Revision 1.6  1998/06/23 11:30:36  malthoff
227  * Remove ';' with ',' in macors.
228  *
229  * Revision 1.5  1998/06/22 14:20:57  malthoff
230  * Add macro SK_ADDR(Base,Addr).
231  *
232  * Revision 1.4  1998/06/19 13:35:43  malthoff
233  * change 'pGec' with 'pAC'
234  *
235  * Revision 1.3  1998/06/17 14:58:16  cvs
236  * Lost keywords reinserted.
237  *
238  * Revision 1.1  1998/06/17 14:16:36  cvs
239  * created
240  *
241  *
242  ******************************************************************************/
243
244 #ifndef __INC_SKGEHW_H
245 #define __INC_SKGEHW_H
246
247 #ifdef __cplusplus
248 extern "C" {
249 #endif  /* __cplusplus */
250
251 /* defines ********************************************************************/
252
253 #define BIT_31          (1UL << 31)
254 #define BIT_30          (1L << 30)
255 #define BIT_29          (1L << 29)
256 #define BIT_28          (1L << 28)
257 #define BIT_27          (1L << 27)
258 #define BIT_26          (1L << 26)
259 #define BIT_25          (1L << 25)
260 #define BIT_24          (1L << 24)
261 #define BIT_23          (1L << 23)
262 #define BIT_22          (1L << 22)
263 #define BIT_21          (1L << 21)
264 #define BIT_20          (1L << 20)
265 #define BIT_19          (1L << 19)
266 #define BIT_18          (1L << 18)
267 #define BIT_17          (1L << 17)
268 #define BIT_16          (1L << 16)
269 #define BIT_15          (1L << 15)
270 #define BIT_14          (1L << 14)
271 #define BIT_13          (1L << 13)
272 #define BIT_12          (1L << 12)
273 #define BIT_11          (1L << 11)
274 #define BIT_10          (1L << 10)
275 #define BIT_9           (1L << 9)
276 #define BIT_8           (1L << 8)
277 #define BIT_7           (1L << 7)
278 #define BIT_6           (1L << 6)
279 #define BIT_5           (1L << 5)
280 #define BIT_4           (1L << 4)
281 #define BIT_3           (1L << 3)
282 #define BIT_2           (1L << 2)
283 #define BIT_1           (1L << 1)
284 #define BIT_0           1L
285
286 #define BIT_15S         (1U << 15)
287 #define BIT_14S         (1 << 14)
288 #define BIT_13S         (1 << 13)
289 #define BIT_12S         (1 << 12)
290 #define BIT_11S         (1 << 11)
291 #define BIT_10S         (1 << 10)
292 #define BIT_9S          (1 << 9)
293 #define BIT_8S          (1 << 8)
294 #define BIT_7S          (1 << 7)
295 #define BIT_6S          (1 << 6)
296 #define BIT_5S          (1 << 5)
297 #define BIT_4S          (1 << 4)
298 #define BIT_3S          (1 << 3)
299 #define BIT_2S          (1 << 2)
300 #define BIT_1S          (1 << 1)
301 #define BIT_0S          1
302
303 #define SHIFT31(x)      ((x) << 31)
304 #define SHIFT30(x)      ((x) << 30)
305 #define SHIFT29(x)      ((x) << 29)
306 #define SHIFT28(x)      ((x) << 28)
307 #define SHIFT27(x)      ((x) << 27)
308 #define SHIFT26(x)      ((x) << 26)
309 #define SHIFT25(x)      ((x) << 25)
310 #define SHIFT24(x)      ((x) << 24)
311 #define SHIFT23(x)      ((x) << 23)
312 #define SHIFT22(x)      ((x) << 22)
313 #define SHIFT21(x)      ((x) << 21)
314 #define SHIFT20(x)      ((x) << 20)
315 #define SHIFT19(x)      ((x) << 19)
316 #define SHIFT18(x)      ((x) << 18)
317 #define SHIFT17(x)      ((x) << 17)
318 #define SHIFT16(x)      ((x) << 16)
319 #define SHIFT15(x)      ((x) << 15)
320 #define SHIFT14(x)      ((x) << 14)
321 #define SHIFT13(x)      ((x) << 13)
322 #define SHIFT12(x)      ((x) << 12)
323 #define SHIFT11(x)      ((x) << 11)
324 #define SHIFT10(x)      ((x) << 10)
325 #define SHIFT9(x)       ((x) << 9)
326 #define SHIFT8(x)       ((x) << 8)
327 #define SHIFT7(x)       ((x) << 7)
328 #define SHIFT6(x)       ((x) << 6)
329 #define SHIFT5(x)       ((x) << 5)
330 #define SHIFT4(x)       ((x) << 4)
331 #define SHIFT3(x)       ((x) << 3)
332 #define SHIFT2(x)       ((x) << 2)
333 #define SHIFT1(x)       ((x) << 1)
334 #define SHIFT0(x)       ((x) << 0)
335
336 /*
337  * Configuration Space header
338  * Since this module is used for different OS', those may be
339  * duplicate on some of them (e.g. Linux). But to keep the
340  * common source, we have to live with this...
341  */
342 #define PCI_VENDOR_ID   0x00    /* 16 bit       Vendor ID */
343 #define PCI_DEVICE_ID   0x02    /* 16 bit       Device ID */
344 #define PCI_COMMAND             0x04    /* 16 bit       Command */
345 #define PCI_STATUS              0x06    /* 16 bit       Status */
346 #define PCI_REV_ID              0x08    /*  8 bit       Revision ID */
347 #define PCI_CLASS_CODE  0x09    /* 24 bit       Class Code */
348 #define PCI_CACHE_LSZ   0x0c    /*  8 bit       Cache Line Size */
349 #define PCI_LAT_TIM             0x0d    /*  8 bit       Latency Timer */
350 #define PCI_HEADER_T    0x0e    /*  8 bit       Header Type */
351 #define PCI_BIST                0x0f    /*  8 bit       Built-in selftest */
352 #define PCI_BASE_1ST    0x10    /* 32 bit       1st Base address */
353 #define PCI_BASE_2ND    0x14    /* 32 bit       2nd Base address */
354         /* Byte 0x18..0x2b:     reserved */
355 #define PCI_SUB_VID             0x2c    /* 16 bit       Subsystem Vendor ID */
356 #define PCI_SUB_ID              0x2e    /* 16 bit       Subsystem ID */
357 #define PCI_BASE_ROM    0x30    /* 32 bit       Expansion ROM Base Address */
358 #define PCI_CAP_PTR             0x34    /*  8 bit       Capabilities Ptr */
359         /* Byte 0x35..0x3b:     reserved */
360 #define PCI_IRQ_LINE    0x3c    /*  8 bit       Interrupt Line */
361 #define PCI_IRQ_PIN             0x3d    /*  8 bit       Interrupt Pin */
362 #define PCI_MIN_GNT             0x3e    /*  8 bit       Min_Gnt */
363 #define PCI_MAX_LAT             0x3f    /*  8 bit       Max_Lat */
364         /* Device Dependent Region */
365 #define PCI_OUR_REG_1   0x40    /* 32 bit       Our Register 1 */
366 #define PCI_OUR_REG_2   0x44    /* 32 bit       Our Register 2 */
367         /* Power Management Region */
368 #define PCI_PM_CAP_ID   0x48    /*  8 bit       Power Management Cap. ID */
369 #define PCI_PM_NITEM    0x49    /*  8 bit       Next Item Ptr */
370 #define PCI_PM_CAP_REG  0x4a    /* 16 bit       Power Management Capabilities */
371 #define PCI_PM_CTL_STS  0x4c    /* 16 bit       Power Manag. Control/Status */
372         /* Byte 0x4e:   reserved */
373 #define PCI_PM_DAT_REG  0x4f    /*  8 bit       Power Manag. Data Register */
374         /* VPD Region */
375 #define PCI_VPD_CAP_ID  0x50    /*  8 bit       VPD Cap. ID */
376 #define PCI_VPD_NITEM   0x51    /*  8 bit       Next Item Ptr */
377 #define PCI_VPD_ADR_REG 0x52    /* 16 bit       VPD Address Register */
378 #define PCI_VPD_DAT_REG 0x54    /* 32 bit       VPD Data Register */
379         /* Byte 0x58..0x59:     reserved */
380 #define PCI_SER_LD_CTRL 0x5a    /* 16 bit       SEEPROM Loader Ctrl (YUKON only) */
381         /* Byte 0x5c..0xff:     reserved */
382
383 /*
384  * I2C Address (PCI Config)
385  *
386  * Note: The temperature and voltage sensors are relocated on a different
387  *       I2C bus.
388  */
389 #define I2C_ADDR_VPD    0xa0    /* I2C address for the VPD EEPROM */
390
391 /*
392  * Define Bits and Values of the registers
393  */
394 /*      PCI_COMMAND     16 bit  Command */
395                                                                 /* Bit 15..11:  reserved */
396 #define PCI_INT_DIS             BIT_10S         /* Interrupt INTx# disable (PCI 2.3) */
397 #define PCI_FBTEN               BIT_9S          /* Fast Back-To-Back enable */
398 #define PCI_SERREN              BIT_8S          /* SERR enable */
399 #define PCI_ADSTEP              BIT_7S          /* Address Stepping */
400 #define PCI_PERREN              BIT_6S          /* Parity Report Response enable */
401 #define PCI_VGA_SNOOP   BIT_5S          /* VGA palette snoop */
402 #define PCI_MWIEN               BIT_4S          /* Memory write an inv cycl ena */
403 #define PCI_SCYCEN              BIT_3S          /* Special Cycle enable */
404 #define PCI_BMEN                BIT_2S          /* Bus Master enable */
405 #define PCI_MEMEN               BIT_1S          /* Memory Space Access enable */
406 #define PCI_IOEN                BIT_0S          /* I/O Space Access enable */
407
408 #define PCI_COMMAND_VAL (PCI_FBTEN | PCI_SERREN | PCI_PERREN | PCI_MWIEN |\
409                                                  PCI_BMEN | PCI_MEMEN | PCI_IOEN)
410
411 /*      PCI_STATUS      16 bit  Status */
412 #define PCI_PERR                BIT_15S         /* Parity Error */
413 #define PCI_SERR                BIT_14S         /* Signaled SERR */
414 #define PCI_RMABORT             BIT_13S         /* Received Master Abort */
415 #define PCI_RTABORT             BIT_12S         /* Received Target Abort */
416                                                                 /* Bit 11:      reserved */
417 #define PCI_DEVSEL              (3<<9)          /* Bit 10.. 9:  DEVSEL Timing */
418 #define PCI_DEV_FAST    (0<<9)          /*              fast */
419 #define PCI_DEV_MEDIUM  (1<<9)          /*              medium */
420 #define PCI_DEV_SLOW    (2<<9)          /*              slow */
421 #define PCI_DATAPERR    BIT_8S          /* DATA Parity error detected */
422 #define PCI_FB2BCAP             BIT_7S          /* Fast Back-to-Back Capability */
423 #define PCI_UDF                 BIT_6S          /* User Defined Features */
424 #define PCI_66MHZCAP    BIT_5S          /* 66 MHz PCI bus clock capable */
425 #define PCI_NEWCAP              BIT_4S          /* New cap. list implemented */
426 #define PCI_INT_STAT    BIT_3S          /* Interrupt INTx# Status (PCI 2.3) */
427                                                                 /* Bit  2.. 0:  reserved */
428
429 #define PCI_ERRBITS     (PCI_PERR | PCI_SERR | PCI_RMABORT | PCI_RTABORT |\
430                         PCI_DATAPERR)
431
432 /*      PCI_CLASS_CODE  24 bit  Class Code */
433 /*      Byte 2:         Base Class              (02) */
434 /*      Byte 1:         SubClass                (00) */
435 /*      Byte 0:         Programming Interface   (00) */
436
437 /*      PCI_CACHE_LSZ   8 bit   Cache Line Size */
438 /*      Possible values: 0,2,4,8,16,32,64,128   */
439
440 /*      PCI_HEADER_T    8 bit   Header Type */
441 #define PCI_HD_MF_DEV   BIT_7S  /* 0= single, 1= multi-func dev */
442 #define PCI_HD_TYPE             0x7f    /* Bit 6..0:    Header Layout 0= normal */
443
444 /*      PCI_BIST        8 bit   Built-in selftest */
445 /*      Built-in Self test not supported (optional) */
446
447 /*      PCI_BASE_1ST    32 bit  1st Base address */
448 #define PCI_MEMSIZE             0x4000L         /* use 16 kB Memory Base */
449 #define PCI_MEMBASE_MSK 0xffffc000L     /* Bit 31..14:  Memory Base Address */
450 #define PCI_MEMSIZE_MSK 0x00003ff0L     /* Bit 13.. 4:  Memory Size Req. */
451 #define PCI_PREFEN              BIT_3           /* Prefetchable */
452 #define PCI_MEM_TYP             (3L<<2)         /* Bit  2.. 1:  Memory Type */
453 #define PCI_MEM32BIT    (0L<<1)         /* Base addr anywhere in 32 Bit range */
454 #define PCI_MEM1M               (1L<<1)         /* Base addr below 1 MegaByte */
455 #define PCI_MEM64BIT    (2L<<1)         /* Base addr anywhere in 64 Bit range */
456 #define PCI_MEMSPACE    BIT_0           /* Memory Space Indicator */
457
458 /*      PCI_BASE_2ND    32 bit  2nd Base address */
459 #define PCI_IOBASE              0xffffff00L     /* Bit 31.. 8:  I/O Base address */
460 #define PCI_IOSIZE              0x000000fcL     /* Bit  7.. 2:  I/O Size Requirements */
461                                                                         /* Bit  1:      reserved */
462 #define PCI_IOSPACE             BIT_0           /* I/O Space Indicator */
463
464 /*      PCI_BASE_ROM    32 bit  Expansion ROM Base Address */
465 #define PCI_ROMBASE_MSK 0xfffe0000L     /* Bit 31..17:  ROM Base address */
466 #define PCI_ROMBASE_SIZ (0x1cL<<14)     /* Bit 16..14:  Treat as Base or Size */
467 #define PCI_ROMSIZE             (0x38L<<11)     /* Bit 13..11:  ROM Size Requirements */
468                                                                         /* Bit 10.. 1:  reserved */
469 #define PCI_ROMEN               BIT_0           /* Address Decode enable */
470
471 /* Device Dependent Region */
472 /*      PCI_OUR_REG_1           32 bit  Our Register 1 */
473                                                                         /* Bit 31..29:  reserved */
474 #define PCI_PHY_COMA    BIT_28          /* Set PHY to Coma Mode (YUKON only) */
475 #define PCI_TEST_CAL    BIT_27          /* Test PCI buffer calib. (YUKON only) */
476 #define PCI_EN_CAL              BIT_26          /* Enable PCI buffer calib. (YUKON only) */
477 #define PCI_VIO                 BIT_25          /* PCI I/O Voltage, 0 = 3.3V, 1 = 5V */
478 #define PCI_DIS_BOOT    BIT_24          /* Disable BOOT via ROM */
479 #define PCI_EN_IO               BIT_23          /* Mapping to I/O space */
480 #define PCI_EN_FPROM    BIT_22          /* Enable FLASH mapping to memory */
481                                                                         /*              1 = Map Flash to memory */
482                                                                         /*              0 = Disable addr. dec */
483 #define PCI_PAGESIZE    (3L<<20)        /* Bit 21..20:  FLASH Page Size */
484 #define PCI_PAGE_16             (0L<<20)        /*              16 k pages      */
485 #define PCI_PAGE_32K    (1L<<20)        /*              32 k pages      */
486 #define PCI_PAGE_64K    (2L<<20)        /*              64 k pages      */
487 #define PCI_PAGE_128K   (3L<<20)        /*              128 k pages     */
488                                                                         /* Bit 19:      reserved        */
489 #define PCI_PAGEREG             (7L<<16)        /* Bit 18..16:  Page Register   */
490 #define PCI_NOTAR               BIT_15          /* No turnaround cycle */
491 #define PCI_FORCE_BE    BIT_14          /* Assert all BEs on MR */
492 #define PCI_DIS_MRL             BIT_13          /* Disable Mem Read Line */
493 #define PCI_DIS_MRM             BIT_12          /* Disable Mem Read Multiple */
494 #define PCI_DIS_MWI             BIT_11          /* Disable Mem Write & Invalidate */
495 #define PCI_DISC_CLS    BIT_10          /* Disc: cacheLsz bound */
496 #define PCI_BURST_DIS   BIT_9           /* Burst Disable */
497 #define PCI_DIS_PCI_CLK BIT_8           /* Disable PCI clock driving */
498 #define PCI_SKEW_DAS    (0xfL<<4)       /* Bit  7.. 4:  Skew Ctrl, DAS Ext */
499 #define PCI_SKEW_BASE   0xfL            /* Bit  3.. 0:  Skew Ctrl, Base */
500
501
502 /*      PCI_OUR_REG_2           32 bit  Our Register 2 */
503 #define PCI_VPD_WR_THR  (0xffL<<24)     /* Bit 31..24:  VPD Write Threshold */
504 #define PCI_DEV_SEL             (0x7fL<<17)     /* Bit 23..17:  EEPROM Device Select */
505 #define PCI_VPD_ROM_SZ  (7L<<14)        /* Bit 16..14:  VPD ROM Size    */
506                                                                         /* Bit 13..12:  reserved        */
507 #define PCI_PATCH_DIR   (0xfL<<8)       /* Bit 11.. 8:  Ext Patches dir 3..0 */
508 #define PCI_PATCH_DIR_3 BIT_11
509 #define PCI_PATCH_DIR_2 BIT_10
510 #define PCI_PATCH_DIR_1 BIT_9
511 #define PCI_PATCH_DIR_0 BIT_8
512 #define PCI_EXT_PATCHS  (0xfL<<4)       /* Bit  7.. 4:  Extended Patches 3..0 */
513 #define PCI_EXT_PATCH_3 BIT_7
514 #define PCI_EXT_PATCH_2 BIT_6
515 #define PCI_EXT_PATCH_1 BIT_5
516 #define PCI_EXT_PATCH_0 BIT_4
517 #define PCI_EN_DUMMY_RD BIT_3           /* Enable Dummy Read */
518 #define PCI_REV_DESC    BIT_2           /* Reverse Desc. Bytes */
519                                                                         /* Bit  1:      reserved */
520 #define PCI_USEDATA64   BIT_0           /* Use 64Bit Data bus ext */
521
522
523 /* Power Management Region */
524 /*      PCI_PM_CAP_REG          16 bit  Power Management Capabilities */
525 #define PCI_PME_SUP_MSK (0x1f<<11)      /* Bit 15..11:  PM Event Support Mask */
526 #define PCI_PME_D3C_SUP BIT_15S         /* PME from D3cold Support (if Vaux) */
527 #define PCI_PME_D3H_SUP BIT_14S         /* PME from D3hot Support */
528 #define PCI_PME_D2_SUP  BIT_13S         /* PME from D2 Support */
529 #define PCI_PME_D1_SUP  BIT_12S         /* PME from D1 Support */
530 #define PCI_PME_D0_SUP  BIT_11S         /* PME from D0 Support */
531 #define PCI_PM_D2_SUP   BIT_10S         /* D2 Support in 33 MHz mode */
532 #define PCI_PM_D1_SUP   BIT_9S          /* D1 Support */
533                                                                         /* Bit  8.. 6:  reserved */
534 #define PCI_PM_DSI              BIT_5S          /* Device Specific Initialization */
535 #define PCI_PM_APS              BIT_4S          /* Auxialiary Power Source */
536 #define PCI_PME_CLOCK   BIT_3S          /* PM Event Clock */
537 #define PCI_PM_VER_MSK          7               /* Bit  2.. 0:  PM PCI Spec. version */
538
539 /*      PCI_PM_CTL_STS          16 bit  Power Management Control/Status */
540 #define PCI_PME_STATUS  BIT_15S         /* PME Status (YUKON only) */
541 #define PCI_PM_DAT_SCL  (3<<13)         /* Bit 14..13:  Data Reg. scaling factor */
542 #define PCI_PM_DAT_SEL  (0xf<<9)        /* Bit 12.. 9:  PM data selector field */
543 #define PCI_PME_EN              BIT_8S          /* Enable PME# generation (YUKON only) */
544                                                                         /* Bit  7.. 2:  reserved */
545 #define PCI_PM_STATE_MSK        3               /* Bit  1.. 0:  Power Management State */
546
547 #define PCI_PM_STATE_D0         0               /* D0:  Operational (default) */
548 #define PCI_PM_STATE_D1         1               /* D1:  (YUKON only) */
549 #define PCI_PM_STATE_D2         2               /* D2:  (YUKON only) */
550 #define PCI_PM_STATE_D3         3               /* D3:  HOT, Power Down and Reset */
551
552 /* VPD Region */
553 /*      PCI_VPD_ADR_REG         16 bit  VPD Address Register */
554 #define PCI_VPD_FLAG    BIT_15S         /* starts VPD rd/wr cycle */
555 #define PCI_VPD_ADR_MSK 0x7fffL         /* Bit 14.. 0:  VPD address mask */
556
557 /*      Control Register File (Address Map) */
558
559 /*
560  *      Bank 0
561  */
562 #define B0_RAP                  0x0000  /*  8 bit       Register Address Port */
563         /* 0x0001 - 0x0003:     reserved */
564 #define B0_CTST                 0x0004  /* 16 bit       Control/Status register */
565 #define B0_LED                  0x0006  /*  8 Bit       LED register */
566 #define B0_POWER_CTRL   0x0007  /*  8 Bit       Power Control reg (YUKON only) */
567 #define B0_ISRC                 0x0008  /* 32 bit       Interrupt Source Register */
568 #define B0_IMSK                 0x000c  /* 32 bit       Interrupt Mask Register */
569 #define B0_HWE_ISRC             0x0010  /* 32 bit       HW Error Interrupt Src Reg */
570 #define B0_HWE_IMSK             0x0014  /* 32 bit       HW Error Interrupt Mask Reg */
571 #define B0_SP_ISRC              0x0018  /* 32 bit       Special Interrupt Source Reg */
572         /* 0x001c:              reserved */
573
574 /* B0 XMAC 1 registers (GENESIS only) */
575 #define B0_XM1_IMSK             0x0020  /* 16 bit r/w   XMAC 1 Interrupt Mask Register*/
576         /* 0x0022 - 0x0027:     reserved */
577 #define B0_XM1_ISRC             0x0028  /* 16 bit ro    XMAC 1 Interrupt Status Reg */
578         /* 0x002a - 0x002f:     reserved */
579 #define B0_XM1_PHY_ADDR 0x0030  /* 16 bit r/w   XMAC 1 PHY Address Register */
580         /* 0x0032 - 0x0033:     reserved */
581 #define B0_XM1_PHY_DATA 0x0034  /* 16 bit r/w   XMAC 1 PHY Data Register */
582         /* 0x0036 - 0x003f:     reserved */
583
584 /* B0 XMAC 2 registers (GENESIS only) */
585 #define B0_XM2_IMSK             0x0040  /* 16 bit r/w   XMAC 2 Interrupt Mask Register*/
586         /* 0x0042 - 0x0047:     reserved */
587 #define B0_XM2_ISRC             0x0048  /* 16 bit ro    XMAC 2 Interrupt Status Reg */
588         /* 0x004a - 0x004f:     reserved */
589 #define B0_XM2_PHY_ADDR 0x0050  /* 16 bit r/w   XMAC 2 PHY Address Register */
590         /* 0x0052 - 0x0053:     reserved */
591 #define B0_XM2_PHY_DATA 0x0054  /* 16 bit r/w   XMAC 2 PHY Data Register */
592         /* 0x0056 - 0x005f:     reserved */
593
594 /* BMU Control Status Registers */
595 #define B0_R1_CSR               0x0060  /* 32 bit       BMU Ctrl/Stat Rx Queue 1 */
596 #define B0_R2_CSR               0x0064  /* 32 bit       BMU Ctrl/Stat Rx Queue 2 */
597 #define B0_XS1_CSR              0x0068  /* 32 bit       BMU Ctrl/Stat Sync Tx Queue 1 */
598 #define B0_XA1_CSR              0x006c  /* 32 bit       BMU Ctrl/Stat Async Tx Queue 1*/
599 #define B0_XS2_CSR              0x0070  /* 32 bit       BMU Ctrl/Stat Sync Tx Queue 2 */
600 #define B0_XA2_CSR              0x0074  /* 32 bit       BMU Ctrl/Stat Async Tx Queue 2*/
601         /* 0x0078 - 0x007f:     reserved */
602
603 /*
604  *      Bank 1
605  *      - completely empty (this is the RAP Block window)
606  *      Note: if RAP = 1 this page is reserved
607  */
608
609 /*
610  *      Bank 2
611  */
612 /* NA reg = 48 bit Network Address Register, 3x16 or 8x8 bit readable */
613 #define B2_MAC_1                0x0100  /* NA reg        MAC Address 1 */
614         /* 0x0106 - 0x0107:     reserved */
615 #define B2_MAC_2                0x0108  /* NA reg        MAC Address 2 */
616         /* 0x010e - 0x010f:     reserved */
617 #define B2_MAC_3                0x0110  /* NA reg        MAC Address 3 */
618         /* 0x0116 - 0x0117:     reserved */
619 #define B2_CONN_TYP             0x0118  /*  8 bit       Connector type */
620 #define B2_PMD_TYP              0x0119  /*  8 bit       PMD type */
621 #define B2_MAC_CFG              0x011a  /*  8 bit       MAC Configuration / Chip Revision */
622 #define B2_CHIP_ID              0x011b  /*  8 bit       Chip Identification Number */
623         /* Eprom registers are currently of no use */
624 #define B2_E_0                  0x011c  /*  8 bit       EPROM Byte 0 (ext. SRAM size */
625 #define B2_E_1                  0x011d  /*  8 bit       EPROM Byte 1 (PHY type) */
626 #define B2_E_2                  0x011e  /*  8 bit       EPROM Byte 2 */
627 #define B2_E_3                  0x011f  /*  8 bit       EPROM Byte 3 */
628 #define B2_FAR                  0x0120  /* 32 bit       Flash-Prom Addr Reg/Cnt */
629 #define B2_FDP                  0x0124  /*  8 bit       Flash-Prom Data Port */
630         /* 0x0125 - 0x0127:     reserved */
631 #define B2_LD_CRTL              0x0128  /*  8 bit       EPROM loader control register */
632 #define B2_LD_TEST              0x0129  /*  8 bit       EPROM loader test register */
633         /* 0x012a - 0x012f:     reserved */
634 #define B2_TI_INI               0x0130  /* 32 bit       Timer Init Value */
635 #define B2_TI_VAL               0x0134  /* 32 bit       Timer Value */
636 #define B2_TI_CRTL              0x0138  /*  8 bit       Timer Control */
637 #define B2_TI_TEST              0x0139  /*  8 Bit       Timer Test */
638         /* 0x013a - 0x013f:     reserved */
639 #define B2_IRQM_INI             0x0140  /* 32 bit       IRQ Moderation Timer Init Reg.*/
640 #define B2_IRQM_VAL             0x0144  /* 32 bit       IRQ Moderation Timer Value */
641 #define B2_IRQM_CTRL    0x0148  /*  8 bit       IRQ Moderation Timer Control */
642 #define B2_IRQM_TEST    0x0149  /*  8 bit       IRQ Moderation Timer Test */
643 #define B2_IRQM_MSK     0x014c  /* 32 bit       IRQ Moderation Mask */
644 #define B2_IRQM_HWE_MSK 0x0150  /* 32 bit       IRQ Moderation HW Error Mask */
645         /* 0x0154 - 0x0157:     reserved */
646 #define B2_TST_CTRL1    0x0158  /*  8 bit       Test Control Register 1 */
647 #define B2_TST_CTRL2    0x0159  /*  8 bit       Test Control Register 2 */
648         /* 0x015a - 0x015b:     reserved */
649 #define B2_GP_IO                0x015c  /* 32 bit       General Purpose I/O Register */
650 #define B2_I2C_CTRL             0x0160  /* 32 bit       I2C HW Control Register */
651 #define B2_I2C_DATA             0x0164  /* 32 bit       I2C HW Data Register */
652 #define B2_I2C_IRQ              0x0168  /* 32 bit       I2C HW IRQ Register */
653 #define B2_I2C_SW               0x016c  /* 32 bit       I2C SW Port Register */
654
655 /* Blink Source Counter (GENESIS only) */
656 #define B2_BSC_INI              0x0170  /* 32 bit       Blink Source Counter Init Val */
657 #define B2_BSC_VAL              0x0174  /* 32 bit       Blink Source Counter Value */
658 #define B2_BSC_CTRL             0x0178  /*  8 bit       Blink Source Counter Control */
659 #define B2_BSC_STAT             0x0179  /*  8 bit       Blink Source Counter Status */
660 #define B2_BSC_TST              0x017a  /* 16 bit       Blink Source Counter Test Reg */
661         /* 0x017c - 0x017f:     reserved */
662
663 /*
664  *      Bank 3
665  */
666 /* RAM Random Registers */
667 #define B3_RAM_ADDR             0x0180  /* 32 bit       RAM Address, to read or write */
668 #define B3_RAM_DATA_LO  0x0184  /* 32 bit       RAM Data Word (low dWord) */
669 #define B3_RAM_DATA_HI  0x0188  /* 32 bit       RAM Data Word (high dWord) */
670         /* 0x018c - 0x018f:     reserved */
671
672 /* RAM Interface Registers */
673 /*
674  * The HW-Spec. calls this registers Timeout Value 0..11. But this names are
675  * not usable in SW. Please notice these are NOT real timeouts, these are
676  * the number of qWords transferred continuously.
677  */
678 #define B3_RI_WTO_R1    0x0190  /*  8 bit       WR Timeout Queue R1             (TO0) */
679 #define B3_RI_WTO_XA1   0x0191  /*  8 bit       WR Timeout Queue XA1    (TO1) */
680 #define B3_RI_WTO_XS1   0x0192  /*  8 bit       WR Timeout Queue XS1    (TO2) */
681 #define B3_RI_RTO_R1    0x0193  /*  8 bit       RD Timeout Queue R1             (TO3) */
682 #define B3_RI_RTO_XA1   0x0194  /*  8 bit       RD Timeout Queue XA1    (TO4) */
683 #define B3_RI_RTO_XS1   0x0195  /*  8 bit       RD Timeout Queue XS1    (TO5) */
684 #define B3_RI_WTO_R2    0x0196  /*  8 bit       WR Timeout Queue R2             (TO6) */
685 #define B3_RI_WTO_XA2   0x0197  /*  8 bit       WR Timeout Queue XA2    (TO7) */
686 #define B3_RI_WTO_XS2   0x0198  /*  8 bit       WR Timeout Queue XS2    (TO8) */
687 #define B3_RI_RTO_R2    0x0199  /*  8 bit       RD Timeout Queue R2             (TO9) */
688 #define B3_RI_RTO_XA2   0x019a  /*  8 bit       RD Timeout Queue XA2    (TO10)*/
689 #define B3_RI_RTO_XS2   0x019b  /*  8 bit       RD Timeout Queue XS2    (TO11)*/
690 #define B3_RI_TO_VAL    0x019c  /*  8 bit       Current Timeout Count Val */
691         /* 0x019d - 0x019f:     reserved */
692 #define B3_RI_CTRL              0x01a0  /* 16 bit       RAM Interface Control Register */
693 #define B3_RI_TEST              0x01a2  /*  8 bit       RAM Interface Test Register */
694         /* 0x01a3 - 0x01af:     reserved */
695
696 /* MAC Arbiter Registers (GENESIS only) */
697 /* these are the no. of qWord transferred continuously and NOT real timeouts */
698 #define B3_MA_TOINI_RX1 0x01b0  /*  8 bit       Timeout Init Val Rx Path MAC 1 */
699 #define B3_MA_TOINI_RX2 0x01b1  /*  8 bit       Timeout Init Val Rx Path MAC 2 */
700 #define B3_MA_TOINI_TX1 0x01b2  /*  8 bit       Timeout Init Val Tx Path MAC 1 */
701 #define B3_MA_TOINI_TX2 0x01b3  /*  8 bit       Timeout Init Val Tx Path MAC 2 */
702 #define B3_MA_TOVAL_RX1 0x01b4  /*  8 bit       Timeout Value Rx Path MAC 1 */
703 #define B3_MA_TOVAL_RX2 0x01b5  /*  8 bit       Timeout Value Rx Path MAC 1 */
704 #define B3_MA_TOVAL_TX1 0x01b6  /*  8 bit       Timeout Value Tx Path MAC 2 */
705 #define B3_MA_TOVAL_TX2 0x01b7  /*  8 bit       Timeout Value Tx Path MAC 2 */
706 #define B3_MA_TO_CTRL   0x01b8  /* 16 bit       MAC Arbiter Timeout Ctrl Reg */
707 #define B3_MA_TO_TEST   0x01ba  /* 16 bit       MAC Arbiter Timeout Test Reg */
708         /* 0x01bc - 0x01bf:     reserved */
709 #define B3_MA_RCINI_RX1 0x01c0  /*  8 bit       Recovery Init Val Rx Path MAC 1 */
710 #define B3_MA_RCINI_RX2 0x01c1  /*  8 bit       Recovery Init Val Rx Path MAC 2 */
711 #define B3_MA_RCINI_TX1 0x01c2  /*  8 bit       Recovery Init Val Tx Path MAC 1 */
712 #define B3_MA_RCINI_TX2 0x01c3  /*  8 bit       Recovery Init Val Tx Path MAC 2 */
713 #define B3_MA_RCVAL_RX1 0x01c4  /*  8 bit       Recovery Value Rx Path MAC 1 */
714 #define B3_MA_RCVAL_RX2 0x01c5  /*  8 bit       Recovery Value Rx Path MAC 1 */
715 #define B3_MA_RCVAL_TX1 0x01c6  /*  8 bit       Recovery Value Tx Path MAC 2 */
716 #define B3_MA_RCVAL_TX2 0x01c7  /*  8 bit       Recovery Value Tx Path MAC 2 */
717 #define B3_MA_RC_CTRL   0x01c8  /* 16 bit       MAC Arbiter Recovery Ctrl Reg */
718 #define B3_MA_RC_TEST   0x01ca  /* 16 bit       MAC Arbiter Recovery Test Reg */
719         /* 0x01cc - 0x01cf:     reserved */
720
721 /* Packet Arbiter Registers (GENESIS only) */
722 /* these are real timeouts */
723 #define B3_PA_TOINI_RX1 0x01d0  /* 16 bit       Timeout Init Val Rx Path MAC 1 */
724         /* 0x01d2 - 0x01d3:     reserved */
725 #define B3_PA_TOINI_RX2 0x01d4  /* 16 bit       Timeout Init Val Rx Path MAC 2 */
726         /* 0x01d6 - 0x01d7:     reserved */
727 #define B3_PA_TOINI_TX1 0x01d8  /* 16 bit       Timeout Init Val Tx Path MAC 1 */
728         /* 0x01da - 0x01db:     reserved */
729 #define B3_PA_TOINI_TX2 0x01dc  /* 16 bit       Timeout Init Val Tx Path MAC 2 */
730         /* 0x01de - 0x01df:     reserved */
731 #define B3_PA_TOVAL_RX1 0x01e0  /* 16 bit       Timeout Val Rx Path MAC 1 */
732         /* 0x01e2 - 0x01e3:     reserved */
733 #define B3_PA_TOVAL_RX2 0x01e4  /* 16 bit       Timeout Val Rx Path MAC 2 */
734         /* 0x01e6 - 0x01e7:     reserved */
735 #define B3_PA_TOVAL_TX1 0x01e8  /* 16 bit       Timeout Val Tx Path MAC 1 */
736         /* 0x01ea - 0x01eb:     reserved */
737 #define B3_PA_TOVAL_TX2 0x01ec  /* 16 bit       Timeout Val Tx Path MAC 2 */
738         /* 0x01ee - 0x01ef:     reserved */
739 #define B3_PA_CTRL      0x01f0  /* 16 bit       Packet Arbiter Ctrl Register */
740 #define B3_PA_TEST      0x01f2  /* 16 bit       Packet Arbiter Test Register */
741         /* 0x01f4 - 0x01ff:     reserved */
742
743 /*
744  *      Bank 4 - 5
745  */
746 /* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
747 #define TXA_ITI_INI             0x0200  /* 32 bit       Tx Arb Interval Timer Init Val*/
748 #define TXA_ITI_VAL             0x0204  /* 32 bit       Tx Arb Interval Timer Value */
749 #define TXA_LIM_INI             0x0208  /* 32 bit       Tx Arb Limit Counter Init Val */
750 #define TXA_LIM_VAL             0x020c  /* 32 bit       Tx Arb Limit Counter Value */
751 #define TXA_CTRL                0x0210  /*  8 bit       Tx Arbiter Control Register */
752 #define TXA_TEST                0x0211  /*  8 bit       Tx Arbiter Test Register */
753 #define TXA_STAT                0x0212  /*  8 bit       Tx Arbiter Status Register */
754         /* 0x0213 - 0x027f:     reserved */
755         /* 0x0280 - 0x0292:     MAC 2 */
756         /* 0x0213 - 0x027f:     reserved */
757
758 /*
759  *      Bank 6
760  */
761 /* External registers (GENESIS only) */
762 #define B6_EXT_REG              0x0300
763
764 /*
765  *      Bank 7
766  */
767 /* This is a copy of the Configuration register file (lower half) */
768 #define B7_CFG_SPC              0x0380
769
770 /*
771  *      Bank 8 - 15
772  */
773 /* Receive and Transmit Queue Registers, use Q_ADDR() to access */
774 #define B8_Q_REGS               0x0400
775
776 /* Queue Register Offsets, use Q_ADDR() to access */
777 #define Q_D             0x00    /* 8*32 bit     Current Descriptor */
778 #define Q_DA_L  0x20    /* 32 bit       Current Descriptor Address Low dWord */
779 #define Q_DA_H  0x24    /* 32 bit       Current Descriptor Address High dWord */
780 #define Q_AC_L  0x28    /* 32 bit       Current Address Counter Low dWord */
781 #define Q_AC_H  0x2c    /* 32 bit       Current Address Counter High dWord */
782 #define Q_BC    0x30    /* 32 bit       Current Byte Counter */
783 #define Q_CSR   0x34    /* 32 bit       BMU Control/Status Register */
784 #define Q_F             0x38    /* 32 bit       Flag Register */
785 #define Q_T1    0x3c    /* 32 bit       Test Register 1 */
786 #define Q_T1_TR 0x3c    /*  8 bit       Test Register 1 Transfer SM */
787 #define Q_T1_WR 0x3d    /*  8 bit       Test Register 1 Write Descriptor SM */
788 #define Q_T1_RD 0x3e    /*  8 bit       Test Register 1 Read Descriptor SM */
789 #define Q_T1_SV 0x3f    /*  8 bit       Test Register 1 Supervisor SM */
790 #define Q_T2    0x40    /* 32 bit       Test Register 2 */
791 #define Q_T3    0x44    /* 32 bit       Test Register 3 */
792         /* 0x48 - 0x7f: reserved */
793
794 /*
795  *      Bank 16 - 23
796  */
797 /* RAM Buffer Registers */
798 #define B16_RAM_REGS    0x0800
799
800 /* RAM Buffer Register Offsets, use RB_ADDR() to access */
801 #define RB_START                0x00    /* 32 bit       RAM Buffer Start Address */
802 #define RB_END                  0x04    /* 32 bit       RAM Buffer End Address */
803 #define RB_WP                   0x08    /* 32 bit       RAM Buffer Write Pointer */
804 #define RB_RP                   0x0c    /* 32 bit       RAM Buffer Read Pointer */
805 #define RB_RX_UTPP              0x10    /* 32 bit       Rx Upper Threshold, Pause Pack */
806 #define RB_RX_LTPP              0x14    /* 32 bit       Rx Lower Threshold, Pause Pack */
807 #define RB_RX_UTHP              0x18    /* 32 bit       Rx Upper Threshold, High Prio */
808 #define RB_RX_LTHP              0x1c    /* 32 bit       Rx Lower Threshold, High Prio */
809         /* 0x10 - 0x1f: reserved at Tx RAM Buffer Registers */
810 #define RB_PC                   0x20    /* 32 bit       RAM Buffer Packet Counter */
811 #define RB_LEV                  0x24    /* 32 bit       RAM Buffer Level Register */
812 #define RB_CTRL                 0x28    /*  8 bit       RAM Buffer Control Register */
813 #define RB_TST1                 0x29    /*  8 bit       RAM Buffer Test Register 1 */
814 #define RB_TST2                 0x2A    /*  8 bit       RAM Buffer Test Register 2 */
815         /* 0x2c - 0x7f: reserved */
816
817 /*
818  *      Bank 24
819  */
820 /*
821  * Receive MAC FIFO, Receive LED, and Link_Sync regs (GENESIS only)
822  * use MR_ADDR() to access
823  */
824 #define RX_MFF_EA               0x0c00  /* 32 bit       Receive MAC FIFO End Address */
825 #define RX_MFF_WP               0x0c04  /* 32 bit       Receive MAC FIFO Write Pointer */
826         /* 0x0c08 - 0x0c0b:     reserved */
827 #define RX_MFF_RP               0x0c0c  /* 32 bit       Receive MAC FIFO Read Pointer */
828 #define RX_MFF_PC               0x0c10  /* 32 bit       Receive MAC FIFO Packet Cnt */
829 #define RX_MFF_LEV              0x0c14  /* 32 bit       Receive MAC FIFO Level */
830 #define RX_MFF_CTRL1    0x0c18  /* 16 bit       Receive MAC FIFO Control Reg 1*/
831 #define RX_MFF_STAT_TO  0x0c1a  /*  8 bit       Receive MAC Status Timeout */
832 #define RX_MFF_TIST_TO  0x0c1b  /*  8 bit       Receive MAC Time Stamp Timeout */
833 #define RX_MFF_CTRL2    0x0c1c  /*  8 bit       Receive MAC FIFO Control Reg 2*/
834 #define RX_MFF_TST1             0x0c1d  /*  8 bit       Receive MAC FIFO Test Reg 1 */
835 #define RX_MFF_TST2             0x0c1e  /*  8 bit       Receive MAC FIFO Test Reg 2 */
836         /* 0x0c1f:      reserved */
837 #define RX_LED_INI              0x0c20  /* 32 bit       Receive LED Cnt Init Value */
838 #define RX_LED_VAL              0x0c24  /* 32 bit       Receive LED Cnt Current Value */
839 #define RX_LED_CTRL             0x0c28  /*  8 bit       Receive LED Cnt Control Reg */
840 #define RX_LED_TST              0x0c29  /*  8 bit       Receive LED Cnt Test Register */
841         /* 0x0c2a - 0x0c2f:     reserved */
842 #define LNK_SYNC_INI    0x0c30  /* 32 bit       Link Sync Cnt Init Value */
843 #define LNK_SYNC_VAL    0x0c34  /* 32 bit       Link Sync Cnt Current Value */
844 #define LNK_SYNC_CTRL   0x0c38  /*  8 bit       Link Sync Cnt Control Register */
845 #define LNK_SYNC_TST    0x0c39  /*  8 bit       Link Sync Cnt Test Register */
846         /* 0x0c3a - 0x0c3b:     reserved */
847 #define LNK_LED_REG             0x0c3c  /*  8 bit       Link LED Register */
848         /* 0x0c3d - 0x0c3f:     reserved */
849
850 /* Receive GMAC FIFO (YUKON only), use MR_ADDR() to access */
851 #define RX_GMF_EA               0x0c40  /* 32 bit       Rx GMAC FIFO End Address */
852 #define RX_GMF_AF_THR   0x0c44  /* 32 bit       Rx GMAC FIFO Almost Full Thresh. */
853 #define RX_GMF_CTRL_T   0x0c48  /* 32 bit       Rx GMAC FIFO Control/Test */
854 #define RX_GMF_FL_MSK   0x0c4c  /* 32 bit       Rx GMAC FIFO Flush Mask */
855 #define RX_GMF_FL_THR   0x0c50  /* 32 bit       Rx GMAC FIFO Flush Threshold */
856         /* 0x0c54 - 0x0c5f:     reserved */
857 #define RX_GMF_WP               0x0c60  /* 32 bit       Rx GMAC FIFO Write Pointer */
858         /* 0x0c64 - 0x0c67:     reserved */
859 #define RX_GMF_WLEV             0x0c68  /* 32 bit       Rx GMAC FIFO Write Level */
860         /* 0x0c6c - 0x0c6f:     reserved */
861 #define RX_GMF_RP               0x0c70  /* 32 bit       Rx GMAC FIFO Read Pointer */
862         /* 0x0c74 - 0x0c77:     reserved */
863 #define RX_GMF_RLEV             0x0c78  /* 32 bit       Rx GMAC FIFO Read Level */
864         /* 0x0c7c - 0x0c7f:     reserved */
865
866 /*
867  *      Bank 25
868  */
869         /* 0x0c80 - 0x0cbf:     MAC 2 */
870         /* 0x0cc0 - 0x0cff:     reserved */
871
872 /*
873  *      Bank 26
874  */
875 /*
876  * Transmit MAC FIFO and Transmit LED Registers (GENESIS only),
877  * use MR_ADDR() to access
878  */
879 #define TX_MFF_EA               0x0d00  /* 32 bit       Transmit MAC FIFO End Address */
880 #define TX_MFF_WP               0x0d04  /* 32 bit       Transmit MAC FIFO WR Pointer */
881 #define TX_MFF_WSP              0x0d08  /* 32 bit       Transmit MAC FIFO WR Shadow Ptr */
882 #define TX_MFF_RP               0x0d0c  /* 32 bit       Transmit MAC FIFO RD Pointer */
883 #define TX_MFF_PC               0x0d10  /* 32 bit       Transmit MAC FIFO Packet Cnt */
884 #define TX_MFF_LEV              0x0d14  /* 32 bit       Transmit MAC FIFO Level */
885 #define TX_MFF_CTRL1    0x0d18  /* 16 bit       Transmit MAC FIFO Ctrl Reg 1 */
886 #define TX_MFF_WAF              0x0d1a  /*  8 bit       Transmit MAC Wait after flush */
887         /* 0x0c1b:      reserved */
888 #define TX_MFF_CTRL2    0x0d1c  /*  8 bit       Transmit MAC FIFO Ctrl Reg 2 */
889 #define TX_MFF_TST1             0x0d1d  /*  8 bit       Transmit MAC FIFO Test Reg 1 */
890 #define TX_MFF_TST2             0x0d1e  /*  8 bit       Transmit MAC FIFO Test Reg 2 */
891         /* 0x0d1f:      reserved */
892 #define TX_LED_INI              0x0d20  /* 32 bit       Transmit LED Cnt Init Value */
893 #define TX_LED_VAL              0x0d24  /* 32 bit       Transmit LED Cnt Current Val */
894 #define TX_LED_CTRL             0x0d28  /*  8 bit       Transmit LED Cnt Control Reg */
895 #define TX_LED_TST              0x0d29  /*  8 bit       Transmit LED Cnt Test Reg */
896         /* 0x0d2a - 0x0d3f:     reserved */
897
898 /* Transmit GMAC FIFO (YUKON only), use MR_ADDR() to access */
899 #define TX_GMF_EA               0x0d40  /* 32 bit       Tx GMAC FIFO End Address */
900 #define TX_GMF_AE_THR   0x0d44  /* 32 bit       Tx GMAC FIFO Almost Empty Thresh.*/
901 #define TX_GMF_CTRL_T   0x0d48  /* 32 bit       Tx GMAC FIFO Control/Test */
902         /* 0x0d4c - 0x0d5f:     reserved */
903 #define TX_GMF_WP               0x0d60  /* 32 bit       Tx GMAC FIFO Write Pointer */
904 #define TX_GMF_WSP              0x0d64  /* 32 bit       Tx GMAC FIFO Write Shadow Ptr. */
905 #define TX_GMF_WLEV             0x0d68  /* 32 bit       Tx GMAC FIFO Write Level */
906         /* 0x0d6c - 0x0d6f:     reserved */
907 #define TX_GMF_RP               0x0d70  /* 32 bit       Tx GMAC FIFO Read Pointer */
908 #define TX_GMF_RSTP             0x0d74  /* 32 bit       Tx GMAC FIFO Restart Pointer */
909 #define TX_GMF_RLEV             0x0d78  /* 32 bit       Tx GMAC FIFO Read Level */
910         /* 0x0d7c - 0x0d7f:     reserved */
911
912 /*
913  *      Bank 27
914  */
915         /* 0x0d80 - 0x0dbf:     MAC 2 */
916         /* 0x0daa - 0x0dff:     reserved */
917
918 /*
919  *      Bank 28
920  */
921 /* Descriptor Poll Timer Registers */
922 #define B28_DPT_INI             0x0e00  /* 24 bit       Descriptor Poll Timer Init Val */
923 #define B28_DPT_VAL             0x0e04  /* 24 bit       Descriptor Poll Timer Curr Val */
924 #define B28_DPT_CTRL    0x0e08  /*  8 bit       Descriptor Poll Timer Ctrl Reg */
925         /* 0x0e09:      reserved */
926 #define B28_DPT_TST             0x0e0a  /*  8 bit       Descriptor Poll Timer Test Reg */
927         /* 0x0e0b:      reserved */
928
929 /* Time Stamp Timer Registers (YUKON only) */
930         /* 0x0e10:      reserved */
931 #define GMAC_TI_ST_VAL  0x0e14  /* 32 bit       Time Stamp Timer Curr Val */
932 #define GMAC_TI_ST_CTRL 0x0e18  /*  8 bit       Time Stamp Timer Ctrl Reg */
933         /* 0x0e19:      reserved */
934 #define GMAC_TI_ST_TST  0x0e1a  /*  8 bit       Time Stamp Timer Test Reg */
935         /* 0x0e1b - 0x0e7f:     reserved */
936
937 /*
938  *      Bank 29
939  */
940         /* 0x0e80 - 0x0efc:     reserved */
941
942 /*
943  *      Bank 30
944  */
945 /* GMAC and GPHY Control Registers (YUKON only) */
946 #define GMAC_CTRL               0x0f00  /* 32 bit       GMAC Control Reg */
947 #define GPHY_CTRL               0x0f04  /* 32 bit       GPHY Control Reg */
948 #define GMAC_IRQ_SRC    0x0f08  /*  8 bit       GMAC Interrupt Source Reg */
949         /* 0x0f09 - 0x0f0b:     reserved */
950 #define GMAC_IRQ_MSK    0x0f0c  /*  8 bit       GMAC Interrupt Mask Reg */
951         /* 0x0f0d - 0x0f0f:     reserved */
952 #define GMAC_LINK_CTRL  0x0f10  /* 16 bit       Link Control Reg */
953         /* 0x0f14 - 0x0f1f:     reserved */
954
955 /* Wake-up Frame Pattern Match Control Registers (YUKON only) */
956
957 #define WOL_REG_OFFS    0x20    /* HW-Bug: Address is + 0x20 against spec. */
958
959 #define WOL_CTRL_STAT   0x0f20  /* 16 bit       WOL Control/Status Reg */
960 #define WOL_MATCH_CTL   0x0f22  /*  8 bit       WOL Match Control Reg */
961 #define WOL_MATCH_RES   0x0f23  /*  8 bit       WOL Match Result Reg */
962 #define WOL_MAC_ADDR_LO 0x0f24  /* 32 bit       WOL MAC Address Low */
963 #define WOL_MAC_ADDR_HI 0x0f28  /* 16 bit       WOL MAC Address High */
964 #define WOL_PATT_RPTR   0x0f2c  /*  8 bit       WOL Pattern Read Ptr */
965
966 /* use this macro to access above registers */
967 #define WOL_REG(Reg)    ((Reg) + (pAC->GIni.GIWolOffs))
968
969
970 /* WOL Pattern Length Registers (YUKON only) */
971
972 #define WOL_PATT_LEN_LO 0x0f30          /* 32 bit       WOL Pattern Length 3..0 */
973 #define WOL_PATT_LEN_HI 0x0f34          /* 24 bit       WOL Pattern Length 6..4 */
974
975 /* WOL Pattern Counter Registers (YUKON only) */
976
977 #define WOL_PATT_CNT_0  0x0f38          /* 32 bit       WOL Pattern Counter 3..0 */
978 #define WOL_PATT_CNT_4  0x0f3c          /* 24 bit       WOL Pattern Counter 6..4 */
979         /* 0x0f40 - 0x0f7f:     reserved */
980
981 /*
982  *      Bank 31
983  */
984 /* 0x0f80 - 0x0fff:     reserved */
985
986 /*
987  *      Bank 32 - 33
988  */
989 #define WOL_PATT_RAM_1  0x1000  /*  WOL Pattern RAM Link 1 */
990
991 /*
992  *      Bank 0x22 - 0x3f
993  */
994 /* 0x1100 - 0x1fff:     reserved */
995
996 /*
997  *      Bank 0x40 - 0x4f
998  */
999 #define BASE_XMAC_1             0x2000  /* XMAC 1 registers */
1000
1001 /*
1002  *      Bank 0x50 - 0x5f
1003  */
1004
1005 #define BASE_GMAC_1             0x2800  /* GMAC 1 registers */
1006
1007 /*
1008  *      Bank 0x60 - 0x6f
1009  */
1010 #define BASE_XMAC_2             0x3000  /* XMAC 2 registers */
1011
1012 /*
1013  *      Bank 0x70 - 0x7f
1014  */
1015 #define BASE_GMAC_2             0x3800  /* GMAC 2 registers */
1016
1017 /*
1018  *      Control Register Bit Definitions:
1019  */
1020 /*      B0_RAP          8 bit   Register Address Port */
1021                                                                 /* Bit 7:       reserved */
1022 #define RAP_RAP                 0x3f    /* Bit 6..0:    0 = block 0,..,6f = block 6f */
1023
1024 /*      B0_CTST         16 bit  Control/Status register */
1025                                                                 /* Bit 15..14:  reserved */
1026 #define CS_CLK_RUN_HOT  BIT_13S         /* CLK_RUN hot m. (YUKON-Lite only) */
1027 #define CS_CLK_RUN_RST  BIT_12S         /* CLK_RUN reset  (YUKON-Lite only) */
1028 #define CS_CLK_RUN_ENA  BIT_11S         /* CLK_RUN enable (YUKON-Lite only) */
1029 #define CS_VAUX_AVAIL   BIT_10S         /* VAUX available (YUKON only) */
1030 #define CS_BUS_CLOCK    BIT_9S          /* Bus Clock 0/1 = 33/66 MHz */
1031 #define CS_BUS_SLOT_SZ  BIT_8S          /* Slot Size 0/1 = 32/64 bit slot */
1032 #define CS_ST_SW_IRQ    BIT_7S          /* Set IRQ SW Request */
1033 #define CS_CL_SW_IRQ    BIT_6S          /* Clear IRQ SW Request */
1034 #define CS_STOP_DONE    BIT_5S          /* Stop Master is finished */
1035 #define CS_STOP_MAST    BIT_4S          /* Command Bit to stop the master */
1036 #define CS_MRST_CLR             BIT_3S          /* Clear Master reset   */
1037 #define CS_MRST_SET             BIT_2S          /* Set Master reset     */
1038 #define CS_RST_CLR              BIT_1S          /* Clear Software reset */
1039 #define CS_RST_SET              BIT_0S          /* Set   Software reset */
1040
1041 /*      B0_LED           8 Bit  LED register */
1042                                                                 /* Bit  7.. 2:  reserved */
1043 #define LED_STAT_ON             BIT_1S          /* Status LED on        */
1044 #define LED_STAT_OFF    BIT_0S          /* Status LED off       */
1045
1046 /*      B0_POWER_CTRL    8 Bit  Power Control reg (YUKON only) */
1047 #define PC_VAUX_ENA             BIT_7           /* Switch VAUX Enable  */
1048 #define PC_VAUX_DIS             BIT_6       /* Switch VAUX Disable */
1049 #define PC_VCC_ENA              BIT_5       /* Switch VCC Enable  */
1050 #define PC_VCC_DIS              BIT_4       /* Switch VCC Disable */
1051 #define PC_VAUX_ON              BIT_3       /* Switch VAUX On  */
1052 #define PC_VAUX_OFF             BIT_2       /* Switch VAUX Off */
1053 #define PC_VCC_ON               BIT_1       /* Switch VCC On  */
1054 #define PC_VCC_OFF              BIT_0       /* Switch VCC Off */
1055
1056 /*      B0_ISRC         32 bit  Interrupt Source Register */
1057 /*      B0_IMSK         32 bit  Interrupt Mask Register */
1058 /*      B0_SP_ISRC      32 bit  Special Interrupt Source Reg */
1059 /*      B2_IRQM_MSK     32 bit  IRQ Moderation Mask */
1060 #define IS_ALL_MSK              0xbfffffffUL    /* All Interrupt bits */
1061 #define IS_HW_ERR               BIT_31          /* Interrupt HW Error */
1062                                                                 /* Bit 30:      reserved */
1063 #define IS_PA_TO_RX1    BIT_29          /* Packet Arb Timeout Rx1 */
1064 #define IS_PA_TO_RX2    BIT_28          /* Packet Arb Timeout Rx2 */
1065 #define IS_PA_TO_TX1    BIT_27          /* Packet Arb Timeout Tx1 */
1066 #define IS_PA_TO_TX2    BIT_26          /* Packet Arb Timeout Tx2 */
1067 #define IS_I2C_READY    BIT_25          /* IRQ on end of I2C Tx */
1068 #define IS_IRQ_SW               BIT_24          /* SW forced IRQ        */
1069 #define IS_EXT_REG              BIT_23          /* IRQ from LM80 or PHY (GENESIS only) */
1070                                                                         /* IRQ from PHY (YUKON only) */
1071 #define IS_TIMINT               BIT_22          /* IRQ from Timer       */
1072 #define IS_MAC1                 BIT_21          /* IRQ from MAC 1       */
1073 #define IS_LNK_SYNC_M1  BIT_20          /* Link Sync Cnt wrap MAC 1 */
1074 #define IS_MAC2                 BIT_19          /* IRQ from MAC 2       */
1075 #define IS_LNK_SYNC_M2  BIT_18          /* Link Sync Cnt wrap MAC 2 */
1076 /* Receive Queue 1 */
1077 #define IS_R1_B                 BIT_17          /* Q_R1 End of Buffer */
1078 #define IS_R1_F                 BIT_16          /* Q_R1 End of Frame */
1079 #define IS_R1_C                 BIT_15          /* Q_R1 Encoding Error */
1080 /* Receive Queue 2 */
1081 #define IS_R2_B                 BIT_14          /* Q_R2 End of Buffer */
1082 #define IS_R2_F                 BIT_13          /* Q_R2 End of Frame */
1083 #define IS_R2_C                 BIT_12          /* Q_R2 Encoding Error */
1084 /* Synchronous Transmit Queue 1 */
1085 #define IS_XS1_B                BIT_11          /* Q_XS1 End of Buffer */
1086 #define IS_XS1_F                BIT_10          /* Q_XS1 End of Frame */
1087 #define IS_XS1_C                BIT_9           /* Q_XS1 Encoding Error */
1088 /* Asynchronous Transmit Queue 1 */
1089 #define IS_XA1_B                BIT_8           /* Q_XA1 End of Buffer */
1090 #define IS_XA1_F                BIT_7           /* Q_XA1 End of Frame */
1091 #define IS_XA1_C                BIT_6           /* Q_XA1 Encoding Error */
1092 /* Synchronous Transmit Queue 2 */
1093 #define IS_XS2_B                BIT_5           /* Q_XS2 End of Buffer */
1094 #define IS_XS2_F                BIT_4           /* Q_XS2 End of Frame */
1095 #define IS_XS2_C                BIT_3           /* Q_XS2 Encoding Error */
1096 /* Asynchronous Transmit Queue 2 */
1097 #define IS_XA2_B                BIT_2           /* Q_XA2 End of Buffer */
1098 #define IS_XA2_F                BIT_1           /* Q_XA2 End of Frame */
1099 #define IS_XA2_C                BIT_0           /* Q_XA2 Encoding Error */
1100
1101
1102 /*      B0_HWE_ISRC     32 bit  HW Error Interrupt Src Reg */
1103 /*      B0_HWE_IMSK     32 bit  HW Error Interrupt Mask Reg */
1104 /*      B2_IRQM_HWE_MSK 32 bit  IRQ Moderation HW Error Mask */
1105 #define IS_ERR_MSK              0x00000fffL     /*              All Error bits */
1106                                                                 /* Bit 31..14:  reserved */
1107 #define IS_IRQ_TIST_OV  BIT_13  /* Time Stamp Timer Overflow (YUKON only) */
1108 #define IS_IRQ_SENSOR   BIT_12  /* IRQ from Sensor (YUKON only) */
1109 #define IS_IRQ_MST_ERR  BIT_11  /* IRQ master error detected */
1110 #define IS_IRQ_STAT             BIT_10  /* IRQ status exception */
1111 #define IS_NO_STAT_M1   BIT_9   /* No Rx Status from MAC 1 */
1112 #define IS_NO_STAT_M2   BIT_8   /* No Rx Status from MAC 2 */
1113 #define IS_NO_TIST_M1   BIT_7   /* No Time Stamp from MAC 1 */
1114 #define IS_NO_TIST_M2   BIT_6   /* No Time Stamp from MAC 2 */
1115 #define IS_RAM_RD_PAR   BIT_5   /* RAM Read  Parity Error */
1116 #define IS_RAM_WR_PAR   BIT_4   /* RAM Write Parity Error */
1117 #define IS_M1_PAR_ERR   BIT_3   /* MAC 1 Parity Error */
1118 #define IS_M2_PAR_ERR   BIT_2   /* MAC 2 Parity Error */
1119 #define IS_R1_PAR_ERR   BIT_1   /* Queue R1 Parity Error */
1120 #define IS_R2_PAR_ERR   BIT_0   /* Queue R2 Parity Error */
1121
1122 /*      B2_CONN_TYP      8 bit  Connector type */
1123 /*      B2_PMD_TYP       8 bit  PMD type */
1124 /*      Values of connector and PMD type comply to SysKonnect internal std */
1125
1126 /*      B2_MAC_CFG       8 bit  MAC Configuration / Chip Revision */
1127 #define CFG_CHIP_R_MSK  (0xf<<4)        /* Bit 7.. 4: Chip Revision */
1128                                                                         /* Bit 3.. 2:   reserved */
1129 #define CFG_DIS_M2_CLK  BIT_1S          /* Disable Clock for 2nd MAC */
1130 #define CFG_SNG_MAC             BIT_0S          /* MAC Config: 0=2 MACs / 1=1 MAC*/
1131
1132 /*      B2_CHIP_ID       8 bit  Chip Identification Number */
1133 #define CHIP_ID_GENESIS         0x0a    /* Chip ID for GENESIS */
1134 #define CHIP_ID_YUKON           0xb0    /* Chip ID for YUKON */
1135 #define CHIP_ID_YUKON_LITE      0xb1    /* Chip ID for YUKON-Lite (Rev. A1) */
1136 #define CHIP_ID_YUKON_LP        0xb2    /* Chip ID for YUKON-LP */
1137
1138 /*      B2_FAR          32 bit  Flash-Prom Addr Reg/Cnt */
1139 #define FAR_ADDR                0x1ffffL        /* Bit 16.. 0:  FPROM Address mask */
1140
1141 /*      B2_LD_CRTL       8 bit  EPROM loader control register */
1142 /*      Bits are currently reserved */
1143
1144 /*      B2_LD_TEST       8 bit  EPROM loader test register */
1145                                                                 /* Bit 7.. 4:   reserved */
1146 #define LD_T_ON                 BIT_3S  /* Loader Test mode on */
1147 #define LD_T_OFF                BIT_2S  /* Loader Test mode off */
1148 #define LD_T_STEP               BIT_1S  /* Decrement FPROM addr. Counter */
1149 #define LD_START                BIT_0S  /* Start loading FPROM */
1150
1151 /*
1152  *      Timer Section
1153  */
1154 /*      B2_TI_CRTL       8 bit  Timer control */
1155 /*      B2_IRQM_CTRL     8 bit  IRQ Moderation Timer Control */
1156                                                                 /* Bit 7.. 3:   reserved */
1157 #define TIM_START               BIT_2S  /* Start Timer */
1158 #define TIM_STOP                BIT_1S  /* Stop  Timer */
1159 #define TIM_CLR_IRQ             BIT_0S  /* Clear Timer IRQ (!IRQM) */
1160
1161 /*      B2_TI_TEST       8 Bit  Timer Test */
1162 /*      B2_IRQM_TEST     8 bit  IRQ Moderation Timer Test */
1163 /*      B28_DPT_TST      8 bit  Descriptor Poll Timer Test Reg */
1164                                                                 /* Bit 7.. 3:   reserved */
1165 #define TIM_T_ON                BIT_2S  /* Test mode on */
1166 #define TIM_T_OFF               BIT_1S  /* Test mode off */
1167 #define TIM_T_STEP              BIT_0S  /* Test step */
1168
1169 /*      B28_DPT_INI     32 bit  Descriptor Poll Timer Init Val */
1170 /*      B28_DPT_VAL     32 bit  Descriptor Poll Timer Curr Val */
1171                                                                 /* Bit 31..24:  reserved */
1172 #define DPT_MSK         0x00ffffffL     /* Bit 23.. 0:  Desc Poll Timer Bits */
1173
1174 /*      B28_DPT_CTRL     8 bit  Descriptor Poll Timer Ctrl Reg */
1175                                                                 /* Bit  7.. 2:  reserved */
1176 #define DPT_START               BIT_1S  /* Start Descriptor Poll Timer */
1177 #define DPT_STOP                BIT_0S  /* Stop  Descriptor Poll Timer */
1178
1179 /*      B2_E_3                   8 bit  lower 4 bits used for HW self test result */
1180 #define B2_E3_RES_MASK  0x0f
1181
1182 /*      B2_TST_CTRL1     8 bit  Test Control Register 1 */
1183 #define TST_FRC_DPERR_MR        BIT_7S  /* force DATAPERR on MST RD */
1184 #define TST_FRC_DPERR_MW        BIT_6S  /* force DATAPERR on MST WR */
1185 #define TST_FRC_DPERR_TR        BIT_5S  /* force DATAPERR on TRG RD */
1186 #define TST_FRC_DPERR_TW        BIT_4S  /* force DATAPERR on TRG WR */
1187 #define TST_FRC_APERR_M         BIT_3S  /* force ADDRPERR on MST */
1188 #define TST_FRC_APERR_T         BIT_2S  /* force ADDRPERR on TRG */
1189 #define TST_CFG_WRITE_ON        BIT_1S  /* Enable  Config Reg WR */
1190 #define TST_CFG_WRITE_OFF       BIT_0S  /* Disable Config Reg WR */
1191
1192 /*      B2_TST_CTRL2     8 bit  Test Control Register 2 */
1193                                                                         /* Bit 7.. 4:   reserved */
1194                         /* force the following error on the next master read/write      */
1195 #define TST_FRC_DPERR_MR64      BIT_3S  /* DataPERR RD 64       */
1196 #define TST_FRC_DPERR_MW64      BIT_2S  /* DataPERR WR 64       */
1197 #define TST_FRC_APERR_1M64      BIT_1S  /* AddrPERR on 1. phase */
1198 #define TST_FRC_APERR_2M64      BIT_0S  /* AddrPERR on 2. phase */
1199
1200 /*      B2_GP_IO        32 bit  General Purpose I/O Register */
1201                                                         /* Bit 31..26:  reserved */
1202 #define GP_DIR_9        BIT_25  /* IO_9 direct, 0=In/1=Out */
1203 #define GP_DIR_8        BIT_24  /* IO_8 direct, 0=In/1=Out */
1204 #define GP_DIR_7        BIT_23  /* IO_7 direct, 0=In/1=Out */
1205 #define GP_DIR_6        BIT_22  /* IO_6 direct, 0=In/1=Out */
1206 #define GP_DIR_5        BIT_21  /* IO_5 direct, 0=In/1=Out */
1207 #define GP_DIR_4        BIT_20  /* IO_4 direct, 0=In/1=Out */
1208 #define GP_DIR_3        BIT_19  /* IO_3 direct, 0=In/1=Out */
1209 #define GP_DIR_2        BIT_18  /* IO_2 direct, 0=In/1=Out */
1210 #define GP_DIR_1        BIT_17  /* IO_1 direct, 0=In/1=Out */
1211 #define GP_DIR_0        BIT_16  /* IO_0 direct, 0=In/1=Out */
1212                                                 /* Bit 15..10:  reserved */
1213 #define GP_IO_9         BIT_9   /* IO_9 pin */
1214 #define GP_IO_8         BIT_8   /* IO_8 pin */
1215 #define GP_IO_7         BIT_7   /* IO_7 pin */
1216 #define GP_IO_6         BIT_6   /* IO_6 pin */
1217 #define GP_IO_5         BIT_5   /* IO_5 pin */
1218 #define GP_IO_4         BIT_4   /* IO_4 pin */
1219 #define GP_IO_3         BIT_3   /* IO_3 pin */
1220 #define GP_IO_2         BIT_2   /* IO_2 pin */
1221 #define GP_IO_1         BIT_1   /* IO_1 pin */
1222 #define GP_IO_0         BIT_0   /* IO_0 pin */
1223
1224 /*      B2_I2C_CTRL     32 bit  I2C HW Control Register */
1225 #define I2C_FLAG                BIT_31          /* Start read/write if WR */
1226 #define I2C_ADDR                (0x7fffL<<16)   /* Bit 30..16:  Addr to be RD/WR */
1227 #define I2C_DEV_SEL             (0x7fL<<9)              /* Bit 15.. 9:  I2C Device Select */
1228                                                                 /* Bit  8.. 5:  reserved        */
1229 #define I2C_BURST_LEN   BIT_4           /* Burst Len, 1/4 bytes */
1230 #define I2C_DEV_SIZE    (7L<<1)         /* Bit  3.. 1:  I2C Device Size */
1231 #define I2C_025K_DEV    (0L<<1)         /*              0: 256 Bytes or smal. */
1232 #define I2C_05K_DEV             (1L<<1)         /*              1: 512  Bytes   */
1233 #define I2C_1K_DEV              (2L<<1)         /*              2: 1024 Bytes   */
1234 #define I2C_2K_DEV              (3L<<1)         /*              3: 2048 Bytes   */
1235 #define I2C_4K_DEV              (4L<<1)         /*              4: 4096 Bytes   */
1236 #define I2C_8K_DEV              (5L<<1)         /*              5: 8192 Bytes   */
1237 #define I2C_16K_DEV             (6L<<1)         /*              6: 16384 Bytes  */
1238 #define I2C_32K_DEV             (7L<<1)         /*              7: 32768 Bytes  */
1239 #define I2C_STOP                BIT_0           /* Interrupt I2C transfer */
1240
1241 /*      B2_I2C_IRQ      32 bit  I2C HW IRQ Register */
1242                                                                 /* Bit 31.. 1   reserved */
1243 #define I2C_CLR_IRQ             BIT_0   /* Clear I2C IRQ */
1244
1245 /*      B2_I2C_SW       32 bit (8 bit access)   I2C HW SW Port Register */
1246                                                                 /* Bit  7.. 3:  reserved */
1247 #define I2C_DATA_DIR    BIT_2S          /* direction of I2C_DATA */
1248 #define I2C_DATA                BIT_1S          /* I2C Data Port        */
1249 #define I2C_CLK                 BIT_0S          /* I2C Clock Port       */
1250
1251 /*
1252  * I2C Address
1253  */
1254 #define I2C_SENS_ADDR   LM80_ADDR       /* I2C Sensor Address, (Volt and Temp)*/
1255
1256
1257 /*      B2_BSC_CTRL      8 bit  Blink Source Counter Control */
1258                                                         /* Bit  7.. 2:  reserved */
1259 #define BSC_START       BIT_1S          /* Start Blink Source Counter */
1260 #define BSC_STOP        BIT_0S          /* Stop  Blink Source Counter */
1261
1262 /*      B2_BSC_STAT      8 bit  Blink Source Counter Status */
1263                                                         /* Bit  7.. 1:  reserved */
1264 #define BSC_SRC         BIT_0S          /* Blink Source, 0=Off / 1=On */
1265
1266 /*      B2_BSC_TST      16 bit  Blink Source Counter Test Reg */
1267 #define BSC_T_ON        BIT_2S          /* Test mode on */
1268 #define BSC_T_OFF       BIT_1S          /* Test mode off */
1269 #define BSC_T_STEP      BIT_0S          /* Test step */
1270
1271
1272 /*      B3_RAM_ADDR     32 bit  RAM Address, to read or write */
1273                                         /* Bit 31..19:  reserved */
1274 #define RAM_ADR_RAN     0x0007ffffL     /* Bit 18.. 0:  RAM Address Range */
1275
1276 /* RAM Interface Registers */
1277 /*      B3_RI_CTRL      16 bit  RAM Iface Control Register */
1278                                                                 /* Bit 15..10:  reserved */
1279 #define RI_CLR_RD_PERR  BIT_9S  /* Clear IRQ RAM Read Parity Err */
1280 #define RI_CLR_WR_PERR  BIT_8S  /* Clear IRQ RAM Write Parity Err*/
1281                                                                 /* Bit  7.. 2:  reserved */
1282 #define RI_RST_CLR              BIT_1S  /* Clear RAM Interface Reset */
1283 #define RI_RST_SET              BIT_0S  /* Set   RAM Interface Reset */
1284
1285 /*      B3_RI_TEST       8 bit  RAM Iface Test Register */
1286                                                                 /* Bit 15.. 4:  reserved */
1287 #define RI_T_EV                 BIT_3S  /* Timeout Event occured */
1288 #define RI_T_ON                 BIT_2S  /* Timeout Timer Test On */
1289 #define RI_T_OFF                BIT_1S  /* Timeout Timer Test Off */
1290 #define RI_T_STEP               BIT_0S  /* Timeout Timer Step */
1291
1292 /* MAC Arbiter Registers */
1293 /*      B3_MA_TO_CTRL   16 bit  MAC Arbiter Timeout Ctrl Reg */
1294                                                                 /* Bit 15.. 4:  reserved */
1295 #define MA_FOE_ON               BIT_3S  /* XMAC Fast Output Enable ON */
1296 #define MA_FOE_OFF              BIT_2S  /* XMAC Fast Output Enable OFF */
1297 #define MA_RST_CLR              BIT_1S  /* Clear MAC Arbiter Reset */
1298 #define MA_RST_SET              BIT_0S  /* Set   MAC Arbiter Reset */
1299
1300 /*      B3_MA_RC_CTRL   16 bit  MAC Arbiter Recovery Ctrl Reg */
1301                                                                 /* Bit 15.. 8:  reserved */
1302 #define MA_ENA_REC_TX2  BIT_7S  /* Enable  Recovery Timer TX2 */
1303 #define MA_DIS_REC_TX2  BIT_6S  /* Disable Recovery Timer TX2 */
1304 #define MA_ENA_REC_TX1  BIT_5S  /* Enable  Recovery Timer TX1 */
1305 #define MA_DIS_REC_TX1  BIT_4S  /* Disable Recovery Timer TX1 */
1306 #define MA_ENA_REC_RX2  BIT_3S  /* Enable  Recovery Timer RX2 */
1307 #define MA_DIS_REC_RX2  BIT_2S  /* Disable Recovery Timer RX2 */
1308 #define MA_ENA_REC_RX1  BIT_1S  /* Enable  Recovery Timer RX1 */
1309 #define MA_DIS_REC_RX1  BIT_0S  /* Disable Recovery Timer RX1 */
1310
1311 /* Packet Arbiter Registers */
1312 /*      B3_PA_CTRL      16 bit  Packet Arbiter Ctrl Register */
1313                                                                 /* Bit 15..14:  reserved */
1314 #define PA_CLR_TO_TX2   BIT_13S /* Clear IRQ Packet Timeout TX2 */
1315 #define PA_CLR_TO_TX1   BIT_12S /* Clear IRQ Packet Timeout TX1 */
1316 #define PA_CLR_TO_RX2   BIT_11S /* Clear IRQ Packet Timeout RX2 */
1317 #define PA_CLR_TO_RX1   BIT_10S /* Clear IRQ Packet Timeout RX1 */
1318 #define PA_ENA_TO_TX2   BIT_9S  /* Enable  Timeout Timer TX2 */
1319 #define PA_DIS_TO_TX2   BIT_8S  /* Disable Timeout Timer TX2 */
1320 #define PA_ENA_TO_TX1   BIT_7S  /* Enable  Timeout Timer TX1 */
1321 #define PA_DIS_TO_TX1   BIT_6S  /* Disable Timeout Timer TX1 */
1322 #define PA_ENA_TO_RX2   BIT_5S  /* Enable  Timeout Timer RX2 */
1323 #define PA_DIS_TO_RX2   BIT_4S  /* Disable Timeout Timer RX2 */
1324 #define PA_ENA_TO_RX1   BIT_3S  /* Enable  Timeout Timer RX1 */
1325 #define PA_DIS_TO_RX1   BIT_2S  /* Disable Timeout Timer RX1 */
1326 #define PA_RST_CLR              BIT_1S  /* Clear MAC Arbiter Reset */
1327 #define PA_RST_SET              BIT_0S  /* Set   MAC Arbiter Reset */
1328
1329 #define PA_ENA_TO_ALL   (PA_ENA_TO_RX1 | PA_ENA_TO_RX2 |\
1330                                                 PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
1331
1332 /* Rx/Tx Path related Arbiter Test Registers */
1333 /*      B3_MA_TO_TEST   16 bit  MAC Arbiter Timeout Test Reg */
1334 /*      B3_MA_RC_TEST   16 bit  MAC Arbiter Recovery Test Reg */
1335 /*      B3_PA_TEST      16 bit  Packet Arbiter Test Register */
1336 /*                      Bit 15, 11, 7, and 3 are reserved in B3_PA_TEST */
1337 #define TX2_T_EV        BIT_15S         /* TX2 Timeout/Recv Event occured */
1338 #define TX2_T_ON        BIT_14S         /* TX2 Timeout/Recv Timer Test On */
1339 #define TX2_T_OFF       BIT_13S         /* TX2 Timeout/Recv Timer Tst Off */
1340 #define TX2_T_STEP      BIT_12S         /* TX2 Timeout/Recv Timer Step */
1341 #define TX1_T_EV        BIT_11S         /* TX1 Timeout/Recv Event occured */
1342 #define TX1_T_ON        BIT_10S         /* TX1 Timeout/Recv Timer Test On */
1343 #define TX1_T_OFF       BIT_9S          /* TX1 Timeout/Recv Timer Tst Off */
1344 #define TX1_T_STEP      BIT_8S          /* TX1 Timeout/Recv Timer Step */
1345 #define RX2_T_EV        BIT_7S          /* RX2 Timeout/Recv Event occured */
1346 #define RX2_T_ON        BIT_6S          /* RX2 Timeout/Recv Timer Test On */
1347 #define RX2_T_OFF       BIT_5S          /* RX2 Timeout/Recv Timer Tst Off */
1348 #define RX2_T_STEP      BIT_4S          /* RX2 Timeout/Recv Timer Step */
1349 #define RX1_T_EV        BIT_3S          /* RX1 Timeout/Recv Event occured */
1350 #define RX1_T_ON        BIT_2S          /* RX1 Timeout/Recv Timer Test On */
1351 #define RX1_T_OFF       BIT_1S          /* RX1 Timeout/Recv Timer Tst Off */
1352 #define RX1_T_STEP      BIT_0S          /* RX1 Timeout/Recv Timer Step */
1353
1354
1355 /* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
1356 /*      TXA_ITI_INI     32 bit  Tx Arb Interval Timer Init Val */
1357 /*      TXA_ITI_VAL     32 bit  Tx Arb Interval Timer Value */
1358 /*      TXA_LIM_INI     32 bit  Tx Arb Limit Counter Init Val */
1359 /*      TXA_LIM_VAL     32 bit  Tx Arb Limit Counter Value */
1360                                                                 /* Bit 31..24:  reserved */
1361 #define TXA_MAX_VAL     0x00ffffffUL/* Bit 23.. 0:      Max TXA Timer/Cnt Val */
1362
1363 /*      TXA_CTRL         8 bit  Tx Arbiter Control Register */
1364 #define TXA_ENA_FSYNC   BIT_7S  /* Enable  force of sync Tx queue */
1365 #define TXA_DIS_FSYNC   BIT_6S  /* Disable force of sync Tx queue */
1366 #define TXA_ENA_ALLOC   BIT_5S  /* Enable  alloc of free bandwidth */
1367 #define TXA_DIS_ALLOC   BIT_4S  /* Disable alloc of free bandwidth */
1368 #define TXA_START_RC    BIT_3S  /* Start sync Rate Control */
1369 #define TXA_STOP_RC             BIT_2S  /* Stop  sync Rate Control */
1370 #define TXA_ENA_ARB             BIT_1S  /* Enable  Tx Arbiter */
1371 #define TXA_DIS_ARB             BIT_0S  /* Disable Tx Arbiter */
1372
1373 /*      TXA_TEST         8 bit  Tx Arbiter Test Register */
1374                                                                 /* Bit 7.. 6:   reserved */
1375 #define TXA_INT_T_ON    BIT_5S  /* Tx Arb Interval Timer Test On */
1376 #define TXA_INT_T_OFF   BIT_4S  /* Tx Arb Interval Timer Test Off */
1377 #define TXA_INT_T_STEP  BIT_3S  /* Tx Arb Interval Timer Step */
1378 #define TXA_LIM_T_ON    BIT_2S  /* Tx Arb Limit Timer Test On */
1379 #define TXA_LIM_T_OFF   BIT_1S  /* Tx Arb Limit Timer Test Off */
1380 #define TXA_LIM_T_STEP  BIT_0S  /* Tx Arb Limit Timer Step */
1381
1382 /*      TXA_STAT         8 bit  Tx Arbiter Status Register */
1383                                                                 /* Bit 7.. 1:   reserved */
1384 #define TXA_PRIO_XS             BIT_0S  /* sync queue has prio to send */
1385
1386 /*      Q_BC    32 bit  Current Byte Counter */
1387                                                                 /* Bit 31..16:  reserved */
1388 #define BC_MAX                  0xffff  /* Bit 15.. 0:  Byte counter */
1389
1390 /* BMU Control Status Registers */
1391 /*      B0_R1_CSR       32 bit  BMU Ctrl/Stat Rx Queue 1 */
1392 /*      B0_R2_CSR       32 bit  BMU Ctrl/Stat Rx Queue 2 */
1393 /*      B0_XA1_CSR      32 bit  BMU Ctrl/Stat Sync Tx Queue 1 */
1394 /*      B0_XS1_CSR      32 bit  BMU Ctrl/Stat Async Tx Queue 1 */
1395 /*      B0_XA2_CSR      32 bit  BMU Ctrl/Stat Sync Tx Queue 2 */
1396 /*      B0_XS2_CSR      32 bit  BMU Ctrl/Stat Async Tx Queue 2 */
1397 /*      Q_CSR           32 bit  BMU Control/Status Register */
1398                                                                 /* Bit 31..25:  reserved */
1399 #define CSR_SV_IDLE             BIT_24          /* BMU SM Idle */
1400                                                                 /* Bit 23..22:  reserved */
1401 #define CSR_DESC_CLR    BIT_21          /* Clear Reset for Descr */
1402 #define CSR_DESC_SET    BIT_20          /* Set   Reset for Descr */
1403 #define CSR_FIFO_CLR    BIT_19          /* Clear Reset for FIFO */
1404 #define CSR_FIFO_SET    BIT_18          /* Set   Reset for FIFO */
1405 #define CSR_HPI_RUN             BIT_17          /* Release HPI SM */
1406 #define CSR_HPI_RST             BIT_16          /* Reset   HPI SM to Idle */
1407 #define CSR_SV_RUN              BIT_15          /* Release Supervisor SM */
1408 #define CSR_SV_RST              BIT_14          /* Reset   Supervisor SM */
1409 #define CSR_DREAD_RUN   BIT_13          /* Release Descr Read SM */
1410 #define CSR_DREAD_RST   BIT_12          /* Reset   Descr Read SM */
1411 #define CSR_DWRITE_RUN  BIT_11          /* Release Descr Write SM */
1412 #define CSR_DWRITE_RST  BIT_10          /* Reset   Descr Write SM */
1413 #define CSR_TRANS_RUN   BIT_9           /* Release Transfer SM */
1414 #define CSR_TRANS_RST   BIT_8           /* Reset   Transfer SM */
1415 #define CSR_ENA_POL             BIT_7           /* Enable  Descr Polling */
1416 #define CSR_DIS_POL             BIT_6           /* Disable Descr Polling */
1417 #define CSR_STOP                BIT_5           /* Stop  Rx/Tx Queue */
1418 #define CSR_START               BIT_4           /* Start Rx/Tx Queue */
1419 #define CSR_IRQ_CL_P    BIT_3           /* (Rx) Clear Parity IRQ */
1420 #define CSR_IRQ_CL_B    BIT_2           /* Clear EOB IRQ */
1421 #define CSR_IRQ_CL_F    BIT_1           /* Clear EOF IRQ */
1422 #define CSR_IRQ_CL_C    BIT_0           /* Clear ERR IRQ */
1423
1424 #define CSR_SET_RESET   (CSR_DESC_SET | CSR_FIFO_SET | CSR_HPI_RST |\
1425                                                 CSR_SV_RST | CSR_DREAD_RST | CSR_DWRITE_RST |\
1426                                                 CSR_TRANS_RST)
1427 #define CSR_CLR_RESET   (CSR_DESC_CLR | CSR_FIFO_CLR | CSR_HPI_RUN |\
1428                                                 CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\
1429                                                 CSR_TRANS_RUN)
1430
1431 /*      Q_F     32 bit  Flag Register */
1432                                                                         /* Bit 31..28:  reserved */
1433 #define F_ALM_FULL              BIT_27          /* Rx FIFO: almost full */
1434 #define F_EMPTY                 BIT_27          /* Tx FIFO: empty flag */
1435 #define F_FIFO_EOF              BIT_26          /* Tag (EOF Flag) bit in FIFO */
1436 #define F_WM_REACHED    BIT_25          /* Watermark reached */
1437                                                                         /* reserved */
1438 #define F_FIFO_LEVEL    (0x1fL<<16)     /* Bit 23..16:  # of Qwords in FIFO */
1439                                                                         /* Bit 15..11:  reserved */
1440 #define F_WATER_MARK    0x0007ffL       /* Bit 10.. 0:  Watermark */
1441
1442 /*      Q_T1    32 bit  Test Register 1 */
1443 /*              Holds four State Machine control Bytes */
1444 #define SM_CRTL_SV_MSK  (0xffL<<24)     /* Bit 31..24:  Control Supervisor SM */
1445 #define SM_CRTL_RD_MSK  (0xffL<<16)     /* Bit 23..16:  Control Read Desc SM */
1446 #define SM_CRTL_WR_MSK  (0xffL<<8)      /* Bit 15.. 8:  Control Write Desc SM */
1447 #define SM_CRTL_TR_MSK  0xffL           /* Bit  7.. 0:  Control Transfer SM */
1448
1449 /*      Q_T1_TR  8 bit  Test Register 1 Transfer SM */
1450 /*      Q_T1_WR  8 bit  Test Register 1 Write Descriptor SM */
1451 /*      Q_T1_RD  8 bit  Test Register 1 Read Descriptor SM */
1452 /*      Q_T1_SV  8 bit  Test Register 1 Supervisor SM */
1453
1454 /* The control status byte of each machine looks like ... */
1455 #define SM_STATE                0xf0    /* Bit 7.. 4:   State which shall be loaded */
1456 #define SM_LOAD                 BIT_3S  /* Load the SM with SM_STATE */
1457 #define SM_TEST_ON              BIT_2S  /* Switch on SM Test Mode */
1458 #define SM_TEST_OFF             BIT_1S  /* Go off the Test Mode */
1459 #define SM_STEP                 BIT_0S  /* Step the State Machine */
1460 /* The encoding of the states is not supported by the Diagnostics Tool */
1461
1462 /*      Q_T2    32 bit  Test Register 2 */
1463                                                                 /* Bit 31.. 8:  reserved */
1464 #define T2_AC_T_ON              BIT_7   /* Address Counter Test Mode on */
1465 #define T2_AC_T_OFF             BIT_6   /* Address Counter Test Mode off */
1466 #define T2_BC_T_ON              BIT_5   /* Byte Counter Test Mode on */
1467 #define T2_BC_T_OFF             BIT_4   /* Byte Counter Test Mode off */
1468 #define T2_STEP04               BIT_3   /* Inc AC/Dec BC by 4 */
1469 #define T2_STEP03               BIT_2   /* Inc AC/Dec BC by 3 */
1470 #define T2_STEP02               BIT_1   /* Inc AC/Dec BC by 2 */
1471 #define T2_STEP01               BIT_0   /* Inc AC/Dec BC by 1 */
1472
1473 /*      Q_T3    32 bit  Test Register 3 */
1474                                                                 /* Bit 31.. 7:  reserved */
1475 #define T3_MUX_MSK              (7<<4)  /* Bit  6.. 4:  Mux Position */
1476                                                                 /* Bit  3:      reserved */
1477 #define T3_VRAM_MSK             7               /* Bit  2.. 0:  Virtual RAM Buffer Address */
1478
1479 /* RAM Buffer Register Offsets, use RB_ADDR(Queue, Offs) to access */
1480 /*      RB_START        32 bit  RAM Buffer Start Address */
1481 /*      RB_END          32 bit  RAM Buffer End Address */
1482 /*      RB_WP           32 bit  RAM Buffer Write Pointer */
1483 /*      RB_RP           32 bit  RAM Buffer Read Pointer */
1484 /*      RB_RX_UTPP      32 bit  Rx Upper Threshold, Pause Pack */
1485 /*      RB_RX_LTPP      32 bit  Rx Lower Threshold, Pause Pack */
1486 /*      RB_RX_UTHP      32 bit  Rx Upper Threshold, High Prio */
1487 /*      RB_RX_LTHP      32 bit  Rx Lower Threshold, High Prio */
1488 /*      RB_PC           32 bit  RAM Buffer Packet Counter */
1489 /*      RB_LEV          32 bit  RAM Buffer Level Register */
1490                                 /* Bit 31..19:  reserved */
1491 #define RB_MSK  0x0007ffff      /* Bit 18.. 0:  RAM Buffer Pointer Bits */
1492
1493 /*      RB_TST2                  8 bit  RAM Buffer Test Register 2 */
1494                                                                 /* Bit 7.. 4:   reserved */
1495 #define RB_PC_DEC               BIT_3S  /* Packet Counter Decrem */
1496 #define RB_PC_T_ON              BIT_2S  /* Packet Counter Test On */
1497 #define RB_PC_T_OFF             BIT_1S  /* Packet Counter Tst Off */
1498 #define RB_PC_INC               BIT_0S  /* Packet Counter Increm */
1499
1500 /*      RB_TST1                  8 bit  RAM Buffer Test Register 1 */
1501                                                         /* Bit 7:       reserved */
1502 #define RB_WP_T_ON              BIT_6S  /* Write Pointer Test On */
1503 #define RB_WP_T_OFF             BIT_5S  /* Write Pointer Test Off */
1504 #define RB_WP_INC               BIT_4S  /* Write Pointer Increm */
1505                                                                 /* Bit 3:       reserved */
1506 #define RB_RP_T_ON              BIT_2S  /* Read Pointer Test On */
1507 #define RB_RP_T_OFF             BIT_1S  /* Read Pointer Test Off */
1508 #define RB_RP_DEC               BIT_0S  /* Read Pointer Decrement */
1509
1510 /*      RB_CTRL                  8 bit  RAM Buffer Control Register */
1511                                                                 /* Bit 7.. 6:   reserved */
1512 #define RB_ENA_STFWD    BIT_5S  /* Enable  Store & Forward */
1513 #define RB_DIS_STFWD    BIT_4S  /* Disable Store & Forward */
1514 #define RB_ENA_OP_MD    BIT_3S  /* Enable  Operation Mode */
1515 #define RB_DIS_OP_MD    BIT_2S  /* Disable Operation Mode */
1516 #define RB_RST_CLR              BIT_1S  /* Clear RAM Buf STM Reset */
1517 #define RB_RST_SET              BIT_0S  /* Set   RAM Buf STM Reset */
1518
1519
1520 /* Receive and Transmit MAC FIFO Registers (GENESIS only) */
1521
1522 /*      RX_MFF_EA       32 bit  Receive MAC FIFO End Address */
1523 /*      RX_MFF_WP       32 bit  Receive MAC FIFO Write Pointer */
1524 /*      RX_MFF_RP       32 bit  Receive MAC FIFO Read Pointer */
1525 /*      RX_MFF_PC       32 bit  Receive MAC FIFO Packet Counter */
1526 /*      RX_MFF_LEV      32 bit  Receive MAC FIFO Level */
1527 /*      TX_MFF_EA       32 bit  Transmit MAC FIFO End Address */
1528 /*      TX_MFF_WP       32 bit  Transmit MAC FIFO Write Pointer */
1529 /*      TX_MFF_WSP      32 bit  Transmit MAC FIFO WR Shadow Pointer */
1530 /*      TX_MFF_RP       32 bit  Transmit MAC FIFO Read Pointer */
1531 /*      TX_MFF_PC       32 bit  Transmit MAC FIFO Packet Cnt */
1532 /*      TX_MFF_LEV      32 bit  Transmit MAC FIFO Level */
1533                                                                 /* Bit 31.. 6:  reserved */
1534 #define MFF_MSK                 0x007fL /* Bit  5.. 0:  MAC FIFO Address/Ptr Bits */
1535
1536 /*      RX_MFF_CTRL1    16 bit  Receive MAC FIFO Control Reg 1 */
1537                                                                 /* Bit 15..14:  reserved */
1538 #define MFF_ENA_RDY_PAT BIT_13S         /* Enable  Ready Patch */
1539 #define MFF_DIS_RDY_PAT BIT_12S         /* Disable Ready Patch */
1540 #define MFF_ENA_TIM_PAT BIT_11S         /* Enable  Timing Patch */
1541 #define MFF_DIS_TIM_PAT BIT_10S         /* Disable Timing Patch */
1542 #define MFF_ENA_ALM_FUL BIT_9S          /* Enable  AlmostFull Sign */
1543 #define MFF_DIS_ALM_FUL BIT_8S          /* Disable AlmostFull Sign */
1544 #define MFF_ENA_PAUSE   BIT_7S          /* Enable  Pause Signaling */
1545 #define MFF_DIS_PAUSE   BIT_6S          /* Disable Pause Signaling */
1546 #define MFF_ENA_FLUSH   BIT_5S          /* Enable  Frame Flushing */
1547 #define MFF_DIS_FLUSH   BIT_4S          /* Disable Frame Flushing */
1548 #define MFF_ENA_TIST    BIT_3S          /* Enable  Time Stamp Gener */
1549 #define MFF_DIS_TIST    BIT_2S          /* Disable Time Stamp Gener */
1550 #define MFF_CLR_INTIST  BIT_1S          /* Clear IRQ No Time Stamp */
1551 #define MFF_CLR_INSTAT  BIT_0S          /* Clear IRQ No Status */
1552
1553 #define MFF_RX_CTRL_DEF MFF_ENA_TIM_PAT
1554
1555 /*      TX_MFF_CTRL1    16 bit  Transmit MAC FIFO Control Reg 1 */
1556 #define MFF_CLR_PERR    BIT_15S         /* Clear Parity Error IRQ */
1557                                                                 /* Bit 14:      reserved */
1558 #define MFF_ENA_PKT_REC BIT_13S         /* Enable  Packet Recovery */
1559 #define MFF_DIS_PKT_REC BIT_12S         /* Disable Packet Recovery */
1560 /*      MFF_ENA_TIM_PAT  (see RX_MFF_CTRL1) Bit 11:     Enable  Timing Patch */
1561 /*      MFF_DIS_TIM_PAT  (see RX_MFF_CTRL1) Bit 10:     Disable Timing Patch */
1562 /*      MFF_ENA_ALM_FUL  (see RX_MFF_CTRL1) Bit  9:     Enable  Almost Full Sign */
1563 /*      MFF_DIS_ALM_FUL  (see RX_MFF_CTRL1) Bit  8:     Disable Almost Full Sign */
1564 #define MFF_ENA_W4E             BIT_7S          /* Enable  Wait for Empty */
1565 #define MFF_DIS_W4E             BIT_6S          /* Disable Wait for Empty */
1566 /*      MFF_ENA_FLUSH    (see RX_MFF_CTRL1) Bit  5:     Enable  Frame Flushing */
1567 /*      MFF_DIS_FLUSH    (see RX_MFF_CTRL1) Bit  4:     Disable Frame Flushing */
1568 #define MFF_ENA_LOOPB   BIT_3S          /* Enable  Loopback */
1569 #define MFF_DIS_LOOPB   BIT_2S          /* Disable Loopback */
1570 #define MFF_CLR_MAC_RST BIT_1S          /* Clear XMAC Reset */
1571 #define MFF_SET_MAC_RST BIT_0S          /* Set   XMAC Reset */
1572
1573 #define MFF_TX_CTRL_DEF (MFF_ENA_PKT_REC | MFF_ENA_TIM_PAT | MFF_ENA_FLUSH)
1574
1575 /*      RX_MFF_TST2              8 bit  Receive MAC FIFO Test Register 2 */
1576 /*      TX_MFF_TST2              8 bit  Transmit MAC FIFO Test Register 2 */
1577                                                                 /* Bit 7:       reserved */
1578 #define MFF_WSP_T_ON    BIT_6S  /* Tx: Write Shadow Ptr TestOn */
1579 #define MFF_WSP_T_OFF   BIT_5S  /* Tx: Write Shadow Ptr TstOff */
1580 #define MFF_WSP_INC             BIT_4S  /* Tx: Write Shadow Ptr Increment */
1581 #define MFF_PC_DEC              BIT_3S  /* Packet Counter Decrement */
1582 #define MFF_PC_T_ON             BIT_2S  /* Packet Counter Test On */
1583 #define MFF_PC_T_OFF    BIT_1S  /* Packet Counter Test Off */
1584 #define MFF_PC_INC              BIT_0S  /* Packet Counter Increment */
1585
1586 /*      RX_MFF_TST1              8 bit  Receive MAC FIFO Test Register 1 */
1587 /*      TX_MFF_TST1              8 bit  Transmit MAC FIFO Test Register 1 */
1588                                         /* Bit 7:       reserved */
1589 #define MFF_WP_T_ON             BIT_6S  /* Write Pointer Test On */
1590 #define MFF_WP_T_OFF    BIT_5S  /* Write Pointer Test Off */
1591 #define MFF_WP_INC              BIT_4S  /* Write Pointer Increm */
1592                                                         /* Bit 3:       reserved */
1593 #define MFF_RP_T_ON             BIT_2S  /* Read Pointer Test On */
1594 #define MFF_RP_T_OFF    BIT_1S  /* Read Pointer Test Off */
1595 #define MFF_RP_DEC              BIT_0S  /* Read Pointer Decrement */
1596
1597 /*      RX_MFF_CTRL2     8 bit  Receive MAC FIFO Control Reg 2 */
1598 /*      TX_MFF_CTRL2     8 bit  Transmit MAC FIFO Control Reg 2 */
1599                                                                 /* Bit 7..4:    reserved */
1600 #define MFF_ENA_OP_MD   BIT_3S  /* Enable  Operation Mode */
1601 #define MFF_DIS_OP_MD   BIT_2S  /* Disable Operation Mode */
1602 #define MFF_RST_CLR             BIT_1S  /* Clear MAC FIFO Reset */
1603 #define MFF_RST_SET             BIT_0S  /* Set   MAC FIFO Reset */
1604
1605
1606 /*      Link LED Counter Registers (GENESIS only) */
1607
1608 /*      RX_LED_CTRL              8 bit  Receive LED Cnt Control Reg */
1609 /*      TX_LED_CTRL              8 bit  Transmit LED Cnt Control Reg */
1610 /*      LNK_SYNC_CTRL    8 bit  Link Sync Cnt Control Register */
1611                                                         /* Bit 7.. 3:   reserved */
1612 #define LED_START               BIT_2S  /* Start Timer */
1613 #define LED_STOP                BIT_1S  /* Stop Timer */
1614 #define LED_STATE               BIT_0S  /* Rx/Tx: LED State, 1=LED on */
1615 #define LED_CLR_IRQ             BIT_0S  /* Lnk:         Clear Link IRQ */
1616
1617 /*      RX_LED_TST               8 bit  Receive LED Cnt Test Register */
1618 /*      TX_LED_TST               8 bit  Transmit LED Cnt Test Register */
1619 /*      LNK_SYNC_TST     8 bit  Link Sync Cnt Test Register */
1620                                                         /* Bit 7.. 3:   reserved */
1621 #define LED_T_ON                BIT_2S  /* LED Counter Test mode On */
1622 #define LED_T_OFF               BIT_1S  /* LED Counter Test mode Off */
1623 #define LED_T_STEP              BIT_0S  /* LED Counter Step */
1624
1625 /*      LNK_LED_REG              8 bit  Link LED Register */
1626                                                                 /* Bit 7.. 6:   reserved */
1627 #define LED_BLK_ON              BIT_5S  /* Link LED Blinking On */
1628 #define LED_BLK_OFF             BIT_4S  /* Link LED Blinking Off */
1629 #define LED_SYNC_ON             BIT_3S  /* Use Sync Wire to switch LED */
1630 #define LED_SYNC_OFF    BIT_2S  /* Disable Sync Wire Input */
1631 #define LED_ON                  BIT_1S  /* switch LED on */
1632 #define LED_OFF                 BIT_0S  /* switch LED off */
1633
1634 /*      Receive and Transmit GMAC FIFO Registers (YUKON only) */
1635
1636 /*      RX_GMF_EA               32 bit  Rx GMAC FIFO End Address */
1637 /*      RX_GMF_AF_THR   32 bit  Rx GMAC FIFO Almost Full Thresh. */
1638 /*      RX_GMF_WP               32 bit  Rx GMAC FIFO Write Pointer */
1639 /*      RX_GMF_WLEV             32 bit  Rx GMAC FIFO Write Level */
1640 /*      RX_GMF_RP               32 bit  Rx GMAC FIFO Read Pointer */
1641 /*      RX_GMF_RLEV             32 bit  Rx GMAC FIFO Read Level */
1642 /*      TX_GMF_EA               32 bit  Tx GMAC FIFO End Address */
1643 /*      TX_GMF_AE_THR   32 bit  Tx GMAC FIFO Almost Empty Thresh.*/
1644 /*      TX_GMF_WP               32 bit  Tx GMAC FIFO Write Pointer */
1645 /*      TX_GMF_WSP              32 bit  Tx GMAC FIFO Write Shadow Ptr. */
1646 /*      TX_GMF_WLEV             32 bit  Tx GMAC FIFO Write Level */
1647 /*      TX_GMF_RP               32 bit  Tx GMAC FIFO Read Pointer */
1648 /*      TX_GMF_RSTP             32 bit  Tx GMAC FIFO Restart Pointer */
1649 /*      TX_GMF_RLEV             32 bit  Tx GMAC FIFO Read Level */
1650
1651 /*      RX_GMF_CTRL_T   32 bit  Rx GMAC FIFO Control/Test */
1652                                                 /* Bits 31..15: reserved */
1653 #define GMF_WP_TST_ON   BIT_14          /* Write Pointer Test On */
1654 #define GMF_WP_TST_OFF  BIT_13          /* Write Pointer Test Off */
1655 #define GMF_WP_STEP             BIT_12          /* Write Pointer Step/Increment */
1656                                                 /* Bit 11:      reserved */
1657 #define GMF_RP_TST_ON   BIT_10          /* Read Pointer Test On */
1658 #define GMF_RP_TST_OFF  BIT_9           /* Read Pointer Test Off */
1659 #define GMF_RP_STEP             BIT_8           /* Read Pointer Step/Increment */
1660 #define GMF_RX_F_FL_ON  BIT_7           /* Rx FIFO Flush Mode On */
1661 #define GMF_RX_F_FL_OFF BIT_6           /* Rx FIFO Flush Mode Off */
1662 #define GMF_CLI_RX_FO   BIT_5           /* Clear IRQ Rx FIFO Overrun */
1663 #define GMF_CLI_RX_FC   BIT_4           /* Clear IRQ Rx Frame Complete */
1664 #define GMF_OPER_ON             BIT_3           /* Operational Mode On */
1665 #define GMF_OPER_OFF    BIT_2           /* Operational Mode Off */
1666 #define GMF_RST_CLR             BIT_1           /* Clear GMAC FIFO Reset */
1667 #define GMF_RST_SET             BIT_0           /* Set   GMAC FIFO Reset */
1668
1669 /*      TX_GMF_CTRL_T   32 bit  Tx GMAC FIFO Control/Test */
1670                                                 /* Bits 31..19: reserved */
1671 #define GMF_WSP_TST_ON  BIT_18          /* Write Shadow Pointer Test On */
1672 #define GMF_WSP_TST_OFF BIT_17          /* Write Shadow Pointer Test Off */
1673 #define GMF_WSP_STEP    BIT_16          /* Write Shadow Pointer Step/Increment */
1674                                                 /* Bits 15..7: same as for RX_GMF_CTRL_T */
1675 #define GMF_CLI_TX_FU   BIT_6           /* Clear IRQ Tx FIFO Underrun */
1676 #define GMF_CLI_TX_FC   BIT_5           /* Clear IRQ Tx Frame Complete */
1677 #define GMF_CLI_TX_PE   BIT_4           /* Clear IRQ Tx Parity Error */
1678                                                 /* Bits 3..0: same as for RX_GMF_CTRL_T */
1679
1680 #define GMF_RX_CTRL_DEF         (GMF_OPER_ON | GMF_RX_F_FL_ON)
1681 #define GMF_TX_CTRL_DEF         GMF_OPER_ON
1682
1683 #define RX_GMF_FL_THR_DEF       0x0a    /* Rx GMAC FIFO Flush Threshold default */
1684
1685 /*      GMAC_TI_ST_CTRL           8 bit Time Stamp Timer Ctrl Reg (YUKON only) */
1686                                                                 /* Bit 7.. 3:   reserved */
1687 #define GMT_ST_START    BIT_2S          /* Start Time Stamp Timer */
1688 #define GMT_ST_STOP             BIT_1S          /* Stop  Time Stamp Timer */
1689 #define GMT_ST_CLR_IRQ  BIT_0S          /* Clear Time Stamp Timer IRQ */
1690
1691 /*      GMAC_CTRL               32 bit  GMAC Control Reg (YUKON only) */
1692                                                 /* Bits 31.. 8: reserved */
1693 #define GMC_H_BURST_ON  BIT_7           /* Half Duplex Burst Mode On */
1694 #define GMC_H_BURST_OFF BIT_6           /* Half Duplex Burst Mode Off */
1695 #define GMC_F_LOOPB_ON  BIT_5           /* FIFO Loopback On */
1696 #define GMC_F_LOOPB_OFF BIT_4           /* FIFO Loopback Off */
1697 #define GMC_PAUSE_ON    BIT_3           /* Pause On */
1698 #define GMC_PAUSE_OFF   BIT_2           /* Pause Off */
1699 #define GMC_RST_CLR             BIT_1           /* Clear GMAC Reset */
1700 #define GMC_RST_SET             BIT_0           /* Set   GMAC Reset */
1701
1702 /*      GPHY_CTRL               32 bit  GPHY Control Reg (YUKON only) */
1703                                                 /* Bits 31..29: reserved */
1704 #define GPC_SEL_BDT             BIT_28  /* Select Bi-Dir. Transfer for MDC/MDIO */
1705 #define GPC_INT_POL_HI  BIT_27  /* IRQ Polarity is Active HIGH */
1706 #define GPC_75_OHM              BIT_26  /* Use 75 Ohm Termination instead of 50 */
1707 #define GPC_DIS_FC              BIT_25  /* Disable Automatic Fiber/Copper Detection */
1708 #define GPC_DIS_SLEEP   BIT_24  /* Disable Energy Detect */
1709 #define GPC_HWCFG_M_3   BIT_23  /* HWCFG_MODE[3] */
1710 #define GPC_HWCFG_M_2   BIT_22  /* HWCFG_MODE[2] */
1711 #define GPC_HWCFG_M_1   BIT_21  /* HWCFG_MODE[1] */
1712 #define GPC_HWCFG_M_0   BIT_20  /* HWCFG_MODE[0] */
1713 #define GPC_ANEG_0              BIT_19  /* ANEG[0] */
1714 #define GPC_ENA_XC              BIT_18  /* Enable MDI crossover */
1715 #define GPC_DIS_125             BIT_17  /* Disable 125 MHz clock */
1716 #define GPC_ANEG_3              BIT_16  /* ANEG[3] */
1717 #define GPC_ANEG_2              BIT_15  /* ANEG[2] */
1718 #define GPC_ANEG_1              BIT_14  /* ANEG[1] */
1719 #define GPC_ENA_PAUSE   BIT_13  /* Enable Pause (SYM_OR_REM) */
1720 #define GPC_PHYADDR_4   BIT_12  /* Bit 4 of Phy Addr */
1721 #define GPC_PHYADDR_3   BIT_11  /* Bit 3 of Phy Addr */
1722 #define GPC_PHYADDR_2   BIT_10  /* Bit 2 of Phy Addr */
1723 #define GPC_PHYADDR_1   BIT_9   /* Bit 1 of Phy Addr */
1724 #define GPC_PHYADDR_0   BIT_8   /* Bit 0 of Phy Addr */
1725                                                 /* Bits  7..2:  reserved */
1726 #define GPC_RST_CLR             BIT_1   /* Clear GPHY Reset */
1727 #define GPC_RST_SET             BIT_0   /* Set   GPHY Reset */
1728
1729 #define GPC_HWCFG_GMII_COP      (GPC_HWCFG_M_3 | GPC_HWCFG_M_2 | \
1730                                                          GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
1731
1732 #define GPC_HWCFG_GMII_FIB      (                                GPC_HWCFG_M_2 | \
1733                                                          GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
1734
1735 #define GPC_ANEG_ADV_ALL_M      (GPC_ANEG_3 | GPC_ANEG_2 | \
1736                                                          GPC_ANEG_1 | GPC_ANEG_0)
1737
1738 /* forced speed and duplex mode (don't mix with other ANEG bits) */
1739 #define GPC_FRC10MBIT_HALF      0
1740 #define GPC_FRC10MBIT_FULL      GPC_ANEG_0
1741 #define GPC_FRC100MBIT_HALF     GPC_ANEG_1
1742 #define GPC_FRC100MBIT_FULL     (GPC_ANEG_0 | GPC_ANEG_1)
1743
1744 /* auto-negotiation with limited advertised speeds */
1745 /* mix only with master/slave settings (for copper) */
1746 #define GPC_ADV_1000_HALF       GPC_ANEG_2
1747 #define GPC_ADV_1000_FULL       GPC_ANEG_3
1748 #define GPC_ADV_ALL                     (GPC_ANEG_2 | GPC_ANEG_3)
1749
1750 /* master/slave settings */
1751 /* only for copper with 1000 Mbps */
1752 #define GPC_FORCE_MASTER        0
1753 #define GPC_FORCE_SLAVE         GPC_ANEG_0
1754 #define GPC_PREF_MASTER         GPC_ANEG_1
1755 #define GPC_PREF_SLAVE          (GPC_ANEG_1 | GPC_ANEG_0)
1756
1757 /*      GMAC_IRQ_SRC     8 bit  GMAC Interrupt Source Reg (YUKON only) */
1758 /*      GMAC_IRQ_MSK     8 bit  GMAC Interrupt Mask   Reg (YUKON only) */
1759 #define GM_IS_TX_CO_OV  BIT_5           /* Transmit Counter Overflow IRQ */
1760 #define GM_IS_RX_CO_OV  BIT_4           /* Receive Counter Overflow IRQ */
1761 #define GM_IS_TX_FF_UR  BIT_3           /* Transmit FIFO Underrun */
1762 #define GM_IS_TX_COMPL  BIT_2           /* Frame Transmission Complete */
1763 #define GM_IS_RX_FF_OR  BIT_1           /* Receive FIFO Overrun */
1764 #define GM_IS_RX_COMPL  BIT_0           /* Frame Reception Complete */
1765
1766 #define GMAC_DEF_MSK    (GM_IS_TX_CO_OV | GM_IS_RX_CO_OV | \
1767                                                 GM_IS_TX_FF_UR)
1768
1769 /*      GMAC_LINK_CTRL          16 bit  GMAC Link Control Reg (YUKON only) */
1770                                                 /* Bits 15.. 2: reserved */
1771 #define GMLC_RST_CLR    BIT_1S          /* Clear GMAC Link Reset */
1772 #define GMLC_RST_SET    BIT_0S          /* Set   GMAC Link Reset */
1773
1774
1775 /*      WOL_CTRL_STAT           16 bit  WOL Control/Status Reg */
1776 #define WOL_CTL_LINK_CHG_OCC                    BIT_15S
1777 #define WOL_CTL_MAGIC_PKT_OCC                   BIT_14S
1778 #define WOL_CTL_PATTERN_OCC                             BIT_13S
1779
1780 #define WOL_CTL_CLEAR_RESULT                    BIT_12S
1781
1782 #define WOL_CTL_ENA_PME_ON_LINK_CHG             BIT_11S
1783 #define WOL_CTL_DIS_PME_ON_LINK_CHG             BIT_10S
1784 #define WOL_CTL_ENA_PME_ON_MAGIC_PKT    BIT_9S
1785 #define WOL_CTL_DIS_PME_ON_MAGIC_PKT    BIT_8S
1786 #define WOL_CTL_ENA_PME_ON_PATTERN              BIT_7S
1787 #define WOL_CTL_DIS_PME_ON_PATTERN              BIT_6S
1788
1789 #define WOL_CTL_ENA_LINK_CHG_UNIT               BIT_5S
1790 #define WOL_CTL_DIS_LINK_CHG_UNIT               BIT_4S
1791 #define WOL_CTL_ENA_MAGIC_PKT_UNIT              BIT_3S
1792 #define WOL_CTL_DIS_MAGIC_PKT_UNIT              BIT_2S
1793 #define WOL_CTL_ENA_PATTERN_UNIT                BIT_1S
1794 #define WOL_CTL_DIS_PATTERN_UNIT                BIT_0S
1795
1796 #define WOL_CTL_DEFAULT                         \
1797         (WOL_CTL_DIS_PME_ON_LINK_CHG |  \
1798         WOL_CTL_DIS_PME_ON_PATTERN |    \
1799         WOL_CTL_DIS_PME_ON_MAGIC_PKT |  \
1800         WOL_CTL_DIS_LINK_CHG_UNIT |             \
1801         WOL_CTL_DIS_PATTERN_UNIT |              \
1802         WOL_CTL_DIS_MAGIC_PKT_UNIT)
1803
1804 /*      WOL_MATCH_CTL            8 bit  WOL Match Control Reg */
1805 #define WOL_CTL_PATT_ENA(x)                             (BIT_0 << (x))
1806
1807 #define SK_NUM_WOL_PATTERN              7
1808 #define SK_PATTERN_PER_WORD             4
1809 #define SK_BITMASK_PATTERN              7
1810 #define SK_POW_PATTERN_LENGTH   128
1811
1812 #define WOL_LENGTH_MSK          0x7f
1813 #define WOL_LENGTH_SHIFT        8
1814
1815
1816 /* Receive and Transmit Descriptors ******************************************/
1817
1818 /* Transmit Descriptor struct */
1819 typedef struct s_HwTxd {
1820         SK_U32 volatile TxCtrl; /* Transmit Buffer Control Field */
1821         SK_U32  TxNext;                 /* Physical Address Pointer to the next TxD */
1822         SK_U32  TxAdrLo;                /* Physical Tx Buffer Address lower dword */
1823         SK_U32  TxAdrHi;                /* Physical Tx Buffer Address upper dword */
1824         SK_U32  TxStat;                 /* Transmit Frame Status Word */
1825 #ifndef SK_USE_REV_DESC
1826         SK_U16  TxTcpOffs;              /* TCP Checksum Calculation Start Value */
1827         SK_U16  TxRes1;                 /* 16 bit reserved field */
1828         SK_U16  TxTcpWp;                /* TCP Checksum Write Position */
1829         SK_U16  TxTcpSp;                /* TCP Checksum Calculation Start Position */
1830 #else   /* SK_USE_REV_DESC */
1831         SK_U16  TxRes1;                 /* 16 bit reserved field */
1832         SK_U16  TxTcpOffs;              /* TCP Checksum Calculation Start Value */
1833         SK_U16  TxTcpSp;                /* TCP Checksum Calculation Start Position */
1834         SK_U16  TxTcpWp;                /* TCP Checksum Write Position */
1835 #endif  /* SK_USE_REV_DESC */
1836         SK_U32  TxRes2;                 /* 32 bit reserved field */
1837 } SK_HWTXD;
1838
1839 /* Receive Descriptor struct */
1840 typedef struct s_HwRxd {
1841         SK_U32 volatile RxCtrl; /* Receive Buffer Control Field */
1842         SK_U32  RxNext;                 /* Physical Address Pointer to the next RxD */
1843         SK_U32  RxAdrLo;                /* Physical Rx Buffer Address lower dword */
1844         SK_U32  RxAdrHi;                /* Physical Rx Buffer Address upper dword */
1845         SK_U32  RxStat;                 /* Receive Frame Status Word */
1846         SK_U32  RxTiSt;                 /* Receive Time Stamp (from XMAC on GENESIS) */
1847 #ifndef SK_USE_REV_DESC
1848         SK_U16  RxTcpSum1;              /* TCP Checksum 1 */
1849         SK_U16  RxTcpSum2;              /* TCP Checksum 2 */
1850         SK_U16  RxTcpSp1;               /* TCP Checksum Calculation Start Position 1 */
1851         SK_U16  RxTcpSp2;               /* TCP Checksum Calculation Start Position 2 */
1852 #else   /* SK_USE_REV_DESC */
1853         SK_U16  RxTcpSum2;              /* TCP Checksum 2 */
1854         SK_U16  RxTcpSum1;              /* TCP Checksum 1 */
1855         SK_U16  RxTcpSp2;               /* TCP Checksum Calculation Start Position 2 */
1856         SK_U16  RxTcpSp1;               /* TCP Checksum Calculation Start Position 1 */
1857 #endif  /* SK_USE_REV_DESC */
1858 } SK_HWRXD;
1859
1860 /*
1861  * Drivers which use the reverse descriptor feature (PCI_OUR_REG_2)
1862  * should set the define SK_USE_REV_DESC.
1863  * Structures are 'normaly' not endianess dependent. But in
1864  * this case the SK_U16 fields are bound to bit positions inside the
1865  * descriptor. RxTcpSum1 e.g. must start at bit 0 within the 6.th DWord.
1866  * The bit positions inside a DWord are of course endianess dependent and
1867  * swaps if the DWord is swapped by the hardware.
1868  */
1869
1870
1871 /* Descriptor Bit Definition */
1872 /*      TxCtrl          Transmit Buffer Control Field */
1873 /*      RxCtrl          Receive  Buffer Control Field */
1874 #define BMU_OWN                 BIT_31  /* OWN bit: 0=host/1=BMU */
1875 #define BMU_STF                 BIT_30  /* Start of Frame */
1876 #define BMU_EOF                 BIT_29  /* End of Frame */
1877 #define BMU_IRQ_EOB             BIT_28  /* Req "End of Buffer" IRQ */
1878 #define BMU_IRQ_EOF             BIT_27  /* Req "End of Frame" IRQ */
1879 /* TxCtrl specific bits */
1880 #define BMU_STFWD               BIT_26  /* (Tx) Store & Forward Frame */
1881 #define BMU_NO_FCS              BIT_25  /* (Tx) Disable MAC FCS (CRC) generation */
1882 #define BMU_SW                  BIT_24  /* (Tx) 1 bit res. for SW use */
1883 /* RxCtrl specific bits */
1884 #define BMU_DEV_0               BIT_26  /* (Rx) Transfer data to Dev0 */
1885 #define BMU_STAT_VAL    BIT_25  /* (Rx) Rx Status Valid */
1886 #define BMU_TIST_VAL    BIT_24  /* (Rx) Rx TimeStamp Valid */
1887                                                                 /* Bit 23..16:  BMU Check Opcodes */
1888 #define BMU_CHECK               (0x55L<<16)     /* Default BMU check */
1889 #define BMU_TCP_CHECK   (0x56L<<16)     /* Descr with TCP ext */
1890 #define BMU_UDP_CHECK   (0x57L<<16)     /* Descr with UDP ext (YUKON only) */
1891 #define BMU_BBC                 0xffffL /* Bit 15.. 0:  Buffer Byte Counter */
1892
1893 /*      TxStat          Transmit Frame Status Word */
1894 /*      RxStat          Receive Frame Status Word */
1895 /*
1896  *Note: TxStat is reserved for ASIC loopback mode only
1897  *
1898  *      The Bits of the Status words are defined in xmac_ii.h
1899  *      (see XMR_FS bits)
1900  */
1901
1902 /* macros ********************************************************************/
1903
1904 /* Receive and Transmit Queues */
1905 #define Q_R1    0x0000          /* Receive Queue 1 */
1906 #define Q_R2    0x0080          /* Receive Queue 2 */
1907 #define Q_XS1   0x0200          /* Synchronous Transmit Queue 1 */
1908 #define Q_XA1   0x0280          /* Asynchronous Transmit Queue 1 */
1909 #define Q_XS2   0x0300          /* Synchronous Transmit Queue 2 */
1910 #define Q_XA2   0x0380          /* Asynchronous Transmit Queue 2 */
1911
1912 /*
1913  *      Macro Q_ADDR()
1914  *
1915  *      Use this macro to access the Receive and Transmit Queue Registers.
1916  *
1917  * para:
1918  *      Queue   Queue to access.
1919  *                              Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
1920  *      Offs    Queue register offset.
1921  *                              Values: Q_D, Q_DA_L ... Q_T2, Q_T3
1922  *
1923  * usage        SK_IN32(pAC, Q_ADDR(Q_R2, Q_BC), pVal)
1924  */
1925 #define Q_ADDR(Queue, Offs)     (B8_Q_REGS + (Queue) + (Offs))
1926
1927 /*
1928  *      Macro RB_ADDR()
1929  *
1930  *      Use this macro to access the RAM Buffer Registers.
1931  *
1932  * para:
1933  *      Queue   Queue to access.
1934  *                              Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
1935  *      Offs    Queue register offset.
1936  *                              Values: RB_START, RB_END ... RB_LEV, RB_CTRL
1937  *
1938  * usage        SK_IN32(pAC, RB_ADDR(Q_R2, RB_RP), pVal)
1939  */
1940 #define RB_ADDR(Queue, Offs)    (B16_RAM_REGS + (Queue) + (Offs))
1941
1942
1943 /* MAC Related Registers */
1944 #define MAC_1           0       /* belongs to the port near the slot */
1945 #define MAC_2           1       /* belongs to the port far away from the slot */
1946
1947 /*
1948  *      Macro MR_ADDR()
1949  *
1950  *      Use this macro to access a MAC Related Registers inside the ASIC.
1951  *
1952  * para:
1953  *      Mac             MAC to access.
1954  *                              Values: MAC_1, MAC_2
1955  *      Offs    MAC register offset.
1956  *                              Values: RX_MFF_EA, RX_MFF_WP ... LNK_LED_REG,
1957  *                                              TX_MFF_EA, TX_MFF_WP ... TX_LED_TST
1958  *
1959  * usage        SK_IN32(pAC, MR_ADDR(MAC_1, TX_MFF_EA), pVal)
1960  */
1961 #define MR_ADDR(Mac, Offs)      (((Mac) << 7) + (Offs))
1962
1963 #ifdef  SK_LITTLE_ENDIAN
1964 #define XM_WORD_LO      0
1965 #define XM_WORD_HI      1
1966 #else   /* !SK_LITTLE_ENDIAN */
1967 #define XM_WORD_LO      1
1968 #define XM_WORD_HI      0
1969 #endif  /* !SK_LITTLE_ENDIAN */
1970
1971
1972 /*
1973  * macros to access the XMAC (GENESIS only)
1974  *
1975  * XM_IN16(),           to read a 16 bit register (e.g. XM_MMU_CMD)
1976  * XM_OUT16(),          to write a 16 bit register (e.g. XM_MMU_CMD)
1977  * XM_IN32(),           to read a 32 bit register (e.g. XM_TX_EV_CNT)
1978  * XM_OUT32(),          to write a 32 bit register (e.g. XM_TX_EV_CNT)
1979  * XM_INADDR(),         to read a network address register (e.g. XM_SRC_CHK)
1980  * XM_OUTADDR(),        to write a network address register (e.g. XM_SRC_CHK)
1981  * XM_INHASH(),         to read the XM_HSM_CHK register
1982  * XM_OUTHASH()         to write the XM_HSM_CHK register
1983  *
1984  * para:
1985  *      Mac             XMAC to access          values: MAC_1 or MAC_2
1986  *      IoC             I/O context needed for SK I/O macros
1987  *      Reg             XMAC Register to read or write
1988  *      (p)Val  Value or pointer to the value which should be read or written
1989  *
1990  * usage:       XM_OUT16(IoC, MAC_1, XM_MMU_CMD, Value);
1991  */
1992
1993 #define XMA(Mac, Reg)                                                                   \
1994         ((BASE_XMAC_1 + (Mac) * (BASE_XMAC_2 - BASE_XMAC_1)) | ((Reg) << 1))
1995
1996 #define XM_IN16(IoC, Mac, Reg, pVal)                                    \
1997         SK_IN16((IoC), XMA((Mac), (Reg)), (pVal))
1998
1999 #define XM_OUT16(IoC, Mac, Reg, Val)                                    \
2000         SK_OUT16((IoC), XMA((Mac), (Reg)), (Val))
2001
2002 #define XM_IN32(IoC, Mac, Reg, pVal) {                                  \
2003         SK_IN16((IoC), XMA((Mac), (Reg)),                                       \
2004                 (SK_U16 SK_FAR*)&((SK_U16 SK_FAR*)(pVal))[XM_WORD_LO]);         \
2005         SK_IN16((IoC), XMA((Mac), (Reg+2)),                                     \
2006                 (SK_U16 SK_FAR*)&((SK_U16 SK_FAR*)(pVal))[XM_WORD_HI]);         \
2007 }
2008
2009 #define XM_OUT32(IoC, Mac, Reg, Val) {                                                                          \
2010         SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL));                  \
2011         SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16)(((Val) >> 16) & 0xffffL));\
2012 }
2013
2014 /* Remember: we are always writing to / reading from LITTLE ENDIAN memory */
2015
2016 #define XM_INADDR(IoC, Mac, Reg, pVal) {                                \
2017         SK_U16  Word;                                                                           \
2018         SK_U8   *pByte;                                                                         \
2019         pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0];                         \
2020         SK_IN16((IoC), XMA((Mac), (Reg)), &Word);                       \
2021         pByte[0] = (SK_U8)(Word  & 0x00ff);                                     \
2022         pByte[1] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2023         SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word);                     \
2024         pByte[2] = (SK_U8)(Word  & 0x00ff);                                     \
2025         pByte[3] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2026         SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word);                     \
2027         pByte[4] = (SK_U8)(Word  & 0x00ff);                                     \
2028         pByte[5] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2029 }
2030
2031 #define XM_OUTADDR(IoC, Mac, Reg, pVal) {                               \
2032         SK_U8   SK_FAR *pByte;                                                          \
2033         pByte = (SK_U8 SK_FAR *)&((SK_U8 SK_FAR *)(pVal))[0];   \
2034         SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16)                     \
2035                 (((SK_U16)(pByte[0]) & 0x00ff) |                                \
2036                 (((SK_U16)(pByte[1]) << 8) & 0xff00)));                 \
2037         SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16)           \
2038                 (((SK_U16)(pByte[2]) & 0x00ff) |                                \
2039                 (((SK_U16)(pByte[3]) << 8) & 0xff00)));                 \
2040         SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16)           \
2041                 (((SK_U16)(pByte[4]) & 0x00ff) |                                \
2042                 (((SK_U16)(pByte[5]) << 8) & 0xff00)));                 \
2043 }
2044
2045 #define XM_INHASH(IoC, Mac, Reg, pVal) {                                \
2046         SK_U16  Word;                                                                           \
2047         SK_U8   SK_FAR *pByte;                                                          \
2048         pByte = (SK_U8 SK_FAR *)&((SK_U8 SK_FAR *)(pVal))[0];   \
2049         SK_IN16((IoC), XMA((Mac), (Reg)), &Word);                       \
2050         pByte[0] = (SK_U8)(Word  & 0x00ff);                                     \
2051         pByte[1] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2052         SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word);                     \
2053         pByte[2] = (SK_U8)(Word  & 0x00ff);                                     \
2054         pByte[3] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2055         SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word);                     \
2056         pByte[4] = (SK_U8)(Word  & 0x00ff);                                     \
2057         pByte[5] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2058         SK_IN16((IoC), XMA((Mac), (Reg+6)), &Word);                     \
2059         pByte[6] = (SK_U8)(Word  & 0x00ff);                                     \
2060         pByte[7] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2061 }
2062
2063 #define XM_OUTHASH(IoC, Mac, Reg, pVal) {                               \
2064         SK_U8   SK_FAR *pByte;                                                          \
2065         pByte = (SK_U8 SK_FAR *)&((SK_U8 SK_FAR *)(pVal))[0];   \
2066         SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16)                     \
2067                 (((SK_U16)(pByte[0]) & 0x00ff)|                                 \
2068                 (((SK_U16)(pByte[1]) << 8) & 0xff00)));                 \
2069         SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16)           \
2070                 (((SK_U16)(pByte[2]) & 0x00ff)|                                 \
2071                 (((SK_U16)(pByte[3]) << 8) & 0xff00)));                 \
2072         SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16)           \
2073                 (((SK_U16)(pByte[4]) & 0x00ff)|                                 \
2074                 (((SK_U16)(pByte[5]) << 8) & 0xff00)));                 \
2075         SK_OUT16((IoC), XMA((Mac), (Reg+6)), (SK_U16)           \
2076                 (((SK_U16)(pByte[6]) & 0x00ff)|                                 \
2077                 (((SK_U16)(pByte[7]) << 8) & 0xff00)));                 \
2078 }
2079
2080 /*
2081  * macros to access the GMAC (YUKON only)
2082  *
2083  * GM_IN16(),           to read  a 16 bit register (e.g. GM_GP_STAT)
2084  * GM_OUT16(),          to write a 16 bit register (e.g. GM_GP_CTRL)
2085  * GM_IN32(),           to read  a 32 bit register (e.g. GM_)
2086  * GM_OUT32(),          to write a 32 bit register (e.g. GM_)
2087  * GM_INADDR(),         to read  a network address register (e.g. GM_SRC_ADDR_1L)
2088  * GM_OUTADDR(),        to write a network address register (e.g. GM_SRC_ADDR_2L)
2089  * GM_INHASH(),         to read  the GM_MC_ADDR_H1 register
2090  * GM_OUTHASH()         to write the GM_MC_ADDR_H1 register
2091  *
2092  * para:
2093  *      Mac             GMAC to access          values: MAC_1 or MAC_2
2094  *      IoC             I/O context needed for SK I/O macros
2095  *      Reg             GMAC Register to read or write
2096  *      (p)Val  Value or pointer to the value which should be read or written
2097  *
2098  * usage:       GM_OUT16(IoC, MAC_1, GM_GP_CTRL, Value);
2099  */
2100
2101 #define GMA(Mac, Reg)                                                                   \
2102         ((BASE_GMAC_1 + (Mac) * (BASE_GMAC_2 - BASE_GMAC_1)) | (Reg))
2103
2104 #define GM_IN16(IoC, Mac, Reg, pVal)                                    \
2105         SK_IN16((IoC), GMA((Mac), (Reg)), (pVal))
2106
2107 #define GM_OUT16(IoC, Mac, Reg, Val)                                    \
2108         SK_OUT16((IoC), GMA((Mac), (Reg)), (Val))
2109
2110 #define GM_IN32(IoC, Mac, Reg, pVal) {                                  \
2111         SK_IN16((IoC), GMA((Mac), (Reg)),                                       \
2112                 (SK_U16 SK_FAR*)&((SK_U16 SK_FAR*)(pVal))[XM_WORD_LO]);         \
2113         SK_IN16((IoC), GMA((Mac), (Reg+4)),                                     \
2114                 (SK_U16 SK_FAR*)&((SK_U16 SK_FAR*)(pVal))[XM_WORD_HI]);         \
2115 }
2116
2117 #define GM_OUT32(IoC, Mac, Reg, Val) {                                                                          \
2118         SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL));                  \
2119         SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16)(((Val) >> 16) & 0xffffL));\
2120 }
2121
2122 #define GM_INADDR(IoC, Mac, Reg, pVal) {                                \
2123         SK_U16  Word;                                                                           \
2124         SK_U8   *pByte;                                                                         \
2125         pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0];                         \
2126         SK_IN16((IoC), GMA((Mac), (Reg)), &Word);                       \
2127         pByte[0] = (SK_U8)(Word  & 0x00ff);                                     \
2128         pByte[1] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2129         SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word);                     \
2130         pByte[2] = (SK_U8)(Word  & 0x00ff);                                     \
2131         pByte[3] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2132         SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word);                     \
2133         pByte[4] = (SK_U8)(Word  & 0x00ff);                                     \
2134         pByte[5] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2135 }
2136
2137 #define GM_OUTADDR(IoC, Mac, Reg, pVal) {                               \
2138         SK_U8   SK_FAR *pByte;                                                          \
2139         pByte = (SK_U8 SK_FAR *)&((SK_U8 SK_FAR *)(pVal))[0];   \
2140         SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16)                     \
2141                 (((SK_U16)(pByte[0]) & 0x00ff) |                                \
2142                 (((SK_U16)(pByte[1]) << 8) & 0xff00)));                 \
2143         SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16)           \
2144                 (((SK_U16)(pByte[2]) & 0x00ff) |                                \
2145                 (((SK_U16)(pByte[3]) << 8) & 0xff00)));                 \
2146         SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16)           \
2147                 (((SK_U16)(pByte[4]) & 0x00ff) |                                \
2148                 (((SK_U16)(pByte[5]) << 8) & 0xff00)));                 \
2149 }
2150
2151 #define GM_INHASH(IoC, Mac, Reg, pVal) {                                \
2152         SK_U16  Word;                                                                           \
2153         SK_U8   *pByte;                                                                         \
2154         pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0];                         \
2155         SK_IN16((IoC), GMA((Mac), (Reg)), &Word);                       \
2156         pByte[0] = (SK_U8)(Word  & 0x00ff);                                     \
2157         pByte[1] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2158         SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word);                     \
2159         pByte[2] = (SK_U8)(Word  & 0x00ff);                                     \
2160         pByte[3] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2161         SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word);                     \
2162         pByte[4] = (SK_U8)(Word  & 0x00ff);                                     \
2163         pByte[5] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2164         SK_IN16((IoC), GMA((Mac), (Reg+12)), &Word);            \
2165         pByte[6] = (SK_U8)(Word  & 0x00ff);                                     \
2166         pByte[7] = (SK_U8)((Word >> 8) & 0x00ff);                       \
2167 }
2168
2169 #define GM_OUTHASH(IoC, Mac, Reg, pVal) {                               \
2170         SK_U8   *pByte;                                                                         \
2171         pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0];                         \
2172         SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16)                     \
2173                 (((SK_U16)(pByte[0]) & 0x00ff)|                                 \
2174                 (((SK_U16)(pByte[1]) << 8) & 0xff00)));                 \
2175         SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16)           \
2176                 (((SK_U16)(pByte[2]) & 0x00ff)|                                 \
2177                 (((SK_U16)(pByte[3]) << 8) & 0xff00)));                 \
2178         SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16)           \
2179                 (((SK_U16)(pByte[4]) & 0x00ff)|                                 \
2180                 (((SK_U16)(pByte[5]) << 8) & 0xff00)));                 \
2181         SK_OUT16((IoC), GMA((Mac), (Reg+12)), (SK_U16)          \
2182                 (((SK_U16)(pByte[6]) & 0x00ff)|                                 \
2183                 (((SK_U16)(pByte[7]) << 8) & 0xff00)));                 \
2184 }
2185
2186 /*
2187  * Different MAC Types
2188  */
2189 #define SK_MAC_XMAC             0       /* Xaqti XMAC II */
2190 #define SK_MAC_GMAC             1       /* Marvell GMAC */
2191
2192 /*
2193  * Different PHY Types
2194  */
2195 #define SK_PHY_XMAC                     0       /* integrated in XMAC II */
2196 #define SK_PHY_BCOM                     1       /* Broadcom BCM5400 */
2197 #define SK_PHY_LONE                     2       /* Level One LXT1000 */
2198 #define SK_PHY_NAT                      3       /* National DP83891 */
2199 #define SK_PHY_MARV_COPPER      4       /* Marvell 88E1011S */
2200 #define SK_PHY_MARV_FIBER       5       /* Marvell 88E1011S working on fiber */
2201
2202 /*
2203  * PHY addresses (bits 12..8 of PHY address reg)
2204  */
2205 #define PHY_ADDR_XMAC   (0<<8)
2206 #define PHY_ADDR_BCOM   (1<<8)
2207 #define PHY_ADDR_LONE   (3<<8)
2208 #define PHY_ADDR_NAT    (0<<8)
2209
2210 /* GPHY address (bits 15..11 of SMI control reg) */
2211 #define PHY_ADDR_MARV   0
2212
2213 /*
2214  * macros to access the PHY
2215  *
2216  * PHY_READ()           read a 16 bit value from the PHY
2217  * PHY_WRITE()          write a 16 bit value to the PHY
2218  *
2219  * para:
2220  *      IoC             I/O context needed for SK I/O macros
2221  *      pPort   Pointer to port struct for PhyAddr
2222  *      Mac             XMAC to access          values: MAC_1 or MAC_2
2223  *      PhyReg  PHY Register to read or write
2224  *      (p)Val  Value or pointer to the value which should be read or
2225  *                      written.
2226  *
2227  * usage:       PHY_READ(IoC, pPort, MAC_1, PHY_CTRL, Value);
2228  * Warning: a PHY_READ on an uninitialized PHY (PHY still in reset) never
2229  *          comes back. This is checked in DEBUG mode.
2230  */
2231 #ifndef DEBUG
2232 #define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) {                                               \
2233         SK_U16 Mmu;                                                                                                             \
2234                                                                                                                                                 \
2235         XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr);       \
2236         XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal));                                                     \
2237         if ((pPort)->PhyType != SK_PHY_XMAC) {                                                          \
2238                 do {                                                                                                                    \
2239                         XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu);                                        \
2240                 } while ((Mmu & XM_MMU_PHY_RDY) == 0);                                                  \
2241                 XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal));                                             \
2242         }                                                                                                                                       \
2243 }
2244 #else
2245 #define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) {                                               \
2246         SK_U16 Mmu;                                                                                                             \
2247         int __i = 0;                                                                                                            \
2248                                                                                                                                                 \
2249         XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr);       \
2250         XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal));                                                     \
2251         if ((pPort)->PhyType != SK_PHY_XMAC) {                                                          \
2252                 do {                                                                                                                    \
2253                         XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu);                                        \
2254                         __i++;                                                                                                          \
2255                         if (__i > 100000) {                                                                                     \
2256                                 SK_DBG_PRINTF("*****************************\n");               \
2257                                 SK_DBG_PRINTF("PHY_READ on uninitialized PHY\n");               \
2258                                 SK_DBG_PRINTF("*****************************\n");               \
2259                                 break;                                                                                                  \
2260                         }                                                                                                                       \
2261                 } while ((Mmu & XM_MMU_PHY_RDY) == 0);                                                  \
2262                 XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal));                                             \
2263         }                                                                                                                                       \
2264 }
2265 #endif /* DEBUG */
2266
2267 #define PHY_WRITE(IoC, pPort, Mac, PhyReg, Val) {                                               \
2268         SK_U16 Mmu;                                                                                                                     \
2269                                                                                                                                                 \
2270         if ((pPort)->PhyType != SK_PHY_XMAC) {                                                          \
2271                 do {                                                                                                                    \
2272                         XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu);                                        \
2273                 } while ((Mmu & XM_MMU_PHY_BUSY) != 0);                                                 \
2274         }                                                                                                                                       \
2275         XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr);       \
2276         XM_OUT16((IoC), (Mac), XM_PHY_DATA, (Val));                                                     \
2277         if ((pPort)->PhyType != SK_PHY_XMAC) {                                                          \
2278                 do {                                                                                                                    \
2279                         XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu);                                        \
2280                 } while ((Mmu & XM_MMU_PHY_BUSY) != 0);                                                 \
2281         }                                                                                                                                       \
2282 }
2283
2284 /*
2285  *      Macro PCI_C()
2286  *
2287  *      Use this macro to access PCI config register from the I/O space.
2288  *
2289  * para:
2290  *      Addr    PCI configuration register to access.
2291  *                      Values: PCI_VENDOR_ID ... PCI_VPD_ADR_REG,
2292  *
2293  * usage        SK_IN16(pAC, PCI_C(PCI_VENDOR_ID), pVal);
2294  */
2295 #define PCI_C(Addr)     (B7_CFG_SPC + (Addr))   /* PCI Config Space */
2296
2297 /*
2298  *      Macro SK_HW_ADDR(Base, Addr)
2299  *
2300  *      Calculates the effective HW address
2301  *
2302  * para:
2303  *      Base    I/O or memory base address
2304  *      Addr    Address offset
2305  *
2306  * usage:       May be used in SK_INxx and SK_OUTxx macros
2307  *              #define SK_IN8(pAC, Addr, pVal) ...\
2308  *                      *pVal = (SK_U8)inp(SK_HW_ADDR(pAC->Hw.Iop, Addr)))
2309  */
2310 #ifdef SK_MEM_MAPPED_IO
2311 #define SK_HW_ADDR(Base, Addr)  ((Base) + (Addr))
2312 #else  /* SK_MEM_MAPPED_IO */
2313 #define SK_HW_ADDR(Base, Addr)  \
2314                         ((Base) + (((Addr) & 0x7f) | (((Addr) >> 7 > 0) ? 0x80 : 0)))
2315 #endif /* SK_MEM_MAPPED_IO */
2316
2317 #define SZ_LONG (sizeof(SK_U32))
2318
2319 /*
2320  *      Macro SK_HWAC_LINK_LED()
2321  *
2322  *      Use this macro to set the link LED mode.
2323  * para:
2324  *      pAC             Pointer to adapter context struct
2325  *      IoC             I/O context needed for SK I/O macros
2326  *  Port        Port number
2327  *      Mode    Mode to set for this LED
2328  */
2329 #define SK_HWAC_LINK_LED(pAC, IoC, Port, Mode) \
2330         SK_OUT8(IoC, MR_ADDR(Port, LNK_LED_REG), Mode);
2331
2332
2333 /* typedefs *******************************************************************/
2334
2335
2336 /* function prototypes ********************************************************/
2337
2338 #ifdef __cplusplus
2339 }
2340 #endif  /* __cplusplus */
2341
2342 #endif  /* __INC_SKGEHW_H */