diff options
author | Antoine Tenart <antoine.tenart@bootlin.com> | 2020-03-25 15:52:33 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-03-27 06:17:36 +0300 |
commit | 21114b7feec29e4425a3ac48a037569c016a46c8 (patch) | |
tree | c5b97e476b8a0bacb3365dfa2652153d7eaaee10 /drivers/net/macsec.c | |
parent | 8fa9137180b2fd8482b671f7e0bd8cf7538cbf59 (diff) | |
download | linux-21114b7feec29e4425a3ac48a037569c016a46c8.tar.xz |
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>
Diffstat (limited to 'drivers/net/macsec.c')
-rw-r--r-- | drivers/net/macsec.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 35abebe95b79..d29c072e19af 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -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 */ 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 false; @@ -355,6 +356,9 @@ static bool macsec_check_offload(enum macsec_offload offload, if (offload == MACSEC_OFFLOAD_PHY) return macsec->real_dev->phydev && 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; } @@ -369,9 +373,14 @@ static const struct macsec_ops *__macsec_get_ops(enum macsec_offload offload, if (offload == MACSEC_OFFLOAD_PHY) 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 |