1233545Sjchandra/*-
2233545Sjchandra * Copyright (c) 2003-2012 Broadcom Corporation
3233545Sjchandra * All Rights Reserved
4233545Sjchandra *
5233545Sjchandra * Redistribution and use in source and binary forms, with or without
6233545Sjchandra * modification, are permitted provided that the following conditions
7233545Sjchandra * are met:
8233545Sjchandra *
9233545Sjchandra * 1. Redistributions of source code must retain the above copyright
10233545Sjchandra *    notice, this list of conditions and the following disclaimer.
11233545Sjchandra * 2. Redistributions in binary form must reproduce the above copyright
12233545Sjchandra *    notice, this list of conditions and the following disclaimer in
13233545Sjchandra *    the documentation and/or other materials provided with the
14233545Sjchandra *    distribution.
15233545Sjchandra *
16233545Sjchandra * THIS SOFTWARE IS PROVIDED BY BROADCOM ``AS IS'' AND ANY EXPRESS OR
17233545Sjchandra * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18233545Sjchandra * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19233545Sjchandra * ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM OR CONTRIBUTORS BE LIABLE
20233545Sjchandra * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21233545Sjchandra * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22233545Sjchandra * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23233545Sjchandra * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24233545Sjchandra * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25233545Sjchandra * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26233545Sjchandra * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27233545Sjchandra *
28233545Sjchandra * $FreeBSD$
29233545Sjchandra */
30233545Sjchandra
31233545Sjchandra#ifndef __NLM_SGMII_H__
32233545Sjchandra#define	__NLM_SGMII_H__
33233545Sjchandra
34233545Sjchandra/**
35233545Sjchandra* @file_name sgmii.h
36233545Sjchandra* @author Netlogic Microsystems
37233545Sjchandra* @brief Basic definitions of XLP SGMII ports
38233545Sjchandra*/
39233545Sjchandra
40233545Sjchandra#define	SGMII_MAC_CONF1(block, i)		NAE_REG(block, i, 0x00)
41233545Sjchandra#define	SGMII_MAC_CONF2(block, i)		NAE_REG(block, i, 0x01)
42233545Sjchandra#define	SGMII_IPG_IFG(block, i)			NAE_REG(block, i, 0x02)
43233545Sjchandra#define	SGMII_HLF_DUP(block, i)			NAE_REG(block, i, 0x03)
44233545Sjchandra#define	SGMII_MAX_FRAME(block, i)		NAE_REG(block, i, 0x04)
45233545Sjchandra#define	SGMII_TEST(block, i)			NAE_REG(block, i, 0x07)
46233545Sjchandra#define	SGMII_MIIM_CONF(block, i)		NAE_REG(block, i, 0x08)
47233545Sjchandra#define	SGMII_MIIM_CMD(block, i)		NAE_REG(block, i, 0x09)
48233545Sjchandra#define	SGMII_MIIM_ADDR(block, i)		NAE_REG(block, i, 0x0a)
49233545Sjchandra#define	SGMII_MIIM_CTRL(block, i)		NAE_REG(block, i, 0x0b)
50233545Sjchandra#define	SGMII_MIIM_STAT(block, i)		NAE_REG(block, i, 0x0c)
51233545Sjchandra#define	SGMII_MIIM_IND(block, i)		NAE_REG(block, i, 0x0d)
52233545Sjchandra#define	SGMII_IO_CTRL(block, i)			NAE_REG(block, i, 0x0e)
53233545Sjchandra#define	SGMII_IO_STAT(block, i)			NAE_REG(block, i, 0x0f)
54233545Sjchandra#define	SGMII_STATS_MLR(block, i)		NAE_REG(block, i, 0x1f)
55233545Sjchandra#define	SGMII_STATS_TR64(block, i)		NAE_REG(block, i, 0x20)
56233545Sjchandra#define	SGMII_STATS_TR127(block, i)		NAE_REG(block, i, 0x21)
57233545Sjchandra#define	SGMII_STATS_TR255(block, i)		NAE_REG(block, i, 0x22)
58233545Sjchandra#define	SGMII_STATS_TR511(block, i)		NAE_REG(block, i, 0x23)
59233545Sjchandra#define	SGMII_STATS_TR1K(block, i)		NAE_REG(block, i, 0x24)
60233545Sjchandra#define	SGMII_STATS_TRMAX(block, i)		NAE_REG(block, i, 0x25)
61233545Sjchandra#define	SGMII_STATS_TRMGV(block, i)		NAE_REG(block, i, 0x26)
62233545Sjchandra#define	SGMII_STATS_RBYT(block, i)		NAE_REG(block, i, 0x27)
63233545Sjchandra#define	SGMII_STATS_RPKT(block, i)		NAE_REG(block, i, 0x28)
64233545Sjchandra#define	SGMII_STATS_RFCS(block, i)		NAE_REG(block, i, 0x29)
65233545Sjchandra#define	SGMII_STATS_RMCA(block, i)		NAE_REG(block, i, 0x2a)
66233545Sjchandra#define	SGMII_STATS_RBCA(block, i)		NAE_REG(block, i, 0x2b)
67233545Sjchandra#define	SGMII_STATS_RXCF(block, i)		NAE_REG(block, i, 0x2c)
68233545Sjchandra#define	SGMII_STATS_RXPF(block, i)		NAE_REG(block, i, 0x2d)
69233545Sjchandra#define	SGMII_STATS_RXUO(block, i)		NAE_REG(block, i, 0x2e)
70233545Sjchandra#define	SGMII_STATS_RALN(block, i)		NAE_REG(block, i, 0x2f)
71233545Sjchandra#define	SGMII_STATS_RFLR(block, i)		NAE_REG(block, i, 0x30)
72233545Sjchandra#define	SGMII_STATS_RCDE(block, i)		NAE_REG(block, i, 0x31)
73233545Sjchandra#define	SGMII_STATS_RCSE(block, i)		NAE_REG(block, i, 0x32)
74233545Sjchandra#define	SGMII_STATS_RUND(block, i)		NAE_REG(block, i, 0x33)
75233545Sjchandra#define	SGMII_STATS_ROVR(block, i)		NAE_REG(block, i, 0x34)
76233545Sjchandra#define	SGMII_STATS_RFRG(block, i)		NAE_REG(block, i, 0x35)
77233545Sjchandra#define	SGMII_STATS_RJBR(block, i)		NAE_REG(block, i, 0x36)
78233545Sjchandra#define	SGMII_STATS_TBYT(block, i)		NAE_REG(block, i, 0x38)
79233545Sjchandra#define	SGMII_STATS_TPKT(block, i)		NAE_REG(block, i, 0x39)
80233545Sjchandra#define	SGMII_STATS_TMCA(block, i)		NAE_REG(block, i, 0x3a)
81233545Sjchandra#define	SGMII_STATS_TBCA(block, i)		NAE_REG(block, i, 0x3b)
82233545Sjchandra#define	SGMII_STATS_TXPF(block, i)		NAE_REG(block, i, 0x3c)
83233545Sjchandra#define	SGMII_STATS_TDFR(block, i)		NAE_REG(block, i, 0x3d)
84233545Sjchandra#define	SGMII_STATS_TEDF(block, i)		NAE_REG(block, i, 0x3e)
85233545Sjchandra#define	SGMII_STATS_TSCL(block, i)		NAE_REG(block, i, 0x3f)
86233545Sjchandra#define	SGMII_STATS_TMCL(block, i)		NAE_REG(block, i, 0x40)
87233545Sjchandra#define	SGMII_STATS_TLCL(block, i)		NAE_REG(block, i, 0x41)
88233545Sjchandra#define	SGMII_STATS_TXCL(block, i)		NAE_REG(block, i, 0x42)
89233545Sjchandra#define	SGMII_STATS_TNCL(block, i)		NAE_REG(block, i, 0x43)
90233545Sjchandra#define	SGMII_STATS_TJBR(block, i)		NAE_REG(block, i, 0x46)
91233545Sjchandra#define	SGMII_STATS_TFCS(block, i)		NAE_REG(block, i, 0x47)
92233545Sjchandra#define	SGMII_STATS_TXCF(block, i)		NAE_REG(block, i, 0x48)
93233545Sjchandra#define	SGMII_STATS_TOVR(block, i)		NAE_REG(block, i, 0x49)
94233545Sjchandra#define	SGMII_STATS_TUND(block, i)		NAE_REG(block, i, 0x4a)
95233545Sjchandra#define	SGMII_STATS_TFRG(block, i)		NAE_REG(block, i, 0x4b)
96233545Sjchandra#define	SGMII_STATS_CAR1(block, i)		NAE_REG(block, i, 0x4c)
97233545Sjchandra#define	SGMII_STATS_CAR2(block, i)		NAE_REG(block, i, 0x4d)
98233545Sjchandra#define	SGMII_STATS_CAM1(block, i)		NAE_REG(block, i, 0x4e)
99233545Sjchandra#define	SGMII_STATS_CAM2(block, i)		NAE_REG(block, i, 0x4f)
100233545Sjchandra#define	SGMII_MAC_ADDR0_LO(block, i)		NAE_REG(block, i, 0x50)
101233545Sjchandra#define	SGMII_MAC_ADDR0_HI(block, i)		NAE_REG(block, i, 0x51)
102233545Sjchandra#define	SGMII_MAC_ADDR1_LO(block, i)		NAE_REG(block, i, 0x52)
103233545Sjchandra#define	SGMII_MAC_ADDR1_HI(block, i)		NAE_REG(block, i, 0x53)
104233545Sjchandra#define	SGMII_MAC_ADDR2_LO(block, i)		NAE_REG(block, i, 0x54)
105233545Sjchandra#define	SGMII_MAC_ADDR2_HI(block, i)		NAE_REG(block, i, 0x55)
106233545Sjchandra#define	SGMII_MAC_ADDR3_LO(block, i)		NAE_REG(block, i, 0x56)
107233545Sjchandra#define	SGMII_MAC_ADDR3_HI(block, i)		NAE_REG(block, i, 0x57)
108233545Sjchandra#define	SGMII_MAC_ADDR_MASK0_LO(block, i)	NAE_REG(block, i, 0x58)
109233545Sjchandra#define	SGMII_MAC_ADDR_MASK0_HI(block, i)	NAE_REG(block, i, 0x59)
110233545Sjchandra#define	SGMII_MAC_ADDR_MASK1_LO(block, i)	NAE_REG(block, i, 0x5a)
111233545Sjchandra#define	SGMII_MAC_ADDR_MASK1_HI(block, i)	NAE_REG(block, i, 0x5b)
112233545Sjchandra#define	SGMII_MAC_FILTER_CONFIG(block, i)	NAE_REG(block, i, 0x5c)
113233545Sjchandra#define	SGMII_HASHTBL_VEC_B31_0(block, i)	NAE_REG(block, i, 0x60)
114233545Sjchandra#define	SGMII_HASHTBL_VEC_B63_32(block, i)	NAE_REG(block, i, 0x61)
115233545Sjchandra#define	SGMII_HASHTBL_VEC_B95_64(block, i)	NAE_REG(block, i, 0x62)
116233545Sjchandra#define	SGMII_HASHTBL_VEC_B127_96(block, i)	NAE_REG(block, i, 0x63)
117233545Sjchandra#define	SGMII_HASHTBL_VEC_B159_128(block, i)	NAE_REG(block, i, 0x64)
118233545Sjchandra#define	SGMII_HASHTBL_VEC_B191_160(block, i)	NAE_REG(block, i, 0x65)
119233545Sjchandra#define	SGMII_HASHTBL_VEC_B223_192(block, i)	NAE_REG(block, i, 0x66)
120233545Sjchandra#define	SGMII_HASHTBL_VEC_B255_224(block, i)	NAE_REG(block, i, 0x67)
121233545Sjchandra#define	SGMII_HASHTBL_VEC_B287_256(block, i)	NAE_REG(block, i, 0x68)
122233545Sjchandra#define	SGMII_HASHTBL_VEC_B319_288(block, i)	NAE_REG(block, i, 0x69)
123233545Sjchandra#define	SGMII_HASHTBL_VEC_B351_320(block, i)	NAE_REG(block, i, 0x6a)
124233545Sjchandra#define	SGMII_HASHTBL_VEC_B383_352(block, i)	NAE_REG(block, i, 0x6b)
125233545Sjchandra#define	SGMII_HASHTBL_VEC_B415_384(block, i)	NAE_REG(block, i, 0x6c)
126233545Sjchandra#define	SGMII_HASHTBL_VEC_B447_416(block, i)	NAE_REG(block, i, 0x6d)
127233545Sjchandra#define	SGMII_HASHTBL_VEC_B479_448(block, i)	NAE_REG(block, i, 0x6e)
128233545Sjchandra#define	SGMII_HASHTBL_VEC_B511_480(block, i)	NAE_REG(block, i, 0x6f)
129233545Sjchandra
130233545Sjchandra#define	SGMII_NETIOR_VLANTYPE_FILTER(block, i)	NAE_REG(block, i, 0x76)
131233545Sjchandra#define	SGMII_NETIOR_RXDROP_CNTR(block, i)	NAE_REG(block, i, 0x77)
132233545Sjchandra#define	SGMII_NETIOR_PAUSE_QUANTAMULT(block, i)	NAE_REG(block, i, 0x78)
133233545Sjchandra#define	SGMII_NETIOR_MAC_CTRL_OPCODE(block, i)	NAE_REG(block, i, 0x79)
134233545Sjchandra#define	SGMII_NETIOR_MAC_DA_H(block, i)		NAE_REG(block, i, 0x7a)
135233545Sjchandra#define	SGMII_NETIOR_MAC_DA_L(block, i)		NAE_REG(block, i, 0x7b)
136233545Sjchandra#define	SGMII_NET_IFACE_CTRL3(block, i)		NAE_REG(block, i, 0x7c)
137233545Sjchandra#define	SGMII_NETIOR_GMAC_STAT(block, i)	NAE_REG(block, i, 0x7d)
138233545Sjchandra#define	SGMII_NET_IFACE_CTRL2(block, i)		NAE_REG(block, i, 0x7e)
139233545Sjchandra#define	SGMII_NET_IFACE_CTRL(block, i)		NAE_REG(block, i, 0x7f)
140233545Sjchandra
141233545Sjchandra#if !defined(LOCORE) && !defined(__ASSEMBLY__)
142233545Sjchandra/* speed */
143233545Sjchandraenum nlm_sgmii_speed {
144233545Sjchandra	NLM_SGMII_SPEED_10,
145233545Sjchandra	NLM_SGMII_SPEED_100,
146233545Sjchandra	NLM_SGMII_SPEED_1000,
147233545Sjchandra	NLM_SGMII_SPEED_RSVD
148233545Sjchandra};
149233545Sjchandra
150233545Sjchandra/* duplexity */
151233545Sjchandraenum nlm_sgmii_duplex_mode {
152233545Sjchandra	NLM_SGMII_DUPLEX_AUTO,
153233545Sjchandra	NLM_SGMII_DUPLEX_HALF,
154233545Sjchandra	NLM_SGMII_DUPLEX_FULL
155233545Sjchandra};
156233545Sjchandra
157233545Sjchandra/* stats */
158233545Sjchandraenum {
159233545Sjchandra	nlm_sgmii_stats_mlr,
160233545Sjchandra	nlm_sgmii_stats_tr64,
161233545Sjchandra	nlm_sgmii_stats_tr127,
162233545Sjchandra	nlm_sgmii_stats_tr255,
163233545Sjchandra	nlm_sgmii_stats_tr511,
164233545Sjchandra	nlm_sgmii_stats_tr1k,
165233545Sjchandra	nlm_sgmii_stats_trmax,
166233545Sjchandra	nlm_sgmii_stats_trmgv,
167233545Sjchandra	nlm_sgmii_stats_rbyt,
168233545Sjchandra	nlm_sgmii_stats_rpkt,
169233545Sjchandra	nlm_sgmii_stats_rfcs,
170233545Sjchandra	nlm_sgmii_stats_rmca,
171233545Sjchandra	nlm_sgmii_stats_rbca,
172233545Sjchandra	nlm_sgmii_stats_rxcf,
173233545Sjchandra	nlm_sgmii_stats_rxpf,
174233545Sjchandra	nlm_sgmii_stats_rxuo,
175233545Sjchandra	nlm_sgmii_stats_raln,
176233545Sjchandra	nlm_sgmii_stats_rflr,
177233545Sjchandra	nlm_sgmii_stats_rcde,
178233545Sjchandra	nlm_sgmii_stats_rcse,
179233545Sjchandra	nlm_sgmii_stats_rund,
180233545Sjchandra	nlm_sgmii_stats_rovr,
181233545Sjchandra	nlm_sgmii_stats_rfrg,
182233545Sjchandra	nlm_sgmii_stats_rjbr,
183233545Sjchandra	nlm_sgmii_stats_rdummy, /* not used */
184233545Sjchandra	nlm_sgmii_stats_tbyt,
185233545Sjchandra	nlm_sgmii_stats_tpkt,
186233545Sjchandra	nlm_sgmii_stats_tmca,
187233545Sjchandra	nlm_sgmii_stats_tbca,
188233545Sjchandra	nlm_sgmii_stats_txpf,
189233545Sjchandra	nlm_sgmii_stats_tdfr,
190233545Sjchandra	nlm_sgmii_stats_tedf,
191233545Sjchandra	nlm_sgmii_stats_tscl,
192233545Sjchandra	nlm_sgmii_stats_tmcl,
193233545Sjchandra	nlm_sgmii_stats_tlcl,
194233545Sjchandra	nlm_sgmii_stats_txcl,
195233545Sjchandra	nlm_sgmii_stats_tncl,
196233545Sjchandra	nlm_sgmii_stats_tjbr,
197233545Sjchandra	nlm_sgmii_stats_tfcs,
198233545Sjchandra	nlm_sgmii_stats_txcf,
199233545Sjchandra	nlm_sgmii_stats_tovr,
200233545Sjchandra	nlm_sgmii_stats_tund,
201233545Sjchandra	nlm_sgmii_stats_tfrg,
202233545Sjchandra	nlm_sgmii_stats_car1,
203233545Sjchandra	nlm_sgmii_stats_car2,
204233545Sjchandra	nlm_sgmii_stats_cam1,
205233545Sjchandra	nlm_sgmii_stats_cam2
206233545Sjchandra};
207233545Sjchandra
208233545Sjchandravoid nlm_configure_sgmii_interface(uint64_t, int, int, int, int);
209233545Sjchandravoid nlm_sgmii_pcs_init(uint64_t, uint32_t);
210233545Sjchandravoid nlm_nae_setup_mac(uint64_t, int, int, int, int, int, int, int);
211233545Sjchandravoid nlm_nae_setup_rx_mode_sgmii(uint64_t, int, int, int, int, int,
212233545Sjchandra    int, int);
213233545Sjchandravoid nlm_nae_setup_mac_addr_sgmii(uint64_t, int, int, int, uint8_t *);
214233545Sjchandra
215233545Sjchandra#endif /* !(LOCORE) && !(__ASSEMBLY__) */
216233545Sjchandra
217233545Sjchandra#endif
218