1fe56b9e6SYuval Mintz /* QLogic qed NIC Driver 2fe56b9e6SYuval Mintz * Copyright (c) 2015 QLogic Corporation 3fe56b9e6SYuval Mintz * 4fe56b9e6SYuval Mintz * This software is available under the terms of the GNU General Public License 5fe56b9e6SYuval Mintz * (GPL) Version 2, available from the file COPYING in the main directory of 6fe56b9e6SYuval Mintz * this source tree. 7fe56b9e6SYuval Mintz */ 8fe56b9e6SYuval Mintz 9fe56b9e6SYuval Mintz #ifndef _QED_MCP_H 10fe56b9e6SYuval Mintz #define _QED_MCP_H 11fe56b9e6SYuval Mintz 12fe56b9e6SYuval Mintz #include <linux/types.h> 13fe56b9e6SYuval Mintz #include <linux/delay.h> 14fe56b9e6SYuval Mintz #include <linux/slab.h> 155529bad9STomer Tayar #include <linux/spinlock.h> 16fe56b9e6SYuval Mintz #include "qed_hsi.h" 17fe56b9e6SYuval Mintz 18cc875c2eSYuval Mintz struct qed_mcp_link_speed_params { 19cc875c2eSYuval Mintz bool autoneg; 20cc875c2eSYuval Mintz u32 advertised_speeds; /* bitmask of DRV_SPEED_CAPABILITY */ 21cc875c2eSYuval Mintz u32 forced_speed; /* In Mb/s */ 22cc875c2eSYuval Mintz }; 23cc875c2eSYuval Mintz 24cc875c2eSYuval Mintz struct qed_mcp_link_pause_params { 25cc875c2eSYuval Mintz bool autoneg; 26cc875c2eSYuval Mintz bool forced_rx; 27cc875c2eSYuval Mintz bool forced_tx; 28cc875c2eSYuval Mintz }; 29cc875c2eSYuval Mintz 30cc875c2eSYuval Mintz struct qed_mcp_link_params { 31cc875c2eSYuval Mintz struct qed_mcp_link_speed_params speed; 32cc875c2eSYuval Mintz struct qed_mcp_link_pause_params pause; 33cc875c2eSYuval Mintz u32 loopback_mode; 34cc875c2eSYuval Mintz }; 35cc875c2eSYuval Mintz 36cc875c2eSYuval Mintz struct qed_mcp_link_capabilities { 37cc875c2eSYuval Mintz u32 speed_capabilities; 38cc875c2eSYuval Mintz }; 39cc875c2eSYuval Mintz 40cc875c2eSYuval Mintz struct qed_mcp_link_state { 41cc875c2eSYuval Mintz bool link_up; 42cc875c2eSYuval Mintz 43a64b02d5SManish Chopra u32 min_pf_rate; 44a64b02d5SManish Chopra 454b01e519SManish Chopra /* Actual link speed in Mb/s */ 464b01e519SManish Chopra u32 line_speed; 474b01e519SManish Chopra 484b01e519SManish Chopra /* PF max speed in Mb/s, deduced from line_speed 494b01e519SManish Chopra * according to PF max bandwidth configuration. 504b01e519SManish Chopra */ 514b01e519SManish Chopra u32 speed; 52cc875c2eSYuval Mintz bool full_duplex; 53cc875c2eSYuval Mintz 54cc875c2eSYuval Mintz bool an; 55cc875c2eSYuval Mintz bool an_complete; 56cc875c2eSYuval Mintz bool parallel_detection; 57cc875c2eSYuval Mintz bool pfc_enabled; 58cc875c2eSYuval Mintz 59cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_1G_HD BIT(0) 60cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_1G_FD BIT(1) 61cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_10G BIT(2) 62cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_20G BIT(3) 63cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_40G BIT(4) 64cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_50G BIT(5) 65cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_100G BIT(6) 66cc875c2eSYuval Mintz u32 partner_adv_speed; 67cc875c2eSYuval Mintz 68cc875c2eSYuval Mintz bool partner_tx_flow_ctrl_en; 69cc875c2eSYuval Mintz bool partner_rx_flow_ctrl_en; 70cc875c2eSYuval Mintz 71cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SYMMETRIC_PAUSE (1) 72cc875c2eSYuval Mintz #define QED_LINK_PARTNER_ASYMMETRIC_PAUSE (2) 73cc875c2eSYuval Mintz #define QED_LINK_PARTNER_BOTH_PAUSE (3) 74cc875c2eSYuval Mintz u8 partner_adv_pause; 75cc875c2eSYuval Mintz 76cc875c2eSYuval Mintz bool sfp_tx_fault; 77cc875c2eSYuval Mintz }; 78cc875c2eSYuval Mintz 79fe56b9e6SYuval Mintz struct qed_mcp_function_info { 80fe56b9e6SYuval Mintz u8 pause_on_host; 81fe56b9e6SYuval Mintz 82fe56b9e6SYuval Mintz enum qed_pci_personality protocol; 83fe56b9e6SYuval Mintz 84fe56b9e6SYuval Mintz u8 bandwidth_min; 85fe56b9e6SYuval Mintz u8 bandwidth_max; 86fe56b9e6SYuval Mintz 87fe56b9e6SYuval Mintz u8 mac[ETH_ALEN]; 88fe56b9e6SYuval Mintz 89fe56b9e6SYuval Mintz u64 wwn_port; 90fe56b9e6SYuval Mintz u64 wwn_node; 91fe56b9e6SYuval Mintz 92fe56b9e6SYuval Mintz #define QED_MCP_VLAN_UNSET (0xffff) 93fe56b9e6SYuval Mintz u16 ovlan; 94fe56b9e6SYuval Mintz }; 95fe56b9e6SYuval Mintz 96fe56b9e6SYuval Mintz struct qed_mcp_nvm_common { 97fe56b9e6SYuval Mintz u32 offset; 98fe56b9e6SYuval Mintz u32 param; 99fe56b9e6SYuval Mintz u32 resp; 100fe56b9e6SYuval Mintz u32 cmd; 101fe56b9e6SYuval Mintz }; 102fe56b9e6SYuval Mintz 103fe56b9e6SYuval Mintz struct qed_mcp_drv_version { 104fe56b9e6SYuval Mintz u32 version; 105fe56b9e6SYuval Mintz u8 name[MCP_DRV_VER_STR_SIZE - 4]; 106fe56b9e6SYuval Mintz }; 107fe56b9e6SYuval Mintz 108fe56b9e6SYuval Mintz /** 109cc875c2eSYuval Mintz * @brief - returns the link params of the hw function 110cc875c2eSYuval Mintz * 111cc875c2eSYuval Mintz * @param p_hwfn 112cc875c2eSYuval Mintz * 113cc875c2eSYuval Mintz * @returns pointer to link params 114cc875c2eSYuval Mintz */ 115cc875c2eSYuval Mintz struct qed_mcp_link_params *qed_mcp_get_link_params(struct qed_hwfn *); 116cc875c2eSYuval Mintz 117cc875c2eSYuval Mintz /** 118cc875c2eSYuval Mintz * @brief - return the link state of the hw function 119cc875c2eSYuval Mintz * 120cc875c2eSYuval Mintz * @param p_hwfn 121cc875c2eSYuval Mintz * 122cc875c2eSYuval Mintz * @returns pointer to link state 123cc875c2eSYuval Mintz */ 124cc875c2eSYuval Mintz struct qed_mcp_link_state *qed_mcp_get_link_state(struct qed_hwfn *); 125cc875c2eSYuval Mintz 126cc875c2eSYuval Mintz /** 127cc875c2eSYuval Mintz * @brief - return the link capabilities of the hw function 128cc875c2eSYuval Mintz * 129cc875c2eSYuval Mintz * @param p_hwfn 130cc875c2eSYuval Mintz * 131cc875c2eSYuval Mintz * @returns pointer to link capabilities 132cc875c2eSYuval Mintz */ 133cc875c2eSYuval Mintz struct qed_mcp_link_capabilities 134cc875c2eSYuval Mintz *qed_mcp_get_link_capabilities(struct qed_hwfn *p_hwfn); 135cc875c2eSYuval Mintz 136cc875c2eSYuval Mintz /** 137cc875c2eSYuval Mintz * @brief Request the MFW to set the the link according to 'link_input'. 138cc875c2eSYuval Mintz * 139cc875c2eSYuval Mintz * @param p_hwfn 140cc875c2eSYuval Mintz * @param p_ptt 141cc875c2eSYuval Mintz * @param b_up - raise link if `true'. Reset link if `false'. 142cc875c2eSYuval Mintz * 143cc875c2eSYuval Mintz * @return int 144cc875c2eSYuval Mintz */ 145cc875c2eSYuval Mintz int qed_mcp_set_link(struct qed_hwfn *p_hwfn, 146cc875c2eSYuval Mintz struct qed_ptt *p_ptt, 147cc875c2eSYuval Mintz bool b_up); 148cc875c2eSYuval Mintz 149cc875c2eSYuval Mintz /** 150fe56b9e6SYuval Mintz * @brief Get the management firmware version value 151fe56b9e6SYuval Mintz * 1521408cc1fSYuval Mintz * @param p_hwfn 1531408cc1fSYuval Mintz * @param p_ptt 1541408cc1fSYuval Mintz * @param p_mfw_ver - mfw version value 1551408cc1fSYuval Mintz * @param p_running_bundle_id - image id in nvram; Optional. 156fe56b9e6SYuval Mintz * 1571408cc1fSYuval Mintz * @return int - 0 - operation was successful. 158fe56b9e6SYuval Mintz */ 1591408cc1fSYuval Mintz int qed_mcp_get_mfw_ver(struct qed_hwfn *p_hwfn, 1601408cc1fSYuval Mintz struct qed_ptt *p_ptt, 1611408cc1fSYuval Mintz u32 *p_mfw_ver, u32 *p_running_bundle_id); 162fe56b9e6SYuval Mintz 163fe56b9e6SYuval Mintz /** 164cc875c2eSYuval Mintz * @brief Get media type value of the port. 165cc875c2eSYuval Mintz * 166cc875c2eSYuval Mintz * @param cdev - qed dev pointer 167cc875c2eSYuval Mintz * @param mfw_ver - media type value 168cc875c2eSYuval Mintz * 169cc875c2eSYuval Mintz * @return int - 170cc875c2eSYuval Mintz * 0 - Operation was successul. 171cc875c2eSYuval Mintz * -EBUSY - Operation failed 172cc875c2eSYuval Mintz */ 173cc875c2eSYuval Mintz int qed_mcp_get_media_type(struct qed_dev *cdev, 174cc875c2eSYuval Mintz u32 *media_type); 175cc875c2eSYuval Mintz 176cc875c2eSYuval Mintz /** 177fe56b9e6SYuval Mintz * @brief General function for sending commands to the MCP 178fe56b9e6SYuval Mintz * mailbox. It acquire mutex lock for the entire 179fe56b9e6SYuval Mintz * operation, from sending the request until the MCP 180fe56b9e6SYuval Mintz * response. Waiting for MCP response will be checked up 181fe56b9e6SYuval Mintz * to 5 seconds every 5ms. 182fe56b9e6SYuval Mintz * 183fe56b9e6SYuval Mintz * @param p_hwfn - hw function 184fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 185fe56b9e6SYuval Mintz * @param cmd - command to be sent to the MCP. 186fe56b9e6SYuval Mintz * @param param - Optional param 187fe56b9e6SYuval Mintz * @param o_mcp_resp - The MCP response code (exclude sequence). 188fe56b9e6SYuval Mintz * @param o_mcp_param- Optional parameter provided by the MCP 189fe56b9e6SYuval Mintz * response 190fe56b9e6SYuval Mintz * @return int - 0 - operation 191fe56b9e6SYuval Mintz * was successul. 192fe56b9e6SYuval Mintz */ 193fe56b9e6SYuval Mintz int qed_mcp_cmd(struct qed_hwfn *p_hwfn, 194fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 195fe56b9e6SYuval Mintz u32 cmd, 196fe56b9e6SYuval Mintz u32 param, 197fe56b9e6SYuval Mintz u32 *o_mcp_resp, 198fe56b9e6SYuval Mintz u32 *o_mcp_param); 199fe56b9e6SYuval Mintz 200fe56b9e6SYuval Mintz /** 201fe56b9e6SYuval Mintz * @brief - drains the nig, allowing completion to pass in case of pauses. 202fe56b9e6SYuval Mintz * (Should be called only from sleepable context) 203fe56b9e6SYuval Mintz * 204fe56b9e6SYuval Mintz * @param p_hwfn 205fe56b9e6SYuval Mintz * @param p_ptt 206fe56b9e6SYuval Mintz */ 207fe56b9e6SYuval Mintz int qed_mcp_drain(struct qed_hwfn *p_hwfn, 208fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 209fe56b9e6SYuval Mintz 210fe56b9e6SYuval Mintz /** 211cee4d264SManish Chopra * @brief Get the flash size value 212cee4d264SManish Chopra * 213cee4d264SManish Chopra * @param p_hwfn 214cee4d264SManish Chopra * @param p_ptt 215cee4d264SManish Chopra * @param p_flash_size - flash size in bytes to be filled. 216cee4d264SManish Chopra * 217cee4d264SManish Chopra * @return int - 0 - operation was successul. 218cee4d264SManish Chopra */ 219cee4d264SManish Chopra int qed_mcp_get_flash_size(struct qed_hwfn *p_hwfn, 220cee4d264SManish Chopra struct qed_ptt *p_ptt, 221cee4d264SManish Chopra u32 *p_flash_size); 222cee4d264SManish Chopra 223cee4d264SManish Chopra /** 224fe56b9e6SYuval Mintz * @brief Send driver version to MFW 225fe56b9e6SYuval Mintz * 226fe56b9e6SYuval Mintz * @param p_hwfn 227fe56b9e6SYuval Mintz * @param p_ptt 228fe56b9e6SYuval Mintz * @param version - Version value 229fe56b9e6SYuval Mintz * @param name - Protocol driver name 230fe56b9e6SYuval Mintz * 231fe56b9e6SYuval Mintz * @return int - 0 - operation was successul. 232fe56b9e6SYuval Mintz */ 233fe56b9e6SYuval Mintz int 234fe56b9e6SYuval Mintz qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn, 235fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 236fe56b9e6SYuval Mintz struct qed_mcp_drv_version *p_ver); 237fe56b9e6SYuval Mintz 23891420b83SSudarsana Kalluru /** 23991420b83SSudarsana Kalluru * @brief Set LED status 24091420b83SSudarsana Kalluru * 24191420b83SSudarsana Kalluru * @param p_hwfn 24291420b83SSudarsana Kalluru * @param p_ptt 24391420b83SSudarsana Kalluru * @param mode - LED mode 24491420b83SSudarsana Kalluru * 24591420b83SSudarsana Kalluru * @return int - 0 - operation was successful. 24691420b83SSudarsana Kalluru */ 24791420b83SSudarsana Kalluru int qed_mcp_set_led(struct qed_hwfn *p_hwfn, 24891420b83SSudarsana Kalluru struct qed_ptt *p_ptt, 24991420b83SSudarsana Kalluru enum qed_led_mode mode); 25091420b83SSudarsana Kalluru 25103dc76caSSudarsana Reddy Kalluru /** 25203dc76caSSudarsana Reddy Kalluru * @brief Bist register test 25303dc76caSSudarsana Reddy Kalluru * 25403dc76caSSudarsana Reddy Kalluru * @param p_hwfn - hw function 25503dc76caSSudarsana Reddy Kalluru * @param p_ptt - PTT required for register access 25603dc76caSSudarsana Reddy Kalluru * 25703dc76caSSudarsana Reddy Kalluru * @return int - 0 - operation was successful. 25803dc76caSSudarsana Reddy Kalluru */ 25903dc76caSSudarsana Reddy Kalluru int qed_mcp_bist_register_test(struct qed_hwfn *p_hwfn, 26003dc76caSSudarsana Reddy Kalluru struct qed_ptt *p_ptt); 26103dc76caSSudarsana Reddy Kalluru 26203dc76caSSudarsana Reddy Kalluru /** 26303dc76caSSudarsana Reddy Kalluru * @brief Bist clock test 26403dc76caSSudarsana Reddy Kalluru * 26503dc76caSSudarsana Reddy Kalluru * @param p_hwfn - hw function 26603dc76caSSudarsana Reddy Kalluru * @param p_ptt - PTT required for register access 26703dc76caSSudarsana Reddy Kalluru * 26803dc76caSSudarsana Reddy Kalluru * @return int - 0 - operation was successful. 26903dc76caSSudarsana Reddy Kalluru */ 27003dc76caSSudarsana Reddy Kalluru int qed_mcp_bist_clock_test(struct qed_hwfn *p_hwfn, 27103dc76caSSudarsana Reddy Kalluru struct qed_ptt *p_ptt); 27203dc76caSSudarsana Reddy Kalluru 273fe56b9e6SYuval Mintz /* Using hwfn number (and not pf_num) is required since in CMT mode, 274fe56b9e6SYuval Mintz * same pf_num may be used by two different hwfn 275fe56b9e6SYuval Mintz * TODO - this shouldn't really be in .h file, but until all fields 276fe56b9e6SYuval Mintz * required during hw-init will be placed in their correct place in shmem 277fe56b9e6SYuval Mintz * we need it in qed_dev.c [for readin the nvram reflection in shmem]. 278fe56b9e6SYuval Mintz */ 279fe56b9e6SYuval Mintz #define MCP_PF_ID_BY_REL(p_hwfn, rel_pfid) (QED_IS_BB((p_hwfn)->cdev) ? \ 280fe56b9e6SYuval Mintz ((rel_pfid) | \ 281fe56b9e6SYuval Mintz ((p_hwfn)->abs_pf_id & 1) << 3) : \ 282fe56b9e6SYuval Mintz rel_pfid) 283fe56b9e6SYuval Mintz #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id) 284fe56b9e6SYuval Mintz 285fe56b9e6SYuval Mintz /* TODO - this is only correct as long as only BB is supported, and 286fe56b9e6SYuval Mintz * no port-swapping is implemented; Afterwards we'll need to fix it. 287fe56b9e6SYuval Mintz */ 288fe56b9e6SYuval Mintz #define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ 289fe56b9e6SYuval Mintz ((_p_hwfn)->cdev->num_ports_in_engines * 2)) 290fe56b9e6SYuval Mintz struct qed_mcp_info { 2915529bad9STomer Tayar spinlock_t lock; 2925529bad9STomer Tayar bool block_mb_sending; 293fe56b9e6SYuval Mintz u32 public_base; 294fe56b9e6SYuval Mintz u32 drv_mb_addr; 295fe56b9e6SYuval Mintz u32 mfw_mb_addr; 296fe56b9e6SYuval Mintz u32 port_addr; 297fe56b9e6SYuval Mintz u16 drv_mb_seq; 298fe56b9e6SYuval Mintz u16 drv_pulse_seq; 299cc875c2eSYuval Mintz struct qed_mcp_link_params link_input; 300cc875c2eSYuval Mintz struct qed_mcp_link_state link_output; 301cc875c2eSYuval Mintz struct qed_mcp_link_capabilities link_capabilities; 302fe56b9e6SYuval Mintz struct qed_mcp_function_info func_info; 303fe56b9e6SYuval Mintz u8 *mfw_mb_cur; 304fe56b9e6SYuval Mintz u8 *mfw_mb_shadow; 305fe56b9e6SYuval Mintz u16 mfw_mb_length; 306fe56b9e6SYuval Mintz u16 mcp_hist; 307fe56b9e6SYuval Mintz }; 308fe56b9e6SYuval Mintz 3095529bad9STomer Tayar struct qed_mcp_mb_params { 3105529bad9STomer Tayar u32 cmd; 3115529bad9STomer Tayar u32 param; 3125529bad9STomer Tayar union drv_union_data *p_data_src; 3135529bad9STomer Tayar union drv_union_data *p_data_dst; 3145529bad9STomer Tayar u32 mcp_resp; 3155529bad9STomer Tayar u32 mcp_param; 3165529bad9STomer Tayar }; 3175529bad9STomer Tayar 318fe56b9e6SYuval Mintz /** 319fe56b9e6SYuval Mintz * @brief Initialize the interface with the MCP 320fe56b9e6SYuval Mintz * 321fe56b9e6SYuval Mintz * @param p_hwfn - HW func 322fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 323fe56b9e6SYuval Mintz * 324fe56b9e6SYuval Mintz * @return int 325fe56b9e6SYuval Mintz */ 326fe56b9e6SYuval Mintz int qed_mcp_cmd_init(struct qed_hwfn *p_hwfn, 327fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 328fe56b9e6SYuval Mintz 329fe56b9e6SYuval Mintz /** 330fe56b9e6SYuval Mintz * @brief Initialize the port interface with the MCP 331fe56b9e6SYuval Mintz * 332fe56b9e6SYuval Mintz * @param p_hwfn 333fe56b9e6SYuval Mintz * @param p_ptt 334fe56b9e6SYuval Mintz * Can only be called after `num_ports_in_engines' is set 335fe56b9e6SYuval Mintz */ 336fe56b9e6SYuval Mintz void qed_mcp_cmd_port_init(struct qed_hwfn *p_hwfn, 337fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 338fe56b9e6SYuval Mintz /** 339fe56b9e6SYuval Mintz * @brief Releases resources allocated during the init process. 340fe56b9e6SYuval Mintz * 341fe56b9e6SYuval Mintz * @param p_hwfn - HW func 342fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 343fe56b9e6SYuval Mintz * 344fe56b9e6SYuval Mintz * @return int 345fe56b9e6SYuval Mintz */ 346fe56b9e6SYuval Mintz 347fe56b9e6SYuval Mintz int qed_mcp_free(struct qed_hwfn *p_hwfn); 348fe56b9e6SYuval Mintz 349fe56b9e6SYuval Mintz /** 350cc875c2eSYuval Mintz * @brief This function is called from the DPC context. After 351cc875c2eSYuval Mintz * pointing PTT to the mfw mb, check for events sent by the MCP 352cc875c2eSYuval Mintz * to the driver and ack them. In case a critical event 353cc875c2eSYuval Mintz * detected, it will be handled here, otherwise the work will be 354cc875c2eSYuval Mintz * queued to a sleepable work-queue. 355cc875c2eSYuval Mintz * 356cc875c2eSYuval Mintz * @param p_hwfn - HW function 357cc875c2eSYuval Mintz * @param p_ptt - PTT required for register access 358cc875c2eSYuval Mintz * @return int - 0 - operation 359cc875c2eSYuval Mintz * was successul. 360cc875c2eSYuval Mintz */ 361cc875c2eSYuval Mintz int qed_mcp_handle_events(struct qed_hwfn *p_hwfn, 362cc875c2eSYuval Mintz struct qed_ptt *p_ptt); 363cc875c2eSYuval Mintz 364cc875c2eSYuval Mintz /** 365fe56b9e6SYuval Mintz * @brief Sends a LOAD_REQ to the MFW, and in case operation 366fe56b9e6SYuval Mintz * succeed, returns whether this PF is the first on the 367fe56b9e6SYuval Mintz * chip/engine/port or function. This function should be 368fe56b9e6SYuval Mintz * called when driver is ready to accept MFW events after 369fe56b9e6SYuval Mintz * Storms initializations are done. 370fe56b9e6SYuval Mintz * 371fe56b9e6SYuval Mintz * @param p_hwfn - hw function 372fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 373fe56b9e6SYuval Mintz * @param p_load_code - The MCP response param containing one 374fe56b9e6SYuval Mintz * of the following: 375fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_ENGINE 376fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_PORT 377fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_FUNCTION 378fe56b9e6SYuval Mintz * @return int - 379fe56b9e6SYuval Mintz * 0 - Operation was successul. 380fe56b9e6SYuval Mintz * -EBUSY - Operation failed 381fe56b9e6SYuval Mintz */ 382fe56b9e6SYuval Mintz int qed_mcp_load_req(struct qed_hwfn *p_hwfn, 383fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 384fe56b9e6SYuval Mintz u32 *p_load_code); 385fe56b9e6SYuval Mintz 386fe56b9e6SYuval Mintz /** 387fe56b9e6SYuval Mintz * @brief Read the MFW mailbox into Current buffer. 388fe56b9e6SYuval Mintz * 389fe56b9e6SYuval Mintz * @param p_hwfn 390fe56b9e6SYuval Mintz * @param p_ptt 391fe56b9e6SYuval Mintz */ 392fe56b9e6SYuval Mintz void qed_mcp_read_mb(struct qed_hwfn *p_hwfn, 393fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 394fe56b9e6SYuval Mintz 395fe56b9e6SYuval Mintz /** 3960b55e27dSYuval Mintz * @brief Ack to mfw that driver finished FLR process for VFs 3970b55e27dSYuval Mintz * 3980b55e27dSYuval Mintz * @param p_hwfn 3990b55e27dSYuval Mintz * @param p_ptt 4000b55e27dSYuval Mintz * @param vfs_to_ack - bit mask of all engine VFs for which the PF acks. 4010b55e27dSYuval Mintz * 4020b55e27dSYuval Mintz * @param return int - 0 upon success. 4030b55e27dSYuval Mintz */ 4040b55e27dSYuval Mintz int qed_mcp_ack_vf_flr(struct qed_hwfn *p_hwfn, 4050b55e27dSYuval Mintz struct qed_ptt *p_ptt, u32 *vfs_to_ack); 4060b55e27dSYuval Mintz 4070b55e27dSYuval Mintz /** 408fe56b9e6SYuval Mintz * @brief - calls during init to read shmem of all function-related info. 409fe56b9e6SYuval Mintz * 410fe56b9e6SYuval Mintz * @param p_hwfn 411fe56b9e6SYuval Mintz * 412fe56b9e6SYuval Mintz * @param return 0 upon success. 413fe56b9e6SYuval Mintz */ 414fe56b9e6SYuval Mintz int qed_mcp_fill_shmem_func_info(struct qed_hwfn *p_hwfn, 415fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 416fe56b9e6SYuval Mintz 417fe56b9e6SYuval Mintz /** 418fe56b9e6SYuval Mintz * @brief - Reset the MCP using mailbox command. 419fe56b9e6SYuval Mintz * 420fe56b9e6SYuval Mintz * @param p_hwfn 421fe56b9e6SYuval Mintz * @param p_ptt 422fe56b9e6SYuval Mintz * 423fe56b9e6SYuval Mintz * @param return 0 upon success. 424fe56b9e6SYuval Mintz */ 425fe56b9e6SYuval Mintz int qed_mcp_reset(struct qed_hwfn *p_hwfn, 426fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 427fe56b9e6SYuval Mintz 428fe56b9e6SYuval Mintz /** 429fe56b9e6SYuval Mintz * @brief indicates whether the MFW objects [under mcp_info] are accessible 430fe56b9e6SYuval Mintz * 431fe56b9e6SYuval Mintz * @param p_hwfn 432fe56b9e6SYuval Mintz * 433fe56b9e6SYuval Mintz * @return true iff MFW is running and mcp_info is initialized 434fe56b9e6SYuval Mintz */ 435fe56b9e6SYuval Mintz bool qed_mcp_is_init(struct qed_hwfn *p_hwfn); 4361408cc1fSYuval Mintz 4371408cc1fSYuval Mintz /** 4381408cc1fSYuval Mintz * @brief request MFW to configure MSI-X for a VF 4391408cc1fSYuval Mintz * 4401408cc1fSYuval Mintz * @param p_hwfn 4411408cc1fSYuval Mintz * @param p_ptt 4421408cc1fSYuval Mintz * @param vf_id - absolute inside engine 4431408cc1fSYuval Mintz * @param num_sbs - number of entries to request 4441408cc1fSYuval Mintz * 4451408cc1fSYuval Mintz * @return int 4461408cc1fSYuval Mintz */ 4471408cc1fSYuval Mintz int qed_mcp_config_vf_msix(struct qed_hwfn *p_hwfn, 4481408cc1fSYuval Mintz struct qed_ptt *p_ptt, u8 vf_id, u8 num); 4491408cc1fSYuval Mintz 450a64b02d5SManish Chopra int qed_configure_pf_min_bandwidth(struct qed_dev *cdev, u8 min_bw); 4514b01e519SManish Chopra int qed_configure_pf_max_bandwidth(struct qed_dev *cdev, u8 max_bw); 4524b01e519SManish Chopra int __qed_configure_pf_max_bandwidth(struct qed_hwfn *p_hwfn, 4534b01e519SManish Chopra struct qed_ptt *p_ptt, 4544b01e519SManish Chopra struct qed_mcp_link_state *p_link, 4554b01e519SManish Chopra u8 max_bw); 456a64b02d5SManish Chopra int __qed_configure_pf_min_bandwidth(struct qed_hwfn *p_hwfn, 457a64b02d5SManish Chopra struct qed_ptt *p_ptt, 458a64b02d5SManish Chopra struct qed_mcp_link_state *p_link, 459a64b02d5SManish Chopra u8 min_bw); 460*351a4dedSYuval Mintz 461*351a4dedSYuval Mintz int qed_hw_init_first_eth(struct qed_hwfn *p_hwfn, 462*351a4dedSYuval Mintz struct qed_ptt *p_ptt, u8 *p_pf); 463fe56b9e6SYuval Mintz #endif 464