Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / drivers / net / amd8111e.h
1 /*
2  * Advanced  Micro Devices Inc. AMD8111E Linux Network Driver 
3  * Copyright (C) 2003 Advanced Micro Devices 
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  * 02110-1301, USA.
19  * USA
20
21 Module Name:
22
23     amd8111e.h
24
25 Abstract:
26         
27          AMD8111 based 10/100 Ethernet Controller driver definitions. 
28
29 Environment:
30     
31         Kernel Mode
32
33 Revision History:
34         3.0.0
35            Initial Revision.
36         3.0.1
37 */
38
39 FILE_LICENCE ( GPL2_OR_LATER );
40
41 #ifndef _AMD811E_H
42 #define _AMD811E_H
43
44 /* Command style register access
45
46 Registers CMD0, CMD2, CMD3,CMD7 and INTEN0 uses a write access technique called command style access. It allows the write to selected bits of this register without altering the bits that are not selected. Command style registers are divided into 4 bytes that can be written independently. Higher order bit of each byte is the  value bit that specifies the value that will be written into the selected bits of register. 
47
48 eg., if the value 10011010b is written into the least significant byte of a command style register, bits 1,3 and 4 of the register will be set to 1, and the other bits will not be altered. If the value 00011010b is written into the same byte, bits 1,3 and 4 will be cleared to 0 and the other bits will not be altered.
49
50 */
51
52 /*  Offset for Memory Mapped Registers. */
53 /* 32 bit registers */
54
55 #define  ASF_STAT               0x00    /* ASF status register */
56 #define CHIPID                  0x04    /* Chip ID regsiter */
57 #define MIB_DATA                0x10    /* MIB data register */
58 #define MIB_ADDR                0x14    /* MIB address register */
59 #define STAT0                   0x30    /* Status0 register */
60 #define INT0                    0x38    /* Interrupt0 register */
61 #define INTEN0                  0x40    /* Interrupt0  enable register*/
62 #define CMD0                    0x48    /* Command0 register */
63 #define CMD2                    0x50    /* Command2 register */
64 #define CMD3                    0x54    /* Command3 resiter */
65 #define CMD7                    0x64    /* Command7 register */
66
67 #define CTRL1                   0x6C    /* Control1 register */
68 #define CTRL2                   0x70    /* Control2 register */
69
70 #define XMT_RING_LIMIT          0x7C    /* Transmit ring limit register */
71
72 #define AUTOPOLL0               0x88    /* Auto-poll0 register */
73 #define AUTOPOLL1               0x8A    /* Auto-poll1 register */
74 #define AUTOPOLL2               0x8C    /* Auto-poll2 register */
75 #define AUTOPOLL3               0x8E    /* Auto-poll3 register */
76 #define AUTOPOLL4               0x90    /* Auto-poll4 register */
77 #define AUTOPOLL5               0x92    /* Auto-poll5 register */
78
79 #define AP_VALUE                0x98    /* Auto-poll value register */
80 #define DLY_INT_A               0xA8    /* Group A delayed interrupt register */
81 #define DLY_INT_B               0xAC    /* Group B delayed interrupt register */
82
83 #define FLOW_CONTROL            0xC8    /* Flow control register */
84 #define PHY_ACCESS              0xD0    /* PHY access register */
85
86 #define STVAL                   0xD8    /* Software timer value register */
87
88 #define XMT_RING_BASE_ADDR0     0x100   /* Transmit ring0 base addr register */
89 #define XMT_RING_BASE_ADDR1     0x108   /* Transmit ring1 base addr register */
90 #define XMT_RING_BASE_ADDR2     0x110   /* Transmit ring2 base addr register */
91 #define XMT_RING_BASE_ADDR3     0x118   /* Transmit ring2 base addr register */
92
93 #define RCV_RING_BASE_ADDR0     0x120   /* Transmit ring0 base addr register */
94
95 #define PMAT0                   0x190   /* OnNow pattern register0 */
96 #define PMAT1                   0x194   /* OnNow pattern register1 */
97
98 /* 16bit registers */
99
100 #define XMT_RING_LEN0           0x140   /* Transmit Ring0 length register */
101 #define XMT_RING_LEN1           0x144   /* Transmit Ring1 length register */
102 #define XMT_RING_LEN2           0x148   /* Transmit Ring2 length register */
103 #define XMT_RING_LEN3           0x14C   /* Transmit Ring3 length register */
104
105 #define RCV_RING_LEN0           0x150   /* Receive Ring0 length register */
106
107 #define SRAM_SIZE               0x178   /* SRAM size register */
108 #define SRAM_BOUNDARY           0x17A   /* SRAM boundary register */
109
110 /* 48bit register */
111
112 #define PADR                    0x160   /* Physical address register */
113
114 #define IFS1                    0x18C   /* Inter-frame spacing Part1 register */
115 #define IFS                     0x18D   /* Inter-frame spacing register */
116 #define IPG                     0x18E   /* Inter-frame gap register */
117 /* 64bit register */
118
119 #define LADRF                   0x168   /* Logical address filter register */
120
121
122 /* Register Bit Definitions */
123 typedef enum {
124
125         ASF_INIT_DONE           = (1 << 1),
126         ASF_INIT_PRESENT        = (1 << 0),
127
128 }STAT_ASF_BITS; 
129    
130 typedef enum {
131
132         MIB_CMD_ACTIVE          = (1 << 15 ),
133         MIB_RD_CMD              = (1 << 13 ),
134         MIB_CLEAR               = (1 << 12 ),
135         MIB_ADDRESS             = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)|
136                                         (1 << 4) | (1 << 5),
137 }MIB_ADDR_BITS;
138
139
140 typedef enum {
141         
142         PMAT_DET                = (1 << 12),
143         MP_DET                  = (1 << 11),
144         LC_DET                  = (1 << 10),
145         SPEED_MASK              = (1 << 9)|(1 << 8)|(1 << 7),
146         FULL_DPLX               = (1 << 6),
147         LINK_STATS              = (1 << 5),
148         AUTONEG_COMPLETE        = (1 << 4),
149         MIIPD                   = (1 << 3),
150         RX_SUSPENDED            = (1 << 2),
151         TX_SUSPENDED            = (1 << 1),
152         RUNNING                 = (1 << 0),
153
154 }STAT0_BITS;
155
156 #define PHY_SPEED_10            0x2
157 #define PHY_SPEED_100           0x3
158
159 /* INT0                         0x38, 32bit register */
160 typedef enum {
161
162         INTR                    = (1 << 31),
163         PCSINT                  = (1 << 28), 
164         LCINT                   = (1 << 27),
165         APINT5                  = (1 << 26),
166         APINT4                  = (1 << 25),
167         APINT3                  = (1 << 24),
168         TINT_SUM                = (1 << 23),
169         APINT2                  = (1 << 22),
170         APINT1                  = (1 << 21),
171         APINT0                  = (1 << 20),
172         MIIPDTINT               = (1 << 19),
173         MCCINT                  = (1 << 17),
174         MREINT                  = (1 << 16),
175         RINT_SUM                = (1 << 15),
176         SPNDINT                 = (1 << 14),
177         MPINT                   = (1 << 13),
178         SINT                    = (1 << 12),
179         TINT3                   = (1 << 11),
180         TINT2                   = (1 << 10),
181         TINT1                   = (1 << 9),
182         TINT0                   = (1 << 8),
183         UINT                    = (1 << 7),
184         STINT                   = (1 << 4),
185         RINT0                   = (1 << 0),
186
187 }INT0_BITS;
188
189 typedef enum {
190
191         VAL3                    = (1 << 31),   /* VAL bit for byte 3 */
192         VAL2                    = (1 << 23),   /* VAL bit for byte 2 */
193         VAL1                    = (1 << 15),   /* VAL bit for byte 1 */
194         VAL0                    = (1 << 7),    /* VAL bit for byte 0 */
195
196 }VAL_BITS;
197
198 typedef enum {
199
200         /* VAL3 */
201         LCINTEN                 = (1 << 27),
202         APINT5EN                = (1 << 26),
203         APINT4EN                = (1 << 25),
204         APINT3EN                = (1 << 24),
205         /* VAL2 */
206         APINT2EN                = (1 << 22),
207         APINT1EN                = (1 << 21),
208         APINT0EN                = (1 << 20),
209         MIIPDTINTEN             = (1 << 19),
210         MCCIINTEN               = (1 << 18),
211         MCCINTEN                = (1 << 17),
212         MREINTEN                = (1 << 16),
213         /* VAL1 */
214         SPNDINTEN               = (1 << 14),
215         MPINTEN                 = (1 << 13),
216         TINTEN3                 = (1 << 11),
217         SINTEN                  = (1 << 12),
218         TINTEN2                 = (1 << 10),
219         TINTEN1                 = (1 << 9),
220         TINTEN0                 = (1 << 8),
221         /* VAL0 */
222         STINTEN                 = (1 << 4),
223         RINTEN0                 = (1 << 0),
224
225         INTEN0_CLEAR            = 0x1F7F7F1F, /* Command style register */
226
227 }INTEN0_BITS;           
228
229 typedef enum {
230         /* VAL2 */
231         RDMD0                   = (1 << 16),
232         /* VAL1 */
233         TDMD3                   = (1 << 11),
234         TDMD2                   = (1 << 10),
235         TDMD1                   = (1 << 9),
236         TDMD0                   = (1 << 8),
237         /* VAL0 */
238         UINTCMD                 = (1 << 6),
239         RX_FAST_SPND            = (1 << 5),
240         TX_FAST_SPND            = (1 << 4),
241         RX_SPND                 = (1 << 3),
242         TX_SPND                 = (1 << 2),
243         INTREN                  = (1 << 1),
244         RUN                     = (1 << 0),
245
246         CMD0_CLEAR              = 0x000F0F7F,   /* Command style register */    
247
248 }CMD0_BITS;
249
250 typedef enum {
251
252         /* VAL3 */
253         CONDUIT_MODE            = (1 << 29),
254         /* VAL2 */
255         RPA                     = (1 << 19),
256         DRCVPA                  = (1 << 18),
257         DRCVBC                  = (1 << 17),
258         PROM                    = (1 << 16),
259         /* VAL1 */
260         ASTRP_RCV               = (1 << 13),
261         RCV_DROP0               = (1 << 12),
262         EMBA                    = (1 << 11),
263         DXMT2PD                 = (1 << 10),
264         LTINTEN                 = (1 << 9),
265         DXMTFCS                 = (1 << 8),
266         /* VAL0 */
267         APAD_XMT                = (1 << 6),
268         DRTY                    = (1 << 5),
269         INLOOP                  = (1 << 4),
270         EXLOOP                  = (1 << 3),
271         REX_RTRY                = (1 << 2),
272         REX_UFLO                = (1 << 1),
273         REX_LCOL                = (1 << 0),
274
275         CMD2_CLEAR              = 0x3F7F3F7F,   /* Command style register */
276
277 }CMD2_BITS;
278
279 typedef enum {
280
281         /* VAL3 */
282         ASF_INIT_DONE_ALIAS     = (1 << 29),
283         /* VAL2 */
284         JUMBO                   = (1 << 21),
285         VSIZE                   = (1 << 20),    
286         VLONLY                  = (1 << 19),
287         VL_TAG_DEL              = (1 << 18),    
288         /* VAL1 */
289         EN_PMGR                 = (1 << 14),                    
290         INTLEVEL                = (1 << 13),
291         FORCE_FULL_DUPLEX       = (1 << 12),    
292         FORCE_LINK_STATUS       = (1 << 11),    
293         APEP                    = (1 << 10),    
294         MPPLBA                  = (1 << 9),     
295         /* VAL0 */
296         RESET_PHY_PULSE         = (1 << 2),     
297         RESET_PHY               = (1 << 1),     
298         PHY_RST_POL             = (1 << 0),     
299
300 }CMD3_BITS;
301
302
303 typedef enum {
304
305         /* VAL0 */
306         PMAT_SAVE_MATCH         = (1 << 4),
307         PMAT_MODE               = (1 << 3),
308         MPEN_SW                 = (1 << 1),
309         LCMODE_SW               = (1 << 0),
310
311         CMD7_CLEAR              = 0x0000001B    /* Command style register */
312
313 }CMD7_BITS;
314
315
316 typedef enum {
317
318         RESET_PHY_WIDTH         = (0xF << 16) | (0xF<< 20), /* 0x00FF0000 */
319         XMTSP_MASK              = (1 << 9) | (1 << 8),  /* 9:8 */
320         XMTSP_128               = (1 << 9),     /* 9 */ 
321         XMTSP_64                = (1 << 8),
322         CACHE_ALIGN             = (1 << 4),
323         BURST_LIMIT_MASK        = (0xF << 0 ),
324         CTRL1_DEFAULT           = 0x00010111,
325
326 }CTRL1_BITS;
327
328 typedef enum {
329
330         FMDC_MASK               = (1 << 9)|(1 << 8),    /* 9:8 */
331         XPHYRST                 = (1 << 7),
332         XPHYANE                 = (1 << 6),
333         XPHYFD                  = (1 << 5),
334         XPHYSP                  = (1 << 4) | (1 << 3),  /* 4:3 */
335         APDW_MASK               = (1 << 2) | (1 << 1) | (1 << 0), /* 2:0 */
336
337 }CTRL2_BITS;
338
339 /* XMT_RING_LIMIT               0x7C, 32bit register */
340 typedef enum {
341
342         XMT_RING2_LIMIT         = (0xFF << 16), /* 23:16 */
343         XMT_RING1_LIMIT         = (0xFF << 8),  /* 15:8 */
344         XMT_RING0_LIMIT         = (0xFF << 0),  /* 7:0 */
345
346 }XMT_RING_LIMIT_BITS;
347
348 typedef enum {
349
350         AP_REG0_EN              = (1 << 15),
351         AP_REG0_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
352         AP_PHY0_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
353
354 }AUTOPOLL0_BITS;
355
356 /* AUTOPOLL1                    0x8A, 16bit register */
357 typedef enum {
358
359         AP_REG1_EN              = (1 << 15),
360         AP_REG1_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
361         AP_PRE_SUP1             = (1 << 6),
362         AP_PHY1_DFLT            = (1 << 5),
363         AP_PHY1_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
364
365 }AUTOPOLL1_BITS;
366
367
368 typedef enum {
369
370         AP_REG2_EN              = (1 << 15),
371         AP_REG2_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
372         AP_PRE_SUP2             = (1 << 6),
373         AP_PHY2_DFLT            = (1 << 5),
374         AP_PHY2_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
375
376 }AUTOPOLL2_BITS;
377
378 typedef enum {
379
380         AP_REG3_EN              = (1 << 15),
381         AP_REG3_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
382         AP_PRE_SUP3             = (1 << 6),
383         AP_PHY3_DFLT            = (1 << 5),
384         AP_PHY3_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
385
386 }AUTOPOLL3_BITS;
387
388
389 typedef enum {
390
391         AP_REG4_EN              = (1 << 15),
392         AP_REG4_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
393         AP_PRE_SUP4             = (1 << 6),
394         AP_PHY4_DFLT            = (1 << 5),
395         AP_PHY4_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
396
397 }AUTOPOLL4_BITS;
398
399
400 typedef enum {
401
402         AP_REG5_EN              = (1 << 15),
403         AP_REG5_ADDR_MASK       = (0xF << 8) |(1 << 12),/* 12:8 */
404         AP_PRE_SUP5             = (1 << 6),
405         AP_PHY5_DFLT            = (1 << 5),
406         AP_PHY5_ADDR_MASK       = (0xF << 0) |(1 << 4),/* 4:0 */
407
408 }AUTOPOLL5_BITS;
409
410
411
412
413 /* AP_VALUE                     0x98, 32bit ragister */
414 typedef enum {
415
416         AP_VAL_ACTIVE           = (1 << 31),
417         AP_VAL_RD_CMD           = ( 1 << 29),
418         AP_ADDR                 = (1 << 18)|(1 << 17)|(1 << 16), /* 18:16 */
419         AP_VAL                  = (0xF << 0) | (0xF << 4) |( 0xF << 8) |
420                                   (0xF << 12),  /* 15:0 */
421
422 }AP_VALUE_BITS;
423
424 typedef enum {
425
426         DLY_INT_A_R3            = (1 << 31),
427         DLY_INT_A_R2            = (1 << 30),
428         DLY_INT_A_R1            = (1 << 29),
429         DLY_INT_A_R0            = (1 << 28),
430         DLY_INT_A_T3            = (1 << 27),
431         DLY_INT_A_T2            = (1 << 26),
432         DLY_INT_A_T1            = (1 << 25),
433         DLY_INT_A_T0            = ( 1 << 24),
434         EVENT_COUNT_A           = (0xF << 16) | (0x1 << 20),/* 20:16 */
435         MAX_DELAY_TIME_A        = (0xF << 0) | (0xF << 4) | (1 << 8)|
436                                   (1 << 9) | (1 << 10), /* 10:0 */
437
438 }DLY_INT_A_BITS;
439
440 typedef enum {
441
442         DLY_INT_B_R3            = (1 << 31),
443         DLY_INT_B_R2            = (1 << 30),
444         DLY_INT_B_R1            = (1 << 29),
445         DLY_INT_B_R0            = (1 << 28),
446         DLY_INT_B_T3            = (1 << 27),
447         DLY_INT_B_T2            = (1 << 26),
448         DLY_INT_B_T1            = (1 << 25),
449         DLY_INT_B_T0            = ( 1 << 24),
450         EVENT_COUNT_B           = (0xF << 16) | (0x1 << 20),/* 20:16 */
451         MAX_DELAY_TIME_B        = (0xF << 0) | (0xF << 4) | (1 << 8)| 
452                                   (1 << 9) | (1 << 10), /* 10:0 */
453 }DLY_INT_B_BITS;
454
455
456 /* FLOW_CONTROL                 0xC8, 32bit register */
457 typedef enum {
458
459         PAUSE_LEN_CHG           = (1 << 30),
460         FTPE                    = (1 << 22),
461         FRPE                    = (1 << 21),
462         NAPA                    = (1 << 20),
463         NPA                     = (1 << 19),
464         FIXP                    = ( 1 << 18),
465         FCCMD                   = ( 1 << 16),
466         PAUSE_LEN               = (0xF << 0) | (0xF << 4) |( 0xF << 8) |                                          (0xF << 12),  /* 15:0 */
467
468 }FLOW_CONTROL_BITS;
469
470 /* PHY_ ACCESS                  0xD0, 32bit register */
471 typedef enum {
472
473         PHY_CMD_ACTIVE          = (1 << 31),
474         PHY_WR_CMD              = (1 << 30),
475         PHY_RD_CMD              = (1 << 29),
476         PHY_RD_ERR              = (1 << 28),
477         PHY_PRE_SUP             = (1 << 27),
478         PHY_ADDR                = (1 << 21) | (1 << 22) | (1 << 23)|
479                                         (1 << 24) |(1 << 25),/* 25:21 */
480         PHY_REG_ADDR            = (1 << 16) | (1 << 17) | (1 << 18)|                                                    (1 << 19) | (1 << 20),/* 20:16 */
481         PHY_DATA                = (0xF << 0)|(0xF << 4) |(0xF << 8)|
482                                         (0xF << 12),/* 15:0 */
483
484 }PHY_ACCESS_BITS;
485
486
487 /* PMAT0                        0x190,   32bit register */
488 typedef enum {
489         PMR_ACTIVE              = (1 << 31),
490         PMR_WR_CMD              = (1 << 30),
491         PMR_RD_CMD              = (1 << 29),
492         PMR_BANK                = (1 <<28),
493         PMR_ADDR                = (0xF << 16)|(1 << 20)|(1 << 21)|
494                                         (1 << 22),/* 22:16 */
495         PMR_B4                  = (0xF << 0) | (0xF << 4),/* 15:0 */
496 }PMAT0_BITS;
497
498
499 /* PMAT1                        0x194,   32bit register */
500 typedef enum {
501         PMR_B3                  = (0xF << 24) | (0xF <<28),/* 31:24 */
502         PMR_B2                  = (0xF << 16) |(0xF << 20),/* 23:16 */
503         PMR_B1                  = (0xF << 8) | (0xF <<12), /* 15:8 */
504         PMR_B0                  = (0xF << 0)|(0xF << 4),/* 7:0 */
505 }PMAT1_BITS;
506
507 /************************************************************************/
508 /*                                                                      */
509 /*                      MIB counter definitions                         */
510 /*                                                                      */
511 /************************************************************************/
512
513 #define rcv_miss_pkts                           0x00
514 #define rcv_octets                              0x01
515 #define rcv_broadcast_pkts                      0x02
516 #define rcv_multicast_pkts                      0x03
517 #define rcv_undersize_pkts                      0x04
518 #define rcv_oversize_pkts                       0x05
519 #define rcv_fragments                           0x06
520 #define rcv_jabbers                             0x07
521 #define rcv_unicast_pkts                        0x08
522 #define rcv_alignment_errors                    0x09
523 #define rcv_fcs_errors                          0x0A
524 #define rcv_good_octets                         0x0B
525 #define rcv_mac_ctrl                            0x0C
526 #define rcv_flow_ctrl                           0x0D
527 #define rcv_pkts_64_octets                      0x0E
528 #define rcv_pkts_65to127_octets                 0x0F
529 #define rcv_pkts_128to255_octets                0x10
530 #define rcv_pkts_256to511_octets                0x11
531 #define rcv_pkts_512to1023_octets               0x12
532 #define rcv_pkts_1024to1518_octets              0x13
533 #define rcv_unsupported_opcode                  0x14
534 #define rcv_symbol_errors                       0x15
535 #define rcv_drop_pkts_ring1                     0x16
536 #define rcv_drop_pkts_ring2                     0x17
537 #define rcv_drop_pkts_ring3                     0x18
538 #define rcv_drop_pkts_ring4                     0x19
539 #define rcv_jumbo_pkts                          0x1A
540
541 #define xmt_underrun_pkts                       0x20
542 #define xmt_octets                              0x21
543 #define xmt_packets                             0x22
544 #define xmt_broadcast_pkts                      0x23
545 #define xmt_multicast_pkts                      0x24
546 #define xmt_collisions                          0x25
547 #define xmt_unicast_pkts                        0x26
548 #define xmt_one_collision                       0x27
549 #define xmt_multiple_collision                  0x28
550 #define xmt_deferred_transmit                   0x29
551 #define xmt_late_collision                      0x2A
552 #define xmt_excessive_defer                     0x2B
553 #define xmt_loss_carrier                        0x2C
554 #define xmt_excessive_collision                 0x2D
555 #define xmt_back_pressure                       0x2E
556 #define xmt_flow_ctrl                           0x2F
557 #define xmt_pkts_64_octets                      0x30
558 #define xmt_pkts_65to127_octets                 0x31
559 #define xmt_pkts_128to255_octets                0x32
560 #define xmt_pkts_256to511_octets                0x33
561 #define xmt_pkts_512to1023_octets               0x34
562 #define xmt_pkts_1024to1518_octet               0x35
563 #define xmt_oversize_pkts                       0x36
564 #define xmt_jumbo_pkts                          0x37
565
566 /* ipg parameters */
567 #define DEFAULT_IPG                     0x60
568 #define IFS1_DELTA                      36
569 #define IPG_CONVERGE_JIFFIES (HZ/2)
570 #define IPG_STABLE_TIME 5
571 #define MIN_IPG 96
572 #define MAX_IPG 255
573 #define IPG_STEP        16
574 #define CSTATE  1 
575 #define SSTATE  2 
576
577 /* amd8111e descriptor flag definitions */
578 typedef enum {
579
580         OWN_BIT         =       (1 << 15),
581         ADD_FCS_BIT     =       (1 << 13),
582         LTINT_BIT       =       (1 << 12),
583         STP_BIT         =       (1 << 9),
584         ENP_BIT         =       (1 << 8),
585         KILL_BIT        =       (1 << 6),
586         TCC_VLAN_INSERT =       (1 << 1),
587         TCC_VLAN_REPLACE =      (1 << 1) |( 1<< 0),
588
589 }TX_FLAG_BITS;
590
591 typedef enum {
592         ERR_BIT         =       (1 << 14),
593         FRAM_BIT        =       (1 << 13),
594         OFLO_BIT        =       (1 << 12),
595         CRC_BIT         =       (1 << 11),
596         PAM_BIT         =       (1 << 6),
597         LAFM_BIT        =       (1 << 5),
598         BAM_BIT         =       (1 << 4),
599         TT_VLAN_TAGGED  =       (1 << 3) |(1 << 2),/* 0x000 */
600         TT_PRTY_TAGGED  =       (1 << 3),/* 0x0008 */
601
602 }RX_FLAG_BITS;
603
604 #define RESET_RX_FLAGS          0x0000
605 #define TT_MASK                 0x000c
606 #define TCC_MASK                0x0003
607
608 /* driver ioctl parameters */
609 #define AMD8111E_REG_DUMP_LEN    13*sizeof(u32) 
610
611 /* crc generator constants */
612 #define CRC32 0xedb88320
613 #define INITCRC 0xFFFFFFFF
614
615 /* kernel provided writeq does not write 64 bits into the amd8111e device register instead writes only higher 32bits data into lower 32bits of the register.
616 BUG? */
617 #define  amd8111e_writeq(_UlData,_memMap)   \
618                 writel(*(u32*)(&_UlData), _memMap);     \
619                 writel(*(u32*)((u8*)(&_UlData)+4), _memMap+4)   
620
621 /* maps the external speed options to internal value */
622 typedef enum {
623         SPEED_AUTONEG,
624         SPEED10_HALF,
625         SPEED10_FULL,
626         SPEED100_HALF,
627         SPEED100_FULL,
628 }EXT_PHY_OPTION;
629
630
631 #endif /* _AMD8111E_H */
632