xref: /linux/drivers/net/ethernet/qlogic/qed/qed_mcp.h (revision 03dc76ca1ee5d02401d5a22ed7ddf15b5e9dfe76)
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