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};
  65
  66/* VF capabilities */
  67enum i40e_vf_capabilities {
  68        I40E_VIRTCHNL_VF_CAP_PRIVILEGE = 0,
  69        I40E_VIRTCHNL_VF_CAP_L2,
  70        I40E_VIRTCHNL_VF_CAP_IWARP,
  71};
  72
  73/* VF information structure */
  74struct i40e_vf {
  75        struct i40e_pf *pf;
  76
  77        /* VF id in the PF space */
  78        u16 vf_id;
  79        /* all VF vsis connect to the same parent */
  80        enum i40e_switch_element_types parent_type;
  81        struct i40e_virtchnl_version_info vf_ver;
  82        u32 driver_caps; /* reported by VF driver */
  83
  84        /* VF Port Extender (PE) stag if used */
  85        u16 stag;
  86
  87        struct i40e_virtchnl_ether_addr default_lan_addr;
  88        struct i40e_virtchnl_ether_addr default_fcoe_addr;
  89        u16 port_vlan_id;
  90        bool pf_set_mac;        /* The VMM admin set the VF MAC address */
  91
  92        /* VSI indices - actual VSI pointers are maintained in the PF structure
  93         * When assigned, these will be non-zero, because VSI 0 is always
  94         * the main LAN VSI for the PF.
  95         */
  96        u16 lan_vsi_idx;        /* index into PF struct */
  97        u16 lan_vsi_id;         /* ID as used by firmware */
  98
  99        u8 num_queue_pairs;     /* num of qps assigned to VF vsis */
 100        u64 num_mdd_events;     /* num of mdd events detected */
 101        /* num of continuous malformed or invalid msgs detected */
 102        u64 num_invalid_msgs;
 103        u64 num_valid_msgs;     /* num of valid msgs detected */
 104
 105        unsigned long vf_caps;  /* vf's adv. capabilities */
 106        unsigned long vf_states;        /* vf's runtime states */
 107        unsigned int tx_rate;   /* Tx bandwidth limit in Mbps */
 108        bool link_forced;
 109        bool link_up;           /* only valid if VF link is forced */
 110        bool spoofchk;
 111        /* RDMA Client */
 112        struct i40e_virtchnl_iwarp_qvlist_info *qvlist_info;
 113};
 114
 115void i40e_free_vfs(struct i40e_pf *pf);
 116int i40e_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
 117int i40e_alloc_vfs(struct i40e_pf *pf, u16 num_alloc_vfs);
 118int i40e_vc_process_vf_msg(struct i40e_pf *pf, u16 vf_id, u32 v_opcode,
 119                           u32 v_retval, u8 *msg, u16 msglen);
 120int i40e_vc_process_vflr_event(struct i40e_pf *pf);
 121void i40e_reset_vf(struct i40e_vf *vf, bool flr);
 122void i40e_vc_notify_vf_reset(struct i40e_vf *vf);
 123
 124/* VF configuration related iplink handlers */
 125int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac);
 126int i40e_ndo_set_vf_port_vlan(struct net_device *netdev,
 127                              int vf_id, u16 vlan_id, u8 qos);
 128int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,
 129                       int max_tx_rate);
 130int i40e_ndo_get_vf_config(struct net_device *netdev,
 131                           int vf_id, struct ifla_vf_info *ivi);
 132int i40e_ndo_set_vf_link_state(struct net_device *netdev, int vf_id, int link);
 133int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable);
 134
 135void i40e_vc_notify_link_state(struct i40e_pf *pf);
 136void i40e_vc_notify_reset(struct i40e_pf *pf);
 137
 138#endif /* _I40E_VIRTCHNL_PF_H_ */
 139