ixlv.h revision 270631
138494Sobrien/****************************************************************************** 2174294Sobrien 338494Sobrien Copyright (c) 2013-2014, Intel Corporation 438494Sobrien All rights reserved. 538494Sobrien 638494Sobrien Redistribution and use in source and binary forms, with or without 738494Sobrien modification, are permitted provided that the following conditions are met: 838494Sobrien 938494Sobrien 1. Redistributions of source code must retain the above copyright notice, 1038494Sobrien this list of conditions and the following disclaimer. 1138494Sobrien 1238494Sobrien 2. Redistributions in binary form must reproduce the above copyright 1338494Sobrien notice, this list of conditions and the following disclaimer in the 1438494Sobrien documentation and/or other materials provided with the distribution. 1538494Sobrien 1638494Sobrien 3. Neither the name of the Intel Corporation nor the names of its 1738494Sobrien contributors may be used to endorse or promote products derived from 1838494Sobrien this software without specific prior written permission. 1938494Sobrien 2042629Sobrien THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2138494Sobrien AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2238494Sobrien IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2338494Sobrien ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2438494Sobrien LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2538494Sobrien CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2638494Sobrien SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2738494Sobrien INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2838494Sobrien CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2938494Sobrien ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3038494Sobrien POSSIBILITY OF SUCH DAMAGE. 3138494Sobrien 3238494Sobrien******************************************************************************/ 3338494Sobrien/*$FreeBSD: stable/10/sys/dev/ixl/ixlv.h 270631 2014-08-25 22:04:29Z jfv $*/ 3438494Sobrien 3538494Sobrien 3638494Sobrien#ifndef _IXLV_H_ 3738494Sobrien#define _IXLV_H_ 3838494Sobrien 3938494Sobrien#define IXLV_AQ_MAX_ERR 100 40174294Sobrien#define IXLV_MAX_FILTERS 128 4138494Sobrien#define IXLV_MAX_QUEUES 16 4238494Sobrien#define IXLV_AQ_TIMEOUT (1 * hz) 4338494Sobrien#define IXLV_CALLOUT_TIMO (hz / 50) // 20 msec 4438494Sobrien 4538494Sobrien#define IXLV_FLAG_AQ_ENABLE_QUEUES (u32)(1) 4638494Sobrien#define IXLV_FLAG_AQ_DISABLE_QUEUES (u32)(1 << 1) 4738494Sobrien#define IXLV_FLAG_AQ_ADD_MAC_FILTER (u32)(1 << 2) 4838494Sobrien#define IXLV_FLAG_AQ_ADD_VLAN_FILTER (u32)(1 << 3) 4938494Sobrien#define IXLV_FLAG_AQ_DEL_MAC_FILTER (u32)(1 << 4) 5038494Sobrien#define IXLV_FLAG_AQ_DEL_VLAN_FILTER (u32)(1 << 5) 5138494Sobrien#define IXLV_FLAG_AQ_CONFIGURE_QUEUES (u32)(1 << 6) 5238494Sobrien#define IXLV_FLAG_AQ_MAP_VECTORS (u32)(1 << 7) 5338494Sobrien#define IXLV_FLAG_AQ_HANDLE_RESET (u32)(1 << 8) 5438494Sobrien#define IXLV_FLAG_AQ_CONFIGURE_PROMISC (u32)(1 << 9) 5538494Sobrien#define IXLV_FLAG_AQ_GET_STATS (u32)(1 << 10) 5638494Sobrien 5738494Sobrien/* printf %b arg */ 5838494Sobrien#define IXLV_FLAGS \ 5938494Sobrien "\20\1ENABLE_QUEUES\2DISABLE_QUEUES\3ADD_MAC_FILTER" \ 6038494Sobrien "\4ADD_VLAN_FILTER\5DEL_MAC_FILTER\6DEL_VLAN_FILTER" \ 6138494Sobrien "\7CONFIGURE_QUEUES\10MAP_VECTORS\11HANDLE_RESET" \ 6238494Sobrien "\12CONFIGURE_PROMISC\13GET_STATS" 6338494Sobrien 6438494Sobrien/* Driver state */ 6538494Sobrienenum ixlv_state_t { 6638494Sobrien IXLV_START, 6738494Sobrien IXLV_FAILED, 6838494Sobrien IXLV_RESET_REQUIRED, 6938494Sobrien IXLV_RESET_PENDING, 7038494Sobrien IXLV_VERSION_CHECK, 7138494Sobrien IXLV_GET_RESOURCES, 7238494Sobrien IXLV_INIT_READY, 7338494Sobrien IXLV_INIT_START, 7438494Sobrien IXLV_INIT_CONFIG, 7538494Sobrien IXLV_INIT_MAPPING, 7638494Sobrien IXLV_INIT_ENABLE, 7738494Sobrien IXLV_INIT_COMPLETE, 78174294Sobrien IXLV_RUNNING, 7938494Sobrien}; 80174294Sobrien 8138494Sobrienstruct ixlv_mac_filter { 8238494Sobrien SLIST_ENTRY(ixlv_mac_filter) next; 8338494Sobrien u8 macaddr[ETHER_ADDR_LEN]; 84174294Sobrien u16 flags; 8538494Sobrien}; 8638494SobrienSLIST_HEAD(mac_list, ixlv_mac_filter); 87174294Sobrien 88174294Sobrienstruct ixlv_vlan_filter { 89174294Sobrien SLIST_ENTRY(ixlv_vlan_filter) next; 9052894Sobrien u16 vlan; 9138494Sobrien u16 flags; 9238494Sobrien}; 9338494SobrienSLIST_HEAD(vlan_list, ixlv_vlan_filter); 9438494Sobrien 9538494Sobrien/* Software controller structure */ 9638494Sobrienstruct ixlv_sc { 9738494Sobrien struct i40e_hw hw; 98174294Sobrien struct i40e_osdep osdep; 9938494Sobrien struct device *dev; 100174294Sobrien 10138494Sobrien struct resource *pci_mem; 10238494Sobrien struct resource *msix_mem; 103174294Sobrien 10438494Sobrien enum ixlv_state_t init_state; 105174294Sobrien 10638494Sobrien /* 10738494Sobrien * Interrupt resources 10838494Sobrien */ 10938494Sobrien void *tag; 110174294Sobrien struct resource *res; /* For the AQ */ 111174294Sobrien 112131702Smbr struct ifmedia media; 11382794Sobrien struct callout timer; 11438494Sobrien struct callout aq_task; 115174294Sobrien int msix; 116174294Sobrien int if_flags; 117174294Sobrien 11838494Sobrien struct mtx mtx; 119174294Sobrien struct mtx aq_task_mtx; 120174294Sobrien 121174294Sobrien u32 qbase; 12282794Sobrien u32 admvec; 12338494Sobrien struct timeout_task timeout; 12438494Sobrien struct task aq_irq; 125174294Sobrien struct task aq_sched; 12638494Sobrien struct taskqueue *tq; 12738494Sobrien 12838494Sobrien struct ixl_vsi vsi; 12938494Sobrien 13038494Sobrien /* Mac Filter List */ 13138494Sobrien struct mac_list *mac_filters; 13238494Sobrien 13382794Sobrien /* Vlan Filter List */ 13438494Sobrien struct vlan_list *vlan_filters; 135174294Sobrien 13638494Sobrien /* Promiscuous mode */ 137174294Sobrien u32 promiscuous_flags; 13852894Sobrien 13938494Sobrien /* Admin queue task flags */ 140174294Sobrien u32 aq_wait_count; 14138494Sobrien u32 aq_required; 14238494Sobrien u32 aq_pending; 14338494Sobrien 144174294Sobrien /* Virtual comm channel */ 14538494Sobrien enum i40e_virtchnl_ops current_op; 14638494Sobrien struct i40e_virtchnl_vf_resource *vf_res; 14738494Sobrien struct i40e_virtchnl_vsi_resource *vsi_res; 14838494Sobrien 14938494Sobrien /* Misc stats maintained by the driver */ 150174294Sobrien u64 watchdog_events; 15138494Sobrien u64 admin_irq; 15238494Sobrien 15338494Sobrien /* Signaling channels */ 15438494Sobrien u8 init_done; 15538494Sobrien u8 config_queues_done; 156174294Sobrien u8 map_vectors_done; 157174294Sobrien u8 enable_queues_done; 15838494Sobrien u8 disable_queues_done; 15938494Sobrien u8 add_ether_done; 160174294Sobrien u8 del_ether_done; 16138494Sobrien}; 162174294Sobrien 16338494Sobrien/* 16438494Sobrien** This checks for a zero mac addr, something that will be likely 16538494Sobrien** unless the Admin on the Host has created one. 166174294Sobrien*/ 16738494Sobrienstatic inline bool 16838494Sobrienixlv_check_ether_addr(u8 *addr) 169174294Sobrien{ 170174294Sobrien bool status = TRUE; 171174294Sobrien 17238494Sobrien if ((addr[0] == 0 && addr[1]== 0 && addr[2] == 0 && 17352894Sobrien addr[3] == 0 && addr[4]== 0 && addr[5] == 0)) 17438494Sobrien status = FALSE; 17538494Sobrien return (status); 17638494Sobrien} 17738494Sobrien 17838494Sobrien/* 17938494Sobrien** VF Common function prototypes 180174294Sobrien*/ 18138494Sobrienint ixlv_send_api_ver(struct ixlv_sc *); 182174294Sobrienint ixlv_verify_api_ver(struct ixlv_sc *); 18338494Sobrienint ixlv_send_vf_config_msg(struct ixlv_sc *); 18438494Sobrienint ixlv_get_vf_config(struct ixlv_sc *); 185174294Sobrienvoid ixlv_init(void *); 18638494Sobrienint ixlv_reinit_locked(struct ixlv_sc *); 187174294Sobrienvoid ixlv_configure_queues(struct ixlv_sc *); 18838494Sobrienvoid ixlv_enable_queues(struct ixlv_sc *); 18938494Sobrienvoid ixlv_disable_queues(struct ixlv_sc *); 19038494Sobrienvoid ixlv_map_queues(struct ixlv_sc *); 19138494Sobrienvoid ixlv_enable_intr(struct ixl_vsi *); 192174294Sobrienvoid ixlv_disable_intr(struct ixl_vsi *); 193174294Sobrienvoid ixlv_add_ether_filters(struct ixlv_sc *); 194131702Smbrvoid ixlv_del_ether_filters(struct ixlv_sc *); 19582794Sobrienvoid ixlv_request_stats(struct ixlv_sc *); 19638494Sobrienvoid ixlv_request_reset(struct ixlv_sc *); 197174294Sobrienvoid ixlv_vc_completion(struct ixlv_sc *, 198174294Sobrien enum i40e_virtchnl_ops, i40e_status, u8 *, u16); 199174294Sobrienvoid ixlv_add_ether_filter(struct ixlv_sc *); 20038494Sobrienvoid ixlv_add_vlans(struct ixlv_sc *); 201174294Sobrienvoid ixlv_del_vlans(struct ixlv_sc *); 202174294Sobrienvoid ixlv_update_stats_counters(struct ixlv_sc *, 203174294Sobrien struct i40e_eth_stats *); 20482794Sobrien 20538494Sobrien#endif /* _IXLV_H_ */ 20638494Sobrien