From: Harish Patil Date: Fri, 11 Dec 2015 06:36:34 +0000 (-0800) Subject: bnx2x: update VF to support newer PF drivers X-Git-Tag: spdx-start~7778 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=a5724ff9c57239193517d649fac303ed4c67b821;p=dpdk.git bnx2x: update VF to support newer PF drivers SR-IOV is supported using bnx2x poll mode driver running as VF driver and native linux driver running as PF (in host/hypervisor). There is no issue while running with the PF driver which is at the base version as that of PMD. However, there is a compatibility issue between newer out-of-box PF drivers with older VF driver. So the newer VFs would also need to send BNX2X_VF_TLV_PHYS_PORT_ID (among other TLVs) to differentiate between newer and older VFs. Signed-off-by: Harish Patil --- diff --git a/drivers/net/bnx2x/bnx2x_vfpf.c b/drivers/net/bnx2x/bnx2x_vfpf.c index 661f0a58ad..39fd59a1f2 100644 --- a/drivers/net/bnx2x/bnx2x_vfpf.c +++ b/drivers/net/bnx2x/bnx2x_vfpf.c @@ -257,8 +257,15 @@ int bnx2x_vf_get_resources(struct bnx2x_softc *sc, uint8_t tx_count, uint8_t rx_ acq->bulletin_addr = sc->pf2vf_bulletin_mapping.paddr; - BNX2X_TLV_APPEND(acq, acq->first_tlv.length, BNX2X_VF_TLV_LIST_END, - sizeof(struct channel_list_end_tlv)); + /* Request physical port identifier */ + BNX2X_TLV_APPEND(acq, acq->first_tlv.length, + BNX2X_VF_TLV_PHYS_PORT_ID, + sizeof(struct channel_tlv)); + + BNX2X_TLV_APPEND(acq, + (acq->first_tlv.length + sizeof(struct channel_tlv)), + BNX2X_VF_TLV_LIST_END, + sizeof(struct channel_list_end_tlv)); /* requesting the resources in loop */ obtain_status = bnx2x_loop_obtain_resources(sc); diff --git a/drivers/net/bnx2x/bnx2x_vfpf.h b/drivers/net/bnx2x/bnx2x_vfpf.h index 94ce9f014b..4f25321a8a 100644 --- a/drivers/net/bnx2x/bnx2x_vfpf.h +++ b/drivers/net/bnx2x/bnx2x_vfpf.h @@ -34,12 +34,24 @@ struct vf_resource_query { #define BNX2X_VF_Q_FLAG_DHC 0x0200 #define BNX2X_VF_Q_FLAG_LEADING_RSS 0x0400 +#define TLV_BUFFER_SIZE 1024 + +/* general tlv header (used for both vf->pf request and pf->vf response) */ +struct channel_tlv { + uint16_t type; + uint16_t length; +}; + struct vf_first_tlv { uint16_t type; uint16_t length; uint32_t reply_offset; }; +struct tlv_buffer_size { + uint8_t tlv_buffer[TLV_BUFFER_SIZE]; +}; + /* tlv struct for all PF replies except acquire */ struct vf_common_reply_tlv { uint16_t type; @@ -244,12 +256,14 @@ union query_tlvs { struct vf_release_tlv release; struct vf_rss_tlv update_rss; struct channel_list_end_tlv list_end; + struct tlv_buffer_size tlv_buf_size; }; union resp_tlvs { struct vf_common_reply_tlv common_reply; struct vf_acquire_resp_tlv acquire_resp; struct channel_list_end_tlv list_end; + struct tlv_buffer_size tlv_buf_size; }; /* struct allocated by VF driver, PF sends updates to VF via bulletin */ @@ -300,6 +314,7 @@ enum channel_tlvs { BNX2X_VF_TLV_PF_SET_MAC, BNX2X_VF_TLV_PF_SET_VLAN, BNX2X_VF_TLV_UPDATE_RSS, + BNX2X_VF_TLV_PHYS_PORT_ID, BNX2X_VF_TLV_MAX };