source: svn/newcon3bcm2_21bu/rockford/bsp/bcm97552/common/bcmemac.h @ 76

Last change on this file since 76 was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 15.0 KB
Line 
1/***********************************************************************/
2/*                                                                     */
3/*   MODULE: bcmemac.h                                             */
4/*   DATE:    96/12/19                                                 */
5/*   PURPOSE: Define addresses of major hardware components of         */
6/*            BCM711X                                                  */
7/*                                                                     */
8/***********************************************************************/
9#ifndef __BCMEMAC_H
10#define __BCMEMAC_H
11
12#if __cplusplus
13extern "C" {
14#endif
15
16#define ENET_MAC_ADR_BASE               0xb0080000
17#define EMAC_DMA_BASE                   0xb0082400
18#if BCHP_CHIP == 7401
19#if defined(BCHP_REV_C0)
20#define EMAC_RX_DESC_BASE       0xb0082800      /* MAC DMA Rx Descriptor word (1024 bytes) */
21#define EMAC_TX_DESC_BASE       0xb0082C00      /* MAC DMA Tx Descriptor word (1024 bytes) (2048 total) */
22#define EMAC_DESC_SIZE          512
23#else
24#define EMAC_RX_DESC_BASE       0xb0082000      /* MAC DMA Rx Descriptor word (512 bytes) */
25#define EMAC_TX_DESC_BASE       0xb0082200      /* MAC DMA Tx Descriptor word (512 bytes) (1024 total) */
26#define EMAC_DESC_SIZE          256
27#endif
28#else
29#define EMAC_RX_DESC_BASE       0xb0082800      /* MAC DMA Rx Descriptor word (1024 bytes) */
30#define EMAC_TX_DESC_BASE       0xb0082C00      /* MAC DMA Tx Descriptor word (1024 bytes) (2048 total) */
31#define EMAC_DESC_SIZE          512
32#endif
33
34
35#define EMAC ((volatile EmacRegisters * const) ENET_MAC_ADR_BASE)
36
37
38#ifndef _ASMLANGUAGE
39
40/*
41** DMA Channel Configuration
42*/
43typedef struct DmaChannelCfg {
44  unsigned long cfg;                    /* (00) assorted configuration */
45#define         DMA_BURST_HALT  0x00000004  /* idle after finish current memory burst */
46#define         DMA_PKT_HALT    0x00000002  /* idle after an EOP flag is detected */
47#define         DMA_ENABLE      0x00000001  /* set to enable channel */
48  unsigned long intStat;                /* (04) interrupts control and status */
49  unsigned long intMask;                /* (08) interrupts mask */
50#define         DMA_BUFF_DONE   0x00000001  /* buffer done */
51#define         DMA_DONE        0x00000002  /* packet xfer complete */
52#define         DMA_NO_DESC     0x00000004  /* no valid descriptors */
53  unsigned long maxBurst;               /* (0C) max burst length permitted */
54  unsigned long descPtr;                                /* (10) iudma base descriptor pointer */
55
56  /* Unused words */
57  unsigned long resv[27];
58} DmaChannelCfg;
59
60/*
61** DMA State RAM (1 .. 16)
62*/
63typedef struct DmaStateRam {
64  unsigned long baseDescPtr;            /* (00) descriptor ring start address */
65  unsigned long state_data;             /* (04) state/bytes done/ring offset */
66  unsigned long desc_len_status;        /* (08) buffer descriptor status and len */
67  unsigned long desc_base_bufptr;       /* (0C) buffer descrpitor current processing */
68} DmaStateRam;
69
70/*
71** DMA Registers
72*/
73typedef struct DmaRegs {
74#define DMA_MASTER_EN           0x00000001
75#define DMA_FLOWC_CH1_EN        0x00000002
76#define DMA_FLOWC_CH3_EN        0x00000004
77#define DMA_NUM_CHS_MASK        0x0f000000
78#define DMA_NUM_CHS_SHIFT       24
79#define DMA_FLOWCTL_MASK        0x30000000
80#define DMA_FLOWCTL_CH1         0x10000000
81#define DMA_FLOWCTL_CH3         0x20000000
82#define DMA_FLOWCTL_SHIFT       28
83    unsigned long controller_cfg;              /* (00) controller configuration */
84
85    /* Flow control */
86    unsigned long flowctl_ch1_thresh_lo;       /* (04) EMAC1 RX DMA channel */
87    unsigned long flowctl_ch1_thresh_hi;       /* (08) EMAC1 RX DMA channel */
88    unsigned long flowctl_ch1_alloc;           /* (0C) EMAC1 RX DMA channel */
89   
90    unsigned long enet_iudma_rev;              /* (10) Enet rev             */
91    unsigned long enet_iudma_tstctl;           /* (14) Enet test control    */
92
93#define SCB_IRQ   0x01
94#define IUDMA_IRQ 0x02
95#define EMAC_IRQ  0x04
96#define EPHYS_IRQ 0x08
97#define GISB_IRQ  0x10
98    unsigned long enet_iudma_pci_irq_sts;      /* (18) Enet pci intr status */
99        unsigned long enet_iudma_pci_irq_msk;      /* (1C) Enet pci intr mask   */
100        unsigned long enet_iudma_r5k_irq_sts;      /* (20) Enet r5k intr status */
101        unsigned long enet_iudma_r5k_irq_msk;      /* (24) Enet r5k intr mask   */
102
103    unsigned long enet_iudma_diag_ctl;         /* (28) Enet diag control    */
104        unsigned long enet_iudma_diag_rdbk;        /* (2C) Enet diag readback   */
105       
106#if 0 /* new to C0/C1; enable when ready to add support */
107    unsigned long resv1[4];                    /* (30-3F) Unused */
108
109        unsigned long enet_iudma_desc_alloc;       /* (40) IUDMA RX Descriptor Allocation  */
110        unsigned long enet_iudma_desc_thres;       /* (44) IUDMA RX Descriptor Timeout     */
111        unsigned long enet_iudma_diag_timeout;     /* (48) IUDMA RX Descriptor IRQ timeout */
112        unsigned long enet_iudma_desc_irq_sts;     /* (4C) IUDMA RX Descriptor IRQ status  */
113        unsigned long enet_iudma_desc_irq_mask;    /* (50) IUDMA RX Descriptor IRQ mask    */
114
115    unsigned long resv2[43];                   /* (54-FF) Unused */
116#else
117    unsigned long resv[52];                    /* (30-FF) Unused */
118#endif
119   
120    /* Per channel registers/state ram */
121    DmaChannelCfg chcfg[2];                   /* (100) Channel configuration */ 
122} DmaRegs;
123
124/*
125** DMA Buffer
126*/
127typedef struct DmaDesc {
128  unsigned long length_status;    /* We HAVE TO access them in 32 bit words */
129
130#define          DMA_DESC_USEFPM    0x80000000
131#define          DMA_DESC_MULTICAST 0x40000000
132#define          DMA_DESC_BUFLENGTH 0x0fff0000
133
134#define          DMA_OWN        0x8000  /* cleared by DMA, set by SW */
135#define          DMA_EOP        0x4000  /* last buffer in packet */
136#define          DMA_SOP        0x2000  /* first buffer in packet */
137#define          DMA_WRAP       0x1000  /* */
138#define          DMA_APPEND_CRC 0x0100
139
140/* EMAC Descriptor Status definitions */
141#define          EMAC_MISS      0x0080  /* framed address recognition failed (promiscuous) */
142#define          EMAC_BRDCAST   0x0040  /* DA is Broadcast */
143#define          EMAC_MULT      0x0020  /* DA is multicast */
144#define          EMAC_LG        0x0010  /* frame length > RX_LENGTH register value */
145#define          EMAC_NO        0x0008  /* Non-Octet aligned */
146#define          EMAC_RXER      0x0004  /* RX_ERR on MII while RX_DV assereted */
147#define          EMAC_CRC_ERROR 0x0002  /* CRC error */
148#define          EMAC_OV        0x0001  /* Overflow */
149
150/* HDLC Descriptor Status definitions */
151#define          DMA_HDLC_TX_ABORT      0x0100
152#define          DMA_HDLC_RX_OVERRUN    0x4000
153#define          DMA_HDLC_RX_TOO_LONG   0x2000
154#define          DMA_HDLC_RX_CRC_OK     0x1000
155#define          DMA_HDLC_RX_ABORT      0x0100
156
157  unsigned long address;                /* address of data */
158} DmaDesc;
159
160
161/*
162** EMAC transmit MIB counters
163*/
164typedef struct EmacTxMib {
165  unsigned long tx_good_octets;         /* (200) good byte count */
166  unsigned long tx_good_pkts;           /* (204) good pkt count */
167  unsigned long tx_octets;              /* (208) good and bad byte count */
168  unsigned long tx_pkts;                /* (20c) good and bad pkt count */
169  unsigned long tx_broadcasts_pkts;     /* (210) good broadcast packets */
170  unsigned long tx_multicasts_pkts;     /* (214) good mulitcast packets */
171  unsigned long tx_len_64;              /* (218) RMON tx pkt size buckets */
172  unsigned long tx_len_65_to_127;       /* (21c) */
173  unsigned long tx_len_128_to_255;      /* (220) */
174  unsigned long tx_len_256_to_511;      /* (224) */
175  unsigned long tx_len_512_to_1023;     /* (228) */
176  unsigned long tx_len_1024_to_max;     /* (22c) */
177  unsigned long tx_jabber_pkts;         /* (230) > 1518 with bad crc */
178  unsigned long tx_oversize_pkts;       /* (234) > 1518 with good crc */
179  unsigned long tx_fragment_pkts;       /* (238) < 63   with bad crc */
180  unsigned long tx_underruns;           /* (23c) fifo underrun */
181  unsigned long tx_total_cols;          /* (240) total collisions in all tx pkts */
182  unsigned long tx_single_cols;         /* (244) tx pkts with single collisions */
183  unsigned long tx_multiple_cols;       /* (248) tx pkts with multiple collisions */
184  unsigned long tx_excessive_cols;      /* (24c) tx pkts with excessive cols */
185  unsigned long tx_late_cols;           /* (250) tx pkts with late cols */
186  unsigned long tx_defered;             /* (254) tx pkts deferred */
187  unsigned long tx_carrier_lost;        /* (258) tx pkts with CRS lost */
188  unsigned long tx_pause_pkts;          /* (25c) tx pause pkts sent */
189#define NumEmacTxMibVars        24
190} EmacTxMib;
191
192/*
193** EMAC receive MIB counters
194*/
195typedef struct EmacRxMib {
196  unsigned long rx_good_octets;         /* (280) good byte count */
197  unsigned long rx_good_pkts;           /* (284) good pkt count */
198  unsigned long rx_octets;              /* (288) good and bad byte count */
199  unsigned long rx_pkts;                /* (28c) good and bad pkt count */
200  unsigned long rx_broadcasts_pkts;     /* (290) good broadcast packets */
201  unsigned long rx_multicasts_pkts;     /* (294) good mulitcast packets */
202  unsigned long rx_len_64;              /* (298) RMON rx pkt size buckets */
203  unsigned long rx_len_65_to_127;       /* (29c) */
204  unsigned long rx_len_128_to_255;      /* (2a0) */
205  unsigned long rx_len_256_to_511;      /* (2a4) */
206  unsigned long rx_len_512_to_1023;     /* (2a8) */
207  unsigned long rx_len_1024_to_max;     /* (2ac) */
208  unsigned long rx_jabber_pkts;         /* (2b0) > 1518 with bad crc */
209  unsigned long rx_oversize_pkts;       /* (2b4) > 1518 with good crc */
210  unsigned long rx_fragment_pkts;       /* (2b8) < 63   with bad crc */
211  unsigned long rx_missed_pkts;         /* (2bc) missed packets */
212  unsigned long rx_crc_align_errs;      /* (2c0) both or either */
213  unsigned long rx_undersize;           /* (2c4) < 63   with good crc */
214  unsigned long rx_crc_errs;            /* (2c8) crc errors (only) */
215  unsigned long rx_align_errs;          /* (2cc) alignment errors (only) */
216  unsigned long rx_symbol_errs;         /* (2d0) pkts with RXERR assertions (symbol errs) */
217  unsigned long rx_pause_pkts;          /* (2d4) MAC control, PAUSE */
218  unsigned long rx_nonpause_pkts;       /* (2d8) MAC control, not PAUSE */
219#define NumEmacRxMibVars        23
220} EmacRxMib;
221
222typedef struct EmacRegisters {
223  unsigned long rxControl;              /* (00) receive control */
224#define          EMAC_PM_REJ    0x80    /*      - reject DA match in PMx regs */
225#define          EMAC_UNIFLOW   0x40    /*      - accept cam match fc */
226#define          EMAC_FC_EN     0x20    /*      - enable flow control */
227#define          EMAC_LOOPBACK  0x10    /*      - loopback */
228#define          EMAC_PROM      0x08    /*      - promiscuous */
229#define          EMAC_RDT       0x04    /*      - ignore transmissions */
230#define          EMAC_ALL_MCAST 0x02    /*      - ignore transmissions */
231#define          EMAC_NO_BCAST  0x01    /*      - ignore transmissions */
232
233
234  unsigned long rxMaxLength;            /* (04) receive max length */
235  unsigned long txMaxLength;            /* (08) transmit max length */
236  unsigned long unused1[1];
237  unsigned long mdioFreq;               /* (10) mdio frequency */
238#define          EMAC_MII_PRE_EN 0x00000080 /* prepend preamble sequence */
239#define          EMAC_MDIO_PRE   0x00000080  /*      - enable MDIO preamble */
240#define          EMAC_MDC_FREQ   0x0000007f  /*      - mdio frequency */
241
242  unsigned long mdioData;               /* (14) mdio data */
243#define          MDIO_WR        0x50020000 /*   - write framing */
244#define          MDIO_RD        0x60020000 /*   - read framing */
245#define          MDIO_PMD_SHIFT  23
246#define          MDIO_REG_SHIFT  18
247
248  unsigned long intMask;                /* (18) int mask */
249  unsigned long intStatus;              /* (1c) int status */
250#define          EMAC_FLOW_INT  0x04    /*      - flow control event */
251#define          EMAC_MIB_INT   0x02    /*      - mib event */
252#define          EMAC_MDIO_INT  0x01    /*      - mdio event */
253
254  unsigned long unused2[3];
255  unsigned long config;                 /* (2c) config */
256#define          EMAC_ENABLE    0x001   /*      - enable emac */
257#define          EMAC_DISABLE   0x002   /*      - disable emac */
258#define          EMAC_SOFT_RST  0x004   /*      - soft reset */
259#define          EMAC_SOFT_RESET 0x004  /*      - emac soft reset */
260#define          EMAC_EXT_PHY   0x008   /*      - external PHY select */
261
262  unsigned long txControl;              /* (30) transmit control */
263#define          EMAC_FD        0x001   /*      - full duplex */
264#define          EMAC_FLOWMODE  0x002   /*      - flow mode */
265#define          EMAC_NOBKOFF   0x004   /*      - no backoff in  */
266#define          EMAC_SMALLSLT  0x008   /*      - small slot time */
267
268  unsigned long txThreshold;            /* (34) transmit threshold */
269  unsigned long mibControl;             /* (38) mib control */
270#define          EMAC_NO_CLEAR  0x001   /* don't clear on read */
271
272  unsigned long unused3[7];             /* (3c - 54) = 7 longs */
273
274  unsigned long pm0DataLo;              /* (58) perfect match 0 data lo */
275  unsigned long pm0DataHi;              /* (5C) perfect match 0 data hi (15:0) */
276  unsigned long pm1DataLo;              /* (60) perfect match 1 data lo */
277  unsigned long pm1DataHi;              /* (64) perfect match 1 data hi (15:0) */
278  unsigned long pm2DataLo;              /* (68) perfect match 2 data lo */
279  unsigned long pm2DataHi;              /* (6C) perfect match 2 data hi (15:0) */
280  unsigned long pm3DataLo;              /* (70) perfect match 3 data lo */
281  unsigned long pm3DataHi;              /* (74) perfect match 3 data hi (15:0) */
282  unsigned long pm4DataLo;              /* (78) perfect match 4 data lo */
283  unsigned long pm4DataHi;              /* (7c) perfect match 4 data hi (15:0) */
284  unsigned long pm5DataLo;              /* (80) perfect match 5 data lo */
285  unsigned long pm5DataHi;              /* (84) perfect match 5 data hi (15:0) */
286  unsigned long pm6DataLo;              /* (88) perfect match 6 data lo */
287  unsigned long pm6DataHi;              /* (8c) perfect match 6 data hi (15:0) */
288  unsigned long pm7DataLo;              /* (90) perfect match 7 data lo */
289  unsigned long pm7DataHi;              /* (94) perfect match 7 data hi (15:0) */
290#define          EMAC_CAM_V   0x10000  /*      - cam index */
291#define          EMAC_CAM_VALID 0x00010000
292
293  unsigned long unused4[90];            /* (98-1fc) */
294
295  EmacTxMib     tx_mib;                 /* (200) emac tx mib */
296  unsigned long unused5[8];             /* (260-27c) */
297
298  EmacRxMib     rx_mib;                 /* (280) rx mib */
299
300} EmacRegisters;
301
302/* register offsets for subrouting access */
303#define EMAC_RX_CONTROL         0x00
304#define EMAC_RX_MAX_LENGTH      0x04
305#define EMAC_TX_MAC_LENGTH      0x08
306#define EMAC_MDIO_FREQ          0x10
307#define EMAC_MDIO_DATA          0x14
308#define EMAC_INT_MASK           0x18
309#define EMAC_INT_STATUS         0x1C
310#ifndef INCLUDE_DOCSIS_APP
311/* Does not exist in the internal EMAC core int he bcm7110  */
312#define EMAC_CAM_DATA_LO        0x20
313#define EMAC_CAM_DATA_HI        0x24
314#define EMAC_CAM_CONTROL        0x28
315#endif
316#define EMAC_CONTROL            0x2C
317#define EMAC_TX_CONTROL         0x30
318#define EMAC_TX_THRESHOLD       0x34
319#define EMAC_MIB_CONTROL        0x38
320
321
322#endif /* _ASMLANGUAGE */
323
324
325#if __cplusplus
326}
327#endif
328
329#endif
Note: See TracBrowser for help on using the repository browser.