summaryrefslogtreecommitdiffstats
path: root/sys/dev/etherswitch/e6000sw/e6000swreg.h
blob: b8cdfe32a6f00336f4183f7f8a562b9274daddf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/*-
 * Copyright (c) 2015 Semihalf
 * Copyright (c) 2015 Stormshield
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 *
 */

#ifndef _E6000SWREG_H_
#define _E6000SWREG_H_

struct atu_opt {
	uint16_t mac_01;
	uint16_t mac_23;
	uint16_t mac_45;
	uint16_t fid;
};

/*
 * Definitions for the Marvell 88E6000 series Ethernet Switch.
 */

#define CPU_PORT			0x5

/*
 * Switch Registers
 */
#define REG_GLOBAL			0x1b
#define REG_GLOBAL2			0x1c
#define REG_PORT(p)			(0x10 + (p))

#define REG_NUM_MAX			31

/*
 * Per-Port Switch Registers
 */
#define PORT_STATUS			0x0
#define PSC_CONTROL			0x1
#define SWITCH_ID			0x3
#define PORT_CONTROL			0x4
#define PORT_CONTROL_1			0x5
#define PORT_VLAN_MAP			0x6
#define PORT_VID			0x7
#define PORT_ASSOCIATION_VECTOR		0xb
#define PORT_ATU_CTRL			0xc
#define RX_COUNTER			0x12
#define TX_COUNTER			0x13

#define PORT_VID_DEF_VID		0
#define PORT_VID_DEF_VID_MASK		0xfff
#define PORT_VID_PRIORITY_MASK		0xc00

#define PORT_CONTROL_ENABLE		0x3

/* PORT_VLAN fields */
#define PORT_VLAN_MAP_TABLE_MASK	0x7f
#define PORT_VLAN_MAP_FID		12
#define PORT_VLAN_MAP_FID_MASK		0xf000
/*
 * Switch Global Register 1 accessed via REG_GLOBAL_ADDR
 */
#define SWITCH_GLOBAL_STATUS		0
#define SWITCH_GLOBAL_CONTROL		4
#define SWITCH_GLOBAL_CONTROL2		28

#define MONITOR_CONTROL			26

/* ATU operation */
#define ATU_FID				1
#define ATU_CONTROL			10
#define ATU_OPERATION			11
#define ATU_DATA			12
#define ATU_MAC_ADDR01			13
#define ATU_MAC_ADDR23			14
#define ATU_MAC_ADDR45			15

#define ATU_UNIT_BUSY			(1 << 15)
#define ENTRY_STATE			0xf

/* ATU_CONTROL fields */
#define ATU_CONTROL_AGETIME		4
#define ATU_CONTROL_AGETIME_MASK	0xff0
#define ATU_CONTROL_LEARN2ALL		3

/* ATU opcode */
#define NO_OPERATION			(0 << 0)
#define FLUSH_ALL			(1 << 0)
#define FLUSH_NON_STATIC		(1 << 1)
#define LOAD_FROM_FIB			(3 << 0)
#define PURGE_FROM_FIB			(3 << 0)
#define GET_NEXT_IN_FIB			(1 << 2)
#define FLUSH_ALL_IN_FIB		(5 << 0)
#define FLUSH_NON_STATIC_IN_FIB		(3 << 1)
#define GET_VIOLATION_DATA		(7 << 0)
#define CLEAR_VIOLATION_DATA		(7 << 0)

/* ATU Stats */
#define COUNT_ALL			(0 << 0)

/*
 * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR
 */
#define MGMT_EN_2x			2
#define MGMT_EN_0x			3
#define SWITCH_MGMT			5
#define ATU_STATS			14

#define MGMT_EN_ALL			0xffff

/* SWITCH_MGMT fields */

#define SWITCH_MGMT_PRI			0
#define SWITCH_MGMT_PRI_MASK		7
#define	SWITCH_MGMT_RSVD2CPU		3
#define SWITCH_MGMT_FC_PRI		4
#define SWITCH_MGMT_FC_PRI_MASK		(7 << 4)
#define SWITCH_MGMT_FORCEFLOW		7

/* ATU_STATS fields */

#define ATU_STATS_BIN			14
#define ATU_STATS_FLAG			12

/*
 * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2).
 */
#define SMI_PHY_CMD_REG			0x18
#define SMI_PHY_DATA_REG		0x19

#define PHY_CMD				0x18
#define PHY_DATA			0x19
#define PHY_DATA_MASK			0xffff

#define PHY_CMD_SMI_BUSY		15
#define PHY_CMD_MODE			12
#define PHY_CMD_MODE_MDIO		1
#define PHY_CMD_MODE_XMDIO		0
#define PHY_CMD_OPCODE			10
#define PHY_CMD_OPCODE_WRITE		1
#define PHY_CMD_OPCODE_READ		2
#define PHY_CMD_DEV_ADDR		5
#define PHY_CMD_DEV_ADDR_MASK		0x3e0
#define PHY_CMD_REG_ADDR		0
#define PHY_CMD_REG_ADDR_MASK		0x1f

#define PHY_PAGE_REG			22

#define E6000SW_NUM_PHYS		5
#define E6000SW_NUM_PHY_REGS		29
#define E6000SW_CPUPORTS_MASK		((1 << 5) | (1 << 6))
#define E6000SW_NUM_VGROUPS		8
#define E6000SW_NUM_PORTS		7
#define E6000SW_PORT_NO_VGROUP		-1
#define E6000SW_DEFAULT_AGETIME		20
#define E6000SW_RETRIES			100


/* Default vlangroups */
#define E6000SW_DEF_VLANGROUP0		(1 | (1 << 1) | (1 << 2) | (1 << 3) | \
    (1 << 6))
#define E6000SW_DEF_VLANGROUP1		((1 << 4) | (1 << 5))

#endif /* _E6000SWREG_H_ */
OpenPOWER on IntegriCloud