linux/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h
<<
>>
Prefs
   1/*******************************************************************************
   2 *
   3 * Intel Ethernet Controller XL710 Family Linux Driver
   4 * Copyright(c) 2013 - 2015 Intel Corporation.
   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 *
  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/>.
  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_VIRTCHNL_PF_H_
  28#define _I40E_VIRTCHNL_PF_H_
  29
  30#include "i40e.h"
  31
  32#define I40E_MAX_VLANID 4095
  33
  34#define I40E_VIRTCHNL_SUPPORTED_QTYPES 2
  35
  36#define I40E_DEFAULT_NUM_MDD_EVENTS_ALLOWED     3
  37#define I40E_DEFAULT_NUM_INVALID_MSGS_ALLOWED   10
  38
  39#define I40E_VLAN_PRIORITY_SHIFT        12
  40#define I40E_VLAN_MASK                  0xFFF
  41#define I40E_PRIORITY_MASK              0x7000
  42
  43#define VF_IS_V10(_v) (((_v)->vf_ver.major == 1) && ((_v)->vf_ver.minor == 0))
  44#define VF_IS_V11(_v) (((_v)->vf_ver.major == 1) && ((_v)->vf_ver.minor == 1))
  45
  46/* Various queue ctrls */
  47enum i40e_queue_ctrl {
  48        I40E_QUEUE_CTRL_UNKNOWN = 0,
  49        I40E_QUEUE_CTRL_ENABLE,
  50        I40E_QUEUE_CTRL_ENABLECHECK,
  51        I40E_QUEUE_CTRL_DISABLE,
  52        I40E_QUEUE_CTRL_DISABLECHECK,
  53        I40E_QUEUE_CTRL_FASTDISABLE,
  54        I40E_QUEUE_CTRL_FASTDISABLECHECK,
  55};
  56
  57/* VF states */
  58enum i40e_vf_states {
  59        I40E_VF_STAT_INIT = 0,
  60        I40E_VF_STAT_ACTIVE,
  61        I40E_VF_STAT_IWARPENA,
  62        I40E_VF_STAT_FCOEENA,
  63        I40E_VF_STAT_DISABLED,
  64        I40E_VF_STAT_MC_PROMISC,
  65        I40E_VF_STAT_UC_PROMISC,
  66};
  67
  68/* VF capabilities */
  69enum i40e_vf_capabilities {
  70        I40E_VIRTCHNL_VF_CAP_PRIVILEGE = 0,
  71        I40E_VIRTCHNL_VF_CAP_L2,
  72        I40E_VIRTCHNL_VF_CAP_IWARP,
  73};
  74
  75/* VF information structure */
  76struct i40e_vf {
  77        struct i40e_pf *pf;
  78
  79        /* VF id in the PF space */
  80        s16 vf_id;
  81        /* all VF vsis connect to the same parent */
  82        enum i40e_switch_element_types parent_type;
  83        struct i40e_virtchnl_version_info vf_ver;
  84        u32 driver_caps; /* reported by VF driver */
  85
  86        /* VF Port Extender (PE) stag if used */
  87        u16 stag;
  88
  89        struct i40e_virtchnl_ether_addr default_lan_addr;
  90        struct i40e_virtchnl_ether_addr default_fcoe_addr;
  91        u16 port_vlan_id;
  92        bool pf_set_mac;        /* The VMM admin set the VF MAC address */
  93        bool trusted;
  94
  95        /* VSI indices - actual VSI pointers are maintained in the PF structure
  96         * When assigned, these will be non-zero, because VSI 0 is always
  97         * the main LAN VSI for the PF.
  98         */
  99        u16 lan_vsi_idx;        /* index into PF struct */
 100        u16 lan_vsi_id;         /* ID as used by firmware */
 101
 102        u8 num_queue_pairs;     /* num of qps assigned to VF vsis */
 103        u64 num_mdd_events;     /* num of mdd events detected */
 104        /* num of continuous malformed or invalid msgs detected */
 105        u64 num_invalid_msgs;
 106        u64 num_valid_msgs;     /* num of valid msgs detected */
 107
 108        unsigned long vf_caps;  /* vf's adv. capabilities */
 109        unsigned long vf_states;        /* vf's runtime states */
 110        unsigned int tx_rate;   /* Tx bandwidth limit in Mbps */
 111        bool link_forced;
 112        bool link_up;           /* only valid if VF link is forced */
 113        bool spoofchk;
 114        u16 num_mac;
 115        u16 num_vlan;
 116
 117        /* RDMA Client */
 118        struct i40e_virtchnl_iwarp_qvlist_info *qvlist_info;
 119};
 120
 121void i40e_free_vfs(struct i40e_pf *pf);
 122int i40e_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
 123int i40e_alloc_vfs(struct i40e_pf *pf, u16 num_alloc_vfs);
 124int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
 125                           u32 v_retval, u8 *msg, u16 msglen);
 126int i40e_vc_process_vflr_event(struct i40e_pf *pf);
 127void i40e_reset_vf(struct i40e_vf *vf, bool flr);
 128void i40e_vc_notify_vf_reset(struct i40e_vf *vf);
 129
 130/* VF configuration related iplink handlers */
 131int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac);
 132int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id,
 133                              u16 vlan_id, u8 qos, __be16 vlan_proto);
 134int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,
 135                       int max_tx_rate);
 136int i40e_ndo_set_vf_trust(struct net_device *netdev, int vf_id, bool setting);
 137int i40e_ndo_get_vf_config(struct net_device *netdev,
 138                           int vf_id, struct ifla_vf_info *ivi);
 139int i40e_ndo_set_vf_link_state(struct net_device *netdev, int vf_id, int link);
 140int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable);
 141
 142void i40e_vc_notify_link_state(struct i40e_pf *pf);
 143void i40e_vc_notify_reset(struct i40e_pf *pf);
 144
 145#endif /* _I40E_VIRTCHNL_PF_H_ */
 146