Commit 21114b7f authored by Antoine Tenart's avatar Antoine Tenart Committed by David S. Miller

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: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: default avatarMark Starovoytov <mstarovoitov@marvell.com>
Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8fa91371
...@@ -339,7 +339,8 @@ static void macsec_set_shortlen(struct macsec_eth_header *h, size_t data_len) ...@@ -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, ...@@ -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, ...@@ -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;
} }
if (offload == MACSEC_OFFLOAD_PHY)
return macsec->real_dev->phydev->macsec_ops; 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 { ...@@ -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 { ...@@ -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,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment