Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
0004  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
0005  */
0006 #ifndef _VNIC_DEVCMD_H_
0007 #define _VNIC_DEVCMD_H_
0008 
0009 #define _CMD_NBITS      14
0010 #define _CMD_VTYPEBITS  10
0011 #define _CMD_FLAGSBITS  6
0012 #define _CMD_DIRBITS    2
0013 
0014 #define _CMD_NMASK      ((1 << _CMD_NBITS)-1)
0015 #define _CMD_VTYPEMASK  ((1 << _CMD_VTYPEBITS)-1)
0016 #define _CMD_FLAGSMASK  ((1 << _CMD_FLAGSBITS)-1)
0017 #define _CMD_DIRMASK    ((1 << _CMD_DIRBITS)-1)
0018 
0019 #define _CMD_NSHIFT     0
0020 #define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
0021 #define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
0022 #define _CMD_DIRSHIFT   (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
0023 
0024 /*
0025  * Direction bits (from host perspective).
0026  */
0027 #define _CMD_DIR_NONE   0U
0028 #define _CMD_DIR_WRITE  1U
0029 #define _CMD_DIR_READ   2U
0030 #define _CMD_DIR_RW     (_CMD_DIR_WRITE | _CMD_DIR_READ)
0031 
0032 /*
0033  * Flag bits.
0034  */
0035 #define _CMD_FLAGS_NONE 0U
0036 #define _CMD_FLAGS_NOWAIT 1U
0037 
0038 /*
0039  * vNIC type bits.
0040  */
0041 #define _CMD_VTYPE_NONE  0U
0042 #define _CMD_VTYPE_ENET  1U
0043 #define _CMD_VTYPE_FC    2U
0044 #define _CMD_VTYPE_SCSI  4U
0045 #define _CMD_VTYPE_ALL   (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
0046 
0047 /*
0048  * Used to create cmds..
0049 */
0050 #define _CMDCF(dir, flags, vtype, nr)  \
0051     (((dir)   << _CMD_DIRSHIFT) | \
0052     ((flags) << _CMD_FLAGSSHIFT) | \
0053     ((vtype) << _CMD_VTYPESHIFT) | \
0054     ((nr)    << _CMD_NSHIFT))
0055 #define _CMDC(dir, vtype, nr)    _CMDCF(dir, 0, vtype, nr)
0056 #define _CMDCNW(dir, vtype, nr)  _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
0057 
0058 /*
0059  * Used to decode cmds..
0060 */
0061 #define _CMD_DIR(cmd)            (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
0062 #define _CMD_FLAGS(cmd)          (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
0063 #define _CMD_VTYPE(cmd)          (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
0064 #define _CMD_N(cmd)              (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
0065 
0066 enum vnic_devcmd_cmd {
0067     CMD_NONE                = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
0068 
0069     /* mcpu fw info in mem: (u64)a0=paddr to struct vnic_devcmd_fw_info */
0070     CMD_MCPU_FW_INFO        = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
0071 
0072     /* dev-specific block member:
0073      *    in: (u16)a0=offset,(u8)a1=size
0074      *    out: a0=value */
0075     CMD_DEV_SPEC            = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
0076 
0077     /* stats clear */
0078     CMD_STATS_CLEAR         = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
0079 
0080     /* stats dump in mem: (u64)a0=paddr to stats area,
0081      *                    (u16)a1=sizeof stats area */
0082     CMD_STATS_DUMP          = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
0083 
0084     /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */
0085     CMD_PACKET_FILTER       = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
0086 
0087     /* hang detection notification */
0088     CMD_HANG_NOTIFY         = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
0089 
0090     /* MAC address in (u48)a0 */
0091     CMD_MAC_ADDR            = _CMDC(_CMD_DIR_READ,
0092                     _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
0093 
0094     /* disable/enable promisc mode: (u8)a0=0/1 */
0095 /***** XXX DEPRECATED *****/
0096     CMD_PROMISC_MODE        = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 10),
0097 
0098     /* disable/enable all-multi mode: (u8)a0=0/1 */
0099 /***** XXX DEPRECATED *****/
0100     CMD_ALLMULTI_MODE       = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 11),
0101 
0102     /* add addr from (u48)a0 */
0103     CMD_ADDR_ADD            = _CMDCNW(_CMD_DIR_WRITE,
0104                     _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
0105 
0106     /* del addr from (u48)a0 */
0107     CMD_ADDR_DEL            = _CMDCNW(_CMD_DIR_WRITE,
0108                     _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
0109 
0110     /* add VLAN id in (u16)a0 */
0111     CMD_VLAN_ADD            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
0112 
0113     /* del VLAN id in (u16)a0 */
0114     CMD_VLAN_DEL            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
0115 
0116     /* nic_cfg in (u32)a0 */
0117     CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
0118 
0119     /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */
0120     CMD_RSS_KEY             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
0121 
0122     /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */
0123     CMD_RSS_CPU             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
0124 
0125     /* initiate softreset */
0126     CMD_SOFT_RESET          = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
0127 
0128     /* softreset status:
0129      *    out: a0=0 reset complete, a0=1 reset in progress */
0130     CMD_SOFT_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
0131 
0132     /* set struct vnic_devcmd_notify buffer in mem:
0133      * in:
0134      *   (u64)a0=paddr to notify (set paddr=0 to unset)
0135      *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
0136      *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
0137      * out:
0138      *   (u32)a1 = effective size
0139      */
0140     CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
0141 
0142     /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct,
0143      *           (u8)a1=PXENV_UNDI_xxx */
0144     CMD_UNDI                = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
0145 
0146     /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
0147     CMD_OPEN        = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
0148 
0149     /* open status:
0150      *    out: a0=0 open complete, a0=1 open in progress */
0151     CMD_OPEN_STATUS     = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
0152 
0153     /* close vnic */
0154     CMD_CLOSE       = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
0155 
0156     /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
0157     CMD_INIT        = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
0158 
0159     /* variant of CMD_INIT, with provisioning info
0160      *     (u64)a0=paddr of vnic_devcmd_provinfo
0161      *     (u32)a1=sizeof provision info
0162      */
0163     CMD_INIT_PROV_INFO  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
0164 
0165     /* enable virtual link */
0166     CMD_ENABLE      = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
0167 
0168     /* disable virtual link */
0169     CMD_DISABLE     = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
0170 
0171     /* stats dump all vnics on uplink in mem: (u64)a0=paddr (u32)a1=uif */
0172     CMD_STATS_DUMP_ALL  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
0173 
0174     /* init status:
0175      *    out: a0=0 init complete, a0=1 init in progress
0176      *         if a0=0, a1=errno */
0177     CMD_INIT_STATUS     = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
0178 
0179     /* INT13 API: (u64)a0=paddr to vnic_int13_params struct
0180      *            (u8)a1=INT13_CMD_xxx */
0181     CMD_INT13               = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
0182 
0183     /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */
0184     CMD_LOGICAL_UPLINK      = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
0185 
0186     /* undo initialize of virtual link */
0187     CMD_DEINIT      = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
0188 
0189     /* check fw capability of a cmd:
0190      * in:  (u32)a0=cmd
0191      * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
0192     CMD_CAPABILITY      = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
0193 
0194     /* persistent binding info
0195      * in:  (u64)a0=paddr of arg
0196      *      (u32)a1=CMD_PERBI_XXX */
0197     CMD_PERBI       = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
0198 
0199     /* Interrupt Assert Register functionality
0200      * in: (u16)a0=interrupt number to assert
0201      */
0202     CMD_IAR         = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
0203 
0204     /* initiate hangreset, like softreset after hang detected */
0205     CMD_HANG_RESET      = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
0206 
0207     /* hangreset status:
0208      *    out: a0=0 reset complete, a0=1 reset in progress */
0209     CMD_HANG_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
0210 
0211     /*
0212      * Set hw ingress packet vlan rewrite mode:
0213      * in:  (u32)a0=new vlan rewrite mode
0214      * out: (u32)a0=old vlan rewrite mode */
0215     CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
0216 
0217     /*
0218      * in:  (u16)a0=bdf of target vnic
0219      *      (u32)a1=cmd to proxy
0220      *      a2-a15=args to cmd in a1
0221      * out: (u32)a0=status of proxied cmd
0222      *      a1-a15=out args of proxied cmd */
0223     CMD_PROXY_BY_BDF =  _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
0224 
0225     /*
0226      * As for BY_BDF except a0 is index of hvnlink subordinate vnic
0227      * or SR-IOV virtual vnic
0228      */
0229     CMD_PROXY_BY_INDEX =    _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
0230 
0231     /*
0232      * For HPP toggle:
0233      * adapter-info-get
0234      * in:  (u64)a0=phsical address of buffer passed in from caller.
0235      *      (u16)a1=size of buffer specified in a0.
0236      * out: (u64)a0=phsical address of buffer passed in from caller.
0237      *      (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or
0238      *              0 if no VIF-CONFIG-INFO TLV was ever received. */
0239     CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
0240 
0241     /*
0242      * INT13 API: (u64)a0=paddr to vnic_int13_params struct
0243      *            (u32)a1=INT13_CMD_xxx
0244      */
0245     CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
0246 
0247     /*
0248      * Set default vlan:
0249      * in: (u16)a0=new default vlan
0250      *     (u16)a1=zero for overriding vlan with param a0,
0251      *             non-zero for resetting vlan to the default
0252      * out: (u16)a0=old default vlan
0253      */
0254     CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
0255 
0256     /* init_prov_info2:
0257      * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
0258      * the vnic until CMD_ENABLE2 is issued.
0259      *     (u64)a0=paddr of vnic_devcmd_provinfo
0260      *     (u32)a1=sizeof provision info
0261      */
0262     CMD_INIT_PROV_INFO2  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
0263 
0264     /* enable2:
0265      *      (u32)a0=0                  ==> standby
0266      *             =CMD_ENABLE2_ACTIVE ==> active
0267      */
0268     CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
0269 
0270     /*
0271      * cmd_status:
0272      *     Returns the status of the specified command
0273      * Input:
0274      *     a0 = command for which status is being queried.
0275      *          Possible values are:
0276      *              CMD_SOFT_RESET
0277      *              CMD_HANG_RESET
0278      *              CMD_OPEN
0279      *              CMD_INIT
0280      *              CMD_INIT_PROV_INFO
0281      *              CMD_DEINIT
0282      *              CMD_INIT_PROV_INFO2
0283      *              CMD_ENABLE2
0284      * Output:
0285      *     if status == STAT_ERROR
0286      *        a0 = ERR_ENOTSUPPORTED - status for command in a0 is
0287      *                                 not supported
0288      *     if status == STAT_NONE
0289      *        a0 = status of the devcmd specified in a0 as follows.
0290      *             ERR_SUCCESS   - command in a0 completed successfully
0291      *             ERR_EINPROGRESS - command in a0 is still in progress
0292      */
0293     CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
0294 
0295     /*
0296      * Returns interrupt coalescing timer conversion factors.
0297      * After calling this devcmd, ENIC driver can convert
0298      * interrupt coalescing timer in usec into CPU cycles as follows:
0299      *
0300      *   intr_timer_cycles = intr_timer_usec * multiplier / divisor
0301      *
0302      * Interrupt coalescing timer in usecs can be be converted/obtained
0303      * from CPU cycles as follows:
0304      *
0305      *   intr_timer_usec = intr_timer_cycles * divisor / multiplier
0306      *
0307      * in: none
0308      * out: (u32)a0 = multiplier
0309      *      (u32)a1 = divisor
0310      *      (u32)a2 = maximum timer value in usec
0311      */
0312     CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
0313 
0314     /*
0315      * ISCSI DUMP API:
0316      * in: (u64)a0=paddr of the param or param itself
0317      *     (u32)a1=ISCSI_CMD_xxx
0318      */
0319     CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51),
0320 
0321     /*
0322      * ISCSI DUMP STATUS API:
0323      * in: (u32)a0=cmd tag
0324      * in: (u32)a1=ISCSI_CMD_xxx
0325      * out: (u32)a0=cmd status
0326      */
0327     CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52),
0328 
0329     /*
0330      * Subvnic migration from MQ <--> VF.
0331      * Enable the LIF migration from MQ to VF and vice versa. MQ and VF
0332      * indexes are statically bound at the time of initialization.
0333      * Based on the
0334      * direction of migration, the resources of either MQ or the VF shall
0335      * be attached to the LIF.
0336      * in:        (u32)a0=Direction of Migration
0337      *                  0=> Migrate to VF
0338      *                  1=> Migrate to MQ
0339      *            (u32)a1=VF index (MQ index)
0340      */
0341     CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53),
0342 
0343     /*
0344      * Register / Deregister the notification block for MQ subvnics
0345      * in:
0346      *   (u64)a0=paddr to notify (set paddr=0 to unset)
0347      *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
0348      *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
0349      * out:
0350      *   (u32)a1 = effective size
0351      */
0352     CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54),
0353 
0354     /*
0355      * Set the predefined mac address as default
0356      * in:
0357      *   (u48)a0=mac addr
0358      */
0359     CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
0360 
0361     /* Update the provisioning info of the given VIF
0362      *     (u64)a0=paddr of vnic_devcmd_provinfo
0363      *     (u32)a1=sizeof provision info
0364      */
0365     CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
0366 
0367     /*
0368      * Initialization for the devcmd2 interface.
0369      * in: (u64) a0=host result buffer physical address
0370      * in: (u16) a1=number of entries in result buffer
0371      */
0372     CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
0373 };
0374 
0375 /* flags for CMD_OPEN */
0376 #define CMD_OPENF_OPROM     0x1 /* open coming from option rom */
0377 
0378 #define CMD_OPENF_RQ_ENABLE_THEN_POST   0x2
0379 
0380 /* flags for CMD_INIT */
0381 #define CMD_INITF_DEFAULT_MAC   0x1 /* init with default mac addr */
0382 
0383 /* flags for CMD_PACKET_FILTER */
0384 #define CMD_PFILTER_DIRECTED        0x01
0385 #define CMD_PFILTER_MULTICAST       0x02
0386 #define CMD_PFILTER_BROADCAST       0x04
0387 #define CMD_PFILTER_PROMISCUOUS     0x08
0388 #define CMD_PFILTER_ALL_MULTICAST   0x10
0389 
0390 enum vnic_devcmd_status {
0391     STAT_NONE = 0,
0392     STAT_BUSY = 1 << 0, /* cmd in progress */
0393     STAT_ERROR = 1 << 1,    /* last cmd caused error (code in a0) */
0394 };
0395 
0396 enum vnic_devcmd_error {
0397     ERR_SUCCESS = 0,
0398     ERR_EINVAL = 1,
0399     ERR_EFAULT = 2,
0400     ERR_EPERM = 3,
0401     ERR_EBUSY = 4,
0402     ERR_ECMDUNKNOWN = 5,
0403     ERR_EBADSTATE = 6,
0404     ERR_ENOMEM = 7,
0405     ERR_ETIMEDOUT = 8,
0406     ERR_ELINKDOWN = 9,
0407 };
0408 
0409 struct vnic_devcmd_fw_info {
0410     char fw_version[32];
0411     char fw_build[32];
0412     char hw_version[32];
0413     char hw_serial_number[32];
0414 };
0415 
0416 struct vnic_devcmd_notify {
0417     u32 csum;       /* checksum over following words */
0418 
0419     u32 link_state;     /* link up == 1 */
0420     u32 port_speed;     /* effective port speed (rate limit) */
0421     u32 mtu;        /* MTU */
0422     u32 msglvl;     /* requested driver msg lvl */
0423     u32 uif;        /* uplink interface */
0424     u32 status;     /* status bits (see VNIC_STF_*) */
0425     u32 error;      /* error code (see ERR_*) for first ERR */
0426     u32 link_down_cnt;  /* running count of link down transitions */
0427 };
0428 #define VNIC_STF_FATAL_ERR  0x0001  /* fatal fw error */
0429 
0430 struct vnic_devcmd_provinfo {
0431     u8 oui[3];
0432     u8 type;
0433     u8 data[];
0434 };
0435 
0436 /*
0437  * Writing cmd register causes STAT_BUSY to get set in status register.
0438  * When cmd completes, STAT_BUSY will be cleared.
0439  *
0440  * If cmd completed successfully STAT_ERROR will be clear
0441  * and args registers contain cmd-specific results.
0442  *
0443  * If cmd error, STAT_ERROR will be set and args[0] contains error code.
0444  *
0445  * status register is read-only.  While STAT_BUSY is set,
0446  * all other register contents are read-only.
0447  */
0448 
0449 /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
0450 #define VNIC_DEVCMD_NARGS 15
0451 struct vnic_devcmd {
0452     u32 status;         /* RO */
0453     u32 cmd;            /* RW */
0454     u64 args[VNIC_DEVCMD_NARGS];    /* RW cmd args (little-endian) */
0455 };
0456 
0457 /*
0458  * Version 2 of the interface.
0459  *
0460  * Some things are carried over, notably the vnic_devcmd_cmd enum.
0461  */
0462 
0463 /*
0464  * Flags for vnic_devcmd2.flags
0465  */
0466 
0467 #define DEVCMD2_FNORESULT   0x1 /* Don't copy result to host */
0468 
0469 #define VNIC_DEVCMD2_NARGS          VNIC_DEVCMD_NARGS
0470 
0471 struct vnic_devcmd2 {
0472     u16 pad;
0473     u16 flags;
0474     u32 cmd;                /* same command #defines as original */
0475     u64 args[VNIC_DEVCMD2_NARGS];
0476 };
0477 
0478 #define VNIC_DEVCMD2_NRESULTS           VNIC_DEVCMD_NARGS
0479 struct devcmd2_result {
0480     u64 results[VNIC_DEVCMD2_NRESULTS];
0481     u32 pad;
0482     u16 completed_index;    /* into copy WQ */
0483     u8  error;              /* same error codes as original */
0484     u8  color;              /* 0 or 1 as with completion queues */
0485 };
0486 
0487 #define DEVCMD2_RING_SIZE           32
0488 #define DEVCMD2_DESC_SIZE           128
0489 
0490 #define DEVCMD2_RESULTS_SIZE_MAX        ((1 << 16) - 1)
0491 
0492 #endif /* _VNIC_DEVCMD_H_ */