1fe56b9e6SYuval Mintz /* QLogic qed NIC Driver 2e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 3fe56b9e6SYuval 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. 31fe56b9e6SYuval Mintz */ 32fe56b9e6SYuval Mintz 33fe56b9e6SYuval Mintz #ifndef _QED_DEV_API_H 34fe56b9e6SYuval Mintz #define _QED_DEV_API_H 35fe56b9e6SYuval Mintz 36fe56b9e6SYuval Mintz #include <linux/types.h> 37fe56b9e6SYuval Mintz #include <linux/kernel.h> 38fe56b9e6SYuval Mintz #include <linux/slab.h> 39fe56b9e6SYuval Mintz #include <linux/qed/qed_chain.h> 40fe56b9e6SYuval Mintz #include <linux/qed/qed_if.h> 41fe56b9e6SYuval Mintz #include "qed_int.h" 42fe56b9e6SYuval Mintz 43fe56b9e6SYuval Mintz /** 44fe56b9e6SYuval Mintz * @brief qed_init_dp - initialize the debug level 45fe56b9e6SYuval Mintz * 46fe56b9e6SYuval Mintz * @param cdev 47fe56b9e6SYuval Mintz * @param dp_module 48fe56b9e6SYuval Mintz * @param dp_level 49fe56b9e6SYuval Mintz */ 50fe56b9e6SYuval Mintz void qed_init_dp(struct qed_dev *cdev, 51fe56b9e6SYuval Mintz u32 dp_module, 52fe56b9e6SYuval Mintz u8 dp_level); 53fe56b9e6SYuval Mintz 54fe56b9e6SYuval Mintz /** 55fe56b9e6SYuval Mintz * @brief qed_init_struct - initialize the device structure to 56fe56b9e6SYuval Mintz * its defaults 57fe56b9e6SYuval Mintz * 58fe56b9e6SYuval Mintz * @param cdev 59fe56b9e6SYuval Mintz */ 60fe56b9e6SYuval Mintz void qed_init_struct(struct qed_dev *cdev); 61fe56b9e6SYuval Mintz 62fe56b9e6SYuval Mintz /** 63fe56b9e6SYuval Mintz * @brief qed_resc_free - 64fe56b9e6SYuval Mintz * 65fe56b9e6SYuval Mintz * @param cdev 66fe56b9e6SYuval Mintz */ 67fe56b9e6SYuval Mintz void qed_resc_free(struct qed_dev *cdev); 68fe56b9e6SYuval Mintz 69fe56b9e6SYuval Mintz /** 70fe56b9e6SYuval Mintz * @brief qed_resc_alloc - 71fe56b9e6SYuval Mintz * 72fe56b9e6SYuval Mintz * @param cdev 73fe56b9e6SYuval Mintz * 74fe56b9e6SYuval Mintz * @return int 75fe56b9e6SYuval Mintz */ 76fe56b9e6SYuval Mintz int qed_resc_alloc(struct qed_dev *cdev); 77fe56b9e6SYuval Mintz 78fe56b9e6SYuval Mintz /** 79fe56b9e6SYuval Mintz * @brief qed_resc_setup - 80fe56b9e6SYuval Mintz * 81fe56b9e6SYuval Mintz * @param cdev 82fe56b9e6SYuval Mintz */ 83fe56b9e6SYuval Mintz void qed_resc_setup(struct qed_dev *cdev); 84fe56b9e6SYuval Mintz 855d24bcf1STomer Tayar enum qed_override_force_load { 865d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_NONE, 875d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_ALWAYS, 885d24bcf1STomer Tayar QED_OVERRIDE_FORCE_LOAD_NEVER, 895d24bcf1STomer Tayar }; 905d24bcf1STomer Tayar 915d24bcf1STomer Tayar struct qed_drv_load_params { 925d24bcf1STomer Tayar /* Indicates whether the driver is running over a crash kernel. 935d24bcf1STomer Tayar * As part of the load request, this will be used for providing the 945d24bcf1STomer Tayar * driver role to the MFW. 955d24bcf1STomer Tayar * In case of a crash kernel over PDA - this should be set to false. 965d24bcf1STomer Tayar */ 975d24bcf1STomer Tayar bool is_crash_kernel; 985d24bcf1STomer Tayar 995d24bcf1STomer Tayar /* The timeout value that the MFW should use when locking the engine for 1005d24bcf1STomer Tayar * the driver load process. 1015d24bcf1STomer Tayar * A value of '0' means the default value, and '255' means no timeout. 1025d24bcf1STomer Tayar */ 1035d24bcf1STomer Tayar u8 mfw_timeout_val; 1045d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_DEFAULT 0 1055d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_NONE 255 1065d24bcf1STomer Tayar 1075d24bcf1STomer Tayar /* Avoid engine reset when first PF loads on it */ 1085d24bcf1STomer Tayar bool avoid_eng_reset; 1095d24bcf1STomer Tayar 1105d24bcf1STomer Tayar /* Allow overriding the default force load behavior */ 1115d24bcf1STomer Tayar enum qed_override_force_load override_force_load; 1125d24bcf1STomer Tayar }; 1135d24bcf1STomer Tayar 114c0c2d0b4SMintz, Yuval struct qed_hw_init_params { 115c0c2d0b4SMintz, Yuval /* Tunneling parameters */ 11619968430SChopra, Manish struct qed_tunnel_info *p_tunn; 117c0c2d0b4SMintz, Yuval 118c0c2d0b4SMintz, Yuval bool b_hw_start; 119c0c2d0b4SMintz, Yuval 120c0c2d0b4SMintz, Yuval /* Interrupt mode [msix, inta, etc.] to use */ 121c0c2d0b4SMintz, Yuval enum qed_int_mode int_mode; 122c0c2d0b4SMintz, Yuval 123c0c2d0b4SMintz, Yuval /* NPAR tx switching to be used for vports for tx-switching */ 124c0c2d0b4SMintz, Yuval bool allow_npar_tx_switch; 125c0c2d0b4SMintz, Yuval 126c0c2d0b4SMintz, Yuval /* Binary fw data pointer in binary fw file */ 127c0c2d0b4SMintz, Yuval const u8 *bin_fw_data; 1285d24bcf1STomer Tayar 1295d24bcf1STomer Tayar /* Driver load parameters */ 1305d24bcf1STomer Tayar struct qed_drv_load_params *p_drv_load_params; 131c0c2d0b4SMintz, Yuval }; 132c0c2d0b4SMintz, Yuval 133fe56b9e6SYuval Mintz /** 134fe56b9e6SYuval Mintz * @brief qed_hw_init - 135fe56b9e6SYuval Mintz * 136fe56b9e6SYuval Mintz * @param cdev 137c0c2d0b4SMintz, Yuval * @param p_params 138fe56b9e6SYuval Mintz * 139fe56b9e6SYuval Mintz * @return int 140fe56b9e6SYuval Mintz */ 141c0c2d0b4SMintz, Yuval int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params); 142fe56b9e6SYuval Mintz 143fe56b9e6SYuval Mintz /** 1448c925c44SYuval Mintz * @brief qed_hw_timers_stop_all - stop the timers HW block 1458c925c44SYuval Mintz * 1468c925c44SYuval Mintz * @param cdev 1478c925c44SYuval Mintz * 1488c925c44SYuval Mintz * @return void 1498c925c44SYuval Mintz */ 1508c925c44SYuval Mintz void qed_hw_timers_stop_all(struct qed_dev *cdev); 1518c925c44SYuval Mintz 1528c925c44SYuval Mintz /** 153fe56b9e6SYuval Mintz * @brief qed_hw_stop - 154fe56b9e6SYuval Mintz * 155fe56b9e6SYuval Mintz * @param cdev 156fe56b9e6SYuval Mintz * 157fe56b9e6SYuval Mintz * @return int 158fe56b9e6SYuval Mintz */ 159fe56b9e6SYuval Mintz int qed_hw_stop(struct qed_dev *cdev); 160fe56b9e6SYuval Mintz 161fe56b9e6SYuval Mintz /** 162cee4d264SManish Chopra * @brief qed_hw_stop_fastpath -should be called incase 163cee4d264SManish Chopra * slowpath is still required for the device, 164cee4d264SManish Chopra * but fastpath is not. 165cee4d264SManish Chopra * 166cee4d264SManish Chopra * @param cdev 167cee4d264SManish Chopra * 16815582962SRahul Verma * @return int 169cee4d264SManish Chopra */ 17015582962SRahul Verma int qed_hw_stop_fastpath(struct qed_dev *cdev); 171cee4d264SManish Chopra 172cee4d264SManish Chopra /** 173cee4d264SManish Chopra * @brief qed_hw_start_fastpath -restart fastpath traffic, 174cee4d264SManish Chopra * only if hw_stop_fastpath was called 175cee4d264SManish Chopra * 17615582962SRahul Verma * @param p_hwfn 177cee4d264SManish Chopra * 17815582962SRahul Verma * @return int 179cee4d264SManish Chopra */ 18015582962SRahul Verma int qed_hw_start_fastpath(struct qed_hwfn *p_hwfn); 181cee4d264SManish Chopra 182fe56b9e6SYuval Mintz 183fe56b9e6SYuval Mintz /** 184fe56b9e6SYuval Mintz * @brief qed_hw_prepare - 185fe56b9e6SYuval Mintz * 186fe56b9e6SYuval Mintz * @param cdev 187fe56b9e6SYuval Mintz * @param personality - personality to initialize 188fe56b9e6SYuval Mintz * 189fe56b9e6SYuval Mintz * @return int 190fe56b9e6SYuval Mintz */ 191fe56b9e6SYuval Mintz int qed_hw_prepare(struct qed_dev *cdev, 192fe56b9e6SYuval Mintz int personality); 193fe56b9e6SYuval Mintz 194fe56b9e6SYuval Mintz /** 195fe56b9e6SYuval Mintz * @brief qed_hw_remove - 196fe56b9e6SYuval Mintz * 197fe56b9e6SYuval Mintz * @param cdev 198fe56b9e6SYuval Mintz */ 199fe56b9e6SYuval Mintz void qed_hw_remove(struct qed_dev *cdev); 200fe56b9e6SYuval Mintz 201fe56b9e6SYuval Mintz /** 202fe56b9e6SYuval Mintz * @brief qed_ptt_acquire - Allocate a PTT window 203fe56b9e6SYuval Mintz * 204fe56b9e6SYuval Mintz * Should be called at the entry point to the driver (at the beginning of an 205fe56b9e6SYuval Mintz * exported function) 206fe56b9e6SYuval Mintz * 207fe56b9e6SYuval Mintz * @param p_hwfn 208fe56b9e6SYuval Mintz * 209fe56b9e6SYuval Mintz * @return struct qed_ptt 210fe56b9e6SYuval Mintz */ 211fe56b9e6SYuval Mintz struct qed_ptt *qed_ptt_acquire(struct qed_hwfn *p_hwfn); 212fe56b9e6SYuval Mintz 213fe56b9e6SYuval Mintz /** 214fe56b9e6SYuval Mintz * @brief qed_ptt_release - Release PTT Window 215fe56b9e6SYuval Mintz * 216fe56b9e6SYuval Mintz * Should be called at the end of a flow - at the end of the function that 217fe56b9e6SYuval Mintz * acquired the PTT. 218fe56b9e6SYuval Mintz * 219fe56b9e6SYuval Mintz * 220fe56b9e6SYuval Mintz * @param p_hwfn 221fe56b9e6SYuval Mintz * @param p_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 /* value of flags If QED_DMAE_FLAG_RW_REPL_SRC flag is set and the 234fe56b9e6SYuval Mintz * source is a block of length DMAE_MAX_RW_SIZE and the 235fe56b9e6SYuval Mintz * destination is larger, the source block will be duplicated as 236fe56b9e6SYuval Mintz * many times as required to fill the destination block. This is 237fe56b9e6SYuval Mintz * used mostly to write a zeroed buffer to destination address 238fe56b9e6SYuval Mintz * using DMA 239fe56b9e6SYuval Mintz */ 240fe56b9e6SYuval Mintz #define QED_DMAE_FLAG_RW_REPL_SRC 0x00000001 24137bff2b9SYuval Mintz #define QED_DMAE_FLAG_VF_SRC 0x00000002 24237bff2b9SYuval Mintz #define QED_DMAE_FLAG_VF_DST 0x00000004 243fe56b9e6SYuval Mintz #define QED_DMAE_FLAG_COMPLETION_DST 0x00000008 24483bf76e3SMichal Kalderon #define QED_DMAE_FLAG_PORT 0x00000010 24583bf76e3SMichal Kalderon #define QED_DMAE_FLAG_PF_SRC 0x00000020 24683bf76e3SMichal Kalderon #define QED_DMAE_FLAG_PF_DST 0x00000040 247fe56b9e6SYuval Mintz 248fe56b9e6SYuval Mintz struct qed_dmae_params { 249fe56b9e6SYuval Mintz u32 flags; /* consists of QED_DMAE_FLAG_* values */ 25037bff2b9SYuval Mintz u8 src_vfid; 25137bff2b9SYuval Mintz u8 dst_vfid; 25283bf76e3SMichal Kalderon u8 port_id; 25383bf76e3SMichal Kalderon u8 src_pfid; 25483bf76e3SMichal Kalderon u8 dst_pfid; 255fe56b9e6SYuval Mintz }; 256fe56b9e6SYuval Mintz 257fe56b9e6SYuval Mintz /** 258fe56b9e6SYuval Mintz * @brief qed_dmae_host2grc - copy data from source addr to 259fe56b9e6SYuval Mintz * dmae registers using the given ptt 260fe56b9e6SYuval Mintz * 261fe56b9e6SYuval Mintz * @param p_hwfn 262fe56b9e6SYuval Mintz * @param p_ptt 263fe56b9e6SYuval Mintz * @param source_addr 264fe56b9e6SYuval Mintz * @param grc_addr (dmae_data_offset) 265fe56b9e6SYuval Mintz * @param size_in_dwords 26683bf76e3SMichal Kalderon * @param p_params (default parameters will be used in case of NULL) 267fe56b9e6SYuval Mintz */ 268fe56b9e6SYuval Mintz int 269fe56b9e6SYuval Mintz qed_dmae_host2grc(struct qed_hwfn *p_hwfn, 270fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 271fe56b9e6SYuval Mintz u64 source_addr, 272fe56b9e6SYuval Mintz u32 grc_addr, 273fe56b9e6SYuval Mintz u32 size_in_dwords, 27483bf76e3SMichal Kalderon struct qed_dmae_params *p_params); 275fe56b9e6SYuval Mintz 276fe56b9e6SYuval Mintz /** 277722003acSSudarsana Reddy Kalluru * @brief qed_dmae_grc2host - Read data from dmae data offset 278722003acSSudarsana Reddy Kalluru * to source address using the given ptt 279722003acSSudarsana Reddy Kalluru * 280722003acSSudarsana Reddy Kalluru * @param p_ptt 281722003acSSudarsana Reddy Kalluru * @param grc_addr (dmae_data_offset) 282722003acSSudarsana Reddy Kalluru * @param dest_addr 283722003acSSudarsana Reddy Kalluru * @param size_in_dwords 28483bf76e3SMichal Kalderon * @param p_params (default parameters will be used in case of NULL) 285722003acSSudarsana Reddy Kalluru */ 286722003acSSudarsana Reddy Kalluru int qed_dmae_grc2host(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, 287722003acSSudarsana Reddy Kalluru u32 grc_addr, dma_addr_t dest_addr, u32 size_in_dwords, 28883bf76e3SMichal Kalderon struct qed_dmae_params *p_params); 289722003acSSudarsana Reddy Kalluru 290722003acSSudarsana Reddy Kalluru /** 29137bff2b9SYuval Mintz * @brief qed_dmae_host2host - copy data from to source address 29237bff2b9SYuval Mintz * to a destination adress (for SRIOV) using the given ptt 29337bff2b9SYuval Mintz * 29437bff2b9SYuval Mintz * @param p_hwfn 29537bff2b9SYuval Mintz * @param p_ptt 29637bff2b9SYuval Mintz * @param source_addr 29737bff2b9SYuval Mintz * @param dest_addr 29837bff2b9SYuval Mintz * @param size_in_dwords 29983bf76e3SMichal Kalderon * @param p_params (default parameters will be used in case of NULL) 30037bff2b9SYuval Mintz */ 30137bff2b9SYuval Mintz int qed_dmae_host2host(struct qed_hwfn *p_hwfn, 30237bff2b9SYuval Mintz struct qed_ptt *p_ptt, 30337bff2b9SYuval Mintz dma_addr_t source_addr, 30437bff2b9SYuval Mintz dma_addr_t dest_addr, 30537bff2b9SYuval Mintz u32 size_in_dwords, struct qed_dmae_params *p_params); 30637bff2b9SYuval Mintz 30737bff2b9SYuval Mintz /** 308fe56b9e6SYuval Mintz * @brief qed_chain_alloc - Allocate and initialize a chain 309fe56b9e6SYuval Mintz * 310fe56b9e6SYuval Mintz * @param p_hwfn 311fe56b9e6SYuval Mintz * @param intended_use 312fe56b9e6SYuval Mintz * @param mode 313fe56b9e6SYuval Mintz * @param num_elems 314fe56b9e6SYuval Mintz * @param elem_size 315fe56b9e6SYuval Mintz * @param p_chain 3161a4a6975SMintz, Yuval * @param ext_pbl - a possible external PBL 317fe56b9e6SYuval Mintz * 318fe56b9e6SYuval Mintz * @return int 319fe56b9e6SYuval Mintz */ 320fe56b9e6SYuval Mintz int 321fe56b9e6SYuval Mintz qed_chain_alloc(struct qed_dev *cdev, 322fe56b9e6SYuval Mintz enum qed_chain_use_mode intended_use, 323fe56b9e6SYuval Mintz enum qed_chain_mode mode, 324a91eb52aSYuval Mintz enum qed_chain_cnt_type cnt_type, 3251a4a6975SMintz, Yuval u32 num_elems, 3261a4a6975SMintz, Yuval size_t elem_size, 3271a4a6975SMintz, Yuval struct qed_chain *p_chain, struct qed_chain_ext_pbl *ext_pbl); 328fe56b9e6SYuval Mintz 329fe56b9e6SYuval Mintz /** 330fe56b9e6SYuval Mintz * @brief qed_chain_free - Free chain DMA memory 331fe56b9e6SYuval Mintz * 332fe56b9e6SYuval Mintz * @param p_hwfn 333fe56b9e6SYuval Mintz * @param p_chain 334fe56b9e6SYuval Mintz */ 335a91eb52aSYuval Mintz void qed_chain_free(struct qed_dev *cdev, struct qed_chain *p_chain); 336fe56b9e6SYuval Mintz 337fe56b9e6SYuval Mintz /** 338cee4d264SManish Chopra * @@brief qed_fw_l2_queue - Get absolute L2 queue ID 339cee4d264SManish Chopra * 340cee4d264SManish Chopra * @param p_hwfn 341cee4d264SManish Chopra * @param src_id - relative to p_hwfn 342cee4d264SManish Chopra * @param dst_id - absolute per engine 343cee4d264SManish Chopra * 344cee4d264SManish Chopra * @return int 345cee4d264SManish Chopra */ 346cee4d264SManish Chopra int qed_fw_l2_queue(struct qed_hwfn *p_hwfn, 347cee4d264SManish Chopra u16 src_id, 348cee4d264SManish Chopra u16 *dst_id); 349cee4d264SManish Chopra 350cee4d264SManish Chopra /** 351cee4d264SManish Chopra * @@brief qed_fw_vport - Get absolute vport ID 352cee4d264SManish Chopra * 353cee4d264SManish Chopra * @param p_hwfn 354cee4d264SManish Chopra * @param src_id - relative to p_hwfn 355cee4d264SManish Chopra * @param dst_id - absolute per engine 356cee4d264SManish Chopra * 357cee4d264SManish Chopra * @return int 358cee4d264SManish Chopra */ 359cee4d264SManish Chopra int qed_fw_vport(struct qed_hwfn *p_hwfn, 360cee4d264SManish Chopra u8 src_id, 361cee4d264SManish Chopra u8 *dst_id); 362cee4d264SManish Chopra 363cee4d264SManish Chopra /** 364cee4d264SManish Chopra * @@brief qed_fw_rss_eng - Get absolute RSS engine ID 365cee4d264SManish Chopra * 366cee4d264SManish Chopra * @param p_hwfn 367cee4d264SManish Chopra * @param src_id - relative to p_hwfn 368cee4d264SManish Chopra * @param dst_id - absolute per engine 369cee4d264SManish Chopra * 370cee4d264SManish Chopra * @return int 371cee4d264SManish Chopra */ 372cee4d264SManish Chopra int qed_fw_rss_eng(struct qed_hwfn *p_hwfn, 373cee4d264SManish Chopra u8 src_id, 374cee4d264SManish Chopra u8 *dst_id); 375cee4d264SManish Chopra 376cee4d264SManish Chopra /** 3770a7fb11cSYuval Mintz * @brief qed_llh_add_mac_filter - configures a MAC filter in llh 3780a7fb11cSYuval Mintz * 3790a7fb11cSYuval Mintz * @param p_hwfn 3800a7fb11cSYuval Mintz * @param p_ptt 3810a7fb11cSYuval Mintz * @param p_filter - MAC to add 3820a7fb11cSYuval Mintz */ 3830a7fb11cSYuval Mintz int qed_llh_add_mac_filter(struct qed_hwfn *p_hwfn, 3840a7fb11cSYuval Mintz struct qed_ptt *p_ptt, u8 *p_filter); 3850a7fb11cSYuval Mintz 3860a7fb11cSYuval Mintz /** 3870a7fb11cSYuval Mintz * @brief qed_llh_remove_mac_filter - removes a MAC filter from llh 3880a7fb11cSYuval Mintz * 3890a7fb11cSYuval Mintz * @param p_hwfn 3900a7fb11cSYuval Mintz * @param p_ptt 3910a7fb11cSYuval Mintz * @param p_filter - MAC to remove 3920a7fb11cSYuval Mintz */ 3930a7fb11cSYuval Mintz void qed_llh_remove_mac_filter(struct qed_hwfn *p_hwfn, 3940a7fb11cSYuval Mintz struct qed_ptt *p_ptt, u8 *p_filter); 3950a7fb11cSYuval Mintz 3961e128c81SArun Easi enum qed_llh_port_filter_type_t { 3971e128c81SArun Easi QED_LLH_FILTER_ETHERTYPE, 3981e128c81SArun Easi QED_LLH_FILTER_TCP_SRC_PORT, 3991e128c81SArun Easi QED_LLH_FILTER_TCP_DEST_PORT, 4001e128c81SArun Easi QED_LLH_FILTER_TCP_SRC_AND_DEST_PORT, 4011e128c81SArun Easi QED_LLH_FILTER_UDP_SRC_PORT, 4021e128c81SArun Easi QED_LLH_FILTER_UDP_DEST_PORT, 4031e128c81SArun Easi QED_LLH_FILTER_UDP_SRC_AND_DEST_PORT 4041e128c81SArun Easi }; 4051e128c81SArun Easi 4061e128c81SArun Easi /** 4071e128c81SArun Easi * @brief qed_llh_add_protocol_filter - configures a protocol filter in llh 4081e128c81SArun Easi * 4091e128c81SArun Easi * @param p_hwfn 4101e128c81SArun Easi * @param p_ptt 4111e128c81SArun Easi * @param source_port_or_eth_type - source port or ethertype to add 4121e128c81SArun Easi * @param dest_port - destination port to add 4131e128c81SArun Easi * @param type - type of filters and comparing 4141e128c81SArun Easi */ 4151e128c81SArun Easi int 4161e128c81SArun Easi qed_llh_add_protocol_filter(struct qed_hwfn *p_hwfn, 4171e128c81SArun Easi struct qed_ptt *p_ptt, 4181e128c81SArun Easi u16 source_port_or_eth_type, 4191e128c81SArun Easi u16 dest_port, 4201e128c81SArun Easi enum qed_llh_port_filter_type_t type); 4211e128c81SArun Easi 4221e128c81SArun Easi /** 4231e128c81SArun Easi * @brief qed_llh_remove_protocol_filter - remove a protocol filter in llh 4241e128c81SArun Easi * 4251e128c81SArun Easi * @param p_hwfn 4261e128c81SArun Easi * @param p_ptt 4271e128c81SArun Easi * @param source_port_or_eth_type - source port or ethertype to add 4281e128c81SArun Easi * @param dest_port - destination port to add 4291e128c81SArun Easi * @param type - type of filters and comparing 4301e128c81SArun Easi */ 4311e128c81SArun Easi void 4321e128c81SArun Easi qed_llh_remove_protocol_filter(struct qed_hwfn *p_hwfn, 4331e128c81SArun Easi struct qed_ptt *p_ptt, 4341e128c81SArun Easi u16 source_port_or_eth_type, 4351e128c81SArun Easi u16 dest_port, 4361e128c81SArun Easi enum qed_llh_port_filter_type_t type); 4371e128c81SArun Easi 4380a7fb11cSYuval Mintz /** 439fe56b9e6SYuval Mintz * *@brief Cleanup of previous driver remains prior to load 440fe56b9e6SYuval Mintz * 441fe56b9e6SYuval Mintz * @param p_hwfn 442fe56b9e6SYuval Mintz * @param p_ptt 443fe56b9e6SYuval Mintz * @param id - For PF, engine-relative. For VF, PF-relative. 4440b55e27dSYuval Mintz * @param is_vf - true iff cleanup is made for a VF. 445fe56b9e6SYuval Mintz * 446fe56b9e6SYuval Mintz * @return int 447fe56b9e6SYuval Mintz */ 448fe56b9e6SYuval Mintz int qed_final_cleanup(struct qed_hwfn *p_hwfn, 4490b55e27dSYuval Mintz struct qed_ptt *p_ptt, u16 id, bool is_vf); 450fe56b9e6SYuval Mintz 451722003acSSudarsana Reddy Kalluru /** 452bf5a94bfSRahul Verma * @brief qed_get_queue_coalesce - Retrieve coalesce value for a given queue. 453bf5a94bfSRahul Verma * 454bf5a94bfSRahul Verma * @param p_hwfn 455bf5a94bfSRahul Verma * @param p_coal - store coalesce value read from the hardware. 456bf5a94bfSRahul Verma * @param p_handle 457bf5a94bfSRahul Verma * 458bf5a94bfSRahul Verma * @return int 459bf5a94bfSRahul Verma **/ 460bf5a94bfSRahul Verma int qed_get_queue_coalesce(struct qed_hwfn *p_hwfn, u16 *coal, void *handle); 461bf5a94bfSRahul Verma 462bf5a94bfSRahul Verma /** 463bf5a94bfSRahul Verma * @brief qed_set_queue_coalesce - Configure coalesce parameters for Rx and 464bf5a94bfSRahul Verma * Tx queue. The fact that we can configure coalescing to up to 511, but on 465477f2d14SRahul Verma * varying accuracy [the bigger the value the less accurate] up to a mistake 466477f2d14SRahul Verma * of 3usec for the highest values. 467477f2d14SRahul Verma * While the API allows setting coalescing per-qid, all queues sharing a SB 468477f2d14SRahul Verma * should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff] 469722003acSSudarsana Reddy Kalluru * otherwise configuration would break. 470722003acSSudarsana Reddy Kalluru * 471bf5a94bfSRahul Verma * 472477f2d14SRahul Verma * @param rx_coal - Rx Coalesce value in micro seconds. 473477f2d14SRahul Verma * @param tx_coal - TX Coalesce value in micro seconds. 474477f2d14SRahul Verma * @param p_handle 475722003acSSudarsana Reddy Kalluru * 476722003acSSudarsana Reddy Kalluru * @return int 477477f2d14SRahul Verma **/ 478477f2d14SRahul Verma int 479477f2d14SRahul Verma qed_set_queue_coalesce(u16 rx_coal, u16 tx_coal, void *p_handle); 480477f2d14SRahul Verma 48136907cd5SAriel Elior /** 482666db486STomer Tayar * @brief qed_pglueb_set_pfid_enable - Enable or disable PCI BUS MASTER 483666db486STomer Tayar * 484666db486STomer Tayar * @param p_hwfn 485666db486STomer Tayar * @param p_ptt 486666db486STomer Tayar * @param b_enable - true/false 487666db486STomer Tayar * 488666db486STomer Tayar * @return int 489666db486STomer Tayar */ 490666db486STomer Tayar int qed_pglueb_set_pfid_enable(struct qed_hwfn *p_hwfn, 491666db486STomer Tayar struct qed_ptt *p_ptt, bool b_enable); 492666db486STomer Tayar 493666db486STomer Tayar /** 49436907cd5SAriel Elior * @brief db_recovery_add - add doorbell information to the doorbell 49536907cd5SAriel Elior * recovery mechanism. 49636907cd5SAriel Elior * 49736907cd5SAriel Elior * @param cdev 49836907cd5SAriel Elior * @param db_addr - doorbell address 49936907cd5SAriel Elior * @param db_data - address of where db_data is stored 50036907cd5SAriel Elior * @param db_width - doorbell is 32b pr 64b 50136907cd5SAriel Elior * @param db_space - doorbell recovery addresses are user or kernel space 50236907cd5SAriel Elior */ 50336907cd5SAriel Elior int qed_db_recovery_add(struct qed_dev *cdev, 50436907cd5SAriel Elior void __iomem *db_addr, 50536907cd5SAriel Elior void *db_data, 50636907cd5SAriel Elior enum qed_db_rec_width db_width, 50736907cd5SAriel Elior enum qed_db_rec_space db_space); 50836907cd5SAriel Elior 50936907cd5SAriel Elior /** 51036907cd5SAriel Elior * @brief db_recovery_del - remove doorbell information from the doorbell 51136907cd5SAriel Elior * recovery mechanism. db_data serves as key (db_addr is not unique). 51236907cd5SAriel Elior * 51336907cd5SAriel Elior * @param cdev 51436907cd5SAriel Elior * @param db_addr - doorbell address 51536907cd5SAriel Elior * @param db_data - address where db_data is stored. Serves as key for the 51636907cd5SAriel Elior * entry to delete. 51736907cd5SAriel Elior */ 51836907cd5SAriel Elior int qed_db_recovery_del(struct qed_dev *cdev, 51936907cd5SAriel Elior void __iomem *db_addr, void *db_data); 52036907cd5SAriel Elior 5219c8517c4STomer Tayar 5229c8517c4STomer Tayar const char *qed_hw_get_resc_name(enum qed_resources res_id); 523fe56b9e6SYuval Mintz #endif 524