X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fqede%2Fbase%2Fecore_vfpf_if.h;h=f92dc428afdd61aa27ab4905151b0e18ba4be36e;hb=f44ca48c81e823edda67189220a4bf7659cc22c1;hp=661844216bce8d30887fd9f22926b5c930cf1c0c;hpb=4727343d27f4dfd5145b6785540ed9f0034cc7ab;p=dpdk.git diff --git a/drivers/net/qede/base/ecore_vfpf_if.h b/drivers/net/qede/base/ecore_vfpf_if.h index 661844216b..f92dc428af 100644 --- a/drivers/net/qede/base/ecore_vfpf_if.h +++ b/drivers/net/qede/base/ecore_vfpf_if.h @@ -1,9 +1,7 @@ -/* - * Copyright (c) 2016 QLogic Corporation. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2016 - 2018 Cavium Inc. * All rights reserved. - * www.qlogic.com - * - * See LICENSE.qede_pmd for copyright and licensing details. + * www.cavium.com */ #ifndef __ECORE_VF_PF_IF_H__ @@ -19,13 +17,14 @@ * **/ struct vf_pf_resc_request { - u8 num_rxqs; - u8 num_txqs; - u8 num_sbs; - u8 num_mac_filters; - u8 num_vlan_filters; - u8 num_mc_filters; /* No limit so superfluous */ - u16 padding; + u8 num_rxqs; + u8 num_txqs; + u8 num_sbs; + u8 num_mac_filters; + u8 num_vlan_filters; + u8 num_mc_filters; /* No limit so superfluous */ + u8 num_cids; + u8 padding; }; struct hw_sb_info { @@ -92,6 +91,20 @@ struct vfpf_acquire_tlv { /* VF pre-FP hsi version */ #define VFPF_ACQUIRE_CAP_PRE_FP_HSI (1 << 0) #define VFPF_ACQUIRE_CAP_100G (1 << 1) /* VF can support 100g */ + + /* A requirement for supporting multi-Tx queues on a single queue-zone, + * VF would pass qids as additional information whenever passing queue + * references. + * TODO - due to the CID limitations in Bar0, VFs currently don't pass + * this, and use the legacy CID scheme. + */ +#define VFPF_ACQUIRE_CAP_QUEUE_QIDS (1 << 2) + + /* The VF is using the physical bar. While this is mostly internal + * to the VF, might affect the number of CIDs supported assuming + * QUEUE_QIDS is set. + */ +#define VFPF_ACQUIRE_CAP_PHYSICAL_BAR (1 << 3) u64 capabilities; u8 fw_major; u8 fw_minor; @@ -170,6 +183,9 @@ struct pfvf_acquire_resp_tlv { #endif #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE (1 << 2) + /* PF expects queues to be received with additional qids */ +#define PFVF_ACQUIRE_CAP_QUEUE_QIDS (1 << 3) + u16 db_size; u8 indices_per_sb; u8 os_type; @@ -178,7 +194,8 @@ struct pfvf_acquire_resp_tlv { u16 chip_rev; u8 dev_type; - u8 padding; + /* Doorbell bar size configured in HW: log(size) or 0 */ + u8 bar_size; struct pfvf_stats_info stats_info; @@ -210,7 +227,8 @@ struct pfvf_acquire_resp_tlv { u8 num_mac_filters; u8 num_vlan_filters; u8 num_mc_filters; - u8 padding[2]; + u8 num_cids; + u8 padding; } resc; u32 bulletin_size; @@ -223,6 +241,23 @@ struct pfvf_start_queue_resp_tlv { u8 padding[4]; }; +/* Extended queue information - additional index for reference inside qzone. + * If commmunicated between VF/PF, each TLV relating to queues should be + * extended by one such [or have a future base TLV that already contains info]. + */ +struct vfpf_qid_tlv { + struct channel_tlv tl; + u8 qid; + u8 padding[3]; +}; + +/* Soft FLR req */ +struct vfpf_soft_flr_tlv { + struct vfpf_first_tlv first_tlv; + u32 reserved1; + u32 reserved2; +}; + /* Setup Queue */ struct vfpf_start_rxq_tlv { struct vfpf_first_tlv first_tlv; @@ -265,7 +300,15 @@ struct vfpf_stop_rxqs_tlv { struct vfpf_first_tlv first_tlv; u16 rx_qid; + + /* While the API supports multiple Rx-queues on a single TLV + * message, in practice older VFs always used it as one [ecore]. + * And there are PFs [starting with the CHANNEL_TLV_QID] which + * would start assuming this is always a '1'. So in practice this + * field should be considered deprecated and *Always* set to '1'. + */ u8 num_rxqs; + u8 cqe_completion; u8 padding[4]; }; @@ -275,6 +318,13 @@ struct vfpf_stop_txqs_tlv { struct vfpf_first_tlv first_tlv; u16 tx_qid; + + /* While the API supports multiple Tx-queues on a single TLV + * message, in practice older VFs always used it as one [ecore]. + * And there are PFs [starting with the CHANNEL_TLV_QID] which + * would start assuming this is always a '1'. So in practice this + * field should be considered deprecated and *Always* set to '1'. + */ u8 num_txqs; u8 padding[5]; }; @@ -351,7 +401,13 @@ struct vfpf_vport_update_mcast_bin_tlv { struct channel_tlv tl; u8 padding[4]; - u64 bins[8]; + /* This was a mistake; There are only 256 approx bins, + * and in HSI they're divided into 32-bit values. + * As old VFs used to set-bit to the values on its side, + * the upper half of the array is never expected to contain any data. + */ + u64 bins[4]; + u64 obsolete_bins[4]; }; struct vfpf_vport_update_accept_param_tlv { @@ -379,6 +435,8 @@ struct vfpf_vport_update_sge_tpa_tlv { #define VFPF_TPA_PKT_SPLIT_FLAG (1 << 2) #define VFPF_TPA_HDR_DATA_SPLIT_FLAG (1 << 3) #define VFPF_TPA_GRO_CONSIST_FLAG (1 << 4) + #define VFPF_TPA_TUNN_IPV4_EN_FLAG (1 << 5) + #define VFPF_TPA_TUNN_IPV6_EN_FLAG (1 << 6) u8 update_sge_tpa_flags; #define VFPF_UPDATE_SGE_DEPRECATED_FLAG (1 << 0) @@ -465,6 +523,31 @@ struct vfpf_update_coalesce { u8 padding[2]; }; +struct vfpf_read_coal_req_tlv { + struct vfpf_first_tlv first_tlv; + u16 qid; + u8 is_rx; + u8 padding[5]; +}; + +struct pfvf_read_coal_resp_tlv { + struct pfvf_tlv hdr; + u16 coal; + u8 padding[6]; +}; + +struct vfpf_bulletin_update_mac_tlv { + struct vfpf_first_tlv first_tlv; + u8 mac[ETH_ALEN]; + u8 padding[2]; +}; + +struct vfpf_update_mtu_tlv { + struct vfpf_first_tlv first_tlv; + u16 mtu; + u8 padding[6]; +}; + union vfpf_tlvs { struct vfpf_first_tlv first_tlv; struct vfpf_acquire_tlv acquire; @@ -478,6 +561,10 @@ union vfpf_tlvs { struct vfpf_ucast_filter_tlv ucast_filter; struct vfpf_update_tunn_param_tlv tunn_param_update; struct vfpf_update_coalesce update_coalesce; + struct vfpf_read_coal_req_tlv read_coal_req; + struct vfpf_bulletin_update_mac_tlv bulletin_update_mac; + struct vfpf_update_mtu_tlv update_mtu; + struct vfpf_soft_flr_tlv soft_flr; struct tlv_buffer_size tlv_buf_size; }; @@ -487,6 +574,7 @@ union pfvf_tlvs { struct tlv_buffer_size tlv_buf_size; struct pfvf_start_queue_resp_tlv queue_start; struct pfvf_update_tunn_param_tlv tunn_param_resp; + struct pfvf_read_coal_resp_tlv read_coal_resp; }; /* This is a structure which is allocated in the VF, which the PF may update @@ -605,6 +693,43 @@ enum { CHANNEL_TLV_VPORT_UPDATE_SGE_TPA, CHANNEL_TLV_UPDATE_TUNN_PARAM, CHANNEL_TLV_COALESCE_UPDATE, + CHANNEL_TLV_QID, + CHANNEL_TLV_COALESCE_READ, + CHANNEL_TLV_BULLETIN_UPDATE_MAC, + CHANNEL_TLV_UPDATE_MTU, + CHANNEL_TLV_RDMA_ACQUIRE, + CHANNEL_TLV_RDMA_START, + CHANNEL_TLV_RDMA_STOP, + CHANNEL_TLV_RDMA_ADD_USER, + CHANNEL_TLV_RDMA_REMOVE_USER, + CHANNEL_TLV_RDMA_QUERY_COUNTERS, + CHANNEL_TLV_RDMA_ALLOC_TID, + CHANNEL_TLV_RDMA_REGISTER_TID, + CHANNEL_TLV_RDMA_DEREGISTER_TID, + CHANNEL_TLV_RDMA_FREE_TID, + CHANNEL_TLV_RDMA_CREATE_CQ, + CHANNEL_TLV_RDMA_RESIZE_CQ, + CHANNEL_TLV_RDMA_DESTROY_CQ, + CHANNEL_TLV_RDMA_CREATE_QP, + CHANNEL_TLV_RDMA_MODIFY_QP, + CHANNEL_TLV_RDMA_QUERY_QP, + CHANNEL_TLV_RDMA_DESTROY_QP, + CHANNEL_TLV_RDMA_QUERY_PORT, + CHANNEL_TLV_RDMA_QUERY_DEVICE, + CHANNEL_TLV_RDMA_IWARP_CONNECT, + CHANNEL_TLV_RDMA_IWARP_ACCEPT, + CHANNEL_TLV_RDMA_IWARP_CREATE_LISTEN, + CHANNEL_TLV_RDMA_IWARP_DESTROY_LISTEN, + CHANNEL_TLV_RDMA_IWARP_PAUSE_LISTEN, + CHANNEL_TLV_RDMA_IWARP_REJECT, + CHANNEL_TLV_RDMA_IWARP_SEND_RTR, + CHANNEL_TLV_ESTABLISH_LL2_CONN, + CHANNEL_TLV_TERMINATE_LL2_CONN, + CHANNEL_TLV_ASYNC_EVENT, + CHANNEL_TLV_RDMA_CREATE_SRQ, + CHANNEL_TLV_RDMA_MODIFY_SRQ, + CHANNEL_TLV_RDMA_DESTROY_SRQ, + CHANNEL_TLV_SOFT_FLR, CHANNEL_TLV_MAX, /* Required for iterating over vport-update tlvs. @@ -614,6 +739,6 @@ enum { /*!!!!! Make sure to update STRINGS structure accordingly !!!!!*/ }; -extern const char *ecore_channel_tlvs_string[]; +extern const char *qede_ecore_channel_tlvs_string[]; #endif /* __ECORE_VF_PF_IF_H__ */