xref: /freebsd/sys/dev/etherswitch/e6000sw/e6000swreg.h (revision 9b2a503a1179e026a4efc0b2e0a910168bc806ed)
15420071dSZbigniew Bodek /*-
25420071dSZbigniew Bodek  * Copyright (c) 2015 Semihalf
35420071dSZbigniew Bodek  * Copyright (c) 2015 Stormshield
45420071dSZbigniew Bodek  * All rights reserved.
55420071dSZbigniew Bodek  *
65420071dSZbigniew Bodek  * Redistribution and use in source and binary forms, with or without
75420071dSZbigniew Bodek  * modification, are permitted provided that the following conditions
85420071dSZbigniew Bodek  * are met:
95420071dSZbigniew Bodek  * 1. Redistributions of source code must retain the above copyright
105420071dSZbigniew Bodek  *    notice, this list of conditions and the following disclaimer.
115420071dSZbigniew Bodek  * 2. Redistributions in binary form must reproduce the above copyright
125420071dSZbigniew Bodek  *    notice, this list of conditions and the following disclaimer in the
135420071dSZbigniew Bodek  *    documentation and/or other materials provided with the distribution.
145420071dSZbigniew Bodek  *
155420071dSZbigniew Bodek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
165420071dSZbigniew Bodek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
175420071dSZbigniew Bodek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
185420071dSZbigniew Bodek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
195420071dSZbigniew Bodek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
205420071dSZbigniew Bodek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
215420071dSZbigniew Bodek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
225420071dSZbigniew Bodek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
235420071dSZbigniew Bodek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
245420071dSZbigniew Bodek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
255420071dSZbigniew Bodek  * SUCH DAMAGE.
265420071dSZbigniew Bodek  *
275420071dSZbigniew Bodek  */
285420071dSZbigniew Bodek 
295420071dSZbigniew Bodek #ifndef _E6000SWREG_H_
305420071dSZbigniew Bodek #define	_E6000SWREG_H_
315420071dSZbigniew Bodek 
325420071dSZbigniew Bodek struct atu_opt {
335420071dSZbigniew Bodek 	uint16_t mac_01;
345420071dSZbigniew Bodek 	uint16_t mac_23;
355420071dSZbigniew Bodek 	uint16_t mac_45;
365420071dSZbigniew Bodek 	uint16_t fid;
375420071dSZbigniew Bodek };
385420071dSZbigniew Bodek 
395420071dSZbigniew Bodek /*
405420071dSZbigniew Bodek  * Definitions for the Marvell 88E6000 series Ethernet Switch.
415420071dSZbigniew Bodek  */
425420071dSZbigniew Bodek 
43091d140cSLuiz Otavio O Souza /* Switch IDs. */
44091d140cSLuiz Otavio O Souza #define	MV88E6141	0x3400
45091d140cSLuiz Otavio O Souza #define	MV88E6341	0x3410
46091d140cSLuiz Otavio O Souza #define	MV88E6352	0x3520
47091d140cSLuiz Otavio O Souza #define	MV88E6172	0x1720
48091d140cSLuiz Otavio O Souza #define	MV88E6176	0x1760
499aba0637SLuiz Otavio O Souza #define	MV88E6190	0x1900
50*9b2a503aSAdrian Chadd #define	MV88E6190X	0x0a00
51091d140cSLuiz Otavio O Souza 
52091d140cSLuiz Otavio O Souza #define	MVSWITCH(_sc, id)	((_sc)->swid == (id))
53d7cecbd1SLuiz Otavio O Souza #define	MVSWITCH_MULTICHIP(_sc)	((_sc)->sw_addr != 0)
54091d140cSLuiz Otavio O Souza 
555420071dSZbigniew Bodek /*
565420071dSZbigniew Bodek  * Switch Registers
575420071dSZbigniew Bodek  */
585420071dSZbigniew Bodek #define	REG_GLOBAL			0x1b
595420071dSZbigniew Bodek #define	REG_GLOBAL2			0x1c
60*9b2a503aSAdrian Chadd #define	REG_PORT(_sc, p)		(((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0 : 0x10) + (p))
615420071dSZbigniew Bodek 
625420071dSZbigniew Bodek #define	REG_NUM_MAX			31
635420071dSZbigniew Bodek 
645420071dSZbigniew Bodek /*
655420071dSZbigniew Bodek  * Per-Port Switch Registers
665420071dSZbigniew Bodek  */
675420071dSZbigniew Bodek #define	PORT_STATUS			0x0
682dd02006SWojciech Macek #define	PORT_STATUS_SPEED_MASK		0x300
692dd02006SWojciech Macek #define	PORT_STATUS_SPEED_10		0
702dd02006SWojciech Macek #define	PORT_STATUS_SPEED_100		1
712dd02006SWojciech Macek #define	PORT_STATUS_SPEED_1000		2
722dd02006SWojciech Macek #define	PORT_STATUS_DUPLEX_MASK		(1 << 10)
732dd02006SWojciech Macek #define	PORT_STATUS_LINK_MASK		(1 << 11)
742dd02006SWojciech Macek #define	PORT_STATUS_PHY_DETECT_MASK	(1 << 12)
752dd02006SWojciech Macek 
765420071dSZbigniew Bodek #define	PSC_CONTROL			0x1
77091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FORCED_SPD		(1 << 13)
785429f5f3SLuiz Otavio O Souza #define	PSC_CONTROL_ALT_SPD		(1 << 12)
79091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_EEE_ON		(1 << 9)
80091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FORCED_EEE		(1 << 8)
81091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FC_ON		(1 << 7)
82091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FORCED_FC		(1 << 6)
83091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_LINK_UP		(1 << 5)
84091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FORCED_LINK		(1 << 4)
85091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FULLDPX		(1 << 3)
86091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_FORCED_DPX		(1 << 2)
87d7cecbd1SLuiz Otavio O Souza #define	PSC_CONTROL_SPD10G		0x3
88d7cecbd1SLuiz Otavio O Souza #define	PSC_CONTROL_SPD2500		PSC_CONTROL_SPD10G
89091d140cSLuiz Otavio O Souza #define	PSC_CONTROL_SPD1000		0x2
905420071dSZbigniew Bodek #define	SWITCH_ID			0x3
915420071dSZbigniew Bodek #define	PORT_CONTROL			0x4
92d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL1			0x5
93d7cecbd1SLuiz Otavio O Souza #define	 PORT_CONTROL1_LAG_PORT		(1 << 14)
94d7cecbd1SLuiz Otavio O Souza #define	 PORT_CONTROL1_LAG_ID_MASK	0xf
95d7cecbd1SLuiz Otavio O Souza #define	 PORT_CONTROL1_LAG_ID_SHIFT	8
96d7cecbd1SLuiz Otavio O Souza #define	 PORT_CONTROL1_FID_MASK		0xf
975420071dSZbigniew Bodek #define	PORT_VLAN_MAP			0x6
985420071dSZbigniew Bodek #define	PORT_VID			0x7
99d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL2			0x8
1005420071dSZbigniew Bodek #define	PORT_ASSOCIATION_VECTOR		0xb
1015420071dSZbigniew Bodek #define	PORT_ATU_CTRL			0xc
1025420071dSZbigniew Bodek #define	RX_COUNTER			0x12
1035420071dSZbigniew Bodek #define	TX_COUNTER			0x13
1045420071dSZbigniew Bodek 
105d7cecbd1SLuiz Otavio O Souza #define	PORT_MASK(_sc)			0x7f
1065420071dSZbigniew Bodek #define	PORT_VID_DEF_VID		0
1075420071dSZbigniew Bodek #define	PORT_VID_DEF_VID_MASK		0xfff
1085420071dSZbigniew Bodek #define	PORT_VID_PRIORITY_MASK		0xc00
1095420071dSZbigniew Bodek 
110d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_DISABLED		0
111d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_BLOCKING		1
112d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_LEARNING		2
113d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_FORWARDING		3
114d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_ENABLE		3
115d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_FRAME		0x0300
116d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL_EGRESS		0x3000
117d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL2_DOT1Q		0x0c00
118d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL2_DISC_TAGGED	(1 << 9)
119d7cecbd1SLuiz Otavio O Souza #define	PORT_CONTROL2_DISC_UNTAGGED	(1 << 8)
1205420071dSZbigniew Bodek 
1215420071dSZbigniew Bodek /* PORT_VLAN fields */
1225420071dSZbigniew Bodek #define	PORT_VLAN_MAP_FID		12
1235420071dSZbigniew Bodek #define	PORT_VLAN_MAP_FID_MASK		0xf000
1240e779c2fSLuiz Otavio O Souza 
1255420071dSZbigniew Bodek /*
1265420071dSZbigniew Bodek  * Switch Global Register 1 accessed via REG_GLOBAL_ADDR
1275420071dSZbigniew Bodek  */
1285420071dSZbigniew Bodek #define	SWITCH_GLOBAL_STATUS		0
129d7cecbd1SLuiz Otavio O Souza #define	SWITCH_GLOBAL_STATUS_IR		(1 << 11)
1305420071dSZbigniew Bodek #define	SWITCH_GLOBAL_CONTROL		4
1315420071dSZbigniew Bodek #define	SWITCH_GLOBAL_CONTROL2		28
1325420071dSZbigniew Bodek 
1335420071dSZbigniew Bodek #define	MONITOR_CONTROL			26
1345420071dSZbigniew Bodek 
135d7cecbd1SLuiz Otavio O Souza /* VTU operation */
136d7cecbd1SLuiz Otavio O Souza #define	VTU_FID				2
137d7cecbd1SLuiz Otavio O Souza #define	VTU_OPERATION			5
138d7cecbd1SLuiz Otavio O Souza #define	VTU_VID				6
139d7cecbd1SLuiz Otavio O Souza #define	VTU_DATA			7
140d7cecbd1SLuiz Otavio O Souza #define	VTU_DATA2			8
141d7cecbd1SLuiz Otavio O Souza 
142*9b2a503aSAdrian Chadd #define	VTU_FID_MASK(_sc)		((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0xfff : 0xff)
143d7cecbd1SLuiz Otavio O Souza #define	VTU_FID_POLICY			(1 << 12)
144d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT_UNMODIFIED		0
145d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT_UNTAGGED		1
146d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT_TAGGED			2
147d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT_DISCARD		3
148*9b2a503aSAdrian Chadd #define	VTU_PPREG(_sc)			((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 8 : 4)
149d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT(_sc, p)		(((p) % VTU_PPREG(_sc)) * (16 / VTU_PPREG(_sc)))
150d7cecbd1SLuiz Otavio O Souza #define	VTU_PORT_MASK			3
151d7cecbd1SLuiz Otavio O Souza #define	VTU_BUSY			(1 << 15)
152d7cecbd1SLuiz Otavio O Souza #define	VTU_VID_VALID			(1 << 12)
153d7cecbd1SLuiz Otavio O Souza #define	VTU_VID_MASK			0xfff
154d7cecbd1SLuiz Otavio O Souza 
155d7cecbd1SLuiz Otavio O Souza /* VTU opcodes */
156d7cecbd1SLuiz Otavio O Souza #define	VTU_OP_MASK			(7 << 12)
157d7cecbd1SLuiz Otavio O Souza #define	VTU_NOP				(0 << 12)
158d7cecbd1SLuiz Otavio O Souza #define	VTU_FLUSH			(1 << 12)
159d7cecbd1SLuiz Otavio O Souza #define	VTU_LOAD			(3 << 12)
160d7cecbd1SLuiz Otavio O Souza #define	VTU_PURGE			(3 << 12)
161d7cecbd1SLuiz Otavio O Souza #define	VTU_GET_NEXT			(4 << 12)
162d7cecbd1SLuiz Otavio O Souza #define	STU_LOAD			(5 << 12)
163d7cecbd1SLuiz Otavio O Souza #define	STU_PURGE			(5 << 12)
164d7cecbd1SLuiz Otavio O Souza #define	STU_GET_NEXT			(6 << 12)
165d7cecbd1SLuiz Otavio O Souza #define	VTU_GET_VIOLATION_DATA		(7 << 12)
166d7cecbd1SLuiz Otavio O Souza #define	VTU_CLEAR_VIOLATION_DATA	(7 << 12)
167d7cecbd1SLuiz Otavio O Souza 
1685420071dSZbigniew Bodek /* ATU operation */
1695420071dSZbigniew Bodek #define	ATU_FID				1
1705420071dSZbigniew Bodek #define	ATU_CONTROL			10
1715420071dSZbigniew Bodek #define	ATU_OPERATION			11
1725420071dSZbigniew Bodek #define	ATU_DATA			12
1735420071dSZbigniew Bodek #define	ATU_MAC_ADDR01			13
1745420071dSZbigniew Bodek #define	ATU_MAC_ADDR23			14
1755420071dSZbigniew Bodek #define	ATU_MAC_ADDR45			15
1765420071dSZbigniew Bodek 
177d7cecbd1SLuiz Otavio O Souza #define	ATU_DATA_LAG                    (1 << 15)
178*9b2a503aSAdrian Chadd #define	ATU_PORT_MASK(_sc)		((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0xfff0 : 0xff0)
179d7cecbd1SLuiz Otavio O Souza #define	ATU_PORT_SHIFT                  4
180d7cecbd1SLuiz Otavio O Souza #define	ATU_LAG_MASK                    0xf0
181d7cecbd1SLuiz Otavio O Souza #define	ATU_LAG_SHIFT                   4
182d7cecbd1SLuiz Otavio O Souza #define	ATU_STATE_MASK                  0xf
1835420071dSZbigniew Bodek #define	ATU_UNIT_BUSY			(1 << 15)
1845420071dSZbigniew Bodek #define	ENTRY_STATE			0xf
1855420071dSZbigniew Bodek 
1865420071dSZbigniew Bodek /* ATU_CONTROL fields */
1875420071dSZbigniew Bodek #define	ATU_CONTROL_AGETIME		4
1885420071dSZbigniew Bodek #define	ATU_CONTROL_AGETIME_MASK	0xff0
1895420071dSZbigniew Bodek #define	ATU_CONTROL_LEARN2ALL		3
1905420071dSZbigniew Bodek 
1915420071dSZbigniew Bodek /* ATU opcode */
192d7cecbd1SLuiz Otavio O Souza #define	ATU_OP_MASK                     (7 << 12)
193d7cecbd1SLuiz Otavio O Souza #define	NO_OPERATION                    (0 << 12)
194d7cecbd1SLuiz Otavio O Souza #define	FLUSH_ALL                       (1 << 12)
195d7cecbd1SLuiz Otavio O Souza #define	FLUSH_NON_STATIC                (2 << 12)
196d7cecbd1SLuiz Otavio O Souza #define	LOAD_FROM_FIB                   (3 << 12)
197d7cecbd1SLuiz Otavio O Souza #define	PURGE_FROM_FIB                  (3 << 12)
198d7cecbd1SLuiz Otavio O Souza #define	GET_NEXT_IN_FIB                 (4 << 12)
199d7cecbd1SLuiz Otavio O Souza #define	FLUSH_ALL_IN_FIB                (5 << 12)
200d7cecbd1SLuiz Otavio O Souza #define	FLUSH_NON_STATIC_IN_FIB         (6 << 12)
201d7cecbd1SLuiz Otavio O Souza #define	GET_VIOLATION_DATA              (7 << 12)
202d7cecbd1SLuiz Otavio O Souza #define	CLEAR_VIOLATION_DATA            (7 << 12)
2035420071dSZbigniew Bodek 
2045420071dSZbigniew Bodek /* ATU Stats */
2055420071dSZbigniew Bodek #define	COUNT_ALL			(0 << 0)
2065420071dSZbigniew Bodek 
2075420071dSZbigniew Bodek /*
2085420071dSZbigniew Bodek  * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR
2095420071dSZbigniew Bodek  */
2105420071dSZbigniew Bodek #define	MGMT_EN_2x			2
2115420071dSZbigniew Bodek #define	MGMT_EN_0x			3
2125420071dSZbigniew Bodek #define	SWITCH_MGMT			5
213d7cecbd1SLuiz Otavio O Souza #define	LAG_MASK			7
214d7cecbd1SLuiz Otavio O Souza #define	LAG_MAPPING			8
2155420071dSZbigniew Bodek #define	ATU_STATS			14
2165420071dSZbigniew Bodek 
2175420071dSZbigniew Bodek #define	MGMT_EN_ALL			0xffff
218d7cecbd1SLuiz Otavio O Souza #define	LAG_UPDATE			(1 << 15)
219d7cecbd1SLuiz Otavio O Souza #define	LAG_MASKNUM_SHIFT		12
220d7cecbd1SLuiz Otavio O Souza #define	LAGID_SHIFT			11
2215420071dSZbigniew Bodek 
2225420071dSZbigniew Bodek /* SWITCH_MGMT fields */
2235420071dSZbigniew Bodek 
2245420071dSZbigniew Bodek #define	SWITCH_MGMT_PRI			0
2255420071dSZbigniew Bodek #define	SWITCH_MGMT_PRI_MASK		7
2265420071dSZbigniew Bodek #define	SWITCH_MGMT_RSVD2CPU		3
2275420071dSZbigniew Bodek #define	SWITCH_MGMT_FC_PRI		4
2285420071dSZbigniew Bodek #define	SWITCH_MGMT_FC_PRI_MASK		(7 << 4)
2295420071dSZbigniew Bodek #define	SWITCH_MGMT_FORCEFLOW		7
2305420071dSZbigniew Bodek 
2315420071dSZbigniew Bodek /* ATU_STATS fields */
2325420071dSZbigniew Bodek 
2335420071dSZbigniew Bodek #define	ATU_STATS_BIN			14
2345420071dSZbigniew Bodek #define	ATU_STATS_FLAG			12
2355420071dSZbigniew Bodek 
236d7cecbd1SLuiz Otavio O Souza /* Offset of SMI registers in multi-chip setup. */
237d7cecbd1SLuiz Otavio O Souza #define	SMI_CMD				0
238d7cecbd1SLuiz Otavio O Souza #define	SMI_DATA			1
239d7cecbd1SLuiz Otavio O Souza 
2405420071dSZbigniew Bodek /*
241d7cecbd1SLuiz Otavio O Souza  * 'Switch Global Registers 2' (REG_GLOBAL2).
2425420071dSZbigniew Bodek  */
243d7cecbd1SLuiz Otavio O Souza 
244d7cecbd1SLuiz Otavio O Souza /* EEPROM registers */
245d7cecbd1SLuiz Otavio O Souza #define	EEPROM_CMD			0x14
246d7cecbd1SLuiz Otavio O Souza #define	 EEPROM_BUSY			(1 << 15)
247d7cecbd1SLuiz Otavio O Souza #define	 EEPROM_READ_CMD		(4 << 12)
248d7cecbd1SLuiz Otavio O Souza #define	 EEPROM_WRITE_CMD		(3 << 12)
249d7cecbd1SLuiz Otavio O Souza #define	 EEPROM_WRITE_EN		(1 << 10)
250d7cecbd1SLuiz Otavio O Souza #define	 EEPROM_DATA_MASK		0xff
251d7cecbd1SLuiz Otavio O Souza #define	EEPROM_ADDR			0x15
252d7cecbd1SLuiz Otavio O Souza 
253d7cecbd1SLuiz Otavio O Souza /* PHY registers */
2545420071dSZbigniew Bodek #define	SMI_PHY_CMD_REG			0x18
255d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_BUSY			(1 << 15)
256d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_MODE_C22		(1 << 12)
257d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C22_WRITE		(1 << 10)
258d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C22_READ		(2 << 10)
259d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_OP_C22_WRITE						\
260d7cecbd1SLuiz Otavio O Souza 	 (SMI_CMD_C22_WRITE | SMI_CMD_BUSY | SMI_CMD_MODE_C22)
261d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_OP_C22_READ						\
262d7cecbd1SLuiz Otavio O Souza 	 (SMI_CMD_C22_READ | SMI_CMD_BUSY | SMI_CMD_MODE_C22)
263d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C45			(0 << 12)
264d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C45_ADDR		(0 << 10)
265d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C45_WRITE		(1 << 10)
266d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_C45_READ		(3 << 10)
267d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_OP_C45_ADDR						\
268d7cecbd1SLuiz Otavio O Souza 	 (SMI_CMD_C45_ADDR | SMI_CMD_BUSY | SMI_CMD_C45)
269d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_OP_C45_WRITE						\
270d7cecbd1SLuiz Otavio O Souza 	 (SMI_CMD_C45_WRITE | SMI_CMD_BUSY | SMI_CMD_C45)
271d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_OP_C45_READ						\
272d7cecbd1SLuiz Otavio O Souza 	 (SMI_CMD_C45_READ | SMI_CMD_BUSY | SMI_CMD_C45)
273d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_DEV_ADDR		5
274d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_DEV_ADDR_MASK		0x3e0
275d7cecbd1SLuiz Otavio O Souza #define	 SMI_CMD_REG_ADDR_MASK		0x1f
2765420071dSZbigniew Bodek #define	SMI_PHY_DATA_REG		0x19
2775420071dSZbigniew Bodek #define	 PHY_DATA_MASK			0xffff
2785420071dSZbigniew Bodek 
2795420071dSZbigniew Bodek #define	PHY_PAGE_REG			22
2805420071dSZbigniew Bodek 
281f7c13d78SZbigniew Bodek /*
282f7c13d78SZbigniew Bodek  * Scratch and Misc register accessed via
283f7c13d78SZbigniew Bodek  * 'Switch Global Registers' (REG_GLOBAL2)
284f7c13d78SZbigniew Bodek  */
285f7c13d78SZbigniew Bodek #define	SCR_AND_MISC_REG		0x1a
286f7c13d78SZbigniew Bodek 
287f7c13d78SZbigniew Bodek #define	SCR_AND_MISC_PTR_CFG		0x7000
288f7c13d78SZbigniew Bodek #define	SCR_AND_MISC_DATA_CFG_MASK	0xf0
289f7c13d78SZbigniew Bodek 
290d7cecbd1SLuiz Otavio O Souza /* SERDES registers. */
291d7cecbd1SLuiz Otavio O Souza #define	E6000SW_SERDES_DEV		4
292d7cecbd1SLuiz Otavio O Souza #define	E6000SW_SERDES_PCS_CTL1		0x1000
293d7cecbd1SLuiz Otavio O Souza #define	E6000SW_SERDES_SGMII_CTL	0x2000
294d7cecbd1SLuiz Otavio O Souza #define	 E6000SW_SERDES_PDOWN		(1 << 11)
295d7cecbd1SLuiz Otavio O Souza 
296d7cecbd1SLuiz Otavio O Souza #define	E6000SW_NUM_VLANS		128
297d7cecbd1SLuiz Otavio O Souza #define	E6000SW_NUM_LAGMASK		8
2985420071dSZbigniew Bodek #define	E6000SW_NUM_PHY_REGS		29
299d7cecbd1SLuiz Otavio O Souza #define	E6000SW_MAX_PORTS		11
3005420071dSZbigniew Bodek #define	E6000SW_DEFAULT_AGETIME		20
3015420071dSZbigniew Bodek #define	E6000SW_RETRIES			100
302f7c13d78SZbigniew Bodek #define	E6000SW_SMI_TIMEOUT		16
3035420071dSZbigniew Bodek 
3045420071dSZbigniew Bodek #endif /* _E6000SWREG_H_ */
305