4 Copyright (c) 2002 Broadcom Corporation
6 No portions of this material may be reproduced in any form without the
10 Irvine, California 92619
11 All information contained in this document is Broadcom Corporation
12 company private, proprietary, and trade secret.
17 ** ethersw.h Register offsets, bit definitions and structures
18 ** for programming the 3-ports ethernet swith
21 ** Revision 1.0 2001/05/29 GT
22 ** add register definition for MII
24 ** $Id: ethersw.h 241205 2011-02-17 21:57:41Z $
29 #include <bcmtypes.h> //seanl.
32 //*******************************************************
34 // Register/Port Definitions for ethersw
38 // _dp: page address decoding
39 // _d: offset address decoding
41 // _a: register/port address allocation (retired for most of pages)
42 // _w: register/port width or length
43 // _s: register/port input wire instantiation
44 // _g: register/port instantiation
46 // Ways to use register/port during coding:
47 // 1) In the module that needs to use one(or multiple) reg/port, define page register(s)
48 // i/o bundle wiring(s) as input/output, be sure to use pre-defined names for bundle
49 // wirings and never miss or delete and wire bits with a bundle wiring;
50 // 2) Include this file after module port list but before any declared port;
51 // 3) After port declaration, declare any page instantiation define needed to be used in this
52 // module, using defined (page) bundle name(s) with surfix _inatance;
53 // 4) now a register with _g surfix can be used;
54 // 5) Define any bit name(s) after that if this file has pre-defined any of those, or
55 // create any other name(s) alias;
56 // 6) Synthesis tool must remove all the unused wiring bundle bits declared as ports and
57 // all unsed reg bit DFFs to reduce actual used wires and save gates.
58 // 7) Example - coding of box_id[1:0] and dev_id[1:0]; values that need to be sent to
62 //*******************************************************
69 // -------------------------------------------------------------
70 // the following is the definitions of registers for BCM6352
71 // -------------------------------------------------------------
73 // registers page address
74 #define CTLREG_dp 0x0000
75 #define STSREG_dp 0x0100
76 #define MNGMODE_dp 0x0200
77 #define MIBACST_dp 0x0300
78 #define ARLCTL_dp 0x0400
79 #define ARLACCS_dp 0x0500
80 #define SMPACCS_dp 0x0600
81 #define MIC5308_dp 0x0700
83 #define DIAGREG_dp 0x0900 // diagnostic regsters
84 #define CNGMREG_dp 0x0a00 // Congestion management
85 #define MIBDIAG_dp 0x0b00 // MIB diagnostic
86 #define PORT0_MII_dp 0x0c00
87 #define PORT1_MII_dp 0x0d00
88 #define PORT0_MIB_dp 0x0e00
89 #define PORT1_MIB_dp 0x0f00
91 #define SPICTL_d 0xfd // SPI Control Register
92 #define SPISTS_d 0xfe // SPI Status Register
93 // [7] (SPIF): SPI R/W Complete Flag(self-clearing? no!)
94 // [5] (RACK): SPI read data ready ack(self-clearing)
95 // [1] (TXRDY): SMP Tx Ready Flag - should check it every 8 bytes
96 // [0] (RXRDY): SMP Rx Ready Flag - should check it every 8 bytes
101 #define PAGEREG_d 0xff
105 #define TH_PCTL0_d 0x00
108 #define TH_PCTL_RSRV0_b 2
109 #define STP_STATE_b 5
110 #define TH_PCTL1_d 0x04
111 #define TH_PCTL2_d 0x08
112 #define TH_PCTL3_d 0x0c
113 #define TH_PCTL4_d 0x10
114 #define TH_PCTL5_d 0x14
115 #define TH_PCTL6_d 0x18
116 #define TH_PCTL7_d 0x1c
117 #define MII_PCTL_d 0x20
120 #define MIRX_BC_DIS_b 2
121 #define MIRX_MC_DIS_b 3
122 #define MIRX_UC_DIS_b 4
123 #define MISTP_STATE_b 5
124 #define EXP_PCTL_d 0x24
125 #define EXP_PCTL_RSRV0_b 0
126 #define SMP_CTL_d 0x28
127 #define SMP_CTL_RSRV0_b 0
128 #define RX_MCST_DIS_b 2
129 #define RX_BCST_DIS_b 3
130 #define RX_UCST_DIS_b 4
131 #define SWMODE_d 0x2c
132 #define SW_FWDG_MODE_b 0
133 #define SW_FWDG_EN_b 1
134 #define RTRY_LMT_DIS_b 2
135 #define SWMODE_RSRV0_b 3
136 #define PAUSEQT_d 0x30
138 #define PAUSEQT_RSRV0_b 15
139 #define MII_PSTS_d 0x34
145 #define LED_FLSH_CTL_d 0x38
146 #define LED_BLINK_b 0
147 #define LED_FLSH_CTL_RSRV0_b 8
148 #define LEDA_ST_d 0x3c
157 #define LEDB_ST_d 0x40
166 #define LEDC_ST_d 0x44
175 #define MISC_LED_ST_d 0x48
176 #define MISC_LED_RSRV0_b 0
178 #define MII_B_ST_b 10
179 #define MII_C_ST_b 12
180 #define ERROR_ST_b 14
181 #define PRI_CTL0_d 0x4c
182 #define PRI_CTL1_d 0x50
183 #define CPU_PRI_CTL_d 0x54
184 #define PRI_MAP0_d 0x58
185 #define PRI_MAP1_d 0x5c
186 #define CPU_PRI_MAP_d 0x60
190 #define LNKSTS_d 0x00
191 #define LNKSTSCHG_d 0x04
192 #define SPDSTS_d 0x08
193 #define DUPSTS_d 0x0c
194 #define PAUSESTS_d 0x10
195 #define CNGSSTS_d 0x14
196 #define SRCADRCHG_d 0x18
197 #define LSA_PORT0_d 0x20
198 #define LSA_PORT1_d 0x28
199 #define LSA_PORT2_d 0x30
200 #define LSA_PORT3_d 0x38
201 #define LSA_PORT4_d 0x40
202 #define LSA_PORT5_d 0x48
203 #define LSA_PORT6_d 0x50
204 #define LSA_PORT7_d 0x58
205 #define LSA_MIIPORT_d 0x60
206 #define BIST_STS_d 0x68
208 // Management Mode Registers
210 #define GMNGCFG_d 0x00
211 #define RST_MIB_CNTRS_b 0
213 #define GMNGCFG_dRSRV0_b 2
217 #define CHPBOXID_d 0x04
218 #define CHPBOXID_RSRV0_b 0
221 #define MNGPID_d 0x08
225 #define RMONSTEER_d 0x0c
226 #define OR_RMON_RCV_b 0
227 #define RMNSTR_RSRV0_b 9
228 #define SPTAGT_d 0x10
230 #define SPTAGT_RSRV0_b 20
231 #define MIRCAPCTL_d 0x14
232 #define MIR_CAP_PORT_b 0
233 #define MIRCAPCTL_RSRV0_b 11
235 #define IGMIRCTL_d 0x18
236 #define IN_MIR_MSK_b 0
237 #define IGMIRCTL_RSRV0_b 11
238 #define IN_DIV_EN_b 13
239 #define IN_MIR_FLTR_b 14
240 #define IGMIRDIV_d 0x1c
241 #define IN_MIR_DIV_b 0
242 #define IGMIRDIV_RSRV0_b 10
243 #define IGMIRMAC_d 0x20
244 #define IN_MIR_MAC_b 0
245 #define EGMIRCTL_d 0x28
246 #define OUT_MIR_MSK_b 0
247 #define EGMIRCTL_RSRV0_b 11
248 #define OUT_DIV_EN_b 13
249 #define OUT_MIR_FLTR_b 14
250 #define EGMIRDIV_d 0x2c
251 #define OUT_MIR_DIV_b 0
252 #define EGMIRDIV_RSRV0_b 10
253 #define EGMIRMAC_d 0x30
254 #define OUT_MIR_MAC_b 0
256 // MIB Autocast Registers
258 #define ACSTPORT_d 0x00
259 #define MIB_AC_PORTS_b 0
260 #define ACSTPORT_RSRV0_b 11
261 #define ACSTHDPT_d 0x04
262 #define MIB_AC_HDR_b 0
263 #define ACSTHDLT_d 0x08
264 #define MIB_AC_HDR_LEN_b 0
265 #define ACSTHDLT_RSRV0_b 8
266 #define ACSTDA_d 0x10
267 #define MIB_AC_DA_b 0
268 #define ACSTSA_d 0x18
269 #define MIB_AC_SA_b 0
270 #define ACSTTYPE_d 0x20
271 #define MIB_AC_TYPE_b 0
272 #define BRCM_ET_TYPE_df 0
273 #define ACSTRATE_d 0x24
274 #define MIB_AC_RATE_b 0
275 #define MIB_AC_RATE_df 64
277 // ARL Control Registers
279 #define GARLCFG_d 0x00
280 #define HASH_DISABLE_b 0
281 #define SINGLERW_EN_b 1
282 #define GARLCFG_RSRV0_b 2
283 #define BPDU_MCADDR_d 0x08
284 #define BPDU_MC_ADDR_b 0
285 #define GRPADDR1_d 0x10
287 #define PORTVEC1_d 0x18
288 #define PORT_VCTR_b 0
289 #define PORTVEC_RSRV0_b 11
290 #define GRPADDR2_d 0x20
291 #define PORTVEC2_d 0x28
292 #define SEC_SPMSK_d 0x2C
293 #define SEC_DPMSK_d 0x30
297 ** ARL Access registers - memory page 0x05
299 #define ARLA_RWCTL_d 0x00 /* ARL Read/Write Control register */
301 #define ARLA_RWCTL_RSRV0_b 1
302 #define ARL_STRTDN_b 7
303 #define ARLA_MAC_d 0x08 /* ARL MAC Address Index register */
304 #define MAC_ADDR_INDX_b 0
305 #define ARLA_ENTRY0_d 0x10 /* ARL Entry 0 and 1 register */
306 #define ARLA_ENTRY1_d 0x20 /* ARL Entry 0 and 1 register */
307 #define ARL_MACADDR_b 0
311 #define ARLA_ENTRY_RSRV0_b 56
313 #define ARL_STATIC_b 62
314 #define ARL_VALID_b 63
315 #define ARLA_SRCH_CTL_d 0x30 /* ARL Search Control register */
316 #define ARLA_SRCH_ADR_d 0x34 /* ARL Search Address register */
317 #define ARLA_SRCH_RSLT_d 0x38 /* ARL Search Result register */
319 // SMP Access Registers
321 #define SMPIG_PORT_d 0x00
322 #define SMPEG_PORT_d 0x04
323 #define SMPEG_CTL_d 0x08
326 #define SMP_RXRDY_b 2
327 #define SMPIG_STS_d 0x10
328 #define SMP_NEW_FRM_b 0
329 #define SMP_FRM_PRO_b 1
330 #define SMP_TXRDY_b 2
331 #define SMP_FRM_SIZE_b 5
333 // MIC5308 Access Registers
335 #define MIC_PORT0_d 0x00
336 #define MIC_PORT1_d 0x02
337 #define MIC_PORT2_d 0x04
338 #define MIC_PORT3_d 0x06
339 #define MIC_PORT4_d 0x08
340 #define MIC_PORT5_d 0x0a
341 #define MIC_PORT6_d 0x0c
342 #define MIC_PORT7_d 0x0e
343 #define MIC_PORT8_d 0x10
344 #define MIC_PORT9_d 0x12
345 #define MIC_PORTa_d 0x14
346 #define MIC_PORTb_d 0x16
347 #define MIC_PORTc_d 0x18
348 #define MIC_PORTd_d 0x1a
349 #define MIC_PORTe_d 0x1c
350 #define MIC_PORTf_d 0x1e
351 #define MIC_RSRV_d 0x20
353 // MEM Access Registers
355 #define MEMADR_d 0x00
358 #define MEM_STDN_b 19
359 #define MEMDAT_d 0x08
360 #define MIBKILLOVR_d 0x2d
363 ** Port MII registers - memory page 0x0c~0x0d
365 #define MIICTL_d 0x00 /* MII Control register */
366 #define MII_RESET_b 0x8000 /* reset */
367 #define MII_LPBK_b 0x4000 /* loopback */
368 #define MII_FORCE100_b 0x2000 /* force 100Mbs */
369 #define MII_AUTONEG_b 0x1000 /* auto-negotiation */
370 #define MII_FDEPLEX_b 0x0100 /* full-duplex */
371 #define MIISTS_d 0x02 /* MII Status register */
372 #define PHYIDH_d 0x04 /* PHY ID high */
373 #define PHYIDL_d 0x06 /* PHY ID low */
374 #define ANADV_d 0x08 /* Auto-Negotiation Advertisement */
375 #define ANLPA_d 0x0a /* Auto-Negotiation Link Partner Ability */
376 #define ANEXP_d 0x0c /* Auto-Negotiation Expansion */
377 #define MII_RSRV0_d 0x0e
378 #define HNDRD_ACTL_d 0x20
379 #define HNDRD_ASTS_d 0x22
380 #define HNDRD_RECNT_d 0x24
381 #define HNDRD_FCSCNT_d 0x26
382 #define MII_RSRV1_d 0x28
383 #define CHIP_1100ID (CHIPID & 0x000000FF)
384 #if (CHIP_1100ID < 0xB0)
385 #define MII_RSRV4_d 0x2C /* Bit 1 = Gamma 1/8 bit */
386 #define MII_GAMMA_b 0x0002 /* gamma 1/8 bit enabled */
388 #define ACTLSTS_d 0x30
389 #define ASTSSUM_d 0x32
390 #define MII_RSRV2_d 0x34
391 #define AMODE2_d 0x36
392 #define AEGSTS_d 0x38
393 #define MII_RSRV3_d 0x3a
395 #define BRCMTST_d 0x3e
396 #define MII_RSRV_d 0x40
400 #define TxOctets_d 0x00 // 64-bit
401 #define TxDropPkts_d 0x08
402 #define TxGoodPkts_d 0x0c
403 #define MIB_Hole0_d 0x0c
404 #define TxBroadcastPkts_d 0x10
405 #define TxMulticastPkts_d 0x14
406 #define TxUnicastPkts_d 0x18
407 #define TxCollisions_d 0x1c
408 #define TxSingleCollision_d 0x20
409 #define TxMultipleCollision_d 0x24
410 #define TxDeferredTransmit_d 0x28
411 #define TxLateCollision_d 0x2c
412 #define TxExcessiveCollision_d 0x30
413 #define TxFrameInDisc_d 0x34
414 #define TxPausePkts_d 0x38
415 #define TxReserved2_d 0x3c
416 #define TxReserved3_d 0x40
417 #define RxOctets_d 0x44 // 64-bit
418 #define RxUndersizePkts_d 0x4c
419 #define RxPausePkts_d 0x50
420 #define Pkts64Octets_d 0x54
421 #define Pkts65to127Octets_d 0x58
422 #define Pkts128to255Octets_d 0x5c
423 #define Pkts256to511Octets_d 0x60
424 #define Pkts512to1023Octets_d 0x64
425 #define Pkts1024to1522Octets_d 0x68
426 #define RxOversizePkts_d 0x6c
427 #define RxJabbers_d 0x70
428 #define RxAlignmentErrors_d 0x74
429 #define RxFCSErrors_d 0x78
430 #define RxGoodOctets_d 0x7c // 64-bit
431 #define RxDropPkts_d 0x84
432 #define RxUnicastPkts_d 0x88
433 #define RxMulticastPkts_d 0x8c
434 #define RxBroadcastPkt_d 0x90
435 #define RxSAChanges_d 0x94
436 #define RxFragments_d 0x98
437 #define RxExcessSizeDisc_d 0x9c
438 #define RXSymblErr_d 0xA0
439 #define MIB_RSRV_d 0xA4
441 // Diagnostic registers
444 #define PORT0_RAWPORTMAP_d 0x00
445 #define PORT0_FINALPORTMAP_d 0x02
446 #define PORT1_RAWPORTMAP_d 0x04
447 #define PORT1_FINALPORTMAP_d 0x06
448 #define PORT2_RAWPORTMAP_d 0x08
449 #define PORT2_FINALPORTMAP_d 0x0a
450 #define PORT3_RAWPORTMAP_d 0x0c
451 #define PORT3_FINALPORTMAP_d 0x0e
452 #define PORT4_RAWPORTMAP_d 0x10
453 #define PORT4_FINALPORTMAP_d 0x12
454 #define PORT5_RAWPORTMAP_d 0x14
455 #define PORT5_FINALPORTMAP_d 0x16
456 #define PORT6_RAWPORTMAP_d 0x18
457 #define PORT6_FINALPORTMAP_d 0x1a
458 #define PORT7_RAWPORTMAP_d 0x1c
459 #define PORT7_FINALPORTMAP_d 0x1e
460 #define PORT8_RAWPORTMAP_d 0x20
461 #define PORT8_FINALPORTMAP_d 0x22
462 #define PORT9_RAWPORTMAP_d 0x24
463 #define PORT9_FINALPORTMAP_d 0x26
464 #define PORT10_RAWPORTMAP_d 0x28
465 #define PORT10_FINALPORTMAP_d 0x2a
467 #define DIAG_RSRV1_d 0x2c
470 #define BUFCON_BUFCONREQ0_d 0xd0
471 #define BUFCON_BUFCONREQ1_d 0xd2
472 #define BUFCON_BUFCONREQ2_d 0xd4
473 #define BUFCON_BUFCONREQ3_d 0xd6
474 #define BUFCON_BUFCONREQ4_d 0xd8
475 #define BUFCON_BUFCONREQ5_d 0xda
476 #define BUFCON_BUFCONREQ6_d 0xdc
477 #define BUFCON_BUFCONREQ7_d 0xde
478 #define BUFCON_BUFCONREQ8_d 0xe0
479 #define BUFCON_BUFCONREQ9_d 0xe2
480 #define BUFCON_BUFCONREQ10_d 0xe4
481 #define BUFCON_BUFCONREQ11_d 0xe6
482 #define BUFCON_AVAIL_BUF0_d 0xe8
483 #define BUFCON_AVAIL_BUF1_d 0xea
484 #define BUFCON_AVAIL_BUF2_d 0xec
485 #define BUFCON_AVAIL_BUF3_d 0xee
487 #define DIAG_RSRV2_d 0xf0
490 // This is the address MAP for registers in flowcon.
491 // it is not used by the logic but is used by the
494 #define FCON_DIAG_FLOW_d 0x00
495 #define FCON_10_TH_HYST_d 0x02
496 // FCON_10_TH_HYST_d and FCON_10_TH_PAUSE_d
497 #define FCON_10_TH_DROP_d 0x04
498 #define FCON_100_TH_HYST_d 0x06
499 // FCON_100_TH_HYST_d and FCON_100_TH_PAUSE_d
500 #define FCON_100_TH_DROP_d 0x08
501 #define FCON_EXP_TH_HYST_d 0x0a
502 // FCON_EXP_TH_HYST_d and FCON_EXP_TH_PAUSE_d
503 #define FCON_EXP_TH_DROP_d 0x0c
504 #define FCON_TOT_TH_HYST_d 0x0e
505 // FCON_TOT_TH_HYST_d and FCON_TOT_TH_PAUSE_d
506 #define FCON_TOT_TH_DROP_d 0x10
507 #define FCON_TXQ_FULL_TH_d 0x12
508 #define RSRV_FLOWCON0_d 0x14
509 #define FCON_CONG_MAP0_d 0x20
510 #define FCON_CONG_MAP1_d 0x22
511 #define FCON_CONG_MAP2_d 0x24
512 #define FCON_DROP_HIST_d 0x26
513 #define FCON_PAUSE_HIST_d 0x28
514 #define FCON_PEAK_TOTAL_USED_d 0x2a
515 #define FCON_PEAK_TXQ_CNT_d 0x2c
516 #define FCON_PEAK_RXBCNT_d 0x2e
517 #define FCON_FLOWMIX_d 0x30
518 // Not useful now - hchoy
519 #define RSRV_FCONCON1_d 0x32
520 #define DIAG_RSRV_d 0x62