]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/etherswitch/e6000sw/e6000swreg.h
MFV: r313101
[FreeBSD/FreeBSD.git] / sys / dev / etherswitch / e6000sw / e6000swreg.h
1 /*-
2  * Copyright (c) 2015 Semihalf
3  * Copyright (c) 2015 Stormshield
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  *
29  */
30
31 #ifndef _E6000SWREG_H_
32 #define _E6000SWREG_H_
33
34 struct atu_opt {
35         uint16_t mac_01;
36         uint16_t mac_23;
37         uint16_t mac_45;
38         uint16_t fid;
39 };
40
41 /*
42  * Definitions for the Marvell 88E6000 series Ethernet Switch.
43  */
44
45 /*
46  * Switch Registers
47  */
48 #define REG_GLOBAL                      0x1b
49 #define REG_GLOBAL2                     0x1c
50 #define REG_PORT(p)                     (0x10 + (p))
51
52 #define REG_NUM_MAX                     31
53
54 /*
55  * Per-Port Switch Registers
56  */
57 #define PORT_STATUS                     0x0
58 #define PSC_CONTROL                     0x1
59 #define SWITCH_ID                       0x3
60 #define PORT_CONTROL                    0x4
61 #define PORT_CONTROL_1                  0x5
62 #define PORT_VLAN_MAP                   0x6
63 #define PORT_VID                        0x7
64 #define PORT_ASSOCIATION_VECTOR         0xb
65 #define PORT_ATU_CTRL                   0xc
66 #define RX_COUNTER                      0x12
67 #define TX_COUNTER                      0x13
68
69 #define PORT_VID_DEF_VID                0
70 #define PORT_VID_DEF_VID_MASK           0xfff
71 #define PORT_VID_PRIORITY_MASK          0xc00
72
73 #define PORT_CONTROL_ENABLE             0x3
74
75 /* PORT_VLAN fields */
76 #define PORT_VLAN_MAP_TABLE_MASK        0x7f
77 #define PORT_VLAN_MAP_FID               12
78 #define PORT_VLAN_MAP_FID_MASK          0xf000
79 /*
80  * Switch Global Register 1 accessed via REG_GLOBAL_ADDR
81  */
82 #define SWITCH_GLOBAL_STATUS            0
83 #define SWITCH_GLOBAL_CONTROL           4
84 #define SWITCH_GLOBAL_CONTROL2          28
85
86 #define MONITOR_CONTROL                 26
87
88 /* ATU operation */
89 #define ATU_FID                         1
90 #define ATU_CONTROL                     10
91 #define ATU_OPERATION                   11
92 #define ATU_DATA                        12
93 #define ATU_MAC_ADDR01                  13
94 #define ATU_MAC_ADDR23                  14
95 #define ATU_MAC_ADDR45                  15
96
97 #define ATU_UNIT_BUSY                   (1 << 15)
98 #define ENTRY_STATE                     0xf
99
100 /* ATU_CONTROL fields */
101 #define ATU_CONTROL_AGETIME             4
102 #define ATU_CONTROL_AGETIME_MASK        0xff0
103 #define ATU_CONTROL_LEARN2ALL           3
104
105 /* ATU opcode */
106 #define NO_OPERATION                    (0 << 0)
107 #define FLUSH_ALL                       (1 << 0)
108 #define FLUSH_NON_STATIC                (1 << 1)
109 #define LOAD_FROM_FIB                   (3 << 0)
110 #define PURGE_FROM_FIB                  (3 << 0)
111 #define GET_NEXT_IN_FIB                 (1 << 2)
112 #define FLUSH_ALL_IN_FIB                (5 << 0)
113 #define FLUSH_NON_STATIC_IN_FIB         (3 << 1)
114 #define GET_VIOLATION_DATA              (7 << 0)
115 #define CLEAR_VIOLATION_DATA            (7 << 0)
116
117 /* ATU Stats */
118 #define COUNT_ALL                       (0 << 0)
119
120 /*
121  * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR
122  */
123 #define MGMT_EN_2x                      2
124 #define MGMT_EN_0x                      3
125 #define SWITCH_MGMT                     5
126 #define ATU_STATS                       14
127
128 #define MGMT_EN_ALL                     0xffff
129
130 /* SWITCH_MGMT fields */
131
132 #define SWITCH_MGMT_PRI                 0
133 #define SWITCH_MGMT_PRI_MASK            7
134 #define SWITCH_MGMT_RSVD2CPU            3
135 #define SWITCH_MGMT_FC_PRI              4
136 #define SWITCH_MGMT_FC_PRI_MASK         (7 << 4)
137 #define SWITCH_MGMT_FORCEFLOW           7
138
139 /* ATU_STATS fields */
140
141 #define ATU_STATS_BIN                   14
142 #define ATU_STATS_FLAG                  12
143
144 /*
145  * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2).
146  */
147 #define SMI_PHY_CMD_REG                 0x18
148 #define SMI_PHY_DATA_REG                0x19
149
150 #define PHY_CMD                         0x18
151 #define PHY_DATA                        0x19
152 #define PHY_DATA_MASK                   0xffff
153
154 #define PHY_CMD_SMI_BUSY                15
155 #define PHY_CMD_MODE                    12
156 #define PHY_CMD_MODE_MDIO               1
157 #define PHY_CMD_MODE_XMDIO              0
158 #define PHY_CMD_OPCODE                  10
159 #define PHY_CMD_OPCODE_WRITE            1
160 #define PHY_CMD_OPCODE_READ             2
161 #define PHY_CMD_DEV_ADDR                5
162 #define PHY_CMD_DEV_ADDR_MASK           0x3e0
163 #define PHY_CMD_REG_ADDR                0
164 #define PHY_CMD_REG_ADDR_MASK           0x1f
165
166 #define PHY_PAGE_REG                    22
167
168 /*
169  * Scratch and Misc register accessed via
170  * 'Switch Global Registers' (REG_GLOBAL2)
171  */
172 #define SCR_AND_MISC_REG                0x1a
173
174 #define SCR_AND_MISC_PTR_CFG            0x7000
175 #define SCR_AND_MISC_DATA_CFG_MASK      0xf0
176
177 #define E6000SW_NUM_PHY_REGS            29
178 #define E6000SW_NUM_VGROUPS             8
179 #define E6000SW_MAX_PORTS               10
180 #define E6000SW_PORT_NO_VGROUP          -1
181 #define E6000SW_DEFAULT_AGETIME         20
182 #define E6000SW_RETRIES                 100
183 #define E6000SW_SMI_TIMEOUT             16
184
185 #endif /* _E6000SWREG_H_ */