ixgbe: add VF IPsec offload request message handling
authorShannon Nelson <shannon.nelson@oracle.com>
Mon, 13 Aug 2018 18:43:42 +0000 (11:43 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 28 Aug 2018 21:33:14 +0000 (14:33 -0700)
Add an add and a delete message for IPsec offload requests from
the VF.  These call into the IPsec functions that can translate
the message buffer into a useful IPsec offload.

These new messages bump the mbox API version to 1.4.

Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c

index 89e709ce19475cb02c0131416d4f8617e098e014..5c6fd42e90ed72392411a46fead18f45c2f89a2b 100644 (file)
@@ -1004,15 +1004,24 @@ void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,
                    struct sk_buff *skb);
 int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, struct ixgbe_tx_buffer *first,
                   struct ixgbe_ipsec_tx_data *itd);
+void ixgbe_ipsec_vf_clear(struct ixgbe_adapter *adapter, u32 vf);
+int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter, u32 *mbuf, u32 vf);
+int ixgbe_ipsec_vf_del_sa(struct ixgbe_adapter *adapter, u32 *mbuf, u32 vf);
 #else
-static inline void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter) { };
-static inline void ixgbe_stop_ipsec_offload(struct ixgbe_adapter *adapter) { };
-static inline void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter) { };
+static inline void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter) { }
+static inline void ixgbe_stop_ipsec_offload(struct ixgbe_adapter *adapter) { }
+static inline void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter) { }
 static inline void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,
                                  union ixgbe_adv_rx_desc *rx_desc,
-                                 struct sk_buff *skb) { };
+                                 struct sk_buff *skb) { }
 static inline int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,
                                 struct ixgbe_tx_buffer *first,
-                                struct ixgbe_ipsec_tx_data *itd) { return 0; };
+                                struct ixgbe_ipsec_tx_data *itd) { return 0; }
+static inline void ixgbe_ipsec_vf_clear(struct ixgbe_adapter *adapter,
+                                       u32 vf) { }
+static inline int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter,
+                                       u32 *mbuf, u32 vf) { return -EACCES; }
+static inline int ixgbe_ipsec_vf_del_sa(struct ixgbe_adapter *adapter,
+                                       u32 *mbuf, u32 vf) { return -EACCES; }
 #endif /* CONFIG_XFRM_OFFLOAD */
 #endif /* _IXGBE_H_ */
index e085b6520dac8871ebe4f117024aecd38c55b650..a148534d7256dbb5dbb5942bc58cfc4ae4412e58 100644 (file)
@@ -50,6 +50,7 @@ enum ixgbe_pfvf_api_rev {
        ixgbe_mbox_api_11,      /* API version 1.1, linux/freebsd VF driver */
        ixgbe_mbox_api_12,      /* API version 1.2, linux/freebsd VF driver */
        ixgbe_mbox_api_13,      /* API version 1.3, linux/freebsd VF driver */
+       ixgbe_mbox_api_14,      /* API version 1.4, linux/freebsd VF driver */
        /* This value should always be last */
        ixgbe_mbox_api_unknown, /* indicates that API version is not known */
 };
@@ -80,6 +81,10 @@ enum ixgbe_pfvf_api_rev {
 
 #define IXGBE_VF_UPDATE_XCAST_MODE     0x0c
 
+/* mailbox API, version 1.4 VF requests */
+#define IXGBE_VF_IPSEC_ADD     0x0d
+#define IXGBE_VF_IPSEC_DEL     0x0e
+
 /* length of permanent address message returned from PF */
 #define IXGBE_VF_PERMADDR_MSG_LEN 4
 /* word in permanent address message with the current multicast type */
index 3c6f01c41b788eb45730e49083f2025c7c0683f1..af25a8fffeb8ba4f19a79f11f6d96f3d7f252047 100644 (file)
@@ -496,6 +496,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
                case ixgbe_mbox_api_11:
                case ixgbe_mbox_api_12:
                case ixgbe_mbox_api_13:
+               case ixgbe_mbox_api_14:
                        /* Version 1.1 supports jumbo frames on VFs if PF has
                         * jumbo frames enabled which means legacy VFs are
                         * disabled
@@ -728,6 +729,9 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
        /* reset multicast table array for vf */
        adapter->vfinfo[vf].num_vf_mc_hashes = 0;
 
+       /* clear any ipsec table info */
+       ixgbe_ipsec_vf_clear(adapter, vf);
+
        /* Flush and reset the mta with the new values */
        ixgbe_set_rx_mode(adapter->netdev);
 
@@ -1000,6 +1004,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_11:
        case ixgbe_mbox_api_12:
        case ixgbe_mbox_api_13:
+       case ixgbe_mbox_api_14:
                adapter->vfinfo[vf].vf_api = api;
                return 0;
        default:
@@ -1025,6 +1030,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_11:
        case ixgbe_mbox_api_12:
        case ixgbe_mbox_api_13:
+       case ixgbe_mbox_api_14:
                break;
        default:
                return -1;
@@ -1065,6 +1071,7 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 
        /* verify the PF is supporting the correct API */
        switch (adapter->vfinfo[vf].vf_api) {
+       case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_12:
                break;
@@ -1097,6 +1104,7 @@ static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
 
        /* verify the PF is supporting the correct API */
        switch (adapter->vfinfo[vf].vf_api) {
+       case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_12:
                break;
@@ -1122,8 +1130,9 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
                /* promisc introduced in 1.3 version */
                if (xcast_mode == IXGBEVF_XCAST_MODE_PROMISC)
                        return -EOPNOTSUPP;
-               /* Fall threw */
+               /* Fall through */
        case ixgbe_mbox_api_13:
+       case ixgbe_mbox_api_14:
                break;
        default:
                return -EOPNOTSUPP;
@@ -1249,6 +1258,12 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
        case IXGBE_VF_UPDATE_XCAST_MODE:
                retval = ixgbe_update_vf_xcast_mode(adapter, msgbuf, vf);
                break;
+       case IXGBE_VF_IPSEC_ADD:
+               retval = ixgbe_ipsec_vf_add_sa(adapter, msgbuf, vf);
+               break;
+       case IXGBE_VF_IPSEC_DEL:
+               retval = ixgbe_ipsec_vf_del_sa(adapter, msgbuf, vf);
+               break;
        default:
                e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
                retval = IXGBE_ERR_MBX;