1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright 2008-2010 Cisco Systems, Inc. All rights reserved. 4 * Copyright 2007 Nuova Systems, Inc. All rights reserved. 5 */ 6 7 #ifndef _VNIC_DEVCMD_H_ 8 #define _VNIC_DEVCMD_H_ 9 10 #define _CMD_NBITS 14 11 #define _CMD_VTYPEBITS 10 12 #define _CMD_FLAGSBITS 6 13 #define _CMD_DIRBITS 2 14 15 #define _CMD_NMASK ((1 << _CMD_NBITS)-1) 16 #define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1) 17 #define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1) 18 #define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1) 19 20 #define _CMD_NSHIFT 0 21 #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS) 22 #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS) 23 #define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS) 24 25 /* 26 * Direction bits (from host perspective). 27 */ 28 #define _CMD_DIR_NONE 0U 29 #define _CMD_DIR_WRITE 1U 30 #define _CMD_DIR_READ 2U 31 #define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ) 32 33 /* 34 * Flag bits. 35 */ 36 #define _CMD_FLAGS_NONE 0U 37 #define _CMD_FLAGS_NOWAIT 1U 38 39 /* 40 * vNIC type bits. 41 */ 42 #define _CMD_VTYPE_NONE 0U 43 #define _CMD_VTYPE_ENET 1U 44 #define _CMD_VTYPE_FC 2U 45 #define _CMD_VTYPE_SCSI 4U 46 #define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI) 47 48 /* 49 * Used to create cmds.. 50 */ 51 #define _CMDCF(dir, flags, vtype, nr) \ 52 (((dir) << _CMD_DIRSHIFT) | \ 53 ((flags) << _CMD_FLAGSSHIFT) | \ 54 ((vtype) << _CMD_VTYPESHIFT) | \ 55 ((nr) << _CMD_NSHIFT)) 56 #define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr) 57 #define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr) 58 59 /* 60 * Used to decode cmds.. 61 */ 62 #define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK) 63 #define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK) 64 #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK) 65 #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK) 66 67 enum vnic_devcmd_cmd { 68 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0), 69 70 /* 71 * mcpu fw info in mem: 72 * in: 73 * (u64)a0=paddr to struct vnic_devcmd_fw_info 74 * action: 75 * Fills in struct vnic_devcmd_fw_info (128 bytes) 76 * note: 77 * An old definition of CMD_MCPU_FW_INFO 78 */ 79 CMD_MCPU_FW_INFO_OLD = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1), 80 81 /* 82 * mcpu fw info in mem: 83 * in: 84 * (u64)a0=paddr to struct vnic_devcmd_fw_info 85 * (u16)a1=size of the structure 86 * out: 87 * (u16)a1=0 for in:a1 = 0, 88 * data size actually written for other values. 89 * action: 90 * Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0, 91 * first in:a1 bytes for 0 < in:a1 <= 132, 92 * 132 bytes for other values of in:a1. 93 * note: 94 * CMD_MCPU_FW_INFO and CMD_MCPU_FW_INFO_OLD have the same enum 1 95 * for source compatibility. 96 */ 97 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1), 98 99 /* dev-specific block member: 100 * in: (u16)a0=offset,(u8)a1=size 101 * out: a0=value */ 102 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2), 103 104 /* stats clear */ 105 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3), 106 107 /* stats dump in mem: (u64)a0=paddr to stats area, 108 * (u16)a1=sizeof stats area */ 109 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4), 110 111 /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */ 112 CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7), 113 114 /* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */ 115 CMD_PACKET_FILTER_ALL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7), 116 117 /* hang detection notification */ 118 CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8), 119 120 /* MAC address in (u48)a0 */ 121 CMD_GET_MAC_ADDR = _CMDC(_CMD_DIR_READ, 122 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9), 123 124 /* add addr from (u48)a0 */ 125 CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE, 126 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12), 127 128 /* del addr from (u48)a0 */ 129 CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE, 130 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13), 131 132 /* add VLAN id in (u16)a0 */ 133 CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14), 134 135 /* del VLAN id in (u16)a0 */ 136 CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15), 137 138 /* nic_cfg (no wait, always succeeds) 139 * in: (u32)a0 140 * 141 * Capability query: 142 * out: (u64) a0 = 1 if a1 is valid 143 * (u64) a1 = (NIC_CFG bits supported) | (flags << 32) 144 * 145 * flags are CMD_NIC_CFG_CAPF_xxx 146 */ 147 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16), 148 /* nic_cfg_chk (will return error if flags are invalid) 149 * in: (u32)a0 150 * 151 * Capability query: 152 * out: (u64) a0 = 1 if a1 is valid 153 * (u64) a1 = (NIC_CFG bits supported) | (flags << 32) 154 * 155 * flags are CMD_NIC_CFG_CAPF_xxx 156 */ 157 CMD_NIC_CFG_CHK = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16), 158 159 /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */ 160 CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17), 161 162 /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */ 163 CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18), 164 165 /* initiate softreset */ 166 CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19), 167 168 /* softreset status: 169 * out: a0=0 reset complete, a0=1 reset in progress */ 170 CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20), 171 172 /* set struct vnic_devcmd_notify buffer in mem: 173 * in: 174 * (u64)a0=paddr to notify (set paddr=0 to unset) 175 * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) 176 * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) 177 * out: 178 * (u32)a1 = effective size 179 */ 180 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21), 181 182 /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct, 183 * (u8)a1=PXENV_UNDI_xxx */ 184 CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22), 185 186 /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */ 187 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23), 188 189 /* open status: 190 * out: a0=0 open complete, a0=1 open in progress */ 191 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24), 192 193 /* close vnic */ 194 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25), 195 196 /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ 197 /***** Replaced by CMD_INIT *****/ 198 CMD_INIT_v1 = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26), 199 200 /* variant of CMD_INIT, with provisioning info 201 * (u64)a0=paddr of vnic_devcmd_provinfo 202 * (u32)a1=sizeof provision info */ 203 CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27), 204 205 /* enable virtual link */ 206 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28), 207 208 /* enable virtual link, waiting variant. */ 209 CMD_ENABLE_WAIT = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28), 210 211 /* disable virtual link */ 212 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29), 213 214 /* stats dump sum of all vnic stats on same uplink in mem: 215 * (u64)a0=paddr 216 * (u16)a1=sizeof stats area */ 217 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30), 218 219 /* init status: 220 * out: a0=0 init complete, a0=1 init in progress 221 * if a0=0, a1=errno */ 222 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31), 223 224 /* INT13 API: (u64)a0=paddr to vnic_int13_params struct 225 * (u32)a1=INT13_CMD_xxx */ 226 CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32), 227 228 /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */ 229 CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33), 230 231 /* undo initialize of virtual link */ 232 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34), 233 234 /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ 235 CMD_INIT = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35), 236 237 /* check fw capability of a cmd: 238 * in: (u32)a0=cmd 239 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */ 240 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36), 241 242 /* persistent binding info 243 * in: (u64)a0=paddr of arg 244 * (u32)a1=CMD_PERBI_XXX */ 245 CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37), 246 247 /* Interrupt Assert Register functionality 248 * in: (u16)a0=interrupt number to assert 249 */ 250 CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38), 251 252 /* initiate hangreset, like softreset after hang detected */ 253 CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39), 254 255 /* hangreset status: 256 * out: a0=0 reset complete, a0=1 reset in progress */ 257 CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40), 258 259 /* 260 * Set hw ingress packet vlan rewrite mode: 261 * in: (u32)a0=new vlan rewrite mode 262 * out: (u32)a0=old vlan rewrite mode */ 263 CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41), 264 265 /* 266 * in: (u16)a0=bdf of target vnic 267 * (u32)a1=cmd to proxy 268 * a2-a15=args to cmd in a1 269 * out: (u32)a0=status of proxied cmd 270 * a1-a15=out args of proxied cmd */ 271 CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42), 272 273 /* 274 * As for BY_BDF except a0 is index of hvnlink subordinate vnic 275 * or SR-IOV virtual vnic 276 */ 277 CMD_PROXY_BY_INDEX = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43), 278 279 /* 280 * For HPP toggle: 281 * adapter-info-get 282 * in: (u64)a0=phsical address of buffer passed in from caller. 283 * (u16)a1=size of buffer specified in a0. 284 * out: (u64)a0=phsical address of buffer passed in from caller. 285 * (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or 286 * 0 if no VIF-CONFIG-INFO TLV was ever received. */ 287 CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44), 288 289 /* INT13 API: (u64)a0=paddr to vnic_int13_params struct 290 * (u32)a1=INT13_CMD_xxx 291 */ 292 CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45), 293 294 /* Set default vlan: 295 * in: (u16)a0=new default vlan 296 * (u16)a1=zero for overriding vlan with param a0, 297 * non-zero for resetting vlan to the default 298 * out: (u16)a0=old default vlan 299 */ 300 CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46), 301 302 /* init_prov_info2: 303 * Variant of CMD_INIT_PROV_INFO, where it will not try to enable 304 * the vnic until CMD_ENABLE2 is issued. 305 * (u64)a0=paddr of vnic_devcmd_provinfo 306 * (u32)a1=sizeof provision info 307 */ 308 CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47), 309 310 /* enable2: 311 * (u32)a0=0 ==> standby 312 * =CMD_ENABLE2_ACTIVE ==> active 313 */ 314 CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48), 315 316 /* 317 * cmd_status: 318 * Returns the status of the specified command 319 * Input: 320 * a0 = command for which status is being queried. 321 * Possible values are: 322 * CMD_SOFT_RESET 323 * CMD_HANG_RESET 324 * CMD_OPEN 325 * CMD_INIT 326 * CMD_INIT_PROV_INFO 327 * CMD_DEINIT 328 * CMD_INIT_PROV_INFO2 329 * CMD_ENABLE2 330 * Output: 331 * if status == STAT_ERROR 332 * a0 = ERR_ENOTSUPPORTED - status for command in a0 is 333 * not supported 334 * if status == STAT_NONE 335 * a0 = status of the devcmd specified in a0 as follows. 336 * ERR_SUCCESS - command in a0 completed successfully 337 * ERR_EINPROGRESS - command in a0 is still in progress 338 */ 339 CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49), 340 341 /* 342 * Returns interrupt coalescing timer conversion factors. 343 * After calling this devcmd, ENIC driver can convert 344 * interrupt coalescing timer in usec into CPU cycles as follows: 345 * 346 * intr_timer_cycles = intr_timer_usec * multiplier / divisor 347 * 348 * Interrupt coalescing timer in usecs can be obtained from 349 * CPU cycles as follows: 350 * 351 * intr_timer_usec = intr_timer_cycles * divisor / multiplier 352 * 353 * in: none 354 * out: (u32)a0 = multiplier 355 * (u32)a1 = divisor 356 * (u32)a2 = maximum timer value in usec 357 */ 358 CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50), 359 360 /* 361 * Set the predefined mac address as default 362 * in: 363 * (u48)a0 = mac addr 364 */ 365 CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55), 366 367 /* Update the provisioning info of the given VIF 368 * (u64)a0=paddr of vnic_devcmd_provinfo 369 * (u32)a1=sizeof provision info 370 */ 371 CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56), 372 373 /* Initialization for the devcmd2 interface. 374 * in: (u64) a0 = host result buffer physical address 375 * in: (u16) a1 = number of entries in result buffer 376 */ 377 CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57), 378 379 /* Add a filter. 380 * in: (u64) a0= filter address 381 * (u32) a1= size of filter 382 * out: (u32) a0=filter identifier 383 */ 384 CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58), 385 386 /* Delete a filter. 387 * in: (u32) a0=filter identifier 388 */ 389 CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59), 390 391 /* Enable a Queue Pair in User space NIC 392 * in: (u32) a0=Queue Pair number 393 * (u32) a1= command 394 */ 395 CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60), 396 397 /* Disable a Queue Pair in User space NIC 398 * in: (u32) a0=Queue Pair number 399 * (u32) a1= command 400 */ 401 CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61), 402 403 /* Stats dump Queue Pair in User space NIC 404 * in: (u32) a0=Queue Pair number 405 * (u64) a1=host buffer addr for status dump 406 * (u32) a2=length of the buffer 407 */ 408 CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62), 409 410 /* Clear stats for Queue Pair in User space NIC 411 * in: (u32) a0=Queue Pair number 412 */ 413 CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63), 414 415 /* Use this devcmd for agreeing on the highest common version supported 416 * by both driver and fw for features who need such a facility. 417 * in: (u64) a0 = feature (driver requests for the supported versions 418 * on this feature) 419 * out: (u64) a0 = bitmap of all supported versions for that feature 420 */ 421 CMD_GET_SUPP_FEATURE_VER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 69), 422 423 /* Control (Enable/Disable) overlay offloads on the given vnic 424 * in: (u8) a0 = OVERLAY_FEATURE_NVGRE : NVGRE 425 * a0 = OVERLAY_FEATURE_VXLAN : VxLAN 426 * in: (u8) a1 = OVERLAY_OFFLOAD_ENABLE : Enable or 427 * a1 = OVERLAY_OFFLOAD_DISABLE : Disable or 428 * a1 = OVERLAY_OFFLOAD_ENABLE_V2 : Enable with version 2 429 */ 430 CMD_OVERLAY_OFFLOAD_CTRL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72), 431 432 /* Configuration of overlay offloads feature on a given vNIC 433 * in: (u8) a0 = DEVCMD_OVERLAY_NVGRE : NVGRE 434 * a0 = DEVCMD_OVERLAY_VXLAN : VxLAN 435 * in: (u8) a1 = VXLAN_PORT_UPDATE : VxLAN 436 * in: (u16) a2 = unsigned short int port information 437 */ 438 CMD_OVERLAY_OFFLOAD_CFG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 73), 439 440 /* 441 * Set extended CQ field in MREGS of RQ (or all RQs) 442 * for given vNIC 443 * in: (u64) a0 = RQ selection (VNIC_RQ_ALL for all RQs) 444 * (u32) a1 = CQ entry size 445 * VNIC_RQ_CQ_ENTRY_SIZE_16 --> 16 bytes 446 * VNIC_RQ_CQ_ENTRY_SIZE_32 --> 32 bytes 447 * VNIC_RQ_CQ_ENTRY_SIZE_64 --> 64 bytes 448 * 449 * Capability query: 450 * out: (u32) a0 = errno, 0:valid cmd 451 * (u32) a1 = value consisting of supported entries 452 * bit 0: 16 bytes 453 * bit 1: 32 bytes 454 * bit 2: 64 bytes 455 */ 456 CMD_CQ_ENTRY_SIZE_SET = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 90), 457 458 /* 459 * Set queue pair type (admin or data) 460 * in: (u32) a0 = queue pair type (0 = admin, 1 = data) 461 * in: (u32) a1 = enable (1) / disable (0) 462 */ 463 CMD_QP_TYPE_SET = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 97), 464 }; 465 466 #define QP_TYPE_ADMIN 0 467 #define QP_TYPE_DATA 1 468 #define QP_ENABLE 1 469 #define QP_DISABLE 0 470 471 /* CMD_ENABLE2 flags */ 472 #define CMD_ENABLE2_STANDBY 0x0 473 #define CMD_ENABLE2_ACTIVE 0x1 474 475 /* flags for CMD_OPEN */ 476 #define CMD_OPENF_OPROM 0x1 /* open coming from option rom */ 477 #define CMD_OPENF_IG_DESCCACHE 0x2 /* Do not flush IG DESC cache */ 478 479 /* flags for CMD_INIT */ 480 #define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */ 481 482 /* flags for CMD_PACKET_FILTER */ 483 #define CMD_PFILTER_DIRECTED 0x01 484 #define CMD_PFILTER_MULTICAST 0x02 485 #define CMD_PFILTER_BROADCAST 0x04 486 #define CMD_PFILTER_PROMISCUOUS 0x08 487 #define CMD_PFILTER_ALL_MULTICAST 0x10 488 489 /* Commands for CMD_QP_ENABLE/CM_QP_DISABLE */ 490 #define CMD_QP_RQWQ 0x0 491 492 /* rewrite modes for CMD_IG_VLAN_REWRITE_MODE */ 493 #define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK 0 494 #define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN 1 495 #define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN 2 496 #define IG_VLAN_REWRITE_MODE_PASS_THRU 3 497 498 enum vnic_devcmd_status { 499 STAT_NONE = 0, 500 STAT_BUSY = 1 << 0, /* cmd in progress */ 501 STAT_ERROR = 1 << 1, /* last cmd caused error (code in a0) */ 502 }; 503 504 enum vnic_devcmd_error { 505 ERR_SUCCESS = 0, 506 ERR_EINVAL = 1, 507 ERR_EFAULT = 2, 508 ERR_EPERM = 3, 509 ERR_EBUSY = 4, 510 ERR_ECMDUNKNOWN = 5, 511 ERR_EBADSTATE = 6, 512 ERR_ENOMEM = 7, 513 ERR_ETIMEDOUT = 8, 514 ERR_ELINKDOWN = 9, 515 ERR_EMAXRES = 10, 516 ERR_ENOTSUPPORTED = 11, 517 ERR_EINPROGRESS = 12, 518 ERR_MAX 519 }; 520 521 /* 522 * note: hw_version and asic_rev refer to the same thing, 523 * but have different formats. hw_version is 524 * a 32-byte string (e.g. "A2") and asic_rev is 525 * a 16-bit integer (e.g. 0xA2). 526 */ 527 struct vnic_devcmd_fw_info { 528 char fw_version[32]; 529 char fw_build[32]; 530 char hw_version[32]; 531 char hw_serial_number[32]; 532 u16 asic_type; 533 u16 asic_rev; 534 }; 535 536 struct vnic_devcmd_notify { 537 u32 csum; /* checksum over following words */ 538 539 u32 link_state; /* link up == 1 */ 540 u32 port_speed; /* effective port speed (rate limit) */ 541 u32 mtu; /* MTU */ 542 u32 msglvl; /* requested driver msg lvl */ 543 u32 uif; /* uplink interface */ 544 u32 status; /* status bits (see VNIC_STF_*) */ 545 u32 error; /* error code (see ERR_*) for first ERR */ 546 u32 link_down_cnt; /* running count of link down transitions */ 547 u32 perbi_rebuild_cnt; /* running count of perbi rebuilds */ 548 }; 549 #define VNIC_STF_FATAL_ERR 0x0001 /* fatal fw error */ 550 #define VNIC_STF_STD_PAUSE 0x0002 /* standard link-level pause on */ 551 #define VNIC_STF_PFC_PAUSE 0x0004 /* priority flow control pause on */ 552 /* all supported status flags */ 553 #define VNIC_STF_ALL (VNIC_STF_FATAL_ERR |\ 554 VNIC_STF_STD_PAUSE |\ 555 VNIC_STF_PFC_PAUSE |\ 556 0) 557 558 struct vnic_devcmd_provinfo { 559 u8 oui[3]; 560 u8 type; 561 u8 data[]; 562 }; 563 564 /* These are used in flags field of different filters to denote 565 * valid fields used. 566 */ 567 #define FILTER_FIELD_VALID(fld) (1 << (fld - 1)) 568 569 #define FILTER_FIELDS_USNIC ( \ 570 FILTER_FIELD_VALID(1) | \ 571 FILTER_FIELD_VALID(2) | \ 572 FILTER_FIELD_VALID(3) | \ 573 FILTER_FIELD_VALID(4)) 574 575 #define FILTER_FIELDS_IPV4_5TUPLE ( \ 576 FILTER_FIELD_VALID(1) | \ 577 FILTER_FIELD_VALID(2) | \ 578 FILTER_FIELD_VALID(3) | \ 579 FILTER_FIELD_VALID(4) | \ 580 FILTER_FIELD_VALID(5)) 581 582 #define FILTER_FIELDS_MAC_VLAN ( \ 583 FILTER_FIELD_VALID(1) | \ 584 FILTER_FIELD_VALID(2)) 585 586 #define FILTER_FIELD_USNIC_VLAN FILTER_FIELD_VALID(1) 587 #define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2) 588 #define FILTER_FIELD_USNIC_PROTO FILTER_FIELD_VALID(3) 589 #define FILTER_FIELD_USNIC_ID FILTER_FIELD_VALID(4) 590 591 struct filter_usnic_id { 592 u32 flags; 593 u16 vlan; 594 u16 ethtype; 595 u8 proto_version; 596 u32 usnic_id; 597 } __packed; 598 599 #define FILTER_FIELD_5TUP_PROTO FILTER_FIELD_VALID(1) 600 #define FILTER_FIELD_5TUP_SRC_AD FILTER_FIELD_VALID(2) 601 #define FILTER_FIELD_5TUP_DST_AD FILTER_FIELD_VALID(3) 602 #define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4) 603 #define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5) 604 605 /* Enums for the protocol field. */ 606 enum protocol_e { 607 PROTO_UDP = 0, 608 PROTO_TCP = 1, 609 }; 610 611 struct filter_ipv4_5tuple { 612 u32 flags; 613 u32 protocol; 614 u32 src_addr; 615 u32 dst_addr; 616 u16 src_port; 617 u16 dst_port; 618 } __packed; 619 620 #define FILTER_FIELD_VMQ_VLAN FILTER_FIELD_VALID(1) 621 #define FILTER_FIELD_VMQ_MAC FILTER_FIELD_VALID(2) 622 623 struct filter_mac_vlan { 624 u32 flags; 625 u16 vlan; 626 u8 mac_addr[6]; 627 } __packed; 628 629 /* Specifies the filter_action type. */ 630 enum { 631 FILTER_ACTION_RQ_STEERING = 0, 632 FILTER_ACTION_MAX 633 }; 634 635 struct filter_action { 636 u32 type; 637 union { 638 u32 rq_idx; 639 } u; 640 } __packed; 641 642 /* Specifies the filter type. */ 643 enum filter_type { 644 FILTER_USNIC_ID = 0, 645 FILTER_IPV4_5TUPLE = 1, 646 FILTER_MAC_VLAN = 2, 647 FILTER_MAX 648 }; 649 650 struct filter { 651 u32 type; 652 union { 653 struct filter_usnic_id usnic; 654 struct filter_ipv4_5tuple ipv4; 655 struct filter_mac_vlan mac_vlan; 656 } u; 657 } __packed; 658 659 enum { 660 CLSF_TLV_FILTER = 0, 661 CLSF_TLV_ACTION = 1, 662 }; 663 664 /* Maximum size of buffer to CMD_ADD_FILTER */ 665 #define FILTER_MAX_BUF_SIZE 100 666 667 struct filter_tlv { 668 u32 type; 669 u32 length; 670 u32 val[]; 671 }; 672 673 enum { 674 CLSF_ADD = 0, 675 CLSF_DEL = 1, 676 }; 677 678 /* 679 * Writing cmd register causes STAT_BUSY to get set in status register. 680 * When cmd completes, STAT_BUSY will be cleared. 681 * 682 * If cmd completed successfully STAT_ERROR will be clear 683 * and args registers contain cmd-specific results. 684 * 685 * If cmd error, STAT_ERROR will be set and args[0] contains error code. 686 * 687 * status register is read-only. While STAT_BUSY is set, 688 * all other register contents are read-only. 689 */ 690 691 /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */ 692 #define VNIC_DEVCMD_NARGS 15 693 struct vnic_devcmd { 694 u32 status; /* RO */ 695 u32 cmd; /* RW */ 696 u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */ 697 }; 698 699 #define DEVCMD2_FNORESULT 0x1 /* Don't copy result to host */ 700 701 #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS 702 struct vnic_devcmd2 { 703 u16 pad; 704 u16 flags; 705 u32 cmd; 706 u64 args[VNIC_DEVCMD2_NARGS]; 707 }; 708 709 #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS 710 struct devcmd2_result { 711 u64 results[VNIC_DEVCMD2_NRESULTS]; 712 u32 pad; 713 u16 completed_index; 714 u8 error; 715 u8 color; 716 }; 717 718 #define DEVCMD2_RING_SIZE 32 719 #define DEVCMD2_DESC_SIZE 128 720 721 enum overlay_feature_t { 722 OVERLAY_FEATURE_NVGRE = 1, 723 OVERLAY_FEATURE_VXLAN, 724 OVERLAY_FEATURE_MAX, 725 }; 726 727 enum overlay_ofld_cmd { 728 OVERLAY_OFFLOAD_ENABLE, 729 OVERLAY_OFFLOAD_DISABLE, 730 OVERLAY_OFFLOAD_ENABLE_P2, 731 OVERLAY_OFFLOAD_MAX, 732 }; 733 734 #define OVERLAY_CFG_VXLAN_PORT_UPDATE 0 735 736 #define ENIC_VXLAN_INNER_IPV6 BIT(0) 737 #define ENIC_VXLAN_OUTER_IPV6 BIT(1) 738 #define ENIC_VXLAN_MULTI_WQ BIT(2) 739 740 /* Use this enum to get the supported versions for each of these features 741 * If you need to use the devcmd_get_supported_feature_version(), add 742 * the new feature into this enum and install function handler in devcmd.c 743 */ 744 enum vic_feature_t { 745 VIC_FEATURE_VXLAN, 746 VIC_FEATURE_RDMA, 747 VIC_FEATURE_VXLAN_PATCH, 748 /* slot 3 reserved for firmware VIC_FEATURE_PTP */ 749 VIC_FEATURE_SRIOV = 4, 750 VIC_FEATURE_MAX, 751 }; 752 753 #endif /* _VNIC_DEVCMD_H_ */ 754