162306a36Sopenharmony_ci/* bnx2x_vfpf.h: Qlogic Everest network driver. 262306a36Sopenharmony_ci * 362306a36Sopenharmony_ci * Copyright (c) 2011-2013 Broadcom Corporation 462306a36Sopenharmony_ci * Copyright (c) 2014 QLogic Corporation 562306a36Sopenharmony_ci * All rights reserved 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Unless you and Qlogic execute a separate written software license 862306a36Sopenharmony_ci * agreement governing use of this software, this software is licensed to you 962306a36Sopenharmony_ci * under the terms of the GNU General Public License version 2 (the “GPL”), 1062306a36Sopenharmony_ci * available at http://www.gnu.org/licenses/gpl-2.0.html, with the following 1162306a36Sopenharmony_ci * added to such license: 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * As a special exception, the copyright holders of this software give you 1462306a36Sopenharmony_ci * permission to link this software with independent modules, and to copy and 1562306a36Sopenharmony_ci * distribute the resulting executable under terms of your choice, provided that 1662306a36Sopenharmony_ci * you also meet, for each linked independent module, the terms and conditions 1762306a36Sopenharmony_ci * of the license of that module. An independent module is a module which is 1862306a36Sopenharmony_ci * not derived from this software. The special exception does not apply to any 1962306a36Sopenharmony_ci * modifications of the software. 2062306a36Sopenharmony_ci * 2162306a36Sopenharmony_ci * Maintained by: Ariel Elior <ariel.elior@qlogic.com> 2262306a36Sopenharmony_ci * Written by: Ariel Elior <ariel.elior@qlogic.com> 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_ci#ifndef VF_PF_IF_H 2562306a36Sopenharmony_ci#define VF_PF_IF_H 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#ifdef CONFIG_BNX2X_SRIOV 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci/* Common definitions for all HVs */ 3062306a36Sopenharmony_cistruct vf_pf_resc_request { 3162306a36Sopenharmony_ci u8 num_rxqs; 3262306a36Sopenharmony_ci u8 num_txqs; 3362306a36Sopenharmony_ci u8 num_sbs; 3462306a36Sopenharmony_ci u8 num_mac_filters; 3562306a36Sopenharmony_ci u8 num_vlan_filters; 3662306a36Sopenharmony_ci u8 num_mc_filters; /* No limit so superfluous */ 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistruct hw_sb_info { 4062306a36Sopenharmony_ci u8 hw_sb_id; /* aka absolute igu id, used to ack the sb */ 4162306a36Sopenharmony_ci u8 sb_qid; /* used to update DHC for sb */ 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* HW VF-PF channel definitions 4562306a36Sopenharmony_ci * A.K.A VF-PF mailbox 4662306a36Sopenharmony_ci */ 4762306a36Sopenharmony_ci#define TLV_BUFFER_SIZE 1024 4862306a36Sopenharmony_ci#define PF_VF_BULLETIN_SIZE 512 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_TPA 0x0001 5162306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_TPA_IPV6 0x0002 5262306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_TPA_GRO 0x0004 5362306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_CACHE_ALIGN 0x0008 5462306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_STATS 0x0010 5562306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_OV 0x0020 5662306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_VLAN 0x0040 5762306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_COS 0x0080 5862306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_HC 0x0100 5962306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_DHC 0x0200 6062306a36Sopenharmony_ci#define VFPF_QUEUE_FLG_LEADING_RSS 0x0400 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define VFPF_QUEUE_DROP_IP_CS_ERR (1 << 0) 6362306a36Sopenharmony_ci#define VFPF_QUEUE_DROP_TCP_CS_ERR (1 << 1) 6462306a36Sopenharmony_ci#define VFPF_QUEUE_DROP_TTL0 (1 << 2) 6562306a36Sopenharmony_ci#define VFPF_QUEUE_DROP_UDP_CS_ERR (1 << 3) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_NONE 0x00000000 6862306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST 0x00000001 6962306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_MATCHED_MULTICAST 0x00000002 7062306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_ALL_UNICAST 0x00000004 7162306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_ALL_MULTICAST 0x00000008 7262306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_BROADCAST 0x00000010 7362306a36Sopenharmony_ci#define VFPF_RX_MASK_ACCEPT_ANY_VLAN 0x00000020 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#define BULLETIN_CONTENT_SIZE (sizeof(struct pf_vf_bulletin_content)) 7662306a36Sopenharmony_ci#define BULLETIN_CONTENT_LEGACY_SIZE (32) 7762306a36Sopenharmony_ci#define BULLETIN_ATTEMPTS 5 /* crc failures before throwing towel */ 7862306a36Sopenharmony_ci#define BULLETIN_CRC_SEED 0 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cienum { 8162306a36Sopenharmony_ci PFVF_STATUS_WAITING = 0, 8262306a36Sopenharmony_ci PFVF_STATUS_SUCCESS, 8362306a36Sopenharmony_ci PFVF_STATUS_FAILURE, 8462306a36Sopenharmony_ci PFVF_STATUS_NOT_SUPPORTED, 8562306a36Sopenharmony_ci PFVF_STATUS_NO_RESOURCE 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/* vf pf channel tlvs */ 8962306a36Sopenharmony_ci/* general tlv header (used for both vf->pf request and pf->vf response) */ 9062306a36Sopenharmony_cistruct channel_tlv { 9162306a36Sopenharmony_ci u16 type; 9262306a36Sopenharmony_ci u16 length; 9362306a36Sopenharmony_ci}; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci/* header of first vf->pf tlv carries the offset used to calculate response 9662306a36Sopenharmony_ci * buffer address 9762306a36Sopenharmony_ci */ 9862306a36Sopenharmony_cistruct vfpf_first_tlv { 9962306a36Sopenharmony_ci struct channel_tlv tl; 10062306a36Sopenharmony_ci u32 resp_msg_offset; 10162306a36Sopenharmony_ci}; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci/* header of pf->vf tlvs, carries the status of handling the request */ 10462306a36Sopenharmony_cistruct pfvf_tlv { 10562306a36Sopenharmony_ci struct channel_tlv tl; 10662306a36Sopenharmony_ci u8 status; 10762306a36Sopenharmony_ci u8 padding[3]; 10862306a36Sopenharmony_ci}; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* response tlv used for most tlvs */ 11162306a36Sopenharmony_cistruct pfvf_general_resp_tlv { 11262306a36Sopenharmony_ci struct pfvf_tlv hdr; 11362306a36Sopenharmony_ci}; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci/* used to terminate and pad a tlv list */ 11662306a36Sopenharmony_cistruct channel_list_end_tlv { 11762306a36Sopenharmony_ci struct channel_tlv tl; 11862306a36Sopenharmony_ci u8 padding[4]; 11962306a36Sopenharmony_ci}; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci/* Acquire */ 12262306a36Sopenharmony_cistruct vfpf_acquire_tlv { 12362306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci struct vf_pf_vfdev_info { 12662306a36Sopenharmony_ci /* the following fields are for debug purposes */ 12762306a36Sopenharmony_ci u8 vf_id; /* ME register value */ 12862306a36Sopenharmony_ci u8 vf_os; /* e.g. Linux, W2K8 */ 12962306a36Sopenharmony_ci#define VF_OS_SUBVERSION_MASK (0x1f) 13062306a36Sopenharmony_ci#define VF_OS_MASK (0xe0) 13162306a36Sopenharmony_ci#define VF_OS_SHIFT (5) 13262306a36Sopenharmony_ci#define VF_OS_UNDEFINED (0 << VF_OS_SHIFT) 13362306a36Sopenharmony_ci#define VF_OS_WINDOWS (1 << VF_OS_SHIFT) 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci u8 fp_hsi_ver; 13662306a36Sopenharmony_ci u8 caps; 13762306a36Sopenharmony_ci#define VF_CAP_SUPPORT_EXT_BULLETIN (1 << 0) 13862306a36Sopenharmony_ci#define VF_CAP_SUPPORT_VLAN_FILTER (1 << 1) 13962306a36Sopenharmony_ci } vfdev_info; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci struct vf_pf_resc_request resc_request; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci aligned_u64 bulletin_addr; 14462306a36Sopenharmony_ci}; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci/* simple operation request on queue */ 14762306a36Sopenharmony_cistruct vfpf_q_op_tlv { 14862306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 14962306a36Sopenharmony_ci u8 vf_qid; 15062306a36Sopenharmony_ci u8 padding[3]; 15162306a36Sopenharmony_ci}; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci/* receive side scaling tlv */ 15462306a36Sopenharmony_cistruct vfpf_rss_tlv { 15562306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 15662306a36Sopenharmony_ci u32 rss_flags; 15762306a36Sopenharmony_ci#define VFPF_RSS_MODE_DISABLED (1 << 0) 15862306a36Sopenharmony_ci#define VFPF_RSS_MODE_REGULAR (1 << 1) 15962306a36Sopenharmony_ci#define VFPF_RSS_SET_SRCH (1 << 2) 16062306a36Sopenharmony_ci#define VFPF_RSS_IPV4 (1 << 3) 16162306a36Sopenharmony_ci#define VFPF_RSS_IPV4_TCP (1 << 4) 16262306a36Sopenharmony_ci#define VFPF_RSS_IPV4_UDP (1 << 5) 16362306a36Sopenharmony_ci#define VFPF_RSS_IPV6 (1 << 6) 16462306a36Sopenharmony_ci#define VFPF_RSS_IPV6_TCP (1 << 7) 16562306a36Sopenharmony_ci#define VFPF_RSS_IPV6_UDP (1 << 8) 16662306a36Sopenharmony_ci u8 rss_result_mask; 16762306a36Sopenharmony_ci u8 ind_table_size; 16862306a36Sopenharmony_ci u8 rss_key_size; 16962306a36Sopenharmony_ci u8 padding; 17062306a36Sopenharmony_ci u8 ind_table[T_ETH_INDIRECTION_TABLE_SIZE]; 17162306a36Sopenharmony_ci u32 rss_key[T_ETH_RSS_KEY]; /* hash values */ 17262306a36Sopenharmony_ci}; 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci/* acquire response tlv - carries the allocated resources */ 17562306a36Sopenharmony_cistruct pfvf_acquire_resp_tlv { 17662306a36Sopenharmony_ci struct pfvf_tlv hdr; 17762306a36Sopenharmony_ci struct pf_vf_pfdev_info { 17862306a36Sopenharmony_ci u32 chip_num; 17962306a36Sopenharmony_ci u32 pf_cap; 18062306a36Sopenharmony_ci#define PFVF_CAP_RSS 0x00000001 18162306a36Sopenharmony_ci#define PFVF_CAP_DHC 0x00000002 18262306a36Sopenharmony_ci#define PFVF_CAP_TPA 0x00000004 18362306a36Sopenharmony_ci#define PFVF_CAP_TPA_UPDATE 0x00000008 18462306a36Sopenharmony_ci#define PFVF_CAP_VLAN_FILTER 0x00000010 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci char fw_ver[32]; 18762306a36Sopenharmony_ci u16 db_size; 18862306a36Sopenharmony_ci u8 indices_per_sb; 18962306a36Sopenharmony_ci u8 padding; 19062306a36Sopenharmony_ci } pfdev_info; 19162306a36Sopenharmony_ci struct pf_vf_resc { 19262306a36Sopenharmony_ci /* in case of status NO_RESOURCE in message hdr, pf will fill 19362306a36Sopenharmony_ci * this struct with suggested amount of resources for next 19462306a36Sopenharmony_ci * acquire request 19562306a36Sopenharmony_ci */ 19662306a36Sopenharmony_ci#define PFVF_MAX_QUEUES_PER_VF 16 19762306a36Sopenharmony_ci#define PFVF_MAX_SBS_PER_VF 16 19862306a36Sopenharmony_ci struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF]; 19962306a36Sopenharmony_ci u8 hw_qid[PFVF_MAX_QUEUES_PER_VF]; 20062306a36Sopenharmony_ci u8 num_rxqs; 20162306a36Sopenharmony_ci u8 num_txqs; 20262306a36Sopenharmony_ci u8 num_sbs; 20362306a36Sopenharmony_ci u8 num_mac_filters; 20462306a36Sopenharmony_ci u8 num_vlan_filters; 20562306a36Sopenharmony_ci u8 num_mc_filters; 20662306a36Sopenharmony_ci u8 permanent_mac_addr[ETH_ALEN]; 20762306a36Sopenharmony_ci u8 current_mac_addr[ETH_ALEN]; 20862306a36Sopenharmony_ci u8 padding[2]; 20962306a36Sopenharmony_ci } resc; 21062306a36Sopenharmony_ci}; 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_cistruct vfpf_port_phys_id_resp_tlv { 21362306a36Sopenharmony_ci struct channel_tlv tl; 21462306a36Sopenharmony_ci u8 id[ETH_ALEN]; 21562306a36Sopenharmony_ci u8 padding[2]; 21662306a36Sopenharmony_ci}; 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_cistruct vfpf_fp_hsi_resp_tlv { 21962306a36Sopenharmony_ci struct channel_tlv tl; 22062306a36Sopenharmony_ci u8 is_supported; 22162306a36Sopenharmony_ci u8 padding[3]; 22262306a36Sopenharmony_ci}; 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci#define VFPF_INIT_FLG_STATS_COALESCE (1 << 0) /* when set the VFs queues 22562306a36Sopenharmony_ci * stats will be coalesced on 22662306a36Sopenharmony_ci * the leading RSS queue 22762306a36Sopenharmony_ci */ 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci/* Init VF */ 23062306a36Sopenharmony_cistruct vfpf_init_tlv { 23162306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 23262306a36Sopenharmony_ci aligned_u64 sb_addr[PFVF_MAX_SBS_PER_VF]; /* vf_sb based */ 23362306a36Sopenharmony_ci aligned_u64 spq_addr; 23462306a36Sopenharmony_ci aligned_u64 stats_addr; 23562306a36Sopenharmony_ci u16 stats_stride; 23662306a36Sopenharmony_ci u32 flags; 23762306a36Sopenharmony_ci u32 padding[2]; 23862306a36Sopenharmony_ci}; 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci/* Setup Queue */ 24162306a36Sopenharmony_cistruct vfpf_setup_q_tlv { 24262306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci struct vf_pf_rxq_params { 24562306a36Sopenharmony_ci /* physical addresses */ 24662306a36Sopenharmony_ci aligned_u64 rcq_addr; 24762306a36Sopenharmony_ci aligned_u64 rcq_np_addr; 24862306a36Sopenharmony_ci aligned_u64 rxq_addr; 24962306a36Sopenharmony_ci aligned_u64 sge_addr; 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci /* sb + hc info */ 25262306a36Sopenharmony_ci u8 vf_sb; /* index in hw_sbs[] */ 25362306a36Sopenharmony_ci u8 sb_index; /* Index in the SB */ 25462306a36Sopenharmony_ci u16 hc_rate; /* desired interrupts per sec. */ 25562306a36Sopenharmony_ci /* valid iff VFPF_QUEUE_FLG_HC */ 25662306a36Sopenharmony_ci /* rx buffer info */ 25762306a36Sopenharmony_ci u16 mtu; 25862306a36Sopenharmony_ci u16 buf_sz; 25962306a36Sopenharmony_ci u16 flags; /* VFPF_QUEUE_FLG_X flags */ 26062306a36Sopenharmony_ci u16 stat_id; /* valid iff VFPF_QUEUE_FLG_STATS */ 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci /* valid iff VFPF_QUEUE_FLG_TPA */ 26362306a36Sopenharmony_ci u16 sge_buf_sz; 26462306a36Sopenharmony_ci u16 tpa_agg_sz; 26562306a36Sopenharmony_ci u8 max_sge_pkt; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci u8 drop_flags; /* VFPF_QUEUE_DROP_X, for Linux VMs 26862306a36Sopenharmony_ci * all the flags are turned off 26962306a36Sopenharmony_ci */ 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci u8 cache_line_log; /* VFPF_QUEUE_FLG_CACHE_ALIGN */ 27262306a36Sopenharmony_ci u8 padding; 27362306a36Sopenharmony_ci } rxq; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci struct vf_pf_txq_params { 27662306a36Sopenharmony_ci /* physical addresses */ 27762306a36Sopenharmony_ci aligned_u64 txq_addr; 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci /* sb + hc info */ 28062306a36Sopenharmony_ci u8 vf_sb; /* index in hw_sbs[] */ 28162306a36Sopenharmony_ci u8 sb_index; /* Index in the SB */ 28262306a36Sopenharmony_ci u16 hc_rate; /* desired interrupts per sec. */ 28362306a36Sopenharmony_ci /* valid iff VFPF_QUEUE_FLG_HC */ 28462306a36Sopenharmony_ci u32 flags; /* VFPF_QUEUE_FLG_X flags */ 28562306a36Sopenharmony_ci u16 stat_id; /* valid iff VFPF_QUEUE_FLG_STATS */ 28662306a36Sopenharmony_ci u8 traffic_type; /* see in setup_context() */ 28762306a36Sopenharmony_ci u8 padding; 28862306a36Sopenharmony_ci } txq; 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci u8 vf_qid; /* index in hw_qid[] */ 29162306a36Sopenharmony_ci u8 param_valid; 29262306a36Sopenharmony_ci#define VFPF_RXQ_VALID 0x01 29362306a36Sopenharmony_ci#define VFPF_TXQ_VALID 0x02 29462306a36Sopenharmony_ci u8 padding[2]; 29562306a36Sopenharmony_ci}; 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci/* Set Queue Filters */ 29862306a36Sopenharmony_cistruct vfpf_q_mac_vlan_filter { 29962306a36Sopenharmony_ci u32 flags; 30062306a36Sopenharmony_ci#define VFPF_Q_FILTER_DEST_MAC_VALID 0x01 30162306a36Sopenharmony_ci#define VFPF_Q_FILTER_VLAN_TAG_VALID 0x02 30262306a36Sopenharmony_ci#define VFPF_Q_FILTER_SET 0x100 /* set/clear */ 30362306a36Sopenharmony_ci u8 mac[ETH_ALEN]; 30462306a36Sopenharmony_ci u16 vlan_tag; 30562306a36Sopenharmony_ci}; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci/* configure queue filters */ 30862306a36Sopenharmony_cistruct vfpf_set_q_filters_tlv { 30962306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci u32 flags; 31262306a36Sopenharmony_ci#define VFPF_SET_Q_FILTERS_MAC_VLAN_CHANGED 0x01 31362306a36Sopenharmony_ci#define VFPF_SET_Q_FILTERS_MULTICAST_CHANGED 0x02 31462306a36Sopenharmony_ci#define VFPF_SET_Q_FILTERS_RX_MASK_CHANGED 0x04 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci u8 vf_qid; /* index in hw_qid[] */ 31762306a36Sopenharmony_ci u8 n_mac_vlan_filters; 31862306a36Sopenharmony_ci u8 n_multicast; 31962306a36Sopenharmony_ci u8 padding; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ci#define PFVF_MAX_MAC_FILTERS 16 32262306a36Sopenharmony_ci#define PFVF_MAX_VLAN_FILTERS 16 32362306a36Sopenharmony_ci#define PFVF_MAX_FILTERS (PFVF_MAX_MAC_FILTERS +\ 32462306a36Sopenharmony_ci PFVF_MAX_VLAN_FILTERS) 32562306a36Sopenharmony_ci struct vfpf_q_mac_vlan_filter filters[PFVF_MAX_FILTERS]; 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci#define PFVF_MAX_MULTICAST_PER_VF 32 32862306a36Sopenharmony_ci u8 multicast[PFVF_MAX_MULTICAST_PER_VF][ETH_ALEN]; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci u32 rx_mask; /* see mask constants at the top of the file */ 33162306a36Sopenharmony_ci}; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_cistruct vfpf_tpa_tlv { 33462306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci struct vf_pf_tpa_client_info { 33762306a36Sopenharmony_ci aligned_u64 sge_addr[PFVF_MAX_QUEUES_PER_VF]; 33862306a36Sopenharmony_ci u8 update_ipv4; 33962306a36Sopenharmony_ci u8 update_ipv6; 34062306a36Sopenharmony_ci u8 max_tpa_queues; 34162306a36Sopenharmony_ci u8 max_sges_for_packet; 34262306a36Sopenharmony_ci u8 complete_on_both_clients; 34362306a36Sopenharmony_ci u8 dont_verify_thr; 34462306a36Sopenharmony_ci u8 tpa_mode; 34562306a36Sopenharmony_ci u16 sge_buff_size; 34662306a36Sopenharmony_ci u16 max_agg_size; 34762306a36Sopenharmony_ci u16 sge_pause_thr_low; 34862306a36Sopenharmony_ci u16 sge_pause_thr_high; 34962306a36Sopenharmony_ci } tpa_client_info; 35062306a36Sopenharmony_ci}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci/* close VF (disable VF) */ 35362306a36Sopenharmony_cistruct vfpf_close_tlv { 35462306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 35562306a36Sopenharmony_ci u16 vf_id; /* for debug */ 35662306a36Sopenharmony_ci u8 padding[2]; 35762306a36Sopenharmony_ci}; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci/* release the VF's acquired resources */ 36062306a36Sopenharmony_cistruct vfpf_release_tlv { 36162306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 36262306a36Sopenharmony_ci u16 vf_id; 36362306a36Sopenharmony_ci u8 padding[2]; 36462306a36Sopenharmony_ci}; 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_cistruct tlv_buffer_size { 36762306a36Sopenharmony_ci u8 tlv_buffer[TLV_BUFFER_SIZE]; 36862306a36Sopenharmony_ci}; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ciunion vfpf_tlvs { 37162306a36Sopenharmony_ci struct vfpf_first_tlv first_tlv; 37262306a36Sopenharmony_ci struct vfpf_acquire_tlv acquire; 37362306a36Sopenharmony_ci struct vfpf_init_tlv init; 37462306a36Sopenharmony_ci struct vfpf_close_tlv close; 37562306a36Sopenharmony_ci struct vfpf_q_op_tlv q_op; 37662306a36Sopenharmony_ci struct vfpf_setup_q_tlv setup_q; 37762306a36Sopenharmony_ci struct vfpf_set_q_filters_tlv set_q_filters; 37862306a36Sopenharmony_ci struct vfpf_release_tlv release; 37962306a36Sopenharmony_ci struct vfpf_rss_tlv update_rss; 38062306a36Sopenharmony_ci struct vfpf_tpa_tlv update_tpa; 38162306a36Sopenharmony_ci struct channel_list_end_tlv list_end; 38262306a36Sopenharmony_ci struct tlv_buffer_size tlv_buf_size; 38362306a36Sopenharmony_ci}; 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ciunion pfvf_tlvs { 38662306a36Sopenharmony_ci struct pfvf_general_resp_tlv general_resp; 38762306a36Sopenharmony_ci struct pfvf_acquire_resp_tlv acquire_resp; 38862306a36Sopenharmony_ci struct channel_list_end_tlv list_end; 38962306a36Sopenharmony_ci struct tlv_buffer_size tlv_buf_size; 39062306a36Sopenharmony_ci}; 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci/* This is a structure which is allocated in the VF, which the PF may update 39362306a36Sopenharmony_ci * when it deems it necessary to do so. The bulletin board is sampled 39462306a36Sopenharmony_ci * periodically by the VF. A copy per VF is maintained in the PF (to prevent 39562306a36Sopenharmony_ci * loss of data upon multiple updates (or the need for read modify write)). 39662306a36Sopenharmony_ci */ 39762306a36Sopenharmony_cistruct pf_vf_bulletin_size { 39862306a36Sopenharmony_ci u8 size[PF_VF_BULLETIN_SIZE]; 39962306a36Sopenharmony_ci}; 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_cistruct pf_vf_bulletin_content { 40262306a36Sopenharmony_ci u32 crc; /* crc of structure to ensure is not in 40362306a36Sopenharmony_ci * mid-update 40462306a36Sopenharmony_ci */ 40562306a36Sopenharmony_ci u16 version; 40662306a36Sopenharmony_ci u16 length; 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_ci aligned_u64 valid_bitmap; /* bitmap indicating which fields 40962306a36Sopenharmony_ci * hold valid values 41062306a36Sopenharmony_ci */ 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci#define MAC_ADDR_VALID 0 /* alert the vf that a new mac address 41362306a36Sopenharmony_ci * is available for it 41462306a36Sopenharmony_ci */ 41562306a36Sopenharmony_ci#define VLAN_VALID 1 /* when set, the vf should not access 41662306a36Sopenharmony_ci * the vfpf channel 41762306a36Sopenharmony_ci */ 41862306a36Sopenharmony_ci#define CHANNEL_DOWN 2 /* vfpf channel is disabled. VFs are not 41962306a36Sopenharmony_ci * to attempt to send messages on the 42062306a36Sopenharmony_ci * channel after this bit is set 42162306a36Sopenharmony_ci */ 42262306a36Sopenharmony_ci#define LINK_VALID 3 /* alert the VF thet a new link status 42362306a36Sopenharmony_ci * update is available for it 42462306a36Sopenharmony_ci */ 42562306a36Sopenharmony_ci u8 mac[ETH_ALEN]; 42662306a36Sopenharmony_ci u8 mac_padding[2]; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci u16 vlan; 42962306a36Sopenharmony_ci u8 vlan_padding[6]; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci u16 link_speed; /* Effective line speed */ 43262306a36Sopenharmony_ci u8 link_speed_padding[6]; 43362306a36Sopenharmony_ci u32 link_flags; /* VFPF_LINK_REPORT_XXX flags */ 43462306a36Sopenharmony_ci#define VFPF_LINK_REPORT_LINK_DOWN (1 << 0) 43562306a36Sopenharmony_ci#define VFPF_LINK_REPORT_FULL_DUPLEX (1 << 1) 43662306a36Sopenharmony_ci#define VFPF_LINK_REPORT_RX_FC_ON (1 << 2) 43762306a36Sopenharmony_ci#define VFPF_LINK_REPORT_TX_FC_ON (1 << 3) 43862306a36Sopenharmony_ci u8 link_flags_padding[4]; 43962306a36Sopenharmony_ci}; 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ciunion pf_vf_bulletin { 44262306a36Sopenharmony_ci struct pf_vf_bulletin_content content; 44362306a36Sopenharmony_ci struct pf_vf_bulletin_size size; 44462306a36Sopenharmony_ci}; 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci#define MAX_TLVS_IN_LIST 50 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_cienum channel_tlvs { 44962306a36Sopenharmony_ci CHANNEL_TLV_NONE, 45062306a36Sopenharmony_ci CHANNEL_TLV_ACQUIRE, 45162306a36Sopenharmony_ci CHANNEL_TLV_INIT, 45262306a36Sopenharmony_ci CHANNEL_TLV_SETUP_Q, 45362306a36Sopenharmony_ci CHANNEL_TLV_SET_Q_FILTERS, 45462306a36Sopenharmony_ci CHANNEL_TLV_ACTIVATE_Q, 45562306a36Sopenharmony_ci CHANNEL_TLV_DEACTIVATE_Q, 45662306a36Sopenharmony_ci CHANNEL_TLV_TEARDOWN_Q, 45762306a36Sopenharmony_ci CHANNEL_TLV_CLOSE, 45862306a36Sopenharmony_ci CHANNEL_TLV_RELEASE, 45962306a36Sopenharmony_ci CHANNEL_TLV_UPDATE_RSS_DEPRECATED, 46062306a36Sopenharmony_ci CHANNEL_TLV_PF_RELEASE_VF, 46162306a36Sopenharmony_ci CHANNEL_TLV_LIST_END, 46262306a36Sopenharmony_ci CHANNEL_TLV_FLR, 46362306a36Sopenharmony_ci CHANNEL_TLV_PF_SET_MAC, 46462306a36Sopenharmony_ci CHANNEL_TLV_PF_SET_VLAN, 46562306a36Sopenharmony_ci CHANNEL_TLV_UPDATE_RSS, 46662306a36Sopenharmony_ci CHANNEL_TLV_PHYS_PORT_ID, 46762306a36Sopenharmony_ci CHANNEL_TLV_UPDATE_TPA, 46862306a36Sopenharmony_ci CHANNEL_TLV_FP_HSI_SUPPORT, 46962306a36Sopenharmony_ci CHANNEL_TLV_MAX 47062306a36Sopenharmony_ci}; 47162306a36Sopenharmony_ci 47262306a36Sopenharmony_ci#endif /* CONFIG_BNX2X_SRIOV */ 47362306a36Sopenharmony_ci#endif /* VF_PF_IF_H */ 474