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 669dacd88d6SYuval Mintz * @param cid - zero based within the VF 670dacd88d6SYuval Mintz * @param rx_queue_id - zero based within the VF 671dacd88d6SYuval Mintz * @param sb - VF status block for this queue 672dacd88d6SYuval Mintz * @param sb_index - Index within the status block 673dacd88d6SYuval Mintz * @param bd_max_bytes - maximum number of bytes per bd 674dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of bd chain 675dacd88d6SYuval Mintz * @param cqe_pbl_addr - physical address of pbl 676dacd88d6SYuval Mintz * @param cqe_pbl_size - pbl size 677dacd88d6SYuval Mintz * @param pp_prod - pointer to the producer to be 678dacd88d6SYuval Mintz * used in fastpath 679dacd88d6SYuval Mintz * 680dacd88d6SYuval Mintz * @return int 681dacd88d6SYuval Mintz */ 682dacd88d6SYuval Mintz int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 683dacd88d6SYuval Mintz u8 rx_queue_id, 684dacd88d6SYuval Mintz u16 sb, 685dacd88d6SYuval Mintz u8 sb_index, 686dacd88d6SYuval Mintz u16 bd_max_bytes, 687dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_addr, 688dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 689dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod); 690dacd88d6SYuval Mintz 691dacd88d6SYuval Mintz /** 692dacd88d6SYuval Mintz * @brief VF - start the TX queue by sending a message to the 693dacd88d6SYuval Mintz * PF. 694dacd88d6SYuval Mintz * 695dacd88d6SYuval Mintz * @param p_hwfn 696dacd88d6SYuval Mintz * @param tx_queue_id - zero based within the VF 697dacd88d6SYuval Mintz * @param sb - status block for this queue 698dacd88d6SYuval Mintz * @param sb_index - index within the status block 699dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of tx chain 700dacd88d6SYuval Mintz * @param pp_doorbell - pointer to address to which to 701dacd88d6SYuval Mintz * write the doorbell too.. 702dacd88d6SYuval Mintz * 703dacd88d6SYuval Mintz * @return int 704dacd88d6SYuval Mintz */ 705dacd88d6SYuval Mintz int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 706dacd88d6SYuval Mintz u16 tx_queue_id, 707dacd88d6SYuval Mintz u16 sb, 708dacd88d6SYuval Mintz u8 sb_index, 709dacd88d6SYuval Mintz dma_addr_t pbl_addr, 710dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell); 711dacd88d6SYuval Mintz 712dacd88d6SYuval Mintz /** 713dacd88d6SYuval Mintz * @brief VF - stop the RX queue by sending a message to the PF 714dacd88d6SYuval Mintz * 715dacd88d6SYuval Mintz * @param p_hwfn 716dacd88d6SYuval Mintz * @param rx_qid 717dacd88d6SYuval Mintz * @param cqe_completion 718dacd88d6SYuval Mintz * 719dacd88d6SYuval Mintz * @return int 720dacd88d6SYuval Mintz */ 721dacd88d6SYuval Mintz int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 722dacd88d6SYuval Mintz u16 rx_qid, bool cqe_completion); 723dacd88d6SYuval Mintz 724dacd88d6SYuval Mintz /** 725dacd88d6SYuval Mintz * @brief VF - stop the TX queue by sending a message to the PF 726dacd88d6SYuval Mintz * 727dacd88d6SYuval Mintz * @param p_hwfn 728dacd88d6SYuval Mintz * @param tx_qid 729dacd88d6SYuval Mintz * 730dacd88d6SYuval Mintz * @return int 731dacd88d6SYuval Mintz */ 732dacd88d6SYuval Mintz int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, u16 tx_qid); 733dacd88d6SYuval Mintz 734dacd88d6SYuval Mintz /** 735dacd88d6SYuval Mintz * @brief VF - send a vport update command 736dacd88d6SYuval Mintz * 737dacd88d6SYuval Mintz * @param p_hwfn 738dacd88d6SYuval Mintz * @param params 739dacd88d6SYuval Mintz * 740dacd88d6SYuval Mintz * @return int 741dacd88d6SYuval Mintz */ 742dacd88d6SYuval Mintz int qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 743dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params); 744dacd88d6SYuval Mintz 745dacd88d6SYuval Mintz /** 7460b55e27dSYuval Mintz * 7470b55e27dSYuval Mintz * @brief VF - send a close message to PF 7480b55e27dSYuval Mintz * 7490b55e27dSYuval Mintz * @param p_hwfn 7500b55e27dSYuval Mintz * 7510b55e27dSYuval Mintz * @return enum _qed_status 7520b55e27dSYuval Mintz */ 7530b55e27dSYuval Mintz int qed_vf_pf_reset(struct qed_hwfn *p_hwfn); 7540b55e27dSYuval Mintz 7550b55e27dSYuval Mintz /** 7560b55e27dSYuval Mintz * @brief VF - free vf`s memories 7570b55e27dSYuval Mintz * 7580b55e27dSYuval Mintz * @param p_hwfn 7590b55e27dSYuval Mintz * 7600b55e27dSYuval Mintz * @return enum _qed_status 7610b55e27dSYuval Mintz */ 7620b55e27dSYuval Mintz int qed_vf_pf_release(struct qed_hwfn *p_hwfn); 76336558c3dSYuval Mintz 7640b55e27dSYuval Mintz /** 7651408cc1fSYuval Mintz * @brief qed_vf_get_igu_sb_id - Get the IGU SB ID for a given 7661408cc1fSYuval Mintz * sb_id. For VFs igu sbs don't have to be contiguous 7671408cc1fSYuval Mintz * 7681408cc1fSYuval Mintz * @param p_hwfn 7691408cc1fSYuval Mintz * @param sb_id 7701408cc1fSYuval Mintz * 7711408cc1fSYuval Mintz * @return INLINE u16 7721408cc1fSYuval Mintz */ 7731408cc1fSYuval Mintz u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id); 7740b55e27dSYuval Mintz 7750b55e27dSYuval Mintz /** 776dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_start - perform vport start for VF. 777dacd88d6SYuval Mintz * 778dacd88d6SYuval Mintz * @param p_hwfn 779dacd88d6SYuval Mintz * @param vport_id 780dacd88d6SYuval Mintz * @param mtu 781dacd88d6SYuval Mintz * @param inner_vlan_removal 782dacd88d6SYuval Mintz * @param tpa_mode 783dacd88d6SYuval Mintz * @param max_buffers_per_cqe, 784dacd88d6SYuval Mintz * @param only_untagged - default behavior regarding vlan acceptance 785dacd88d6SYuval Mintz * 786dacd88d6SYuval Mintz * @return enum _qed_status 787dacd88d6SYuval Mintz */ 788dacd88d6SYuval Mintz int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 789dacd88d6SYuval Mintz u8 vport_id, 790dacd88d6SYuval Mintz u16 mtu, 791dacd88d6SYuval Mintz u8 inner_vlan_removal, 792dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 79308feecd7SYuval Mintz u8 max_buffers_per_cqe, u8 only_untagged); 794dacd88d6SYuval Mintz 795dacd88d6SYuval Mintz /** 796dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_stop - stop the VF's vport 797dacd88d6SYuval Mintz * 798dacd88d6SYuval Mintz * @param p_hwfn 799dacd88d6SYuval Mintz * 800dacd88d6SYuval Mintz * @return enum _qed_status 801dacd88d6SYuval Mintz */ 802dacd88d6SYuval Mintz int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn); 803dacd88d6SYuval Mintz 804dacd88d6SYuval Mintz int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 805dacd88d6SYuval Mintz struct qed_filter_ucast *p_param); 806dacd88d6SYuval Mintz 807dacd88d6SYuval Mintz void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 808dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd); 809dacd88d6SYuval Mintz 810dacd88d6SYuval Mintz /** 8110b55e27dSYuval Mintz * @brief qed_vf_pf_int_cleanup - clean the SB of the VF 8120b55e27dSYuval Mintz * 8130b55e27dSYuval Mintz * @param p_hwfn 8140b55e27dSYuval Mintz * 8150b55e27dSYuval Mintz * @return enum _qed_status 8160b55e27dSYuval Mintz */ 8170b55e27dSYuval Mintz int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn); 81836558c3dSYuval Mintz 81936558c3dSYuval Mintz /** 82036558c3dSYuval Mintz * @brief - return the link params in a given bulletin board 82136558c3dSYuval Mintz * 82236558c3dSYuval Mintz * @param p_hwfn 82336558c3dSYuval Mintz * @param p_params - pointer to a struct to fill with link params 82436558c3dSYuval Mintz * @param p_bulletin 82536558c3dSYuval Mintz */ 82636558c3dSYuval Mintz void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 82736558c3dSYuval Mintz struct qed_mcp_link_params *p_params, 82836558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 82936558c3dSYuval Mintz 83036558c3dSYuval Mintz /** 83136558c3dSYuval Mintz * @brief - return the link state in a given bulletin board 83236558c3dSYuval Mintz * 83336558c3dSYuval Mintz * @param p_hwfn 83436558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link state 83536558c3dSYuval Mintz * @param p_bulletin 83636558c3dSYuval Mintz */ 83736558c3dSYuval Mintz void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 83836558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 83936558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 84036558c3dSYuval Mintz 84136558c3dSYuval Mintz /** 84236558c3dSYuval Mintz * @brief - return the link capabilities in a given bulletin board 84336558c3dSYuval Mintz * 84436558c3dSYuval Mintz * @param p_hwfn 84536558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link capabilities 84636558c3dSYuval Mintz * @param p_bulletin 84736558c3dSYuval Mintz */ 84836558c3dSYuval Mintz void __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 84936558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 85036558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 85136558c3dSYuval Mintz 85236558c3dSYuval Mintz void qed_iov_vf_task(struct work_struct *work); 8531408cc1fSYuval Mintz #else 85436558c3dSYuval Mintz static inline void qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 85536558c3dSYuval Mintz struct qed_mcp_link_params *params) 85636558c3dSYuval Mintz { 85736558c3dSYuval Mintz } 85836558c3dSYuval Mintz 85936558c3dSYuval Mintz static inline void qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 86036558c3dSYuval Mintz struct qed_mcp_link_state *link) 86136558c3dSYuval Mintz { 86236558c3dSYuval Mintz } 86336558c3dSYuval Mintz 86436558c3dSYuval Mintz static inline void 86536558c3dSYuval Mintz qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 86636558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps) 86736558c3dSYuval Mintz { 86836558c3dSYuval Mintz } 86936558c3dSYuval Mintz 8701408cc1fSYuval Mintz static inline void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs) 8711408cc1fSYuval Mintz { 8721408cc1fSYuval Mintz } 8731408cc1fSYuval Mintz 8741408cc1fSYuval Mintz static inline void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac) 8751408cc1fSYuval Mintz { 8761408cc1fSYuval Mintz } 8771408cc1fSYuval Mintz 8781408cc1fSYuval Mintz static inline void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn, 8791408cc1fSYuval Mintz u8 *num_vlan_filters) 8801408cc1fSYuval Mintz { 8811408cc1fSYuval Mintz } 8821408cc1fSYuval Mintz 883b0fca312SMintz, Yuval static inline void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, 884b0fca312SMintz, Yuval u8 *num_mac_filters) 885b0fca312SMintz, Yuval { 886b0fca312SMintz, Yuval } 887b0fca312SMintz, Yuval 888eff16960SYuval Mintz static inline bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac) 889eff16960SYuval Mintz { 890eff16960SYuval Mintz return false; 891eff16960SYuval Mintz } 892eff16960SYuval Mintz 8931408cc1fSYuval Mintz static inline void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn, 8941408cc1fSYuval Mintz u16 *fw_major, u16 *fw_minor, 8951408cc1fSYuval Mintz u16 *fw_rev, u16 *fw_eng) 8961408cc1fSYuval Mintz { 8971408cc1fSYuval Mintz } 8981408cc1fSYuval Mintz 8991408cc1fSYuval Mintz static inline int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn) 9001408cc1fSYuval Mintz { 9011408cc1fSYuval Mintz return -EINVAL; 9021408cc1fSYuval Mintz } 9031408cc1fSYuval Mintz 904dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 905dacd88d6SYuval Mintz u8 rx_queue_id, 906dacd88d6SYuval Mintz u16 sb, 907dacd88d6SYuval Mintz u8 sb_index, 908dacd88d6SYuval Mintz u16 bd_max_bytes, 909dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_adr, 910dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 911dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod) 912dacd88d6SYuval Mintz { 913dacd88d6SYuval Mintz return -EINVAL; 914dacd88d6SYuval Mintz } 915dacd88d6SYuval Mintz 916dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 917dacd88d6SYuval Mintz u16 tx_queue_id, 918dacd88d6SYuval Mintz u16 sb, 919dacd88d6SYuval Mintz u8 sb_index, 920dacd88d6SYuval Mintz dma_addr_t pbl_addr, 921dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell) 922dacd88d6SYuval Mintz { 923dacd88d6SYuval Mintz return -EINVAL; 924dacd88d6SYuval Mintz } 925dacd88d6SYuval Mintz 926dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 927dacd88d6SYuval Mintz u16 rx_qid, bool cqe_completion) 928dacd88d6SYuval Mintz { 929dacd88d6SYuval Mintz return -EINVAL; 930dacd88d6SYuval Mintz } 931dacd88d6SYuval Mintz 932dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, u16 tx_qid) 933dacd88d6SYuval Mintz { 934dacd88d6SYuval Mintz return -EINVAL; 935dacd88d6SYuval Mintz } 936dacd88d6SYuval Mintz 937dacd88d6SYuval Mintz static inline int 938dacd88d6SYuval Mintz qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 939dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params) 940dacd88d6SYuval Mintz { 941dacd88d6SYuval Mintz return -EINVAL; 942dacd88d6SYuval Mintz } 943dacd88d6SYuval Mintz 9440b55e27dSYuval Mintz static inline int qed_vf_pf_reset(struct qed_hwfn *p_hwfn) 9450b55e27dSYuval Mintz { 9460b55e27dSYuval Mintz return -EINVAL; 9470b55e27dSYuval Mintz } 9480b55e27dSYuval Mintz 9490b55e27dSYuval Mintz static inline int qed_vf_pf_release(struct qed_hwfn *p_hwfn) 9500b55e27dSYuval Mintz { 9510b55e27dSYuval Mintz return -EINVAL; 9520b55e27dSYuval Mintz } 9530b55e27dSYuval Mintz 9541408cc1fSYuval Mintz static inline u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id) 9551408cc1fSYuval Mintz { 9561408cc1fSYuval Mintz return 0; 9571408cc1fSYuval Mintz } 9580b55e27dSYuval Mintz 959dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 960dacd88d6SYuval Mintz u8 vport_id, 961dacd88d6SYuval Mintz u16 mtu, 962dacd88d6SYuval Mintz u8 inner_vlan_removal, 963dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 96408feecd7SYuval Mintz u8 max_buffers_per_cqe, 96508feecd7SYuval Mintz u8 only_untagged) 966dacd88d6SYuval Mintz { 967dacd88d6SYuval Mintz return -EINVAL; 968dacd88d6SYuval Mintz } 969dacd88d6SYuval Mintz 970dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn) 971dacd88d6SYuval Mintz { 972dacd88d6SYuval Mintz return -EINVAL; 973dacd88d6SYuval Mintz } 974dacd88d6SYuval Mintz 975dacd88d6SYuval Mintz static inline int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 976dacd88d6SYuval Mintz struct qed_filter_ucast *p_param) 977dacd88d6SYuval Mintz { 978dacd88d6SYuval Mintz return -EINVAL; 979dacd88d6SYuval Mintz } 980dacd88d6SYuval Mintz 981dacd88d6SYuval Mintz static inline void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 982dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd) 983dacd88d6SYuval Mintz { 984dacd88d6SYuval Mintz } 985dacd88d6SYuval Mintz 9860b55e27dSYuval Mintz static inline int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn) 9870b55e27dSYuval Mintz { 9880b55e27dSYuval Mintz return -EINVAL; 9890b55e27dSYuval Mintz } 99036558c3dSYuval Mintz 99136558c3dSYuval Mintz static inline void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 99236558c3dSYuval Mintz struct qed_mcp_link_params 99336558c3dSYuval Mintz *p_params, 99436558c3dSYuval Mintz struct qed_bulletin_content 99536558c3dSYuval Mintz *p_bulletin) 99636558c3dSYuval Mintz { 99736558c3dSYuval Mintz } 99836558c3dSYuval Mintz 99936558c3dSYuval Mintz static inline void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 100036558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 100136558c3dSYuval Mintz struct qed_bulletin_content 100236558c3dSYuval Mintz *p_bulletin) 100336558c3dSYuval Mintz { 100436558c3dSYuval Mintz } 100536558c3dSYuval Mintz 100636558c3dSYuval Mintz static inline void 100736558c3dSYuval Mintz __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 100836558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 100936558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin) 101036558c3dSYuval Mintz { 101136558c3dSYuval Mintz } 101236558c3dSYuval Mintz 101336558c3dSYuval Mintz static inline void qed_iov_vf_task(struct work_struct *work) 101436558c3dSYuval Mintz { 101536558c3dSYuval Mintz } 10161408cc1fSYuval Mintz #endif 10171408cc1fSYuval Mintz 101832a47e72SYuval Mintz #endif 1019