132a47e72SYuval Mintz /* QLogic qed NIC Driver 232a47e72SYuval Mintz * Copyright (c) 2015 QLogic Corporation 332a47e72SYuval Mintz * 432a47e72SYuval Mintz * This software is available under the terms of the GNU General Public License 532a47e72SYuval Mintz * (GPL) Version 2, available from the file COPYING in the main directory of 632a47e72SYuval Mintz * this source tree. 732a47e72SYuval Mintz */ 832a47e72SYuval Mintz 932a47e72SYuval Mintz #ifndef _QED_VF_H 1032a47e72SYuval Mintz #define _QED_VF_H 1132a47e72SYuval Mintz 12dacd88d6SYuval Mintz #include "qed_l2.h" 1336558c3dSYuval Mintz #include "qed_mcp.h" 14dacd88d6SYuval Mintz 15dacd88d6SYuval Mintz #define T_ETH_INDIRECTION_TABLE_SIZE 128 16dacd88d6SYuval Mintz #define T_ETH_RSS_KEY_SIZE 10 17dacd88d6SYuval Mintz 181408cc1fSYuval Mintz struct vf_pf_resc_request { 191408cc1fSYuval Mintz u8 num_rxqs; 201408cc1fSYuval Mintz u8 num_txqs; 211408cc1fSYuval Mintz u8 num_sbs; 221408cc1fSYuval Mintz u8 num_mac_filters; 231408cc1fSYuval Mintz u8 num_vlan_filters; 241408cc1fSYuval Mintz u8 num_mc_filters; 251408cc1fSYuval Mintz u16 padding; 261408cc1fSYuval Mintz }; 271408cc1fSYuval Mintz 281408cc1fSYuval Mintz struct hw_sb_info { 291408cc1fSYuval Mintz u16 hw_sb_id; 301408cc1fSYuval Mintz u8 sb_qid; 311408cc1fSYuval Mintz u8 padding[5]; 321408cc1fSYuval Mintz }; 331408cc1fSYuval Mintz 34dacd88d6SYuval Mintz #define TLV_BUFFER_SIZE 1024 35dacd88d6SYuval Mintz 3637bff2b9SYuval Mintz enum { 3737bff2b9SYuval Mintz PFVF_STATUS_WAITING, 3837bff2b9SYuval Mintz PFVF_STATUS_SUCCESS, 3937bff2b9SYuval Mintz PFVF_STATUS_FAILURE, 4037bff2b9SYuval Mintz PFVF_STATUS_NOT_SUPPORTED, 4137bff2b9SYuval Mintz PFVF_STATUS_NO_RESOURCE, 4237bff2b9SYuval Mintz PFVF_STATUS_FORCED, 437eff82b0SYuval Mintz PFVF_STATUS_MALICIOUS, 4437bff2b9SYuval Mintz }; 4537bff2b9SYuval Mintz 4637bff2b9SYuval Mintz /* vf pf channel tlvs */ 4737bff2b9SYuval Mintz /* general tlv header (used for both vf->pf request and pf->vf response) */ 4837bff2b9SYuval Mintz struct channel_tlv { 4937bff2b9SYuval Mintz u16 type; 5037bff2b9SYuval Mintz u16 length; 5137bff2b9SYuval Mintz }; 5237bff2b9SYuval Mintz 5337bff2b9SYuval Mintz /* header of first vf->pf tlv carries the offset used to calculate reponse 5437bff2b9SYuval Mintz * buffer address 5537bff2b9SYuval Mintz */ 5637bff2b9SYuval Mintz struct vfpf_first_tlv { 5737bff2b9SYuval Mintz struct channel_tlv tl; 5837bff2b9SYuval Mintz u32 padding; 5937bff2b9SYuval Mintz u64 reply_address; 6037bff2b9SYuval Mintz }; 6137bff2b9SYuval Mintz 6237bff2b9SYuval Mintz /* header of pf->vf tlvs, carries the status of handling the request */ 6337bff2b9SYuval Mintz struct pfvf_tlv { 6437bff2b9SYuval Mintz struct channel_tlv tl; 6537bff2b9SYuval Mintz u8 status; 6637bff2b9SYuval Mintz u8 padding[3]; 6737bff2b9SYuval Mintz }; 6837bff2b9SYuval Mintz 6937bff2b9SYuval Mintz /* response tlv used for most tlvs */ 7037bff2b9SYuval Mintz struct pfvf_def_resp_tlv { 7137bff2b9SYuval Mintz struct pfvf_tlv hdr; 7237bff2b9SYuval Mintz }; 7337bff2b9SYuval Mintz 7437bff2b9SYuval Mintz /* used to terminate and pad a tlv list */ 7537bff2b9SYuval Mintz struct channel_list_end_tlv { 7637bff2b9SYuval Mintz struct channel_tlv tl; 7737bff2b9SYuval Mintz u8 padding[4]; 7837bff2b9SYuval Mintz }; 7937bff2b9SYuval Mintz 801408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX (0) 811408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_WINDOWS (1) 821408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_ESX (2) 831408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_SOLARIS (3) 841408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX_USERSPACE (4) 851408cc1fSYuval Mintz 861408cc1fSYuval Mintz struct vfpf_acquire_tlv { 871408cc1fSYuval Mintz struct vfpf_first_tlv first_tlv; 881408cc1fSYuval Mintz 891408cc1fSYuval Mintz struct vf_pf_vfdev_info { 90a044df83SYuval Mintz #define VFPF_ACQUIRE_CAP_PRE_FP_HSI (1 << 0) /* VF pre-FP hsi version */ 911408cc1fSYuval Mintz #define VFPF_ACQUIRE_CAP_100G (1 << 1) /* VF can support 100g */ 921408cc1fSYuval Mintz u64 capabilities; 931408cc1fSYuval Mintz u8 fw_major; 941408cc1fSYuval Mintz u8 fw_minor; 951408cc1fSYuval Mintz u8 fw_revision; 961408cc1fSYuval Mintz u8 fw_engineering; 971408cc1fSYuval Mintz u32 driver_version; 981408cc1fSYuval Mintz u16 opaque_fid; /* ME register value */ 991408cc1fSYuval Mintz u8 os_type; /* VFPF_ACQUIRE_OS_* value */ 1001fe614d1SYuval Mintz u8 eth_fp_hsi_major; 1011fe614d1SYuval Mintz u8 eth_fp_hsi_minor; 1021fe614d1SYuval Mintz u8 padding[3]; 1031408cc1fSYuval Mintz } vfdev_info; 1041408cc1fSYuval Mintz 1051408cc1fSYuval Mintz struct vf_pf_resc_request resc_request; 1061408cc1fSYuval Mintz 1071408cc1fSYuval Mintz u64 bulletin_addr; 1081408cc1fSYuval Mintz u32 bulletin_size; 1091408cc1fSYuval Mintz u32 padding; 1101408cc1fSYuval Mintz }; 1111408cc1fSYuval Mintz 112dacd88d6SYuval Mintz /* receive side scaling tlv */ 113dacd88d6SYuval Mintz struct vfpf_vport_update_rss_tlv { 114dacd88d6SYuval Mintz struct channel_tlv tl; 115dacd88d6SYuval Mintz 116dacd88d6SYuval Mintz u8 update_rss_flags; 117dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CONFIG_FLAG BIT(0) 118dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CAPS_FLAG BIT(1) 119dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_IND_TABLE_FLAG BIT(2) 120dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_KEY_FLAG BIT(3) 121dacd88d6SYuval Mintz 122dacd88d6SYuval Mintz u8 rss_enable; 123dacd88d6SYuval Mintz u8 rss_caps; 124dacd88d6SYuval Mintz u8 rss_table_size_log; /* The table size is 2 ^ rss_table_size_log */ 125dacd88d6SYuval Mintz u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE]; 126dacd88d6SYuval Mintz u32 rss_key[T_ETH_RSS_KEY_SIZE]; 127dacd88d6SYuval Mintz }; 128dacd88d6SYuval Mintz 1291408cc1fSYuval Mintz struct pfvf_storm_stats { 1301408cc1fSYuval Mintz u32 address; 1311408cc1fSYuval Mintz u32 len; 1321408cc1fSYuval Mintz }; 1331408cc1fSYuval Mintz 1341408cc1fSYuval Mintz struct pfvf_stats_info { 1351408cc1fSYuval Mintz struct pfvf_storm_stats mstats; 1361408cc1fSYuval Mintz struct pfvf_storm_stats pstats; 1371408cc1fSYuval Mintz struct pfvf_storm_stats tstats; 1381408cc1fSYuval Mintz struct pfvf_storm_stats ustats; 1391408cc1fSYuval Mintz }; 1401408cc1fSYuval Mintz 1411408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv { 1421408cc1fSYuval Mintz struct pfvf_tlv hdr; 1431408cc1fSYuval Mintz 1441408cc1fSYuval Mintz struct pf_vf_pfdev_info { 1451408cc1fSYuval Mintz u32 chip_num; 1461408cc1fSYuval Mintz u32 mfw_ver; 1471408cc1fSYuval Mintz 1481408cc1fSYuval Mintz u16 fw_major; 1491408cc1fSYuval Mintz u16 fw_minor; 1501408cc1fSYuval Mintz u16 fw_rev; 1511408cc1fSYuval Mintz u16 fw_eng; 1521408cc1fSYuval Mintz 1531408cc1fSYuval Mintz u64 capabilities; 1541408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED BIT(0) 1551408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_100G BIT(1) /* If set, 100g PF */ 1561408cc1fSYuval Mintz /* There are old PF versions where the PF might mistakenly override the sanity 1571408cc1fSYuval Mintz * mechanism [version-based] and allow a VF that can't be supported to pass 1581408cc1fSYuval Mintz * the acquisition phase. 1591408cc1fSYuval Mintz * To overcome this, PFs now indicate that they're past that point and the new 1601408cc1fSYuval Mintz * VFs would fail probe on the older PFs that fail to do so. 1611408cc1fSYuval Mintz */ 1621408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE BIT(2) 1631408cc1fSYuval Mintz 1641408cc1fSYuval Mintz u16 db_size; 1651408cc1fSYuval Mintz u8 indices_per_sb; 1661408cc1fSYuval Mintz u8 os_type; 1671408cc1fSYuval Mintz 1681408cc1fSYuval Mintz /* These should match the PF's qed_dev values */ 1691408cc1fSYuval Mintz u16 chip_rev; 1701408cc1fSYuval Mintz u8 dev_type; 1711408cc1fSYuval Mintz 1721408cc1fSYuval Mintz u8 padding; 1731408cc1fSYuval Mintz 1741408cc1fSYuval Mintz struct pfvf_stats_info stats_info; 1751408cc1fSYuval Mintz 1761408cc1fSYuval Mintz u8 port_mac[ETH_ALEN]; 1771fe614d1SYuval Mintz 1781fe614d1SYuval Mintz /* It's possible PF had to configure an older fastpath HSI 1791fe614d1SYuval Mintz * [in case VF is newer than PF]. This is communicated back 1801fe614d1SYuval Mintz * to the VF. It can also be used in case of error due to 1811fe614d1SYuval Mintz * non-matching versions to shed light in VF about failure. 1821fe614d1SYuval Mintz */ 1831fe614d1SYuval Mintz u8 major_fp_hsi; 1841fe614d1SYuval Mintz u8 minor_fp_hsi; 1851408cc1fSYuval Mintz } pfdev_info; 1861408cc1fSYuval Mintz 1871408cc1fSYuval Mintz struct pf_vf_resc { 1881408cc1fSYuval Mintz #define PFVF_MAX_QUEUES_PER_VF 16 1891408cc1fSYuval Mintz #define PFVF_MAX_SBS_PER_VF 16 1901408cc1fSYuval Mintz struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF]; 1911408cc1fSYuval Mintz u8 hw_qid[PFVF_MAX_QUEUES_PER_VF]; 1921408cc1fSYuval Mintz u8 cid[PFVF_MAX_QUEUES_PER_VF]; 1931408cc1fSYuval Mintz 1941408cc1fSYuval Mintz u8 num_rxqs; 1951408cc1fSYuval Mintz u8 num_txqs; 1961408cc1fSYuval Mintz u8 num_sbs; 1971408cc1fSYuval Mintz u8 num_mac_filters; 1981408cc1fSYuval Mintz u8 num_vlan_filters; 1991408cc1fSYuval Mintz u8 num_mc_filters; 2001408cc1fSYuval Mintz u8 padding[2]; 2011408cc1fSYuval Mintz } resc; 2021408cc1fSYuval Mintz 2031408cc1fSYuval Mintz u32 bulletin_size; 2041408cc1fSYuval Mintz u32 padding; 2051408cc1fSYuval Mintz }; 2061408cc1fSYuval Mintz 207dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv { 208dacd88d6SYuval Mintz struct pfvf_tlv hdr; 209dacd88d6SYuval Mintz u32 offset; /* offset to consumer/producer of queue */ 210dacd88d6SYuval Mintz u8 padding[4]; 211dacd88d6SYuval Mintz }; 212dacd88d6SYuval Mintz 213dacd88d6SYuval Mintz /* Setup Queue */ 214dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv { 215dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 216dacd88d6SYuval Mintz 217dacd88d6SYuval Mintz /* physical addresses */ 218dacd88d6SYuval Mintz u64 rxq_addr; 219dacd88d6SYuval Mintz u64 deprecated_sge_addr; 220dacd88d6SYuval Mintz u64 cqe_pbl_addr; 221dacd88d6SYuval Mintz 222dacd88d6SYuval Mintz u16 cqe_pbl_size; 223dacd88d6SYuval Mintz u16 hw_sb; 224dacd88d6SYuval Mintz u16 rx_qid; 225dacd88d6SYuval Mintz u16 hc_rate; /* desired interrupts per sec. */ 226dacd88d6SYuval Mintz 227dacd88d6SYuval Mintz u16 bd_max_bytes; 228dacd88d6SYuval Mintz u16 stat_id; 229dacd88d6SYuval Mintz u8 sb_index; 230dacd88d6SYuval Mintz u8 padding[3]; 231dacd88d6SYuval Mintz }; 232dacd88d6SYuval Mintz 233dacd88d6SYuval Mintz struct vfpf_start_txq_tlv { 234dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 235dacd88d6SYuval Mintz 236dacd88d6SYuval Mintz /* physical addresses */ 237dacd88d6SYuval Mintz u64 pbl_addr; 238dacd88d6SYuval Mintz u16 pbl_size; 239dacd88d6SYuval Mintz u16 stat_id; 240dacd88d6SYuval Mintz u16 tx_qid; 241dacd88d6SYuval Mintz u16 hw_sb; 242dacd88d6SYuval Mintz 243dacd88d6SYuval Mintz u32 flags; /* VFPF_QUEUE_FLG_X flags */ 244dacd88d6SYuval Mintz u16 hc_rate; /* desired interrupts per sec. */ 245dacd88d6SYuval Mintz u8 sb_index; 246dacd88d6SYuval Mintz u8 padding[3]; 247dacd88d6SYuval Mintz }; 248dacd88d6SYuval Mintz 249dacd88d6SYuval Mintz /* Stop RX Queue */ 250dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv { 251dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 252dacd88d6SYuval Mintz 253dacd88d6SYuval Mintz u16 rx_qid; 254dacd88d6SYuval Mintz u8 num_rxqs; 255dacd88d6SYuval Mintz u8 cqe_completion; 256dacd88d6SYuval Mintz u8 padding[4]; 257dacd88d6SYuval Mintz }; 258dacd88d6SYuval Mintz 259dacd88d6SYuval Mintz /* Stop TX Queues */ 260dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv { 261dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 262dacd88d6SYuval Mintz 263dacd88d6SYuval Mintz u16 tx_qid; 264dacd88d6SYuval Mintz u8 num_txqs; 265dacd88d6SYuval Mintz u8 padding[5]; 266dacd88d6SYuval Mintz }; 267dacd88d6SYuval Mintz 268dacd88d6SYuval Mintz struct vfpf_update_rxq_tlv { 269dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 270dacd88d6SYuval Mintz 271dacd88d6SYuval Mintz u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF]; 272dacd88d6SYuval Mintz 273dacd88d6SYuval Mintz u16 rx_qid; 274dacd88d6SYuval Mintz u8 num_rxqs; 275dacd88d6SYuval Mintz u8 flags; 276dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG BIT(0) 277dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG BIT(1) 278dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG BIT(2) 279dacd88d6SYuval Mintz 280dacd88d6SYuval Mintz u8 padding[4]; 281dacd88d6SYuval Mintz }; 282dacd88d6SYuval Mintz 283dacd88d6SYuval Mintz /* Set Queue Filters */ 284dacd88d6SYuval Mintz struct vfpf_q_mac_vlan_filter { 285dacd88d6SYuval Mintz u32 flags; 286dacd88d6SYuval Mintz #define VFPF_Q_FILTER_DEST_MAC_VALID 0x01 287dacd88d6SYuval Mintz #define VFPF_Q_FILTER_VLAN_TAG_VALID 0x02 288dacd88d6SYuval Mintz #define VFPF_Q_FILTER_SET_MAC 0x100 /* set/clear */ 289dacd88d6SYuval Mintz 290dacd88d6SYuval Mintz u8 mac[ETH_ALEN]; 291dacd88d6SYuval Mintz u16 vlan_tag; 292dacd88d6SYuval Mintz 293dacd88d6SYuval Mintz u8 padding[4]; 294dacd88d6SYuval Mintz }; 295dacd88d6SYuval Mintz 296dacd88d6SYuval Mintz /* Start a vport */ 297dacd88d6SYuval Mintz struct vfpf_vport_start_tlv { 298dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 299dacd88d6SYuval Mintz 300dacd88d6SYuval Mintz u64 sb_addr[PFVF_MAX_SBS_PER_VF]; 301dacd88d6SYuval Mintz 302dacd88d6SYuval Mintz u32 tpa_mode; 303dacd88d6SYuval Mintz u16 dep1; 304dacd88d6SYuval Mintz u16 mtu; 305dacd88d6SYuval Mintz 306dacd88d6SYuval Mintz u8 vport_id; 307dacd88d6SYuval Mintz u8 inner_vlan_removal; 308dacd88d6SYuval Mintz 309dacd88d6SYuval Mintz u8 only_untagged; 310dacd88d6SYuval Mintz u8 max_buffers_per_cqe; 311dacd88d6SYuval Mintz 312dacd88d6SYuval Mintz u8 padding[4]; 313dacd88d6SYuval Mintz }; 314dacd88d6SYuval Mintz 315dacd88d6SYuval Mintz /* Extended tlvs - need to add rss, mcast, accept mode tlvs */ 316dacd88d6SYuval Mintz struct vfpf_vport_update_activate_tlv { 317dacd88d6SYuval Mintz struct channel_tlv tl; 318dacd88d6SYuval Mintz u8 update_rx; 319dacd88d6SYuval Mintz u8 update_tx; 320dacd88d6SYuval Mintz u8 active_rx; 321dacd88d6SYuval Mintz u8 active_tx; 322dacd88d6SYuval Mintz }; 323dacd88d6SYuval Mintz 32417b235c1SYuval Mintz struct vfpf_vport_update_tx_switch_tlv { 32517b235c1SYuval Mintz struct channel_tlv tl; 32617b235c1SYuval Mintz u8 tx_switching; 32717b235c1SYuval Mintz u8 padding[3]; 32817b235c1SYuval Mintz }; 32917b235c1SYuval Mintz 33017b235c1SYuval Mintz struct vfpf_vport_update_vlan_strip_tlv { 33117b235c1SYuval Mintz struct channel_tlv tl; 33217b235c1SYuval Mintz u8 remove_vlan; 33317b235c1SYuval Mintz u8 padding[3]; 33417b235c1SYuval Mintz }; 33517b235c1SYuval Mintz 336dacd88d6SYuval Mintz struct vfpf_vport_update_mcast_bin_tlv { 337dacd88d6SYuval Mintz struct channel_tlv tl; 338dacd88d6SYuval Mintz u8 padding[4]; 339dacd88d6SYuval Mintz 340dacd88d6SYuval Mintz u64 bins[8]; 341dacd88d6SYuval Mintz }; 342dacd88d6SYuval Mintz 343dacd88d6SYuval Mintz struct vfpf_vport_update_accept_param_tlv { 344dacd88d6SYuval Mintz struct channel_tlv tl; 345dacd88d6SYuval Mintz u8 update_rx_mode; 346dacd88d6SYuval Mintz u8 update_tx_mode; 347dacd88d6SYuval Mintz u8 rx_accept_filter; 348dacd88d6SYuval Mintz u8 tx_accept_filter; 349dacd88d6SYuval Mintz }; 350dacd88d6SYuval Mintz 35117b235c1SYuval Mintz struct vfpf_vport_update_accept_any_vlan_tlv { 35217b235c1SYuval Mintz struct channel_tlv tl; 35317b235c1SYuval Mintz u8 update_accept_any_vlan_flg; 35417b235c1SYuval Mintz u8 accept_any_vlan; 35517b235c1SYuval Mintz 35617b235c1SYuval Mintz u8 padding[2]; 35717b235c1SYuval Mintz }; 35817b235c1SYuval Mintz 35917b235c1SYuval Mintz struct vfpf_vport_update_sge_tpa_tlv { 36017b235c1SYuval Mintz struct channel_tlv tl; 36117b235c1SYuval Mintz 36217b235c1SYuval Mintz u16 sge_tpa_flags; 36317b235c1SYuval Mintz #define VFPF_TPA_IPV4_EN_FLAG BIT(0) 36417b235c1SYuval Mintz #define VFPF_TPA_IPV6_EN_FLAG BIT(1) 36517b235c1SYuval Mintz #define VFPF_TPA_PKT_SPLIT_FLAG BIT(2) 36617b235c1SYuval Mintz #define VFPF_TPA_HDR_DATA_SPLIT_FLAG BIT(3) 36717b235c1SYuval Mintz #define VFPF_TPA_GRO_CONSIST_FLAG BIT(4) 36817b235c1SYuval Mintz 36917b235c1SYuval Mintz u8 update_sge_tpa_flags; 37017b235c1SYuval Mintz #define VFPF_UPDATE_SGE_DEPRECATED_FLAG BIT(0) 37117b235c1SYuval Mintz #define VFPF_UPDATE_TPA_EN_FLAG BIT(1) 37217b235c1SYuval Mintz #define VFPF_UPDATE_TPA_PARAM_FLAG BIT(2) 37317b235c1SYuval Mintz 37417b235c1SYuval Mintz u8 max_buffers_per_cqe; 37517b235c1SYuval Mintz 37617b235c1SYuval Mintz u16 deprecated_sge_buff_size; 37717b235c1SYuval Mintz u16 tpa_max_size; 37817b235c1SYuval Mintz u16 tpa_min_size_to_start; 37917b235c1SYuval Mintz u16 tpa_min_size_to_cont; 38017b235c1SYuval Mintz 38117b235c1SYuval Mintz u8 tpa_max_aggs_num; 38217b235c1SYuval Mintz u8 padding[7]; 38317b235c1SYuval Mintz }; 38417b235c1SYuval Mintz 385dacd88d6SYuval Mintz /* Primary tlv as a header for various extended tlvs for 386dacd88d6SYuval Mintz * various functionalities in vport update ramrod. 387dacd88d6SYuval Mintz */ 388dacd88d6SYuval Mintz struct vfpf_vport_update_tlv { 389dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 390dacd88d6SYuval Mintz }; 391dacd88d6SYuval Mintz 392dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv { 393dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 394dacd88d6SYuval Mintz 395dacd88d6SYuval Mintz u8 opcode; 396dacd88d6SYuval Mintz u8 type; 397dacd88d6SYuval Mintz 398dacd88d6SYuval Mintz u8 mac[ETH_ALEN]; 399dacd88d6SYuval Mintz 400dacd88d6SYuval Mintz u16 vlan; 401dacd88d6SYuval Mintz u16 padding[3]; 402dacd88d6SYuval Mintz }; 403dacd88d6SYuval Mintz 40432a47e72SYuval Mintz struct tlv_buffer_size { 40532a47e72SYuval Mintz u8 tlv_buffer[TLV_BUFFER_SIZE]; 40632a47e72SYuval Mintz }; 40732a47e72SYuval Mintz 40832a47e72SYuval Mintz union vfpf_tlvs { 40937bff2b9SYuval Mintz struct vfpf_first_tlv first_tlv; 4101408cc1fSYuval Mintz struct vfpf_acquire_tlv acquire; 411dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv start_rxq; 412dacd88d6SYuval Mintz struct vfpf_start_txq_tlv start_txq; 413dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv stop_rxqs; 414dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv stop_txqs; 41517b235c1SYuval Mintz struct vfpf_update_rxq_tlv update_rxq; 416dacd88d6SYuval Mintz struct vfpf_vport_start_tlv start_vport; 417dacd88d6SYuval Mintz struct vfpf_vport_update_tlv vport_update; 418dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv ucast_filter; 41937bff2b9SYuval Mintz struct channel_list_end_tlv list_end; 42032a47e72SYuval Mintz struct tlv_buffer_size tlv_buf_size; 42132a47e72SYuval Mintz }; 42232a47e72SYuval Mintz 42332a47e72SYuval Mintz union pfvf_tlvs { 42437bff2b9SYuval Mintz struct pfvf_def_resp_tlv default_resp; 4251408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv acquire_resp; 42632a47e72SYuval Mintz struct tlv_buffer_size tlv_buf_size; 427dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv queue_start; 42832a47e72SYuval Mintz }; 42932a47e72SYuval Mintz 43008feecd7SYuval Mintz enum qed_bulletin_bit { 431eff16960SYuval Mintz /* Alert the VF that a forced MAC was set by the PF */ 432eff16960SYuval Mintz MAC_ADDR_FORCED = 0, 43308feecd7SYuval Mintz /* Alert the VF that a forced VLAN was set by the PF */ 43408feecd7SYuval Mintz VLAN_ADDR_FORCED = 2, 43508feecd7SYuval Mintz 43608feecd7SYuval Mintz /* Indicate that `default_only_untagged' contains actual data */ 43708feecd7SYuval Mintz VFPF_BULLETIN_UNTAGGED_DEFAULT = 3, 43808feecd7SYuval Mintz VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4, 43908feecd7SYuval Mintz 440eff16960SYuval Mintz /* Alert the VF that suggested mac was sent by the PF. 441eff16960SYuval Mintz * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set. 442eff16960SYuval Mintz */ 443eff16960SYuval Mintz VFPF_BULLETIN_MAC_ADDR = 5 44408feecd7SYuval Mintz }; 44508feecd7SYuval Mintz 44632a47e72SYuval Mintz struct qed_bulletin_content { 44732a47e72SYuval Mintz /* crc of structure to ensure is not in mid-update */ 44832a47e72SYuval Mintz u32 crc; 44932a47e72SYuval Mintz 45032a47e72SYuval Mintz u32 version; 45132a47e72SYuval Mintz 45232a47e72SYuval Mintz /* bitmap indicating which fields hold valid values */ 45332a47e72SYuval Mintz u64 valid_bitmap; 45436558c3dSYuval Mintz 45536558c3dSYuval Mintz /* used for MAC_ADDR or MAC_ADDR_FORCED */ 45636558c3dSYuval Mintz u8 mac[ETH_ALEN]; 45736558c3dSYuval Mintz 45836558c3dSYuval Mintz /* If valid, 1 => only untagged Rx if no vlan is configured */ 45936558c3dSYuval Mintz u8 default_only_untagged; 46036558c3dSYuval Mintz u8 padding; 46136558c3dSYuval Mintz 46236558c3dSYuval Mintz /* The following is a 'copy' of qed_mcp_link_state, 46336558c3dSYuval Mintz * qed_mcp_link_params and qed_mcp_link_capabilities. Since it's 46436558c3dSYuval Mintz * possible the structs will increase further along the road we cannot 46536558c3dSYuval Mintz * have it here; Instead we need to have all of its fields. 46636558c3dSYuval Mintz */ 46736558c3dSYuval Mintz u8 req_autoneg; 46836558c3dSYuval Mintz u8 req_autoneg_pause; 46936558c3dSYuval Mintz u8 req_forced_rx; 47036558c3dSYuval Mintz u8 req_forced_tx; 47136558c3dSYuval Mintz u8 padding2[4]; 47236558c3dSYuval Mintz 47336558c3dSYuval Mintz u32 req_adv_speed; 47436558c3dSYuval Mintz u32 req_forced_speed; 47536558c3dSYuval Mintz u32 req_loopback; 47636558c3dSYuval Mintz u32 padding3; 47736558c3dSYuval Mintz 47836558c3dSYuval Mintz u8 link_up; 47936558c3dSYuval Mintz u8 full_duplex; 48036558c3dSYuval Mintz u8 autoneg; 48136558c3dSYuval Mintz u8 autoneg_complete; 48236558c3dSYuval Mintz u8 parallel_detection; 48336558c3dSYuval Mintz u8 pfc_enabled; 48436558c3dSYuval Mintz u8 partner_tx_flow_ctrl_en; 48536558c3dSYuval Mintz u8 partner_rx_flow_ctrl_en; 48636558c3dSYuval Mintz u8 partner_adv_pause; 48736558c3dSYuval Mintz u8 sfp_tx_fault; 48836558c3dSYuval Mintz u8 padding4[6]; 48936558c3dSYuval Mintz 49036558c3dSYuval Mintz u32 speed; 49136558c3dSYuval Mintz u32 partner_adv_speed; 49236558c3dSYuval Mintz 49336558c3dSYuval Mintz u32 capability_speed; 49408feecd7SYuval Mintz 49508feecd7SYuval Mintz /* Forced vlan */ 49608feecd7SYuval Mintz u16 pvid; 49708feecd7SYuval Mintz u16 padding5; 49832a47e72SYuval Mintz }; 49932a47e72SYuval Mintz 50032a47e72SYuval Mintz struct qed_bulletin { 50132a47e72SYuval Mintz dma_addr_t phys; 50232a47e72SYuval Mintz struct qed_bulletin_content *p_virt; 50332a47e72SYuval Mintz u32 size; 50432a47e72SYuval Mintz }; 50532a47e72SYuval Mintz 50637bff2b9SYuval Mintz enum { 50737bff2b9SYuval Mintz CHANNEL_TLV_NONE, /* ends tlv sequence */ 5081408cc1fSYuval Mintz CHANNEL_TLV_ACQUIRE, 509dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_START, 510dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE, 511dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_TEARDOWN, 512dacd88d6SYuval Mintz CHANNEL_TLV_START_RXQ, 513dacd88d6SYuval Mintz CHANNEL_TLV_START_TXQ, 514dacd88d6SYuval Mintz CHANNEL_TLV_STOP_RXQS, 515dacd88d6SYuval Mintz CHANNEL_TLV_STOP_TXQS, 51617b235c1SYuval Mintz CHANNEL_TLV_UPDATE_RXQ, 5170b55e27dSYuval Mintz CHANNEL_TLV_INT_CLEANUP, 5180b55e27dSYuval Mintz CHANNEL_TLV_CLOSE, 5190b55e27dSYuval Mintz CHANNEL_TLV_RELEASE, 52037bff2b9SYuval Mintz CHANNEL_TLV_LIST_END, 521dacd88d6SYuval Mintz CHANNEL_TLV_UCAST_FILTER, 522dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACTIVATE, 52317b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH, 52417b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP, 525dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_MCAST, 526dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM, 527dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_RSS, 52817b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN, 52917b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_SGE_TPA, 530dacd88d6SYuval Mintz CHANNEL_TLV_MAX, 531dacd88d6SYuval Mintz 532dacd88d6SYuval Mintz /* Required for iterating over vport-update tlvs. 533dacd88d6SYuval Mintz * Will break in case non-sequential vport-update tlvs. 534dacd88d6SYuval Mintz */ 53517b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1, 53637bff2b9SYuval Mintz }; 53737bff2b9SYuval Mintz 5381408cc1fSYuval Mintz /* This data is held in the qed_hwfn structure for VFs only. */ 5391408cc1fSYuval Mintz struct qed_vf_iov { 5401408cc1fSYuval Mintz union vfpf_tlvs *vf2pf_request; 5411408cc1fSYuval Mintz dma_addr_t vf2pf_request_phys; 5421408cc1fSYuval Mintz union pfvf_tlvs *pf2vf_reply; 5431408cc1fSYuval Mintz dma_addr_t pf2vf_reply_phys; 5441408cc1fSYuval Mintz 5451408cc1fSYuval Mintz /* Should be taken whenever the mailbox buffers are accessed */ 5461408cc1fSYuval Mintz struct mutex mutex; 5471408cc1fSYuval Mintz u8 *offset; 5481408cc1fSYuval Mintz 5491408cc1fSYuval Mintz /* Bulletin Board */ 5501408cc1fSYuval Mintz struct qed_bulletin bulletin; 5511408cc1fSYuval Mintz struct qed_bulletin_content bulletin_shadow; 5521408cc1fSYuval Mintz 5531408cc1fSYuval Mintz /* we set aside a copy of the acquire response */ 5541408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv acquire_resp; 555d8c2c7e3SYuval Mintz 556d8c2c7e3SYuval Mintz /* In case PF originates prior to the fp-hsi version comparison, 557d8c2c7e3SYuval Mintz * this has to be propagated as it affects the fastpath. 558d8c2c7e3SYuval Mintz */ 559d8c2c7e3SYuval Mintz bool b_pre_fp_hsi; 5601408cc1fSYuval Mintz }; 5611408cc1fSYuval Mintz 5621408cc1fSYuval Mintz #ifdef CONFIG_QED_SRIOV 5631408cc1fSYuval Mintz /** 56436558c3dSYuval Mintz * @brief Read the VF bulletin and act on it if needed 56536558c3dSYuval Mintz * 56636558c3dSYuval Mintz * @param p_hwfn 56736558c3dSYuval Mintz * @param p_change - qed fills 1 iff bulletin board has changed, 0 otherwise. 56836558c3dSYuval Mintz * 56936558c3dSYuval Mintz * @return enum _qed_status 57036558c3dSYuval Mintz */ 57136558c3dSYuval Mintz int qed_vf_read_bulletin(struct qed_hwfn *p_hwfn, u8 *p_change); 57236558c3dSYuval Mintz 57336558c3dSYuval Mintz /** 57436558c3dSYuval Mintz * @brief Get link paramters for VF from qed 57536558c3dSYuval Mintz * 57636558c3dSYuval Mintz * @param p_hwfn 57736558c3dSYuval Mintz * @param params - the link params structure to be filled for the VF 57836558c3dSYuval Mintz */ 57936558c3dSYuval Mintz void qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 58036558c3dSYuval Mintz struct qed_mcp_link_params *params); 58136558c3dSYuval Mintz 58236558c3dSYuval Mintz /** 58336558c3dSYuval Mintz * @brief Get link state for VF from qed 58436558c3dSYuval Mintz * 58536558c3dSYuval Mintz * @param p_hwfn 58636558c3dSYuval Mintz * @param link - the link state structure to be filled for the VF 58736558c3dSYuval Mintz */ 58836558c3dSYuval Mintz void qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 58936558c3dSYuval Mintz struct qed_mcp_link_state *link); 59036558c3dSYuval Mintz 59136558c3dSYuval Mintz /** 59236558c3dSYuval Mintz * @brief Get link capabilities for VF from qed 59336558c3dSYuval Mintz * 59436558c3dSYuval Mintz * @param p_hwfn 59536558c3dSYuval Mintz * @param p_link_caps - the link capabilities structure to be filled for the VF 59636558c3dSYuval Mintz */ 59736558c3dSYuval Mintz void qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 59836558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps); 59936558c3dSYuval Mintz 60036558c3dSYuval Mintz /** 6011408cc1fSYuval Mintz * @brief Get number of Rx queues allocated for VF by qed 6021408cc1fSYuval Mintz * 6031408cc1fSYuval Mintz * @param p_hwfn 6041408cc1fSYuval Mintz * @param num_rxqs - allocated RX queues 6051408cc1fSYuval Mintz */ 6061408cc1fSYuval Mintz void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs); 6071408cc1fSYuval Mintz 6081408cc1fSYuval Mintz /** 6091408cc1fSYuval Mintz * @brief Get port mac address for VF 6101408cc1fSYuval Mintz * 6111408cc1fSYuval Mintz * @param p_hwfn 6121408cc1fSYuval Mintz * @param port_mac - destination location for port mac 6131408cc1fSYuval Mintz */ 6141408cc1fSYuval Mintz void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac); 6151408cc1fSYuval Mintz 6161408cc1fSYuval Mintz /** 6171408cc1fSYuval Mintz * @brief Get number of VLAN filters allocated for VF by qed 6181408cc1fSYuval Mintz * 6191408cc1fSYuval Mintz * @param p_hwfn 6201408cc1fSYuval Mintz * @param num_rxqs - allocated VLAN filters 6211408cc1fSYuval Mintz */ 6221408cc1fSYuval Mintz void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn, 6231408cc1fSYuval Mintz u8 *num_vlan_filters); 6241408cc1fSYuval Mintz 6251408cc1fSYuval Mintz /** 626b0fca312SMintz, Yuval * @brief Get number of MAC filters allocated for VF by qed 627b0fca312SMintz, Yuval * 628b0fca312SMintz, Yuval * @param p_hwfn 629b0fca312SMintz, Yuval * @param num_rxqs - allocated MAC filters 630b0fca312SMintz, Yuval */ 631b0fca312SMintz, Yuval void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, u8 *num_mac_filters); 632b0fca312SMintz, Yuval 633b0fca312SMintz, Yuval /** 634eff16960SYuval Mintz * @brief Check if VF can set a MAC address 635eff16960SYuval Mintz * 636eff16960SYuval Mintz * @param p_hwfn 637eff16960SYuval Mintz * @param mac 638eff16960SYuval Mintz * 639eff16960SYuval Mintz * @return bool 640eff16960SYuval Mintz */ 641eff16960SYuval Mintz bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac); 642eff16960SYuval Mintz 643eff16960SYuval Mintz /** 6441408cc1fSYuval Mintz * @brief Set firmware version information in dev_info from VFs acquire response tlv 6451408cc1fSYuval Mintz * 6461408cc1fSYuval Mintz * @param p_hwfn 6471408cc1fSYuval Mintz * @param fw_major 6481408cc1fSYuval Mintz * @param fw_minor 6491408cc1fSYuval Mintz * @param fw_rev 6501408cc1fSYuval Mintz * @param fw_eng 6511408cc1fSYuval Mintz */ 6521408cc1fSYuval Mintz void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn, 6531408cc1fSYuval Mintz u16 *fw_major, u16 *fw_minor, 6541408cc1fSYuval Mintz u16 *fw_rev, u16 *fw_eng); 6551408cc1fSYuval Mintz 6561408cc1fSYuval Mintz /** 6571408cc1fSYuval Mintz * @brief hw preparation for VF 6581408cc1fSYuval Mintz * sends ACQUIRE message 6591408cc1fSYuval Mintz * 6601408cc1fSYuval Mintz * @param p_hwfn 6611408cc1fSYuval Mintz * 6621408cc1fSYuval Mintz * @return int 6631408cc1fSYuval Mintz */ 6641408cc1fSYuval Mintz int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn); 6651408cc1fSYuval Mintz 6661408cc1fSYuval Mintz /** 667dacd88d6SYuval Mintz * @brief VF - start the RX Queue by sending a message to the PF 668dacd88d6SYuval Mintz * @param p_hwfn 6693da7a37aSMintz, Yuval * @param p_cid - Only relative fields are relevant 670dacd88d6SYuval Mintz * @param bd_max_bytes - maximum number of bytes per bd 671dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of bd chain 672dacd88d6SYuval Mintz * @param cqe_pbl_addr - physical address of pbl 673dacd88d6SYuval Mintz * @param cqe_pbl_size - pbl size 674dacd88d6SYuval Mintz * @param pp_prod - pointer to the producer to be 675dacd88d6SYuval Mintz * used in fastpath 676dacd88d6SYuval Mintz * 677dacd88d6SYuval Mintz * @return int 678dacd88d6SYuval Mintz */ 679dacd88d6SYuval Mintz int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 6803da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 681dacd88d6SYuval Mintz u16 bd_max_bytes, 682dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_addr, 683dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 684dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod); 685dacd88d6SYuval Mintz 686dacd88d6SYuval Mintz /** 687dacd88d6SYuval Mintz * @brief VF - start the TX queue by sending a message to the 688dacd88d6SYuval Mintz * PF. 689dacd88d6SYuval Mintz * 690dacd88d6SYuval Mintz * @param p_hwfn 691dacd88d6SYuval Mintz * @param tx_queue_id - zero based within the VF 692dacd88d6SYuval Mintz * @param sb - status block for this queue 693dacd88d6SYuval Mintz * @param sb_index - index within the status block 694dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of tx chain 695dacd88d6SYuval Mintz * @param pp_doorbell - pointer to address to which to 696dacd88d6SYuval Mintz * write the doorbell too.. 697dacd88d6SYuval Mintz * 698dacd88d6SYuval Mintz * @return int 699dacd88d6SYuval Mintz */ 7003da7a37aSMintz, Yuval int 7013da7a37aSMintz, Yuval qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 7023da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 703dacd88d6SYuval Mintz dma_addr_t pbl_addr, 704dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell); 705dacd88d6SYuval Mintz 706dacd88d6SYuval Mintz /** 707dacd88d6SYuval Mintz * @brief VF - stop the RX queue by sending a message to the PF 708dacd88d6SYuval Mintz * 709dacd88d6SYuval Mintz * @param p_hwfn 7103da7a37aSMintz, Yuval * @param p_cid 711dacd88d6SYuval Mintz * @param cqe_completion 712dacd88d6SYuval Mintz * 713dacd88d6SYuval Mintz * @return int 714dacd88d6SYuval Mintz */ 715dacd88d6SYuval Mintz int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 7163da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, bool cqe_completion); 717dacd88d6SYuval Mintz 718dacd88d6SYuval Mintz /** 719dacd88d6SYuval Mintz * @brief VF - stop the TX queue by sending a message to the PF 720dacd88d6SYuval Mintz * 721dacd88d6SYuval Mintz * @param p_hwfn 722dacd88d6SYuval Mintz * @param tx_qid 723dacd88d6SYuval Mintz * 724dacd88d6SYuval Mintz * @return int 725dacd88d6SYuval Mintz */ 7263da7a37aSMintz, Yuval int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, struct qed_queue_cid *p_cid); 727dacd88d6SYuval Mintz 728dacd88d6SYuval Mintz /** 729dacd88d6SYuval Mintz * @brief VF - send a vport update command 730dacd88d6SYuval Mintz * 731dacd88d6SYuval Mintz * @param p_hwfn 732dacd88d6SYuval Mintz * @param params 733dacd88d6SYuval Mintz * 734dacd88d6SYuval Mintz * @return int 735dacd88d6SYuval Mintz */ 736dacd88d6SYuval Mintz int qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 737dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params); 738dacd88d6SYuval Mintz 739dacd88d6SYuval Mintz /** 7400b55e27dSYuval Mintz * 7410b55e27dSYuval Mintz * @brief VF - send a close message to PF 7420b55e27dSYuval Mintz * 7430b55e27dSYuval Mintz * @param p_hwfn 7440b55e27dSYuval Mintz * 7450b55e27dSYuval Mintz * @return enum _qed_status 7460b55e27dSYuval Mintz */ 7470b55e27dSYuval Mintz int qed_vf_pf_reset(struct qed_hwfn *p_hwfn); 7480b55e27dSYuval Mintz 7490b55e27dSYuval Mintz /** 7500b55e27dSYuval Mintz * @brief VF - free vf`s memories 7510b55e27dSYuval Mintz * 7520b55e27dSYuval Mintz * @param p_hwfn 7530b55e27dSYuval Mintz * 7540b55e27dSYuval Mintz * @return enum _qed_status 7550b55e27dSYuval Mintz */ 7560b55e27dSYuval Mintz int qed_vf_pf_release(struct qed_hwfn *p_hwfn); 75736558c3dSYuval Mintz 7580b55e27dSYuval Mintz /** 7591408cc1fSYuval Mintz * @brief qed_vf_get_igu_sb_id - Get the IGU SB ID for a given 7601408cc1fSYuval Mintz * sb_id. For VFs igu sbs don't have to be contiguous 7611408cc1fSYuval Mintz * 7621408cc1fSYuval Mintz * @param p_hwfn 7631408cc1fSYuval Mintz * @param sb_id 7641408cc1fSYuval Mintz * 7651408cc1fSYuval Mintz * @return INLINE u16 7661408cc1fSYuval Mintz */ 7671408cc1fSYuval Mintz u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id); 7680b55e27dSYuval Mintz 7690b55e27dSYuval Mintz /** 770dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_start - perform vport start for VF. 771dacd88d6SYuval Mintz * 772dacd88d6SYuval Mintz * @param p_hwfn 773dacd88d6SYuval Mintz * @param vport_id 774dacd88d6SYuval Mintz * @param mtu 775dacd88d6SYuval Mintz * @param inner_vlan_removal 776dacd88d6SYuval Mintz * @param tpa_mode 777dacd88d6SYuval Mintz * @param max_buffers_per_cqe, 778dacd88d6SYuval Mintz * @param only_untagged - default behavior regarding vlan acceptance 779dacd88d6SYuval Mintz * 780dacd88d6SYuval Mintz * @return enum _qed_status 781dacd88d6SYuval Mintz */ 782dacd88d6SYuval Mintz int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 783dacd88d6SYuval Mintz u8 vport_id, 784dacd88d6SYuval Mintz u16 mtu, 785dacd88d6SYuval Mintz u8 inner_vlan_removal, 786dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 78708feecd7SYuval Mintz u8 max_buffers_per_cqe, u8 only_untagged); 788dacd88d6SYuval Mintz 789dacd88d6SYuval Mintz /** 790dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_stop - stop the VF's vport 791dacd88d6SYuval Mintz * 792dacd88d6SYuval Mintz * @param p_hwfn 793dacd88d6SYuval Mintz * 794dacd88d6SYuval Mintz * @return enum _qed_status 795dacd88d6SYuval Mintz */ 796dacd88d6SYuval Mintz int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn); 797dacd88d6SYuval Mintz 798dacd88d6SYuval Mintz int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 799dacd88d6SYuval Mintz struct qed_filter_ucast *p_param); 800dacd88d6SYuval Mintz 801dacd88d6SYuval Mintz void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 802dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd); 803dacd88d6SYuval Mintz 804dacd88d6SYuval Mintz /** 8050b55e27dSYuval Mintz * @brief qed_vf_pf_int_cleanup - clean the SB of the VF 8060b55e27dSYuval Mintz * 8070b55e27dSYuval Mintz * @param p_hwfn 8080b55e27dSYuval Mintz * 8090b55e27dSYuval Mintz * @return enum _qed_status 8100b55e27dSYuval Mintz */ 8110b55e27dSYuval Mintz int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn); 81236558c3dSYuval Mintz 81336558c3dSYuval Mintz /** 81436558c3dSYuval Mintz * @brief - return the link params in a given bulletin board 81536558c3dSYuval Mintz * 81636558c3dSYuval Mintz * @param p_hwfn 81736558c3dSYuval Mintz * @param p_params - pointer to a struct to fill with link params 81836558c3dSYuval Mintz * @param p_bulletin 81936558c3dSYuval Mintz */ 82036558c3dSYuval Mintz void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 82136558c3dSYuval Mintz struct qed_mcp_link_params *p_params, 82236558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 82336558c3dSYuval Mintz 82436558c3dSYuval Mintz /** 82536558c3dSYuval Mintz * @brief - return the link state in a given bulletin board 82636558c3dSYuval Mintz * 82736558c3dSYuval Mintz * @param p_hwfn 82836558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link state 82936558c3dSYuval Mintz * @param p_bulletin 83036558c3dSYuval Mintz */ 83136558c3dSYuval Mintz void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 83236558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 83336558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 83436558c3dSYuval Mintz 83536558c3dSYuval Mintz /** 83636558c3dSYuval Mintz * @brief - return the link capabilities in a given bulletin board 83736558c3dSYuval Mintz * 83836558c3dSYuval Mintz * @param p_hwfn 83936558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link capabilities 84036558c3dSYuval Mintz * @param p_bulletin 84136558c3dSYuval Mintz */ 84236558c3dSYuval Mintz void __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 84336558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 84436558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 84536558c3dSYuval Mintz 84636558c3dSYuval Mintz void qed_iov_vf_task(struct work_struct *work); 8471408cc1fSYuval Mintz #else 84836558c3dSYuval Mintz static inline void qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 84936558c3dSYuval Mintz struct qed_mcp_link_params *params) 85036558c3dSYuval Mintz { 85136558c3dSYuval Mintz } 85236558c3dSYuval Mintz 85336558c3dSYuval Mintz static inline void qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 85436558c3dSYuval Mintz struct qed_mcp_link_state *link) 85536558c3dSYuval Mintz { 85636558c3dSYuval Mintz } 85736558c3dSYuval Mintz 85836558c3dSYuval Mintz static inline void 85936558c3dSYuval Mintz qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 86036558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps) 86136558c3dSYuval Mintz { 86236558c3dSYuval Mintz } 86336558c3dSYuval Mintz 8641408cc1fSYuval Mintz static inline void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs) 8651408cc1fSYuval Mintz { 8661408cc1fSYuval Mintz } 8671408cc1fSYuval Mintz 8681408cc1fSYuval Mintz static inline void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac) 8691408cc1fSYuval Mintz { 8701408cc1fSYuval Mintz } 8711408cc1fSYuval Mintz 8721408cc1fSYuval Mintz static inline void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn, 8731408cc1fSYuval Mintz u8 *num_vlan_filters) 8741408cc1fSYuval Mintz { 8751408cc1fSYuval Mintz } 8761408cc1fSYuval Mintz 877b0fca312SMintz, Yuval static inline void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, 878b0fca312SMintz, Yuval u8 *num_mac_filters) 879b0fca312SMintz, Yuval { 880b0fca312SMintz, Yuval } 881b0fca312SMintz, Yuval 882eff16960SYuval Mintz static inline bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac) 883eff16960SYuval Mintz { 884eff16960SYuval Mintz return false; 885eff16960SYuval Mintz } 886eff16960SYuval Mintz 8871408cc1fSYuval Mintz static inline void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn, 8881408cc1fSYuval Mintz u16 *fw_major, u16 *fw_minor, 8891408cc1fSYuval Mintz u16 *fw_rev, u16 *fw_eng) 8901408cc1fSYuval Mintz { 8911408cc1fSYuval Mintz } 8921408cc1fSYuval Mintz 8931408cc1fSYuval Mintz static inline int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn) 8941408cc1fSYuval Mintz { 8951408cc1fSYuval Mintz return -EINVAL; 8961408cc1fSYuval Mintz } 8971408cc1fSYuval Mintz 898dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 8993da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 900dacd88d6SYuval Mintz u16 bd_max_bytes, 901dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_adr, 902dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 903dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod) 904dacd88d6SYuval Mintz { 905dacd88d6SYuval Mintz return -EINVAL; 906dacd88d6SYuval Mintz } 907dacd88d6SYuval Mintz 908dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 9093da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 910dacd88d6SYuval Mintz dma_addr_t pbl_addr, 911dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell) 912dacd88d6SYuval Mintz { 913dacd88d6SYuval Mintz return -EINVAL; 914dacd88d6SYuval Mintz } 915dacd88d6SYuval Mintz 916dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 9173da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 9183da7a37aSMintz, Yuval bool cqe_completion) 919dacd88d6SYuval Mintz { 920dacd88d6SYuval Mintz return -EINVAL; 921dacd88d6SYuval Mintz } 922dacd88d6SYuval Mintz 9233da7a37aSMintz, Yuval static inline int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, 9243da7a37aSMintz, Yuval struct qed_queue_cid *p_cid) 925dacd88d6SYuval Mintz { 926dacd88d6SYuval Mintz return -EINVAL; 927dacd88d6SYuval Mintz } 928dacd88d6SYuval Mintz 929dacd88d6SYuval Mintz static inline int 930dacd88d6SYuval Mintz qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 931dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params) 932dacd88d6SYuval Mintz { 933dacd88d6SYuval Mintz return -EINVAL; 934dacd88d6SYuval Mintz } 935dacd88d6SYuval Mintz 9360b55e27dSYuval Mintz static inline int qed_vf_pf_reset(struct qed_hwfn *p_hwfn) 9370b55e27dSYuval Mintz { 9380b55e27dSYuval Mintz return -EINVAL; 9390b55e27dSYuval Mintz } 9400b55e27dSYuval Mintz 9410b55e27dSYuval Mintz static inline int qed_vf_pf_release(struct qed_hwfn *p_hwfn) 9420b55e27dSYuval Mintz { 9430b55e27dSYuval Mintz return -EINVAL; 9440b55e27dSYuval Mintz } 9450b55e27dSYuval Mintz 9461408cc1fSYuval Mintz static inline u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id) 9471408cc1fSYuval Mintz { 9481408cc1fSYuval Mintz return 0; 9491408cc1fSYuval Mintz } 9500b55e27dSYuval Mintz 951dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 952dacd88d6SYuval Mintz u8 vport_id, 953dacd88d6SYuval Mintz u16 mtu, 954dacd88d6SYuval Mintz u8 inner_vlan_removal, 955dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 95608feecd7SYuval Mintz u8 max_buffers_per_cqe, 95708feecd7SYuval Mintz u8 only_untagged) 958dacd88d6SYuval Mintz { 959dacd88d6SYuval Mintz return -EINVAL; 960dacd88d6SYuval Mintz } 961dacd88d6SYuval Mintz 962dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn) 963dacd88d6SYuval Mintz { 964dacd88d6SYuval Mintz return -EINVAL; 965dacd88d6SYuval Mintz } 966dacd88d6SYuval Mintz 967dacd88d6SYuval Mintz static inline int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 968dacd88d6SYuval Mintz struct qed_filter_ucast *p_param) 969dacd88d6SYuval Mintz { 970dacd88d6SYuval Mintz return -EINVAL; 971dacd88d6SYuval Mintz } 972dacd88d6SYuval Mintz 973dacd88d6SYuval Mintz static inline void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 974dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd) 975dacd88d6SYuval Mintz { 976dacd88d6SYuval Mintz } 977dacd88d6SYuval Mintz 9780b55e27dSYuval Mintz static inline int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn) 9790b55e27dSYuval Mintz { 9800b55e27dSYuval Mintz return -EINVAL; 9810b55e27dSYuval Mintz } 98236558c3dSYuval Mintz 98336558c3dSYuval Mintz static inline void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 98436558c3dSYuval Mintz struct qed_mcp_link_params 98536558c3dSYuval Mintz *p_params, 98636558c3dSYuval Mintz struct qed_bulletin_content 98736558c3dSYuval Mintz *p_bulletin) 98836558c3dSYuval Mintz { 98936558c3dSYuval Mintz } 99036558c3dSYuval Mintz 99136558c3dSYuval Mintz static inline void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 99236558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 99336558c3dSYuval Mintz struct qed_bulletin_content 99436558c3dSYuval Mintz *p_bulletin) 99536558c3dSYuval Mintz { 99636558c3dSYuval Mintz } 99736558c3dSYuval Mintz 99836558c3dSYuval Mintz static inline void 99936558c3dSYuval Mintz __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 100036558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 100136558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin) 100236558c3dSYuval Mintz { 100336558c3dSYuval Mintz } 100436558c3dSYuval Mintz 100536558c3dSYuval Mintz static inline void qed_iov_vf_task(struct work_struct *work) 100636558c3dSYuval Mintz { 100736558c3dSYuval Mintz } 10081408cc1fSYuval Mintz #endif 10091408cc1fSYuval Mintz 101032a47e72SYuval Mintz #endif 1011