OSDN Git Service

ionic: ionic_if bits for sr-iov support
authorShannon Nelson <snelson@pensando.io>
Fri, 3 Jan 2020 17:55:07 +0000 (09:55 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 5 Jan 2020 22:51:01 +0000 (14:51 -0800)
Adds new AdminQ calls and their related structs for
supporting PF controls on VFs:
    CMD_OPCODE_VF_GETATTR
    CMD_OPCODE_VF_SETATTR

Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/pensando/ionic/ionic_if.h

index 39317cd..f131ada 100644 (file)
@@ -51,6 +51,10 @@ enum ionic_cmd_opcode {
        IONIC_CMD_RDMA_CREATE_CQ                = 52,
        IONIC_CMD_RDMA_CREATE_ADMINQ            = 53,
 
+       /* SR/IOV commands */
+       IONIC_CMD_VF_GETATTR                    = 60,
+       IONIC_CMD_VF_SETATTR                    = 61,
+
        /* QoS commands */
        IONIC_CMD_QOS_CLASS_IDENTIFY            = 240,
        IONIC_CMD_QOS_CLASS_INIT                = 241,
@@ -1639,6 +1643,93 @@ enum ionic_qos_sched_type {
        IONIC_QOS_SCHED_TYPE_DWRR       = 1,    /* Deficit weighted round-robin */
 };
 
+enum ionic_vf_attr {
+       IONIC_VF_ATTR_SPOOFCHK  = 1,
+       IONIC_VF_ATTR_TRUST     = 2,
+       IONIC_VF_ATTR_MAC       = 3,
+       IONIC_VF_ATTR_LINKSTATE = 4,
+       IONIC_VF_ATTR_VLAN      = 5,
+       IONIC_VF_ATTR_RATE      = 6,
+       IONIC_VF_ATTR_STATSADDR = 7,
+};
+
+/**
+ * VF link status
+ */
+enum ionic_vf_link_status {
+       IONIC_VF_LINK_STATUS_AUTO = 0,  /* link state of the uplink */
+       IONIC_VF_LINK_STATUS_UP   = 1,  /* link is always up */
+       IONIC_VF_LINK_STATUS_DOWN = 2,  /* link is always down */
+};
+
+/**
+ * struct ionic_vf_setattr_cmd - Set VF attributes on the NIC
+ * @opcode:     Opcode
+ * @index:      VF index
+ * @attr:       Attribute type (enum ionic_vf_attr)
+ *     macaddr         mac address
+ *     vlanid          vlan ID
+ *     maxrate         max Tx rate in Mbps
+ *     spoofchk        enable address spoof checking
+ *     trust           enable VF trust
+ *     linkstate       set link up or down
+ *     stats_pa        set DMA address for VF stats
+ */
+struct ionic_vf_setattr_cmd {
+       u8     opcode;
+       u8     attr;
+       __le16 vf_index;
+       union {
+               u8     macaddr[6];
+               __le16 vlanid;
+               __le32 maxrate;
+               u8     spoofchk;
+               u8     trust;
+               u8     linkstate;
+               __le64 stats_pa;
+               u8     pad[60];
+       };
+};
+
+struct ionic_vf_setattr_comp {
+       u8     status;
+       u8     attr;
+       __le16 vf_index;
+       __le16 comp_index;
+       u8     rsvd[9];
+       u8     color;
+};
+
+/**
+ * struct ionic_vf_getattr_cmd - Get VF attributes from the NIC
+ * @opcode:     Opcode
+ * @index:      VF index
+ * @attr:       Attribute type (enum ionic_vf_attr)
+ */
+struct ionic_vf_getattr_cmd {
+       u8     opcode;
+       u8     attr;
+       __le16 vf_index;
+       u8     rsvd[60];
+};
+
+struct ionic_vf_getattr_comp {
+       u8     status;
+       u8     attr;
+       __le16 vf_index;
+       union {
+               u8     macaddr[6];
+               __le16 vlanid;
+               __le32 maxrate;
+               u8     spoofchk;
+               u8     trust;
+               u8     linkstate;
+               __le64 stats_pa;
+               u8     pad[11];
+       };
+       u8     color;
+};
+
 /**
  * union ionic_qos_config - Qos configuration structure
  * @flags:             Configuration flags
@@ -2289,6 +2380,9 @@ union ionic_dev_cmd {
        struct ionic_port_getattr_cmd port_getattr;
        struct ionic_port_setattr_cmd port_setattr;
 
+       struct ionic_vf_setattr_cmd vf_setattr;
+       struct ionic_vf_getattr_cmd vf_getattr;
+
        struct ionic_lif_identify_cmd lif_identify;
        struct ionic_lif_init_cmd lif_init;
        struct ionic_lif_reset_cmd lif_reset;
@@ -2318,6 +2412,9 @@ union ionic_dev_cmd_comp {
        struct ionic_port_getattr_comp port_getattr;
        struct ionic_port_setattr_comp port_setattr;
 
+       struct ionic_vf_setattr_comp vf_setattr;
+       struct ionic_vf_getattr_comp vf_getattr;
+
        struct ionic_lif_identify_comp lif_identify;
        struct ionic_lif_init_comp lif_init;
        ionic_lif_reset_comp lif_reset;