ixgbe: add VF IPsec offload request message handling
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>
This commit is contained in:
parent
9e4e30cc0c
commit
7269824046
|
@ -1004,15 +1004,24 @@ void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, struct ixgbe_tx_buffer *first,
|
int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, struct ixgbe_tx_buffer *first,
|
||||||
struct ixgbe_ipsec_tx_data *itd);
|
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
|
#else
|
||||||
static inline void ixgbe_init_ipsec_offload(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_stop_ipsec_offload(struct ixgbe_adapter *adapter) { }
|
||||||
static inline void ixgbe_ipsec_restore(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,
|
static inline void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,
|
||||||
union ixgbe_adv_rx_desc *rx_desc,
|
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,
|
static inline int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,
|
||||||
struct ixgbe_tx_buffer *first,
|
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 /* CONFIG_XFRM_OFFLOAD */
|
||||||
#endif /* _IXGBE_H_ */
|
#endif /* _IXGBE_H_ */
|
||||||
|
|
|
@ -50,6 +50,7 @@ enum ixgbe_pfvf_api_rev {
|
||||||
ixgbe_mbox_api_11, /* API version 1.1, linux/freebsd VF driver */
|
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_12, /* API version 1.2, linux/freebsd VF driver */
|
||||||
ixgbe_mbox_api_13, /* API version 1.3, 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 */
|
/* This value should always be last */
|
||||||
ixgbe_mbox_api_unknown, /* indicates that API version is not known */
|
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
|
#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 */
|
/* length of permanent address message returned from PF */
|
||||||
#define IXGBE_VF_PERMADDR_MSG_LEN 4
|
#define IXGBE_VF_PERMADDR_MSG_LEN 4
|
||||||
/* word in permanent address message with the current multicast type */
|
/* word in permanent address message with the current multicast type */
|
||||||
|
|
|
@ -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_11:
|
||||||
case ixgbe_mbox_api_12:
|
case ixgbe_mbox_api_12:
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
/* Version 1.1 supports jumbo frames on VFs if PF has
|
/* Version 1.1 supports jumbo frames on VFs if PF has
|
||||||
* jumbo frames enabled which means legacy VFs are
|
* jumbo frames enabled which means legacy VFs are
|
||||||
* disabled
|
* disabled
|
||||||
|
@ -728,6 +729,9 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
|
||||||
/* reset multicast table array for vf */
|
/* reset multicast table array for vf */
|
||||||
adapter->vfinfo[vf].num_vf_mc_hashes = 0;
|
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 */
|
/* Flush and reset the mta with the new values */
|
||||||
ixgbe_set_rx_mode(adapter->netdev);
|
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_11:
|
||||||
case ixgbe_mbox_api_12:
|
case ixgbe_mbox_api_12:
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
adapter->vfinfo[vf].vf_api = api;
|
adapter->vfinfo[vf].vf_api = api;
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
|
@ -1025,6 +1030,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
|
||||||
case ixgbe_mbox_api_11:
|
case ixgbe_mbox_api_11:
|
||||||
case ixgbe_mbox_api_12:
|
case ixgbe_mbox_api_12:
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
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 */
|
/* verify the PF is supporting the correct API */
|
||||||
switch (adapter->vfinfo[vf].vf_api) {
|
switch (adapter->vfinfo[vf].vf_api) {
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
case ixgbe_mbox_api_12:
|
case ixgbe_mbox_api_12:
|
||||||
break;
|
break;
|
||||||
|
@ -1097,6 +1104,7 @@ static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
|
||||||
|
|
||||||
/* verify the PF is supporting the correct API */
|
/* verify the PF is supporting the correct API */
|
||||||
switch (adapter->vfinfo[vf].vf_api) {
|
switch (adapter->vfinfo[vf].vf_api) {
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
case ixgbe_mbox_api_12:
|
case ixgbe_mbox_api_12:
|
||||||
break;
|
break;
|
||||||
|
@ -1122,8 +1130,9 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
|
||||||
/* promisc introduced in 1.3 version */
|
/* promisc introduced in 1.3 version */
|
||||||
if (xcast_mode == IXGBEVF_XCAST_MODE_PROMISC)
|
if (xcast_mode == IXGBEVF_XCAST_MODE_PROMISC)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
/* Fall threw */
|
/* Fall through */
|
||||||
case ixgbe_mbox_api_13:
|
case ixgbe_mbox_api_13:
|
||||||
|
case ixgbe_mbox_api_14:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EOPNOTSUPP;
|
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:
|
case IXGBE_VF_UPDATE_XCAST_MODE:
|
||||||
retval = ixgbe_update_vf_xcast_mode(adapter, msgbuf, vf);
|
retval = ixgbe_update_vf_xcast_mode(adapter, msgbuf, vf);
|
||||||
break;
|
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:
|
default:
|
||||||
e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
|
e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
|
||||||
retval = IXGBE_ERR_MBX;
|
retval = IXGBE_ERR_MBX;
|
||||||
|
|
Loading…
Reference in New Issue