Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 1 | /******************************************************************************* |
| 2 | * |
| 3 | * Intel Ethernet Controller XL710 Family Linux Driver |
Greg Rose | dc641b7 | 2013-12-18 13:45:51 +0000 | [diff] [blame] | 4 | * Copyright(c) 2013 - 2014 Intel Corporation. |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify it |
| 7 | * under the terms and conditions of the GNU General Public License, |
| 8 | * version 2, as published by the Free Software Foundation. |
| 9 | * |
| 10 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 13 | * more details. |
| 14 | * |
Greg Rose | dc641b7 | 2013-12-18 13:45:51 +0000 | [diff] [blame] | 15 | * You should have received a copy of the GNU General Public License along |
| 16 | * with this program. If not, see <http://www.gnu.org/licenses/>. |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 17 | * |
| 18 | * The full GNU General Public License is included in this distribution in |
| 19 | * the file called "COPYING". |
| 20 | * |
| 21 | * Contact Information: |
| 22 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> |
| 23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 24 | * |
| 25 | ******************************************************************************/ |
| 26 | |
| 27 | #ifndef _I40E_PROTOTYPE_H_ |
| 28 | #define _I40E_PROTOTYPE_H_ |
| 29 | |
| 30 | #include "i40e_type.h" |
| 31 | #include "i40e_alloc.h" |
| 32 | #include "i40e_virtchnl.h" |
| 33 | |
| 34 | /* Prototypes for shared code functions that are not in |
| 35 | * the standard function pointer structures. These are |
| 36 | * mostly because they are needed even before the init |
| 37 | * has happened and will assist in the early SW and FW |
| 38 | * setup. |
| 39 | */ |
| 40 | |
| 41 | /* adminq functions */ |
| 42 | i40e_status i40e_init_adminq(struct i40e_hw *hw); |
| 43 | i40e_status i40e_shutdown_adminq(struct i40e_hw *hw); |
| 44 | void i40e_adminq_init_ring_data(struct i40e_hw *hw); |
| 45 | i40e_status i40e_clean_arq_element(struct i40e_hw *hw, |
| 46 | struct i40e_arq_event_info *e, |
| 47 | u16 *events_pending); |
| 48 | i40e_status i40e_asq_send_command(struct i40e_hw *hw, |
| 49 | struct i40e_aq_desc *desc, |
| 50 | void *buff, /* can be NULL */ |
| 51 | u16 buff_size, |
| 52 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 53 | |
| 54 | /* debug function for adminq */ |
| 55 | void i40e_debug_aq(struct i40e_hw *hw, |
| 56 | enum i40e_debug_mask mask, |
| 57 | void *desc, |
| 58 | void *buffer); |
| 59 | |
| 60 | void i40e_idle_aq(struct i40e_hw *hw); |
Anjali Singhai Jain | e1860d8 | 2013-11-28 06:39:45 +0000 | [diff] [blame] | 61 | bool i40e_check_asq_alive(struct i40e_hw *hw); |
Jesse Brandeburg | 8fb905b | 2014-01-17 15:36:33 -0800 | [diff] [blame] | 62 | i40e_status i40e_aq_queue_shutdown(struct i40e_hw *hw, bool unloading); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 63 | |
| 64 | u32 i40e_led_get(struct i40e_hw *hw); |
Jesse Brandeburg | 0556a9e | 2013-11-28 06:39:33 +0000 | [diff] [blame] | 65 | void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 66 | |
| 67 | /* admin send queue commands */ |
| 68 | |
| 69 | i40e_status i40e_aq_get_firmware_version(struct i40e_hw *hw, |
| 70 | u16 *fw_major_version, u16 *fw_minor_version, |
| 71 | u16 *api_major_version, u16 *api_minor_version, |
| 72 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 73 | i40e_status i40e_aq_set_phy_reset(struct i40e_hw *hw, |
| 74 | struct i40e_asq_cmd_details *cmd_details); |
| 75 | i40e_status i40e_aq_set_default_vsi(struct i40e_hw *hw, u16 vsi_id, |
| 76 | struct i40e_asq_cmd_details *cmd_details); |
Shannon Nelson | c9b9b0a | 2014-04-09 05:59:05 +0000 | [diff] [blame] | 77 | i40e_status i40e_aq_clear_pxe_mode(struct i40e_hw *hw, |
| 78 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 79 | i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw, |
| 80 | struct i40e_asq_cmd_details *cmd_details); |
| 81 | i40e_status i40e_aq_get_link_info(struct i40e_hw *hw, |
| 82 | bool enable_lse, struct i40e_link_status *link, |
| 83 | struct i40e_asq_cmd_details *cmd_details); |
| 84 | i40e_status i40e_aq_set_local_advt_reg(struct i40e_hw *hw, |
| 85 | u64 advt_reg, |
| 86 | struct i40e_asq_cmd_details *cmd_details); |
| 87 | i40e_status i40e_aq_send_driver_version(struct i40e_hw *hw, |
| 88 | struct i40e_driver_version *dv, |
| 89 | struct i40e_asq_cmd_details *cmd_details); |
| 90 | i40e_status i40e_aq_add_vsi(struct i40e_hw *hw, |
| 91 | struct i40e_vsi_context *vsi_ctx, |
| 92 | struct i40e_asq_cmd_details *cmd_details); |
| 93 | i40e_status i40e_aq_set_vsi_broadcast(struct i40e_hw *hw, |
| 94 | u16 vsi_id, bool set_filter, |
| 95 | struct i40e_asq_cmd_details *cmd_details); |
| 96 | i40e_status i40e_aq_set_vsi_unicast_promiscuous(struct i40e_hw *hw, |
Mitch Williams | 885552a | 2013-12-21 05:44:41 +0000 | [diff] [blame] | 97 | u16 vsi_id, bool set, struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 98 | i40e_status i40e_aq_set_vsi_multicast_promiscuous(struct i40e_hw *hw, |
Mitch Williams | 885552a | 2013-12-21 05:44:41 +0000 | [diff] [blame] | 99 | u16 vsi_id, bool set, struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 100 | i40e_status i40e_aq_get_vsi_params(struct i40e_hw *hw, |
| 101 | struct i40e_vsi_context *vsi_ctx, |
| 102 | struct i40e_asq_cmd_details *cmd_details); |
| 103 | i40e_status i40e_aq_update_vsi_params(struct i40e_hw *hw, |
| 104 | struct i40e_vsi_context *vsi_ctx, |
| 105 | struct i40e_asq_cmd_details *cmd_details); |
| 106 | i40e_status i40e_aq_add_veb(struct i40e_hw *hw, u16 uplink_seid, |
| 107 | u16 downlink_seid, u8 enabled_tc, |
Kevin Scott | e1c51b95 | 2013-11-20 10:02:51 +0000 | [diff] [blame] | 108 | bool default_port, bool enable_l2_filtering, |
| 109 | u16 *pveb_seid, |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 110 | struct i40e_asq_cmd_details *cmd_details); |
| 111 | i40e_status i40e_aq_get_veb_parameters(struct i40e_hw *hw, |
| 112 | u16 veb_seid, u16 *switch_id, bool *floating, |
| 113 | u16 *statistic_index, u16 *vebs_used, |
| 114 | u16 *vebs_free, |
| 115 | struct i40e_asq_cmd_details *cmd_details); |
| 116 | i40e_status i40e_aq_add_macvlan(struct i40e_hw *hw, u16 vsi_id, |
| 117 | struct i40e_aqc_add_macvlan_element_data *mv_list, |
| 118 | u16 count, struct i40e_asq_cmd_details *cmd_details); |
| 119 | i40e_status i40e_aq_remove_macvlan(struct i40e_hw *hw, u16 vsi_id, |
| 120 | struct i40e_aqc_remove_macvlan_element_data *mv_list, |
| 121 | u16 count, struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 122 | i40e_status i40e_aq_send_msg_to_vf(struct i40e_hw *hw, u16 vfid, |
| 123 | u32 v_opcode, u32 v_retval, u8 *msg, u16 msglen, |
| 124 | struct i40e_asq_cmd_details *cmd_details); |
| 125 | i40e_status i40e_aq_get_switch_config(struct i40e_hw *hw, |
| 126 | struct i40e_aqc_get_switch_config_resp *buf, |
| 127 | u16 buf_size, u16 *start_seid, |
| 128 | struct i40e_asq_cmd_details *cmd_details); |
| 129 | i40e_status i40e_aq_request_resource(struct i40e_hw *hw, |
| 130 | enum i40e_aq_resources_ids resource, |
| 131 | enum i40e_aq_resource_access_type access, |
| 132 | u8 sdp_number, u64 *timeout, |
| 133 | struct i40e_asq_cmd_details *cmd_details); |
| 134 | i40e_status i40e_aq_release_resource(struct i40e_hw *hw, |
| 135 | enum i40e_aq_resources_ids resource, |
| 136 | u8 sdp_number, |
| 137 | struct i40e_asq_cmd_details *cmd_details); |
| 138 | i40e_status i40e_aq_read_nvm(struct i40e_hw *hw, u8 module_pointer, |
| 139 | u32 offset, u16 length, void *data, |
| 140 | bool last_command, |
| 141 | struct i40e_asq_cmd_details *cmd_details); |
| 142 | i40e_status i40e_aq_discover_capabilities(struct i40e_hw *hw, |
| 143 | void *buff, u16 buff_size, u16 *data_size, |
| 144 | enum i40e_admin_queue_opc list_type_opc, |
| 145 | struct i40e_asq_cmd_details *cmd_details); |
| 146 | i40e_status i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer, |
| 147 | u32 offset, u16 length, void *data, |
| 148 | bool last_command, |
| 149 | struct i40e_asq_cmd_details *cmd_details); |
| 150 | i40e_status i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type, |
| 151 | u8 mib_type, void *buff, u16 buff_size, |
| 152 | u16 *local_len, u16 *remote_len, |
| 153 | struct i40e_asq_cmd_details *cmd_details); |
| 154 | i40e_status i40e_aq_cfg_lldp_mib_change_event(struct i40e_hw *hw, |
| 155 | bool enable_update, |
| 156 | struct i40e_asq_cmd_details *cmd_details); |
| 157 | i40e_status i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent, |
| 158 | struct i40e_asq_cmd_details *cmd_details); |
| 159 | i40e_status i40e_aq_start_lldp(struct i40e_hw *hw, |
| 160 | struct i40e_asq_cmd_details *cmd_details); |
Jeff Kirsher | a1c9a9d | 2013-12-28 07:32:18 +0000 | [diff] [blame] | 161 | i40e_status i40e_aq_add_udp_tunnel(struct i40e_hw *hw, |
Kevin Scott | f4f94b9 | 2014-04-05 07:46:10 +0000 | [diff] [blame] | 162 | u16 udp_port, u8 protocol_index, |
| 163 | u8 *filter_index, |
Jeff Kirsher | a1c9a9d | 2013-12-28 07:32:18 +0000 | [diff] [blame] | 164 | struct i40e_asq_cmd_details *cmd_details); |
| 165 | i40e_status i40e_aq_del_udp_tunnel(struct i40e_hw *hw, u8 index, |
| 166 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 167 | i40e_status i40e_aq_delete_element(struct i40e_hw *hw, u16 seid, |
| 168 | struct i40e_asq_cmd_details *cmd_details); |
| 169 | i40e_status i40e_aq_mac_address_write(struct i40e_hw *hw, |
| 170 | u16 flags, u8 *mac_addr, |
| 171 | struct i40e_asq_cmd_details *cmd_details); |
Mitch Williams | 6b19289 | 2014-03-06 09:02:29 +0000 | [diff] [blame] | 172 | i40e_status i40e_aq_config_vsi_bw_limit(struct i40e_hw *hw, |
| 173 | u16 seid, u16 credit, u8 max_credit, |
| 174 | struct i40e_asq_cmd_details *cmd_details); |
Neerav Parikh | afb3ff0 | 2014-01-17 15:36:36 -0800 | [diff] [blame] | 175 | i40e_status i40e_aq_dcb_updated(struct i40e_hw *hw, |
| 176 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 177 | i40e_status i40e_aq_set_hmc_resource_profile(struct i40e_hw *hw, |
| 178 | enum i40e_aq_hmc_profile profile, |
| 179 | u8 pe_vf_enabled_count, |
| 180 | struct i40e_asq_cmd_details *cmd_details); |
| 181 | i40e_status i40e_aq_config_switch_comp_bw_limit(struct i40e_hw *hw, |
| 182 | u16 seid, u16 credit, u8 max_bw, |
| 183 | struct i40e_asq_cmd_details *cmd_details); |
| 184 | i40e_status i40e_aq_config_vsi_tc_bw(struct i40e_hw *hw, u16 seid, |
| 185 | struct i40e_aqc_configure_vsi_tc_bw_data *bw_data, |
| 186 | struct i40e_asq_cmd_details *cmd_details); |
Neerav Parikh | afb3ff0 | 2014-01-17 15:36:36 -0800 | [diff] [blame] | 187 | i40e_status i40e_aq_config_switch_comp_ets(struct i40e_hw *hw, |
| 188 | u16 seid, |
| 189 | struct i40e_aqc_configure_switching_comp_ets_data *ets_data, |
| 190 | enum i40e_admin_queue_opc opcode, |
| 191 | struct i40e_asq_cmd_details *cmd_details); |
| 192 | i40e_status i40e_aq_config_switch_comp_bw_config(struct i40e_hw *hw, |
| 193 | u16 seid, |
| 194 | struct i40e_aqc_configure_switching_comp_bw_config_data *bw_data, |
| 195 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 196 | i40e_status i40e_aq_query_vsi_bw_config(struct i40e_hw *hw, |
| 197 | u16 seid, |
| 198 | struct i40e_aqc_query_vsi_bw_config_resp *bw_data, |
| 199 | struct i40e_asq_cmd_details *cmd_details); |
| 200 | i40e_status i40e_aq_query_vsi_ets_sla_config(struct i40e_hw *hw, |
| 201 | u16 seid, |
| 202 | struct i40e_aqc_query_vsi_ets_sla_config_resp *bw_data, |
| 203 | struct i40e_asq_cmd_details *cmd_details); |
| 204 | i40e_status i40e_aq_query_switch_comp_ets_config(struct i40e_hw *hw, |
| 205 | u16 seid, |
| 206 | struct i40e_aqc_query_switching_comp_ets_config_resp *bw_data, |
| 207 | struct i40e_asq_cmd_details *cmd_details); |
| 208 | i40e_status i40e_aq_query_port_ets_config(struct i40e_hw *hw, |
| 209 | u16 seid, |
| 210 | struct i40e_aqc_query_port_ets_config_resp *bw_data, |
| 211 | struct i40e_asq_cmd_details *cmd_details); |
| 212 | i40e_status i40e_aq_query_switch_comp_bw_config(struct i40e_hw *hw, |
| 213 | u16 seid, |
| 214 | struct i40e_aqc_query_switching_comp_bw_config_resp *bw_data, |
| 215 | struct i40e_asq_cmd_details *cmd_details); |
| 216 | /* i40e_common */ |
| 217 | i40e_status i40e_init_shared_code(struct i40e_hw *hw); |
| 218 | i40e_status i40e_pf_reset(struct i40e_hw *hw); |
| 219 | void i40e_clear_pxe_mode(struct i40e_hw *hw); |
| 220 | bool i40e_get_link_status(struct i40e_hw *hw); |
| 221 | i40e_status i40e_get_mac_addr(struct i40e_hw *hw, |
| 222 | u8 *mac_addr); |
Neerav Parikh | afb3ff0 | 2014-01-17 15:36:36 -0800 | [diff] [blame] | 223 | i40e_status i40e_validate_mac_addr(u8 *mac_addr); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 224 | /* prototype for functions used for NVM access */ |
| 225 | i40e_status i40e_init_nvm(struct i40e_hw *hw); |
| 226 | i40e_status i40e_acquire_nvm(struct i40e_hw *hw, |
| 227 | enum i40e_aq_resource_access_type access); |
| 228 | void i40e_release_nvm(struct i40e_hw *hw); |
| 229 | i40e_status i40e_read_nvm_srrd(struct i40e_hw *hw, u16 offset, |
| 230 | u16 *data); |
| 231 | i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset, |
| 232 | u16 *data); |
| 233 | i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset, |
| 234 | u16 *words, u16 *data); |
| 235 | i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw, |
| 236 | u16 *checksum); |
Catherine Sullivan | d4dfb81 | 2013-11-28 06:39:21 +0000 | [diff] [blame] | 237 | void i40e_set_pci_config_data(struct i40e_hw *hw, u16 link_status); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 238 | |
Jesse Brandeburg | 206812b | 2014-02-12 01:45:33 +0000 | [diff] [blame] | 239 | extern struct i40e_rx_ptype_decoded i40e_ptype_lookup[]; |
| 240 | |
| 241 | static inline struct i40e_rx_ptype_decoded decode_rx_desc_ptype(u8 ptype) |
| 242 | { |
| 243 | return i40e_ptype_lookup[ptype]; |
| 244 | } |
| 245 | |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 246 | /* prototype for functions used for SW locks */ |
| 247 | |
| 248 | /* i40e_common for VF drivers*/ |
| 249 | void i40e_vf_parse_hw_config(struct i40e_hw *hw, |
| 250 | struct i40e_virtchnl_vf_resource *msg); |
| 251 | i40e_status i40e_vf_reset(struct i40e_hw *hw); |
| 252 | i40e_status i40e_aq_send_msg_to_pf(struct i40e_hw *hw, |
| 253 | enum i40e_virtchnl_ops v_opcode, |
| 254 | i40e_status v_retval, |
| 255 | u8 *msg, u16 msglen, |
| 256 | struct i40e_asq_cmd_details *cmd_details); |
| 257 | i40e_status i40e_set_filter_control(struct i40e_hw *hw, |
| 258 | struct i40e_filter_control_settings *settings); |
Neerav Parikh | afb3ff0 | 2014-01-17 15:36:36 -0800 | [diff] [blame] | 259 | i40e_status i40e_aq_add_rem_control_packet_filter(struct i40e_hw *hw, |
| 260 | u8 *mac_addr, u16 ethtype, u16 flags, |
| 261 | u16 vsi_seid, u16 queue, bool is_add, |
| 262 | struct i40e_control_filter_stats *stats, |
| 263 | struct i40e_asq_cmd_details *cmd_details); |
Jesse Brandeburg | 56a62fc | 2013-09-11 08:40:12 +0000 | [diff] [blame] | 264 | #endif /* _I40E_PROTOTYPE_H_ */ |