net: macsec: add support for offloading to the MAC
This patch adds a new MACsec offloading option, MACSEC_OFFLOAD_MAC, allowing a user to select a MAC as a provider for MACsec offloading operations. Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com> Signed-off-by: Mark Starovoytov <mstarovoitov@marvell.com> Signed-off-by: Igor Russkikh <irusskikh@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8fa9137180
commit
21114b7fee
@ -339,7 +339,8 @@ static void macsec_set_shortlen(struct macsec_eth_header *h, size_t data_len)
|
|||||||
/* Checks if a MACsec interface is being offloaded to an hardware engine */
|
/* Checks if a MACsec interface is being offloaded to an hardware engine */
|
||||||
static bool macsec_is_offloaded(struct macsec_dev *macsec)
|
static bool macsec_is_offloaded(struct macsec_dev *macsec)
|
||||||
{
|
{
|
||||||
if (macsec->offload == MACSEC_OFFLOAD_PHY)
|
if (macsec->offload == MACSEC_OFFLOAD_MAC ||
|
||||||
|
macsec->offload == MACSEC_OFFLOAD_PHY)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -355,6 +356,9 @@ static bool macsec_check_offload(enum macsec_offload offload,
|
|||||||
if (offload == MACSEC_OFFLOAD_PHY)
|
if (offload == MACSEC_OFFLOAD_PHY)
|
||||||
return macsec->real_dev->phydev &&
|
return macsec->real_dev->phydev &&
|
||||||
macsec->real_dev->phydev->macsec_ops;
|
macsec->real_dev->phydev->macsec_ops;
|
||||||
|
else if (offload == MACSEC_OFFLOAD_MAC)
|
||||||
|
return macsec->real_dev->features & NETIF_F_HW_MACSEC &&
|
||||||
|
macsec->real_dev->macsec_ops;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -369,9 +373,14 @@ static const struct macsec_ops *__macsec_get_ops(enum macsec_offload offload,
|
|||||||
|
|
||||||
if (offload == MACSEC_OFFLOAD_PHY)
|
if (offload == MACSEC_OFFLOAD_PHY)
|
||||||
ctx->phydev = macsec->real_dev->phydev;
|
ctx->phydev = macsec->real_dev->phydev;
|
||||||
|
else if (offload == MACSEC_OFFLOAD_MAC)
|
||||||
|
ctx->netdev = macsec->real_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
return macsec->real_dev->phydev->macsec_ops;
|
if (offload == MACSEC_OFFLOAD_PHY)
|
||||||
|
return macsec->real_dev->phydev->macsec_ops;
|
||||||
|
else
|
||||||
|
return macsec->real_dev->macsec_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns a pointer to the MACsec ops struct if any and updates the MACsec
|
/* Returns a pointer to the MACsec ops struct if any and updates the MACsec
|
||||||
|
@ -489,6 +489,7 @@ enum macsec_validation_type {
|
|||||||
enum macsec_offload {
|
enum macsec_offload {
|
||||||
MACSEC_OFFLOAD_OFF = 0,
|
MACSEC_OFFLOAD_OFF = 0,
|
||||||
MACSEC_OFFLOAD_PHY = 1,
|
MACSEC_OFFLOAD_PHY = 1,
|
||||||
|
MACSEC_OFFLOAD_MAC = 2,
|
||||||
__MACSEC_OFFLOAD_END,
|
__MACSEC_OFFLOAD_END,
|
||||||
MACSEC_OFFLOAD_MAX = __MACSEC_OFFLOAD_END - 1,
|
MACSEC_OFFLOAD_MAX = __MACSEC_OFFLOAD_END - 1,
|
||||||
};
|
};
|
||||||
|
@ -489,6 +489,7 @@ enum macsec_validation_type {
|
|||||||
enum macsec_offload {
|
enum macsec_offload {
|
||||||
MACSEC_OFFLOAD_OFF = 0,
|
MACSEC_OFFLOAD_OFF = 0,
|
||||||
MACSEC_OFFLOAD_PHY = 1,
|
MACSEC_OFFLOAD_PHY = 1,
|
||||||
|
MACSEC_OFFLOAD_MAC = 2,
|
||||||
__MACSEC_OFFLOAD_END,
|
__MACSEC_OFFLOAD_END,
|
||||||
MACSEC_OFFLOAD_MAX = __MACSEC_OFFLOAD_END - 1,
|
MACSEC_OFFLOAD_MAX = __MACSEC_OFFLOAD_END - 1,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user