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 * 152fe56b9e6SYuval Mintz * @param cdev - qed dev pointer 153fe56b9e6SYuval Mintz * @param mfw_ver - mfw version value 154fe56b9e6SYuval Mintz * 155fe56b9e6SYuval Mintz * @return int - 0 - operation was successul. 156fe56b9e6SYuval Mintz */ 157fe56b9e6SYuval Mintz int qed_mcp_get_mfw_ver(struct qed_dev *cdev, 158fe56b9e6SYuval Mintz u32 *mfw_ver); 159fe56b9e6SYuval Mintz 160fe56b9e6SYuval Mintz /** 161cc875c2eSYuval Mintz * @brief Get media type value of the port. 162cc875c2eSYuval Mintz * 163cc875c2eSYuval Mintz * @param cdev - qed dev pointer 164cc875c2eSYuval Mintz * @param mfw_ver - media type value 165cc875c2eSYuval Mintz * 166cc875c2eSYuval Mintz * @return int - 167cc875c2eSYuval Mintz * 0 - Operation was successul. 168cc875c2eSYuval Mintz * -EBUSY - Operation failed 169cc875c2eSYuval Mintz */ 170cc875c2eSYuval Mintz int qed_mcp_get_media_type(struct qed_dev *cdev, 171cc875c2eSYuval Mintz u32 *media_type); 172cc875c2eSYuval Mintz 173cc875c2eSYuval Mintz /** 174fe56b9e6SYuval Mintz * @brief General function for sending commands to the MCP 175fe56b9e6SYuval Mintz * mailbox. It acquire mutex lock for the entire 176fe56b9e6SYuval Mintz * operation, from sending the request until the MCP 177fe56b9e6SYuval Mintz * response. Waiting for MCP response will be checked up 178fe56b9e6SYuval Mintz * to 5 seconds every 5ms. 179fe56b9e6SYuval Mintz * 180fe56b9e6SYuval Mintz * @param p_hwfn - hw function 181fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 182fe56b9e6SYuval Mintz * @param cmd - command to be sent to the MCP. 183fe56b9e6SYuval Mintz * @param param - Optional param 184fe56b9e6SYuval Mintz * @param o_mcp_resp - The MCP response code (exclude sequence). 185fe56b9e6SYuval Mintz * @param o_mcp_param- Optional parameter provided by the MCP 186fe56b9e6SYuval Mintz * response 187fe56b9e6SYuval Mintz * @return int - 0 - operation 188fe56b9e6SYuval Mintz * was successul. 189fe56b9e6SYuval Mintz */ 190fe56b9e6SYuval Mintz int qed_mcp_cmd(struct qed_hwfn *p_hwfn, 191fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 192fe56b9e6SYuval Mintz u32 cmd, 193fe56b9e6SYuval Mintz u32 param, 194fe56b9e6SYuval Mintz u32 *o_mcp_resp, 195fe56b9e6SYuval Mintz u32 *o_mcp_param); 196fe56b9e6SYuval Mintz 197fe56b9e6SYuval Mintz /** 198fe56b9e6SYuval Mintz * @brief - drains the nig, allowing completion to pass in case of pauses. 199fe56b9e6SYuval Mintz * (Should be called only from sleepable context) 200fe56b9e6SYuval Mintz * 201fe56b9e6SYuval Mintz * @param p_hwfn 202fe56b9e6SYuval Mintz * @param p_ptt 203fe56b9e6SYuval Mintz */ 204fe56b9e6SYuval Mintz int qed_mcp_drain(struct qed_hwfn *p_hwfn, 205fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 206fe56b9e6SYuval Mintz 207fe56b9e6SYuval Mintz /** 208cee4d264SManish Chopra * @brief Get the flash size value 209cee4d264SManish Chopra * 210cee4d264SManish Chopra * @param p_hwfn 211cee4d264SManish Chopra * @param p_ptt 212cee4d264SManish Chopra * @param p_flash_size - flash size in bytes to be filled. 213cee4d264SManish Chopra * 214cee4d264SManish Chopra * @return int - 0 - operation was successul. 215cee4d264SManish Chopra */ 216cee4d264SManish Chopra int qed_mcp_get_flash_size(struct qed_hwfn *p_hwfn, 217cee4d264SManish Chopra struct qed_ptt *p_ptt, 218cee4d264SManish Chopra u32 *p_flash_size); 219cee4d264SManish Chopra 220cee4d264SManish Chopra /** 221fe56b9e6SYuval Mintz * @brief Send driver version to MFW 222fe56b9e6SYuval Mintz * 223fe56b9e6SYuval Mintz * @param p_hwfn 224fe56b9e6SYuval Mintz * @param p_ptt 225fe56b9e6SYuval Mintz * @param version - Version value 226fe56b9e6SYuval Mintz * @param name - Protocol driver name 227fe56b9e6SYuval Mintz * 228fe56b9e6SYuval Mintz * @return int - 0 - operation was successul. 229fe56b9e6SYuval Mintz */ 230fe56b9e6SYuval Mintz int 231fe56b9e6SYuval Mintz qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn, 232fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 233fe56b9e6SYuval Mintz struct qed_mcp_drv_version *p_ver); 234fe56b9e6SYuval Mintz 23591420b83SSudarsana Kalluru /** 23691420b83SSudarsana Kalluru * @brief Set LED status 23791420b83SSudarsana Kalluru * 23891420b83SSudarsana Kalluru * @param p_hwfn 23991420b83SSudarsana Kalluru * @param p_ptt 24091420b83SSudarsana Kalluru * @param mode - LED mode 24191420b83SSudarsana Kalluru * 24291420b83SSudarsana Kalluru * @return int - 0 - operation was successful. 24391420b83SSudarsana Kalluru */ 24491420b83SSudarsana Kalluru int qed_mcp_set_led(struct qed_hwfn *p_hwfn, 24591420b83SSudarsana Kalluru struct qed_ptt *p_ptt, 24691420b83SSudarsana Kalluru enum qed_led_mode mode); 24791420b83SSudarsana Kalluru 248*03dc76caSSudarsana Reddy Kalluru /** 249*03dc76caSSudarsana Reddy Kalluru * @brief Bist register test 250*03dc76caSSudarsana Reddy Kalluru * 251*03dc76caSSudarsana Reddy Kalluru * @param p_hwfn - hw function 252*03dc76caSSudarsana Reddy Kalluru * @param p_ptt - PTT required for register access 253*03dc76caSSudarsana Reddy Kalluru * 254*03dc76caSSudarsana Reddy Kalluru * @return int - 0 - operation was successful. 255*03dc76caSSudarsana Reddy Kalluru */ 256*03dc76caSSudarsana Reddy Kalluru int qed_mcp_bist_register_test(struct qed_hwfn *p_hwfn, 257*03dc76caSSudarsana Reddy Kalluru struct qed_ptt *p_ptt); 258*03dc76caSSudarsana Reddy Kalluru 259*03dc76caSSudarsana Reddy Kalluru /** 260*03dc76caSSudarsana Reddy Kalluru * @brief Bist clock test 261*03dc76caSSudarsana Reddy Kalluru * 262*03dc76caSSudarsana Reddy Kalluru * @param p_hwfn - hw function 263*03dc76caSSudarsana Reddy Kalluru * @param p_ptt - PTT required for register access 264*03dc76caSSudarsana Reddy Kalluru * 265*03dc76caSSudarsana Reddy Kalluru * @return int - 0 - operation was successful. 266*03dc76caSSudarsana Reddy Kalluru */ 267*03dc76caSSudarsana Reddy Kalluru int qed_mcp_bist_clock_test(struct qed_hwfn *p_hwfn, 268*03dc76caSSudarsana Reddy Kalluru struct qed_ptt *p_ptt); 269*03dc76caSSudarsana Reddy Kalluru 270fe56b9e6SYuval Mintz /* Using hwfn number (and not pf_num) is required since in CMT mode, 271fe56b9e6SYuval Mintz * same pf_num may be used by two different hwfn 272fe56b9e6SYuval Mintz * TODO - this shouldn't really be in .h file, but until all fields 273fe56b9e6SYuval Mintz * required during hw-init will be placed in their correct place in shmem 274fe56b9e6SYuval Mintz * we need it in qed_dev.c [for readin the nvram reflection in shmem]. 275fe56b9e6SYuval Mintz */ 276fe56b9e6SYuval Mintz #define MCP_PF_ID_BY_REL(p_hwfn, rel_pfid) (QED_IS_BB((p_hwfn)->cdev) ? \ 277fe56b9e6SYuval Mintz ((rel_pfid) | \ 278fe56b9e6SYuval Mintz ((p_hwfn)->abs_pf_id & 1) << 3) : \ 279fe56b9e6SYuval Mintz rel_pfid) 280fe56b9e6SYuval Mintz #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id) 281fe56b9e6SYuval Mintz 282fe56b9e6SYuval Mintz /* TODO - this is only correct as long as only BB is supported, and 283fe56b9e6SYuval Mintz * no port-swapping is implemented; Afterwards we'll need to fix it. 284fe56b9e6SYuval Mintz */ 285fe56b9e6SYuval Mintz #define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ 286fe56b9e6SYuval Mintz ((_p_hwfn)->cdev->num_ports_in_engines * 2)) 287fe56b9e6SYuval Mintz struct qed_mcp_info { 2885529bad9STomer Tayar spinlock_t lock; 2895529bad9STomer Tayar bool block_mb_sending; 290fe56b9e6SYuval Mintz u32 public_base; 291fe56b9e6SYuval Mintz u32 drv_mb_addr; 292fe56b9e6SYuval Mintz u32 mfw_mb_addr; 293fe56b9e6SYuval Mintz u32 port_addr; 294fe56b9e6SYuval Mintz u16 drv_mb_seq; 295fe56b9e6SYuval Mintz u16 drv_pulse_seq; 296cc875c2eSYuval Mintz struct qed_mcp_link_params link_input; 297cc875c2eSYuval Mintz struct qed_mcp_link_state link_output; 298cc875c2eSYuval Mintz struct qed_mcp_link_capabilities link_capabilities; 299fe56b9e6SYuval Mintz struct qed_mcp_function_info func_info; 300fe56b9e6SYuval Mintz u8 *mfw_mb_cur; 301fe56b9e6SYuval Mintz u8 *mfw_mb_shadow; 302fe56b9e6SYuval Mintz u16 mfw_mb_length; 303fe56b9e6SYuval Mintz u16 mcp_hist; 304fe56b9e6SYuval Mintz }; 305fe56b9e6SYuval Mintz 3065529bad9STomer Tayar struct qed_mcp_mb_params { 3075529bad9STomer Tayar u32 cmd; 3085529bad9STomer Tayar u32 param; 3095529bad9STomer Tayar union drv_union_data *p_data_src; 3105529bad9STomer Tayar union drv_union_data *p_data_dst; 3115529bad9STomer Tayar u32 mcp_resp; 3125529bad9STomer Tayar u32 mcp_param; 3135529bad9STomer Tayar }; 3145529bad9STomer Tayar 315fe56b9e6SYuval Mintz /** 316fe56b9e6SYuval Mintz * @brief Initialize the interface with the MCP 317fe56b9e6SYuval Mintz * 318fe56b9e6SYuval Mintz * @param p_hwfn - HW func 319fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 320fe56b9e6SYuval Mintz * 321fe56b9e6SYuval Mintz * @return int 322fe56b9e6SYuval Mintz */ 323fe56b9e6SYuval Mintz int qed_mcp_cmd_init(struct qed_hwfn *p_hwfn, 324fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 325fe56b9e6SYuval Mintz 326fe56b9e6SYuval Mintz /** 327fe56b9e6SYuval Mintz * @brief Initialize the port interface with the MCP 328fe56b9e6SYuval Mintz * 329fe56b9e6SYuval Mintz * @param p_hwfn 330fe56b9e6SYuval Mintz * @param p_ptt 331fe56b9e6SYuval Mintz * Can only be called after `num_ports_in_engines' is set 332fe56b9e6SYuval Mintz */ 333fe56b9e6SYuval Mintz void qed_mcp_cmd_port_init(struct qed_hwfn *p_hwfn, 334fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 335fe56b9e6SYuval Mintz /** 336fe56b9e6SYuval Mintz * @brief Releases resources allocated during the init process. 337fe56b9e6SYuval Mintz * 338fe56b9e6SYuval Mintz * @param p_hwfn - HW func 339fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 340fe56b9e6SYuval Mintz * 341fe56b9e6SYuval Mintz * @return int 342fe56b9e6SYuval Mintz */ 343fe56b9e6SYuval Mintz 344fe56b9e6SYuval Mintz int qed_mcp_free(struct qed_hwfn *p_hwfn); 345fe56b9e6SYuval Mintz 346fe56b9e6SYuval Mintz /** 347cc875c2eSYuval Mintz * @brief This function is called from the DPC context. After 348cc875c2eSYuval Mintz * pointing PTT to the mfw mb, check for events sent by the MCP 349cc875c2eSYuval Mintz * to the driver and ack them. In case a critical event 350cc875c2eSYuval Mintz * detected, it will be handled here, otherwise the work will be 351cc875c2eSYuval Mintz * queued to a sleepable work-queue. 352cc875c2eSYuval Mintz * 353cc875c2eSYuval Mintz * @param p_hwfn - HW function 354cc875c2eSYuval Mintz * @param p_ptt - PTT required for register access 355cc875c2eSYuval Mintz * @return int - 0 - operation 356cc875c2eSYuval Mintz * was successul. 357cc875c2eSYuval Mintz */ 358cc875c2eSYuval Mintz int qed_mcp_handle_events(struct qed_hwfn *p_hwfn, 359cc875c2eSYuval Mintz struct qed_ptt *p_ptt); 360cc875c2eSYuval Mintz 361cc875c2eSYuval Mintz /** 362fe56b9e6SYuval Mintz * @brief Sends a LOAD_REQ to the MFW, and in case operation 363fe56b9e6SYuval Mintz * succeed, returns whether this PF is the first on the 364fe56b9e6SYuval Mintz * chip/engine/port or function. This function should be 365fe56b9e6SYuval Mintz * called when driver is ready to accept MFW events after 366fe56b9e6SYuval Mintz * Storms initializations are done. 367fe56b9e6SYuval Mintz * 368fe56b9e6SYuval Mintz * @param p_hwfn - hw function 369fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 370fe56b9e6SYuval Mintz * @param p_load_code - The MCP response param containing one 371fe56b9e6SYuval Mintz * of the following: 372fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_ENGINE 373fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_PORT 374fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_FUNCTION 375fe56b9e6SYuval Mintz * @return int - 376fe56b9e6SYuval Mintz * 0 - Operation was successul. 377fe56b9e6SYuval Mintz * -EBUSY - Operation failed 378fe56b9e6SYuval Mintz */ 379fe56b9e6SYuval Mintz int qed_mcp_load_req(struct qed_hwfn *p_hwfn, 380fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 381fe56b9e6SYuval Mintz u32 *p_load_code); 382fe56b9e6SYuval Mintz 383fe56b9e6SYuval Mintz /** 384fe56b9e6SYuval Mintz * @brief Read the MFW mailbox into Current buffer. 385fe56b9e6SYuval Mintz * 386fe56b9e6SYuval Mintz * @param p_hwfn 387fe56b9e6SYuval Mintz * @param p_ptt 388fe56b9e6SYuval Mintz */ 389fe56b9e6SYuval Mintz void qed_mcp_read_mb(struct qed_hwfn *p_hwfn, 390fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 391fe56b9e6SYuval Mintz 392fe56b9e6SYuval Mintz /** 393fe56b9e6SYuval Mintz * @brief - calls during init to read shmem of all function-related info. 394fe56b9e6SYuval Mintz * 395fe56b9e6SYuval Mintz * @param p_hwfn 396fe56b9e6SYuval Mintz * 397fe56b9e6SYuval Mintz * @param return 0 upon success. 398fe56b9e6SYuval Mintz */ 399fe56b9e6SYuval Mintz int qed_mcp_fill_shmem_func_info(struct qed_hwfn *p_hwfn, 400fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 401fe56b9e6SYuval Mintz 402fe56b9e6SYuval Mintz /** 403fe56b9e6SYuval Mintz * @brief - Reset the MCP using mailbox command. 404fe56b9e6SYuval Mintz * 405fe56b9e6SYuval Mintz * @param p_hwfn 406fe56b9e6SYuval Mintz * @param p_ptt 407fe56b9e6SYuval Mintz * 408fe56b9e6SYuval Mintz * @param return 0 upon success. 409fe56b9e6SYuval Mintz */ 410fe56b9e6SYuval Mintz int qed_mcp_reset(struct qed_hwfn *p_hwfn, 411fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 412fe56b9e6SYuval Mintz 413fe56b9e6SYuval Mintz /** 414fe56b9e6SYuval Mintz * @brief indicates whether the MFW objects [under mcp_info] are accessible 415fe56b9e6SYuval Mintz * 416fe56b9e6SYuval Mintz * @param p_hwfn 417fe56b9e6SYuval Mintz * 418fe56b9e6SYuval Mintz * @return true iff MFW is running and mcp_info is initialized 419fe56b9e6SYuval Mintz */ 420fe56b9e6SYuval Mintz bool qed_mcp_is_init(struct qed_hwfn *p_hwfn); 421a64b02d5SManish Chopra int qed_configure_pf_min_bandwidth(struct qed_dev *cdev, u8 min_bw); 4224b01e519SManish Chopra int qed_configure_pf_max_bandwidth(struct qed_dev *cdev, u8 max_bw); 4234b01e519SManish Chopra int __qed_configure_pf_max_bandwidth(struct qed_hwfn *p_hwfn, 4244b01e519SManish Chopra struct qed_ptt *p_ptt, 4254b01e519SManish Chopra struct qed_mcp_link_state *p_link, 4264b01e519SManish Chopra u8 max_bw); 427a64b02d5SManish Chopra int __qed_configure_pf_min_bandwidth(struct qed_hwfn *p_hwfn, 428a64b02d5SManish Chopra struct qed_ptt *p_ptt, 429a64b02d5SManish Chopra struct qed_mcp_link_state *p_link, 430a64b02d5SManish Chopra u8 min_bw); 431fe56b9e6SYuval Mintz #endif 432