1/******************************************************************************
2
3  Copyright (c) 2013-2019, Intel Corporation
4  All rights reserved.
5
6  Redistribution and use in source and binary forms, with or without
7  modification, are permitted provided that the following conditions are met:
8
9   1. Redistributions of source code must retain the above copyright notice,
10      this list of conditions and the following disclaimer.
11
12   2. Redistributions in binary form must reproduce the above copyright
13      notice, this list of conditions and the following disclaimer in the
14      documentation and/or other materials provided with the distribution.
15
16   3. Neither the name of the Intel Corporation nor the names of its
17      contributors may be used to endorse or promote products derived from
18      this software without specific prior written permission.
19
20  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: stable/11/sys/dev/ixl/i40e_prototype.h 349163 2019-06-18 00:08:02Z erj $*/
34
35#ifndef _I40E_PROTOTYPE_H_
36#define _I40E_PROTOTYPE_H_
37
38#include "i40e_type.h"
39#include "i40e_alloc.h"
40#include "virtchnl.h"
41
42/* Prototypes for shared code functions that are not in
43 * the standard function pointer structures.  These are
44 * mostly because they are needed even before the init
45 * has happened and will assist in the early SW and FW
46 * setup.
47 */
48
49/* adminq functions */
50enum i40e_status_code i40e_init_adminq(struct i40e_hw *hw);
51enum i40e_status_code i40e_shutdown_adminq(struct i40e_hw *hw);
52enum i40e_status_code i40e_init_asq(struct i40e_hw *hw);
53enum i40e_status_code i40e_init_arq(struct i40e_hw *hw);
54enum i40e_status_code i40e_alloc_adminq_asq_ring(struct i40e_hw *hw);
55enum i40e_status_code i40e_alloc_adminq_arq_ring(struct i40e_hw *hw);
56enum i40e_status_code i40e_shutdown_asq(struct i40e_hw *hw);
57enum i40e_status_code i40e_shutdown_arq(struct i40e_hw *hw);
58u16 i40e_clean_asq(struct i40e_hw *hw);
59void i40e_free_adminq_asq(struct i40e_hw *hw);
60void i40e_free_adminq_arq(struct i40e_hw *hw);
61enum i40e_status_code i40e_validate_mac_addr(u8 *mac_addr);
62void i40e_adminq_init_ring_data(struct i40e_hw *hw);
63enum i40e_status_code i40e_clean_arq_element(struct i40e_hw *hw,
64					     struct i40e_arq_event_info *e,
65					     u16 *events_pending);
66enum i40e_status_code i40e_asq_send_command(struct i40e_hw *hw,
67				struct i40e_aq_desc *desc,
68				void *buff, /* can be NULL */
69				u16  buff_size,
70				struct i40e_asq_cmd_details *cmd_details);
71bool i40e_asq_done(struct i40e_hw *hw);
72
73/* debug function for adminq */
74void i40e_debug_aq(struct i40e_hw *hw, enum i40e_debug_mask mask,
75		   void *desc, void *buffer, u16 buf_len);
76
77void i40e_idle_aq(struct i40e_hw *hw);
78bool i40e_check_asq_alive(struct i40e_hw *hw);
79enum i40e_status_code i40e_aq_queue_shutdown(struct i40e_hw *hw, bool unloading);
80
81enum i40e_status_code i40e_aq_get_rss_lut(struct i40e_hw *hw, u16 seid,
82					  bool pf_lut, u8 *lut, u16 lut_size);
83enum i40e_status_code i40e_aq_set_rss_lut(struct i40e_hw *hw, u16 seid,
84					  bool pf_lut, u8 *lut, u16 lut_size);
85enum i40e_status_code i40e_aq_get_rss_key(struct i40e_hw *hw,
86				     u16 seid,
87				     struct i40e_aqc_get_set_rss_key_data *key);
88enum i40e_status_code i40e_aq_set_rss_key(struct i40e_hw *hw,
89				     u16 seid,
90				     struct i40e_aqc_get_set_rss_key_data *key);
91const char *i40e_aq_str(struct i40e_hw *hw, enum i40e_admin_queue_err aq_err);
92const char *i40e_stat_str(struct i40e_hw *hw, enum i40e_status_code stat_err);
93
94
95u32 i40e_led_get(struct i40e_hw *hw);
96void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink);
97enum i40e_status_code i40e_led_set_phy(struct i40e_hw *hw, bool on,
98				       u16 led_addr, u32 mode);
99enum i40e_status_code i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
100				       u16 *val);
101enum i40e_status_code i40e_blink_phy_link_led(struct i40e_hw *hw,
102					      u32 time, u32 interval);
103
104enum i40e_status_code i40e_get_phy_lpi_status(struct i40e_hw *hw,
105					      struct i40e_hw_port_stats *stats);
106enum i40e_status_code i40e_get_lpi_counters(struct i40e_hw *hw, u32 *tx_counter,
107					    u32 *rx_counter);
108enum i40e_status_code i40e_lpi_stat_update(struct i40e_hw *hw,
109					   bool offset_loaded, u64 *tx_offset,
110					   u64 *tx_stat, u64 *rx_offset,
111					   u64 *rx_stat);
112/* admin send queue commands */
113
114enum i40e_status_code i40e_aq_get_firmware_version(struct i40e_hw *hw,
115				u16 *fw_major_version, u16 *fw_minor_version,
116				u32 *fw_build,
117				u16 *api_major_version, u16 *api_minor_version,
118				struct i40e_asq_cmd_details *cmd_details);
119enum i40e_status_code i40e_aq_debug_write_register(struct i40e_hw *hw,
120				u32 reg_addr, u64 reg_val,
121				struct i40e_asq_cmd_details *cmd_details);
122enum i40e_status_code i40e_aq_debug_read_register(struct i40e_hw *hw,
123				u32  reg_addr, u64 *reg_val,
124				struct i40e_asq_cmd_details *cmd_details);
125enum i40e_status_code i40e_aq_set_phy_debug(struct i40e_hw *hw, u8 cmd_flags,
126				struct i40e_asq_cmd_details *cmd_details);
127enum i40e_status_code i40e_aq_set_default_vsi(struct i40e_hw *hw, u16 vsi_id,
128				struct i40e_asq_cmd_details *cmd_details);
129enum i40e_status_code i40e_aq_clear_default_vsi(struct i40e_hw *hw, u16 vsi_id,
130				struct i40e_asq_cmd_details *cmd_details);
131enum i40e_status_code i40e_aq_get_phy_capabilities(struct i40e_hw *hw,
132			bool qualified_modules, bool report_init,
133			struct i40e_aq_get_phy_abilities_resp *abilities,
134			struct i40e_asq_cmd_details *cmd_details);
135enum i40e_status_code i40e_aq_set_phy_config(struct i40e_hw *hw,
136				struct i40e_aq_set_phy_config *config,
137				struct i40e_asq_cmd_details *cmd_details);
138enum i40e_status_code i40e_set_fc(struct i40e_hw *hw, u8 *aq_failures,
139				  bool atomic_reset);
140enum i40e_status_code i40e_aq_set_phy_int_mask(struct i40e_hw *hw, u16 mask,
141				struct i40e_asq_cmd_details *cmd_details);
142enum i40e_status_code i40e_aq_set_mac_config(struct i40e_hw *hw,
143				u16 max_frame_size, bool crc_en, u16 pacing,
144				struct i40e_asq_cmd_details *cmd_details);
145enum i40e_status_code i40e_aq_get_local_advt_reg(struct i40e_hw *hw,
146				u64 *advt_reg,
147				struct i40e_asq_cmd_details *cmd_details);
148enum i40e_status_code i40e_aq_get_partner_advt(struct i40e_hw *hw,
149				u64 *advt_reg,
150				struct i40e_asq_cmd_details *cmd_details);
151enum i40e_status_code
152i40e_aq_set_lb_modes(struct i40e_hw *hw, u8 lb_level, u8 lb_type, u8 speed,
153		     struct i40e_asq_cmd_details *cmd_details);
154enum i40e_status_code i40e_aq_clear_pxe_mode(struct i40e_hw *hw,
155			struct i40e_asq_cmd_details *cmd_details);
156enum i40e_status_code i40e_aq_set_link_restart_an(struct i40e_hw *hw,
157		bool enable_link, struct i40e_asq_cmd_details *cmd_details);
158enum i40e_status_code i40e_aq_get_link_info(struct i40e_hw *hw,
159				bool enable_lse, struct i40e_link_status *link,
160				struct i40e_asq_cmd_details *cmd_details);
161enum i40e_status_code i40e_aq_set_local_advt_reg(struct i40e_hw *hw,
162				u64 advt_reg,
163				struct i40e_asq_cmd_details *cmd_details);
164enum i40e_status_code i40e_aq_send_driver_version(struct i40e_hw *hw,
165				struct i40e_driver_version *dv,
166				struct i40e_asq_cmd_details *cmd_details);
167enum i40e_status_code i40e_aq_add_vsi(struct i40e_hw *hw,
168				struct i40e_vsi_context *vsi_ctx,
169				struct i40e_asq_cmd_details *cmd_details);
170enum i40e_status_code i40e_aq_set_vsi_broadcast(struct i40e_hw *hw,
171				u16 vsi_id, bool set_filter,
172				struct i40e_asq_cmd_details *cmd_details);
173enum i40e_status_code i40e_aq_set_vsi_unicast_promiscuous(struct i40e_hw *hw,
174		u16 vsi_id, bool set, struct i40e_asq_cmd_details *cmd_details,
175		bool rx_only_promisc);
176enum i40e_status_code i40e_aq_set_vsi_multicast_promiscuous(struct i40e_hw *hw,
177		u16 vsi_id, bool set, struct i40e_asq_cmd_details *cmd_details);
178enum i40e_status_code i40e_aq_set_vsi_full_promiscuous(struct i40e_hw *hw,
179				u16 seid, bool set,
180				struct i40e_asq_cmd_details *cmd_details);
181enum i40e_status_code i40e_aq_set_vsi_mc_promisc_on_vlan(struct i40e_hw *hw,
182				u16 seid, bool enable, u16 vid,
183				struct i40e_asq_cmd_details *cmd_details);
184enum i40e_status_code i40e_aq_set_vsi_uc_promisc_on_vlan(struct i40e_hw *hw,
185				u16 seid, bool enable, u16 vid,
186				struct i40e_asq_cmd_details *cmd_details);
187enum i40e_status_code i40e_aq_set_vsi_bc_promisc_on_vlan(struct i40e_hw *hw,
188				u16 seid, bool enable, u16 vid,
189				struct i40e_asq_cmd_details *cmd_details);
190enum i40e_status_code i40e_aq_set_vsi_vlan_promisc(struct i40e_hw *hw,
191				u16 seid, bool enable,
192				struct i40e_asq_cmd_details *cmd_details);
193enum i40e_status_code i40e_aq_get_vsi_params(struct i40e_hw *hw,
194				struct i40e_vsi_context *vsi_ctx,
195				struct i40e_asq_cmd_details *cmd_details);
196enum i40e_status_code i40e_aq_update_vsi_params(struct i40e_hw *hw,
197				struct i40e_vsi_context *vsi_ctx,
198				struct i40e_asq_cmd_details *cmd_details);
199enum i40e_status_code i40e_aq_add_veb(struct i40e_hw *hw, u16 uplink_seid,
200				u16 downlink_seid, u8 enabled_tc,
201				bool default_port, u16 *pveb_seid,
202				bool enable_stats,
203				struct i40e_asq_cmd_details *cmd_details);
204enum i40e_status_code i40e_aq_get_veb_parameters(struct i40e_hw *hw,
205				u16 veb_seid, u16 *switch_id, bool *floating,
206				u16 *statistic_index, u16 *vebs_used,
207				u16 *vebs_free,
208				struct i40e_asq_cmd_details *cmd_details);
209enum i40e_status_code i40e_aq_add_macvlan(struct i40e_hw *hw, u16 vsi_id,
210			struct i40e_aqc_add_macvlan_element_data *mv_list,
211			u16 count, struct i40e_asq_cmd_details *cmd_details);
212enum i40e_status_code i40e_aq_remove_macvlan(struct i40e_hw *hw, u16 vsi_id,
213			struct i40e_aqc_remove_macvlan_element_data *mv_list,
214			u16 count, struct i40e_asq_cmd_details *cmd_details);
215enum i40e_status_code i40e_aq_add_mirrorrule(struct i40e_hw *hw, u16 sw_seid,
216			u16 rule_type, u16 dest_vsi, u16 count, __le16 *mr_list,
217			struct i40e_asq_cmd_details *cmd_details,
218			u16 *rule_id, u16 *rules_used, u16 *rules_free);
219enum i40e_status_code i40e_aq_delete_mirrorrule(struct i40e_hw *hw, u16 sw_seid,
220			u16 rule_type, u16 rule_id, u16 count, __le16 *mr_list,
221			struct i40e_asq_cmd_details *cmd_details,
222			u16 *rules_used, u16 *rules_free);
223
224enum i40e_status_code i40e_aq_add_vlan(struct i40e_hw *hw, u16 vsi_id,
225			struct i40e_aqc_add_remove_vlan_element_data *v_list,
226			u8 count, struct i40e_asq_cmd_details *cmd_details);
227enum i40e_status_code i40e_aq_remove_vlan(struct i40e_hw *hw, u16 vsi_id,
228			struct i40e_aqc_add_remove_vlan_element_data *v_list,
229			u8 count, struct i40e_asq_cmd_details *cmd_details);
230enum i40e_status_code i40e_aq_send_msg_to_vf(struct i40e_hw *hw, u16 vfid,
231				u32 v_opcode, u32 v_retval, u8 *msg, u16 msglen,
232				struct i40e_asq_cmd_details *cmd_details);
233enum i40e_status_code i40e_aq_get_switch_config(struct i40e_hw *hw,
234				struct i40e_aqc_get_switch_config_resp *buf,
235				u16 buf_size, u16 *start_seid,
236				struct i40e_asq_cmd_details *cmd_details);
237enum i40e_status_code i40e_aq_set_switch_config(struct i40e_hw *hw,
238				u16 flags, u16 valid_flags, u8 mode,
239				struct i40e_asq_cmd_details *cmd_details);
240enum i40e_status_code i40e_aq_request_resource(struct i40e_hw *hw,
241				enum i40e_aq_resources_ids resource,
242				enum i40e_aq_resource_access_type access,
243				u8 sdp_number, u64 *timeout,
244				struct i40e_asq_cmd_details *cmd_details);
245enum i40e_status_code i40e_aq_release_resource(struct i40e_hw *hw,
246				enum i40e_aq_resources_ids resource,
247				u8 sdp_number,
248				struct i40e_asq_cmd_details *cmd_details);
249enum i40e_status_code i40e_aq_read_nvm(struct i40e_hw *hw, u8 module_pointer,
250				u32 offset, u16 length, void *data,
251				bool last_command,
252				struct i40e_asq_cmd_details *cmd_details);
253enum i40e_status_code i40e_aq_erase_nvm(struct i40e_hw *hw, u8 module_pointer,
254				u32 offset, u16 length, bool last_command,
255				struct i40e_asq_cmd_details *cmd_details);
256enum i40e_status_code i40e_aq_read_nvm_config(struct i40e_hw *hw,
257				u8 cmd_flags, u32 field_id, void *data,
258				u16 buf_size, u16 *element_count,
259				struct i40e_asq_cmd_details *cmd_details);
260enum i40e_status_code i40e_aq_write_nvm_config(struct i40e_hw *hw,
261				u8 cmd_flags, void *data, u16 buf_size,
262				u16 element_count,
263				struct i40e_asq_cmd_details *cmd_details);
264enum i40e_status_code i40e_aq_oem_post_update(struct i40e_hw *hw,
265				void *buff, u16 buff_size,
266				struct i40e_asq_cmd_details *cmd_details);
267enum i40e_status_code i40e_aq_discover_capabilities(struct i40e_hw *hw,
268				void *buff, u16 buff_size, u16 *data_size,
269				enum i40e_admin_queue_opc list_type_opc,
270				struct i40e_asq_cmd_details *cmd_details);
271enum i40e_status_code i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer,
272				u32 offset, u16 length, void *data,
273				bool last_command, u8 preservation_flags,
274				struct i40e_asq_cmd_details *cmd_details);
275enum i40e_status_code i40e_aq_rearrange_nvm(struct i40e_hw *hw,
276				u8 rearrange_nvm,
277				struct i40e_asq_cmd_details *cmd_details);
278enum i40e_status_code i40e_aq_nvm_progress(struct i40e_hw *hw, u8 *progress,
279				struct i40e_asq_cmd_details *cmd_details);
280enum i40e_status_code i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type,
281				u8 mib_type, void *buff, u16 buff_size,
282				u16 *local_len, u16 *remote_len,
283				struct i40e_asq_cmd_details *cmd_details);
284enum i40e_status_code i40e_aq_set_lldp_mib(struct i40e_hw *hw,
285				u8 mib_type, void *buff, u16 buff_size,
286				struct i40e_asq_cmd_details *cmd_details);
287enum i40e_status_code i40e_aq_cfg_lldp_mib_change_event(struct i40e_hw *hw,
288				bool enable_update,
289				struct i40e_asq_cmd_details *cmd_details);
290enum i40e_status_code
291i40e_aq_restore_lldp(struct i40e_hw *hw, u8 *setting, bool restore,
292		     struct i40e_asq_cmd_details *cmd_details);
293enum i40e_status_code i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
294				bool persist,
295				struct i40e_asq_cmd_details *cmd_details);
296enum i40e_status_code i40e_aq_set_dcb_parameters(struct i40e_hw *hw,
297						 bool dcb_enable,
298						 struct i40e_asq_cmd_details
299						 *cmd_details);
300enum i40e_status_code i40e_aq_start_lldp(struct i40e_hw *hw,
301				bool persist,
302				struct i40e_asq_cmd_details *cmd_details);
303enum i40e_status_code i40e_aq_get_cee_dcb_config(struct i40e_hw *hw,
304				void *buff, u16 buff_size,
305				struct i40e_asq_cmd_details *cmd_details);
306enum i40e_status_code i40e_aq_start_stop_dcbx(struct i40e_hw *hw,
307				bool start_agent,
308				struct i40e_asq_cmd_details *cmd_details);
309enum i40e_status_code i40e_aq_add_udp_tunnel(struct i40e_hw *hw,
310				u16 udp_port, u8 protocol_index,
311				u8 *filter_index,
312				struct i40e_asq_cmd_details *cmd_details);
313enum i40e_status_code i40e_aq_del_udp_tunnel(struct i40e_hw *hw, u8 index,
314				struct i40e_asq_cmd_details *cmd_details);
315enum i40e_status_code i40e_aq_get_switch_resource_alloc(struct i40e_hw *hw,
316			u8 *num_entries,
317			struct i40e_aqc_switch_resource_alloc_element_resp *buf,
318			u16 count,
319			struct i40e_asq_cmd_details *cmd_details);
320enum i40e_status_code i40e_aq_add_pvirt(struct i40e_hw *hw, u16 flags,
321				       u16 mac_seid, u16 vsi_seid,
322				       u16 *ret_seid);
323enum i40e_status_code i40e_aq_add_tag(struct i40e_hw *hw, bool direct_to_queue,
324				u16 vsi_seid, u16 tag, u16 queue_num,
325				u16 *tags_used, u16 *tags_free,
326				struct i40e_asq_cmd_details *cmd_details);
327enum i40e_status_code i40e_aq_remove_tag(struct i40e_hw *hw, u16 vsi_seid,
328				u16 tag, u16 *tags_used, u16 *tags_free,
329				struct i40e_asq_cmd_details *cmd_details);
330enum i40e_status_code i40e_aq_add_mcast_etag(struct i40e_hw *hw, u16 pe_seid,
331				u16 etag, u8 num_tags_in_buf, void *buf,
332				u16 *tags_used, u16 *tags_free,
333				struct i40e_asq_cmd_details *cmd_details);
334enum i40e_status_code i40e_aq_remove_mcast_etag(struct i40e_hw *hw, u16 pe_seid,
335				u16 etag, u16 *tags_used, u16 *tags_free,
336				struct i40e_asq_cmd_details *cmd_details);
337enum i40e_status_code i40e_aq_update_tag(struct i40e_hw *hw, u16 vsi_seid,
338				u16 old_tag, u16 new_tag, u16 *tags_used,
339				u16 *tags_free,
340				struct i40e_asq_cmd_details *cmd_details);
341enum i40e_status_code i40e_aq_add_statistics(struct i40e_hw *hw, u16 seid,
342				u16 vlan_id, u16 *stat_index,
343				struct i40e_asq_cmd_details *cmd_details);
344enum i40e_status_code i40e_aq_remove_statistics(struct i40e_hw *hw, u16 seid,
345				u16 vlan_id, u16 stat_index,
346				struct i40e_asq_cmd_details *cmd_details);
347enum i40e_status_code i40e_aq_set_port_parameters(struct i40e_hw *hw,
348				u16 bad_frame_vsi, bool save_bad_pac,
349				bool pad_short_pac, bool double_vlan,
350				struct i40e_asq_cmd_details *cmd_details);
351enum i40e_status_code i40e_aq_delete_element(struct i40e_hw *hw, u16 seid,
352				struct i40e_asq_cmd_details *cmd_details);
353enum i40e_status_code i40e_aq_mac_address_write(struct i40e_hw *hw,
354				    u16 flags, u8 *mac_addr,
355				    struct i40e_asq_cmd_details *cmd_details);
356enum i40e_status_code i40e_aq_config_vsi_bw_limit(struct i40e_hw *hw,
357				u16 seid, u16 credit, u8 max_credit,
358				struct i40e_asq_cmd_details *cmd_details);
359enum i40e_status_code i40e_aq_dcb_ignore_pfc(struct i40e_hw *hw,
360				u8 tcmap, bool request, u8 *tcmap_ret,
361				struct i40e_asq_cmd_details *cmd_details);
362enum i40e_status_code i40e_aq_config_switch_comp_ets_bw_limit(
363	struct i40e_hw *hw, u16 seid,
364	struct i40e_aqc_configure_switching_comp_ets_bw_limit_data *bw_data,
365	struct i40e_asq_cmd_details *cmd_details);
366enum i40e_status_code i40e_aq_config_vsi_ets_sla_bw_limit(struct i40e_hw *hw,
367			u16 seid,
368			struct i40e_aqc_configure_vsi_ets_sla_bw_data *bw_data,
369			struct i40e_asq_cmd_details *cmd_details);
370enum i40e_status_code i40e_aq_dcb_updated(struct i40e_hw *hw,
371				struct i40e_asq_cmd_details *cmd_details);
372enum i40e_status_code i40e_aq_config_switch_comp_bw_limit(struct i40e_hw *hw,
373				u16 seid, u16 credit, u8 max_bw,
374				struct i40e_asq_cmd_details *cmd_details);
375enum i40e_status_code i40e_aq_config_vsi_tc_bw(struct i40e_hw *hw, u16 seid,
376			struct i40e_aqc_configure_vsi_tc_bw_data *bw_data,
377			struct i40e_asq_cmd_details *cmd_details);
378enum i40e_status_code i40e_aq_query_vsi_bw_config(struct i40e_hw *hw,
379			u16 seid,
380			struct i40e_aqc_query_vsi_bw_config_resp *bw_data,
381			struct i40e_asq_cmd_details *cmd_details);
382enum i40e_status_code i40e_aq_query_vsi_ets_sla_config(struct i40e_hw *hw,
383			u16 seid,
384			struct i40e_aqc_query_vsi_ets_sla_config_resp *bw_data,
385			struct i40e_asq_cmd_details *cmd_details);
386enum i40e_status_code i40e_aq_query_switch_comp_ets_config(struct i40e_hw *hw,
387		u16 seid,
388		struct i40e_aqc_query_switching_comp_ets_config_resp *bw_data,
389		struct i40e_asq_cmd_details *cmd_details);
390enum i40e_status_code i40e_aq_query_port_ets_config(struct i40e_hw *hw,
391		u16 seid,
392		struct i40e_aqc_query_port_ets_config_resp *bw_data,
393		struct i40e_asq_cmd_details *cmd_details);
394enum i40e_status_code i40e_aq_query_switch_comp_bw_config(struct i40e_hw *hw,
395		u16 seid,
396		struct i40e_aqc_query_switching_comp_bw_config_resp *bw_data,
397		struct i40e_asq_cmd_details *cmd_details);
398enum i40e_status_code i40e_aq_resume_port_tx(struct i40e_hw *hw,
399				struct i40e_asq_cmd_details *cmd_details);
400enum i40e_status_code i40e_read_lldp_cfg(struct i40e_hw *hw,
401					struct i40e_lldp_variables *lldp_cfg);
402enum i40e_status_code i40e_aq_add_cloud_filters(struct i40e_hw *hw,
403		u16 vsi,
404		struct i40e_aqc_add_remove_cloud_filters_element_data *filters,
405		u8 filter_count);
406
407enum i40e_status_code i40e_aq_remove_cloud_filters(struct i40e_hw *hw,
408		u16 vsi,
409		struct i40e_aqc_add_remove_cloud_filters_element_data *filters,
410		u8 filter_count);
411enum i40e_status_code i40e_aq_alternate_read(struct i40e_hw *hw,
412				u32 reg_addr0, u32 *reg_val0,
413				u32 reg_addr1, u32 *reg_val1);
414enum i40e_status_code i40e_aq_alternate_read_indirect(struct i40e_hw *hw,
415				u32 addr, u32 dw_count, void *buffer);
416enum i40e_status_code i40e_aq_alternate_write(struct i40e_hw *hw,
417				u32 reg_addr0, u32 reg_val0,
418				u32 reg_addr1, u32 reg_val1);
419enum i40e_status_code i40e_aq_alternate_write_indirect(struct i40e_hw *hw,
420				u32 addr, u32 dw_count, void *buffer);
421enum i40e_status_code i40e_aq_alternate_clear(struct i40e_hw *hw);
422enum i40e_status_code i40e_aq_alternate_write_done(struct i40e_hw *hw,
423				u8 bios_mode, bool *reset_needed);
424enum i40e_status_code i40e_aq_set_oem_mode(struct i40e_hw *hw,
425				u8 oem_mode);
426
427/* i40e_common */
428enum i40e_status_code i40e_init_shared_code(struct i40e_hw *hw);
429enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw);
430void i40e_clear_hw(struct i40e_hw *hw);
431void i40e_clear_pxe_mode(struct i40e_hw *hw);
432enum i40e_status_code i40e_get_link_status(struct i40e_hw *hw, bool *link_up);
433enum i40e_status_code i40e_update_link_info(struct i40e_hw *hw);
434enum i40e_status_code i40e_get_mac_addr(struct i40e_hw *hw, u8 *mac_addr);
435enum i40e_status_code i40e_read_bw_from_alt_ram(struct i40e_hw *hw,
436		u32 *max_bw, u32 *min_bw, bool *min_valid, bool *max_valid);
437enum i40e_status_code i40e_aq_configure_partition_bw(struct i40e_hw *hw,
438			struct i40e_aqc_configure_partition_bw_data *bw_data,
439			struct i40e_asq_cmd_details *cmd_details);
440enum i40e_status_code i40e_get_port_mac_addr(struct i40e_hw *hw, u8 *mac_addr);
441enum i40e_status_code i40e_read_pba_string(struct i40e_hw *hw, u8 *pba_num,
442					    u32 pba_num_size);
443void i40e_pre_tx_queue_cfg(struct i40e_hw *hw, u32 queue, bool enable);
444enum i40e_aq_link_speed i40e_get_link_speed(struct i40e_hw *hw);
445/* prototype for functions used for NVM access */
446enum i40e_status_code i40e_init_nvm(struct i40e_hw *hw);
447enum i40e_status_code i40e_acquire_nvm(struct i40e_hw *hw,
448				      enum i40e_aq_resource_access_type access);
449void i40e_release_nvm(struct i40e_hw *hw);
450enum i40e_status_code i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
451					 u16 *data);
452enum i40e_status_code i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
453					   u16 *words, u16 *data);
454enum i40e_status_code i40e_write_nvm_aq(struct i40e_hw *hw, u8 module,
455					u32 offset, u16 words, void *data,
456					bool last_command);
457enum i40e_status_code __i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
458					   u16 *data);
459enum i40e_status_code __i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
460					     u16 *words, u16 *data);
461enum i40e_status_code __i40e_write_nvm_word(struct i40e_hw *hw, u32 offset,
462					  void *data);
463enum i40e_status_code __i40e_write_nvm_buffer(struct i40e_hw *hw, u8 module,
464					    u32 offset, u16 words, void *data);
465enum i40e_status_code i40e_calc_nvm_checksum(struct i40e_hw *hw, u16 *checksum);
466enum i40e_status_code i40e_update_nvm_checksum(struct i40e_hw *hw);
467enum i40e_status_code i40e_validate_nvm_checksum(struct i40e_hw *hw,
468						 u16 *checksum);
469enum i40e_status_code i40e_nvmupd_command(struct i40e_hw *hw,
470					  struct i40e_nvm_access *cmd,
471					  u8 *bytes, int *);
472void i40e_nvmupd_check_wait_event(struct i40e_hw *hw, u16 opcode,
473				  struct i40e_aq_desc *desc);
474void i40e_nvmupd_clear_wait_state(struct i40e_hw *hw);
475void i40e_set_pci_config_data(struct i40e_hw *hw, u16 link_status);
476enum i40e_status_code i40e_enable_eee(struct i40e_hw *hw, bool enable);
477
478enum i40e_status_code i40e_set_mac_type(struct i40e_hw *hw);
479
480extern struct i40e_rx_ptype_decoded i40e_ptype_lookup[];
481
482static INLINE struct i40e_rx_ptype_decoded decode_rx_desc_ptype(u8 ptype)
483{
484	return i40e_ptype_lookup[ptype];
485}
486
487/**
488 * i40e_virtchnl_link_speed - Convert AdminQ link_speed to virtchnl definition
489 * @link_speed: the speed to convert
490 *
491 * Returns the link_speed in terms of the virtchnl interface, for use in
492 * converting link_speed as reported by the AdminQ into the format used for
493 * talking to virtchnl devices. If we can't represent the link speed properly,
494 * report LINK_SPEED_UNKNOWN.
495 **/
496static INLINE enum virtchnl_link_speed
497i40e_virtchnl_link_speed(enum i40e_aq_link_speed link_speed)
498{
499	switch (link_speed) {
500	case I40E_LINK_SPEED_100MB:
501		return VIRTCHNL_LINK_SPEED_100MB;
502	case I40E_LINK_SPEED_1GB:
503		return VIRTCHNL_LINK_SPEED_1GB;
504	case I40E_LINK_SPEED_2_5GB:
505		return VIRTCHNL_LINK_SPEED_2_5GB;
506	case I40E_LINK_SPEED_5GB:
507		return VIRTCHNL_LINK_SPEED_5GB;
508	case I40E_LINK_SPEED_10GB:
509		return VIRTCHNL_LINK_SPEED_10GB;
510	case I40E_LINK_SPEED_40GB:
511		return VIRTCHNL_LINK_SPEED_40GB;
512	case I40E_LINK_SPEED_20GB:
513		return VIRTCHNL_LINK_SPEED_20GB;
514	case I40E_LINK_SPEED_25GB:
515		return VIRTCHNL_LINK_SPEED_25GB;
516	case I40E_LINK_SPEED_UNKNOWN:
517	default:
518		return VIRTCHNL_LINK_SPEED_UNKNOWN;
519	}
520}
521
522/* prototype for functions used for SW spinlocks */
523void i40e_init_spinlock(struct i40e_spinlock *sp);
524void i40e_acquire_spinlock(struct i40e_spinlock *sp);
525void i40e_release_spinlock(struct i40e_spinlock *sp);
526void i40e_destroy_spinlock(struct i40e_spinlock *sp);
527
528/* i40e_common for VF drivers*/
529void i40e_vf_parse_hw_config(struct i40e_hw *hw,
530			     struct virtchnl_vf_resource *msg);
531enum i40e_status_code i40e_vf_reset(struct i40e_hw *hw);
532enum i40e_status_code i40e_aq_send_msg_to_pf(struct i40e_hw *hw,
533				enum virtchnl_ops v_opcode,
534				enum i40e_status_code v_retval,
535				u8 *msg, u16 msglen,
536				struct i40e_asq_cmd_details *cmd_details);
537enum i40e_status_code i40e_set_filter_control(struct i40e_hw *hw,
538				struct i40e_filter_control_settings *settings);
539enum i40e_status_code i40e_aq_add_rem_control_packet_filter(struct i40e_hw *hw,
540				u8 *mac_addr, u16 ethtype, u16 flags,
541				u16 vsi_seid, u16 queue, bool is_add,
542				struct i40e_control_filter_stats *stats,
543				struct i40e_asq_cmd_details *cmd_details);
544enum i40e_status_code i40e_aq_debug_dump(struct i40e_hw *hw, u8 cluster_id,
545				u8 table_id, u32 start_index, u16 buff_size,
546				void *buff, u16 *ret_buff_size,
547				u8 *ret_next_table, u32 *ret_next_index,
548				struct i40e_asq_cmd_details *cmd_details);
549void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
550						    u16 vsi_seid);
551enum i40e_status_code i40e_aq_rx_ctl_read_register(struct i40e_hw *hw,
552				u32 reg_addr, u32 *reg_val,
553				struct i40e_asq_cmd_details *cmd_details);
554u32 i40e_read_rx_ctl(struct i40e_hw *hw, u32 reg_addr);
555enum i40e_status_code i40e_aq_rx_ctl_write_register(struct i40e_hw *hw,
556				u32 reg_addr, u32 reg_val,
557				struct i40e_asq_cmd_details *cmd_details);
558void i40e_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val);
559enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
560				u8 phy_select, u8 dev_addr, bool page_change,
561				u32 reg_addr, u32 reg_val,
562				struct i40e_asq_cmd_details *cmd_details);
563enum i40e_status_code i40e_aq_get_phy_register(struct i40e_hw *hw,
564				u8 phy_select, u8 dev_addr, bool page_change,
565				u32 reg_addr, u32 *reg_val,
566				struct i40e_asq_cmd_details *cmd_details);
567enum i40e_status_code
568i40e_aq_run_phy_activity(struct i40e_hw *hw, u16 activity_id, u32 opcode,
569			 u32 *cmd_status, u32 *data0, u32 *data1,
570			 struct i40e_asq_cmd_details *cmd_details);
571
572enum i40e_status_code i40e_aq_set_arp_proxy_config(struct i40e_hw *hw,
573			struct i40e_aqc_arp_proxy_data *proxy_config,
574			struct i40e_asq_cmd_details *cmd_details);
575enum i40e_status_code i40e_aq_set_ns_proxy_table_entry(struct i40e_hw *hw,
576			struct i40e_aqc_ns_proxy_data *ns_proxy_table_entry,
577			struct i40e_asq_cmd_details *cmd_details);
578enum i40e_status_code i40e_aq_set_clear_wol_filter(struct i40e_hw *hw,
579			u8 filter_index,
580			struct i40e_aqc_set_wol_filter_data *filter,
581			bool set_filter, bool no_wol_tco,
582			bool filter_valid, bool no_wol_tco_valid,
583			struct i40e_asq_cmd_details *cmd_details);
584enum i40e_status_code i40e_aq_get_wake_event_reason(struct i40e_hw *hw,
585			u16 *wake_reason,
586			struct i40e_asq_cmd_details *cmd_details);
587enum i40e_status_code i40e_aq_clear_all_wol_filters(struct i40e_hw *hw,
588			struct i40e_asq_cmd_details *cmd_details);
589enum i40e_status_code i40e_read_phy_register_clause22(struct i40e_hw *hw,
590					u16 reg, u8 phy_addr, u16 *value);
591enum i40e_status_code i40e_write_phy_register_clause22(struct i40e_hw *hw,
592					u16 reg, u8 phy_addr, u16 value);
593enum i40e_status_code i40e_read_phy_register_clause45(struct i40e_hw *hw,
594				u8 page, u16 reg, u8 phy_addr, u16 *value);
595enum i40e_status_code i40e_write_phy_register_clause45(struct i40e_hw *hw,
596				u8 page, u16 reg, u8 phy_addr, u16 value);
597enum i40e_status_code i40e_read_phy_register(struct i40e_hw *hw,
598				u8 page, u16 reg, u8 phy_addr, u16 *value);
599enum i40e_status_code i40e_write_phy_register(struct i40e_hw *hw,
600				u8 page, u16 reg, u8 phy_addr, u16 value);
601u8 i40e_get_phy_address(struct i40e_hw *hw, u8 dev_num);
602#endif /* _I40E_PROTOTYPE_H_ */
603