iPXE
mc_driver_pcol.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Driver for Solarflare network controllers and boards
3  * Copyright 2012-2017 Solarflare Communications Inc.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of the
8  * License, or any later version.
9  *
10  * You can also choose to distribute this program under the terms of
11  * the Unmodified Binary Distribution Licence (as given in the file
12  * COPYING.UBDL), provided that you have satisfied its requirements.
13  */
14 #ifndef SFC_MCDI_PCOL_H
15 #define SFC_MCDI_PCOL_H
16 
17 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
18 
19 /** \file mc_driver_pcol.h
20  * This file is a subset of the MCDI headers generated from the yml files.
21  */
22 
23 /* The current version of the MCDI protocol.
24  *
25  * Note that the ROM burnt into the card only talks V0, so at the very
26  * least every driver must support version 0 and MCDI_PCOL_VERSION
27  */
28 #ifdef WITH_MCDI_V2
29 #define MCDI_PCOL_VERSION 2
30 #else
31 #define MCDI_PCOL_VERSION 1
32 #endif
33 
34 /* Unused commands: 0x23, 0x27, 0x30, 0x31 */
35 
36 /* MCDI version 1
37  *
38  * Each MCDI request starts with an MCDI_HEADER, which is a 32bit
39  * structure, filled in by the client.
40  *
41  * 0 7 8 16 20 22 23 24 31
42  * | CODE | R | LEN | SEQ | Rsvd | E | R | XFLAGS |
43  * | | |
44  * | | \--- Response
45  * | \------- Error
46  * \------------------------------ Resync (always set)
47  *
48  * The client writes it's request into MC shared memory, and rings the
49  * doorbell. Each request is completed by either by the MC writing
50  * back into shared memory, or by writing out an event.
51  *
52  * All MCDI commands support completion by shared memory response. Each
53  * request may also contain additional data (accounted for by HEADER.LEN),
54  * and some response's may also contain additional data (again, accounted
55  * for by HEADER.LEN).
56  *
57  * Some MCDI commands support completion by event, in which any associated
58  * response data is included in the event.
59  *
60  * The protocol requires one response to be delivered for every request, a
61  * request should not be sent unless the response for the previous request
62  * has been received (either by polling shared memory, or by receiving
63  * an event).
64  */
65 
66 /** Request/Response structure */
67 #define MCDI_HEADER_OFST 0
68 #define MCDI_HEADER_CODE_LBN 0
69 #define MCDI_HEADER_CODE_WIDTH 7
70 #define MCDI_HEADER_RESYNC_LBN 7
71 #define MCDI_HEADER_RESYNC_WIDTH 1
72 #define MCDI_HEADER_DATALEN_LBN 8
73 #define MCDI_HEADER_DATALEN_WIDTH 8
74 #define MCDI_HEADER_SEQ_LBN 16
75 #define MCDI_HEADER_SEQ_WIDTH 4
76 #define MCDI_HEADER_RSVD_LBN 20
77 #define MCDI_HEADER_RSVD_WIDTH 1
78 #define MCDI_HEADER_NOT_EPOCH_LBN 21
79 #define MCDI_HEADER_NOT_EPOCH_WIDTH 1
80 #define MCDI_HEADER_ERROR_LBN 22
81 #define MCDI_HEADER_ERROR_WIDTH 1
82 #define MCDI_HEADER_RESPONSE_LBN 23
83 #define MCDI_HEADER_RESPONSE_WIDTH 1
84 #define MCDI_HEADER_XFLAGS_LBN 24
85 #define MCDI_HEADER_XFLAGS_WIDTH 8
86 /* Request response using event */
87 #define MCDI_HEADER_XFLAGS_EVREQ 0x01
88 /* Request (and signal) early doorbell return */
89 #define MCDI_HEADER_XFLAGS_DBRET 0x02
90 
91 /* Maximum number of payload bytes */
92 #define MCDI_CTL_SDU_LEN_MAX_V1 0xfc
93 #define MCDI_CTL_SDU_LEN_MAX_V2 0x400
94 
95 #ifdef WITH_MCDI_V2
96 #define MCDI_CTL_SDU_LEN_MAX MCDI_CTL_SDU_LEN_MAX_V2
97 #else
98 #define MCDI_CTL_SDU_LEN_MAX MCDI_CTL_SDU_LEN_MAX_V1
99 #endif
100 
101 
102 /* The MC can generate events for two reasons:
103  * - To advance a shared memory request if XFLAGS_EVREQ was set
104  * - As a notification (link state, i2c event), controlled
105  * via MC_CMD_LOG_CTRL
106  *
107  * Both events share a common structure:
108  *
109  * 0 32 33 36 44 52 60
110  * | Data | Cont | Level | Src | Code | Rsvd |
111  * |
112  * \ There is another event pending in this notification
113  *
114  * If Code==CMDDONE, then the fields are further interpreted as:
115  *
116  * - LEVEL==INFO Command succeeded
117  * - LEVEL==ERR Command failed
118  *
119  * 0 8 16 24 32
120  * | Seq | Datalen | Errno | Rsvd |
121  *
122  * These fields are taken directly out of the standard MCDI header, i.e.,
123  * LEVEL==ERR, Datalen == 0 => Reboot
124  *
125  * Events can be squirted out of the UART (using LOG_CTRL) without a
126  * MCDI header. An event can be distinguished from a MCDI response by
127  * examining the first byte which is 0xc0. This corresponds to the
128  * non-existent MCDI command MC_CMD_DEBUG_LOG.
129  *
130  * 0 7 8
131  * | command | Resync | = 0xc0
132  *
133  * Since the event is written in big-endian byte order, this works
134  * providing bits 56-63 of the event are 0xc0.
135  *
136  * 56 60 63
137  * | Rsvd | Code | = 0xc0
138  *
139  * Which means for convenience the event code is 0xc for all MC
140  * generated events.
141  */
142 #define FSE_AZ_EV_CODE_MCDI_EVRESPONSE 0xc
143 
144 
145 /* Operation not permitted. */
146 #define MC_CMD_ERR_EPERM 1
147 /* Non-existent command target */
148 #define MC_CMD_ERR_ENOENT 2
149 /* assert() has killed the MC */
150 #define MC_CMD_ERR_EINTR 4
151 /* I/O failure */
152 #define MC_CMD_ERR_EIO 5
153 /* Already exists */
154 #define MC_CMD_ERR_EEXIST 6
155 /* Try again */
156 #define MC_CMD_ERR_EAGAIN 11
157 /* Out of memory */
158 #define MC_CMD_ERR_ENOMEM 12
159 /* Caller does not hold required locks */
160 #define MC_CMD_ERR_EACCES 13
161 /* Resource is currently unavailable (e.g. lock contention) */
162 #define MC_CMD_ERR_EBUSY 16
163 /* No such device */
164 #define MC_CMD_ERR_ENODEV 19
165 /* Invalid argument to target */
166 #define MC_CMD_ERR_EINVAL 22
167 /* Broken pipe */
168 #define MC_CMD_ERR_EPIPE 32
169 /* Read-only */
170 #define MC_CMD_ERR_EROFS 30
171 /* Out of range */
172 #define MC_CMD_ERR_ERANGE 34
173 /* Non-recursive resource is already acquired */
174 #define MC_CMD_ERR_EDEADLK 35
175 /* Operation not implemented */
176 #define MC_CMD_ERR_ENOSYS 38
177 /* Operation timed out */
178 #define MC_CMD_ERR_ETIME 62
179 /* Link has been severed */
180 #define MC_CMD_ERR_ENOLINK 67
181 /* Protocol error */
182 #define MC_CMD_ERR_EPROTO 71
183 /* Operation not supported */
184 #define MC_CMD_ERR_ENOTSUP 95
185 /* Address not available */
186 #define MC_CMD_ERR_EADDRNOTAVAIL 99
187 /* Not connected */
188 #define MC_CMD_ERR_ENOTCONN 107
189 /* Operation already in progress */
190 #define MC_CMD_ERR_EALREADY 114
191 
192 /* Resource allocation failed. */
193 #define MC_CMD_ERR_ALLOC_FAIL 0x1000
194 /* V-adaptor not found. */
195 #define MC_CMD_ERR_NO_VADAPTOR 0x1001
196 /* EVB port not found. */
197 #define MC_CMD_ERR_NO_EVB_PORT 0x1002
198 /* V-switch not found. */
199 #define MC_CMD_ERR_NO_VSWITCH 0x1003
200 /* Too many VLAN tags. */
201 #define MC_CMD_ERR_VLAN_LIMIT 0x1004
202 /* Bad PCI function number. */
203 #define MC_CMD_ERR_BAD_PCI_FUNC 0x1005
204 /* Invalid VLAN mode. */
205 #define MC_CMD_ERR_BAD_VLAN_MODE 0x1006
206 /* Invalid v-switch type. */
207 #define MC_CMD_ERR_BAD_VSWITCH_TYPE 0x1007
208 /* Invalid v-port type. */
209 #define MC_CMD_ERR_BAD_VPORT_TYPE 0x1008
210 /* MAC address exists. */
211 #define MC_CMD_ERR_MAC_EXIST 0x1009
212 /* Slave core not present */
213 #define MC_CMD_ERR_SLAVE_NOT_PRESENT 0x100a
214 /* The datapath is disabled. */
215 #define MC_CMD_ERR_DATAPATH_DISABLED 0x100b
216 /* The requesting client is not a function */
217 #define MC_CMD_ERR_CLIENT_NOT_FN 0x100c
218 /* The requested operation might require the
219  * command to be passed between MCs, and the
220  * transport doesn't support that. Should
221  * only ever been seen over the UART.
222  */
223 #define MC_CMD_ERR_TRANSPORT_NOPROXY 0x100d
224 /* VLAN tag(s) exists */
225 #define MC_CMD_ERR_VLAN_EXIST 0x100e
226 /* No MAC address assigned to an EVB port */
227 #define MC_CMD_ERR_NO_MAC_ADDR 0x100f
228 /* Notifies the driver that the request has been relayed
229  * to an admin function for authorization. The driver should
230  * wait for a PROXY_RESPONSE event and then resend its request.
231  * This error code is followed by a 32-bit handle that
232  * helps matching it with the respective PROXY_RESPONSE event.
233  */
234 #define MC_CMD_ERR_PROXY_PENDING 0x1010
235 #define MC_CMD_ERR_PROXY_PENDING_HANDLE_OFST 4
236 /* The request cannot be passed for authorization because
237  * another request from the same function is currently being
238  * authorized. The drvier should try again later.
239  */
240 #define MC_CMD_ERR_PROXY_INPROGRESS 0x1011
241 /* Returned by MC_CMD_PROXY_COMPLETE if the caller is not the function
242  * that has enabled proxying or BLOCK_INDEX points to a function that
243  * doesn't await an authorization.
244  */
245 #define MC_CMD_ERR_PROXY_UNEXPECTED 0x1012
246 /* This code is currently only used internally in FW. Its meaning is that
247  * an operation failed due to lack of SR-IOV privilege.
248  * Normally it is translated to EPERM by send_cmd_err(),
249  * but it may also be used to trigger some special mechanism
250  * for handling such case, e.g. to relay the failed request
251  * to a designated admin function for authorization.
252  */
253 #define MC_CMD_ERR_NO_PRIVILEGE 0x1013
254 /* Workaround 26807 could not be turned on/off because some functions
255  * have already installed filters. See the comment at
256  * MC_CMD_WORKAROUND_BUG26807.
257  */
258 #define MC_CMD_ERR_FILTERS_PRESENT 0x1014
259 /* The clock whose frequency you've attempted to set set
260  * doesn't exist on this NIC
261  */
262 #define MC_CMD_ERR_NO_CLOCK 0x1015
263 /* Returned by MC_CMD_TESTASSERT if the action that should
264  * have caused an assertion failed to do so.
265  */
266 #define MC_CMD_ERR_UNREACHABLE 0x1016
267 /* This command needs to be processed in the background but there were no
268  * resources to do so. Send it again after a command has completed.
269  */
270 #define MC_CMD_ERR_QUEUE_FULL 0x1017
271 
272 #define MC_CMD_ERR_CODE_OFST 0
273 
274 
275 #ifdef WITH_MCDI_V2
276 
277 /* Version 2 adds an optional argument to error returns: the errno value
278  * may be followed by the (0-based) number of the first argument that
279  * could not be processed.
280  */
281 #define MC_CMD_ERR_ARG_OFST 4
282 
283 /* No space */
284 #define MC_CMD_ERR_ENOSPC 28
285 
286 #endif
287 
288 /* MCDI_EVENT structuredef */
289 #define MCDI_EVENT_LEN 8
290 #define MCDI_EVENT_CONT_LBN 32
291 #define MCDI_EVENT_CONT_WIDTH 1
292 #define MCDI_EVENT_LEVEL_LBN 33
293 #define MCDI_EVENT_LEVEL_WIDTH 3
294 /* enum: Info. */
295 #define MCDI_EVENT_LEVEL_INFO 0x0
296 /* enum: Warning. */
297 #define MCDI_EVENT_LEVEL_WARN 0x1
298 /* enum: Error. */
299 #define MCDI_EVENT_LEVEL_ERR 0x2
300 /* enum: Fatal. */
301 #define MCDI_EVENT_LEVEL_FATAL 0x3
302 #define MCDI_EVENT_DATA_OFST 0
303 #define MCDI_EVENT_CMDDONE_SEQ_LBN 0
304 #define MCDI_EVENT_CMDDONE_SEQ_WIDTH 8
305 #define MCDI_EVENT_CMDDONE_DATALEN_LBN 8
306 #define MCDI_EVENT_CMDDONE_DATALEN_WIDTH 8
307 #define MCDI_EVENT_CMDDONE_ERRNO_LBN 16
308 #define MCDI_EVENT_CMDDONE_ERRNO_WIDTH 8
309 #define MCDI_EVENT_LINKCHANGE_LP_CAP_LBN 0
310 #define MCDI_EVENT_LINKCHANGE_LP_CAP_WIDTH 16
311 #define MCDI_EVENT_LINKCHANGE_SPEED_LBN 16
312 #define MCDI_EVENT_LINKCHANGE_SPEED_WIDTH 4
313 /* enum: 100Mbs */
314 #define MCDI_EVENT_LINKCHANGE_SPEED_100M 0x1
315 /* enum: 1Gbs */
316 #define MCDI_EVENT_LINKCHANGE_SPEED_1G 0x2
317 /* enum: 10Gbs */
318 #define MCDI_EVENT_LINKCHANGE_SPEED_10G 0x3
319 /* enum: 40Gbs */
320 #define MCDI_EVENT_LINKCHANGE_SPEED_40G 0x4
321 #define MCDI_EVENT_LINKCHANGE_FCNTL_LBN 20
322 #define MCDI_EVENT_LINKCHANGE_FCNTL_WIDTH 4
323 #define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_LBN 24
324 #define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_WIDTH 8
325 #define MCDI_EVENT_SENSOREVT_MONITOR_LBN 0
326 #define MCDI_EVENT_SENSOREVT_MONITOR_WIDTH 8
327 #define MCDI_EVENT_SENSOREVT_STATE_LBN 8
328 #define MCDI_EVENT_SENSOREVT_STATE_WIDTH 8
329 #define MCDI_EVENT_SENSOREVT_VALUE_LBN 16
330 #define MCDI_EVENT_SENSOREVT_VALUE_WIDTH 16
331 #define MCDI_EVENT_FWALERT_DATA_LBN 8
332 #define MCDI_EVENT_FWALERT_DATA_WIDTH 24
333 #define MCDI_EVENT_FWALERT_REASON_LBN 0
334 #define MCDI_EVENT_FWALERT_REASON_WIDTH 8
335 /* enum: SRAM Access. */
336 #define MCDI_EVENT_FWALERT_REASON_SRAM_ACCESS 0x1
337 #define MCDI_EVENT_FLR_VF_LBN 0
338 #define MCDI_EVENT_FLR_VF_WIDTH 8
339 #define MCDI_EVENT_TX_ERR_TXQ_LBN 0
340 #define MCDI_EVENT_TX_ERR_TXQ_WIDTH 12
341 #define MCDI_EVENT_TX_ERR_TYPE_LBN 12
342 #define MCDI_EVENT_TX_ERR_TYPE_WIDTH 4
343 /* enum: Descriptor loader reported failure */
344 #define MCDI_EVENT_TX_ERR_DL_FAIL 0x1
345 /* enum: Descriptor ring empty and no EOP seen for packet */
346 #define MCDI_EVENT_TX_ERR_NO_EOP 0x2
347 /* enum: Overlength packet */
348 #define MCDI_EVENT_TX_ERR_2BIG 0x3
349 /* enum: Malformed option descriptor */
350 #define MCDI_EVENT_TX_BAD_OPTDESC 0x5
351 /* enum: Option descriptor part way through a packet */
352 #define MCDI_EVENT_TX_OPT_IN_PKT 0x8
353 /* enum: DMA or PIO data access error */
354 #define MCDI_EVENT_TX_ERR_BAD_DMA_OR_PIO 0x9
355 #define MCDI_EVENT_TX_ERR_INFO_LBN 16
356 #define MCDI_EVENT_TX_ERR_INFO_WIDTH 16
357 #define MCDI_EVENT_TX_FLUSH_TO_DRIVER_LBN 12
358 #define MCDI_EVENT_TX_FLUSH_TO_DRIVER_WIDTH 1
359 #define MCDI_EVENT_TX_FLUSH_TXQ_LBN 0
360 #define MCDI_EVENT_TX_FLUSH_TXQ_WIDTH 12
361 #define MCDI_EVENT_PTP_ERR_TYPE_LBN 0
362 #define MCDI_EVENT_PTP_ERR_TYPE_WIDTH 8
363 /* enum: PLL lost lock */
364 #define MCDI_EVENT_PTP_ERR_PLL_LOST 0x1
365 /* enum: Filter overflow (PDMA) */
366 #define MCDI_EVENT_PTP_ERR_FILTER 0x2
367 /* enum: FIFO overflow (FPGA) */
368 #define MCDI_EVENT_PTP_ERR_FIFO 0x3
369 /* enum: Merge queue overflow */
370 #define MCDI_EVENT_PTP_ERR_QUEUE 0x4
371 #define MCDI_EVENT_AOE_ERR_TYPE_LBN 0
372 #define MCDI_EVENT_AOE_ERR_TYPE_WIDTH 8
373 /* enum: AOE failed to load - no valid image? */
374 #define MCDI_EVENT_AOE_NO_LOAD 0x1
375 /* enum: AOE FC reported an exception */
376 #define MCDI_EVENT_AOE_FC_ASSERT 0x2
377 /* enum: AOE FC watchdogged */
378 #define MCDI_EVENT_AOE_FC_WATCHDOG 0x3
379 /* enum: AOE FC failed to start */
380 #define MCDI_EVENT_AOE_FC_NO_START 0x4
381 /* enum: Generic AOE fault - likely to have been reported via other means too
382  * but intended for use by aoex driver.
383  */
384 #define MCDI_EVENT_AOE_FAULT 0x5
385 /* enum: Results of reprogramming the CPLD (status in AOE_ERR_DATA) */
386 #define MCDI_EVENT_AOE_CPLD_REPROGRAMMED 0x6
387 /* enum: AOE loaded successfully */
388 #define MCDI_EVENT_AOE_LOAD 0x7
389 /* enum: AOE DMA operation completed (LSB of HOST_HANDLE in AOE_ERR_DATA) */
390 #define MCDI_EVENT_AOE_DMA 0x8
391 /* enum: AOE byteblaster connected/disconnected (Connection status in
392  * AOE_ERR_DATA)
393  */
394 #define MCDI_EVENT_AOE_BYTEBLASTER 0x9
395 /* enum: DDR ECC status update */
396 #define MCDI_EVENT_AOE_DDR_ECC_STATUS 0xa
397 /* enum: PTP status update */
398 #define MCDI_EVENT_AOE_PTP_STATUS 0xb
399 /* enum: FPGA header incorrect */
400 #define MCDI_EVENT_AOE_FPGA_LOAD_HEADER_ERR 0xc
401 /* enum: FPGA Powered Off due to error in powering up FPGA */
402 #define MCDI_EVENT_AOE_FPGA_POWER_OFF 0xd
403 /* enum: AOE FPGA load failed due to MC to MUM communication failure */
404 #define MCDI_EVENT_AOE_FPGA_LOAD_FAILED 0xe
405 /* enum: Notify that invalid flash type detected */
406 #define MCDI_EVENT_AOE_INVALID_FPGA_FLASH_TYPE 0xf
407 /* enum: Notify that the attempt to run FPGA Controller firmware timedout */
408 #define MCDI_EVENT_AOE_FC_RUN_TIMEDOUT 0x10
409 /* enum: Failure to probe one or more FPGA boot flash chips */
410 #define MCDI_EVENT_AOE_FPGA_BOOT_FLASH_INVALID 0x11
411 /* enum: FPGA boot-flash contains an invalid image header */
412 #define MCDI_EVENT_AOE_FPGA_BOOT_FLASH_HDR_INVALID 0x12
413 /* enum: Failed to program clocks required by the FPGA */
414 #define MCDI_EVENT_AOE_FPGA_CLOCKS_PROGRAM_FAILED 0x13
415 /* enum: Notify that FPGA Controller is alive to serve MCDI requests */
416 #define MCDI_EVENT_AOE_FC_RUNNING 0x14
417 #define MCDI_EVENT_AOE_ERR_DATA_LBN 8
418 #define MCDI_EVENT_AOE_ERR_DATA_WIDTH 8
419 #define MCDI_EVENT_AOE_ERR_FC_ASSERT_INFO_LBN 8
420 #define MCDI_EVENT_AOE_ERR_FC_ASSERT_INFO_WIDTH 8
421 /* enum: FC Assert happened, but the register information is not available */
422 #define MCDI_EVENT_AOE_ERR_FC_ASSERT_SEEN 0x0
423 /* enum: The register information for FC Assert is ready for readinng by driver
424  */
425 #define MCDI_EVENT_AOE_ERR_FC_ASSERT_DATA_READY 0x1
426 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_HEADER_VERIFY_FAILED_LBN 8
427 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_HEADER_VERIFY_FAILED_WIDTH 8
428 /* enum: Reading from NV failed */
429 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_NV_READ_FAIL 0x0
430 /* enum: Invalid Magic Number if FPGA header */
431 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_MAGIC_FAIL 0x1
432 /* enum: Invalid Silicon type detected in header */
433 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_SILICON_TYPE 0x2
434 /* enum: Unsupported VRatio */
435 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_VRATIO 0x3
436 /* enum: Unsupported DDR Type */
437 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_TYPE 0x4
438 /* enum: DDR Voltage out of supported range */
439 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_VOLTAGE 0x5
440 /* enum: Unsupported DDR speed */
441 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_SPEED 0x6
442 /* enum: Unsupported DDR size */
443 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_SIZE 0x7
444 /* enum: Unsupported DDR rank */
445 #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_RANK 0x8
446 #define MCDI_EVENT_AOE_ERR_CODE_INVALID_FPGA_FLASH_TYPE_INFO_LBN 8
447 #define MCDI_EVENT_AOE_ERR_CODE_INVALID_FPGA_FLASH_TYPE_INFO_WIDTH 8
448 /* enum: Primary boot flash */
449 #define MCDI_EVENT_AOE_FLASH_TYPE_BOOT_PRIMARY 0x0
450 /* enum: Secondary boot flash */
451 #define MCDI_EVENT_AOE_FLASH_TYPE_BOOT_SECONDARY 0x1
452 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_POWER_OFF_LBN 8
453 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_POWER_OFF_WIDTH 8
454 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_LOAD_FAILED_LBN 8
455 #define MCDI_EVENT_AOE_ERR_CODE_FPGA_LOAD_FAILED_WIDTH 8
456 #define MCDI_EVENT_RX_ERR_RXQ_LBN 0
457 #define MCDI_EVENT_RX_ERR_RXQ_WIDTH 12
458 #define MCDI_EVENT_RX_ERR_TYPE_LBN 12
459 #define MCDI_EVENT_RX_ERR_TYPE_WIDTH 4
460 #define MCDI_EVENT_RX_ERR_INFO_LBN 16
461 #define MCDI_EVENT_RX_ERR_INFO_WIDTH 16
462 #define MCDI_EVENT_RX_FLUSH_TO_DRIVER_LBN 12
463 #define MCDI_EVENT_RX_FLUSH_TO_DRIVER_WIDTH 1
464 #define MCDI_EVENT_RX_FLUSH_RXQ_LBN 0
465 #define MCDI_EVENT_RX_FLUSH_RXQ_WIDTH 12
466 #define MCDI_EVENT_MC_REBOOT_COUNT_LBN 0
467 #define MCDI_EVENT_MC_REBOOT_COUNT_WIDTH 16
468 #define MCDI_EVENT_MUM_ERR_TYPE_LBN 0
469 #define MCDI_EVENT_MUM_ERR_TYPE_WIDTH 8
470 /* enum: MUM failed to load - no valid image? */
471 #define MCDI_EVENT_MUM_NO_LOAD 0x1
472 /* enum: MUM f/w reported an exception */
473 #define MCDI_EVENT_MUM_ASSERT 0x2
474 /* enum: MUM not kicking watchdog */
475 #define MCDI_EVENT_MUM_WATCHDOG 0x3
476 #define MCDI_EVENT_MUM_ERR_DATA_LBN 8
477 #define MCDI_EVENT_MUM_ERR_DATA_WIDTH 8
478 #define MCDI_EVENT_DATA_LBN 0
479 #define MCDI_EVENT_DATA_WIDTH 32
480 #define MCDI_EVENT_SRC_LBN 36
481 #define MCDI_EVENT_SRC_WIDTH 8
482 #define MCDI_EVENT_EV_CODE_LBN 60
483 #define MCDI_EVENT_EV_CODE_WIDTH 4
484 #define MCDI_EVENT_CODE_LBN 44
485 #define MCDI_EVENT_CODE_WIDTH 8
486 /* enum: Event generated by host software */
487 #define MCDI_EVENT_SW_EVENT 0x0
488 /* enum: Bad assert. */
489 #define MCDI_EVENT_CODE_BADSSERT 0x1
490 /* enum: PM Notice. */
491 #define MCDI_EVENT_CODE_PMNOTICE 0x2
492 /* enum: Command done. */
493 #define MCDI_EVENT_CODE_CMDDONE 0x3
494 /* enum: Link change. */
495 #define MCDI_EVENT_CODE_LINKCHANGE 0x4
496 /* enum: Sensor Event. */
497 #define MCDI_EVENT_CODE_SENSOREVT 0x5
498 /* enum: Schedule error. */
499 #define MCDI_EVENT_CODE_SCHEDERR 0x6
500 /* enum: Reboot. */
501 #define MCDI_EVENT_CODE_REBOOT 0x7
502 /* enum: Mac stats DMA. */
503 #define MCDI_EVENT_CODE_MAC_STATS_DMA 0x8
504 /* enum: Firmware alert. */
505 #define MCDI_EVENT_CODE_FWALERT 0x9
506 /* enum: Function level reset. */
507 #define MCDI_EVENT_CODE_FLR 0xa
508 /* enum: Transmit error */
509 #define MCDI_EVENT_CODE_TX_ERR 0xb
510 /* enum: Tx flush has completed */
511 #define MCDI_EVENT_CODE_TX_FLUSH 0xc
512 /* enum: PTP packet received timestamp */
513 #define MCDI_EVENT_CODE_PTP_RX 0xd
514 /* enum: PTP NIC failure */
515 #define MCDI_EVENT_CODE_PTP_FAULT 0xe
516 /* enum: PTP PPS event */
517 #define MCDI_EVENT_CODE_PTP_PPS 0xf
518 /* enum: Rx flush has completed */
519 #define MCDI_EVENT_CODE_RX_FLUSH 0x10
520 /* enum: Receive error */
521 #define MCDI_EVENT_CODE_RX_ERR 0x11
522 /* enum: AOE fault */
523 #define MCDI_EVENT_CODE_AOE 0x12
524 /* enum: Network port calibration failed (VCAL). */
525 #define MCDI_EVENT_CODE_VCAL_FAIL 0x13
526 /* enum: HW PPS event */
527 #define MCDI_EVENT_CODE_HW_PPS 0x14
528 /* enum: The MC has rebooted (huntington and later, siena uses CODE_REBOOT and
529  * a different format)
530  */
531 #define MCDI_EVENT_CODE_MC_REBOOT 0x15
532 /* enum: the MC has detected a parity error */
533 #define MCDI_EVENT_CODE_PAR_ERR 0x16
534 /* enum: the MC has detected a correctable error */
535 #define MCDI_EVENT_CODE_ECC_CORR_ERR 0x17
536 /* enum: the MC has detected an uncorrectable error */
537 #define MCDI_EVENT_CODE_ECC_FATAL_ERR 0x18
538 /* enum: The MC has entered offline BIST mode */
539 #define MCDI_EVENT_CODE_MC_BIST 0x19
540 /* enum: PTP tick event providing current NIC time */
541 #define MCDI_EVENT_CODE_PTP_TIME 0x1a
542 /* enum: MUM fault */
543 #define MCDI_EVENT_CODE_MUM 0x1b
544 /* enum: notify the designated PF of a new authorization request */
545 #define MCDI_EVENT_CODE_PROXY_REQUEST 0x1c
546 /* enum: notify a function that awaits an authorization that its request has
547  * been processed and it may now resend the command
548  */
549 #define MCDI_EVENT_CODE_PROXY_RESPONSE 0x1d
550 /* enum: Artificial event generated by host and posted via MC for test
551  * purposes.
552  */
553 #define MCDI_EVENT_CODE_TESTGEN 0xfa
554 #define MCDI_EVENT_CMDDONE_DATA_OFST 0
555 #define MCDI_EVENT_CMDDONE_DATA_LBN 0
556 #define MCDI_EVENT_CMDDONE_DATA_WIDTH 32
557 #define MCDI_EVENT_LINKCHANGE_DATA_OFST 0
558 #define MCDI_EVENT_LINKCHANGE_DATA_LBN 0
559 #define MCDI_EVENT_LINKCHANGE_DATA_WIDTH 32
560 #define MCDI_EVENT_SENSOREVT_DATA_OFST 0
561 #define MCDI_EVENT_SENSOREVT_DATA_LBN 0
562 #define MCDI_EVENT_SENSOREVT_DATA_WIDTH 32
563 #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_OFST 0
564 #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_LBN 0
565 #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_WIDTH 32
566 #define MCDI_EVENT_TX_ERR_DATA_OFST 0
567 #define MCDI_EVENT_TX_ERR_DATA_LBN 0
568 #define MCDI_EVENT_TX_ERR_DATA_WIDTH 32
569 /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the seconds field of
570  * timestamp
571  */
572 #define MCDI_EVENT_PTP_SECONDS_OFST 0
573 #define MCDI_EVENT_PTP_SECONDS_LBN 0
574 #define MCDI_EVENT_PTP_SECONDS_WIDTH 32
575 /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the major field of
576  * timestamp
577  */
578 #define MCDI_EVENT_PTP_MAJOR_OFST 0
579 #define MCDI_EVENT_PTP_MAJOR_LBN 0
580 #define MCDI_EVENT_PTP_MAJOR_WIDTH 32
581 /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the nanoseconds field
582  * of timestamp
583  */
584 #define MCDI_EVENT_PTP_NANOSECONDS_OFST 0
585 #define MCDI_EVENT_PTP_NANOSECONDS_LBN 0
586 #define MCDI_EVENT_PTP_NANOSECONDS_WIDTH 32
587 /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the minor field of
588  * timestamp
589  */
590 #define MCDI_EVENT_PTP_MINOR_OFST 0
591 #define MCDI_EVENT_PTP_MINOR_LBN 0
592 #define MCDI_EVENT_PTP_MINOR_WIDTH 32
593 /* For CODE_PTP_RX events, the lowest four bytes of sourceUUID from PTP packet
594  */
595 #define MCDI_EVENT_PTP_UUID_OFST 0
596 #define MCDI_EVENT_PTP_UUID_LBN 0
597 #define MCDI_EVENT_PTP_UUID_WIDTH 32
598 #define MCDI_EVENT_RX_ERR_DATA_OFST 0
599 #define MCDI_EVENT_RX_ERR_DATA_LBN 0
600 #define MCDI_EVENT_RX_ERR_DATA_WIDTH 32
601 #define MCDI_EVENT_PAR_ERR_DATA_OFST 0
602 #define MCDI_EVENT_PAR_ERR_DATA_LBN 0
603 #define MCDI_EVENT_PAR_ERR_DATA_WIDTH 32
604 #define MCDI_EVENT_ECC_CORR_ERR_DATA_OFST 0
605 #define MCDI_EVENT_ECC_CORR_ERR_DATA_LBN 0
606 #define MCDI_EVENT_ECC_CORR_ERR_DATA_WIDTH 32
607 #define MCDI_EVENT_ECC_FATAL_ERR_DATA_OFST 0
608 #define MCDI_EVENT_ECC_FATAL_ERR_DATA_LBN 0
609 #define MCDI_EVENT_ECC_FATAL_ERR_DATA_WIDTH 32
610 /* For CODE_PTP_TIME events, the major value of the PTP clock */
611 #define MCDI_EVENT_PTP_TIME_MAJOR_OFST 0
612 #define MCDI_EVENT_PTP_TIME_MAJOR_LBN 0
613 #define MCDI_EVENT_PTP_TIME_MAJOR_WIDTH 32
614 /* For CODE_PTP_TIME events, bits 19-26 of the minor value of the PTP clock */
615 #define MCDI_EVENT_PTP_TIME_MINOR_26_19_LBN 36
616 #define MCDI_EVENT_PTP_TIME_MINOR_26_19_WIDTH 8
617 /* For CODE_PTP_TIME events where report sync status is enabled, indicates
618  * whether the NIC clock has ever been set
619  */
620 #define MCDI_EVENT_PTP_TIME_NIC_CLOCK_VALID_LBN 36
621 #define MCDI_EVENT_PTP_TIME_NIC_CLOCK_VALID_WIDTH 1
622 /* For CODE_PTP_TIME events where report sync status is enabled, indicates
623  * whether the NIC and System clocks are in sync
624  */
625 #define MCDI_EVENT_PTP_TIME_HOST_NIC_IN_SYNC_LBN 37
626 #define MCDI_EVENT_PTP_TIME_HOST_NIC_IN_SYNC_WIDTH 1
627 /* For CODE_PTP_TIME events where report sync status is enabled, bits 21-26 of
628  * the minor value of the PTP clock
629  */
630 #define MCDI_EVENT_PTP_TIME_MINOR_26_21_LBN 38
631 #define MCDI_EVENT_PTP_TIME_MINOR_26_21_WIDTH 6
632 #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_OFST 0
633 #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_LBN 0
634 #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_WIDTH 32
635 #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_OFST 0
636 #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_LBN 0
637 #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_WIDTH 32
638 /* Zero means that the request has been completed or authorized, and the driver
639  * should resend it. A non-zero value means that the authorization has been
640  * denied, and gives the reason. Typically it will be EPERM.
641  */
642 #define MCDI_EVENT_PROXY_RESPONSE_RC_LBN 36
643 #define MCDI_EVENT_PROXY_RESPONSE_RC_WIDTH 8
644 
645 /* EVB_PORT_ID structuredef */
646 #define EVB_PORT_ID_LEN 4
647 #define EVB_PORT_ID_PORT_ID_OFST 0
648 /* enum: An invalid port handle. */
649 #define EVB_PORT_ID_NULL 0x0
650 /* enum: The port assigned to this function.. */
651 #define EVB_PORT_ID_ASSIGNED 0x1000000
652 /* enum: External network port 0 */
653 #define EVB_PORT_ID_MAC0 0x2000000
654 /* enum: External network port 1 */
655 #define EVB_PORT_ID_MAC1 0x2000001
656 /* enum: External network port 2 */
657 #define EVB_PORT_ID_MAC2 0x2000002
658 /* enum: External network port 3 */
659 #define EVB_PORT_ID_MAC3 0x2000003
660 #define EVB_PORT_ID_PORT_ID_LBN 0
661 #define EVB_PORT_ID_PORT_ID_WIDTH 32
662 
663 
664 /***********************************/
665 /* MC_CMD_DRV_ATTACH
666  * Inform MCPU that this port is managed on the host (i.e. driver active). For
667  * Huntington, also request the preferred datapath firmware to use if possible
668  * (it may not be possible for this request to be fulfilled; the driver must
669  * issue a subsequent MC_CMD_GET_CAPABILITIES command to determine which
670  * features are actually available). The FIRMWARE_ID field is ignored by older
671  * platforms.
672  */
673 #define MC_CMD_DRV_ATTACH 0x1c
674 #undef MC_CMD_0x1c_PRIVILEGE_CTG
675 
676 #define MC_CMD_0x1c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
677 
678 /* MC_CMD_DRV_ATTACH_IN msgrequest */
679 #define MC_CMD_DRV_ATTACH_IN_LEN 12
680 /* new state to set if UPDATE=1 */
681 #define MC_CMD_DRV_ATTACH_IN_NEW_STATE_OFST 0
682 #define MC_CMD_DRV_ATTACH_LBN 0
683 #define MC_CMD_DRV_ATTACH_WIDTH 1
684 #define MC_CMD_DRV_PREBOOT_LBN 1
685 #define MC_CMD_DRV_PREBOOT_WIDTH 1
686 /* 1 to set new state, or 0 to just report the existing state */
687 #define MC_CMD_DRV_ATTACH_IN_UPDATE_OFST 4
688 /* preferred datapath firmware (for Huntington; ignored for Siena) */
689 #define MC_CMD_DRV_ATTACH_IN_FIRMWARE_ID_OFST 8
690 /* enum: Prefer to use full featured firmware */
691 #define MC_CMD_FW_FULL_FEATURED 0x0
692 /* enum: Prefer to use firmware with fewer features but lower latency */
693 #define MC_CMD_FW_LOW_LATENCY 0x1
694 /* enum: Prefer to use firmware for SolarCapture packed stream mode */
695 #define MC_CMD_FW_PACKED_STREAM 0x2
696 /* enum: Prefer to use firmware with fewer features and simpler TX event
697  * batching but higher TX packet rate
698  */
699 #define MC_CMD_FW_HIGH_TX_RATE 0x3
700 /* enum: Reserved value */
701 #define MC_CMD_FW_PACKED_STREAM_HASH_MODE_1 0x4
702 /* enum: Prefer to use firmware with additional "rules engine" filtering
703  * support
704  */
705 #define MC_CMD_FW_RULES_ENGINE 0x5
706 /* enum: Only this option is allowed for non-admin functions */
707 #define MC_CMD_FW_DONT_CARE 0xffffffff
708 
709 /* MC_CMD_DRV_ATTACH_OUT msgresponse */
710 #define MC_CMD_DRV_ATTACH_OUT_LEN 4
711 /* previous or existing state, see the bitmask at NEW_STATE */
712 #define MC_CMD_DRV_ATTACH_OUT_OLD_STATE_OFST 0
713 
714 /* MC_CMD_DRV_ATTACH_EXT_OUT msgresponse */
715 #define MC_CMD_DRV_ATTACH_EXT_OUT_LEN 8
716 /* previous or existing state, see the bitmask at NEW_STATE */
717 #define MC_CMD_DRV_ATTACH_EXT_OUT_OLD_STATE_OFST 0
718 /* Flags associated with this function */
719 #define MC_CMD_DRV_ATTACH_EXT_OUT_FUNC_FLAGS_OFST 4
720 /* enum: Labels the lowest-numbered function visible to the OS */
721 #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_PRIMARY 0x0
722 /* enum: The function can control the link state of the physical port it is
723  * bound to.
724  */
725 #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL 0x1
726 /* enum: The function can perform privileged operations */
727 #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED 0x2
728 /* enum: The function does not have an active port associated with it. The port
729  * refers to the Sorrento external FPGA port.
730  */
731 #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_NO_ACTIVE_PORT 0x3
732 
733 
734 /***********************************/
735 /* MC_CMD_ENTITY_RESET
736  * Generic per-resource reset. There is no equivalent for per-board reset.
737  * Locks required: None; Return code: 0, ETIME. NOTE: This command is an
738  * extended version of the deprecated MC_CMD_PORT_RESET with added fields.
739  */
740 #define MC_CMD_ENTITY_RESET 0x20
741 /* MC_CMD_0x20_PRIVILEGE_CTG SRIOV_CTG_GENERAL */
742 
743 /* MC_CMD_ENTITY_RESET_IN msgrequest */
744 #define MC_CMD_ENTITY_RESET_IN_LEN 4
745 /* Optional flags field. Omitting this will perform a "legacy" reset action
746  * (TBD).
747  */
748 #define MC_CMD_ENTITY_RESET_IN_FLAG_OFST 0
749 #define MC_CMD_ENTITY_RESET_IN_FUNCTION_RESOURCE_RESET_LBN 0
750 #define MC_CMD_ENTITY_RESET_IN_FUNCTION_RESOURCE_RESET_WIDTH 1
751 
752 /* MC_CMD_ENTITY_RESET_OUT msgresponse */
753 #define MC_CMD_ENTITY_RESET_OUT_LEN 0
754 
755 
756 /***********************************/
757 /* MC_CMD_GET_PHY_CFG
758  * Report PHY configuration. This guarantees to succeed even if the PHY is in a
759  * 'zombie' state. Locks required: None
760  */
761 #define MC_CMD_GET_PHY_CFG 0x24
762 #undef MC_CMD_0x24_PRIVILEGE_CTG
763 
764 #define MC_CMD_0x24_PRIVILEGE_CTG SRIOV_CTG_GENERAL
765 
766 /* MC_CMD_GET_PHY_CFG_IN msgrequest */
767 #define MC_CMD_GET_PHY_CFG_IN_LEN 0
768 
769 /* MC_CMD_GET_PHY_CFG_OUT msgresponse */
770 #define MC_CMD_GET_PHY_CFG_OUT_LEN 72
771 /* flags */
772 #define MC_CMD_GET_PHY_CFG_OUT_FLAGS_OFST 0
773 #define MC_CMD_GET_PHY_CFG_OUT_PRESENT_LBN 0
774 #define MC_CMD_GET_PHY_CFG_OUT_PRESENT_WIDTH 1
775 #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_SHORT_LBN 1
776 #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_SHORT_WIDTH 1
777 #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_LONG_LBN 2
778 #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_LONG_WIDTH 1
779 #define MC_CMD_GET_PHY_CFG_OUT_LOWPOWER_LBN 3
780 #define MC_CMD_GET_PHY_CFG_OUT_LOWPOWER_WIDTH 1
781 #define MC_CMD_GET_PHY_CFG_OUT_POWEROFF_LBN 4
782 #define MC_CMD_GET_PHY_CFG_OUT_POWEROFF_WIDTH 1
783 #define MC_CMD_GET_PHY_CFG_OUT_TXDIS_LBN 5
784 #define MC_CMD_GET_PHY_CFG_OUT_TXDIS_WIDTH 1
785 #define MC_CMD_GET_PHY_CFG_OUT_BIST_LBN 6
786 #define MC_CMD_GET_PHY_CFG_OUT_BIST_WIDTH 1
787 /* ?? */
788 #define MC_CMD_GET_PHY_CFG_OUT_TYPE_OFST 4
789 /* Bitmask of supported capabilities */
790 #define MC_CMD_GET_PHY_CFG_OUT_SUPPORTED_CAP_OFST 8
791 #define MC_CMD_PHY_CAP_10HDX_LBN 1
792 #define MC_CMD_PHY_CAP_10HDX_WIDTH 1
793 #define MC_CMD_PHY_CAP_10FDX_LBN 2
794 #define MC_CMD_PHY_CAP_10FDX_WIDTH 1
795 #define MC_CMD_PHY_CAP_100HDX_LBN 3
796 #define MC_CMD_PHY_CAP_100HDX_WIDTH 1
797 #define MC_CMD_PHY_CAP_100FDX_LBN 4
798 #define MC_CMD_PHY_CAP_100FDX_WIDTH 1
799 #define MC_CMD_PHY_CAP_1000HDX_LBN 5
800 #define MC_CMD_PHY_CAP_1000HDX_WIDTH 1
801 #define MC_CMD_PHY_CAP_1000FDX_LBN 6
802 #define MC_CMD_PHY_CAP_1000FDX_WIDTH 1
803 #define MC_CMD_PHY_CAP_10000FDX_LBN 7
804 #define MC_CMD_PHY_CAP_10000FDX_WIDTH 1
805 #define MC_CMD_PHY_CAP_PAUSE_LBN 8
806 #define MC_CMD_PHY_CAP_PAUSE_WIDTH 1
807 #define MC_CMD_PHY_CAP_ASYM_LBN 9
808 #define MC_CMD_PHY_CAP_ASYM_WIDTH 1
809 #define MC_CMD_PHY_CAP_AN_LBN 10
810 #define MC_CMD_PHY_CAP_AN_WIDTH 1
811 #define MC_CMD_PHY_CAP_40000FDX_LBN 11
812 #define MC_CMD_PHY_CAP_40000FDX_WIDTH 1
813 #define MC_CMD_PHY_CAP_DDM_LBN 12
814 #define MC_CMD_PHY_CAP_DDM_WIDTH 1
815 #define MC_CMD_PHY_CAP_100000FDX_LBN 13
816 #define MC_CMD_PHY_CAP_100000FDX_WIDTH 1
817 #define MC_CMD_PHY_CAP_25000FDX_LBN 14
818 #define MC_CMD_PHY_CAP_25000FDX_WIDTH 1
819 #define MC_CMD_PHY_CAP_50000FDX_LBN 15
820 #define MC_CMD_PHY_CAP_50000FDX_WIDTH 1
821 #define MC_CMD_PHY_CAP_BASER_FEC_LBN 16
822 #define MC_CMD_PHY_CAP_BASER_FEC_WIDTH 1
823 #define MC_CMD_PHY_CAP_BASER_FEC_REQ_LBN 17
824 #define MC_CMD_PHY_CAP_BASER_FEC_REQ_WIDTH 1
825 #define MC_CMD_PHY_CAP_RS_FEC_LBN 17
826 #define MC_CMD_PHY_CAP_RS_FEC_WIDTH 1
827 #define MC_CMD_PHY_CAP_RS_FEC_REQ_LBN 18
828 #define MC_CMD_PHY_CAP_RS_FEC_REQ_WIDTH 1
829 /* ?? */
830 #define MC_CMD_GET_PHY_CFG_OUT_CHANNEL_OFST 12
831 /* ?? */
832 #define MC_CMD_GET_PHY_CFG_OUT_PRT_OFST 16
833 /* ?? */
834 #define MC_CMD_GET_PHY_CFG_OUT_STATS_MASK_OFST 20
835 /* ?? */
836 #define MC_CMD_GET_PHY_CFG_OUT_NAME_OFST 24
837 #define MC_CMD_GET_PHY_CFG_OUT_NAME_LEN 20
838 /* ?? */
839 #define MC_CMD_GET_PHY_CFG_OUT_MEDIA_TYPE_OFST 44
840 /* enum: Xaui. */
841 #define MC_CMD_MEDIA_XAUI 0x1
842 /* enum: CX4. */
843 #define MC_CMD_MEDIA_CX4 0x2
844 /* enum: KX4. */
845 #define MC_CMD_MEDIA_KX4 0x3
846 /* enum: XFP Far. */
847 #define MC_CMD_MEDIA_XFP 0x4
848 /* enum: SFP+. */
849 #define MC_CMD_MEDIA_SFP_PLUS 0x5
850 /* enum: 10GBaseT. */
851 #define MC_CMD_MEDIA_BASE_T 0x6
852 /* enum: QSFP+. */
853 #define MC_CMD_MEDIA_QSFP_PLUS 0x7
854 #define MC_CMD_GET_PHY_CFG_OUT_MMD_MASK_OFST 48
855 /* enum: Native clause 22 */
856 #define MC_CMD_MMD_CLAUSE22 0x0
857 #define MC_CMD_MMD_CLAUSE45_PMAPMD 0x1 /* enum */
858 #define MC_CMD_MMD_CLAUSE45_WIS 0x2 /* enum */
859 #define MC_CMD_MMD_CLAUSE45_PCS 0x3 /* enum */
860 #define MC_CMD_MMD_CLAUSE45_PHYXS 0x4 /* enum */
861 #define MC_CMD_MMD_CLAUSE45_DTEXS 0x5 /* enum */
862 #define MC_CMD_MMD_CLAUSE45_TC 0x6 /* enum */
863 #define MC_CMD_MMD_CLAUSE45_AN 0x7 /* enum */
864 /* enum: Clause22 proxied over clause45 by PHY. */
865 #define MC_CMD_MMD_CLAUSE45_C22EXT 0x1d
866 #define MC_CMD_MMD_CLAUSE45_VEND1 0x1e /* enum */
867 #define MC_CMD_MMD_CLAUSE45_VEND2 0x1f /* enum */
868 #define MC_CMD_GET_PHY_CFG_OUT_REVISION_OFST 52
869 #define MC_CMD_GET_PHY_CFG_OUT_REVISION_LEN 20
870 
871 
872 /***********************************/
873 /* MC_CMD_GET_LINK
874  * Read the unified MAC/PHY link state. Locks required: None Return code: 0,
875  * ETIME.
876  */
877 #define MC_CMD_GET_LINK 0x29
878 #undef MC_CMD_0x29_PRIVILEGE_CTG
879 
880 #define MC_CMD_0x29_PRIVILEGE_CTG SRIOV_CTG_GENERAL
881 
882 /* MC_CMD_GET_LINK_IN msgrequest */
883 #define MC_CMD_GET_LINK_IN_LEN 0
884 
885 /* MC_CMD_GET_LINK_OUT msgresponse */
886 #define MC_CMD_GET_LINK_OUT_LEN 28
887 /* near-side advertised capabilities */
888 #define MC_CMD_GET_LINK_OUT_CAP_OFST 0
889 /* link-partner advertised capabilities */
890 #define MC_CMD_GET_LINK_OUT_LP_CAP_OFST 4
891 /* Autonegotiated speed in mbit/s. The link may still be down even if this
892  * reads non-zero.
893  */
894 #define MC_CMD_GET_LINK_OUT_LINK_SPEED_OFST 8
895 /* Current loopback setting. */
896 #define MC_CMD_GET_LINK_OUT_LOOPBACK_MODE_OFST 12
897 /* Enum values, see field(s): */
898 /* MC_CMD_GET_LOOPBACK_MODES/MC_CMD_GET_LOOPBACK_MODES_OUT/100M */
899 #define MC_CMD_GET_LINK_OUT_FLAGS_OFST 16
900 #define MC_CMD_GET_LINK_OUT_LINK_UP_LBN 0
901 #define MC_CMD_GET_LINK_OUT_LINK_UP_WIDTH 1
902 #define MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN 1
903 #define MC_CMD_GET_LINK_OUT_FULL_DUPLEX_WIDTH 1
904 #define MC_CMD_GET_LINK_OUT_BPX_LINK_LBN 2
905 #define MC_CMD_GET_LINK_OUT_BPX_LINK_WIDTH 1
906 #define MC_CMD_GET_LINK_OUT_PHY_LINK_LBN 3
907 #define MC_CMD_GET_LINK_OUT_PHY_LINK_WIDTH 1
908 #define MC_CMD_GET_LINK_OUT_LINK_FAULT_RX_LBN 6
909 #define MC_CMD_GET_LINK_OUT_LINK_FAULT_RX_WIDTH 1
910 #define MC_CMD_GET_LINK_OUT_LINK_FAULT_TX_LBN 7
911 #define MC_CMD_GET_LINK_OUT_LINK_FAULT_TX_WIDTH 1
912 /* This returns the negotiated flow control value. */
913 #define MC_CMD_GET_LINK_OUT_FCNTL_OFST 20
914 /* Enum values, see field(s): */
915 /* MC_CMD_SET_MAC/MC_CMD_SET_MAC_IN/FCNTL */
916 #define MC_CMD_GET_LINK_OUT_MAC_FAULT_OFST 24
917 #define MC_CMD_MAC_FAULT_XGMII_LOCAL_LBN 0
918 #define MC_CMD_MAC_FAULT_XGMII_LOCAL_WIDTH 1
919 #define MC_CMD_MAC_FAULT_XGMII_REMOTE_LBN 1
920 #define MC_CMD_MAC_FAULT_XGMII_REMOTE_WIDTH 1
921 #define MC_CMD_MAC_FAULT_SGMII_REMOTE_LBN 2
922 #define MC_CMD_MAC_FAULT_SGMII_REMOTE_WIDTH 1
923 #define MC_CMD_MAC_FAULT_PENDING_RECONFIG_LBN 3
924 #define MC_CMD_MAC_FAULT_PENDING_RECONFIG_WIDTH 1
925 
926 
927 /***********************************/
928 /* MC_CMD_SET_MAC
929  * Set MAC configuration. Locks required: None. Return code: 0, EINVAL
930  */
931 #define MC_CMD_SET_MAC 0x2c
932 #undef MC_CMD_0x2c_PRIVILEGE_CTG
933 
934 #define MC_CMD_0x2c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
935 
936 /* MC_CMD_SET_MAC_IN msgrequest */
937 #define MC_CMD_SET_MAC_IN_LEN 28
938 /* The MTU is the MTU programmed directly into the XMAC/GMAC (inclusive of
939  * EtherII, VLAN, bug16011 padding).
940  */
941 #define MC_CMD_SET_MAC_IN_MTU_OFST 0
942 #define MC_CMD_SET_MAC_IN_DRAIN_OFST 4
943 #define MC_CMD_SET_MAC_IN_ADDR_OFST 8
944 #define MC_CMD_SET_MAC_IN_ADDR_LEN 8
945 #define MC_CMD_SET_MAC_IN_ADDR_LO_OFST 8
946 #define MC_CMD_SET_MAC_IN_ADDR_HI_OFST 12
947 #define MC_CMD_SET_MAC_IN_REJECT_OFST 16
948 #define MC_CMD_SET_MAC_IN_REJECT_UNCST_LBN 0
949 #define MC_CMD_SET_MAC_IN_REJECT_UNCST_WIDTH 1
950 #define MC_CMD_SET_MAC_IN_REJECT_BRDCST_LBN 1
951 #define MC_CMD_SET_MAC_IN_REJECT_BRDCST_WIDTH 1
952 #define MC_CMD_SET_MAC_IN_FCNTL_OFST 20
953 /* enum: Flow control is off. */
954 #define MC_CMD_FCNTL_OFF 0x0
955 /* enum: Respond to flow control. */
956 #define MC_CMD_FCNTL_RESPOND 0x1
957 /* enum: Respond to and Issue flow control. */
958 #define MC_CMD_FCNTL_BIDIR 0x2
959 /* enum: Auto neg flow control. */
960 #define MC_CMD_FCNTL_AUTO 0x3
961 /* enum: Priority flow control (eftest builds only). */
962 #define MC_CMD_FCNTL_QBB 0x4
963 /* enum: Issue flow control. */
964 #define MC_CMD_FCNTL_GENERATE 0x5
965 #define MC_CMD_SET_MAC_IN_FLAGS_OFST 24
966 #define MC_CMD_SET_MAC_IN_FLAG_INCLUDE_FCS_LBN 0
967 #define MC_CMD_SET_MAC_IN_FLAG_INCLUDE_FCS_WIDTH 1
968 
969 /* MC_CMD_SET_MAC_EXT_IN msgrequest */
970 #define MC_CMD_SET_MAC_EXT_IN_LEN 32
971 /* The MTU is the MTU programmed directly into the XMAC/GMAC (inclusive of
972  * EtherII, VLAN, bug16011 padding).
973  */
974 #define MC_CMD_SET_MAC_EXT_IN_MTU_OFST 0
975 #define MC_CMD_SET_MAC_EXT_IN_DRAIN_OFST 4
976 #define MC_CMD_SET_MAC_EXT_IN_ADDR_OFST 8
977 #define MC_CMD_SET_MAC_EXT_IN_ADDR_LEN 8
978 #define MC_CMD_SET_MAC_EXT_IN_ADDR_LO_OFST 8
979 #define MC_CMD_SET_MAC_EXT_IN_ADDR_HI_OFST 12
980 #define MC_CMD_SET_MAC_EXT_IN_REJECT_OFST 16
981 #define MC_CMD_SET_MAC_EXT_IN_REJECT_UNCST_LBN 0
982 #define MC_CMD_SET_MAC_EXT_IN_REJECT_UNCST_WIDTH 1
983 #define MC_CMD_SET_MAC_EXT_IN_REJECT_BRDCST_LBN 1
984 #define MC_CMD_SET_MAC_EXT_IN_REJECT_BRDCST_WIDTH 1
985 #define MC_CMD_SET_MAC_EXT_IN_FCNTL_OFST 20
986 /* enum: Flow control is off. */
987 /* MC_CMD_FCNTL_OFF 0x0 */
988 /* enum: Respond to flow control. */
989 /* MC_CMD_FCNTL_RESPOND 0x1 */
990 /* enum: Respond to and Issue flow control. */
991 /* MC_CMD_FCNTL_BIDIR 0x2 */
992 /* enum: Auto neg flow control. */
993 /* MC_CMD_FCNTL_AUTO 0x3 */
994 /* enum: Priority flow control (eftest builds only). */
995 /* MC_CMD_FCNTL_QBB 0x4 */
996 /* enum: Issue flow control. */
997 /* MC_CMD_FCNTL_GENERATE 0x5 */
998 #define MC_CMD_SET_MAC_EXT_IN_FLAGS_OFST 24
999 #define MC_CMD_SET_MAC_EXT_IN_FLAG_INCLUDE_FCS_LBN 0
1000 #define MC_CMD_SET_MAC_EXT_IN_FLAG_INCLUDE_FCS_WIDTH 1
1001 /* Select which parameters to configure. A parameter will only be modified if
1002  * the corresponding control flag is set. If SET_MAC_ENHANCED is not set in
1003  * capabilities then this field is ignored (and all flags are assumed to be
1004  * set).
1005  */
1006 #define MC_CMD_SET_MAC_EXT_IN_CONTROL_OFST 28
1007 #define MC_CMD_SET_MAC_EXT_IN_CFG_MTU_LBN 0
1008 #define MC_CMD_SET_MAC_EXT_IN_CFG_MTU_WIDTH 1
1009 #define MC_CMD_SET_MAC_EXT_IN_CFG_DRAIN_LBN 1
1010 #define MC_CMD_SET_MAC_EXT_IN_CFG_DRAIN_WIDTH 1
1011 #define MC_CMD_SET_MAC_EXT_IN_CFG_REJECT_LBN 2
1012 #define MC_CMD_SET_MAC_EXT_IN_CFG_REJECT_WIDTH 1
1013 #define MC_CMD_SET_MAC_EXT_IN_CFG_FCNTL_LBN 3
1014 #define MC_CMD_SET_MAC_EXT_IN_CFG_FCNTL_WIDTH 1
1015 #define MC_CMD_SET_MAC_EXT_IN_CFG_FCS_LBN 4
1016 #define MC_CMD_SET_MAC_EXT_IN_CFG_FCS_WIDTH 1
1017 
1018 /* MC_CMD_SET_MAC_OUT msgresponse */
1019 #define MC_CMD_SET_MAC_OUT_LEN 0
1020 
1021 /* MC_CMD_SET_MAC_V2_OUT msgresponse */
1022 #define MC_CMD_SET_MAC_V2_OUT_LEN 4
1023 /* MTU as configured after processing the request. See comment at
1024  * MC_CMD_SET_MAC_IN/MTU. To query MTU without doing any changes, set CONTROL
1025  * to 0.
1026  */
1027 #define MC_CMD_SET_MAC_V2_OUT_MTU_OFST 0
1028 
1029 
1030 /***********************************/
1031 /* MC_CMD_REBOOT
1032  * Reboot the MC.
1033  *
1034  * The AFTER_ASSERTION flag is intended to be used when the driver notices an
1035  * assertion failure (at which point it is expected to perform a complete tear
1036  * down and reinitialise), to allow both ports to reset the MC once in an
1037  * atomic fashion.
1038  *
1039  * Production mc firmwares are generally compiled with REBOOT_ON_ASSERT=1,
1040  * which means that they will automatically reboot out of the assertion
1041  * handler, so this is in practise an optional operation. It is still
1042  * recommended that drivers execute this to support custom firmwares with
1043  * REBOOT_ON_ASSERT=0.
1044  *
1045  * Locks required: NONE Returns: Nothing. You get back a response with ERR=1,
1046  * DATALEN=0
1047  */
1048 #define MC_CMD_REBOOT 0x3d
1049 #undef MC_CMD_0x3d_PRIVILEGE_CTG
1050 
1051 #define MC_CMD_0x3d_PRIVILEGE_CTG SRIOV_CTG_ADMIN
1052 
1053 /* MC_CMD_REBOOT_IN msgrequest */
1054 #define MC_CMD_REBOOT_IN_LEN 4
1055 #define MC_CMD_REBOOT_IN_FLAGS_OFST 0
1056 #define MC_CMD_REBOOT_FLAGS_AFTER_ASSERTION 0x1 /* enum */
1057 
1058 /* MC_CMD_REBOOT_OUT msgresponse */
1059 #define MC_CMD_REBOOT_OUT_LEN 0
1060 
1061 
1062 /***********************************/
1063 /* MC_CMD_REBOOT_MODE
1064  * Set the mode for the next MC reboot. Locks required: NONE. Sets the reboot
1065  * mode to the specified value. Returns the old mode.
1066  */
1067 #define MC_CMD_REBOOT_MODE 0x3f
1068 #undef MC_CMD_0x3f_PRIVILEGE_CTG
1069 
1070 #define MC_CMD_0x3f_PRIVILEGE_CTG SRIOV_CTG_ADMIN
1071 
1072 /* MC_CMD_REBOOT_MODE_IN msgrequest */
1073 #define MC_CMD_REBOOT_MODE_IN_LEN 4
1074 #define MC_CMD_REBOOT_MODE_IN_VALUE_OFST 0
1075 /* enum: Normal. */
1076 #define MC_CMD_REBOOT_MODE_NORMAL 0x0
1077 /* enum: Power-on Reset. */
1078 #define MC_CMD_REBOOT_MODE_POR 0x2
1079 /* enum: Snapper. */
1080 #define MC_CMD_REBOOT_MODE_SNAPPER 0x3
1081 /* enum: snapper fake POR */
1082 #define MC_CMD_REBOOT_MODE_SNAPPER_POR 0x4
1083 #define MC_CMD_REBOOT_MODE_IN_FAKE_LBN 7
1084 #define MC_CMD_REBOOT_MODE_IN_FAKE_WIDTH 1
1085 
1086 /* MC_CMD_REBOOT_MODE_OUT msgresponse */
1087 #define MC_CMD_REBOOT_MODE_OUT_LEN 4
1088 #define MC_CMD_REBOOT_MODE_OUT_VALUE_OFST 0
1089 
1090 
1091 /***********************************/
1092 /* MC_CMD_WORKAROUND
1093  * Enable/Disable a given workaround. The mcfw will return EINVAL if it doesn't
1094  * understand the given workaround number - which should not be treated as a
1095  * hard error by client code. This op does not imply any semantics about each
1096  * workaround, that's between the driver and the mcfw on a per-workaround
1097  * basis. Locks required: None. Returns: 0, EINVAL .
1098  */
1099 #define MC_CMD_WORKAROUND 0x4a
1100 #undef MC_CMD_0x4a_PRIVILEGE_CTG
1101 
1102 #define MC_CMD_0x4a_PRIVILEGE_CTG SRIOV_CTG_ADMIN
1103 
1104 /* MC_CMD_WORKAROUND_IN msgrequest */
1105 #define MC_CMD_WORKAROUND_IN_LEN 8
1106 /* The enums here must correspond with those in MC_CMD_GET_WORKAROUND. */
1107 #define MC_CMD_WORKAROUND_IN_TYPE_OFST 0
1108 /* enum: Bug 17230 work around. */
1109 #define MC_CMD_WORKAROUND_BUG17230 0x1
1110 /* enum: Bug 35388 work around (unsafe EVQ writes). */
1111 #define MC_CMD_WORKAROUND_BUG35388 0x2
1112 /* enum: Bug35017 workaround (A64 tables must be identity map) */
1113 #define MC_CMD_WORKAROUND_BUG35017 0x3
1114 /* enum: Bug 41750 present (MC_CMD_TRIGGER_INTERRUPT won't work) */
1115 #define MC_CMD_WORKAROUND_BUG41750 0x4
1116 /* enum: Bug 42008 present (Interrupts can overtake associated events). Caution
1117  * - before adding code that queries this workaround, remember that there's
1118  * released Monza firmware that doesn't understand MC_CMD_WORKAROUND_BUG42008,
1119  * and will hence (incorrectly) report that the bug doesn't exist.
1120  */
1121 #define MC_CMD_WORKAROUND_BUG42008 0x5
1122 /* enum: Bug 26807 features present in firmware (multicast filter chaining)
1123  * This feature cannot be turned on/off while there are any filters already
1124  * present. The behaviour in such case depends on the acting client's privilege
1125  * level. If the client has the admin privilege, then all functions that have
1126  * filters installed will be FLRed and the FLR_DONE flag will be set. Otherwise
1127  * the command will fail with MC_CMD_ERR_FILTERS_PRESENT.
1128  */
1129 #define MC_CMD_WORKAROUND_BUG26807 0x6
1130 /* enum: Bug 61265 work around (broken EVQ TMR writes). */
1131 #define MC_CMD_WORKAROUND_BUG61265 0x7
1132 /* 0 = disable the workaround indicated by TYPE; any non-zero value = enable
1133  * the workaround
1134  */
1135 #define MC_CMD_WORKAROUND_IN_ENABLED_OFST 4
1136 
1137 /* MC_CMD_WORKAROUND_OUT msgresponse */
1138 #define MC_CMD_WORKAROUND_OUT_LEN 0
1139 
1140 /* MC_CMD_WORKAROUND_EXT_OUT msgresponse: This response format will be used
1141  * when (TYPE == MC_CMD_WORKAROUND_BUG26807)
1142  */
1143 #define MC_CMD_WORKAROUND_EXT_OUT_LEN 4
1144 #define MC_CMD_WORKAROUND_EXT_OUT_FLAGS_OFST 0
1145 #define MC_CMD_WORKAROUND_EXT_OUT_FLR_DONE_LBN 0
1146 #define MC_CMD_WORKAROUND_EXT_OUT_FLR_DONE_WIDTH 1
1147 
1148 
1149 /***********************************/
1150 /* MC_CMD_GET_MAC_ADDRESSES
1151  * Returns the base MAC, count and stride for the requesting function
1152  */
1153 #define MC_CMD_GET_MAC_ADDRESSES 0x55
1154 #undef MC_CMD_0x55_PRIVILEGE_CTG
1155 
1156 #define MC_CMD_0x55_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1157 
1158 /* MC_CMD_GET_MAC_ADDRESSES_IN msgrequest */
1159 #define MC_CMD_GET_MAC_ADDRESSES_IN_LEN 0
1160 
1161 /* MC_CMD_GET_MAC_ADDRESSES_OUT msgresponse */
1162 #define MC_CMD_GET_MAC_ADDRESSES_OUT_LEN 16
1163 /* Base MAC address */
1164 #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_ADDR_BASE_OFST 0
1165 #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_ADDR_BASE_LEN 6
1166 /* Padding */
1167 #define MC_CMD_GET_MAC_ADDRESSES_OUT_RESERVED_OFST 6
1168 #define MC_CMD_GET_MAC_ADDRESSES_OUT_RESERVED_LEN 2
1169 /* Number of allocated MAC addresses */
1170 #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_COUNT_OFST 8
1171 /* Spacing of allocated MAC addresses */
1172 #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_STRIDE_OFST 12
1173 
1174 
1175 /***********************************/
1176 /* MC_CMD_GET_WORKAROUNDS
1177  * Read the list of all implemented and all currently enabled workarounds. The
1178  * enums here must correspond with those in MC_CMD_WORKAROUND.
1179  */
1180 #define MC_CMD_GET_WORKAROUNDS 0x59
1181 #undef MC_CMD_0x59_PRIVILEGE_CTG
1182 
1183 #define MC_CMD_0x59_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1184 
1185 /* MC_CMD_GET_WORKAROUNDS_OUT msgresponse */
1186 #define MC_CMD_GET_WORKAROUNDS_OUT_LEN 8
1187 /* Each workaround is represented by a single bit according to the enums below.
1188  */
1189 #define MC_CMD_GET_WORKAROUNDS_OUT_IMPLEMENTED_OFST 0
1190 #define MC_CMD_GET_WORKAROUNDS_OUT_ENABLED_OFST 4
1191 /* enum: Bug 17230 work around. */
1192 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG17230 0x2
1193 /* enum: Bug 35388 work around (unsafe EVQ writes). */
1194 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG35388 0x4
1195 /* enum: Bug35017 workaround (A64 tables must be identity map) */
1196 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG35017 0x8
1197 /* enum: Bug 41750 present (MC_CMD_TRIGGER_INTERRUPT won't work) */
1198 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG41750 0x10
1199 /* enum: Bug 42008 present (Interrupts can overtake associated events). Caution
1200  * - before adding code that queries this workaround, remember that there's
1201  * released Monza firmware that doesn't understand MC_CMD_WORKAROUND_BUG42008,
1202  * and will hence (incorrectly) report that the bug doesn't exist.
1203  */
1204 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG42008 0x20
1205 /* enum: Bug 26807 features present in firmware (multicast filter chaining) */
1206 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG26807 0x40
1207 /* enum: Bug 61265 work around (broken EVQ TMR writes). */
1208 #define MC_CMD_GET_WORKAROUNDS_OUT_BUG61265 0x80
1209 
1210 
1211 /***********************************/
1212 /* MC_CMD_V2_EXTN
1213  * Encapsulation for a v2 extended command
1214  */
1215 #define MC_CMD_V2_EXTN 0x7f
1216 
1217 /* MC_CMD_V2_EXTN_IN msgrequest */
1218 #define MC_CMD_V2_EXTN_IN_LEN 4
1219 /* the extended command number */
1220 #define MC_CMD_V2_EXTN_IN_EXTENDED_CMD_LBN 0
1221 #define MC_CMD_V2_EXTN_IN_EXTENDED_CMD_WIDTH 15
1222 #define MC_CMD_V2_EXTN_IN_UNUSED_LBN 15
1223 #define MC_CMD_V2_EXTN_IN_UNUSED_WIDTH 1
1224 /* the actual length of the encapsulated command (which is not in the v1
1225  * header)
1226  */
1227 #define MC_CMD_V2_EXTN_IN_ACTUAL_LEN_LBN 16
1228 #define MC_CMD_V2_EXTN_IN_ACTUAL_LEN_WIDTH 10
1229 #define MC_CMD_V2_EXTN_IN_UNUSED2_LBN 26
1230 #define MC_CMD_V2_EXTN_IN_UNUSED2_WIDTH 2
1231 /* Type of command/response */
1232 #define MC_CMD_V2_EXTN_IN_MESSAGE_TYPE_LBN 28
1233 #define MC_CMD_V2_EXTN_IN_MESSAGE_TYPE_WIDTH 4
1234 /* enum: MCDI command directed to or response originating from the MC. */
1235 #define MC_CMD_V2_EXTN_IN_MCDI_MESSAGE_TYPE_MC 0x0
1236 /* enum: MCDI command directed to a TSA controller. MCDI responses of this type
1237  * are not defined.
1238  */
1239 #define MC_CMD_V2_EXTN_IN_MCDI_MESSAGE_TYPE_TSA 0x1
1240 
1241 
1242 /***********************************/
1243 /* MC_CMD_INIT_EVQ
1244  * Set up an event queue according to the supplied parameters. The IN arguments
1245  * end with an address for each 4k of host memory required to back the EVQ.
1246  */
1247 #define MC_CMD_INIT_EVQ 0x80
1248 #undef MC_CMD_0x80_PRIVILEGE_CTG
1249 
1250 #define MC_CMD_0x80_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1251 
1252 /* MC_CMD_INIT_EVQ_IN msgrequest */
1253 #define MC_CMD_INIT_EVQ_IN_LENMIN 44
1254 #define MC_CMD_INIT_EVQ_IN_LENMAX 548
1255 #define MC_CMD_INIT_EVQ_IN_LEN(num) (36+8*(num))
1256 /* Size, in entries */
1257 #define MC_CMD_INIT_EVQ_IN_SIZE_OFST 0
1258 /* Desired instance. Must be set to a specific instance, which is a function
1259  * local queue index.
1260  */
1261 #define MC_CMD_INIT_EVQ_IN_INSTANCE_OFST 4
1262 /* The initial timer value. The load value is ignored if the timer mode is DIS.
1263  */
1264 #define MC_CMD_INIT_EVQ_IN_TMR_LOAD_OFST 8
1265 /* The reload value is ignored in one-shot modes */
1266 #define MC_CMD_INIT_EVQ_IN_TMR_RELOAD_OFST 12
1267 /* tbd */
1268 #define MC_CMD_INIT_EVQ_IN_FLAGS_OFST 16
1269 #define MC_CMD_INIT_EVQ_IN_FLAG_INTERRUPTING_LBN 0
1270 #define MC_CMD_INIT_EVQ_IN_FLAG_INTERRUPTING_WIDTH 1
1271 #define MC_CMD_INIT_EVQ_IN_FLAG_RPTR_DOS_LBN 1
1272 #define MC_CMD_INIT_EVQ_IN_FLAG_RPTR_DOS_WIDTH 1
1273 #define MC_CMD_INIT_EVQ_IN_FLAG_INT_ARMD_LBN 2
1274 #define MC_CMD_INIT_EVQ_IN_FLAG_INT_ARMD_WIDTH 1
1275 #define MC_CMD_INIT_EVQ_IN_FLAG_CUT_THRU_LBN 3
1276 #define MC_CMD_INIT_EVQ_IN_FLAG_CUT_THRU_WIDTH 1
1277 #define MC_CMD_INIT_EVQ_IN_FLAG_RX_MERGE_LBN 4
1278 #define MC_CMD_INIT_EVQ_IN_FLAG_RX_MERGE_WIDTH 1
1279 #define MC_CMD_INIT_EVQ_IN_FLAG_TX_MERGE_LBN 5
1280 #define MC_CMD_INIT_EVQ_IN_FLAG_TX_MERGE_WIDTH 1
1281 #define MC_CMD_INIT_EVQ_IN_FLAG_USE_TIMER_LBN 6
1282 #define MC_CMD_INIT_EVQ_IN_FLAG_USE_TIMER_WIDTH 1
1283 #define MC_CMD_INIT_EVQ_IN_TMR_MODE_OFST 20
1284 /* enum: Disabled */
1285 #define MC_CMD_INIT_EVQ_IN_TMR_MODE_DIS 0x0
1286 /* enum: Immediate */
1287 #define MC_CMD_INIT_EVQ_IN_TMR_IMMED_START 0x1
1288 /* enum: Triggered */
1289 #define MC_CMD_INIT_EVQ_IN_TMR_TRIG_START 0x2
1290 /* enum: Hold-off */
1291 #define MC_CMD_INIT_EVQ_IN_TMR_INT_HLDOFF 0x3
1292 /* Target EVQ for wakeups if in wakeup mode. */
1293 #define MC_CMD_INIT_EVQ_IN_TARGET_EVQ_OFST 24
1294 /* Target interrupt if in interrupting mode (note union with target EVQ). Use
1295  * MC_CMD_RESOURCE_INSTANCE_ANY unless a specific one required for test
1296  * purposes.
1297  */
1298 #define MC_CMD_INIT_EVQ_IN_IRQ_NUM_OFST 24
1299 /* Event Counter Mode. */
1300 #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_OFST 28
1301 /* enum: Disabled */
1302 #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_DIS 0x0
1303 /* enum: Disabled */
1304 #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_RX 0x1
1305 /* enum: Disabled */
1306 #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_TX 0x2
1307 /* enum: Disabled */
1308 #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_RXTX 0x3
1309 /* Event queue packet count threshold. */
1310 #define MC_CMD_INIT_EVQ_IN_COUNT_THRSHLD_OFST 32
1311 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1312 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_OFST 36
1313 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_LEN 8
1314 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_LO_OFST 36
1315 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_HI_OFST 40
1316 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_MINNUM 1
1317 #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_MAXNUM 64
1318 
1319 /* MC_CMD_INIT_EVQ_OUT msgresponse */
1320 #define MC_CMD_INIT_EVQ_OUT_LEN 4
1321 /* Only valid if INTRFLAG was true */
1322 #define MC_CMD_INIT_EVQ_OUT_IRQ_OFST 0
1323 
1324 /* MC_CMD_INIT_EVQ_V2_IN msgrequest */
1325 #define MC_CMD_INIT_EVQ_V2_IN_LENMIN 44
1326 #define MC_CMD_INIT_EVQ_V2_IN_LENMAX 548
1327 #define MC_CMD_INIT_EVQ_V2_IN_LEN(num) (36+8*(num))
1328 /* Size, in entries */
1329 #define MC_CMD_INIT_EVQ_V2_IN_SIZE_OFST 0
1330 /* Desired instance. Must be set to a specific instance, which is a function
1331  * local queue index.
1332  */
1333 #define MC_CMD_INIT_EVQ_V2_IN_INSTANCE_OFST 4
1334 /* The initial timer value. The load value is ignored if the timer mode is DIS.
1335  */
1336 #define MC_CMD_INIT_EVQ_V2_IN_TMR_LOAD_OFST 8
1337 /* The reload value is ignored in one-shot modes */
1338 #define MC_CMD_INIT_EVQ_V2_IN_TMR_RELOAD_OFST 12
1339 /* tbd */
1340 #define MC_CMD_INIT_EVQ_V2_IN_FLAGS_OFST 16
1341 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INTERRUPTING_LBN 0
1342 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INTERRUPTING_WIDTH 1
1343 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RPTR_DOS_LBN 1
1344 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RPTR_DOS_WIDTH 1
1345 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INT_ARMD_LBN 2
1346 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INT_ARMD_WIDTH 1
1347 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_CUT_THRU_LBN 3
1348 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_CUT_THRU_WIDTH 1
1349 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RX_MERGE_LBN 4
1350 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RX_MERGE_WIDTH 1
1351 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TX_MERGE_LBN 5
1352 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TX_MERGE_WIDTH 1
1353 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_USE_TIMER_LBN 6
1354 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_USE_TIMER_WIDTH 1
1355 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_LBN 7
1356 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_WIDTH 4
1357 /* enum: All initialisation flags specified by host. */
1358 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_MANUAL 0x0
1359 /* enum: MEDFORD only. Certain initialisation flags specified by host may be
1360  * over-ridden by firmware based on licenses and firmware variant in order to
1361  * provide the lowest latency achievable. See
1362  * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
1363  */
1364 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_LOW_LATENCY 0x1
1365 /* enum: MEDFORD only. Certain initialisation flags specified by host may be
1366  * over-ridden by firmware based on licenses and firmware variant in order to
1367  * provide the best throughput achievable. See
1368  * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
1369  */
1370 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_THROUGHPUT 0x2
1371 /* enum: MEDFORD only. Certain initialisation flags may be over-ridden by
1372  * firmware based on licenses and firmware variant. See
1373  * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
1374  */
1375 #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_AUTO 0x3
1376 #define MC_CMD_INIT_EVQ_V2_IN_TMR_MODE_OFST 20
1377 /* enum: Disabled */
1378 #define MC_CMD_INIT_EVQ_V2_IN_TMR_MODE_DIS 0x0
1379 /* enum: Immediate */
1380 #define MC_CMD_INIT_EVQ_V2_IN_TMR_IMMED_START 0x1
1381 /* enum: Triggered */
1382 #define MC_CMD_INIT_EVQ_V2_IN_TMR_TRIG_START 0x2
1383 /* enum: Hold-off */
1384 #define MC_CMD_INIT_EVQ_V2_IN_TMR_INT_HLDOFF 0x3
1385 /* Target EVQ for wakeups if in wakeup mode. */
1386 #define MC_CMD_INIT_EVQ_V2_IN_TARGET_EVQ_OFST 24
1387 /* Target interrupt if in interrupting mode (note union with target EVQ). Use
1388  * MC_CMD_RESOURCE_INSTANCE_ANY unless a specific one required for test
1389  * purposes.
1390  */
1391 #define MC_CMD_INIT_EVQ_V2_IN_IRQ_NUM_OFST 24
1392 /* Event Counter Mode. */
1393 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_OFST 28
1394 /* enum: Disabled */
1395 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_DIS 0x0
1396 /* enum: Disabled */
1397 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_RX 0x1
1398 /* enum: Disabled */
1399 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_TX 0x2
1400 /* enum: Disabled */
1401 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_RXTX 0x3
1402 /* Event queue packet count threshold. */
1403 #define MC_CMD_INIT_EVQ_V2_IN_COUNT_THRSHLD_OFST 32
1404 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1405 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_OFST 36
1406 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_LEN 8
1407 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_LO_OFST 36
1408 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_HI_OFST 40
1409 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_MINNUM 1
1410 #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_MAXNUM 64
1411 
1412 /* MC_CMD_INIT_EVQ_V2_OUT msgresponse */
1413 #define MC_CMD_INIT_EVQ_V2_OUT_LEN 8
1414 /* Only valid if INTRFLAG was true */
1415 #define MC_CMD_INIT_EVQ_V2_OUT_IRQ_OFST 0
1416 /* Actual configuration applied on the card */
1417 #define MC_CMD_INIT_EVQ_V2_OUT_FLAGS_OFST 4
1418 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_CUT_THRU_LBN 0
1419 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_CUT_THRU_WIDTH 1
1420 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RX_MERGE_LBN 1
1421 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RX_MERGE_WIDTH 1
1422 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_TX_MERGE_LBN 2
1423 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_TX_MERGE_WIDTH 1
1424 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RXQ_FORCE_EV_MERGING_LBN 3
1425 #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RXQ_FORCE_EV_MERGING_WIDTH 1
1426 
1427 /* QUEUE_CRC_MODE structuredef */
1428 #define QUEUE_CRC_MODE_LEN 1
1429 #define QUEUE_CRC_MODE_MODE_LBN 0
1430 #define QUEUE_CRC_MODE_MODE_WIDTH 4
1431 /* enum: No CRC. */
1432 #define QUEUE_CRC_MODE_NONE 0x0
1433 /* enum: CRC Fiber channel over ethernet. */
1434 #define QUEUE_CRC_MODE_FCOE 0x1
1435 /* enum: CRC (digest) iSCSI header only. */
1436 #define QUEUE_CRC_MODE_ISCSI_HDR 0x2
1437 /* enum: CRC (digest) iSCSI header and payload. */
1438 #define QUEUE_CRC_MODE_ISCSI 0x3
1439 /* enum: CRC Fiber channel over IP over ethernet. */
1440 #define QUEUE_CRC_MODE_FCOIPOE 0x4
1441 /* enum: CRC MPA. */
1442 #define QUEUE_CRC_MODE_MPA 0x5
1443 #define QUEUE_CRC_MODE_SPARE_LBN 4
1444 #define QUEUE_CRC_MODE_SPARE_WIDTH 4
1445 
1446 
1447 /***********************************/
1448 /* MC_CMD_INIT_RXQ
1449  * set up a receive queue according to the supplied parameters. The IN
1450  * arguments end with an address for each 4k of host memory required to back
1451  * the RXQ.
1452  */
1453 #define MC_CMD_INIT_RXQ 0x81
1454 #undef MC_CMD_0x81_PRIVILEGE_CTG
1455 
1456 #define MC_CMD_0x81_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1457 
1458 /* MC_CMD_INIT_RXQ_IN msgrequest: Legacy RXQ_INIT request. Use extended version
1459  * in new code.
1460  */
1461 #define MC_CMD_INIT_RXQ_IN_LENMIN 36
1462 #define MC_CMD_INIT_RXQ_IN_LENMAX 252
1463 #define MC_CMD_INIT_RXQ_IN_LEN(num) (28+8*(num))
1464 /* Size, in entries */
1465 #define MC_CMD_INIT_RXQ_IN_SIZE_OFST 0
1466 /* The EVQ to send events to. This is an index originally specified to INIT_EVQ
1467  */
1468 #define MC_CMD_INIT_RXQ_IN_TARGET_EVQ_OFST 4
1469 /* The value to put in the event data. Check hardware spec. for valid range. */
1470 #define MC_CMD_INIT_RXQ_IN_LABEL_OFST 8
1471 /* Desired instance. Must be set to a specific instance, which is a function
1472  * local queue index.
1473  */
1474 #define MC_CMD_INIT_RXQ_IN_INSTANCE_OFST 12
1475 /* There will be more flags here. */
1476 #define MC_CMD_INIT_RXQ_IN_FLAGS_OFST 16
1477 #define MC_CMD_INIT_RXQ_IN_FLAG_BUFF_MODE_LBN 0
1478 #define MC_CMD_INIT_RXQ_IN_FLAG_BUFF_MODE_WIDTH 1
1479 #define MC_CMD_INIT_RXQ_IN_FLAG_HDR_SPLIT_LBN 1
1480 #define MC_CMD_INIT_RXQ_IN_FLAG_HDR_SPLIT_WIDTH 1
1481 #define MC_CMD_INIT_RXQ_IN_FLAG_TIMESTAMP_LBN 2
1482 #define MC_CMD_INIT_RXQ_IN_FLAG_TIMESTAMP_WIDTH 1
1483 #define MC_CMD_INIT_RXQ_IN_CRC_MODE_LBN 3
1484 #define MC_CMD_INIT_RXQ_IN_CRC_MODE_WIDTH 4
1485 #define MC_CMD_INIT_RXQ_IN_FLAG_CHAIN_LBN 7
1486 #define MC_CMD_INIT_RXQ_IN_FLAG_CHAIN_WIDTH 1
1487 #define MC_CMD_INIT_RXQ_IN_FLAG_PREFIX_LBN 8
1488 #define MC_CMD_INIT_RXQ_IN_FLAG_PREFIX_WIDTH 1
1489 #define MC_CMD_INIT_RXQ_IN_FLAG_DISABLE_SCATTER_LBN 9
1490 #define MC_CMD_INIT_RXQ_IN_FLAG_DISABLE_SCATTER_WIDTH 1
1491 #define MC_CMD_INIT_RXQ_IN_UNUSED_LBN 10
1492 #define MC_CMD_INIT_RXQ_IN_UNUSED_WIDTH 1
1493 /* Owner ID to use if in buffer mode (zero if physical) */
1494 #define MC_CMD_INIT_RXQ_IN_OWNER_ID_OFST 20
1495 /* The port ID associated with the v-adaptor which should contain this DMAQ. */
1496 #define MC_CMD_INIT_RXQ_IN_PORT_ID_OFST 24
1497 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1498 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_OFST 28
1499 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_LEN 8
1500 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_LO_OFST 28
1501 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_HI_OFST 32
1502 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_MINNUM 1
1503 #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_MAXNUM 28
1504 
1505 /* MC_CMD_INIT_RXQ_EXT_IN msgrequest: Extended RXQ_INIT with additional mode
1506  * flags
1507  */
1508 #define MC_CMD_INIT_RXQ_EXT_IN_LEN 544
1509 /* Size, in entries */
1510 #define MC_CMD_INIT_RXQ_EXT_IN_SIZE_OFST 0
1511 /* The EVQ to send events to. This is an index originally specified to INIT_EVQ
1512  */
1513 #define MC_CMD_INIT_RXQ_EXT_IN_TARGET_EVQ_OFST 4
1514 /* The value to put in the event data. Check hardware spec. for valid range. */
1515 #define MC_CMD_INIT_RXQ_EXT_IN_LABEL_OFST 8
1516 /* Desired instance. Must be set to a specific instance, which is a function
1517  * local queue index.
1518  */
1519 #define MC_CMD_INIT_RXQ_EXT_IN_INSTANCE_OFST 12
1520 /* There will be more flags here. */
1521 #define MC_CMD_INIT_RXQ_EXT_IN_FLAGS_OFST 16
1522 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_BUFF_MODE_LBN 0
1523 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_BUFF_MODE_WIDTH 1
1524 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT_LBN 1
1525 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT_WIDTH 1
1526 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_TIMESTAMP_LBN 2
1527 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_TIMESTAMP_WIDTH 1
1528 #define MC_CMD_INIT_RXQ_EXT_IN_CRC_MODE_LBN 3
1529 #define MC_CMD_INIT_RXQ_EXT_IN_CRC_MODE_WIDTH 4
1530 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_CHAIN_LBN 7
1531 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_CHAIN_WIDTH 1
1532 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_PREFIX_LBN 8
1533 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_PREFIX_WIDTH 1
1534 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_DISABLE_SCATTER_LBN 9
1535 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_DISABLE_SCATTER_WIDTH 1
1536 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_MODE_LBN 10
1537 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_MODE_WIDTH 4
1538 /* enum: One packet per descriptor (for normal networking) */
1539 #define MC_CMD_INIT_RXQ_EXT_IN_SINGLE_PACKET 0x0
1540 /* enum: Pack multiple packets into large descriptors (for SolarCapture) */
1541 #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM 0x1
1542 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_SNAPSHOT_MODE_LBN 14
1543 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_SNAPSHOT_MODE_WIDTH 1
1544 #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE_LBN 15
1545 #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE_WIDTH 3
1546 #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M 0x0 /* enum */
1547 #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_512K 0x1 /* enum */
1548 #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_256K 0x2 /* enum */
1549 #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_128K 0x3 /* enum */
1550 #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_64K 0x4 /* enum */
1551 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES_LBN 18
1552 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES_WIDTH 1
1553 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_FORCE_EV_MERGING_LBN 19
1554 #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_FORCE_EV_MERGING_WIDTH 1
1555 /* Owner ID to use if in buffer mode (zero if physical) */
1556 #define MC_CMD_INIT_RXQ_EXT_IN_OWNER_ID_OFST 20
1557 /* The port ID associated with the v-adaptor which should contain this DMAQ. */
1558 #define MC_CMD_INIT_RXQ_EXT_IN_PORT_ID_OFST 24
1559 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1560 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_OFST 28
1561 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_LEN 8
1562 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_LO_OFST 28
1563 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_HI_OFST 32
1564 #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_NUM 64
1565 /* Maximum length of packet to receive, if SNAPSHOT_MODE flag is set */
1566 #define MC_CMD_INIT_RXQ_EXT_IN_SNAPSHOT_LENGTH_OFST 540
1567 
1568 /* MC_CMD_INIT_RXQ_OUT msgresponse */
1569 #define MC_CMD_INIT_RXQ_OUT_LEN 0
1570 
1571 /* MC_CMD_INIT_RXQ_EXT_OUT msgresponse */
1572 #define MC_CMD_INIT_RXQ_EXT_OUT_LEN 0
1573 
1574 
1575 /***********************************/
1576 /* MC_CMD_INIT_TXQ
1577  */
1578 #define MC_CMD_INIT_TXQ 0x82
1579 #undef MC_CMD_0x82_PRIVILEGE_CTG
1580 
1581 #define MC_CMD_0x82_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1582 
1583 /* MC_CMD_INIT_TXQ_IN msgrequest: Legacy INIT_TXQ request. Use extended version
1584  * in new code.
1585  */
1586 #define MC_CMD_INIT_TXQ_IN_LENMIN 36
1587 #define MC_CMD_INIT_TXQ_IN_LENMAX 252
1588 #define MC_CMD_INIT_TXQ_IN_LEN(num) (28+8*(num))
1589 /* Size, in entries */
1590 #define MC_CMD_INIT_TXQ_IN_SIZE_OFST 0
1591 /* The EVQ to send events to. This is an index originally specified to
1592  * INIT_EVQ.
1593  */
1594 #define MC_CMD_INIT_TXQ_IN_TARGET_EVQ_OFST 4
1595 /* The value to put in the event data. Check hardware spec. for valid range. */
1596 #define MC_CMD_INIT_TXQ_IN_LABEL_OFST 8
1597 /* Desired instance. Must be set to a specific instance, which is a function
1598  * local queue index.
1599  */
1600 #define MC_CMD_INIT_TXQ_IN_INSTANCE_OFST 12
1601 /* There will be more flags here. */
1602 #define MC_CMD_INIT_TXQ_IN_FLAGS_OFST 16
1603 #define MC_CMD_INIT_TXQ_IN_FLAG_BUFF_MODE_LBN 0
1604 #define MC_CMD_INIT_TXQ_IN_FLAG_BUFF_MODE_WIDTH 1
1605 #define MC_CMD_INIT_TXQ_IN_FLAG_IP_CSUM_DIS_LBN 1
1606 #define MC_CMD_INIT_TXQ_IN_FLAG_IP_CSUM_DIS_WIDTH 1
1607 #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_CSUM_DIS_LBN 2
1608 #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_CSUM_DIS_WIDTH 1
1609 #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_UDP_ONLY_LBN 3
1610 #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_UDP_ONLY_WIDTH 1
1611 #define MC_CMD_INIT_TXQ_IN_CRC_MODE_LBN 4
1612 #define MC_CMD_INIT_TXQ_IN_CRC_MODE_WIDTH 4
1613 #define MC_CMD_INIT_TXQ_IN_FLAG_TIMESTAMP_LBN 8
1614 #define MC_CMD_INIT_TXQ_IN_FLAG_TIMESTAMP_WIDTH 1
1615 #define MC_CMD_INIT_TXQ_IN_FLAG_PACER_BYPASS_LBN 9
1616 #define MC_CMD_INIT_TXQ_IN_FLAG_PACER_BYPASS_WIDTH 1
1617 #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_IP_CSUM_EN_LBN 10
1618 #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_IP_CSUM_EN_WIDTH 1
1619 #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_TCP_CSUM_EN_LBN 11
1620 #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_TCP_CSUM_EN_WIDTH 1
1621 /* Owner ID to use if in buffer mode (zero if physical) */
1622 #define MC_CMD_INIT_TXQ_IN_OWNER_ID_OFST 20
1623 /* The port ID associated with the v-adaptor which should contain this DMAQ. */
1624 #define MC_CMD_INIT_TXQ_IN_PORT_ID_OFST 24
1625 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1626 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_OFST 28
1627 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_LEN 8
1628 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_LO_OFST 28
1629 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_HI_OFST 32
1630 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_MINNUM 1
1631 #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_MAXNUM 28
1632 
1633 /* MC_CMD_INIT_TXQ_EXT_IN msgrequest: Extended INIT_TXQ with additional mode
1634  * flags
1635  */
1636 #define MC_CMD_INIT_TXQ_EXT_IN_LEN 544
1637 /* Size, in entries */
1638 #define MC_CMD_INIT_TXQ_EXT_IN_SIZE_OFST 0
1639 /* The EVQ to send events to. This is an index originally specified to
1640  * INIT_EVQ.
1641  */
1642 #define MC_CMD_INIT_TXQ_EXT_IN_TARGET_EVQ_OFST 4
1643 /* The value to put in the event data. Check hardware spec. for valid range. */
1644 #define MC_CMD_INIT_TXQ_EXT_IN_LABEL_OFST 8
1645 /* Desired instance. Must be set to a specific instance, which is a function
1646  * local queue index.
1647  */
1648 #define MC_CMD_INIT_TXQ_EXT_IN_INSTANCE_OFST 12
1649 /* There will be more flags here. */
1650 #define MC_CMD_INIT_TXQ_EXT_IN_FLAGS_OFST 16
1651 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_BUFF_MODE_LBN 0
1652 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_BUFF_MODE_WIDTH 1
1653 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_IP_CSUM_DIS_LBN 1
1654 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_IP_CSUM_DIS_WIDTH 1
1655 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_CSUM_DIS_LBN 2
1656 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_CSUM_DIS_WIDTH 1
1657 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_UDP_ONLY_LBN 3
1658 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_UDP_ONLY_WIDTH 1
1659 #define MC_CMD_INIT_TXQ_EXT_IN_CRC_MODE_LBN 4
1660 #define MC_CMD_INIT_TXQ_EXT_IN_CRC_MODE_WIDTH 4
1661 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TIMESTAMP_LBN 8
1662 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TIMESTAMP_WIDTH 1
1663 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_PACER_BYPASS_LBN 9
1664 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_PACER_BYPASS_WIDTH 1
1665 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_IP_CSUM_EN_LBN 10
1666 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_IP_CSUM_EN_WIDTH 1
1667 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_TCP_CSUM_EN_LBN 11
1668 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_TCP_CSUM_EN_WIDTH 1
1669 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TSOV2_EN_LBN 12
1670 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TSOV2_EN_WIDTH 1
1671 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_CTPIO_LBN 13
1672 #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_CTPIO_WIDTH 1
1673 /* Owner ID to use if in buffer mode (zero if physical) */
1674 #define MC_CMD_INIT_TXQ_EXT_IN_OWNER_ID_OFST 20
1675 /* The port ID associated with the v-adaptor which should contain this DMAQ. */
1676 #define MC_CMD_INIT_TXQ_EXT_IN_PORT_ID_OFST 24
1677 /* 64-bit address of 4k of 4k-aligned host memory buffer */
1678 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_OFST 28
1679 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_LEN 8
1680 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_LO_OFST 28
1681 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_HI_OFST 32
1682 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_MINNUM 1
1683 #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_MAXNUM 64
1684 /* Flags related to Qbb flow control mode. */
1685 #define MC_CMD_INIT_TXQ_EXT_IN_QBB_FLAGS_OFST 540
1686 #define MC_CMD_INIT_TXQ_EXT_IN_QBB_ENABLE_LBN 0
1687 #define MC_CMD_INIT_TXQ_EXT_IN_QBB_ENABLE_WIDTH 1
1688 #define MC_CMD_INIT_TXQ_EXT_IN_QBB_PRIORITY_LBN 1
1689 #define MC_CMD_INIT_TXQ_EXT_IN_QBB_PRIORITY_WIDTH 3
1690 
1691 /* MC_CMD_INIT_TXQ_OUT msgresponse */
1692 #define MC_CMD_INIT_TXQ_OUT_LEN 0
1693 
1694 
1695 /***********************************/
1696 /* MC_CMD_FINI_EVQ
1697  * Teardown an EVQ.
1698  *
1699  * All DMAQs or EVQs that point to the EVQ to tear down must be torn down first
1700  * or the operation will fail with EBUSY
1701  */
1702 #define MC_CMD_FINI_EVQ 0x83
1703 #undef MC_CMD_0x83_PRIVILEGE_CTG
1704 
1705 #define MC_CMD_0x83_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1706 
1707 /* MC_CMD_FINI_EVQ_IN msgrequest */
1708 #define MC_CMD_FINI_EVQ_IN_LEN 4
1709 /* Instance of EVQ to destroy. Should be the same instance as that previously
1710  * passed to INIT_EVQ
1711  */
1712 #define MC_CMD_FINI_EVQ_IN_INSTANCE_OFST 0
1713 
1714 /* MC_CMD_FINI_EVQ_OUT msgresponse */
1715 #define MC_CMD_FINI_EVQ_OUT_LEN 0
1716 
1717 
1718 /***********************************/
1719 /* MC_CMD_FINI_RXQ
1720  * Teardown a RXQ.
1721  */
1722 #define MC_CMD_FINI_RXQ 0x84
1723 #undef MC_CMD_0x84_PRIVILEGE_CTG
1724 
1725 #define MC_CMD_0x84_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1726 
1727 /* MC_CMD_FINI_RXQ_IN msgrequest */
1728 #define MC_CMD_FINI_RXQ_IN_LEN 4
1729 /* Instance of RXQ to destroy */
1730 #define MC_CMD_FINI_RXQ_IN_INSTANCE_OFST 0
1731 
1732 /* MC_CMD_FINI_RXQ_OUT msgresponse */
1733 #define MC_CMD_FINI_RXQ_OUT_LEN 0
1734 
1735 
1736 /***********************************/
1737 /* MC_CMD_FINI_TXQ
1738  * Teardown a TXQ.
1739  */
1740 #define MC_CMD_FINI_TXQ 0x85
1741 #undef MC_CMD_0x85_PRIVILEGE_CTG
1742 
1743 #define MC_CMD_0x85_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1744 
1745 /* MC_CMD_FINI_TXQ_IN msgrequest */
1746 #define MC_CMD_FINI_TXQ_IN_LEN 4
1747 /* Instance of TXQ to destroy */
1748 #define MC_CMD_FINI_TXQ_IN_INSTANCE_OFST 0
1749 
1750 /* MC_CMD_FINI_TXQ_OUT msgresponse */
1751 #define MC_CMD_FINI_TXQ_OUT_LEN 0
1752 
1753 
1754 /***********************************/
1755 /* MC_CMD_FILTER_OP
1756  * Multiplexed MCDI call for filter operations
1757  */
1758 #define MC_CMD_FILTER_OP 0x8a
1759 #undef MC_CMD_0x8a_PRIVILEGE_CTG
1760 
1761 #define MC_CMD_0x8a_PRIVILEGE_CTG SRIOV_CTG_GENERAL
1762 
1763 /* MC_CMD_FILTER_OP_IN msgrequest */
1764 #define MC_CMD_FILTER_OP_IN_LEN 108
1765 /* identifies the type of operation requested */
1766 #define MC_CMD_FILTER_OP_IN_OP_OFST 0
1767 /* enum: single-recipient filter insert */
1768 #define MC_CMD_FILTER_OP_IN_OP_INSERT 0x0
1769 /* enum: single-recipient filter remove */
1770 #define MC_CMD_FILTER_OP_IN_OP_REMOVE 0x1
1771 /* enum: multi-recipient filter subscribe */
1772 #define MC_CMD_FILTER_OP_IN_OP_SUBSCRIBE 0x2
1773 /* enum: multi-recipient filter unsubscribe */
1774 #define MC_CMD_FILTER_OP_IN_OP_UNSUBSCRIBE 0x3
1775 /* enum: replace one recipient with another (warning - the filter handle may
1776  * change)
1777  */
1778 #define MC_CMD_FILTER_OP_IN_OP_REPLACE 0x4
1779 /* filter handle (for remove / unsubscribe operations) */
1780 #define MC_CMD_FILTER_OP_IN_HANDLE_OFST 4
1781 #define MC_CMD_FILTER_OP_IN_HANDLE_LEN 8
1782 #define MC_CMD_FILTER_OP_IN_HANDLE_LO_OFST 4
1783 #define MC_CMD_FILTER_OP_IN_HANDLE_HI_OFST 8
1784 /* The port ID associated with the v-adaptor which should contain this filter.
1785  */
1786 #define MC_CMD_FILTER_OP_IN_PORT_ID_OFST 12
1787 /* fields to include in match criteria */
1788 #define MC_CMD_FILTER_OP_IN_MATCH_FIELDS_OFST 16
1789 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_IP_LBN 0
1790 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_IP_WIDTH 1
1791 #define MC_CMD_FILTER_OP_IN_MATCH_DST_IP_LBN 1
1792 #define MC_CMD_FILTER_OP_IN_MATCH_DST_IP_WIDTH 1
1793 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_MAC_LBN 2
1794 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_MAC_WIDTH 1
1795 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_PORT_LBN 3
1796 #define MC_CMD_FILTER_OP_IN_MATCH_SRC_PORT_WIDTH 1
1797 #define MC_CMD_FILTER_OP_IN_MATCH_DST_MAC_LBN 4
1798 #define MC_CMD_FILTER_OP_IN_MATCH_DST_MAC_WIDTH 1
1799 #define MC_CMD_FILTER_OP_IN_MATCH_DST_PORT_LBN 5
1800 #define MC_CMD_FILTER_OP_IN_MATCH_DST_PORT_WIDTH 1
1801 #define MC_CMD_FILTER_OP_IN_MATCH_ETHER_TYPE_LBN 6
1802 #define MC_CMD_FILTER_OP_IN_MATCH_ETHER_TYPE_WIDTH 1
1803 #define MC_CMD_FILTER_OP_IN_MATCH_INNER_VLAN_LBN 7
1804 #define MC_CMD_FILTER_OP_IN_MATCH_INNER_VLAN_WIDTH 1
1805 #define MC_CMD_FILTER_OP_IN_MATCH_OUTER_VLAN_LBN 8
1806 #define MC_CMD_FILTER_OP_IN_MATCH_OUTER_VLAN_WIDTH 1
1807 #define MC_CMD_FILTER_OP_IN_MATCH_IP_PROTO_LBN 9
1808 #define MC_CMD_FILTER_OP_IN_MATCH_IP_PROTO_WIDTH 1
1809 #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF0_LBN 10
1810 #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF0_WIDTH 1
1811 #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF1_LBN 11
1812 #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF1_WIDTH 1
1813 #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_MCAST_DST_LBN 30
1814 #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_MCAST_DST_WIDTH 1
1815 #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_UCAST_DST_LBN 31
1816 #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_UCAST_DST_WIDTH 1
1817 /* receive destination */
1818 #define MC_CMD_FILTER_OP_IN_RX_DEST_OFST 20
1819 /* enum: drop packets */
1820 #define MC_CMD_FILTER_OP_IN_RX_DEST_DROP 0x0
1821 /* enum: receive to host */
1822 #define MC_CMD_FILTER_OP_IN_RX_DEST_HOST 0x1
1823 /* enum: receive to MC */
1824 #define MC_CMD_FILTER_OP_IN_RX_DEST_MC 0x2
1825 /* enum: loop back to TXDP 0 */
1826 #define MC_CMD_FILTER_OP_IN_RX_DEST_TX0 0x3
1827 /* enum: loop back to TXDP 1 */
1828 #define MC_CMD_FILTER_OP_IN_RX_DEST_TX1 0x4
1829 /* receive queue handle (for multiple queue modes, this is the base queue) */
1830 #define MC_CMD_FILTER_OP_IN_RX_QUEUE_OFST 24
1831 /* receive mode */
1832 #define MC_CMD_FILTER_OP_IN_RX_MODE_OFST 28
1833 /* enum: receive to just the specified queue */
1834 #define MC_CMD_FILTER_OP_IN_RX_MODE_SIMPLE 0x0
1835 /* enum: receive to multiple queues using RSS context */
1836 #define MC_CMD_FILTER_OP_IN_RX_MODE_RSS 0x1
1837 /* enum: receive to multiple queues using .1p mapping */
1838 #define MC_CMD_FILTER_OP_IN_RX_MODE_DOT1P_MAPPING 0x2
1839 /* enum: install a filter entry that will never match; for test purposes only
1840  */
1841 #define MC_CMD_FILTER_OP_IN_RX_MODE_TEST_NEVER_MATCH 0x80000000
1842 /* RSS context (for RX_MODE_RSS) or .1p mapping handle (for
1843  * RX_MODE_DOT1P_MAPPING), as returned by MC_CMD_RSS_CONTEXT_ALLOC or
1844  * MC_CMD_DOT1P_MAPPING_ALLOC.
1845  */
1846 #define MC_CMD_FILTER_OP_IN_RX_CONTEXT_OFST 32
1847 /* transmit domain (reserved; set to 0) */
1848 #define MC_CMD_FILTER_OP_IN_TX_DOMAIN_OFST 36
1849 /* transmit destination (either set the MAC and/or PM bits for explicit
1850  * control, or set this field to TX_DEST_DEFAULT for sensible default
1851  * behaviour)
1852  */
1853 #define MC_CMD_FILTER_OP_IN_TX_DEST_OFST 40
1854 /* enum: request default behaviour (based on filter type) */
1855 #define MC_CMD_FILTER_OP_IN_TX_DEST_DEFAULT 0xffffffff
1856 #define MC_CMD_FILTER_OP_IN_TX_DEST_MAC_LBN 0
1857 #define MC_CMD_FILTER_OP_IN_TX_DEST_MAC_WIDTH 1
1858 #define MC_CMD_FILTER_OP_IN_TX_DEST_PM_LBN 1
1859 #define MC_CMD_FILTER_OP_IN_TX_DEST_PM_WIDTH 1
1860 /* source MAC address to match (as bytes in network order) */
1861 #define MC_CMD_FILTER_OP_IN_SRC_MAC_OFST 44
1862 #define MC_CMD_FILTER_OP_IN_SRC_MAC_LEN 6
1863 /* source port to match (as bytes in network order) */
1864 #define MC_CMD_FILTER_OP_IN_SRC_PORT_OFST 50
1865 #define MC_CMD_FILTER_OP_IN_SRC_PORT_LEN 2
1866 /* destination MAC address to match (as bytes in network order) */
1867 #define MC_CMD_FILTER_OP_IN_DST_MAC_OFST 52
1868 #define MC_CMD_FILTER_OP_IN_DST_MAC_LEN 6
1869 /* destination port to match (as bytes in network order) */
1870 #define MC_CMD_FILTER_OP_IN_DST_PORT_OFST 58
1871 #define MC_CMD_FILTER_OP_IN_DST_PORT_LEN 2
1872 /* Ethernet type to match (as bytes in network order) */
1873 #define MC_CMD_FILTER_OP_IN_ETHER_TYPE_OFST 60
1874 #define MC_CMD_FILTER_OP_IN_ETHER_TYPE_LEN 2
1875 /* Inner VLAN tag to match (as bytes in network order) */
1876 #define MC_CMD_FILTER_OP_IN_INNER_VLAN_OFST 62
1877 #define MC_CMD_FILTER_OP_IN_INNER_VLAN_LEN 2
1878 /* Outer VLAN tag to match (as bytes in network order) */
1879 #define MC_CMD_FILTER_OP_IN_OUTER_VLAN_OFST 64
1880 #define MC_CMD_FILTER_OP_IN_OUTER_VLAN_LEN 2
1881 /* IP protocol to match (in low byte; set high byte to 0) */
1882 #define MC_CMD_FILTER_OP_IN_IP_PROTO_OFST 66
1883 #define MC_CMD_FILTER_OP_IN_IP_PROTO_LEN 2
1884 /* Firmware defined register 0 to match (reserved; set to 0) */
1885 #define MC_CMD_FILTER_OP_IN_FWDEF0_OFST 68
1886 /* Firmware defined register 1 to match (reserved; set to 0) */
1887 #define MC_CMD_FILTER_OP_IN_FWDEF1_OFST 72
1888 /* source IP address to match (as bytes in network order; set last 12 bytes to
1889  * 0 for IPv4 address)
1890  */
1891 #define MC_CMD_FILTER_OP_IN_SRC_IP_OFST 76
1892 #define MC_CMD_FILTER_OP_IN_SRC_IP_LEN 16
1893 /* destination IP address to match (as bytes in network order; set last 12
1894  * bytes to 0 for IPv4 address)
1895  */
1896 #define MC_CMD_FILTER_OP_IN_DST_IP_OFST 92
1897 #define MC_CMD_FILTER_OP_IN_DST_IP_LEN 16
1898 
1899 /* MC_CMD_FILTER_OP_EXT_IN msgrequest: Extension to MC_CMD_FILTER_OP_IN to
1900  * include handling of VXLAN/NVGRE encapsulated frame filtering (which is
1901  * supported on Medford only).
1902  */
1903 #define MC_CMD_FILTER_OP_EXT_IN_LEN 172
1904 /* identifies the type of operation requested */
1905 #define MC_CMD_FILTER_OP_EXT_IN_OP_OFST 0
1906 /* Enum values, see field(s): */
1907 /* MC_CMD_FILTER_OP_IN/OP */
1908 /* filter handle (for remove / unsubscribe operations) */
1909 #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_OFST 4
1910 #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_LEN 8
1911 #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_LO_OFST 4
1912 #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_HI_OFST 8
1913 /* The port ID associated with the v-adaptor which should contain this filter.
1914  */
1915 #define MC_CMD_FILTER_OP_EXT_IN_PORT_ID_OFST 12
1916 /* fields to include in match criteria */
1917 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FIELDS_OFST 16
1918 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_IP_LBN 0
1919 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_IP_WIDTH 1
1920 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_IP_LBN 1
1921 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_IP_WIDTH 1
1922 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_MAC_LBN 2
1923 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_MAC_WIDTH 1
1924 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_PORT_LBN 3
1925 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_PORT_WIDTH 1
1926 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_MAC_LBN 4
1927 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_MAC_WIDTH 1
1928 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_PORT_LBN 5
1929 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_PORT_WIDTH 1
1930 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_ETHER_TYPE_LBN 6
1931 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_ETHER_TYPE_WIDTH 1
1932 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_INNER_VLAN_LBN 7
1933 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_INNER_VLAN_WIDTH 1
1934 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_OUTER_VLAN_LBN 8
1935 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_OUTER_VLAN_WIDTH 1
1936 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IP_PROTO_LBN 9
1937 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IP_PROTO_WIDTH 1
1938 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FWDEF0_LBN 10
1939 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FWDEF0_WIDTH 1
1940 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_VNI_OR_VSID_LBN 11
1941 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_VNI_OR_VSID_WIDTH 1
1942 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_IP_LBN 12
1943 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_IP_WIDTH 1
1944 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_IP_LBN 13
1945 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_IP_WIDTH 1
1946 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_MAC_LBN 14
1947 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_MAC_WIDTH 1
1948 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_PORT_LBN 15
1949 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_PORT_WIDTH 1
1950 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_MAC_LBN 16
1951 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_MAC_WIDTH 1
1952 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_PORT_LBN 17
1953 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_PORT_WIDTH 1
1954 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_ETHER_TYPE_LBN 18
1955 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_ETHER_TYPE_WIDTH 1
1956 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_INNER_VLAN_LBN 19
1957 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_INNER_VLAN_WIDTH 1
1958 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_OUTER_VLAN_LBN 20
1959 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_OUTER_VLAN_WIDTH 1
1960 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_IP_PROTO_LBN 21
1961 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_IP_PROTO_WIDTH 1
1962 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF0_LBN 22
1963 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF0_WIDTH 1
1964 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF1_LBN 23
1965 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF1_WIDTH 1
1966 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_MCAST_DST_LBN 24
1967 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_MCAST_DST_WIDTH 1
1968 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_UCAST_DST_LBN 25
1969 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_UCAST_DST_WIDTH 1
1970 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_MCAST_DST_LBN 30
1971 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_MCAST_DST_WIDTH 1
1972 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_UCAST_DST_LBN 31
1973 #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_UCAST_DST_WIDTH 1
1974 /* receive destination */
1975 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_OFST 20
1976 /* enum: drop packets */
1977 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_DROP 0x0
1978 /* enum: receive to host */
1979 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_HOST 0x1
1980 /* enum: receive to MC */
1981 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_MC 0x2
1982 /* enum: loop back to TXDP 0 */
1983 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_TX0 0x3
1984 /* enum: loop back to TXDP 1 */
1985 #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_TX1 0x4
1986 /* receive queue handle (for multiple queue modes, this is the base queue) */
1987 #define MC_CMD_FILTER_OP_EXT_IN_RX_QUEUE_OFST 24
1988 /* receive mode */
1989 #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_OFST 28
1990 /* enum: receive to just the specified queue */
1991 #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_SIMPLE 0x0
1992 /* enum: receive to multiple queues using RSS context */
1993 #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_RSS 0x1
1994 /* enum: receive to multiple queues using .1p mapping */
1995 #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_DOT1P_MAPPING 0x2
1996 /* enum: install a filter entry that will never match; for test purposes only
1997  */
1998 #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_TEST_NEVER_MATCH 0x80000000
1999 /* RSS context (for RX_MODE_RSS) or .1p mapping handle (for
2000  * RX_MODE_DOT1P_MAPPING), as returned by MC_CMD_RSS_CONTEXT_ALLOC or
2001  * MC_CMD_DOT1P_MAPPING_ALLOC.
2002  */
2003 #define MC_CMD_FILTER_OP_EXT_IN_RX_CONTEXT_OFST 32
2004 /* transmit domain (reserved; set to 0) */
2005 #define MC_CMD_FILTER_OP_EXT_IN_TX_DOMAIN_OFST 36
2006 /* transmit destination (either set the MAC and/or PM bits for explicit
2007  * control, or set this field to TX_DEST_DEFAULT for sensible default
2008  * behaviour)
2009  */
2010 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_OFST 40
2011 /* enum: request default behaviour (based on filter type) */
2012 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_DEFAULT 0xffffffff
2013 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_MAC_LBN 0
2014 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_MAC_WIDTH 1
2015 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_PM_LBN 1
2016 #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_PM_WIDTH 1
2017 /* source MAC address to match (as bytes in network order) */
2018 #define MC_CMD_FILTER_OP_EXT_IN_SRC_MAC_OFST 44
2019 #define MC_CMD_FILTER_OP_EXT_IN_SRC_MAC_LEN 6
2020 /* source port to match (as bytes in network order) */
2021 #define MC_CMD_FILTER_OP_EXT_IN_SRC_PORT_OFST 50
2022 #define MC_CMD_FILTER_OP_EXT_IN_SRC_PORT_LEN 2
2023 /* destination MAC address to match (as bytes in network order) */
2024 #define MC_CMD_FILTER_OP_EXT_IN_DST_MAC_OFST 52
2025 #define MC_CMD_FILTER_OP_EXT_IN_DST_MAC_LEN 6
2026 /* destination port to match (as bytes in network order) */
2027 #define MC_CMD_FILTER_OP_EXT_IN_DST_PORT_OFST 58
2028 #define MC_CMD_FILTER_OP_EXT_IN_DST_PORT_LEN 2
2029 /* Ethernet type to match (as bytes in network order) */
2030 #define MC_CMD_FILTER_OP_EXT_IN_ETHER_TYPE_OFST 60
2031 #define MC_CMD_FILTER_OP_EXT_IN_ETHER_TYPE_LEN 2
2032 /* Inner VLAN tag to match (as bytes in network order) */
2033 #define MC_CMD_FILTER_OP_EXT_IN_INNER_VLAN_OFST 62
2034 #define MC_CMD_FILTER_OP_EXT_IN_INNER_VLAN_LEN 2
2035 /* Outer VLAN tag to match (as bytes in network order) */
2036 #define MC_CMD_FILTER_OP_EXT_IN_OUTER_VLAN_OFST 64
2037 #define MC_CMD_FILTER_OP_EXT_IN_OUTER_VLAN_LEN 2
2038 /* IP protocol to match (in low byte; set high byte to 0) */
2039 #define MC_CMD_FILTER_OP_EXT_IN_IP_PROTO_OFST 66
2040 #define MC_CMD_FILTER_OP_EXT_IN_IP_PROTO_LEN 2
2041 /* Firmware defined register 0 to match (reserved; set to 0) */
2042 #define MC_CMD_FILTER_OP_EXT_IN_FWDEF0_OFST 68
2043 /* VNI (for VXLAN/Geneve, when IP protocol is UDP) or VSID (for NVGRE, when IP
2044  * protocol is GRE) to match (as bytes in network order; set last byte to 0 for
2045  * VXLAN/NVGRE, or 1 for Geneve)
2046  */
2047 #define MC_CMD_FILTER_OP_EXT_IN_VNI_OR_VSID_OFST 72
2048 #define MC_CMD_FILTER_OP_EXT_IN_VNI_VALUE_LBN 0
2049 #define MC_CMD_FILTER_OP_EXT_IN_VNI_VALUE_WIDTH 24
2050 #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_LBN 24
2051 #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_WIDTH 8
2052 /* enum: Match VXLAN traffic with this VNI */
2053 #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_VXLAN 0x0
2054 /* enum: Match Geneve traffic with this VNI */
2055 #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_GENEVE 0x1
2056 /* enum: Reserved for experimental development use */
2057 #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_EXPERIMENTAL 0xfe
2058 #define MC_CMD_FILTER_OP_EXT_IN_VSID_VALUE_LBN 0
2059 #define MC_CMD_FILTER_OP_EXT_IN_VSID_VALUE_WIDTH 24
2060 #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_LBN 24
2061 #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_WIDTH 8
2062 /* enum: Match NVGRE traffic with this VSID */
2063 #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_NVGRE 0x0
2064 /* source IP address to match (as bytes in network order; set last 12 bytes to
2065  * 0 for IPv4 address)
2066  */
2067 #define MC_CMD_FILTER_OP_EXT_IN_SRC_IP_OFST 76
2068 #define MC_CMD_FILTER_OP_EXT_IN_SRC_IP_LEN 16
2069 /* destination IP address to match (as bytes in network order; set last 12
2070  * bytes to 0 for IPv4 address)
2071  */
2072 #define MC_CMD_FILTER_OP_EXT_IN_DST_IP_OFST 92
2073 #define MC_CMD_FILTER_OP_EXT_IN_DST_IP_LEN 16
2074 /* VXLAN/NVGRE inner frame source MAC address to match (as bytes in network
2075  * order)
2076  */
2077 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_MAC_OFST 108
2078 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_MAC_LEN 6
2079 /* VXLAN/NVGRE inner frame source port to match (as bytes in network order) */
2080 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_PORT_OFST 114
2081 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_PORT_LEN 2
2082 /* VXLAN/NVGRE inner frame destination MAC address to match (as bytes in
2083  * network order)
2084  */
2085 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_MAC_OFST 116
2086 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_MAC_LEN 6
2087 /* VXLAN/NVGRE inner frame destination port to match (as bytes in network
2088  * order)
2089  */
2090 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_PORT_OFST 122
2091 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_PORT_LEN 2
2092 /* VXLAN/NVGRE inner frame Ethernet type to match (as bytes in network order)
2093  */
2094 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_ETHER_TYPE_OFST 124
2095 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_ETHER_TYPE_LEN 2
2096 /* VXLAN/NVGRE inner frame Inner VLAN tag to match (as bytes in network order)
2097  */
2098 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_INNER_VLAN_OFST 126
2099 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_INNER_VLAN_LEN 2
2100 /* VXLAN/NVGRE inner frame Outer VLAN tag to match (as bytes in network order)
2101  */
2102 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_OUTER_VLAN_OFST 128
2103 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_OUTER_VLAN_LEN 2
2104 /* VXLAN/NVGRE inner frame IP protocol to match (in low byte; set high byte to
2105  * 0)
2106  */
2107 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_IP_PROTO_OFST 130
2108 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_IP_PROTO_LEN 2
2109 /* VXLAN/NVGRE inner frame Firmware defined register 0 to match (reserved; set
2110  * to 0)
2111  */
2112 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_FWDEF0_OFST 132
2113 /* VXLAN/NVGRE inner frame Firmware defined register 1 to match (reserved; set
2114  * to 0)
2115  */
2116 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_FWDEF1_OFST 136
2117 /* VXLAN/NVGRE inner frame source IP address to match (as bytes in network
2118  * order; set last 12 bytes to 0 for IPv4 address)
2119  */
2120 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_IP_OFST 140
2121 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_IP_LEN 16
2122 /* VXLAN/NVGRE inner frame destination IP address to match (as bytes in network
2123  * order; set last 12 bytes to 0 for IPv4 address)
2124  */
2125 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_IP_OFST 156
2126 #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_IP_LEN 16
2127 
2128 /* MC_CMD_FILTER_OP_OUT msgresponse */
2129 #define MC_CMD_FILTER_OP_OUT_LEN 12
2130 /* identifies the type of operation requested */
2131 #define MC_CMD_FILTER_OP_OUT_OP_OFST 0
2132 /* Enum values, see field(s): */
2133 /* MC_CMD_FILTER_OP_IN/OP */
2134 /* Returned filter handle (for insert / subscribe operations). Note that these
2135  * handles should be considered opaque to the host, although a value of
2136  * 0xFFFFFFFF_FFFFFFFF is guaranteed never to be a valid handle.
2137  */
2138 #define MC_CMD_FILTER_OP_OUT_HANDLE_OFST 4
2139 #define MC_CMD_FILTER_OP_OUT_HANDLE_LEN 8
2140 #define MC_CMD_FILTER_OP_OUT_HANDLE_LO_OFST 4
2141 #define MC_CMD_FILTER_OP_OUT_HANDLE_HI_OFST 8
2142 /* enum: guaranteed invalid filter handle (low 32 bits) */
2143 #define MC_CMD_FILTER_OP_OUT_HANDLE_LO_INVALID 0xffffffff
2144 /* enum: guaranteed invalid filter handle (high 32 bits) */
2145 #define MC_CMD_FILTER_OP_OUT_HANDLE_HI_INVALID 0xffffffff
2146 
2147 /* MC_CMD_FILTER_OP_EXT_OUT msgresponse */
2148 #define MC_CMD_FILTER_OP_EXT_OUT_LEN 12
2149 /* identifies the type of operation requested */
2150 #define MC_CMD_FILTER_OP_EXT_OUT_OP_OFST 0
2151 /* Enum values, see field(s): */
2152 /* MC_CMD_FILTER_OP_EXT_IN/OP */
2153 /* Returned filter handle (for insert / subscribe operations). Note that these
2154  * handles should be considered opaque to the host, although a value of
2155  * 0xFFFFFFFF_FFFFFFFF is guaranteed never to be a valid handle.
2156  */
2157 #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_OFST 4
2158 #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_LEN 8
2159 #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_LO_OFST 4
2160 #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_HI_OFST 8
2161 /* Enum values, see field(s): */
2162 /* MC_CMD_FILTER_OP_OUT/HANDLE */
2163 
2164 
2165 /***********************************/
2166 /* MC_CMD_ALLOC_VIS
2167  * Allocate VIs for current PCI function.
2168  */
2169 #define MC_CMD_ALLOC_VIS 0x8b
2170 #undef MC_CMD_0x8b_PRIVILEGE_CTG
2171 
2172 #define MC_CMD_0x8b_PRIVILEGE_CTG SRIOV_CTG_GENERAL
2173 
2174 /* MC_CMD_ALLOC_VIS_IN msgrequest */
2175 #define MC_CMD_ALLOC_VIS_IN_LEN 8
2176 /* The minimum number of VIs that is acceptable */
2177 #define MC_CMD_ALLOC_VIS_IN_MIN_VI_COUNT_OFST 0
2178 /* The maximum number of VIs that would be useful */
2179 #define MC_CMD_ALLOC_VIS_IN_MAX_VI_COUNT_OFST 4
2180 
2181 /* MC_CMD_ALLOC_VIS_OUT msgresponse: Huntington-compatible VI_ALLOC request.
2182  * Use extended version in new code.
2183  */
2184 #define MC_CMD_ALLOC_VIS_OUT_LEN 8
2185 /* The number of VIs allocated on this function */
2186 #define MC_CMD_ALLOC_VIS_OUT_VI_COUNT_OFST 0
2187 /* The base absolute VI number allocated to this function. Required to
2188  * correctly interpret wakeup events.
2189  */
2190 #define MC_CMD_ALLOC_VIS_OUT_VI_BASE_OFST 4
2191 
2192 /* MC_CMD_ALLOC_VIS_EXT_OUT msgresponse */
2193 #define MC_CMD_ALLOC_VIS_EXT_OUT_LEN 12
2194 /* The number of VIs allocated on this function */
2195 #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_COUNT_OFST 0
2196 /* The base absolute VI number allocated to this function. Required to
2197  * correctly interpret wakeup events.
2198  */
2199 #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_BASE_OFST 4
2200 /* Function's port vi_shift value (always 0 on Huntington) */
2201 #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_SHIFT_OFST 8
2202 
2203 
2204 /***********************************/
2205 /* MC_CMD_FREE_VIS
2206  * Free VIs for current PCI function. Any linked PIO buffers will be unlinked,
2207  * but not freed.
2208  */
2209 #define MC_CMD_FREE_VIS 0x8c
2210 #undef MC_CMD_0x8c_PRIVILEGE_CTG
2211 
2212 #define MC_CMD_0x8c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
2213 
2214 /* MC_CMD_FREE_VIS_IN msgrequest */
2215 #define MC_CMD_FREE_VIS_IN_LEN 0
2216 
2217 /* MC_CMD_FREE_VIS_OUT msgresponse */
2218 #define MC_CMD_FREE_VIS_OUT_LEN 0
2219 
2220 
2221 /***********************************/
2222 /* MC_CMD_GET_PORT_ASSIGNMENT
2223  * Get port assignment for current PCI function.
2224  */
2225 #define MC_CMD_GET_PORT_ASSIGNMENT 0xb8
2226 #undef MC_CMD_0xb8_PRIVILEGE_CTG
2227 
2228 #define MC_CMD_0xb8_PRIVILEGE_CTG SRIOV_CTG_GENERAL
2229 
2230 /* MC_CMD_GET_PORT_ASSIGNMENT_IN msgrequest */
2231 #define MC_CMD_GET_PORT_ASSIGNMENT_IN_LEN 0
2232 
2233 /* MC_CMD_GET_PORT_ASSIGNMENT_OUT msgresponse */
2234 #define MC_CMD_GET_PORT_ASSIGNMENT_OUT_LEN 4
2235 /* Identifies the port assignment for this function. */
2236 #define MC_CMD_GET_PORT_ASSIGNMENT_OUT_PORT_OFST 0
2237 
2238 
2239 /***********************************/
2240 /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS
2241  * Configure UDP ports for tunnel encapsulation hardware acceleration. The
2242  * parser-dispatcher will attempt to parse traffic on these ports as tunnel
2243  * encapsulation PDUs and filter them using the tunnel encapsulation filter
2244  * chain rather than the standard filter chain. Note that this command can
2245  * cause all functions to see a reset. (Available on Medford only.)
2246  */
2247 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS 0x117
2248 #undef MC_CMD_0x117_PRIVILEGE_CTG
2249 
2250 #define MC_CMD_0x117_PRIVILEGE_CTG SRIOV_CTG_ADMIN
2251 
2252 /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN msgrequest */
2253 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LENMIN 4
2254 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LENMAX 68
2255 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LEN(num) (4+4*(num))
2256 /* Flags */
2257 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_FLAGS_OFST 0
2258 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_FLAGS_LEN 2
2259 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_UNLOADING_LBN 0
2260 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_UNLOADING_WIDTH 1
2261 /* The number of entries in the ENTRIES array */
2262 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_NUM_ENTRIES_OFST 2
2263 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_NUM_ENTRIES_LEN 2
2264 /* Entries defining the UDP port to protocol mapping, each laid out as a
2265  * TUNNEL_ENCAP_UDP_PORT_ENTRY
2266  */
2267 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_OFST 4
2268 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_LEN 4
2269 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_MINNUM 0
2270 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_MAXNUM 16
2271 
2272 /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT msgresponse */
2273 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_LEN 2
2274 /* Flags */
2275 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_FLAGS_OFST 0
2276 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_FLAGS_LEN 2
2277 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_RESETTING_LBN 0
2278 #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_RESETTING_WIDTH 1
2279 
2280 
2281 #endif /* SFC_MCDI_PCOL_H */
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)