LCOV - code coverage report
Current view: top level - drivers/net/enic/base - vnic_devcmd.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 4 0.0 %
Date: 2025-01-02 22:41:34 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 2 0.0 %

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

Generated by: LCOV version 1.14