11f4d4ed6SAlexander Lobakin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2fe56b9e6SYuval Mintz /* QLogic qed NIC Driver 3e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 4663eacd8SAlexander Lobakin * Copyright (c) 2019-2020 Marvell International Ltd. 5fe56b9e6SYuval Mintz */ 6fe56b9e6SYuval Mintz 7fe56b9e6SYuval Mintz #ifndef _QED_DEV_API_H 8fe56b9e6SYuval Mintz #define _QED_DEV_API_H 9fe56b9e6SYuval Mintz 10fe56b9e6SYuval Mintz #include <linux/types.h> 11fe56b9e6SYuval Mintz #include <linux/kernel.h> 12fe56b9e6SYuval Mintz #include <linux/slab.h> 13fe56b9e6SYuval Mintz #include <linux/qed/qed_chain.h> 14fe56b9e6SYuval Mintz #include <linux/qed/qed_if.h> 15fe56b9e6SYuval Mintz #include "qed_int.h" 16fe56b9e6SYuval Mintz 17fe56b9e6SYuval Mintz /** 1819198e4eSPrabhakar Kushwaha * qed_init_dp(): Initialize the debug level. 19fe56b9e6SYuval Mintz * 2019198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 2119198e4eSPrabhakar Kushwaha * @dp_module: Module debug parameter. 2219198e4eSPrabhakar Kushwaha * @dp_level: Module debug level. 2319198e4eSPrabhakar Kushwaha * 2419198e4eSPrabhakar Kushwaha * Return: Void. 25fe56b9e6SYuval Mintz */ 26fe56b9e6SYuval Mintz void qed_init_dp(struct qed_dev *cdev, 27fe56b9e6SYuval Mintz u32 dp_module, 28fe56b9e6SYuval Mintz u8 dp_level); 29fe56b9e6SYuval Mintz 30fe56b9e6SYuval Mintz /** 3119198e4eSPrabhakar Kushwaha * qed_init_struct(): Initialize the device structure to 3219198e4eSPrabhakar Kushwaha * its defaults. 33fe56b9e6SYuval Mintz * 3419198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 3519198e4eSPrabhakar Kushwaha * 3619198e4eSPrabhakar Kushwaha * Return: Void. 37fe56b9e6SYuval Mintz */ 38fe56b9e6SYuval Mintz void qed_init_struct(struct qed_dev *cdev); 39fe56b9e6SYuval Mintz 40fe56b9e6SYuval Mintz /** 4119198e4eSPrabhakar Kushwaha * qed_resc_free: Free device resources. 42fe56b9e6SYuval Mintz * 4319198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 4419198e4eSPrabhakar Kushwaha * 4519198e4eSPrabhakar Kushwaha * Return: Void. 46fe56b9e6SYuval Mintz */ 47fe56b9e6SYuval Mintz void qed_resc_free(struct qed_dev *cdev); 48fe56b9e6SYuval Mintz 49fe56b9e6SYuval Mintz /** 5019198e4eSPrabhakar Kushwaha * qed_resc_alloc(): Alloc device resources. 51fe56b9e6SYuval Mintz * 5219198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 53fe56b9e6SYuval Mintz * 5419198e4eSPrabhakar Kushwaha * Return: Int. 55fe56b9e6SYuval Mintz */ 56fe56b9e6SYuval Mintz int qed_resc_alloc(struct qed_dev *cdev); 57fe56b9e6SYuval Mintz 58fe56b9e6SYuval Mintz /** 5919198e4eSPrabhakar Kushwaha * qed_resc_setup(): Setup device resources. 60fe56b9e6SYuval Mintz * 6119198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 6219198e4eSPrabhakar Kushwaha * 6319198e4eSPrabhakar Kushwaha * Return: Void. 64fe56b9e6SYuval Mintz */ 65fe56b9e6SYuval Mintz void qed_resc_setup(struct qed_dev *cdev); 66fe56b9e6SYuval Mintz 675d24bcf1STomer Tayar enum qed_override_force_load { 685d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_NONE, 695d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_ALWAYS, 705d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_NEVER, 715d24bcf1STomer Tayar }; 725d24bcf1STomer Tayar 735d24bcf1STomer Tayar struct qed_drv_load_params { 745d24bcf1STomer Tayar /* Indicates whether the driver is running over a crash kernel. 755d24bcf1STomer Tayar * As part of the load request, this will be used for providing the 765d24bcf1STomer Tayar * driver role to the MFW. 775d24bcf1STomer Tayar * In case of a crash kernel over PDA - this should be set to false. 785d24bcf1STomer Tayar */ 795d24bcf1STomer Tayar bool is_crash_kernel; 805d24bcf1STomer Tayar 815d24bcf1STomer Tayar /* The timeout value that the MFW should use when locking the engine for 825d24bcf1STomer Tayar * the driver load process. 835d24bcf1STomer Tayar * A value of '0' means the default value, and '255' means no timeout. 845d24bcf1STomer Tayar */ 855d24bcf1STomer Tayar u8 mfw_timeout_val; 865d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_DEFAULT 0 875d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_NONE 255 885d24bcf1STomer Tayar 895d24bcf1STomer Tayar /* Avoid engine reset when first PF loads on it */ 905d24bcf1STomer Tayar bool avoid_eng_reset; 915d24bcf1STomer Tayar 925d24bcf1STomer Tayar /* Allow overriding the default force load behavior */ 935d24bcf1STomer Tayar enum qed_override_force_load override_force_load; 945d24bcf1STomer Tayar }; 955d24bcf1STomer Tayar 96c0c2d0b4SMintz, Yuval struct qed_hw_init_params { 97c0c2d0b4SMintz, Yuval /* Tunneling parameters */ 9819968430SChopra, Manish struct qed_tunnel_info *p_tunn; 99c0c2d0b4SMintz, Yuval 100c0c2d0b4SMintz, Yuval bool b_hw_start; 101c0c2d0b4SMintz, Yuval 102c0c2d0b4SMintz, Yuval /* Interrupt mode [msix, inta, etc.] to use */ 103c0c2d0b4SMintz, Yuval enum qed_int_mode int_mode; 104c0c2d0b4SMintz, Yuval 105c0c2d0b4SMintz, Yuval /* NPAR tx switching to be used for vports for tx-switching */ 106c0c2d0b4SMintz, Yuval bool allow_npar_tx_switch; 107c0c2d0b4SMintz, Yuval 108c0c2d0b4SMintz, Yuval /* Binary fw data pointer in binary fw file */ 109c0c2d0b4SMintz, Yuval const u8 *bin_fw_data; 1105d24bcf1STomer Tayar 1115d24bcf1STomer Tayar /* Driver load parameters */ 1125d24bcf1STomer Tayar struct qed_drv_load_params *p_drv_load_params; 113c0c2d0b4SMintz, Yuval }; 114c0c2d0b4SMintz, Yuval 115fe56b9e6SYuval Mintz /** 11619198e4eSPrabhakar Kushwaha * qed_hw_init(): Init Qed hardware. 117fe56b9e6SYuval Mintz * 11819198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 11919198e4eSPrabhakar Kushwaha * @p_params: Pointers to params. 120fe56b9e6SYuval Mintz * 12119198e4eSPrabhakar Kushwaha * Return: Int. 122fe56b9e6SYuval Mintz */ 123c0c2d0b4SMintz, Yuval int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params); 124fe56b9e6SYuval Mintz 125fe56b9e6SYuval Mintz /** 12619198e4eSPrabhakar Kushwaha * qed_hw_timers_stop_all(): Stop the timers HW block. 1278c925c44SYuval Mintz * 12819198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 1298c925c44SYuval Mintz * 13019198e4eSPrabhakar Kushwaha * Return: void. 1318c925c44SYuval Mintz */ 1328c925c44SYuval Mintz void qed_hw_timers_stop_all(struct qed_dev *cdev); 1338c925c44SYuval Mintz 1348c925c44SYuval Mintz /** 13519198e4eSPrabhakar Kushwaha * qed_hw_stop(): Stop Qed hardware. 136fe56b9e6SYuval Mintz * 13719198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 138fe56b9e6SYuval Mintz * 13919198e4eSPrabhakar Kushwaha * Return: int. 140fe56b9e6SYuval Mintz */ 141fe56b9e6SYuval Mintz int qed_hw_stop(struct qed_dev *cdev); 142fe56b9e6SYuval Mintz 143fe56b9e6SYuval Mintz /** 14419198e4eSPrabhakar Kushwaha * qed_hw_stop_fastpath(): Should be called incase 145cee4d264SManish Chopra * slowpath is still required for the device, 146cee4d264SManish Chopra * but fastpath is not. 147cee4d264SManish Chopra * 14819198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 149cee4d264SManish Chopra * 15019198e4eSPrabhakar Kushwaha * Return: Int. 151cee4d264SManish Chopra */ 15215582962SRahul Verma int qed_hw_stop_fastpath(struct qed_dev *cdev); 153cee4d264SManish Chopra 154cee4d264SManish Chopra /** 15519198e4eSPrabhakar Kushwaha * qed_hw_start_fastpath(): Restart fastpath traffic, 15619198e4eSPrabhakar Kushwaha * only if hw_stop_fastpath was called. 157cee4d264SManish Chopra * 15819198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 159cee4d264SManish Chopra * 16019198e4eSPrabhakar Kushwaha * Return: Int. 161cee4d264SManish Chopra */ 16215582962SRahul Verma int qed_hw_start_fastpath(struct qed_hwfn *p_hwfn); 163cee4d264SManish Chopra 164fe56b9e6SYuval Mintz /** 16519198e4eSPrabhakar Kushwaha * qed_hw_prepare(): Prepare Qed hardware. 166fe56b9e6SYuval Mintz * 16719198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 16819198e4eSPrabhakar Kushwaha * @personality: Personality to initialize. 169fe56b9e6SYuval Mintz * 17019198e4eSPrabhakar Kushwaha * Return: Int. 171fe56b9e6SYuval Mintz */ 172fe56b9e6SYuval Mintz int qed_hw_prepare(struct qed_dev *cdev, 173fe56b9e6SYuval Mintz int personality); 174fe56b9e6SYuval Mintz 175fe56b9e6SYuval Mintz /** 17619198e4eSPrabhakar Kushwaha * qed_hw_remove(): Remove Qed hardware. 177fe56b9e6SYuval Mintz * 17819198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 17919198e4eSPrabhakar Kushwaha * 18019198e4eSPrabhakar Kushwaha * Return: Void. 181fe56b9e6SYuval Mintz */ 182fe56b9e6SYuval Mintz void qed_hw_remove(struct qed_dev *cdev); 183fe56b9e6SYuval Mintz 184fe56b9e6SYuval Mintz /** 18519198e4eSPrabhakar Kushwaha * qed_ptt_acquire(): Allocate a PTT window. 18619198e4eSPrabhakar Kushwaha * 18719198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 18819198e4eSPrabhakar Kushwaha * 18919198e4eSPrabhakar Kushwaha * Return: struct qed_ptt. 190fe56b9e6SYuval Mintz * 191fe56b9e6SYuval Mintz * Should be called at the entry point to the driver (at the beginning of an 19219198e4eSPrabhakar Kushwaha * exported function). 193fe56b9e6SYuval Mintz */ 194fe56b9e6SYuval Mintz struct qed_ptt *qed_ptt_acquire(struct qed_hwfn *p_hwfn); 195fe56b9e6SYuval Mintz 196fe56b9e6SYuval Mintz /** 197*e346e231SKonstantin Khorenko * qed_ptt_acquire_context(): Allocate a PTT window honoring the context 198*e346e231SKonstantin Khorenko * atomicy. 199*e346e231SKonstantin Khorenko * 200*e346e231SKonstantin Khorenko * @p_hwfn: HW device data. 201*e346e231SKonstantin Khorenko * @is_atomic: Hint from the caller - if the func can sleep or not. 202*e346e231SKonstantin Khorenko * 203*e346e231SKonstantin Khorenko * Context: The function should not sleep in case is_atomic == true. 204*e346e231SKonstantin Khorenko * Return: struct qed_ptt. 205*e346e231SKonstantin Khorenko * 206*e346e231SKonstantin Khorenko * Should be called at the entry point to the driver 207*e346e231SKonstantin Khorenko * (at the beginning of an exported function). 208*e346e231SKonstantin Khorenko */ 209*e346e231SKonstantin Khorenko struct qed_ptt *qed_ptt_acquire_context(struct qed_hwfn *p_hwfn, 210*e346e231SKonstantin Khorenko bool is_atomic); 211*e346e231SKonstantin Khorenko 212*e346e231SKonstantin Khorenko /** 21319198e4eSPrabhakar Kushwaha * qed_ptt_release(): Release PTT Window. 21419198e4eSPrabhakar Kushwaha * 21519198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 21619198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 21719198e4eSPrabhakar Kushwaha * 21819198e4eSPrabhakar Kushwaha * Return: Void. 219fe56b9e6SYuval Mintz * 220fe56b9e6SYuval Mintz * Should be called at the end of a flow - at the end of the function that 221fe56b9e6SYuval Mintz * acquired the PTT. 222fe56b9e6SYuval Mintz */ 223fe56b9e6SYuval Mintz void qed_ptt_release(struct qed_hwfn *p_hwfn, 224fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 2259df2ed04SManish Chopra void qed_reset_vport_stats(struct qed_dev *cdev); 226fe56b9e6SYuval Mintz 227fe56b9e6SYuval Mintz enum qed_dmae_address_type_t { 228fe56b9e6SYuval Mintz QED_DMAE_ADDRESS_HOST_VIRT, 229fe56b9e6SYuval Mintz QED_DMAE_ADDRESS_HOST_PHYS, 230fe56b9e6SYuval Mintz QED_DMAE_ADDRESS_GRC 231fe56b9e6SYuval Mintz }; 232fe56b9e6SYuval Mintz 233fe56b9e6SYuval Mintz /** 23419198e4eSPrabhakar Kushwaha * qed_dmae_host2grc(): Copy data from source addr to 23519198e4eSPrabhakar Kushwaha * dmae registers using the given ptt. 236fe56b9e6SYuval Mintz * 23719198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 23819198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 23919198e4eSPrabhakar Kushwaha * @source_addr: Source address. 24019198e4eSPrabhakar Kushwaha * @grc_addr: GRC address (dmae_data_offset). 24119198e4eSPrabhakar Kushwaha * @size_in_dwords: Size. 24219198e4eSPrabhakar Kushwaha * @p_params: (default parameters will be used in case of NULL). 24319198e4eSPrabhakar Kushwaha * 24419198e4eSPrabhakar Kushwaha * Return: Int. 245fe56b9e6SYuval Mintz */ 246fe56b9e6SYuval Mintz int 247fe56b9e6SYuval Mintz qed_dmae_host2grc(struct qed_hwfn *p_hwfn, 248fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 249fe56b9e6SYuval Mintz u64 source_addr, 250fe56b9e6SYuval Mintz u32 grc_addr, 251fe56b9e6SYuval Mintz u32 size_in_dwords, 25283bf76e3SMichal Kalderon struct qed_dmae_params *p_params); 253fe56b9e6SYuval Mintz 254fe56b9e6SYuval Mintz /** 25519198e4eSPrabhakar Kushwaha * qed_dmae_grc2host(): Read data from dmae data offset 25619198e4eSPrabhakar Kushwaha * to source address using the given ptt. 257722003acSSudarsana Reddy Kalluru * 25819198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 25919198e4eSPrabhakar Kushwaha * @grc_addr: GRC address (dmae_data_offset). 26019198e4eSPrabhakar Kushwaha * @dest_addr: Destination Address. 26119198e4eSPrabhakar Kushwaha * @size_in_dwords: Size. 26219198e4eSPrabhakar Kushwaha * @p_params: (default parameters will be used in case of NULL). 26319198e4eSPrabhakar Kushwaha * 26419198e4eSPrabhakar Kushwaha * Return: Int. 265722003acSSudarsana Reddy Kalluru */ 266722003acSSudarsana Reddy Kalluru int qed_dmae_grc2host(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, 267722003acSSudarsana Reddy Kalluru u32 grc_addr, dma_addr_t dest_addr, u32 size_in_dwords, 26883bf76e3SMichal Kalderon struct qed_dmae_params *p_params); 269722003acSSudarsana Reddy Kalluru 270722003acSSudarsana Reddy Kalluru /** 27119198e4eSPrabhakar Kushwaha * qed_dmae_host2host(): Copy data from to source address 27219198e4eSPrabhakar Kushwaha * to a destination adrress (for SRIOV) using the given 27319198e4eSPrabhakar Kushwaha * ptt. 27437bff2b9SYuval Mintz * 27519198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 27619198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 27719198e4eSPrabhakar Kushwaha * @source_addr: Source address. 27819198e4eSPrabhakar Kushwaha * @dest_addr: Destination address. 27919198e4eSPrabhakar Kushwaha * @size_in_dwords: size. 28019198e4eSPrabhakar Kushwaha * @p_params: (default parameters will be used in case of NULL). 28119198e4eSPrabhakar Kushwaha * 28219198e4eSPrabhakar Kushwaha * Return: Int. 28337bff2b9SYuval Mintz */ 28437bff2b9SYuval Mintz int qed_dmae_host2host(struct qed_hwfn *p_hwfn, 28537bff2b9SYuval Mintz struct qed_ptt *p_ptt, 28637bff2b9SYuval Mintz dma_addr_t source_addr, 28737bff2b9SYuval Mintz dma_addr_t dest_addr, 28837bff2b9SYuval Mintz u32 size_in_dwords, struct qed_dmae_params *p_params); 28937bff2b9SYuval Mintz 290b6db3f71SAlexander Lobakin int qed_chain_alloc(struct qed_dev *cdev, struct qed_chain *chain, 291b6db3f71SAlexander Lobakin struct qed_chain_init_params *params); 292b6db3f71SAlexander Lobakin void qed_chain_free(struct qed_dev *cdev, struct qed_chain *chain); 293fe56b9e6SYuval Mintz 294fe56b9e6SYuval Mintz /** 29519198e4eSPrabhakar Kushwaha * qed_fw_l2_queue(): Get absolute L2 queue ID. 296cee4d264SManish Chopra * 29719198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 29819198e4eSPrabhakar Kushwaha * @src_id: Relative to p_hwfn. 29919198e4eSPrabhakar Kushwaha * @dst_id: Absolute per engine. 300cee4d264SManish Chopra * 30119198e4eSPrabhakar Kushwaha * Return: Int. 302cee4d264SManish Chopra */ 303cee4d264SManish Chopra int qed_fw_l2_queue(struct qed_hwfn *p_hwfn, 304cee4d264SManish Chopra u16 src_id, 305cee4d264SManish Chopra u16 *dst_id); 306cee4d264SManish Chopra 307cee4d264SManish Chopra /** 30819198e4eSPrabhakar Kushwaha * qed_fw_vport(): Get absolute vport ID. 309cee4d264SManish Chopra * 31019198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 31119198e4eSPrabhakar Kushwaha * @src_id: Relative to p_hwfn. 31219198e4eSPrabhakar Kushwaha * @dst_id: Absolute per engine. 313cee4d264SManish Chopra * 31419198e4eSPrabhakar Kushwaha * Return: Int. 315cee4d264SManish Chopra */ 316cee4d264SManish Chopra int qed_fw_vport(struct qed_hwfn *p_hwfn, 317cee4d264SManish Chopra u8 src_id, 318cee4d264SManish Chopra u8 *dst_id); 319cee4d264SManish Chopra 320cee4d264SManish Chopra /** 32119198e4eSPrabhakar Kushwaha * qed_fw_rss_eng(): Get absolute RSS engine ID. 322cee4d264SManish Chopra * 32319198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 32419198e4eSPrabhakar Kushwaha * @src_id: Relative to p_hwfn. 32519198e4eSPrabhakar Kushwaha * @dst_id: Absolute per engine. 326cee4d264SManish Chopra * 32719198e4eSPrabhakar Kushwaha * Return: Int. 328cee4d264SManish Chopra */ 329cee4d264SManish Chopra int qed_fw_rss_eng(struct qed_hwfn *p_hwfn, 330cee4d264SManish Chopra u8 src_id, 331cee4d264SManish Chopra u8 *dst_id); 332cee4d264SManish Chopra 333cee4d264SManish Chopra /** 33419198e4eSPrabhakar Kushwaha * qed_llh_get_num_ppfid(): Return the allocated number of LLH filter 33579284adeSMichal Kalderon * banks that are allocated to the PF. 3360a7fb11cSYuval Mintz * 33719198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 33879284adeSMichal Kalderon * 33919198e4eSPrabhakar Kushwaha * Return: u8 Number of LLH filter banks. 3400a7fb11cSYuval Mintz */ 34179284adeSMichal Kalderon u8 qed_llh_get_num_ppfid(struct qed_dev *cdev); 34279284adeSMichal Kalderon 34379284adeSMichal Kalderon enum qed_eng { 34479284adeSMichal Kalderon QED_ENG0, 34579284adeSMichal Kalderon QED_ENG1, 34679284adeSMichal Kalderon QED_BOTH_ENG, 34779284adeSMichal Kalderon }; 3480a7fb11cSYuval Mintz 3490a7fb11cSYuval Mintz /** 35019198e4eSPrabhakar Kushwaha * qed_llh_set_ppfid_affinity(): Set the engine affinity for the given 35179284adeSMichal Kalderon * LLH filter bank. 3520a7fb11cSYuval Mintz * 35319198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 35419198e4eSPrabhakar Kushwaha * @ppfid: Relative within the allocated ppfids ('0' is the default one). 35519198e4eSPrabhakar Kushwaha * @eng: Engine. 35679284adeSMichal Kalderon * 35719198e4eSPrabhakar Kushwaha * Return: Int. 35879284adeSMichal Kalderon */ 35979284adeSMichal Kalderon int qed_llh_set_ppfid_affinity(struct qed_dev *cdev, 36079284adeSMichal Kalderon u8 ppfid, enum qed_eng eng); 36179284adeSMichal Kalderon 36279284adeSMichal Kalderon /** 36319198e4eSPrabhakar Kushwaha * qed_llh_set_roce_affinity(): Set the RoCE engine affinity. 36479284adeSMichal Kalderon * 36519198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 36619198e4eSPrabhakar Kushwaha * @eng: Engine. 36779284adeSMichal Kalderon * 36819198e4eSPrabhakar Kushwaha * Return: Int. 36979284adeSMichal Kalderon */ 37079284adeSMichal Kalderon int qed_llh_set_roce_affinity(struct qed_dev *cdev, enum qed_eng eng); 37179284adeSMichal Kalderon 37279284adeSMichal Kalderon /** 37319198e4eSPrabhakar Kushwaha * qed_llh_add_mac_filter(): Add a LLH MAC filter into the given filter 37479284adeSMichal Kalderon * bank. 37579284adeSMichal Kalderon * 37619198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 37719198e4eSPrabhakar Kushwaha * @ppfid: Relative within the allocated ppfids ('0' is the default one). 37819198e4eSPrabhakar Kushwaha * @mac_addr: MAC to add. 37919198e4eSPrabhakar Kushwaha * 38019198e4eSPrabhakar Kushwaha * Return: Int. 38179284adeSMichal Kalderon */ 38279284adeSMichal Kalderon int qed_llh_add_mac_filter(struct qed_dev *cdev, 38376660757SJakub Kicinski u8 ppfid, const u8 mac_addr[ETH_ALEN]); 38479284adeSMichal Kalderon 38579284adeSMichal Kalderon /** 38619198e4eSPrabhakar Kushwaha * qed_llh_remove_mac_filter(): Remove a LLH MAC filter from the given 38779284adeSMichal Kalderon * filter bank. 38879284adeSMichal Kalderon * 38919198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 39019198e4eSPrabhakar Kushwaha * @ppfid: Ppfid. 39119198e4eSPrabhakar Kushwaha * @mac_addr: MAC to remove 39219198e4eSPrabhakar Kushwaha * 39319198e4eSPrabhakar Kushwaha * Return: Void. 3940a7fb11cSYuval Mintz */ 39579284adeSMichal Kalderon void qed_llh_remove_mac_filter(struct qed_dev *cdev, 39679284adeSMichal Kalderon u8 ppfid, u8 mac_addr[ETH_ALEN]); 3970a7fb11cSYuval Mintz 39879284adeSMichal Kalderon enum qed_llh_prot_filter_type_t { 3991e128c81SArun Easi QED_LLH_FILTER_ETHERTYPE, 4001e128c81SArun Easi QED_LLH_FILTER_TCP_SRC_PORT, 4011e128c81SArun Easi QED_LLH_FILTER_TCP_DEST_PORT, 4021e128c81SArun Easi QED_LLH_FILTER_TCP_SRC_AND_DEST_PORT, 4031e128c81SArun Easi QED_LLH_FILTER_UDP_SRC_PORT, 4041e128c81SArun Easi QED_LLH_FILTER_UDP_DEST_PORT, 4051e128c81SArun Easi QED_LLH_FILTER_UDP_SRC_AND_DEST_PORT 4061e128c81SArun Easi }; 4071e128c81SArun Easi 4081e128c81SArun Easi /** 40919198e4eSPrabhakar Kushwaha * qed_llh_add_protocol_filter(): Add a LLH protocol filter into the 41079284adeSMichal Kalderon * given filter bank. 4111e128c81SArun Easi * 41219198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 41319198e4eSPrabhakar Kushwaha * @ppfid: Relative within the allocated ppfids ('0' is the default one). 41419198e4eSPrabhakar Kushwaha * @type: Type of filters and comparing. 41519198e4eSPrabhakar Kushwaha * @source_port_or_eth_type: Source port or ethertype to add. 41619198e4eSPrabhakar Kushwaha * @dest_port: Destination port to add. 41719198e4eSPrabhakar Kushwaha * 41819198e4eSPrabhakar Kushwaha * Return: Int. 4191e128c81SArun Easi */ 4201e128c81SArun Easi int 42179284adeSMichal Kalderon qed_llh_add_protocol_filter(struct qed_dev *cdev, 42279284adeSMichal Kalderon u8 ppfid, 42379284adeSMichal Kalderon enum qed_llh_prot_filter_type_t type, 42479284adeSMichal Kalderon u16 source_port_or_eth_type, u16 dest_port); 4251e128c81SArun Easi 4261e128c81SArun Easi /** 42719198e4eSPrabhakar Kushwaha * qed_llh_remove_protocol_filter(): Remove a LLH protocol filter from 42879284adeSMichal Kalderon * the given filter bank. 4291e128c81SArun Easi * 43019198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 43119198e4eSPrabhakar Kushwaha * @ppfid: Relative within the allocated ppfids ('0' is the default one). 43219198e4eSPrabhakar Kushwaha * @type: Type of filters and comparing. 43319198e4eSPrabhakar Kushwaha * @source_port_or_eth_type: Source port or ethertype to add. 43419198e4eSPrabhakar Kushwaha * @dest_port: Destination port to add. 4351e128c81SArun Easi */ 4361e128c81SArun Easi void 43779284adeSMichal Kalderon qed_llh_remove_protocol_filter(struct qed_dev *cdev, 43879284adeSMichal Kalderon u8 ppfid, 43979284adeSMichal Kalderon enum qed_llh_prot_filter_type_t type, 44079284adeSMichal Kalderon u16 source_port_or_eth_type, u16 dest_port); 4411e128c81SArun Easi 4420a7fb11cSYuval Mintz /** 44319198e4eSPrabhakar Kushwaha * qed_final_cleanup(): Cleanup of previous driver remains prior to load. 444fe56b9e6SYuval Mintz * 44519198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 44619198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 44719198e4eSPrabhakar Kushwaha * @id: For PF, engine-relative. For VF, PF-relative. 44819198e4eSPrabhakar Kushwaha * @is_vf: True iff cleanup is made for a VF. 449fe56b9e6SYuval Mintz * 45019198e4eSPrabhakar Kushwaha * Return: Int. 451fe56b9e6SYuval Mintz */ 452fe56b9e6SYuval Mintz int qed_final_cleanup(struct qed_hwfn *p_hwfn, 4530b55e27dSYuval Mintz struct qed_ptt *p_ptt, u16 id, bool is_vf); 454fe56b9e6SYuval Mintz 455722003acSSudarsana Reddy Kalluru /** 45619198e4eSPrabhakar Kushwaha * qed_get_queue_coalesce(): Retrieve coalesce value for a given queue. 457bf5a94bfSRahul Verma * 45819198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 45919198e4eSPrabhakar Kushwaha * @coal: Store coalesce value read from the hardware. 46019198e4eSPrabhakar Kushwaha * @handle: P_handle. 461bf5a94bfSRahul Verma * 46219198e4eSPrabhakar Kushwaha * Return: Int. 463bf5a94bfSRahul Verma **/ 464bf5a94bfSRahul Verma int qed_get_queue_coalesce(struct qed_hwfn *p_hwfn, u16 *coal, void *handle); 465bf5a94bfSRahul Verma 466bf5a94bfSRahul Verma /** 46719198e4eSPrabhakar Kushwaha * qed_set_queue_coalesce(): Configure coalesce parameters for Rx and 468bf5a94bfSRahul Verma * Tx queue. The fact that we can configure coalescing to up to 511, but on 469477f2d14SRahul Verma * varying accuracy [the bigger the value the less accurate] up to a mistake 470477f2d14SRahul Verma * of 3usec for the highest values. 471477f2d14SRahul Verma * While the API allows setting coalescing per-qid, all queues sharing a SB 472477f2d14SRahul Verma * should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff] 473722003acSSudarsana Reddy Kalluru * otherwise configuration would break. 474722003acSSudarsana Reddy Kalluru * 47519198e4eSPrabhakar Kushwaha * @rx_coal: Rx Coalesce value in micro seconds. 47619198e4eSPrabhakar Kushwaha * @tx_coal: TX Coalesce value in micro seconds. 47719198e4eSPrabhakar Kushwaha * @p_handle: P_handle. 478bf5a94bfSRahul Verma * 47919198e4eSPrabhakar Kushwaha * Return: Int. 480477f2d14SRahul Verma **/ 481477f2d14SRahul Verma int 482477f2d14SRahul Verma qed_set_queue_coalesce(u16 rx_coal, u16 tx_coal, void *p_handle); 483477f2d14SRahul Verma 48436907cd5SAriel Elior /** 48519198e4eSPrabhakar Kushwaha * qed_pglueb_set_pfid_enable(): Enable or disable PCI BUS MASTER. 486666db486STomer Tayar * 48719198e4eSPrabhakar Kushwaha * @p_hwfn: HW device data. 48819198e4eSPrabhakar Kushwaha * @p_ptt: P_ptt. 48919198e4eSPrabhakar Kushwaha * @b_enable: True/False. 490666db486STomer Tayar * 49119198e4eSPrabhakar Kushwaha * Return: Int. 492666db486STomer Tayar */ 493666db486STomer Tayar int qed_pglueb_set_pfid_enable(struct qed_hwfn *p_hwfn, 494666db486STomer Tayar struct qed_ptt *p_ptt, bool b_enable); 495666db486STomer Tayar 496666db486STomer Tayar /** 49719198e4eSPrabhakar Kushwaha * qed_db_recovery_add(): add doorbell information to the doorbell 49836907cd5SAriel Elior * recovery mechanism. 49936907cd5SAriel Elior * 50019198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 50119198e4eSPrabhakar Kushwaha * @db_addr: Doorbell address. 50219198e4eSPrabhakar Kushwaha * @db_data: Address of where db_data is stored. 50319198e4eSPrabhakar Kushwaha * @db_width: Doorbell is 32b pr 64b. 50419198e4eSPrabhakar Kushwaha * @db_space: Doorbell recovery addresses are user or kernel space. 50519198e4eSPrabhakar Kushwaha * 50619198e4eSPrabhakar Kushwaha * Return: Int. 50736907cd5SAriel Elior */ 50836907cd5SAriel Elior int qed_db_recovery_add(struct qed_dev *cdev, 50936907cd5SAriel Elior void __iomem *db_addr, 51036907cd5SAriel Elior void *db_data, 51136907cd5SAriel Elior enum qed_db_rec_width db_width, 51236907cd5SAriel Elior enum qed_db_rec_space db_space); 51336907cd5SAriel Elior 51436907cd5SAriel Elior /** 51519198e4eSPrabhakar Kushwaha * qed_db_recovery_del() - remove doorbell information from the doorbell 51636907cd5SAriel Elior * recovery mechanism. db_data serves as key (db_addr is not unique). 51736907cd5SAriel Elior * 51819198e4eSPrabhakar Kushwaha * @cdev: Qed dev pointer. 51919198e4eSPrabhakar Kushwaha * @db_addr: doorbell address. 52019198e4eSPrabhakar Kushwaha * @db_data: address where db_data is stored. Serves as key for the 52136907cd5SAriel Elior * entry to delete. 52219198e4eSPrabhakar Kushwaha * 52319198e4eSPrabhakar Kushwaha * Return: Int. 52436907cd5SAriel Elior */ 52536907cd5SAriel Elior int qed_db_recovery_del(struct qed_dev *cdev, 52636907cd5SAriel Elior void __iomem *db_addr, void *db_data); 52736907cd5SAriel Elior 5289c8517c4STomer Tayar const char *qed_hw_get_resc_name(enum qed_resources res_id); 529fe56b9e6SYuval Mintz #endif 530