132a47e72SYuval Mintz /* QLogic qed NIC Driver 2e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 332a47e72SYuval Mintz * 4e8f1cb50SMintz, Yuval * This software is available to you under a choice of one of two 5e8f1cb50SMintz, Yuval * licenses. You may choose to be licensed under the terms of the GNU 6e8f1cb50SMintz, Yuval * General Public License (GPL) Version 2, available from the file 7e8f1cb50SMintz, Yuval * COPYING in the main directory of this source tree, or the 8e8f1cb50SMintz, Yuval * OpenIB.org BSD license below: 9e8f1cb50SMintz, Yuval * 10e8f1cb50SMintz, Yuval * Redistribution and use in source and binary forms, with or 11e8f1cb50SMintz, Yuval * without modification, are permitted provided that the following 12e8f1cb50SMintz, Yuval * conditions are met: 13e8f1cb50SMintz, Yuval * 14e8f1cb50SMintz, Yuval * - Redistributions of source code must retain the above 15e8f1cb50SMintz, Yuval * copyright notice, this list of conditions and the following 16e8f1cb50SMintz, Yuval * disclaimer. 17e8f1cb50SMintz, Yuval * 18e8f1cb50SMintz, Yuval * - Redistributions in binary form must reproduce the above 19e8f1cb50SMintz, Yuval * copyright notice, this list of conditions and the following 20e8f1cb50SMintz, Yuval * disclaimer in the documentation and /or other materials 21e8f1cb50SMintz, Yuval * provided with the distribution. 22e8f1cb50SMintz, Yuval * 23e8f1cb50SMintz, Yuval * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24e8f1cb50SMintz, Yuval * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25e8f1cb50SMintz, Yuval * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26e8f1cb50SMintz, Yuval * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27e8f1cb50SMintz, Yuval * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28e8f1cb50SMintz, Yuval * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29e8f1cb50SMintz, Yuval * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30e8f1cb50SMintz, Yuval * SOFTWARE. 3132a47e72SYuval Mintz */ 3232a47e72SYuval Mintz 3332a47e72SYuval Mintz #ifndef _QED_VF_H 3432a47e72SYuval Mintz #define _QED_VF_H 3532a47e72SYuval Mintz 36dacd88d6SYuval Mintz #include "qed_l2.h" 3736558c3dSYuval Mintz #include "qed_mcp.h" 38dacd88d6SYuval Mintz 39dacd88d6SYuval Mintz #define T_ETH_INDIRECTION_TABLE_SIZE 128 40dacd88d6SYuval Mintz #define T_ETH_RSS_KEY_SIZE 10 41dacd88d6SYuval Mintz 421408cc1fSYuval Mintz struct vf_pf_resc_request { 431408cc1fSYuval Mintz u8 num_rxqs; 441408cc1fSYuval Mintz u8 num_txqs; 451408cc1fSYuval Mintz u8 num_sbs; 461408cc1fSYuval Mintz u8 num_mac_filters; 471408cc1fSYuval Mintz u8 num_vlan_filters; 481408cc1fSYuval Mintz u8 num_mc_filters; 491408cc1fSYuval Mintz u16 padding; 501408cc1fSYuval Mintz }; 511408cc1fSYuval Mintz 521408cc1fSYuval Mintz struct hw_sb_info { 531408cc1fSYuval Mintz u16 hw_sb_id; 541408cc1fSYuval Mintz u8 sb_qid; 551408cc1fSYuval Mintz u8 padding[5]; 561408cc1fSYuval Mintz }; 571408cc1fSYuval Mintz 58dacd88d6SYuval Mintz #define TLV_BUFFER_SIZE 1024 59dacd88d6SYuval Mintz 6037bff2b9SYuval Mintz enum { 6137bff2b9SYuval Mintz PFVF_STATUS_WAITING, 6237bff2b9SYuval Mintz PFVF_STATUS_SUCCESS, 6337bff2b9SYuval Mintz PFVF_STATUS_FAILURE, 6437bff2b9SYuval Mintz PFVF_STATUS_NOT_SUPPORTED, 6537bff2b9SYuval Mintz PFVF_STATUS_NO_RESOURCE, 6637bff2b9SYuval Mintz PFVF_STATUS_FORCED, 677eff82b0SYuval Mintz PFVF_STATUS_MALICIOUS, 6837bff2b9SYuval Mintz }; 6937bff2b9SYuval Mintz 7037bff2b9SYuval Mintz /* vf pf channel tlvs */ 7137bff2b9SYuval Mintz /* general tlv header (used for both vf->pf request and pf->vf response) */ 7237bff2b9SYuval Mintz struct channel_tlv { 7337bff2b9SYuval Mintz u16 type; 7437bff2b9SYuval Mintz u16 length; 7537bff2b9SYuval Mintz }; 7637bff2b9SYuval Mintz 7737bff2b9SYuval Mintz /* header of first vf->pf tlv carries the offset used to calculate reponse 7837bff2b9SYuval Mintz * buffer address 7937bff2b9SYuval Mintz */ 8037bff2b9SYuval Mintz struct vfpf_first_tlv { 8137bff2b9SYuval Mintz struct channel_tlv tl; 8237bff2b9SYuval Mintz u32 padding; 8337bff2b9SYuval Mintz u64 reply_address; 8437bff2b9SYuval Mintz }; 8537bff2b9SYuval Mintz 8637bff2b9SYuval Mintz /* header of pf->vf tlvs, carries the status of handling the request */ 8737bff2b9SYuval Mintz struct pfvf_tlv { 8837bff2b9SYuval Mintz struct channel_tlv tl; 8937bff2b9SYuval Mintz u8 status; 9037bff2b9SYuval Mintz u8 padding[3]; 9137bff2b9SYuval Mintz }; 9237bff2b9SYuval Mintz 9337bff2b9SYuval Mintz /* response tlv used for most tlvs */ 9437bff2b9SYuval Mintz struct pfvf_def_resp_tlv { 9537bff2b9SYuval Mintz struct pfvf_tlv hdr; 9637bff2b9SYuval Mintz }; 9737bff2b9SYuval Mintz 9837bff2b9SYuval Mintz /* used to terminate and pad a tlv list */ 9937bff2b9SYuval Mintz struct channel_list_end_tlv { 10037bff2b9SYuval Mintz struct channel_tlv tl; 10137bff2b9SYuval Mintz u8 padding[4]; 10237bff2b9SYuval Mintz }; 10337bff2b9SYuval Mintz 1041408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX (0) 1051408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_WINDOWS (1) 1061408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_ESX (2) 1071408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_SOLARIS (3) 1081408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX_USERSPACE (4) 1091408cc1fSYuval Mintz 1101408cc1fSYuval Mintz struct vfpf_acquire_tlv { 1111408cc1fSYuval Mintz struct vfpf_first_tlv first_tlv; 1121408cc1fSYuval Mintz 1131408cc1fSYuval Mintz struct vf_pf_vfdev_info { 114a044df83SYuval Mintz #define VFPF_ACQUIRE_CAP_PRE_FP_HSI (1 << 0) /* VF pre-FP hsi version */ 1151408cc1fSYuval Mintz #define VFPF_ACQUIRE_CAP_100G (1 << 1) /* VF can support 100g */ 1161408cc1fSYuval Mintz u64 capabilities; 1171408cc1fSYuval Mintz u8 fw_major; 1181408cc1fSYuval Mintz u8 fw_minor; 1191408cc1fSYuval Mintz u8 fw_revision; 1201408cc1fSYuval Mintz u8 fw_engineering; 1211408cc1fSYuval Mintz u32 driver_version; 1221408cc1fSYuval Mintz u16 opaque_fid; /* ME register value */ 1231408cc1fSYuval Mintz u8 os_type; /* VFPF_ACQUIRE_OS_* value */ 1241fe614d1SYuval Mintz u8 eth_fp_hsi_major; 1251fe614d1SYuval Mintz u8 eth_fp_hsi_minor; 1261fe614d1SYuval Mintz u8 padding[3]; 1271408cc1fSYuval Mintz } vfdev_info; 1281408cc1fSYuval Mintz 1291408cc1fSYuval Mintz struct vf_pf_resc_request resc_request; 1301408cc1fSYuval Mintz 1311408cc1fSYuval Mintz u64 bulletin_addr; 1321408cc1fSYuval Mintz u32 bulletin_size; 1331408cc1fSYuval Mintz u32 padding; 1341408cc1fSYuval Mintz }; 1351408cc1fSYuval Mintz 136dacd88d6SYuval Mintz /* receive side scaling tlv */ 137dacd88d6SYuval Mintz struct vfpf_vport_update_rss_tlv { 138dacd88d6SYuval Mintz struct channel_tlv tl; 139dacd88d6SYuval Mintz 140dacd88d6SYuval Mintz u8 update_rss_flags; 141dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CONFIG_FLAG BIT(0) 142dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CAPS_FLAG BIT(1) 143dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_IND_TABLE_FLAG BIT(2) 144dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_KEY_FLAG BIT(3) 145dacd88d6SYuval Mintz 146dacd88d6SYuval Mintz u8 rss_enable; 147dacd88d6SYuval Mintz u8 rss_caps; 148dacd88d6SYuval Mintz u8 rss_table_size_log; /* The table size is 2 ^ rss_table_size_log */ 149dacd88d6SYuval Mintz u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE]; 150dacd88d6SYuval Mintz u32 rss_key[T_ETH_RSS_KEY_SIZE]; 151dacd88d6SYuval Mintz }; 152dacd88d6SYuval Mintz 1531408cc1fSYuval Mintz struct pfvf_storm_stats { 1541408cc1fSYuval Mintz u32 address; 1551408cc1fSYuval Mintz u32 len; 1561408cc1fSYuval Mintz }; 1571408cc1fSYuval Mintz 1581408cc1fSYuval Mintz struct pfvf_stats_info { 1591408cc1fSYuval Mintz struct pfvf_storm_stats mstats; 1601408cc1fSYuval Mintz struct pfvf_storm_stats pstats; 1611408cc1fSYuval Mintz struct pfvf_storm_stats tstats; 1621408cc1fSYuval Mintz struct pfvf_storm_stats ustats; 1631408cc1fSYuval Mintz }; 1641408cc1fSYuval Mintz 1651408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv { 1661408cc1fSYuval Mintz struct pfvf_tlv hdr; 1671408cc1fSYuval Mintz 1681408cc1fSYuval Mintz struct pf_vf_pfdev_info { 1691408cc1fSYuval Mintz u32 chip_num; 1701408cc1fSYuval Mintz u32 mfw_ver; 1711408cc1fSYuval Mintz 1721408cc1fSYuval Mintz u16 fw_major; 1731408cc1fSYuval Mintz u16 fw_minor; 1741408cc1fSYuval Mintz u16 fw_rev; 1751408cc1fSYuval Mintz u16 fw_eng; 1761408cc1fSYuval Mintz 1771408cc1fSYuval Mintz u64 capabilities; 1781408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED BIT(0) 1791408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_100G BIT(1) /* If set, 100g PF */ 1801408cc1fSYuval Mintz /* There are old PF versions where the PF might mistakenly override the sanity 1811408cc1fSYuval Mintz * mechanism [version-based] and allow a VF that can't be supported to pass 1821408cc1fSYuval Mintz * the acquisition phase. 1831408cc1fSYuval Mintz * To overcome this, PFs now indicate that they're past that point and the new 1841408cc1fSYuval Mintz * VFs would fail probe on the older PFs that fail to do so. 1851408cc1fSYuval Mintz */ 1861408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE BIT(2) 1871408cc1fSYuval Mintz 1881408cc1fSYuval Mintz u16 db_size; 1891408cc1fSYuval Mintz u8 indices_per_sb; 1901408cc1fSYuval Mintz u8 os_type; 1911408cc1fSYuval Mintz 1921408cc1fSYuval Mintz /* These should match the PF's qed_dev values */ 1931408cc1fSYuval Mintz u16 chip_rev; 1941408cc1fSYuval Mintz u8 dev_type; 1951408cc1fSYuval Mintz 1961408cc1fSYuval Mintz u8 padding; 1971408cc1fSYuval Mintz 1981408cc1fSYuval Mintz struct pfvf_stats_info stats_info; 1991408cc1fSYuval Mintz 2001408cc1fSYuval Mintz u8 port_mac[ETH_ALEN]; 2011fe614d1SYuval Mintz 2021fe614d1SYuval Mintz /* It's possible PF had to configure an older fastpath HSI 2031fe614d1SYuval Mintz * [in case VF is newer than PF]. This is communicated back 2041fe614d1SYuval Mintz * to the VF. It can also be used in case of error due to 2051fe614d1SYuval Mintz * non-matching versions to shed light in VF about failure. 2061fe614d1SYuval Mintz */ 2071fe614d1SYuval Mintz u8 major_fp_hsi; 2081fe614d1SYuval Mintz u8 minor_fp_hsi; 2091408cc1fSYuval Mintz } pfdev_info; 2101408cc1fSYuval Mintz 2111408cc1fSYuval Mintz struct pf_vf_resc { 2121408cc1fSYuval Mintz #define PFVF_MAX_QUEUES_PER_VF 16 2131408cc1fSYuval Mintz #define PFVF_MAX_SBS_PER_VF 16 2141408cc1fSYuval Mintz struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF]; 2151408cc1fSYuval Mintz u8 hw_qid[PFVF_MAX_QUEUES_PER_VF]; 2161408cc1fSYuval Mintz u8 cid[PFVF_MAX_QUEUES_PER_VF]; 2171408cc1fSYuval Mintz 2181408cc1fSYuval Mintz u8 num_rxqs; 2191408cc1fSYuval Mintz u8 num_txqs; 2201408cc1fSYuval Mintz u8 num_sbs; 2211408cc1fSYuval Mintz u8 num_mac_filters; 2221408cc1fSYuval Mintz u8 num_vlan_filters; 2231408cc1fSYuval Mintz u8 num_mc_filters; 2241408cc1fSYuval Mintz u8 padding[2]; 2251408cc1fSYuval Mintz } resc; 2261408cc1fSYuval Mintz 2271408cc1fSYuval Mintz u32 bulletin_size; 2281408cc1fSYuval Mintz u32 padding; 2291408cc1fSYuval Mintz }; 2301408cc1fSYuval Mintz 231dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv { 232dacd88d6SYuval Mintz struct pfvf_tlv hdr; 233dacd88d6SYuval Mintz u32 offset; /* offset to consumer/producer of queue */ 234dacd88d6SYuval Mintz u8 padding[4]; 235dacd88d6SYuval Mintz }; 236dacd88d6SYuval Mintz 237dacd88d6SYuval Mintz /* Setup Queue */ 238dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv { 239dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 240dacd88d6SYuval Mintz 241dacd88d6SYuval Mintz /* physical addresses */ 242dacd88d6SYuval Mintz u64 rxq_addr; 243dacd88d6SYuval Mintz u64 deprecated_sge_addr; 244dacd88d6SYuval Mintz u64 cqe_pbl_addr; 245dacd88d6SYuval Mintz 246dacd88d6SYuval Mintz u16 cqe_pbl_size; 247dacd88d6SYuval Mintz u16 hw_sb; 248dacd88d6SYuval Mintz u16 rx_qid; 249dacd88d6SYuval Mintz u16 hc_rate; /* desired interrupts per sec. */ 250dacd88d6SYuval Mintz 251dacd88d6SYuval Mintz u16 bd_max_bytes; 252dacd88d6SYuval Mintz u16 stat_id; 253dacd88d6SYuval Mintz u8 sb_index; 254dacd88d6SYuval Mintz u8 padding[3]; 255dacd88d6SYuval Mintz }; 256dacd88d6SYuval Mintz 257dacd88d6SYuval Mintz struct vfpf_start_txq_tlv { 258dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 259dacd88d6SYuval Mintz 260dacd88d6SYuval Mintz /* physical addresses */ 261dacd88d6SYuval Mintz u64 pbl_addr; 262dacd88d6SYuval Mintz u16 pbl_size; 263dacd88d6SYuval Mintz u16 stat_id; 264dacd88d6SYuval Mintz u16 tx_qid; 265dacd88d6SYuval Mintz u16 hw_sb; 266dacd88d6SYuval Mintz 267dacd88d6SYuval Mintz u32 flags; /* VFPF_QUEUE_FLG_X flags */ 268dacd88d6SYuval Mintz u16 hc_rate; /* desired interrupts per sec. */ 269dacd88d6SYuval Mintz u8 sb_index; 270dacd88d6SYuval Mintz u8 padding[3]; 271dacd88d6SYuval Mintz }; 272dacd88d6SYuval Mintz 273dacd88d6SYuval Mintz /* Stop RX Queue */ 274dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv { 275dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 276dacd88d6SYuval Mintz 277dacd88d6SYuval Mintz u16 rx_qid; 2784c4fa793SMintz, Yuval 2794c4fa793SMintz, Yuval /* this field is deprecated and should *always* be set to '1' */ 280dacd88d6SYuval Mintz u8 num_rxqs; 281dacd88d6SYuval Mintz u8 cqe_completion; 282dacd88d6SYuval Mintz u8 padding[4]; 283dacd88d6SYuval Mintz }; 284dacd88d6SYuval Mintz 285dacd88d6SYuval Mintz /* Stop TX Queues */ 286dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv { 287dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 288dacd88d6SYuval Mintz 289dacd88d6SYuval Mintz u16 tx_qid; 2904c4fa793SMintz, Yuval 2914c4fa793SMintz, Yuval /* this field is deprecated and should *always* be set to '1' */ 292dacd88d6SYuval Mintz u8 num_txqs; 293dacd88d6SYuval Mintz u8 padding[5]; 294dacd88d6SYuval Mintz }; 295dacd88d6SYuval Mintz 296dacd88d6SYuval Mintz struct vfpf_update_rxq_tlv { 297dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 298dacd88d6SYuval Mintz 299dacd88d6SYuval Mintz u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF]; 300dacd88d6SYuval Mintz 301dacd88d6SYuval Mintz u16 rx_qid; 302dacd88d6SYuval Mintz u8 num_rxqs; 303dacd88d6SYuval Mintz u8 flags; 304dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG BIT(0) 305dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG BIT(1) 306dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG BIT(2) 307dacd88d6SYuval Mintz 308dacd88d6SYuval Mintz u8 padding[4]; 309dacd88d6SYuval Mintz }; 310dacd88d6SYuval Mintz 311dacd88d6SYuval Mintz /* Set Queue Filters */ 312dacd88d6SYuval Mintz struct vfpf_q_mac_vlan_filter { 313dacd88d6SYuval Mintz u32 flags; 314dacd88d6SYuval Mintz #define VFPF_Q_FILTER_DEST_MAC_VALID 0x01 315dacd88d6SYuval Mintz #define VFPF_Q_FILTER_VLAN_TAG_VALID 0x02 316dacd88d6SYuval Mintz #define VFPF_Q_FILTER_SET_MAC 0x100 /* set/clear */ 317dacd88d6SYuval Mintz 318dacd88d6SYuval Mintz u8 mac[ETH_ALEN]; 319dacd88d6SYuval Mintz u16 vlan_tag; 320dacd88d6SYuval Mintz 321dacd88d6SYuval Mintz u8 padding[4]; 322dacd88d6SYuval Mintz }; 323dacd88d6SYuval Mintz 324dacd88d6SYuval Mintz /* Start a vport */ 325dacd88d6SYuval Mintz struct vfpf_vport_start_tlv { 326dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 327dacd88d6SYuval Mintz 328dacd88d6SYuval Mintz u64 sb_addr[PFVF_MAX_SBS_PER_VF]; 329dacd88d6SYuval Mintz 330dacd88d6SYuval Mintz u32 tpa_mode; 331dacd88d6SYuval Mintz u16 dep1; 332dacd88d6SYuval Mintz u16 mtu; 333dacd88d6SYuval Mintz 334dacd88d6SYuval Mintz u8 vport_id; 335dacd88d6SYuval Mintz u8 inner_vlan_removal; 336dacd88d6SYuval Mintz 337dacd88d6SYuval Mintz u8 only_untagged; 338dacd88d6SYuval Mintz u8 max_buffers_per_cqe; 339dacd88d6SYuval Mintz 340dacd88d6SYuval Mintz u8 padding[4]; 341dacd88d6SYuval Mintz }; 342dacd88d6SYuval Mintz 343dacd88d6SYuval Mintz /* Extended tlvs - need to add rss, mcast, accept mode tlvs */ 344dacd88d6SYuval Mintz struct vfpf_vport_update_activate_tlv { 345dacd88d6SYuval Mintz struct channel_tlv tl; 346dacd88d6SYuval Mintz u8 update_rx; 347dacd88d6SYuval Mintz u8 update_tx; 348dacd88d6SYuval Mintz u8 active_rx; 349dacd88d6SYuval Mintz u8 active_tx; 350dacd88d6SYuval Mintz }; 351dacd88d6SYuval Mintz 35217b235c1SYuval Mintz struct vfpf_vport_update_tx_switch_tlv { 35317b235c1SYuval Mintz struct channel_tlv tl; 35417b235c1SYuval Mintz u8 tx_switching; 35517b235c1SYuval Mintz u8 padding[3]; 35617b235c1SYuval Mintz }; 35717b235c1SYuval Mintz 35817b235c1SYuval Mintz struct vfpf_vport_update_vlan_strip_tlv { 35917b235c1SYuval Mintz struct channel_tlv tl; 36017b235c1SYuval Mintz u8 remove_vlan; 36117b235c1SYuval Mintz u8 padding[3]; 36217b235c1SYuval Mintz }; 36317b235c1SYuval Mintz 364dacd88d6SYuval Mintz struct vfpf_vport_update_mcast_bin_tlv { 365dacd88d6SYuval Mintz struct channel_tlv tl; 366dacd88d6SYuval Mintz u8 padding[4]; 367dacd88d6SYuval Mintz 368dacd88d6SYuval Mintz u64 bins[8]; 369dacd88d6SYuval Mintz }; 370dacd88d6SYuval Mintz 371dacd88d6SYuval Mintz struct vfpf_vport_update_accept_param_tlv { 372dacd88d6SYuval Mintz struct channel_tlv tl; 373dacd88d6SYuval Mintz u8 update_rx_mode; 374dacd88d6SYuval Mintz u8 update_tx_mode; 375dacd88d6SYuval Mintz u8 rx_accept_filter; 376dacd88d6SYuval Mintz u8 tx_accept_filter; 377dacd88d6SYuval Mintz }; 378dacd88d6SYuval Mintz 37917b235c1SYuval Mintz struct vfpf_vport_update_accept_any_vlan_tlv { 38017b235c1SYuval Mintz struct channel_tlv tl; 38117b235c1SYuval Mintz u8 update_accept_any_vlan_flg; 38217b235c1SYuval Mintz u8 accept_any_vlan; 38317b235c1SYuval Mintz 38417b235c1SYuval Mintz u8 padding[2]; 38517b235c1SYuval Mintz }; 38617b235c1SYuval Mintz 38717b235c1SYuval Mintz struct vfpf_vport_update_sge_tpa_tlv { 38817b235c1SYuval Mintz struct channel_tlv tl; 38917b235c1SYuval Mintz 39017b235c1SYuval Mintz u16 sge_tpa_flags; 39117b235c1SYuval Mintz #define VFPF_TPA_IPV4_EN_FLAG BIT(0) 39217b235c1SYuval Mintz #define VFPF_TPA_IPV6_EN_FLAG BIT(1) 39317b235c1SYuval Mintz #define VFPF_TPA_PKT_SPLIT_FLAG BIT(2) 39417b235c1SYuval Mintz #define VFPF_TPA_HDR_DATA_SPLIT_FLAG BIT(3) 39517b235c1SYuval Mintz #define VFPF_TPA_GRO_CONSIST_FLAG BIT(4) 39617b235c1SYuval Mintz 39717b235c1SYuval Mintz u8 update_sge_tpa_flags; 39817b235c1SYuval Mintz #define VFPF_UPDATE_SGE_DEPRECATED_FLAG BIT(0) 39917b235c1SYuval Mintz #define VFPF_UPDATE_TPA_EN_FLAG BIT(1) 40017b235c1SYuval Mintz #define VFPF_UPDATE_TPA_PARAM_FLAG BIT(2) 40117b235c1SYuval Mintz 40217b235c1SYuval Mintz u8 max_buffers_per_cqe; 40317b235c1SYuval Mintz 40417b235c1SYuval Mintz u16 deprecated_sge_buff_size; 40517b235c1SYuval Mintz u16 tpa_max_size; 40617b235c1SYuval Mintz u16 tpa_min_size_to_start; 40717b235c1SYuval Mintz u16 tpa_min_size_to_cont; 40817b235c1SYuval Mintz 40917b235c1SYuval Mintz u8 tpa_max_aggs_num; 41017b235c1SYuval Mintz u8 padding[7]; 41117b235c1SYuval Mintz }; 41217b235c1SYuval Mintz 413dacd88d6SYuval Mintz /* Primary tlv as a header for various extended tlvs for 414dacd88d6SYuval Mintz * various functionalities in vport update ramrod. 415dacd88d6SYuval Mintz */ 416dacd88d6SYuval Mintz struct vfpf_vport_update_tlv { 417dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 418dacd88d6SYuval Mintz }; 419dacd88d6SYuval Mintz 420dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv { 421dacd88d6SYuval Mintz struct vfpf_first_tlv first_tlv; 422dacd88d6SYuval Mintz 423dacd88d6SYuval Mintz u8 opcode; 424dacd88d6SYuval Mintz u8 type; 425dacd88d6SYuval Mintz 426dacd88d6SYuval Mintz u8 mac[ETH_ALEN]; 427dacd88d6SYuval Mintz 428dacd88d6SYuval Mintz u16 vlan; 429dacd88d6SYuval Mintz u16 padding[3]; 430dacd88d6SYuval Mintz }; 431dacd88d6SYuval Mintz 43232a47e72SYuval Mintz struct tlv_buffer_size { 43332a47e72SYuval Mintz u8 tlv_buffer[TLV_BUFFER_SIZE]; 43432a47e72SYuval Mintz }; 43532a47e72SYuval Mintz 43632a47e72SYuval Mintz union vfpf_tlvs { 43737bff2b9SYuval Mintz struct vfpf_first_tlv first_tlv; 4381408cc1fSYuval Mintz struct vfpf_acquire_tlv acquire; 439dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv start_rxq; 440dacd88d6SYuval Mintz struct vfpf_start_txq_tlv start_txq; 441dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv stop_rxqs; 442dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv stop_txqs; 44317b235c1SYuval Mintz struct vfpf_update_rxq_tlv update_rxq; 444dacd88d6SYuval Mintz struct vfpf_vport_start_tlv start_vport; 445dacd88d6SYuval Mintz struct vfpf_vport_update_tlv vport_update; 446dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv ucast_filter; 44737bff2b9SYuval Mintz struct channel_list_end_tlv list_end; 44832a47e72SYuval Mintz struct tlv_buffer_size tlv_buf_size; 44932a47e72SYuval Mintz }; 45032a47e72SYuval Mintz 45132a47e72SYuval Mintz union pfvf_tlvs { 45237bff2b9SYuval Mintz struct pfvf_def_resp_tlv default_resp; 4531408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv acquire_resp; 45432a47e72SYuval Mintz struct tlv_buffer_size tlv_buf_size; 455dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv queue_start; 45632a47e72SYuval Mintz }; 45732a47e72SYuval Mintz 45808feecd7SYuval Mintz enum qed_bulletin_bit { 459eff16960SYuval Mintz /* Alert the VF that a forced MAC was set by the PF */ 460eff16960SYuval Mintz MAC_ADDR_FORCED = 0, 46108feecd7SYuval Mintz /* Alert the VF that a forced VLAN was set by the PF */ 46208feecd7SYuval Mintz VLAN_ADDR_FORCED = 2, 46308feecd7SYuval Mintz 46408feecd7SYuval Mintz /* Indicate that `default_only_untagged' contains actual data */ 46508feecd7SYuval Mintz VFPF_BULLETIN_UNTAGGED_DEFAULT = 3, 46608feecd7SYuval Mintz VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4, 46708feecd7SYuval Mintz 468eff16960SYuval Mintz /* Alert the VF that suggested mac was sent by the PF. 469eff16960SYuval Mintz * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set. 470eff16960SYuval Mintz */ 471eff16960SYuval Mintz VFPF_BULLETIN_MAC_ADDR = 5 47208feecd7SYuval Mintz }; 47308feecd7SYuval Mintz 47432a47e72SYuval Mintz struct qed_bulletin_content { 47532a47e72SYuval Mintz /* crc of structure to ensure is not in mid-update */ 47632a47e72SYuval Mintz u32 crc; 47732a47e72SYuval Mintz 47832a47e72SYuval Mintz u32 version; 47932a47e72SYuval Mintz 48032a47e72SYuval Mintz /* bitmap indicating which fields hold valid values */ 48132a47e72SYuval Mintz u64 valid_bitmap; 48236558c3dSYuval Mintz 48336558c3dSYuval Mintz /* used for MAC_ADDR or MAC_ADDR_FORCED */ 48436558c3dSYuval Mintz u8 mac[ETH_ALEN]; 48536558c3dSYuval Mintz 48636558c3dSYuval Mintz /* If valid, 1 => only untagged Rx if no vlan is configured */ 48736558c3dSYuval Mintz u8 default_only_untagged; 48836558c3dSYuval Mintz u8 padding; 48936558c3dSYuval Mintz 49036558c3dSYuval Mintz /* The following is a 'copy' of qed_mcp_link_state, 49136558c3dSYuval Mintz * qed_mcp_link_params and qed_mcp_link_capabilities. Since it's 49236558c3dSYuval Mintz * possible the structs will increase further along the road we cannot 49336558c3dSYuval Mintz * have it here; Instead we need to have all of its fields. 49436558c3dSYuval Mintz */ 49536558c3dSYuval Mintz u8 req_autoneg; 49636558c3dSYuval Mintz u8 req_autoneg_pause; 49736558c3dSYuval Mintz u8 req_forced_rx; 49836558c3dSYuval Mintz u8 req_forced_tx; 49936558c3dSYuval Mintz u8 padding2[4]; 50036558c3dSYuval Mintz 50136558c3dSYuval Mintz u32 req_adv_speed; 50236558c3dSYuval Mintz u32 req_forced_speed; 50336558c3dSYuval Mintz u32 req_loopback; 50436558c3dSYuval Mintz u32 padding3; 50536558c3dSYuval Mintz 50636558c3dSYuval Mintz u8 link_up; 50736558c3dSYuval Mintz u8 full_duplex; 50836558c3dSYuval Mintz u8 autoneg; 50936558c3dSYuval Mintz u8 autoneg_complete; 51036558c3dSYuval Mintz u8 parallel_detection; 51136558c3dSYuval Mintz u8 pfc_enabled; 51236558c3dSYuval Mintz u8 partner_tx_flow_ctrl_en; 51336558c3dSYuval Mintz u8 partner_rx_flow_ctrl_en; 51436558c3dSYuval Mintz u8 partner_adv_pause; 51536558c3dSYuval Mintz u8 sfp_tx_fault; 51636558c3dSYuval Mintz u8 padding4[6]; 51736558c3dSYuval Mintz 51836558c3dSYuval Mintz u32 speed; 51936558c3dSYuval Mintz u32 partner_adv_speed; 52036558c3dSYuval Mintz 52136558c3dSYuval Mintz u32 capability_speed; 52208feecd7SYuval Mintz 52308feecd7SYuval Mintz /* Forced vlan */ 52408feecd7SYuval Mintz u16 pvid; 52508feecd7SYuval Mintz u16 padding5; 52632a47e72SYuval Mintz }; 52732a47e72SYuval Mintz 52832a47e72SYuval Mintz struct qed_bulletin { 52932a47e72SYuval Mintz dma_addr_t phys; 53032a47e72SYuval Mintz struct qed_bulletin_content *p_virt; 53132a47e72SYuval Mintz u32 size; 53232a47e72SYuval Mintz }; 53332a47e72SYuval Mintz 53437bff2b9SYuval Mintz enum { 53537bff2b9SYuval Mintz CHANNEL_TLV_NONE, /* ends tlv sequence */ 5361408cc1fSYuval Mintz CHANNEL_TLV_ACQUIRE, 537dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_START, 538dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE, 539dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_TEARDOWN, 540dacd88d6SYuval Mintz CHANNEL_TLV_START_RXQ, 541dacd88d6SYuval Mintz CHANNEL_TLV_START_TXQ, 542dacd88d6SYuval Mintz CHANNEL_TLV_STOP_RXQS, 543dacd88d6SYuval Mintz CHANNEL_TLV_STOP_TXQS, 54417b235c1SYuval Mintz CHANNEL_TLV_UPDATE_RXQ, 5450b55e27dSYuval Mintz CHANNEL_TLV_INT_CLEANUP, 5460b55e27dSYuval Mintz CHANNEL_TLV_CLOSE, 5470b55e27dSYuval Mintz CHANNEL_TLV_RELEASE, 54837bff2b9SYuval Mintz CHANNEL_TLV_LIST_END, 549dacd88d6SYuval Mintz CHANNEL_TLV_UCAST_FILTER, 550dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACTIVATE, 55117b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH, 55217b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP, 553dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_MCAST, 554dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM, 555dacd88d6SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_RSS, 55617b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN, 55717b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_SGE_TPA, 558dacd88d6SYuval Mintz CHANNEL_TLV_MAX, 559dacd88d6SYuval Mintz 560dacd88d6SYuval Mintz /* Required for iterating over vport-update tlvs. 561dacd88d6SYuval Mintz * Will break in case non-sequential vport-update tlvs. 562dacd88d6SYuval Mintz */ 56317b235c1SYuval Mintz CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1, 56437bff2b9SYuval Mintz }; 56537bff2b9SYuval Mintz 5661408cc1fSYuval Mintz /* This data is held in the qed_hwfn structure for VFs only. */ 5671408cc1fSYuval Mintz struct qed_vf_iov { 5681408cc1fSYuval Mintz union vfpf_tlvs *vf2pf_request; 5691408cc1fSYuval Mintz dma_addr_t vf2pf_request_phys; 5701408cc1fSYuval Mintz union pfvf_tlvs *pf2vf_reply; 5711408cc1fSYuval Mintz dma_addr_t pf2vf_reply_phys; 5721408cc1fSYuval Mintz 5731408cc1fSYuval Mintz /* Should be taken whenever the mailbox buffers are accessed */ 5741408cc1fSYuval Mintz struct mutex mutex; 5751408cc1fSYuval Mintz u8 *offset; 5761408cc1fSYuval Mintz 5771408cc1fSYuval Mintz /* Bulletin Board */ 5781408cc1fSYuval Mintz struct qed_bulletin bulletin; 5791408cc1fSYuval Mintz struct qed_bulletin_content bulletin_shadow; 5801408cc1fSYuval Mintz 5811408cc1fSYuval Mintz /* we set aside a copy of the acquire response */ 5821408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv acquire_resp; 583d8c2c7e3SYuval Mintz 584d8c2c7e3SYuval Mintz /* In case PF originates prior to the fp-hsi version comparison, 585d8c2c7e3SYuval Mintz * this has to be propagated as it affects the fastpath. 586d8c2c7e3SYuval Mintz */ 587d8c2c7e3SYuval Mintz bool b_pre_fp_hsi; 5881408cc1fSYuval Mintz }; 5891408cc1fSYuval Mintz 5901408cc1fSYuval Mintz #ifdef CONFIG_QED_SRIOV 5911408cc1fSYuval Mintz /** 59236558c3dSYuval Mintz * @brief Read the VF bulletin and act on it if needed 59336558c3dSYuval Mintz * 59436558c3dSYuval Mintz * @param p_hwfn 59536558c3dSYuval Mintz * @param p_change - qed fills 1 iff bulletin board has changed, 0 otherwise. 59636558c3dSYuval Mintz * 59736558c3dSYuval Mintz * @return enum _qed_status 59836558c3dSYuval Mintz */ 59936558c3dSYuval Mintz int qed_vf_read_bulletin(struct qed_hwfn *p_hwfn, u8 *p_change); 60036558c3dSYuval Mintz 60136558c3dSYuval Mintz /** 60236558c3dSYuval Mintz * @brief Get link paramters for VF from qed 60336558c3dSYuval Mintz * 60436558c3dSYuval Mintz * @param p_hwfn 60536558c3dSYuval Mintz * @param params - the link params structure to be filled for the VF 60636558c3dSYuval Mintz */ 60736558c3dSYuval Mintz void qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 60836558c3dSYuval Mintz struct qed_mcp_link_params *params); 60936558c3dSYuval Mintz 61036558c3dSYuval Mintz /** 61136558c3dSYuval Mintz * @brief Get link state for VF from qed 61236558c3dSYuval Mintz * 61336558c3dSYuval Mintz * @param p_hwfn 61436558c3dSYuval Mintz * @param link - the link state structure to be filled for the VF 61536558c3dSYuval Mintz */ 61636558c3dSYuval Mintz void qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 61736558c3dSYuval Mintz struct qed_mcp_link_state *link); 61836558c3dSYuval Mintz 61936558c3dSYuval Mintz /** 62036558c3dSYuval Mintz * @brief Get link capabilities for VF from qed 62136558c3dSYuval Mintz * 62236558c3dSYuval Mintz * @param p_hwfn 62336558c3dSYuval Mintz * @param p_link_caps - the link capabilities structure to be filled for the VF 62436558c3dSYuval Mintz */ 62536558c3dSYuval Mintz void qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 62636558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps); 62736558c3dSYuval Mintz 62836558c3dSYuval Mintz /** 6291408cc1fSYuval Mintz * @brief Get number of Rx queues allocated for VF by qed 6301408cc1fSYuval Mintz * 6311408cc1fSYuval Mintz * @param p_hwfn 6321408cc1fSYuval Mintz * @param num_rxqs - allocated RX queues 6331408cc1fSYuval Mintz */ 6341408cc1fSYuval Mintz void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs); 6351408cc1fSYuval Mintz 6361408cc1fSYuval Mintz /** 6371408cc1fSYuval Mintz * @brief Get port mac address for VF 6381408cc1fSYuval Mintz * 6391408cc1fSYuval Mintz * @param p_hwfn 6401408cc1fSYuval Mintz * @param port_mac - destination location for port mac 6411408cc1fSYuval Mintz */ 6421408cc1fSYuval Mintz void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac); 6431408cc1fSYuval Mintz 6441408cc1fSYuval Mintz /** 6451408cc1fSYuval Mintz * @brief Get number of VLAN filters allocated for VF by qed 6461408cc1fSYuval Mintz * 6471408cc1fSYuval Mintz * @param p_hwfn 6481408cc1fSYuval Mintz * @param num_rxqs - allocated VLAN filters 6491408cc1fSYuval Mintz */ 6501408cc1fSYuval Mintz void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn, 6511408cc1fSYuval Mintz u8 *num_vlan_filters); 6521408cc1fSYuval Mintz 6531408cc1fSYuval Mintz /** 654b0fca312SMintz, Yuval * @brief Get number of MAC filters allocated for VF by qed 655b0fca312SMintz, Yuval * 656b0fca312SMintz, Yuval * @param p_hwfn 657b0fca312SMintz, Yuval * @param num_rxqs - allocated MAC filters 658b0fca312SMintz, Yuval */ 659b0fca312SMintz, Yuval void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, u8 *num_mac_filters); 660b0fca312SMintz, Yuval 661b0fca312SMintz, Yuval /** 662eff16960SYuval Mintz * @brief Check if VF can set a MAC address 663eff16960SYuval Mintz * 664eff16960SYuval Mintz * @param p_hwfn 665eff16960SYuval Mintz * @param mac 666eff16960SYuval Mintz * 667eff16960SYuval Mintz * @return bool 668eff16960SYuval Mintz */ 669eff16960SYuval Mintz bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac); 670eff16960SYuval Mintz 671eff16960SYuval Mintz /** 6721408cc1fSYuval Mintz * @brief Set firmware version information in dev_info from VFs acquire response tlv 6731408cc1fSYuval Mintz * 6741408cc1fSYuval Mintz * @param p_hwfn 6751408cc1fSYuval Mintz * @param fw_major 6761408cc1fSYuval Mintz * @param fw_minor 6771408cc1fSYuval Mintz * @param fw_rev 6781408cc1fSYuval Mintz * @param fw_eng 6791408cc1fSYuval Mintz */ 6801408cc1fSYuval Mintz void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn, 6811408cc1fSYuval Mintz u16 *fw_major, u16 *fw_minor, 6821408cc1fSYuval Mintz u16 *fw_rev, u16 *fw_eng); 6831408cc1fSYuval Mintz 6841408cc1fSYuval Mintz /** 6851408cc1fSYuval Mintz * @brief hw preparation for VF 6861408cc1fSYuval Mintz * sends ACQUIRE message 6871408cc1fSYuval Mintz * 6881408cc1fSYuval Mintz * @param p_hwfn 6891408cc1fSYuval Mintz * 6901408cc1fSYuval Mintz * @return int 6911408cc1fSYuval Mintz */ 6921408cc1fSYuval Mintz int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn); 6931408cc1fSYuval Mintz 6941408cc1fSYuval Mintz /** 695dacd88d6SYuval Mintz * @brief VF - start the RX Queue by sending a message to the PF 696dacd88d6SYuval Mintz * @param p_hwfn 6973da7a37aSMintz, Yuval * @param p_cid - Only relative fields are relevant 698dacd88d6SYuval Mintz * @param bd_max_bytes - maximum number of bytes per bd 699dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of bd chain 700dacd88d6SYuval Mintz * @param cqe_pbl_addr - physical address of pbl 701dacd88d6SYuval Mintz * @param cqe_pbl_size - pbl size 702dacd88d6SYuval Mintz * @param pp_prod - pointer to the producer to be 703dacd88d6SYuval Mintz * used in fastpath 704dacd88d6SYuval Mintz * 705dacd88d6SYuval Mintz * @return int 706dacd88d6SYuval Mintz */ 707dacd88d6SYuval Mintz int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 7083da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 709dacd88d6SYuval Mintz u16 bd_max_bytes, 710dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_addr, 711dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 712dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod); 713dacd88d6SYuval Mintz 714dacd88d6SYuval Mintz /** 715dacd88d6SYuval Mintz * @brief VF - start the TX queue by sending a message to the 716dacd88d6SYuval Mintz * PF. 717dacd88d6SYuval Mintz * 718dacd88d6SYuval Mintz * @param p_hwfn 719dacd88d6SYuval Mintz * @param tx_queue_id - zero based within the VF 720dacd88d6SYuval Mintz * @param sb - status block for this queue 721dacd88d6SYuval Mintz * @param sb_index - index within the status block 722dacd88d6SYuval Mintz * @param bd_chain_phys_addr - physical address of tx chain 723dacd88d6SYuval Mintz * @param pp_doorbell - pointer to address to which to 724dacd88d6SYuval Mintz * write the doorbell too.. 725dacd88d6SYuval Mintz * 726dacd88d6SYuval Mintz * @return int 727dacd88d6SYuval Mintz */ 7283da7a37aSMintz, Yuval int 7293da7a37aSMintz, Yuval qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 7303da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 731dacd88d6SYuval Mintz dma_addr_t pbl_addr, 732dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell); 733dacd88d6SYuval Mintz 734dacd88d6SYuval Mintz /** 735dacd88d6SYuval Mintz * @brief VF - stop the RX queue by sending a message to the PF 736dacd88d6SYuval Mintz * 737dacd88d6SYuval Mintz * @param p_hwfn 7383da7a37aSMintz, Yuval * @param p_cid 739dacd88d6SYuval Mintz * @param cqe_completion 740dacd88d6SYuval Mintz * 741dacd88d6SYuval Mintz * @return int 742dacd88d6SYuval Mintz */ 743dacd88d6SYuval Mintz int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 7443da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, bool cqe_completion); 745dacd88d6SYuval Mintz 746dacd88d6SYuval Mintz /** 747dacd88d6SYuval Mintz * @brief VF - stop the TX queue by sending a message to the PF 748dacd88d6SYuval Mintz * 749dacd88d6SYuval Mintz * @param p_hwfn 750dacd88d6SYuval Mintz * @param tx_qid 751dacd88d6SYuval Mintz * 752dacd88d6SYuval Mintz * @return int 753dacd88d6SYuval Mintz */ 7543da7a37aSMintz, Yuval int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, struct qed_queue_cid *p_cid); 755dacd88d6SYuval Mintz 756dacd88d6SYuval Mintz /** 757dacd88d6SYuval Mintz * @brief VF - send a vport update command 758dacd88d6SYuval Mintz * 759dacd88d6SYuval Mintz * @param p_hwfn 760dacd88d6SYuval Mintz * @param params 761dacd88d6SYuval Mintz * 762dacd88d6SYuval Mintz * @return int 763dacd88d6SYuval Mintz */ 764dacd88d6SYuval Mintz int qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 765dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params); 766dacd88d6SYuval Mintz 767dacd88d6SYuval Mintz /** 7680b55e27dSYuval Mintz * 7690b55e27dSYuval Mintz * @brief VF - send a close message to PF 7700b55e27dSYuval Mintz * 7710b55e27dSYuval Mintz * @param p_hwfn 7720b55e27dSYuval Mintz * 7730b55e27dSYuval Mintz * @return enum _qed_status 7740b55e27dSYuval Mintz */ 7750b55e27dSYuval Mintz int qed_vf_pf_reset(struct qed_hwfn *p_hwfn); 7760b55e27dSYuval Mintz 7770b55e27dSYuval Mintz /** 7780b55e27dSYuval Mintz * @brief VF - free vf`s memories 7790b55e27dSYuval Mintz * 7800b55e27dSYuval Mintz * @param p_hwfn 7810b55e27dSYuval Mintz * 7820b55e27dSYuval Mintz * @return enum _qed_status 7830b55e27dSYuval Mintz */ 7840b55e27dSYuval Mintz int qed_vf_pf_release(struct qed_hwfn *p_hwfn); 78536558c3dSYuval Mintz 7860b55e27dSYuval Mintz /** 7871408cc1fSYuval Mintz * @brief qed_vf_get_igu_sb_id - Get the IGU SB ID for a given 7881408cc1fSYuval Mintz * sb_id. For VFs igu sbs don't have to be contiguous 7891408cc1fSYuval Mintz * 7901408cc1fSYuval Mintz * @param p_hwfn 7911408cc1fSYuval Mintz * @param sb_id 7921408cc1fSYuval Mintz * 7931408cc1fSYuval Mintz * @return INLINE u16 7941408cc1fSYuval Mintz */ 7951408cc1fSYuval Mintz u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id); 7960b55e27dSYuval Mintz 7970b55e27dSYuval Mintz /** 798dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_start - perform vport start for VF. 799dacd88d6SYuval Mintz * 800dacd88d6SYuval Mintz * @param p_hwfn 801dacd88d6SYuval Mintz * @param vport_id 802dacd88d6SYuval Mintz * @param mtu 803dacd88d6SYuval Mintz * @param inner_vlan_removal 804dacd88d6SYuval Mintz * @param tpa_mode 805dacd88d6SYuval Mintz * @param max_buffers_per_cqe, 806dacd88d6SYuval Mintz * @param only_untagged - default behavior regarding vlan acceptance 807dacd88d6SYuval Mintz * 808dacd88d6SYuval Mintz * @return enum _qed_status 809dacd88d6SYuval Mintz */ 810dacd88d6SYuval Mintz int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 811dacd88d6SYuval Mintz u8 vport_id, 812dacd88d6SYuval Mintz u16 mtu, 813dacd88d6SYuval Mintz u8 inner_vlan_removal, 814dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 81508feecd7SYuval Mintz u8 max_buffers_per_cqe, u8 only_untagged); 816dacd88d6SYuval Mintz 817dacd88d6SYuval Mintz /** 818dacd88d6SYuval Mintz * @brief qed_vf_pf_vport_stop - stop the VF's vport 819dacd88d6SYuval Mintz * 820dacd88d6SYuval Mintz * @param p_hwfn 821dacd88d6SYuval Mintz * 822dacd88d6SYuval Mintz * @return enum _qed_status 823dacd88d6SYuval Mintz */ 824dacd88d6SYuval Mintz int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn); 825dacd88d6SYuval Mintz 826dacd88d6SYuval Mintz int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 827dacd88d6SYuval Mintz struct qed_filter_ucast *p_param); 828dacd88d6SYuval Mintz 829dacd88d6SYuval Mintz void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 830dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd); 831dacd88d6SYuval Mintz 832dacd88d6SYuval Mintz /** 8330b55e27dSYuval Mintz * @brief qed_vf_pf_int_cleanup - clean the SB of the VF 8340b55e27dSYuval Mintz * 8350b55e27dSYuval Mintz * @param p_hwfn 8360b55e27dSYuval Mintz * 8370b55e27dSYuval Mintz * @return enum _qed_status 8380b55e27dSYuval Mintz */ 8390b55e27dSYuval Mintz int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn); 84036558c3dSYuval Mintz 84136558c3dSYuval Mintz /** 84236558c3dSYuval Mintz * @brief - return the link params in a given bulletin board 84336558c3dSYuval Mintz * 84436558c3dSYuval Mintz * @param p_hwfn 84536558c3dSYuval Mintz * @param p_params - pointer to a struct to fill with link params 84636558c3dSYuval Mintz * @param p_bulletin 84736558c3dSYuval Mintz */ 84836558c3dSYuval Mintz void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 84936558c3dSYuval Mintz struct qed_mcp_link_params *p_params, 85036558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 85136558c3dSYuval Mintz 85236558c3dSYuval Mintz /** 85336558c3dSYuval Mintz * @brief - return the link state in a given bulletin board 85436558c3dSYuval Mintz * 85536558c3dSYuval Mintz * @param p_hwfn 85636558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link state 85736558c3dSYuval Mintz * @param p_bulletin 85836558c3dSYuval Mintz */ 85936558c3dSYuval Mintz void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 86036558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 86136558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 86236558c3dSYuval Mintz 86336558c3dSYuval Mintz /** 86436558c3dSYuval Mintz * @brief - return the link capabilities in a given bulletin board 86536558c3dSYuval Mintz * 86636558c3dSYuval Mintz * @param p_hwfn 86736558c3dSYuval Mintz * @param p_link - pointer to a struct to fill with link capabilities 86836558c3dSYuval Mintz * @param p_bulletin 86936558c3dSYuval Mintz */ 87036558c3dSYuval Mintz void __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 87136558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 87236558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin); 87336558c3dSYuval Mintz 87436558c3dSYuval Mintz void qed_iov_vf_task(struct work_struct *work); 8751408cc1fSYuval Mintz #else 87636558c3dSYuval Mintz static inline void qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 87736558c3dSYuval Mintz struct qed_mcp_link_params *params) 87836558c3dSYuval Mintz { 87936558c3dSYuval Mintz } 88036558c3dSYuval Mintz 88136558c3dSYuval Mintz static inline void qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 88236558c3dSYuval Mintz struct qed_mcp_link_state *link) 88336558c3dSYuval Mintz { 88436558c3dSYuval Mintz } 88536558c3dSYuval Mintz 88636558c3dSYuval Mintz static inline void 88736558c3dSYuval Mintz qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 88836558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps) 88936558c3dSYuval Mintz { 89036558c3dSYuval Mintz } 89136558c3dSYuval Mintz 8921408cc1fSYuval Mintz static inline void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs) 8931408cc1fSYuval Mintz { 8941408cc1fSYuval Mintz } 8951408cc1fSYuval Mintz 8961408cc1fSYuval Mintz static inline void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac) 8971408cc1fSYuval Mintz { 8981408cc1fSYuval Mintz } 8991408cc1fSYuval Mintz 9001408cc1fSYuval Mintz static inline void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn, 9011408cc1fSYuval Mintz u8 *num_vlan_filters) 9021408cc1fSYuval Mintz { 9031408cc1fSYuval Mintz } 9041408cc1fSYuval Mintz 905b0fca312SMintz, Yuval static inline void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, 906b0fca312SMintz, Yuval u8 *num_mac_filters) 907b0fca312SMintz, Yuval { 908b0fca312SMintz, Yuval } 909b0fca312SMintz, Yuval 910eff16960SYuval Mintz static inline bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac) 911eff16960SYuval Mintz { 912eff16960SYuval Mintz return false; 913eff16960SYuval Mintz } 914eff16960SYuval Mintz 9151408cc1fSYuval Mintz static inline void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn, 9161408cc1fSYuval Mintz u16 *fw_major, u16 *fw_minor, 9171408cc1fSYuval Mintz u16 *fw_rev, u16 *fw_eng) 9181408cc1fSYuval Mintz { 9191408cc1fSYuval Mintz } 9201408cc1fSYuval Mintz 9211408cc1fSYuval Mintz static inline int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn) 9221408cc1fSYuval Mintz { 9231408cc1fSYuval Mintz return -EINVAL; 9241408cc1fSYuval Mintz } 9251408cc1fSYuval Mintz 926dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn, 9273da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 928dacd88d6SYuval Mintz u16 bd_max_bytes, 929dacd88d6SYuval Mintz dma_addr_t bd_chain_phys_adr, 930dacd88d6SYuval Mintz dma_addr_t cqe_pbl_addr, 931dacd88d6SYuval Mintz u16 cqe_pbl_size, void __iomem **pp_prod) 932dacd88d6SYuval Mintz { 933dacd88d6SYuval Mintz return -EINVAL; 934dacd88d6SYuval Mintz } 935dacd88d6SYuval Mintz 936dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn, 9373da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 938dacd88d6SYuval Mintz dma_addr_t pbl_addr, 939dacd88d6SYuval Mintz u16 pbl_size, void __iomem **pp_doorbell) 940dacd88d6SYuval Mintz { 941dacd88d6SYuval Mintz return -EINVAL; 942dacd88d6SYuval Mintz } 943dacd88d6SYuval Mintz 944dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn, 9453da7a37aSMintz, Yuval struct qed_queue_cid *p_cid, 9463da7a37aSMintz, Yuval bool cqe_completion) 947dacd88d6SYuval Mintz { 948dacd88d6SYuval Mintz return -EINVAL; 949dacd88d6SYuval Mintz } 950dacd88d6SYuval Mintz 9513da7a37aSMintz, Yuval static inline int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, 9523da7a37aSMintz, Yuval struct qed_queue_cid *p_cid) 953dacd88d6SYuval Mintz { 954dacd88d6SYuval Mintz return -EINVAL; 955dacd88d6SYuval Mintz } 956dacd88d6SYuval Mintz 957dacd88d6SYuval Mintz static inline int 958dacd88d6SYuval Mintz qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn, 959dacd88d6SYuval Mintz struct qed_sp_vport_update_params *p_params) 960dacd88d6SYuval Mintz { 961dacd88d6SYuval Mintz return -EINVAL; 962dacd88d6SYuval Mintz } 963dacd88d6SYuval Mintz 9640b55e27dSYuval Mintz static inline int qed_vf_pf_reset(struct qed_hwfn *p_hwfn) 9650b55e27dSYuval Mintz { 9660b55e27dSYuval Mintz return -EINVAL; 9670b55e27dSYuval Mintz } 9680b55e27dSYuval Mintz 9690b55e27dSYuval Mintz static inline int qed_vf_pf_release(struct qed_hwfn *p_hwfn) 9700b55e27dSYuval Mintz { 9710b55e27dSYuval Mintz return -EINVAL; 9720b55e27dSYuval Mintz } 9730b55e27dSYuval Mintz 9741408cc1fSYuval Mintz static inline u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id) 9751408cc1fSYuval Mintz { 9761408cc1fSYuval Mintz return 0; 9771408cc1fSYuval Mintz } 9780b55e27dSYuval Mintz 979dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn, 980dacd88d6SYuval Mintz u8 vport_id, 981dacd88d6SYuval Mintz u16 mtu, 982dacd88d6SYuval Mintz u8 inner_vlan_removal, 983dacd88d6SYuval Mintz enum qed_tpa_mode tpa_mode, 98408feecd7SYuval Mintz u8 max_buffers_per_cqe, 98508feecd7SYuval Mintz u8 only_untagged) 986dacd88d6SYuval Mintz { 987dacd88d6SYuval Mintz return -EINVAL; 988dacd88d6SYuval Mintz } 989dacd88d6SYuval Mintz 990dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn) 991dacd88d6SYuval Mintz { 992dacd88d6SYuval Mintz return -EINVAL; 993dacd88d6SYuval Mintz } 994dacd88d6SYuval Mintz 995dacd88d6SYuval Mintz static inline int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn, 996dacd88d6SYuval Mintz struct qed_filter_ucast *p_param) 997dacd88d6SYuval Mintz { 998dacd88d6SYuval Mintz return -EINVAL; 999dacd88d6SYuval Mintz } 1000dacd88d6SYuval Mintz 1001dacd88d6SYuval Mintz static inline void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn, 1002dacd88d6SYuval Mintz struct qed_filter_mcast *p_filter_cmd) 1003dacd88d6SYuval Mintz { 1004dacd88d6SYuval Mintz } 1005dacd88d6SYuval Mintz 10060b55e27dSYuval Mintz static inline int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn) 10070b55e27dSYuval Mintz { 10080b55e27dSYuval Mintz return -EINVAL; 10090b55e27dSYuval Mintz } 101036558c3dSYuval Mintz 101136558c3dSYuval Mintz static inline void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn, 101236558c3dSYuval Mintz struct qed_mcp_link_params 101336558c3dSYuval Mintz *p_params, 101436558c3dSYuval Mintz struct qed_bulletin_content 101536558c3dSYuval Mintz *p_bulletin) 101636558c3dSYuval Mintz { 101736558c3dSYuval Mintz } 101836558c3dSYuval Mintz 101936558c3dSYuval Mintz static inline void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn, 102036558c3dSYuval Mintz struct qed_mcp_link_state *p_link, 102136558c3dSYuval Mintz struct qed_bulletin_content 102236558c3dSYuval Mintz *p_bulletin) 102336558c3dSYuval Mintz { 102436558c3dSYuval Mintz } 102536558c3dSYuval Mintz 102636558c3dSYuval Mintz static inline void 102736558c3dSYuval Mintz __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn, 102836558c3dSYuval Mintz struct qed_mcp_link_capabilities *p_link_caps, 102936558c3dSYuval Mintz struct qed_bulletin_content *p_bulletin) 103036558c3dSYuval Mintz { 103136558c3dSYuval Mintz } 103236558c3dSYuval Mintz 103336558c3dSYuval Mintz static inline void qed_iov_vf_task(struct work_struct *work) 103436558c3dSYuval Mintz { 103536558c3dSYuval Mintz } 10361408cc1fSYuval Mintz #endif 10371408cc1fSYuval Mintz 103832a47e72SYuval Mintz #endif 1039