X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fenic%2Fbase%2Fvnic_devcmd.h;h=09477ab1ce90fd9a624f69b5e5f7c843fd314126;hb=75a675d6d2842a2d47c03a55c50e8f7058902658;hp=e7ecf31a3cae01ee4c402f2fbdaa31c07fc2873a;hpb=72f3de308fce9d6b537440f5f1a414c069d2c79d;p=dpdk.git diff --git a/drivers/net/enic/base/vnic_devcmd.h b/drivers/net/enic/base/vnic_devcmd.h index e7ecf31a3c..09477ab1ce 100644 --- a/drivers/net/enic/base/vnic_devcmd.h +++ b/drivers/net/enic/base/vnic_devcmd.h @@ -1,37 +1,7 @@ -/* - * Copyright 2008-2010 Cisco Systems, Inc. All rights reserved. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2008-2017 Cisco Systems, Inc. All rights reserved. * Copyright 2007 Nuova Systems, Inc. All rights reserved. - * - * Copyright (c) 2014, Cisco Systems, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * */ -#ident "$Id: vnic_devcmd.h 173135 2014-05-16 03:14:07Z sanpilla $" #ifndef _VNIC_DEVCMD_H_ #define _VNIC_DEVCMD_H_ @@ -93,13 +63,15 @@ #define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK) #define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK) +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + enum vnic_devcmd_cmd { CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0), /* * mcpu fw info in mem: * in: - * (u64)a0=paddr to struct vnic_devcmd_fw_info + * (uint64_t)a0=paddr to struct vnic_devcmd_fw_info * action: * Fills in struct vnic_devcmd_fw_info (128 bytes) * note: @@ -110,10 +82,10 @@ enum vnic_devcmd_cmd { /* * mcpu fw info in mem: * in: - * (u64)a0=paddr to struct vnic_devcmd_fw_info - * (u16)a1=size of the structure + * (uint64_t)a0=paddr to struct vnic_devcmd_fw_info + * (uint16_t)a1=size of the structure * out: - * (u16)a1=0 for in:a1 = 0, + * (uint16_t)a1=0 for in:a1 = 0, * data size actually written for other values. * action: * Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0, @@ -126,29 +98,34 @@ enum vnic_devcmd_cmd { CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1), /* dev-specific block member: - * in: (u16)a0=offset,(u8)a1=size - * out: a0=value */ + * in: (uint16_t)a0=offset,(uint8_t)a1=size + * out: a0=value + */ CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2), /* stats clear */ CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3), - /* stats dump in mem: (u64)a0=paddr to stats area, - * (u16)a1=sizeof stats area */ + /* stats dump in mem: (uint64_t)a0=paddr to stats area, + * (uint16_t)a1=sizeof stats area + */ CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4), - /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */ + /* set Rx packet filter: (uint32_t)a0=filters (see CMD_PFILTER_*) */ CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7), - /* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */ + /* set Rx packet filter for all: (uint32_t)a0=filters + * (see CMD_PFILTER_*) + */ CMD_PACKET_FILTER_ALL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7), /* hang detection notification */ CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8), /* MAC address in (u48)a0 */ - CMD_GET_MAC_ADDR = _CMDC(_CMD_DIR_READ, + CMD_MAC_ADDR = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9), +#define CMD_GET_MAC_ADDR CMD_MAC_ADDR /* some uses are aliased */ /* add addr from (u48)a0 */ CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE, @@ -158,19 +135,37 @@ enum vnic_devcmd_cmd { CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13), - /* add VLAN id in (u16)a0 */ + /* add VLAN id in (uint16_t)a0 */ CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14), - /* del VLAN id in (u16)a0 */ + /* del VLAN id in (uint16_t)a0 */ CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15), - /* nic_cfg in (u32)a0 */ + /* + * nic_cfg in (uint32_t)a0 + * + * Capability query: + * out: (uint64_t) a0= 1 if a1 is valid + * (uint64_t) a1= (NIC_CFG bits supported) | (flags << 32) + * (flags are CMD_NIC_CFG_CAPF_xxx) + */ CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16), - /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */ + /* + * nic_cfg_chk (same as nic_cfg, but may return error) + * in (uint32_t)a0 + * + * Capability query: + * out: (uint64_t) a0= 1 if a1 is valid + * (uint64_t) a1= (NIC_CFG bits supported) | (flags << 32) + * (flags are CMD_NIC_CFG_CAPF_xxx) + */ + CMD_NIC_CFG_CHK = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16), + + /* union vnic_rss_key in mem: (uint64_t)a0=paddr, (uint16_t)a1=len */ CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17), - /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */ + /* union vnic_rss_cpu in mem: (uint64_t)a0=paddr, (uint16_t)a1=len */ CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18), /* initiate softreset */ @@ -182,19 +177,20 @@ enum vnic_devcmd_cmd { /* set struct vnic_devcmd_notify buffer in mem: * in: - * (u64)a0=paddr to notify (set paddr=0 to unset) - * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) - * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) + * (uint64_t)a0=paddr to notify (set paddr=0 to unset) + * (uint32_t)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) + * (uint16_t)a1 & 0x0000ffff00000000=intr num (-1 for no intr) * out: - * (u32)a1 = effective size + * (uint32_t)a1 = effective size */ CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21), - /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct, - * (u8)a1=PXENV_UNDI_xxx */ + /* UNDI API: (uint64_t)a0=paddr to s_PXENV_UNDI_ struct, + * (uint8_t)a1=PXENV_UNDI_xxx + */ CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22), - /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */ + /* initiate open sequence (uint32_t)a0=flags (see CMD_OPENF_*) */ CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23), /* open status: @@ -204,13 +200,14 @@ enum vnic_devcmd_cmd { /* close vnic */ CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25), - /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ + /* initialize virtual link: (uint32_t)a0=flags (see CMD_INITF_*) */ /***** Replaced by CMD_INIT *****/ CMD_INIT_v1 = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26), /* variant of CMD_INIT, with provisioning info - * (u64)a0=paddr of vnic_devcmd_provinfo - * (u32)a1=sizeof provision info */ + * (uint64_t)a0=paddr of vnic_devcmd_provinfo + * (uint32_t)a1=sizeof provision info + */ CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27), /* enable virtual link */ @@ -223,40 +220,45 @@ enum vnic_devcmd_cmd { CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29), /* stats dump sum of all vnic stats on same uplink in mem: - * (u64)a0=paddr - * (u16)a1=sizeof stats area */ + * (uint64_t)a0=paddr + * (uint16_t)a1=sizeof stats area + */ CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30), /* init status: * out: a0=0 init complete, a0=1 init in progress - * if a0=0, a1=errno */ + * if a0=0, a1=errno + */ CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31), - /* INT13 API: (u64)a0=paddr to vnic_int13_params struct - * (u32)a1=INT13_CMD_xxx */ + /* INT13 API: (uint64_t)a0=paddr to vnic_int13_params struct + * (uint32_t)a1=INT13_CMD_xxx + */ CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32), - /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */ + /* logical uplink enable/disable: (uint64_t)a0: 0/1=disable/enable */ CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33), /* undo initialize of virtual link */ CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34), - /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */ + /* initialize virtual link: (uint32_t)a0=flags (see CMD_INITF_*) */ CMD_INIT = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35), /* check fw capability of a cmd: - * in: (u32)a0=cmd - * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */ + * in: (uint32_t)a0=cmd + * out: (uint32_t)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits + */ CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36), /* persistent binding info - * in: (u64)a0=paddr of arg - * (u32)a1=CMD_PERBI_XXX */ + * in: (uint64_t)a0=paddr of arg + * (uint32_t)a1=CMD_PERBI_XXX + */ CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37), /* Interrupt Assert Register functionality - * in: (u16)a0=interrupt number to assert + * in: (uint16_t)a0=interrupt number to assert */ CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38), @@ -264,21 +266,24 @@ enum vnic_devcmd_cmd { CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39), /* hangreset status: - * out: a0=0 reset complete, a0=1 reset in progress */ + * out: a0=0 reset complete, a0=1 reset in progress + */ CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40), /* * Set hw ingress packet vlan rewrite mode: - * in: (u32)a0=new vlan rewrite mode - * out: (u32)a0=old vlan rewrite mode */ + * in: (uint32_t)a0=new vlan rewrite mode + * out: (uint32_t)a0=old vlan rewrite mode + */ CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41), /* - * in: (u16)a0=bdf of target vnic - * (u32)a1=cmd to proxy + * in: (uint16_t)a0=bdf of target vnic + * (uint32_t)a1=cmd to proxy * a2-a15=args to cmd in a1 - * out: (u32)a0=status of proxied cmd - * a1-a15=out args of proxied cmd */ + * out: (uint32_t)a0=status of proxied cmd + * a1-a15=out args of proxied cmd + */ CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42), /* @@ -290,37 +295,39 @@ enum vnic_devcmd_cmd { /* * For HPP toggle: * adapter-info-get - * in: (u64)a0=phsical address of buffer passed in from caller. - * (u16)a1=size of buffer specified in a0. - * out: (u64)a0=phsical address of buffer passed in from caller. - * (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or - * 0 if no VIF-CONFIG-INFO TLV was ever received. */ + * in: (uint64_t)a0=phsical address of buffer passed in from caller. + * (uint16_t)a1=size of buffer specified in a0. + * out: (uint64_t)a0=phsical address of buffer passed in from caller. + * (uint16_t)a1=actual bytes from VIF-CONFIG-INFO TLV, or + * 0 if no VIF-CONFIG-INFO TLV was ever received. + */ CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44), /* - * INT13 API: (u64)a0=paddr to vnic_int13_params struct - * (u32)a1=INT13_CMD_xxx + * INT13 API: (uint64_t)a0=paddr to vnic_int13_params struct + * (uint32_t)a1=INT13_CMD_xxx */ CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45), /* * Set default vlan: - * in: (u16)a0=new default vlan - * (u16)a1=zero for overriding vlan with param a0, + * in: (uint16_t)a0=new default vlan + * (uint16_t)a1=zero for overriding vlan with param a0, * non-zero for resetting vlan to the default - * out: (u16)a0=old default vlan + * out: (uint16_t)a0=old default vlan */ CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46), /* init_prov_info2: * Variant of CMD_INIT_PROV_INFO, where it will not try to enable * the vnic until CMD_ENABLE2 is issued. - * (u64)a0=paddr of vnic_devcmd_provinfo - * (u32)a1=sizeof provision info */ + * (uint64_t)a0=paddr of vnic_devcmd_provinfo + * (uint32_t)a1=sizeof provision info + */ CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47), /* enable2: - * (u32)a0=0 ==> standby + * (uint32_t)a0=0 ==> standby * =CMD_ENABLE2_ACTIVE ==> active */ CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48), @@ -363,24 +370,24 @@ enum vnic_devcmd_cmd { * intr_timer_usec = intr_timer_cycles * divisor / multiplier * * in: none - * out: (u32)a0 = multiplier - * (u32)a1 = divisor - * (u32)a2 = maximum timer value in usec + * out: (uint32_t)a0 = multiplier + * (uint32_t)a1 = divisor + * (uint32_t)a2 = maximum timer value in usec */ CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50), /* * ISCSI DUMP API: - * in: (u64)a0=paddr of the param or param itself - * (u32)a1=ISCSI_CMD_xxx + * in: (uint64_t)a0=paddr of the param or param itself + * (uint32_t)a1=ISCSI_CMD_xxx */ CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51), /* * ISCSI DUMP STATUS API: - * in: (u32)a0=cmd tag - * in: (u32)a1=ISCSI_CMD_xxx - * out: (u32)a0=cmd status + * in: (uint32_t)a0=cmd tag + * in: (uint32_t)a1=ISCSI_CMD_xxx + * out: (uint32_t)a0=cmd status */ CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52), @@ -388,25 +395,23 @@ enum vnic_devcmd_cmd { * Subvnic migration from MQ <--> VF. * Enable the LIF migration from MQ to VF and vice versa. MQ and VF * indexes are statically bound at the time of initialization. - * Based on the - * direction of migration, the resources of either MQ or the VF shall - * be attached to the LIF. - * in: (u32)a0=Direction of Migration + * Based on the direction of migration, the resources of either MQ or + * the VF shall be attached to the LIF. + * in: (uint32_t)a0=Direction of Migration * 0=> Migrate to VF * 1=> Migrate to MQ - * (u32)a1=VF index (MQ index) + * (uint32_t)a1=VF index (MQ index) */ CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53), - /* * Register / Deregister the notification block for MQ subvnics * in: - * (u64)a0=paddr to notify (set paddr=0 to unset) - * (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) - * (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr) + * (uint64_t)a0=paddr to notify (set paddr=0 to unset) + * (uint32_t)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify) + * (uint16_t)a1 & 0x0000ffff00000000=intr num (-1 for no intr) * out: - * (u32)a1 = effective size + * (uint32_t)a1 = effective size */ CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54), @@ -418,89 +423,239 @@ enum vnic_devcmd_cmd { CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55), /* Update the provisioning info of the given VIF - * (u64)a0=paddr of vnic_devcmd_provinfo - * (u32)a1=sizeof provision info */ + * (uint64_t)a0=paddr of vnic_devcmd_provinfo + * (uint32_t)a1=sizeof provision info + */ CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56), /* * Initialization for the devcmd2 interface. - * in: (u64) a0=host result buffer physical address - * in: (u16) a1=number of entries in result buffer + * in: (uint64_t) a0=host result buffer physical address + * in: (uint16_t) a1=number of entries in result buffer */ CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57), /* * Add a filter. - * in: (u64) a0= filter address - * (u32) a1= size of filter - * out: (u32) a0=filter identifier + * in: (uint64_t) a0= filter address + * (uint32_t) a1= size of filter + * out: (uint32_t) a0=filter identifier + * + * Capability query: + * out: (uint64_t) a0= 1 if capability query supported + * (uint64_t) a1= MAX filter type supported */ CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58), /* * Delete a filter. - * in: (u32) a0=filter identifier + * in: (uint32_t) a0=filter identifier */ CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59), /* * Enable a Queue Pair in User space NIC - * in: (u32) a0=Queue Pair number - * (u32) a1= command + * in: (uint32_t) a0=Queue Pair number + * (uint32_t) a1= command */ CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60), /* * Disable a Queue Pair in User space NIC - * in: (u32) a0=Queue Pair number - * (u32) a1= command + * in: (uint32_t) a0=Queue Pair number + * (uint32_t) a1= command */ CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61), /* * Stats dump Queue Pair in User space NIC - * in: (u32) a0=Queue Pair number - * (u64) a1=host buffer addr for status dump - * (u32) a2=length of the buffer + * in: (uint32_t) a0=Queue Pair number + * (uint64_t) a1=host buffer addr for status dump + * (uint32_t) a2=length of the buffer */ CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62), /* * Clear stats for Queue Pair in User space NIC - * in: (u32) a0=Queue Pair number + * in: (uint32_t) a0=Queue Pair number */ CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63), /* - * Enable/Disable overlay offloads on the given vnic - * in: (u8) a0 = OVERLAY_FEATURE_NVGRE : NVGRE + * UEFI BOOT API: (uint64_t)a0= UEFI FLS_CMD_xxx + * (ui64)a1= paddr for the info buffer + */ + CMD_FC_REQ = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 64), + + /* + * Return the iSCSI config details required by the EFI Option ROM + * in: (uint32_t) a0=0 Get Boot Info for PXE eNIC as per + * pxe_boot_config_t + * a0=1 Get Boot info for iSCSI enic as per + * iscsi_boot_efi_cfg_t + * in: (uint64_t) a1=Host address where iSCSI config info is returned + */ + CMD_VNIC_BOOT_CONFIG_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 65), + + /* + * Create a Queue Pair (RoCE) + * in: (uint32_t) a0 = Queue Pair number + * (uint32_t) a1 = Remote QP + * (uint32_t) a2 = RDMA-RQ + * (uint16_t) a3 = RQ Res Group + * (uint16_t) a4 = SQ Res Group + * (uint32_t) a5 = Protection Domain + * (uint64_t) a6 = Remote MAC + * (uint32_t) a7 = start PSN + * (uint16_t) a8 = MSS + * (uint32_t) a9 = protocol version + */ + CMD_RDMA_QP_CREATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 66), + + /* + * Delete a Queue Pair (RoCE) + * in: (uint32_t) a0 = Queue Pair number + */ + CMD_RDMA_QP_DELETE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 67), + + /* + * Retrieve a Queue Pair's status information (RoCE) + * in: (uint32_t) a0 = Queue Pair number + * (uint64_t) a1 = host buffer addr for QP status struct + * (uint32_t) a2 = length of the buffer + */ + CMD_RDMA_QP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 68), + + /* + * Use this devcmd for agreeing on the highest common version supported + * by both driver and fw for by features who need such a facility. + * in: (uint64_t) a0 = feature (driver requests for the supported + * versions on this feature) + * out: (uint64_t) a0 = bitmap of all supported versions for that + * feature + */ + CMD_GET_SUPP_FEATURE_VER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 69), + + /* + * Initialize the RDMA notification work queue + * in: (uint64_t) a0 = host buffer address + * in: (uint16_t) a1 = number of entries in buffer + * in: (uint16_t) a2 = resource group number + * in: (uint16_t) a3 = CQ number to post completion + */ + CMD_RDMA_INIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 70), + + /* + * De-init the RDMA notification work queue + * in: (uint64_t) a0=resource group number + */ + CMD_RDMA_DEINIT_INFO_BUF = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 71), + + /* + * Control (Enable/Disable) overlay offloads on the given vnic + * in: (uint8_t) a0 = OVERLAY_FEATURE_NVGRE : NVGRE * a0 = OVERLAY_FEATURE_VXLAN : VxLAN - * in: (u8) a1 = OVERLAY_OFFLOAD_ENABLE : Enable - * a1 = OVERLAY_OFFLOAD_DISABLE : Disable + * a0 = OVERLAY_FEATURE_GENEVE : Geneve + * in: (uint8_t) a1 = OVERLAY_OFFLOAD_ENABLE : Enable or + * a1 = OVERLAY_OFFLOAD_DISABLE : Disable or + * a1 = OVERLAY_OFFLOAD_ENABLE_V2 : Enable with version 2 */ - CMD_OVERLAY_OFFLOAD_ENABLE_DISABLE = - _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72), + CMD_OVERLAY_OFFLOAD_CTRL = + _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 72), /* * Configuration of overlay offloads feature on a given vNIC - * in: (u8) a0 = DEVCMD_OVERLAY_NVGRE : NVGRE - * a0 = DEVCMD_OVERLAY_VXLAN : VxLAN - * in: (u8) a1 = VXLAN_PORT_UPDATE : VxLAN - * in: (u16) a2 = unsigned short int port information + * in: (uint8_t) a0 = OVERLAY_CFG_VXLAN_PORT_UPDATE : VxLAN + * OVERLAY_CFG_GENEVE_PORT_UPDATE : Geneve + * in: (uint16_t) a1 = unsigned short int port information */ CMD_OVERLAY_OFFLOAD_CFG = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 73), + + /* + * Return the configured name for the device + * in: (uint64_t) a0=Host address where the name is copied + * (uint32_t) a1=Size of the buffer + */ + CMD_GET_CONFIG_NAME = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 74), + + /* + * Enable group interrupt for the VF + * in: (uint32_t) a0 = GRPINTR_ENABLE : enable + * a0 = GRPINTR_DISABLE : disable + * a0 = GRPINTR_UPD_VECT: update group vector addr + * in: (uint32_t) a1 = interrupt group count + * in: (uint64_t) a2 = Start of host buffer address for DMAing group + * vector bitmap + * in: (uint64_t) a3 = Stride between group vectors + */ + CMD_CONFIG_GRPINTR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 75), + + /* + * Set cq arrary base and size in a list of consective wqs and + * rqs for a device + * in: (uint16_t) a0 = the wq relative index in the device. + * -1 indicates skipping wq configuration + * in: (uint16_t) a1 = the wcq relative index in the device + * in: (uint16_t) a2 = the rq relative index in the device + * -1 indicates skipping rq configuration + * in: (uint16_t) a3 = the rcq relative index in the device + */ + CMD_CONFIG_CQ_ARRAY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 76), + + /* + * Add an advanced filter. + * in: (uint64_t) a0= filter address + * (uint32_t) a1= size of filter + * out: (uint32_t) a0=filter identifier + * + * Capability query: + * in: (uint64_t) a1= supported filter capability exchange modes + * out: (uint64_t) a0= 1 if capability query supported + * if (uint64_t) a1 = 0: a1 = MAX filter type supported + * if (uint64_t) a1 & FILTER_CAP_MODE_V1_FLAG: + * a1 = bitmask of supported filters + * a2 = FILTER_CAP_MODE_V1 + * a3 = bitmask of supported actions + */ + CMD_ADD_ADV_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 77), + + /* + * Perform a Flow Manager Operation (see flowman_api.h) + * in: (uint32_t) a0 = sub-command + * (uint64_t) a1..15 = (sub-command specific) + * + * All arguments that have not been assigned a meaning should be + * initialized to 0 to allow for better driver forward compatibility. + */ + CMD_FLOW_MANAGER_OP = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 88), }; +/* Modes for exchanging advanced filter capabilities. The modes supported by + * the driver are passed in the CMD_ADD_ADV_FILTER capability command and the + * mode selected is returned. + * V0: the maximum filter type supported is returned + * V1: bitmasks of supported filters and actions are returned + */ +enum filter_cap_mode { + FILTER_CAP_MODE_V0 = 0, /* Must always be 0 for legacy drivers */ + FILTER_CAP_MODE_V1 = 1, +}; +#define FILTER_CAP_MODE_V1_FLAG (1 << FILTER_CAP_MODE_V1) + /* CMD_ENABLE2 flags */ #define CMD_ENABLE2_STANDBY 0x0 #define CMD_ENABLE2_ACTIVE 0x1 /* flags for CMD_OPEN */ #define CMD_OPENF_OPROM 0x1 /* open coming from option rom */ +#define CMD_OPENF_IG_DESCCACHE 0x2 /* Do not flush IG DESC cache */ /* flags for CMD_INIT */ #define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */ +/* flags for CMD_NIC_CFG */ +#define CMD_NIC_CFG_CAPF_UDP_WEAK (1ULL << 0) /* Bodega-style UDP RSS */ + /* flags for CMD_PACKET_FILTER */ #define CMD_PFILTER_DIRECTED 0x01 #define CMD_PFILTER_MULTICAST 0x02 @@ -521,6 +676,9 @@ enum vnic_devcmd_status { STAT_NONE = 0, STAT_BUSY = 1 << 0, /* cmd in progress */ STAT_ERROR = 1 << 1, /* last cmd caused error (code in a0) */ + STAT_FAILOVER = 1 << 2, /* always set on vnics in pci standby state + * if seen a failover to the standby happened + */ }; enum vnic_devcmd_error { @@ -551,29 +709,31 @@ struct vnic_devcmd_fw_info { char fw_build[32]; char hw_version[32]; char hw_serial_number[32]; - u16 asic_type; - u16 asic_rev; + uint16_t asic_type; + uint16_t asic_rev; }; enum fwinfo_asic_type { FWINFO_ASIC_TYPE_UNKNOWN, FWINFO_ASIC_TYPE_PALO, FWINFO_ASIC_TYPE_SERENO, + FWINFO_ASIC_TYPE_CRUZ, }; - struct vnic_devcmd_notify { - u32 csum; /* checksum over following words */ - - u32 link_state; /* link up == 1 */ - u32 port_speed; /* effective port speed (rate limit) */ - u32 mtu; /* MTU */ - u32 msglvl; /* requested driver msg lvl */ - u32 uif; /* uplink interface */ - u32 status; /* status bits (see VNIC_STF_*) */ - u32 error; /* error code (see ERR_*) for first ERR */ - u32 link_down_cnt; /* running count of link down transitions */ - u32 perbi_rebuild_cnt; /* running count of perbi rebuilds */ + uint32_t csum; /* checksum over following words */ + + uint32_t link_state; /* link up == 1 */ + uint32_t port_speed; /* effective port speed (rate limit) */ + uint32_t mtu; /* MTU */ + uint32_t msglvl; /* requested driver msg lvl */ + uint32_t uif; /* uplink interface */ + uint32_t status; /* status bits (see VNIC_STF_*) */ + uint32_t error; /* error code (see ERR_*) for 1st ERR */ + uint32_t link_down_cnt; /* running count of link down + * transitions + */ + uint32_t perbi_rebuild_cnt; /* running count of perbi rebuilds */ }; #define VNIC_STF_FATAL_ERR 0x0001 /* fatal fw error */ #define VNIC_STF_STD_PAUSE 0x0002 /* standard link-level pause on */ @@ -585,9 +745,9 @@ struct vnic_devcmd_notify { 0) struct vnic_devcmd_provinfo { - u8 oui[3]; - u8 type; - u8 data[0]; + uint8_t oui[3]; + uint8_t type; + uint8_t data[0]; }; /* @@ -596,31 +756,22 @@ struct vnic_devcmd_provinfo { */ #define FILTER_FIELD_VALID(fld) (1 << (fld - 1)) -#define FILTER_FIELDS_USNIC (FILTER_FIELD_VALID(1) | \ - FILTER_FIELD_VALID(2) | \ - FILTER_FIELD_VALID(3) | \ - FILTER_FIELD_VALID(4)) - -#define FILTER_FIELDS_IPV4_5TUPLE (FILTER_FIELD_VALID(1) | \ - FILTER_FIELD_VALID(2) | \ - FILTER_FIELD_VALID(3) | \ - FILTER_FIELD_VALID(4) | \ - FILTER_FIELD_VALID(5)) - -#define FILTER_FIELDS_MAC_VLAN (FILTER_FIELD_VALID(1) | \ - FILTER_FIELD_VALID(2)) - #define FILTER_FIELD_USNIC_VLAN FILTER_FIELD_VALID(1) #define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2) #define FILTER_FIELD_USNIC_PROTO FILTER_FIELD_VALID(3) #define FILTER_FIELD_USNIC_ID FILTER_FIELD_VALID(4) +#define FILTER_FIELDS_USNIC (FILTER_FIELD_USNIC_VLAN | \ + FILTER_FIELD_USNIC_ETHTYPE | \ + FILTER_FIELD_USNIC_PROTO | \ + FILTER_FIELD_USNIC_ID) + struct filter_usnic_id { - u32 flags; - u16 vlan; - u16 ethtype; - u8 proto_version; - u32 usnic_id; + uint32_t flags; + uint16_t vlan; + uint16_t ethtype; + uint8_t proto_version; + uint32_t usnic_id; } __attribute__((packed)); #define FILTER_FIELD_5TUP_PROTO FILTER_FIELD_VALID(1) @@ -629,57 +780,194 @@ struct filter_usnic_id { #define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4) #define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5) +#define FILTER_FIELDS_IPV4_5TUPLE (FILTER_FIELD_5TUP_PROTO | \ + FILTER_FIELD_5TUP_SRC_AD | \ + FILTER_FIELD_5TUP_DST_AD | \ + FILTER_FIELD_5TUP_SRC_PT | \ + FILTER_FIELD_5TUP_DST_PT) + /* Enums for the protocol field. */ enum protocol_e { PROTO_UDP = 0, PROTO_TCP = 1, + PROTO_IPV4 = 2, + PROTO_IPV6 = 3 }; struct filter_ipv4_5tuple { - u32 flags; - u32 protocol; - u32 src_addr; - u32 dst_addr; - u16 src_port; - u16 dst_port; + uint32_t flags; + uint32_t protocol; + uint32_t src_addr; + uint32_t dst_addr; + uint16_t src_port; + uint16_t dst_port; } __attribute__((packed)); #define FILTER_FIELD_VMQ_VLAN FILTER_FIELD_VALID(1) #define FILTER_FIELD_VMQ_MAC FILTER_FIELD_VALID(2) +#define FILTER_FIELDS_MAC_VLAN (FILTER_FIELD_VMQ_VLAN | \ + FILTER_FIELD_VMQ_MAC) + +#define FILTER_FIELDS_NVGRE FILTER_FIELD_VMQ_MAC + struct filter_mac_vlan { - u32 flags; - u16 vlan; - u8 mac_addr[6]; + uint32_t flags; + uint16_t vlan; + uint8_t mac_addr[6]; +} __attribute__((packed)); + +#define FILTER_FIELD_VLAN_IP_3TUP_VLAN FILTER_FIELD_VALID(1) +#define FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO FILTER_FIELD_VALID(2) +#define FILTER_FIELD_VLAN_IP_3TUP_DST_AD FILTER_FIELD_VALID(3) +#define FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO FILTER_FIELD_VALID(4) +#define FILTER_FIELD_VLAN_IP_3TUP_DST_PT FILTER_FIELD_VALID(5) + +#define FILTER_FIELDS_VLAN_IP_3TUP (FILTER_FIELD_VLAN_IP_3TUP_VLAN | \ + FILTER_FIELD_VLAN_IP_3TUP_L3_PROTO | \ + FILTER_FIELD_VLAN_IP_3TUP_DST_AD | \ + FILTER_FIELD_VLAN_IP_3TUP_L4_PROTO | \ + FILTER_FIELD_VLAN_IP_3TUP_DST_PT) + +struct filter_vlan_ip_3tuple { + uint32_t flags; + uint16_t vlan; + uint16_t l3_protocol; + union { + uint32_t dst_addr_v4; + uint8_t dst_addr_v6[16]; + } u; + uint32_t l4_protocol; + uint16_t dst_port; +} __attribute__((packed)); + +#define FILTER_GENERIC_1_BYTES 64 + +enum filter_generic_1_layer { + FILTER_GENERIC_1_L2, + FILTER_GENERIC_1_L3, + FILTER_GENERIC_1_L4, + FILTER_GENERIC_1_L5, + FILTER_GENERIC_1_NUM_LAYERS +}; + +#define FILTER_GENERIC_1_IPV4 (1 << 0) +#define FILTER_GENERIC_1_IPV6 (1 << 1) +#define FILTER_GENERIC_1_UDP (1 << 2) +#define FILTER_GENERIC_1_TCP (1 << 3) +#define FILTER_GENERIC_1_TCP_OR_UDP (1 << 4) +#define FILTER_GENERIC_1_IP4SUM_OK (1 << 5) +#define FILTER_GENERIC_1_L4SUM_OK (1 << 6) +#define FILTER_GENERIC_1_IPFRAG (1 << 7) + +#define FILTER_GENERIC_1_KEY_LEN 64 + +/* + * Version 1 of generic filter specification + * position is only 16 bits, reserving positions > 64k to be used by firmware + */ +struct filter_generic_1 { + uint16_t position; /* lower position comes first */ + uint32_t mask_flags; + uint32_t val_flags; + uint16_t mask_vlan; + uint16_t val_vlan; + struct { + uint8_t mask[FILTER_GENERIC_1_KEY_LEN]; /* 0 bit means + * " don't care" + */ + uint8_t val[FILTER_GENERIC_1_KEY_LEN]; + } __attribute__((packed)) layer[FILTER_GENERIC_1_NUM_LAYERS]; } __attribute__((packed)); /* Specifies the filter_action type. */ enum { FILTER_ACTION_RQ_STEERING = 0, + FILTER_ACTION_V2 = 1, FILTER_ACTION_MAX }; struct filter_action { - u32 type; + uint32_t type; union { - u32 rq_idx; + uint32_t rq_idx; } u; } __attribute__((packed)); +#define FILTER_ACTION_RQ_STEERING_FLAG (1 << 0) +#define FILTER_ACTION_FILTER_ID_FLAG (1 << 1) +#define FILTER_ACTION_DROP_FLAG (1 << 2) +#define FILTER_ACTION_COUNTER_FLAG (1 << 3) +#define FILTER_ACTION_V2_ALL (FILTER_ACTION_RQ_STEERING_FLAG \ + | FILTER_ACTION_DROP_FLAG \ + | FILTER_ACTION_FILTER_ID_FLAG) + +/* Version 2 of filter action must be a strict extension of struct + * filter_action where the first fields exactly match in size and meaning. + */ +struct filter_action_v2 { + uint32_t type; + uint32_t rq_idx; + uint32_t flags; /* use FILTER_ACTION_XXX_FLAG defines */ + uint16_t filter_id; + uint8_t reserved[32]; /* for future expansion */ +} __attribute__((packed)); + /* Specifies the filter type. */ enum filter_type { FILTER_USNIC_ID = 0, FILTER_IPV4_5TUPLE = 1, FILTER_MAC_VLAN = 2, + FILTER_VLAN_IP_3TUPLE = 3, + FILTER_NVGRE_VMQ = 4, + FILTER_USNIC_IP = 5, + FILTER_DPDK_1 = 6, + FILTER_FLOWMAN = 7, FILTER_MAX }; +#define FILTER_USNIC_ID_FLAG (1 << FILTER_USNIC_ID) +#define FILTER_IPV4_5TUPLE_FLAG (1 << FILTER_IPV4_5TUPLE) +#define FILTER_MAC_VLAN_FLAG (1 << FILTER_MAC_VLAN) +#define FILTER_VLAN_IP_3TUPLE_FLAG (1 << FILTER_VLAN_IP_3TUPLE) +#define FILTER_NVGRE_VMQ_FLAG (1 << FILTER_NVGRE_VMQ) +#define FILTER_USNIC_IP_FLAG (1 << FILTER_USNIC_IP) +#define FILTER_DPDK_1_FLAG (1 << FILTER_DPDK_1) +#define FILTER_V1_ALL (FILTER_USNIC_ID_FLAG | \ + FILTER_IPV4_5TUPLE_FLAG | \ + FILTER_MAC_VLAN_FLAG | \ + FILTER_VLAN_IP_3TUPLE_FLAG | \ + FILTER_NVGRE_VMQ_FLAG | \ + FILTER_USNIC_IP_FLAG | \ + FILTER_DPDK_1_FLAG) + struct filter { - u32 type; + uint32_t type; + union { + struct filter_usnic_id usnic; + struct filter_ipv4_5tuple ipv4; + struct filter_mac_vlan mac_vlan; + struct filter_vlan_ip_3tuple vlan_3tuple; + } u; +} __attribute__((packed)); + +/* + * This is a strict superset of "struct filter" and exists only + * because many drivers use "sizeof (struct filter)" in deciding TLV size. + * This new, larger struct filter would cause any code that uses that method + * to not work with older firmware, so we add filter_v2 to hold the + * new filter types. Drivers should use vnic_filter_size() to determine + * the TLV size instead of sizeof (struct fiter_v2) to guard against future + * growth. + */ +struct filter_v2 { + uint32_t type; union { struct filter_usnic_id usnic; struct filter_ipv4_5tuple ipv4; struct filter_mac_vlan mac_vlan; + struct filter_vlan_ip_3tuple vlan_3tuple; + struct filter_generic_1 generic_1; } u; } __attribute__((packed)); @@ -688,19 +976,84 @@ enum { CLSF_TLV_ACTION = 1, }; -#define FILTER_MAX_BUF_SIZE 100 /* Maximum size of buffer to CMD_ADD_FILTER */ - struct filter_tlv { uint32_t type; uint32_t length; uint32_t val[0]; }; +/* Data for CMD_ADD_FILTER is 2 TLV and filter + action structs */ +#define FILTER_MAX_BUF_SIZE 100 +#define FILTER_V2_MAX_BUF_SIZE (sizeof(struct filter_v2) + \ + sizeof(struct filter_action_v2) + \ + (2 * sizeof(struct filter_tlv))) + +/* + * Compute actual structure size given filter type. To be "future-proof," + * drivers should use this instead of "sizeof (struct filter_v2)" when + * computing length for TLV. + */ +static inline uint32_t +vnic_filter_size(struct filter_v2 *fp) +{ + uint32_t size; + + switch (fp->type) { + case FILTER_USNIC_ID: + size = sizeof(fp->u.usnic); + break; + case FILTER_IPV4_5TUPLE: + size = sizeof(fp->u.ipv4); + break; + case FILTER_MAC_VLAN: + case FILTER_NVGRE_VMQ: + size = sizeof(fp->u.mac_vlan); + break; + case FILTER_VLAN_IP_3TUPLE: + size = sizeof(fp->u.vlan_3tuple); + break; + case FILTER_USNIC_IP: + case FILTER_DPDK_1: + size = sizeof(fp->u.generic_1); + break; + default: + size = sizeof(fp->u); + break; + } + size += sizeof(fp->type); + return size; +} + + enum { CLSF_ADD = 0, CLSF_DEL = 1, }; +/* + * Get the action structure size given action type. To be "future-proof," + * drivers should use this instead of "sizeof (struct filter_action_v2)" + * when computing length for TLV. + */ +static inline uint32_t +vnic_action_size(struct filter_action_v2 *fap) +{ + uint32_t size; + + switch (fap->type) { + case FILTER_ACTION_RQ_STEERING: + size = sizeof(struct filter_action); + break; + case FILTER_ACTION_V2: + size = sizeof(struct filter_action_v2); + break; + default: + size = sizeof(struct filter_action); + break; + } + return size; +} + /* * Writing cmd register causes STAT_BUSY to get set in status register. * When cmd completes, STAT_BUSY will be cleared. @@ -717,9 +1070,9 @@ enum { /* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */ #define VNIC_DEVCMD_NARGS 15 struct vnic_devcmd { - u32 status; /* RO */ - u32 cmd; /* RW */ - u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */ + uint32_t status; /* RO */ + uint32_t cmd; /* RW */ + uint64_t args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian)*/ }; /* @@ -736,19 +1089,19 @@ struct vnic_devcmd { #define VNIC_DEVCMD2_NARGS VNIC_DEVCMD_NARGS struct vnic_devcmd2 { - u16 pad; - u16 flags; - u32 cmd; /* same command #defines as original */ - u64 args[VNIC_DEVCMD2_NARGS]; + uint16_t pad; + uint16_t flags; + uint32_t cmd; /* same command #defines as original */ + uint64_t args[VNIC_DEVCMD2_NARGS]; }; #define VNIC_DEVCMD2_NRESULTS VNIC_DEVCMD_NARGS struct devcmd2_result { - u64 results[VNIC_DEVCMD2_NRESULTS]; - u32 pad; - u16 completed_index; /* into copy WQ */ - u8 error; /* same error codes as original */ - u8 color; /* 0 or 1 as with completion queues */ + uint64_t results[VNIC_DEVCMD2_NRESULTS]; + uint32_t pad; + uint16_t completed_index; /* into copy WQ */ + uint8_t error; /* same error codes as original */ + uint8_t color; /* 0 or 1 as with completion queues */ }; #define DEVCMD2_RING_SIZE 32 @@ -764,11 +1117,50 @@ struct devcmd2_result { typedef enum { OVERLAY_FEATURE_NVGRE = 1, OVERLAY_FEATURE_VXLAN, + OVERLAY_FEATURE_GENEVE, OVERLAY_FEATURE_MAX, } overlay_feature_t; -#define OVERLAY_OFFLOAD_ENABLE 0 -#define OVERLAY_OFFLOAD_DISABLE 1 +#define OVERLAY_OFFLOAD_ENABLE 0 +#define OVERLAY_OFFLOAD_DISABLE 1 +#define OVERLAY_OFFLOAD_ENABLE_V2 2 #define OVERLAY_CFG_VXLAN_PORT_UPDATE 0 +#define OVERLAY_CFG_GENEVE_PORT_UPDATE 1 + +/* + * Use this enum to get the supported versions for each of these features + * If you need to use the devcmd_get_supported_feature_version(), add + * the new feature into this enum and install function handler in devcmd.c + */ +typedef enum { + VIC_FEATURE_VXLAN, + VIC_FEATURE_RDMA, + VIC_FEATURE_GENEVE, + VIC_FEATURE_MAX, +} vic_feature_t; + +/* + * These flags are used in args[1] of devcmd CMD_GET_SUPP_FEATURE_VER + * to indicate the host driver about the VxLAN and Multi WQ features + * supported + */ +#define FEATURE_VXLAN_IPV6_INNER (1 << 0) +#define FEATURE_VXLAN_IPV6_OUTER (1 << 1) +#define FEATURE_VXLAN_MULTI_WQ (1 << 2) + +#define FEATURE_VXLAN_IPV6 (FEATURE_VXLAN_IPV6_INNER | \ + FEATURE_VXLAN_IPV6_OUTER) +/* Support Geneve option bytes */ +#define FEATURE_GENEVE_OPTIONS (1 << 0) + +/* + * CMD_CONFIG_GRPINTR subcommands + */ +typedef enum { + GRPINTR_ENABLE = 1, + GRPINTR_DISABLE, + GRPINTR_UPD_VECT, +} grpintr_subcmd_t; + #endif /* _VNIC_DEVCMD_H_ */