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/mutex.h> 15fe56b9e6SYuval Mintz #include <linux/slab.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 43cc875c2eSYuval Mintz u32 speed; /* In Mb/s */ 44cc875c2eSYuval Mintz bool full_duplex; 45cc875c2eSYuval Mintz 46cc875c2eSYuval Mintz bool an; 47cc875c2eSYuval Mintz bool an_complete; 48cc875c2eSYuval Mintz bool parallel_detection; 49cc875c2eSYuval Mintz bool pfc_enabled; 50cc875c2eSYuval Mintz 51cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_1G_HD BIT(0) 52cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_1G_FD BIT(1) 53cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_10G BIT(2) 54cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_20G BIT(3) 55cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_40G BIT(4) 56cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_50G BIT(5) 57cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SPEED_100G BIT(6) 58cc875c2eSYuval Mintz u32 partner_adv_speed; 59cc875c2eSYuval Mintz 60cc875c2eSYuval Mintz bool partner_tx_flow_ctrl_en; 61cc875c2eSYuval Mintz bool partner_rx_flow_ctrl_en; 62cc875c2eSYuval Mintz 63cc875c2eSYuval Mintz #define QED_LINK_PARTNER_SYMMETRIC_PAUSE (1) 64cc875c2eSYuval Mintz #define QED_LINK_PARTNER_ASYMMETRIC_PAUSE (2) 65cc875c2eSYuval Mintz #define QED_LINK_PARTNER_BOTH_PAUSE (3) 66cc875c2eSYuval Mintz u8 partner_adv_pause; 67cc875c2eSYuval Mintz 68cc875c2eSYuval Mintz bool sfp_tx_fault; 69cc875c2eSYuval Mintz }; 70cc875c2eSYuval Mintz 71fe56b9e6SYuval Mintz struct qed_mcp_function_info { 72fe56b9e6SYuval Mintz u8 pause_on_host; 73fe56b9e6SYuval Mintz 74fe56b9e6SYuval Mintz enum qed_pci_personality protocol; 75fe56b9e6SYuval Mintz 76fe56b9e6SYuval Mintz u8 bandwidth_min; 77fe56b9e6SYuval Mintz u8 bandwidth_max; 78fe56b9e6SYuval Mintz 79fe56b9e6SYuval Mintz u8 mac[ETH_ALEN]; 80fe56b9e6SYuval Mintz 81fe56b9e6SYuval Mintz u64 wwn_port; 82fe56b9e6SYuval Mintz u64 wwn_node; 83fe56b9e6SYuval Mintz 84fe56b9e6SYuval Mintz #define QED_MCP_VLAN_UNSET (0xffff) 85fe56b9e6SYuval Mintz u16 ovlan; 86fe56b9e6SYuval Mintz }; 87fe56b9e6SYuval Mintz 88fe56b9e6SYuval Mintz struct qed_mcp_nvm_common { 89fe56b9e6SYuval Mintz u32 offset; 90fe56b9e6SYuval Mintz u32 param; 91fe56b9e6SYuval Mintz u32 resp; 92fe56b9e6SYuval Mintz u32 cmd; 93fe56b9e6SYuval Mintz }; 94fe56b9e6SYuval Mintz 95fe56b9e6SYuval Mintz struct qed_mcp_drv_version { 96fe56b9e6SYuval Mintz u32 version; 97fe56b9e6SYuval Mintz u8 name[MCP_DRV_VER_STR_SIZE - 4]; 98fe56b9e6SYuval Mintz }; 99fe56b9e6SYuval Mintz 100fe56b9e6SYuval Mintz /** 101cc875c2eSYuval Mintz * @brief - returns the link params of the hw function 102cc875c2eSYuval Mintz * 103cc875c2eSYuval Mintz * @param p_hwfn 104cc875c2eSYuval Mintz * 105cc875c2eSYuval Mintz * @returns pointer to link params 106cc875c2eSYuval Mintz */ 107cc875c2eSYuval Mintz struct qed_mcp_link_params *qed_mcp_get_link_params(struct qed_hwfn *); 108cc875c2eSYuval Mintz 109cc875c2eSYuval Mintz /** 110cc875c2eSYuval Mintz * @brief - return the link state of the hw function 111cc875c2eSYuval Mintz * 112cc875c2eSYuval Mintz * @param p_hwfn 113cc875c2eSYuval Mintz * 114cc875c2eSYuval Mintz * @returns pointer to link state 115cc875c2eSYuval Mintz */ 116cc875c2eSYuval Mintz struct qed_mcp_link_state *qed_mcp_get_link_state(struct qed_hwfn *); 117cc875c2eSYuval Mintz 118cc875c2eSYuval Mintz /** 119cc875c2eSYuval Mintz * @brief - return the link capabilities of the hw function 120cc875c2eSYuval Mintz * 121cc875c2eSYuval Mintz * @param p_hwfn 122cc875c2eSYuval Mintz * 123cc875c2eSYuval Mintz * @returns pointer to link capabilities 124cc875c2eSYuval Mintz */ 125cc875c2eSYuval Mintz struct qed_mcp_link_capabilities 126cc875c2eSYuval Mintz *qed_mcp_get_link_capabilities(struct qed_hwfn *p_hwfn); 127cc875c2eSYuval Mintz 128cc875c2eSYuval Mintz /** 129cc875c2eSYuval Mintz * @brief Request the MFW to set the the link according to 'link_input'. 130cc875c2eSYuval Mintz * 131cc875c2eSYuval Mintz * @param p_hwfn 132cc875c2eSYuval Mintz * @param p_ptt 133cc875c2eSYuval Mintz * @param b_up - raise link if `true'. Reset link if `false'. 134cc875c2eSYuval Mintz * 135cc875c2eSYuval Mintz * @return int 136cc875c2eSYuval Mintz */ 137cc875c2eSYuval Mintz int qed_mcp_set_link(struct qed_hwfn *p_hwfn, 138cc875c2eSYuval Mintz struct qed_ptt *p_ptt, 139cc875c2eSYuval Mintz bool b_up); 140cc875c2eSYuval Mintz 141cc875c2eSYuval Mintz /** 142fe56b9e6SYuval Mintz * @brief Get the management firmware version value 143fe56b9e6SYuval Mintz * 144fe56b9e6SYuval Mintz * @param cdev - qed dev pointer 145fe56b9e6SYuval Mintz * @param mfw_ver - mfw version value 146fe56b9e6SYuval Mintz * 147fe56b9e6SYuval Mintz * @return int - 0 - operation was successul. 148fe56b9e6SYuval Mintz */ 149fe56b9e6SYuval Mintz int qed_mcp_get_mfw_ver(struct qed_dev *cdev, 150fe56b9e6SYuval Mintz u32 *mfw_ver); 151fe56b9e6SYuval Mintz 152fe56b9e6SYuval Mintz /** 153cc875c2eSYuval Mintz * @brief Get media type value of the port. 154cc875c2eSYuval Mintz * 155cc875c2eSYuval Mintz * @param cdev - qed dev pointer 156cc875c2eSYuval Mintz * @param mfw_ver - media type value 157cc875c2eSYuval Mintz * 158cc875c2eSYuval Mintz * @return int - 159cc875c2eSYuval Mintz * 0 - Operation was successul. 160cc875c2eSYuval Mintz * -EBUSY - Operation failed 161cc875c2eSYuval Mintz */ 162cc875c2eSYuval Mintz int qed_mcp_get_media_type(struct qed_dev *cdev, 163cc875c2eSYuval Mintz u32 *media_type); 164cc875c2eSYuval Mintz 165cc875c2eSYuval Mintz /** 166fe56b9e6SYuval Mintz * @brief General function for sending commands to the MCP 167fe56b9e6SYuval Mintz * mailbox. It acquire mutex lock for the entire 168fe56b9e6SYuval Mintz * operation, from sending the request until the MCP 169fe56b9e6SYuval Mintz * response. Waiting for MCP response will be checked up 170fe56b9e6SYuval Mintz * to 5 seconds every 5ms. 171fe56b9e6SYuval Mintz * 172fe56b9e6SYuval Mintz * @param p_hwfn - hw function 173fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 174fe56b9e6SYuval Mintz * @param cmd - command to be sent to the MCP. 175fe56b9e6SYuval Mintz * @param param - Optional param 176fe56b9e6SYuval Mintz * @param o_mcp_resp - The MCP response code (exclude sequence). 177fe56b9e6SYuval Mintz * @param o_mcp_param- Optional parameter provided by the MCP 178fe56b9e6SYuval Mintz * response 179fe56b9e6SYuval Mintz * @return int - 0 - operation 180fe56b9e6SYuval Mintz * was successul. 181fe56b9e6SYuval Mintz */ 182fe56b9e6SYuval Mintz int qed_mcp_cmd(struct qed_hwfn *p_hwfn, 183fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 184fe56b9e6SYuval Mintz u32 cmd, 185fe56b9e6SYuval Mintz u32 param, 186fe56b9e6SYuval Mintz u32 *o_mcp_resp, 187fe56b9e6SYuval Mintz u32 *o_mcp_param); 188fe56b9e6SYuval Mintz 189fe56b9e6SYuval Mintz /** 190fe56b9e6SYuval Mintz * @brief - drains the nig, allowing completion to pass in case of pauses. 191fe56b9e6SYuval Mintz * (Should be called only from sleepable context) 192fe56b9e6SYuval Mintz * 193fe56b9e6SYuval Mintz * @param p_hwfn 194fe56b9e6SYuval Mintz * @param p_ptt 195fe56b9e6SYuval Mintz */ 196fe56b9e6SYuval Mintz int qed_mcp_drain(struct qed_hwfn *p_hwfn, 197fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 198fe56b9e6SYuval Mintz 199fe56b9e6SYuval Mintz /** 200cee4d264SManish Chopra * @brief Get the flash size value 201cee4d264SManish Chopra * 202cee4d264SManish Chopra * @param p_hwfn 203cee4d264SManish Chopra * @param p_ptt 204cee4d264SManish Chopra * @param p_flash_size - flash size in bytes to be filled. 205cee4d264SManish Chopra * 206cee4d264SManish Chopra * @return int - 0 - operation was successul. 207cee4d264SManish Chopra */ 208cee4d264SManish Chopra int qed_mcp_get_flash_size(struct qed_hwfn *p_hwfn, 209cee4d264SManish Chopra struct qed_ptt *p_ptt, 210cee4d264SManish Chopra u32 *p_flash_size); 211cee4d264SManish Chopra 212cee4d264SManish Chopra /** 213fe56b9e6SYuval Mintz * @brief Send driver version to MFW 214fe56b9e6SYuval Mintz * 215fe56b9e6SYuval Mintz * @param p_hwfn 216fe56b9e6SYuval Mintz * @param p_ptt 217fe56b9e6SYuval Mintz * @param version - Version value 218fe56b9e6SYuval Mintz * @param name - Protocol driver name 219fe56b9e6SYuval Mintz * 220fe56b9e6SYuval Mintz * @return int - 0 - operation was successul. 221fe56b9e6SYuval Mintz */ 222fe56b9e6SYuval Mintz int 223fe56b9e6SYuval Mintz qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn, 224fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 225fe56b9e6SYuval Mintz struct qed_mcp_drv_version *p_ver); 226fe56b9e6SYuval Mintz 227*91420b83SSudarsana Kalluru /** 228*91420b83SSudarsana Kalluru * @brief Set LED status 229*91420b83SSudarsana Kalluru * 230*91420b83SSudarsana Kalluru * @param p_hwfn 231*91420b83SSudarsana Kalluru * @param p_ptt 232*91420b83SSudarsana Kalluru * @param mode - LED mode 233*91420b83SSudarsana Kalluru * 234*91420b83SSudarsana Kalluru * @return int - 0 - operation was successful. 235*91420b83SSudarsana Kalluru */ 236*91420b83SSudarsana Kalluru int qed_mcp_set_led(struct qed_hwfn *p_hwfn, 237*91420b83SSudarsana Kalluru struct qed_ptt *p_ptt, 238*91420b83SSudarsana Kalluru enum qed_led_mode mode); 239*91420b83SSudarsana Kalluru 240fe56b9e6SYuval Mintz /* Using hwfn number (and not pf_num) is required since in CMT mode, 241fe56b9e6SYuval Mintz * same pf_num may be used by two different hwfn 242fe56b9e6SYuval Mintz * TODO - this shouldn't really be in .h file, but until all fields 243fe56b9e6SYuval Mintz * required during hw-init will be placed in their correct place in shmem 244fe56b9e6SYuval Mintz * we need it in qed_dev.c [for readin the nvram reflection in shmem]. 245fe56b9e6SYuval Mintz */ 246fe56b9e6SYuval Mintz #define MCP_PF_ID_BY_REL(p_hwfn, rel_pfid) (QED_IS_BB((p_hwfn)->cdev) ? \ 247fe56b9e6SYuval Mintz ((rel_pfid) | \ 248fe56b9e6SYuval Mintz ((p_hwfn)->abs_pf_id & 1) << 3) : \ 249fe56b9e6SYuval Mintz rel_pfid) 250fe56b9e6SYuval Mintz #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id) 251fe56b9e6SYuval Mintz 252fe56b9e6SYuval Mintz /* TODO - this is only correct as long as only BB is supported, and 253fe56b9e6SYuval Mintz * no port-swapping is implemented; Afterwards we'll need to fix it. 254fe56b9e6SYuval Mintz */ 255fe56b9e6SYuval Mintz #define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ 256fe56b9e6SYuval Mintz ((_p_hwfn)->cdev->num_ports_in_engines * 2)) 257fe56b9e6SYuval Mintz struct qed_mcp_info { 258fe56b9e6SYuval Mintz struct mutex mutex; /* MCP access lock */ 259fe56b9e6SYuval Mintz u32 public_base; 260fe56b9e6SYuval Mintz u32 drv_mb_addr; 261fe56b9e6SYuval Mintz u32 mfw_mb_addr; 262fe56b9e6SYuval Mintz u32 port_addr; 263fe56b9e6SYuval Mintz u16 drv_mb_seq; 264fe56b9e6SYuval Mintz u16 drv_pulse_seq; 265cc875c2eSYuval Mintz struct qed_mcp_link_params link_input; 266cc875c2eSYuval Mintz struct qed_mcp_link_state link_output; 267cc875c2eSYuval Mintz struct qed_mcp_link_capabilities link_capabilities; 268fe56b9e6SYuval Mintz struct qed_mcp_function_info func_info; 269fe56b9e6SYuval Mintz u8 *mfw_mb_cur; 270fe56b9e6SYuval Mintz u8 *mfw_mb_shadow; 271fe56b9e6SYuval Mintz u16 mfw_mb_length; 272fe56b9e6SYuval Mintz u16 mcp_hist; 273fe56b9e6SYuval Mintz }; 274fe56b9e6SYuval Mintz 275fe56b9e6SYuval Mintz /** 276fe56b9e6SYuval Mintz * @brief Initialize the interface with the MCP 277fe56b9e6SYuval Mintz * 278fe56b9e6SYuval Mintz * @param p_hwfn - HW func 279fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 280fe56b9e6SYuval Mintz * 281fe56b9e6SYuval Mintz * @return int 282fe56b9e6SYuval Mintz */ 283fe56b9e6SYuval Mintz int qed_mcp_cmd_init(struct qed_hwfn *p_hwfn, 284fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 285fe56b9e6SYuval Mintz 286fe56b9e6SYuval Mintz /** 287fe56b9e6SYuval Mintz * @brief Initialize the port interface with the MCP 288fe56b9e6SYuval Mintz * 289fe56b9e6SYuval Mintz * @param p_hwfn 290fe56b9e6SYuval Mintz * @param p_ptt 291fe56b9e6SYuval Mintz * Can only be called after `num_ports_in_engines' is set 292fe56b9e6SYuval Mintz */ 293fe56b9e6SYuval Mintz void qed_mcp_cmd_port_init(struct qed_hwfn *p_hwfn, 294fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 295fe56b9e6SYuval Mintz /** 296fe56b9e6SYuval Mintz * @brief Releases resources allocated during the init process. 297fe56b9e6SYuval Mintz * 298fe56b9e6SYuval Mintz * @param p_hwfn - HW func 299fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 300fe56b9e6SYuval Mintz * 301fe56b9e6SYuval Mintz * @return int 302fe56b9e6SYuval Mintz */ 303fe56b9e6SYuval Mintz 304fe56b9e6SYuval Mintz int qed_mcp_free(struct qed_hwfn *p_hwfn); 305fe56b9e6SYuval Mintz 306fe56b9e6SYuval Mintz /** 307cc875c2eSYuval Mintz * @brief This function is called from the DPC context. After 308cc875c2eSYuval Mintz * pointing PTT to the mfw mb, check for events sent by the MCP 309cc875c2eSYuval Mintz * to the driver and ack them. In case a critical event 310cc875c2eSYuval Mintz * detected, it will be handled here, otherwise the work will be 311cc875c2eSYuval Mintz * queued to a sleepable work-queue. 312cc875c2eSYuval Mintz * 313cc875c2eSYuval Mintz * @param p_hwfn - HW function 314cc875c2eSYuval Mintz * @param p_ptt - PTT required for register access 315cc875c2eSYuval Mintz * @return int - 0 - operation 316cc875c2eSYuval Mintz * was successul. 317cc875c2eSYuval Mintz */ 318cc875c2eSYuval Mintz int qed_mcp_handle_events(struct qed_hwfn *p_hwfn, 319cc875c2eSYuval Mintz struct qed_ptt *p_ptt); 320cc875c2eSYuval Mintz 321cc875c2eSYuval Mintz /** 322fe56b9e6SYuval Mintz * @brief Sends a LOAD_REQ to the MFW, and in case operation 323fe56b9e6SYuval Mintz * succeed, returns whether this PF is the first on the 324fe56b9e6SYuval Mintz * chip/engine/port or function. This function should be 325fe56b9e6SYuval Mintz * called when driver is ready to accept MFW events after 326fe56b9e6SYuval Mintz * Storms initializations are done. 327fe56b9e6SYuval Mintz * 328fe56b9e6SYuval Mintz * @param p_hwfn - hw function 329fe56b9e6SYuval Mintz * @param p_ptt - PTT required for register access 330fe56b9e6SYuval Mintz * @param p_load_code - The MCP response param containing one 331fe56b9e6SYuval Mintz * of the following: 332fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_ENGINE 333fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_PORT 334fe56b9e6SYuval Mintz * FW_MSG_CODE_DRV_LOAD_FUNCTION 335fe56b9e6SYuval Mintz * @return int - 336fe56b9e6SYuval Mintz * 0 - Operation was successul. 337fe56b9e6SYuval Mintz * -EBUSY - Operation failed 338fe56b9e6SYuval Mintz */ 339fe56b9e6SYuval Mintz int qed_mcp_load_req(struct qed_hwfn *p_hwfn, 340fe56b9e6SYuval Mintz struct qed_ptt *p_ptt, 341fe56b9e6SYuval Mintz u32 *p_load_code); 342fe56b9e6SYuval Mintz 343fe56b9e6SYuval Mintz /** 344fe56b9e6SYuval Mintz * @brief Read the MFW mailbox into Current buffer. 345fe56b9e6SYuval Mintz * 346fe56b9e6SYuval Mintz * @param p_hwfn 347fe56b9e6SYuval Mintz * @param p_ptt 348fe56b9e6SYuval Mintz */ 349fe56b9e6SYuval Mintz void qed_mcp_read_mb(struct qed_hwfn *p_hwfn, 350fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 351fe56b9e6SYuval Mintz 352fe56b9e6SYuval Mintz /** 353fe56b9e6SYuval Mintz * @brief - calls during init to read shmem of all function-related info. 354fe56b9e6SYuval Mintz * 355fe56b9e6SYuval Mintz * @param p_hwfn 356fe56b9e6SYuval Mintz * 357fe56b9e6SYuval Mintz * @param return 0 upon success. 358fe56b9e6SYuval Mintz */ 359fe56b9e6SYuval Mintz int qed_mcp_fill_shmem_func_info(struct qed_hwfn *p_hwfn, 360fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 361fe56b9e6SYuval Mintz 362fe56b9e6SYuval Mintz /** 363fe56b9e6SYuval Mintz * @brief - Reset the MCP using mailbox command. 364fe56b9e6SYuval Mintz * 365fe56b9e6SYuval Mintz * @param p_hwfn 366fe56b9e6SYuval Mintz * @param p_ptt 367fe56b9e6SYuval Mintz * 368fe56b9e6SYuval Mintz * @param return 0 upon success. 369fe56b9e6SYuval Mintz */ 370fe56b9e6SYuval Mintz int qed_mcp_reset(struct qed_hwfn *p_hwfn, 371fe56b9e6SYuval Mintz struct qed_ptt *p_ptt); 372fe56b9e6SYuval Mintz 373fe56b9e6SYuval Mintz /** 374fe56b9e6SYuval Mintz * @brief indicates whether the MFW objects [under mcp_info] are accessible 375fe56b9e6SYuval Mintz * 376fe56b9e6SYuval Mintz * @param p_hwfn 377fe56b9e6SYuval Mintz * 378fe56b9e6SYuval Mintz * @return true iff MFW is running and mcp_info is initialized 379fe56b9e6SYuval Mintz */ 380fe56b9e6SYuval Mintz bool qed_mcp_is_init(struct qed_hwfn *p_hwfn); 381fe56b9e6SYuval Mintz 382fe56b9e6SYuval Mintz #endif 383