1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2008-2017 Cisco Systems, Inc. All rights reserved. 3 * Copyright 2007 Nuova Systems, Inc. All rights reserved. 4 */ 5 6 #ifndef _VNIC_DEVCMD_H_ 7 #define _VNIC_DEVCMD_H_ 8 9 #define _CMD_NBITS 14 10 #define _CMD_VTYPEBITS 10 11 #define _CMD_FLAGSBITS 6 12 #define _CMD_DIRBITS 2 13 14 #define _CMD_NMASK ((1 << _CMD_NBITS)-1) 15 #define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1) 16 #define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1) 17 #define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1) 18 19 #define _CMD_NSHIFT 0 20 #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS) 21 #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS) 22 #define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS) 23 24 /* 25 * Direction bits (from host perspective). 26 */ 27 #define _CMD_DIR_NONE 0U 28 #define _CMD_DIR_WRITE 1U 29 #define _CMD_DIR_READ 2U 30 #define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ) 31 32 /* 33 * Flag bits. 34 */ 35 #define _CMD_FLAGS_NONE 0U 36 #define _CMD_FLAGS_NOWAIT 1U 37 38 /* 39 * vNIC type bits. 40 */ 41 #define _CMD_VTYPE_NONE 0U 42 #define _CMD_VTYPE_ENET 1U 43 #define _CMD_VTYPE_FC 2U 44 #define _CMD_VTYPE_SCSI 4U 45 #define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI) 46 47 /* 48 * Used to create cmds.. 49 */ 50 #define _CMDCF(dir, flags, vtype, nr) \ 51 (((dir) << _CMD_DIRSHIFT) | \ 52 ((flags) << _CMD_FLAGSSHIFT) | \ 53 ((vtype) << _CMD_VTYPESHIFT) | \ 54 ((nr) << _CMD_NSHIFT)) 55 #define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr) 56 #define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr) 57 58 /* 59 * Used to decode cmds.. 60 */ 61 #define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK) 62 #define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK) 63 #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK) 64 #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK) 65 66 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 67 68 enum vnic_devcmd_cmd { 69 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0), 70 71 /* 72 * mcpu fw info in mem: 73 * in: 74 * (u64)a0=paddr to struct vnic_devcmd_fw_info 75 * action: 76 * Fills in struct vnic_devcmd_fw_info (128 bytes) 77 * note: 78 * An old definition of CMD_MCPU_FW_INFO 79 */ 80 CMD_MCPU_FW_INFO_OLD = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1), 81 82 /* 83 * mcpu fw info in mem: 84 * in: 85 * (u64)a0=paddr to struct vnic_devcmd_fw_info 86 * (u16)a1=size of the structure 87 * out: 88 * (u16)a1=0 for in:a1 = 0, 89 * data size actually written for other values. 90 * action: 91 * Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0, 92 * first in:a1 bytes for 0 < in:a1 <= 132, 93 * 132 bytes for other values of in:a1. 94 * note: 95 * CMD_MCPU_FW_INFO and CMD_MCPU_FW_INFO_OLD have the same enum 1 96 * for source compatibility. 97 */ 98 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1), 99 100 /* dev-specific block member: 101 * in: (u16)a0=offset,(u8)a1=size 102 * out: a0=value 103 */ 104 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2), 105 106 /* stats clear */ 107 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3), 108 109 /* stats dump in mem: (u64)a0=paddr to stats area, 110 * (u16)a1=sizeof stats area */ 111 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4), 112 113 /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */ 114 CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7), 115 116 /* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */ 117 CMD_PACKET_FILTER_ALL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7), 118 119 /* hang detection notification */ 120 CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8), 121 122 /* MAC address in (u48)a0 */ 123 CMD_MAC_ADDR = _CMDC(_CMD_DIR_READ, 124 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9), 125 #define CMD_GET_MAC_ADDR CMD_MAC_ADDR /* some uses are aliased */ 126 127 /* add addr from (u48)a0 */ 128 CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE, 129 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12), 130 131 /* del addr from (u48)a0 */ 132 CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE, 133 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13), 134 135 /* add VLAN id in (u16)a0 */ 136 CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14), 137 138 /* del VLAN id in (u16)a0 */ 139 CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15), 140 141 /* nic_cfg in (u32)a0 */ 142 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16), 143 144 /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */ 145 CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17), 146 147 /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */ 148 CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18), 149 150 /* initiate softreset */ 151 CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19), 152 153 /* softreset status: 154 * out: a0=0 reset complete, a0=1 reset in progress */ 155 CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20), 156 157 /* set struct vnic_devcmd_notify buffer in mem: 158 * in: 159 * (u64)a0=paddr to notify (set paddr=0 to unset) 160 * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) 161 * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) 162 * out: 163 * (u32)a1 = effective size 164 */ 165 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21), 166 167 /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct, 168 * (u8)a1=PXENV_UNDI_xxx */ 169 CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22), 170 171 /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */ 172 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23), 173 174 /* open status: 175 * out: a0=0 open complete, a0=1 open in progress */ 176 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24), 177 178 /* close vnic */ 179 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25), 180 181 /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ 182 /***** Replaced by CMD_INIT *****/ 183 CMD_INIT_v1 = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26), 184 185 /* variant of CMD_INIT, with provisioning info 186 * (u64)a0=paddr of vnic_devcmd_provinfo 187 * (u32)a1=sizeof provision info */ 188 CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27), 189 190 /* enable virtual link */ 191 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28), 192 193 /* enable virtual link, waiting variant. */ 194 CMD_ENABLE_WAIT = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28), 195 196 /* disable virtual link */ 197 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29), 198 199 /* stats dump sum of all vnic stats on same uplink in mem: 200 * (u64)a0=paddr 201 * (u16)a1=sizeof stats area */ 202 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30), 203 204 /* init status: 205 * out: a0=0 init complete, a0=1 init in progress 206 * if a0=0, a1=errno */ 207 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31), 208 209 /* INT13 API: (u64)a0=paddr to vnic_int13_params struct 210 * (u32)a1=INT13_CMD_xxx */ 211 CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32), 212 213 /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */ 214 CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33), 215 216 /* undo initialize of virtual link */ 217 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34), 218 219 /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ 220 CMD_INIT = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35), 221 222 /* check fw capability of a cmd: 223 * in: (u32)a0=cmd 224 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */ 225 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36), 226 227 /* persistent binding info 228 * in: (u64)a0=paddr of arg 229 * (u32)a1=CMD_PERBI_XXX */ 230 CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37), 231 232 /* Interrupt Assert Register functionality 233 * in: (u16)a0=interrupt number to assert 234 */ 235 CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38), 236 237 /* initiate hangreset, like softreset after hang detected */ 238 CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39), 239 240 /* hangreset status: 241 * out: a0=0 reset complete, a0=1 reset in progress */ 242 CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40), 243 244 /* 245 * Set hw ingress packet vlan rewrite mode: 246 * in: (u32)a0=new vlan rewrite mode 247 * out: (u32)a0=old vlan rewrite mode */ 248 CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41), 249 250 /* 251 * in: (u16)a0=bdf of target vnic 252 * (u32)a1=cmd to proxy 253 * a2-a15=args to cmd in a1 254 * out: (u32)a0=status of proxied cmd 255 * a1-a15=out args of proxied cmd */ 256 CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42), 257 258 /* 259 * As for BY_BDF except a0 is index of hvnlink subordinate vnic 260 * or SR-IOV virtual vnic 261 */ 262 CMD_PROXY_BY_INDEX = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43), 263 264 /* 265 * For HPP toggle: 266 * adapter-info-get 267 * in: (u64)a0=phsical address of buffer passed in from caller. 268 * (u16)a1=size of buffer specified in a0. 269 * out: (u64)a0=phsical address of buffer passed in from caller. 270 * (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or 271 * 0 if no VIF-CONFIG-INFO TLV was ever received. */ 272 CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44), 273 274 /* 275 * INT13 API: (u64)a0=paddr to vnic_int13_params struct 276 * (u32)a1=INT13_CMD_xxx 277 */ 278 CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45), 279 280 /* 281 * Set default vlan: 282 * in: (u16)a0=new default vlan 283 * (u16)a1=zero for overriding vlan with param a0, 284 * non-zero for resetting vlan to the default 285 * out: (u16)a0=old default vlan 286 */ 287 CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46), 288 289 /* init_prov_info2: 290 * Variant of CMD_INIT_PROV_INFO, where it will not try to enable 291 * the vnic until CMD_ENABLE2 is issued. 292 * (u64)a0=paddr of vnic_devcmd_provinfo 293 * (u32)a1=sizeof provision info */ 294 CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47), 295 296 /* enable2: 297 * (u32)a0=0 ==> standby 298 * =CMD_ENABLE2_ACTIVE ==> active 299 */ 300 CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48), 301 302 /* 303 * cmd_status: 304 * Returns the status of the specified command 305 * Input: 306 * a0 = command for which status is being queried. 307 * Possible values are: 308 * CMD_SOFT_RESET 309 * CMD_HANG_RESET 310 * CMD_OPEN 311 * CMD_INIT 312 * CMD_INIT_PROV_INFO 313 * CMD_DEINIT 314 * CMD_INIT_PROV_INFO2 315 * CMD_ENABLE2 316 * Output: 317 * if status == STAT_ERROR 318 * a0 = ERR_ENOTSUPPORTED - status for command in a0 is 319 * not supported 320 * if status == STAT_NONE 321 * a0 = status of the devcmd specified in a0 as follows. 322 * ERR_SUCCESS - command in a0 completed successfully 323 * ERR_EINPROGRESS - command in a0 is still in progress 324 */ 325 CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49), 326 327 /* 328 * Returns interrupt coalescing timer conversion factors. 329 * After calling this devcmd, ENIC driver can convert 330 * interrupt coalescing timer in usec into CPU cycles as follows: 331 * 332 * intr_timer_cycles = intr_timer_usec * multiplier / divisor 333 * 334 * Interrupt coalescing timer in usecs can be be converted/obtained 335 * from CPU cycles as follows: 336 * 337 * intr_timer_usec = intr_timer_cycles * divisor / multiplier 338 * 339 * in: none 340 * out: (u32)a0 = multiplier 341 * (u32)a1 = divisor 342 * (u32)a2 = maximum timer value in usec 343 */ 344 CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50), 345 346 /* 347 * ISCSI DUMP API: 348 * in: (u64)a0=paddr of the param or param itself 349 * (u32)a1=ISCSI_CMD_xxx 350 */ 351 CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51), 352 353 /* 354 * ISCSI DUMP STATUS API: 355 * in: (u32)a0=cmd tag 356 * in: (u32)a1=ISCSI_CMD_xxx 357 * out: (u32)a0=cmd status 358 */ 359 CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52), 360 361 /* 362 * Subvnic migration from MQ <--> VF. 363 * Enable the LIF migration from MQ to VF and vice versa. MQ and VF 364 * indexes are statically bound at the time of initialization. 365 * Based on the direction of migration, the resources of either MQ or 366 * the VF shall be attached to the LIF. 367 * in: (u32)a0=Direction of Migration 368 * 0=> Migrate to VF 369 * 1=> Migrate to MQ 370 * (u32)a1=VF index (MQ index) 371 */ 372 CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53), 373 374 /* 375 * Register / Deregister the notification block for MQ subvnics 376 * in: 377 * (u64)a0=paddr to notify (set paddr=0 to unset) 378 * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) 379 * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) 380 * out: 381 * (u32)a1 = effective size 382 */ 383 CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54), 384 385 /* 386 * Set the predefined mac address as default 387 * in: 388 * (u48)a0=mac addr 389 */ 390 CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55), 391 392 /* Update the provisioning info of the given VIF 393 * (u64)a0=paddr of vnic_devcmd_provinfo 394 * (u32)a1=sizeof provision info */ 395 CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56), 396 397 /* 398 * Initialization for the devcmd2 interface. 399 * in: (u64) a0=host result buffer physical address 400 * in: (u16) a1=number of entries in result buffer 401 */ 402 CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57), 403 404 /* 405 * Add a filter. 406 * in: (u64) a0= filter address 407 * (u32) a1= size of filter 408 * out: (u32) a0=filter identifier 409 * 410 * Capability query: 411 * out: (u64) a0= 1 if capability query supported 412 * (u64) a1= MAX filter type supported 413 */ 414 CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58), 415 416 /* 417 * Delete a filter. 418 * in: (u32) a0=filter identifier 419 */ 420 CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59), 421 422 /* 423 * Enable a Queue Pair in User space NIC 424 * in: (u32) a0=Queue Pair number 425 * (u32) a1= command 426 */ 427 CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60), 428 429 /* 430 * Disable a Queue Pair in User space NIC 431 * in: (u32) a0=Queue Pair number 432 * (u32) a1= command 433 */ 434 CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61), 435 436 /* 437 * Stats dump Queue Pair in User space NIC 438 * in: (u32) a0=Queue Pair number 439 * (u64) a1=host buffer addr for status dump 440 * (u32) a2=length of the buffer 441 */ 442 CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62), 443 444 /* 445 * Clear stats for Queue Pair in User space NIC 446 * in: (u32) a0=Queue Pair number 447 */ 448 CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63), 449 450 /* 451 * UEFI BOOT API: (u64)a0= UEFI FLS_CMD_xxx 452 * (ui64)a1= paddr for the info buffer 453 */ 454 CMD_FC_REQ = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 64), 455 456 /* 457 * Return the iSCSI config details required by the EFI Option ROM 458 * in: (u32) a0=0 Get Boot Info for PXE eNIC as per pxe_boot_config_t 459 * a0=1 Get Boot info for iSCSI enic as per 460 * iscsi_boot_efi_cfg_t 461 * in: (u64) a1=Host address where iSCSI config info is returned 462 */ 463 CMD_VNIC_BOOT_CONFIG_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 65), 464 465 /* 466 * Create a Queue Pair (RoCE) 467 * in: (u32) a0 = Queue Pair number 468 * (u32) a1 = Remote QP 469 * (u32) a2 = RDMA-RQ 470 * (u16) a3 = RQ Res Group 471 * (u16) a4 = SQ Res Group 472 * (u32) a5 = Protection Domain 473 * (u64) a6 = Remote MAC 474 * (u32) a7 = start PSN 475 * (u16) a8 = MSS 476 * (u32) a9 = protocol version 477 */ 478 CMD_RDMA_QP_CREATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 66), 479 480 /* 481 * Delete a Queue Pair (RoCE) 482 * in: (u32) a0 = Queue Pair number 483 */ 484 CMD_RDMA_QP_DELETE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 67), 485 486 /* 487 * Retrieve a Queue Pair's status information (RoCE) 488 * in: (u32) a0 = Queue Pair number 489 * (u64) a1 = host buffer addr for QP status struct 490 * (u32) a2 = length of the buffer 491 */ 492 CMD_RDMA_QP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 68), 493 494 /* 495 * Use this devcmd for agreeing on the highest common version supported 496 * by both driver and fw for by features who need such a facility. 497 * in: (u64) a0 = feature (driver requests for the supported versions 498 * on this feature) 499 * out: (u64) a0 = bitmap of all supported versions for that feature 500 */ 501 CMD_GET_SUPP_FEATURE_VER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 69), 502 503 /* 504 * Initialize the RDMA notification work queue 505 * in: (u64) a0 = host buffer address 506 * in: (u16) a1 = number of entries in buffer 507 * in: (u16) a2 = resource group number 508 * in: (u16) a3 = CQ number to post completion 509 */ 510 CMD_RDMA_INIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 70), 511 512 /* 513 * De-init the RDMA notification work queue 514 * in: (u64) a0=resource group number 515 */ 516 CMD_RDMA_DEINIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 71), 517 518 /* 519 * Control (Enable/Disable) overlay offloads on the given vnic 520 * in: (u8) a0 = OVERLAY_FEATURE_NVGRE : NVGRE 521 * a0 = OVERLAY_FEATURE_VXLAN : VxLAN 522 * in: (u8) a1 = OVERLAY_OFFLOAD_ENABLE : Enable or 523 * a1 = OVERLAY_OFFLOAD_DISABLE : Disable or 524 * a1 = OVERLAY_OFFLOAD_ENABLE_V2 : Enable with version 2 525 */ 526 CMD_OVERLAY_OFFLOAD_CTRL = 527 _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72), 528 529 /* 530 * Configuration of overlay offloads feature on a given vNIC 531 * in: (u8) a0 = OVERLAY_CFG_VXLAN_PORT_UPDATE : VxLAN 532 * in: (u16) a1 = unsigned short int port information 533 */ 534 CMD_OVERLAY_OFFLOAD_CFG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 73), 535 536 /* 537 * Return the configured name for the device 538 * in: (u64) a0=Host address where the name is copied 539 * (u32) a1=Size of the buffer 540 */ 541 CMD_GET_CONFIG_NAME = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 74), 542 543 /* 544 * Enable group interrupt for the VF 545 * in: (u32) a0 = GRPINTR_ENABLE : enable 546 * a0 = GRPINTR_DISABLE : disable 547 * a0 = GRPINTR_UPD_VECT: update group vector addr 548 * in: (u32) a1 = interrupt group count 549 * in: (u64) a2 = Start of host buffer address for DMAing group 550 * vector bitmap 551 * in: (u64) a3 = Stride between group vectors 552 */ 553 CMD_CONFIG_GRPINTR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 75), 554 555 /* 556 * Set cq arrary base and size in a list of consective wqs and 557 * rqs for a device 558 * in: (u16) a0 = the wq relative index in the device. 559 * -1 indicates skipping wq configuration 560 * in: (u16) a1 = the wcq relative index in the device 561 * in: (u16) a2 = the rq relative index in the device 562 * -1 indicates skipping rq configuration 563 * in: (u16) a3 = the rcq relative index in the device 564 */ 565 CMD_CONFIG_CQ_ARRAY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 76), 566 567 /* 568 * Add an advanced filter. 569 * in: (u64) a0= filter address 570 * (u32) a1= size of filter 571 * out: (u32) a0=filter identifier 572 * 573 * Capability query: 574 * in: (u64) a1= supported filter capability exchange modes 575 * out: (u64) a0= 1 if capability query supported 576 * if (u64) a1 = 0: a1 = MAX filter type supported 577 * if (u64) a1 & FILTER_CAP_MODE_V1_FLAG: 578 * a1 = bitmask of supported filters 579 * a2 = FILTER_CAP_MODE_V1 580 * a3 = bitmask of supported actions 581 */ 582 CMD_ADD_ADV_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 77), 583 }; 584 585 /* Modes for exchanging advanced filter capabilities. The modes supported by 586 * the driver are passed in the CMD_ADD_ADV_FILTER capability command and the 587 * mode selected is returned. 588 * V0: the maximum filter type supported is returned 589 * V1: bitmasks of supported filters and actions are returned 590 */ 591 enum filter_cap_mode { 592 FILTER_CAP_MODE_V0 = 0, /* Must always be 0 for legacy drivers */ 593 FILTER_CAP_MODE_V1 = 1, 594 }; 595 #define FILTER_CAP_MODE_V1_FLAG (1 << FILTER_CAP_MODE_V1) 596 597 /* CMD_ENABLE2 flags */ 598 #define CMD_ENABLE2_STANDBY 0x0 599 #define CMD_ENABLE2_ACTIVE 0x1 600 601 /* flags for CMD_OPEN */ 602 #define CMD_OPENF_OPROM 0x1 /* open coming from option rom */ 603 604 /* flags for CMD_INIT */ 605 #define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */ 606 607 /* flags for CMD_PACKET_FILTER */ 608 #define CMD_PFILTER_DIRECTED 0x01 609 #define CMD_PFILTER_MULTICAST 0x02 610 #define CMD_PFILTER_BROADCAST 0x04 611 #define CMD_PFILTER_PROMISCUOUS 0x08 612 #define CMD_PFILTER_ALL_MULTICAST 0x10 613 614 /* Commands for CMD_QP_ENABLE/CM_QP_DISABLE */ 615 #define CMD_QP_RQWQ 0x0 616 617 /* rewrite modes for CMD_IG_VLAN_REWRITE_MODE */ 618 #define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK 0 619 #define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN 1 620 #define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN 2 621 #define IG_VLAN_REWRITE_MODE_PASS_THRU 3 622 623 enum vnic_devcmd_status { 624 STAT_NONE = 0, 625 STAT_BUSY = 1 << 0, /* cmd in progress */ 626 STAT_ERROR = 1 << 1, /* last cmd caused error (code in a0) */ 627 STAT_FAILOVER = 1 << 2, /* always set on vnics in pci standby state 628 * if seen a failover to the standby happened 629 */ 630 }; 631 632 enum vnic_devcmd_error { 633 ERR_SUCCESS = 0, 634 ERR_EINVAL = 1, 635 ERR_EFAULT = 2, 636 ERR_EPERM = 3, 637 ERR_EBUSY = 4, 638 ERR_ECMDUNKNOWN = 5, 639 ERR_EBADSTATE = 6, 640 ERR_ENOMEM = 7, 641 ERR_ETIMEDOUT = 8, 642 ERR_ELINKDOWN = 9, 643 ERR_EMAXRES = 10, 644 ERR_ENOTSUPPORTED = 11, 645 ERR_EINPROGRESS = 12, 646 ERR_MAX 647 }; 648 649 /* 650 * note: hw_version and asic_rev refer to the same thing, 651 * but have different formats. hw_version is 652 * a 32-byte string (e.g. "A2") and asic_rev is 653 * a 16-bit integer (e.g. 0xA2). 654 */ 655 struct vnic_devcmd_fw_info { 656 char fw_version[32]; 657 char fw_build[32]; 658 char hw_version[32]; 659 char hw_serial_number[32]; 660 u16 asic_type; 661 u16 asic_rev; 662 }; 663 664 enum fwinfo_asic_type { 665 FWINFO_ASIC_TYPE_UNKNOWN, 666 FWINFO_ASIC_TYPE_PALO, 667 FWINFO_ASIC_TYPE_SERENO, 668 FWINFO_ASIC_TYPE_CRUZ, 669 }; 670 671 struct vnic_devcmd_notify { 672 u32 csum; /* checksum over following words */ 673 674 u32 link_state; /* link up == 1 */ 675 u32 port_speed; /* effective port speed (rate limit) */ 676 u32 mtu; /* MTU */ 677 u32 msglvl; /* requested driver msg lvl */ 678 u32 uif; /* uplink interface */ 679 u32 status; /* status bits (see VNIC_STF_*) */ 680 u32 error; /* error code (see ERR_*) for first ERR */ 681 u32 link_down_cnt; /* running count of link down transitions */ 682 u32 perbi_rebuild_cnt; /* running count of perbi rebuilds */ 683 }; 684 #define VNIC_STF_FATAL_ERR 0x0001 /* fatal fw error */ 685 #define VNIC_STF_STD_PAUSE 0x0002 /* standard link-level pause on */ 686 #define VNIC_STF_PFC_PAUSE 0x0004 /* priority flow control pause on */ 687 /* all supported status flags */ 688 #define VNIC_STF_ALL (VNIC_STF_FATAL_ERR |\ 689 VNIC_STF_STD_PAUSE |\ 690 VNIC_STF_PFC_PAUSE |\ 691 0) 692 693 struct vnic_devcmd_provinfo { 694 u8 oui[3]; 695 u8 type; 696 u8 data[0]; 697 }; 698 699 /* 700 * These are used in flags field of different filters to denote 701 * valid fields used. 702 */ 703 #define FILTER_FIELD_VALID(fld) (1 << (fld - 1)) 704 705 #define FILTER_FIELD_USNIC_VLAN FILTER_FIELD_VALID(1) 706 #define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2) 707 #define FILTER_FIELD_USNIC_PROTO FILTER_FIELD_VALID(3) 708 #define FILTER_FIELD_USNIC_ID FILTER_FIELD_VALID(4) 709 710 #define FILTER_FIELDS_USNIC (FILTER_FIELD_USNIC_VLAN | \ 711 FILTER_FIELD_USNIC_ETHTYPE | \ 712 FILTER_FIELD_USNIC_PROTO | \ 713 FILTER_FIELD_USNIC_ID) 714 715 struct filter_usnic_id { 716 u32 flags; 717 u16 vlan; 718 u16 ethtype; 719 u8 proto_version; 720 u32 usnic_id; 721 } __attribute__((packed)); 722 723 #define FILTER_FIELD_5TUP_PROTO FILTER_FIELD_VALID(1) 724 #define FILTER_FIELD_5TUP_SRC_AD FILTER_FIELD_VALID(2) 725 #define FILTER_FIELD_5TUP_DST_AD FILTER_FIELD_VALID(3) 726 #define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4) 727 #define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5) 728 729 #define FILTER_FIELDS_IPV4_5TUPLE (FILTER_FIELD_5TUP_PROTO | \ 730 FILTER_FIELD_5TUP_SRC_AD | \ 731 FILTER_FIELD_5TUP_DST_AD | \ 732 FILTER_FIELD_5TUP_SRC_PT | \ 733 FILTER_FIELD_5TUP_DST_PT) 734 735 /* Enums for the protocol field. */ 736 enum protocol_e { 737 PROTO_UDP = 0, 738 PROTO_TCP = 1, 739 PROTO_IPV4 = 2, 740 PROTO_IPV6 = 3 741 }; 742 743 struct filter_ipv4_5tuple { 744 u32 flags; 745 u32 protocol; 746 u32 src_addr; 747 u32 dst_addr; 748 u16 src_port; 749 u16 dst_port; 750 } __attribute__((packed)); 751 752 #define FILTER_FIELD_VMQ_VLAN FILTER_FIELD_VALID(1) 753 #define FILTER_FIELD_VMQ_MAC FILTER_FIELD_VALID(2) 754 755 #define FILTER_FIELDS_MAC_VLAN (FILTER_FIELD_VMQ_VLAN | \ 756 FILTER_FIELD_VMQ_MAC) 757 758 #define FILTER_FIELDS_NVGRE FILTER_FIELD_VMQ_MAC 759 760 struct filter_mac_vlan { 761 u32 flags; 762 u16 vlan; 763 u8 mac_addr[6]; 764 } __attribute__((packed)); 765 766 #define FILTER_FIELD_VLAN_IP_3TUP_VLAN FILTER_FIELD_VALID(1) 767 #define FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO FILTER_FIELD_VALID(2) 768 #define FILTER_FIELD_VLAN_IP_3TUP_DST_AD FILTER_FIELD_VALID(3) 769 #define FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO FILTER_FIELD_VALID(4) 770 #define FILTER_FIELD_VLAN_IP_3TUP_DST_PT FILTER_FIELD_VALID(5) 771 772 #define FILTER_FIELDS_VLAN_IP_3TUP (FILTER_FIELD_VLAN_IP_3TUP_VLAN | \ 773 FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO | \ 774 FILTER_FIELD_VLAN_IP_3TUP_DST_AD | \ 775 FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO | \ 776 FILTER_FIELD_VLAN_IP_3TUP_DST_PT) 777 778 struct filter_vlan_ip_3tuple { 779 u32 flags; 780 u16 vlan; 781 u16 l3_protocol; 782 union { 783 u32 dst_addr_v4; 784 u8 dst_addr_v6[16]; 785 } u; 786 u32 l4_protocol; 787 u16 dst_port; 788 } __attribute__((packed)); 789 790 #define FILTER_GENERIC_1_BYTES 64 791 792 enum filter_generic_1_layer { 793 FILTER_GENERIC_1_L2, 794 FILTER_GENERIC_1_L3, 795 FILTER_GENERIC_1_L4, 796 FILTER_GENERIC_1_L5, 797 FILTER_GENERIC_1_NUM_LAYERS 798 }; 799 800 #define FILTER_GENERIC_1_IPV4 (1 << 0) 801 #define FILTER_GENERIC_1_IPV6 (1 << 1) 802 #define FILTER_GENERIC_1_UDP (1 << 2) 803 #define FILTER_GENERIC_1_TCP (1 << 3) 804 #define FILTER_GENERIC_1_TCP_OR_UDP (1 << 4) 805 #define FILTER_GENERIC_1_IP4SUM_OK (1 << 5) 806 #define FILTER_GENERIC_1_L4SUM_OK (1 << 6) 807 #define FILTER_GENERIC_1_IPFRAG (1 << 7) 808 809 #define FILTER_GENERIC_1_KEY_LEN 64 810 811 /* 812 * Version 1 of generic filter specification 813 * position is only 16 bits, reserving positions > 64k to be used by firmware 814 */ 815 struct filter_generic_1 { 816 u16 position; /* lower position comes first */ 817 u32 mask_flags; 818 u32 val_flags; 819 u16 mask_vlan; 820 u16 val_vlan; 821 struct { 822 u8 mask[FILTER_GENERIC_1_KEY_LEN]; /* 0 bit means "don't care"*/ 823 u8 val[FILTER_GENERIC_1_KEY_LEN]; 824 } __attribute__((packed)) layer[FILTER_GENERIC_1_NUM_LAYERS]; 825 } __attribute__((packed)); 826 827 /* Specifies the filter_action type. */ 828 enum { 829 FILTER_ACTION_RQ_STEERING = 0, 830 FILTER_ACTION_V2 = 1, 831 FILTER_ACTION_MAX 832 }; 833 834 struct filter_action { 835 u32 type; 836 union { 837 u32 rq_idx; 838 } u; 839 } __attribute__((packed)); 840 841 #define FILTER_ACTION_RQ_STEERING_FLAG (1 << 0) 842 #define FILTER_ACTION_FILTER_ID_FLAG (1 << 1) 843 #define FILTER_ACTION_V2_ALL (FILTER_ACTION_RQ_STEERING_FLAG \ 844 | FILTER_ACTION_FILTER_ID_FLAG) 845 846 /* Version 2 of filter action must be a strict extension of struct filter_action 847 * where the first fields exactly match in size and meaning. 848 */ 849 struct filter_action_v2 { 850 u32 type; 851 u32 rq_idx; 852 u32 flags; /* use FILTER_ACTION_XXX_FLAG defines */ 853 u16 filter_id; 854 u_int8_t reserved[32]; /* for future expansion */ 855 } __attribute__((packed)); 856 857 /* Specifies the filter type. */ 858 enum filter_type { 859 FILTER_USNIC_ID = 0, 860 FILTER_IPV4_5TUPLE = 1, 861 FILTER_MAC_VLAN = 2, 862 FILTER_VLAN_IP_3TUPLE = 3, 863 FILTER_NVGRE_VMQ = 4, 864 FILTER_USNIC_IP = 5, 865 FILTER_DPDK_1 = 6, 866 FILTER_MAX 867 }; 868 869 #define FILTER_USNIC_ID_FLAG (1 << FILTER_USNIC_ID) 870 #define FILTER_IPV4_5TUPLE_FLAG (1 << FILTER_IPV4_5TUPLE) 871 #define FILTER_MAC_VLAN_FLAG (1 << FILTER_MAC_VLAN) 872 #define FILTER_VLAN_IP_3TUPLE_FLAG (1 << FILTER_VLAN_IP_3TUPLE) 873 #define FILTER_NVGRE_VMQ_FLAG (1 << FILTER_NVGRE_VMQ) 874 #define FILTER_USNIC_IP_FLAG (1 << FILTER_USNIC_IP) 875 #define FILTER_DPDK_1_FLAG (1 << FILTER_DPDK_1) 876 #define FILTER_V1_ALL (FILTER_USNIC_ID_FLAG | \ 877 FILTER_IPV4_5TUPLE_FLAG | \ 878 FILTER_MAC_VLAN_FLAG | \ 879 FILTER_VLAN_IP_3TUPLE_FLAG | \ 880 FILTER_NVGRE_VMQ_FLAG | \ 881 FILTER_USNIC_IP_FLAG | \ 882 FILTER_DPDK_1_FLAG) 883 884 struct filter { 885 u32 type; 886 union { 887 struct filter_usnic_id usnic; 888 struct filter_ipv4_5tuple ipv4; 889 struct filter_mac_vlan mac_vlan; 890 struct filter_vlan_ip_3tuple vlan_3tuple; 891 } u; 892 } __attribute__((packed)); 893 894 /* 895 * This is a strict superset of "struct filter" and exists only 896 * because many drivers use "sizeof (struct filter)" in deciding TLV size. 897 * This new, larger struct filter would cause any code that uses that method 898 * to not work with older firmware, so we add filter_v2 to hold the 899 * new filter types. Drivers should use vnic_filter_size() to determine 900 * the TLV size instead of sizeof (struct fiter_v2) to guard against future 901 * growth. 902 */ 903 struct filter_v2 { 904 u32 type; 905 union { 906 struct filter_usnic_id usnic; 907 struct filter_ipv4_5tuple ipv4; 908 struct filter_mac_vlan mac_vlan; 909 struct filter_vlan_ip_3tuple vlan_3tuple; 910 struct filter_generic_1 generic_1; 911 } u; 912 } __attribute__((packed)); 913 914 enum { 915 CLSF_TLV_FILTER = 0, 916 CLSF_TLV_ACTION = 1, 917 }; 918 919 struct filter_tlv { 920 u_int32_t type; 921 u_int32_t length; 922 u_int32_t val[0]; 923 }; 924 925 /* Data for CMD_ADD_FILTER is 2 TLV and filter + action structs */ 926 #define FILTER_MAX_BUF_SIZE 100 927 #define FILTER_V2_MAX_BUF_SIZE (sizeof(struct filter_v2) + \ 928 sizeof(struct filter_action_v2) + \ 929 (2 * sizeof(struct filter_tlv))) 930 931 /* 932 * Compute actual structure size given filter type. To be "future-proof," 933 * drivers should use this instead of "sizeof (struct filter_v2)" when 934 * computing length for TLV. 935 */ 936 static inline u_int32_t 937 vnic_filter_size(struct filter_v2 *fp) 938 { 939 u_int32_t size; 940 941 switch (fp->type) { 942 case FILTER_USNIC_ID: 943 size = sizeof(fp->u.usnic); 944 break; 945 case FILTER_IPV4_5TUPLE: 946 size = sizeof(fp->u.ipv4); 947 break; 948 case FILTER_MAC_VLAN: 949 case FILTER_NVGRE_VMQ: 950 size = sizeof(fp->u.mac_vlan); 951 break; 952 case FILTER_VLAN_IP_3TUPLE: 953 size = sizeof(fp->u.vlan_3tuple); 954 break; 955 case FILTER_USNIC_IP: 956 case FILTER_DPDK_1: 957 size = sizeof(fp->u.generic_1); 958 break; 959 default: 960 size = sizeof(fp->u); 961 break; 962 } 963 size += sizeof(fp->type); 964 return size; 965 } 966 967 968 enum { 969 CLSF_ADD = 0, 970 CLSF_DEL = 1, 971 }; 972 973 /* 974 * Get the action structure size given action type. To be "future-proof," 975 * drivers should use this instead of "sizeof (struct filter_action_v2)" 976 * when computing length for TLV. 977 */ 978 static inline u_int32_t 979 vnic_action_size(struct filter_action_v2 *fap) 980 { 981 u_int32_t size; 982 983 switch (fap->type) { 984 case FILTER_ACTION_RQ_STEERING: 985 size = sizeof(struct filter_action); 986 break; 987 case FILTER_ACTION_V2: 988 size = sizeof(struct filter_action_v2); 989 break; 990 default: 991 size = sizeof(struct filter_action); 992 break; 993 } 994 return size; 995 } 996 997 /* 998 * Writing cmd register causes STAT_BUSY to get set in status register. 999 * When cmd completes, STAT_BUSY will be cleared. 1000 * 1001 * If cmd completed successfully STAT_ERROR will be clear 1002 * and args registers contain cmd-specific results. 1003 * 1004 * If cmd error, STAT_ERROR will be set and args[0] contains error code. 1005 * 1006 * status register is read-only. While STAT_BUSY is set, 1007 * all other register contents are read-only. 1008 */ 1009 1010 /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */ 1011 #define VNIC_DEVCMD_NARGS 15 1012 struct vnic_devcmd { 1013 u32 status; /* RO */ 1014 u32 cmd; /* RW */ 1015 u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */ 1016 }; 1017 1018 /* 1019 * Version 2 of the interface. 1020 * 1021 * Some things are carried over, notably the vnic_devcmd_cmd enum. 1022 */ 1023 1024 /* 1025 * Flags for vnic_devcmd2.flags 1026 */ 1027 1028 #define DEVCMD2_FNORESULT 0x1 /* Don't copy result to host */ 1029 1030 #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS 1031 struct vnic_devcmd2 { 1032 u16 pad; 1033 u16 flags; 1034 u32 cmd; /* same command #defines as original */ 1035 u64 args[VNIC_DEVCMD2_NARGS]; 1036 }; 1037 1038 #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS 1039 struct devcmd2_result { 1040 u64 results[VNIC_DEVCMD2_NRESULTS]; 1041 u32 pad; 1042 u16 completed_index; /* into copy WQ */ 1043 u8 error; /* same error codes as original */ 1044 u8 color; /* 0 or 1 as with completion queues */ 1045 }; 1046 1047 #define DEVCMD2_RING_SIZE 32 1048 #define DEVCMD2_DESC_SIZE 128 1049 1050 #define DEVCMD2_RESULTS_SIZE_MAX ((1 << 16) - 1) 1051 1052 /* Overlay related definitions */ 1053 1054 /* 1055 * This enum lists the flag associated with each of the overlay features 1056 */ 1057 typedef enum { 1058 OVERLAY_FEATURE_NVGRE = 1, 1059 OVERLAY_FEATURE_VXLAN, 1060 OVERLAY_FEATURE_MAX, 1061 } overlay_feature_t; 1062 1063 #define OVERLAY_OFFLOAD_ENABLE 0 1064 #define OVERLAY_OFFLOAD_DISABLE 1 1065 #define OVERLAY_OFFLOAD_ENABLE_V2 2 1066 1067 #define OVERLAY_CFG_VXLAN_PORT_UPDATE 0 1068 1069 /* 1070 * Use this enum to get the supported versions for each of these features 1071 * If you need to use the devcmd_get_supported_feature_version(), add 1072 * the new feature into this enum and install function handler in devcmd.c 1073 */ 1074 typedef enum { 1075 VIC_FEATURE_VXLAN, 1076 VIC_FEATURE_RDMA, 1077 VIC_FEATURE_MAX, 1078 } vic_feature_t; 1079 1080 /* 1081 * CMD_CONFIG_GRPINTR subcommands 1082 */ 1083 typedef enum { 1084 GRPINTR_ENABLE = 1, 1085 GRPINTR_DISABLE, 1086 GRPINTR_UPD_VECT, 1087 } grpintr_subcmd_t; 1088 1089 #endif /* _VNIC_DEVCMD_H_ */ 1090