1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef _VNIC_DEVCMD_H_
21#define _VNIC_DEVCMD_H_
22
23#define _CMD_NBITS 14
24#define _CMD_VTYPEBITS 10
25#define _CMD_FLAGSBITS 6
26#define _CMD_DIRBITS 2
27
28#define _CMD_NMASK ((1 << _CMD_NBITS)-1)
29#define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1)
30#define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1)
31#define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1)
32
33#define _CMD_NSHIFT 0
34#define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
35#define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
36#define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
37
38
39
40
41#define _CMD_DIR_NONE 0U
42#define _CMD_DIR_WRITE 1U
43#define _CMD_DIR_READ 2U
44#define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ)
45
46
47
48
49#define _CMD_FLAGS_NONE 0U
50#define _CMD_FLAGS_NOWAIT 1U
51
52
53
54
55#define _CMD_VTYPE_NONE 0U
56#define _CMD_VTYPE_ENET 1U
57#define _CMD_VTYPE_FC 2U
58#define _CMD_VTYPE_SCSI 4U
59#define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
60
61
62
63
64#define _CMDCF(dir, flags, vtype, nr) \
65 (((dir) << _CMD_DIRSHIFT) | \
66 ((flags) << _CMD_FLAGSSHIFT) | \
67 ((vtype) << _CMD_VTYPESHIFT) | \
68 ((nr) << _CMD_NSHIFT))
69#define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr)
70#define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
71
72
73
74
75#define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
76#define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
77#define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
78#define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
79
80enum vnic_devcmd_cmd {
81 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
82
83
84 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
85
86
87
88
89 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
90
91
92 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
93
94
95
96 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
97
98
99 CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7),
100
101
102 CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
103
104
105 CMD_MAC_ADDR = _CMDC(_CMD_DIR_READ,
106 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
107
108
109 CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE,
110 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
111
112
113 CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE,
114 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
115
116
117 CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
118
119
120 CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
121
122
123 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
124
125
126 CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
127
128
129 CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
130
131
132 CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
133
134
135
136 CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
137
138
139
140
141
142
143
144
145
146 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
147
148
149
150 CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
151
152
153 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
154
155
156
157 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
158
159
160 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
161
162
163
164 CMD_INIT_v1 = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
165
166
167
168
169 CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
170
171
172 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
173
174
175 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
176
177
178
179
180 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
181
182
183
184
185 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
186
187
188
189 CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
190
191
192 CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
193
194
195 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
196
197
198 CMD_INIT = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35),
199
200
201
202
203 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
204
205
206
207
208 CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
209
210
211
212
213 CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
214};
215
216
217#define CMD_OPENF_OPROM 0x1
218
219
220#define CMD_INITF_DEFAULT_MAC 0x1
221
222
223#define CMD_PFILTER_DIRECTED 0x01
224#define CMD_PFILTER_MULTICAST 0x02
225#define CMD_PFILTER_BROADCAST 0x04
226#define CMD_PFILTER_PROMISCUOUS 0x08
227#define CMD_PFILTER_ALL_MULTICAST 0x10
228
229enum vnic_devcmd_status {
230 STAT_NONE = 0,
231 STAT_BUSY = 1 << 0,
232 STAT_ERROR = 1 << 1,
233};
234
235enum vnic_devcmd_error {
236 ERR_SUCCESS = 0,
237 ERR_EINVAL = 1,
238 ERR_EFAULT = 2,
239 ERR_EPERM = 3,
240 ERR_EBUSY = 4,
241 ERR_ECMDUNKNOWN = 5,
242 ERR_EBADSTATE = 6,
243 ERR_ENOMEM = 7,
244 ERR_ETIMEDOUT = 8,
245 ERR_ELINKDOWN = 9,
246 ERR_EMAXRES = 10,
247};
248
249struct vnic_devcmd_fw_info {
250 char fw_version[32];
251 char fw_build[32];
252 char hw_version[32];
253 char hw_serial_number[32];
254};
255
256struct vnic_devcmd_notify {
257 u32 csum;
258
259 u32 link_state;
260 u32 port_speed;
261 u32 mtu;
262 u32 msglvl;
263 u32 uif;
264 u32 status;
265 u32 error;
266 u32 link_down_cnt;
267 u32 perbi_rebuild_cnt;
268};
269#define VNIC_STF_FATAL_ERR 0x0001
270#define VNIC_STF_STD_PAUSE 0x0002
271#define VNIC_STF_PFC_PAUSE 0x0004
272
273#define VNIC_STF_ALL (VNIC_STF_FATAL_ERR |\
274 VNIC_STF_STD_PAUSE |\
275 VNIC_STF_PFC_PAUSE |\
276 0)
277
278struct vnic_devcmd_provinfo {
279 u8 oui[3];
280 u8 type;
281 u8 data[0];
282};
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298#define VNIC_DEVCMD_NARGS 15
299struct vnic_devcmd {
300 u32 status;
301 u32 cmd;
302 u64 args[VNIC_DEVCMD_NARGS];
303};
304
305#endif
306