mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 09:42:19 +03:00
nvethernet: address review comments
- Remove debug code under TEST macro - Remove macsec CLK/RST hard code WAR's - Update macsec OSI macro's as per latest OSI_ prefix Bug 3264523 Change-Id: I8674e953e0faf49125e2326bdeb4b5bdc323a26c Signed-off-by: Mahesh Patil <maheshp@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2548474 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Revanth Kumar Uppala
parent
f972af3192
commit
b02ba38d38
@@ -5672,11 +5672,6 @@ static int ether_probe(struct platform_device *pdev)
|
||||
struct net_device *ndev;
|
||||
int ret = 0, i;
|
||||
|
||||
#ifdef TEST
|
||||
macsec_genl_register();
|
||||
return 0;
|
||||
#endif /* TEST */
|
||||
|
||||
ether_get_num_dma_chan_mtl_q(pdev, &num_dma_chans,
|
||||
&mac, &num_mtl_queues);
|
||||
|
||||
@@ -5827,9 +5822,11 @@ static int ether_probe(struct platform_device *pdev)
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "failed to setup macsec\n");
|
||||
goto err_macsec;
|
||||
} else if (ret == 1) {
|
||||
/* Nothing to do, macsec is not supported */
|
||||
dev_info(&pdev->dev, "Macsec not supported\n");
|
||||
} else {
|
||||
; //Nothing to do, macsec is not supported
|
||||
dev_info(&pdev->dev, "Macsec not enabled - ignore\n");
|
||||
dev_info(&pdev->dev, "Macsec not enabled\n");
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MACSEC
|
||||
@@ -5926,10 +5923,6 @@ static int ether_remove(struct platform_device *pdev)
|
||||
struct ether_priv_data *pdata = netdev_priv(ndev);
|
||||
|
||||
#ifdef MACSEC_SUPPORT
|
||||
#ifdef TEST
|
||||
macsec_genl_unregister();
|
||||
return 0;
|
||||
#endif /* TEST */
|
||||
macsec_remove(pdata);
|
||||
#endif /* MACSEC_SUPPORT */
|
||||
|
||||
|
||||
@@ -49,12 +49,8 @@ static irqreturn_t macsec_ns_isr(int irq, void *data)
|
||||
static int macsec_disable_car(struct macsec_priv_data *macsec_pdata)
|
||||
{
|
||||
struct ether_priv_data *pdata = macsec_pdata->ether_pdata;
|
||||
struct device *dev = pdata->dev;
|
||||
void __iomem *addr = NULL;
|
||||
unsigned int val = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
if (!pdata->osi_core->pre_si) {
|
||||
if (pdata->osi_core->mac == OSI_MAC_HW_MGBE) {
|
||||
if (!IS_ERR_OR_NULL(macsec_pdata->mgbe_clk)) {
|
||||
clk_disable_unprepare(macsec_pdata->mgbe_clk);
|
||||
@@ -72,25 +68,6 @@ static int macsec_disable_car(struct macsec_priv_data *macsec_pdata)
|
||||
if (macsec_pdata->ns_rst) {
|
||||
reset_control_assert(macsec_pdata->ns_rst);
|
||||
}
|
||||
} else {
|
||||
/* For Pre-sil only, reset the MACsec controller directly.
|
||||
* Assert the reset Bit 8 in CLK_RST_CONTROLLER_RST_DEV_MGBE_0.
|
||||
*/
|
||||
addr = devm_ioremap(dev, 0x21460018, 0x4);
|
||||
if (addr) {
|
||||
val = readl(addr);
|
||||
val |= BIT(8);
|
||||
writel(val, addr);
|
||||
devm_iounmap(dev, addr);
|
||||
}
|
||||
addr = devm_ioremap(dev, 0x21460080, 0x4);
|
||||
if (addr) {
|
||||
val = readl(addr);
|
||||
val &= ~BIT(2);
|
||||
writel(val, addr);
|
||||
devm_iounmap(dev, addr);
|
||||
}
|
||||
}
|
||||
|
||||
PRINT_EXIT();
|
||||
return 0;
|
||||
@@ -100,12 +77,9 @@ static int macsec_enable_car(struct macsec_priv_data *macsec_pdata)
|
||||
{
|
||||
struct ether_priv_data *pdata = macsec_pdata->ether_pdata;
|
||||
struct device *dev = pdata->dev;
|
||||
void __iomem *addr = NULL;
|
||||
unsigned int val = 0;
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
if (!pdata->osi_core->pre_si) {
|
||||
if (pdata->osi_core->mac == OSI_MAC_HW_MGBE) {
|
||||
if (!IS_ERR_OR_NULL(macsec_pdata->mgbe_clk)) {
|
||||
ret = clk_prepare_enable(macsec_pdata->mgbe_clk);
|
||||
@@ -131,9 +105,7 @@ static int macsec_enable_car(struct macsec_priv_data *macsec_pdata)
|
||||
}
|
||||
}
|
||||
}
|
||||
/* TODO:
|
||||
* 1. Any delay needed in silicon for clocks to stabilize ?
|
||||
*/
|
||||
|
||||
if (macsec_pdata->ns_rst) {
|
||||
ret = reset_control_reset(macsec_pdata->ns_rst);
|
||||
if (ret < 0) {
|
||||
@@ -141,32 +113,6 @@ static int macsec_enable_car(struct macsec_priv_data *macsec_pdata)
|
||||
goto err_ns_rst;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pdata->osi_core->use_virtualization != OSI_ENABLE) {
|
||||
/* For Pre-sil only, reset the MACsec controller directly.
|
||||
* clk ungate first, followed by disabling reset
|
||||
* Bit 8 in CLK_RST_CONTROLLER_RST_DEV_MGBE_0 register.
|
||||
*/
|
||||
addr = devm_ioremap(dev, 0x21460080, 0x4);
|
||||
if (addr) {
|
||||
val = readl(addr);
|
||||
val |= BIT(2);
|
||||
writel(val, addr);
|
||||
devm_iounmap(dev, addr);
|
||||
}
|
||||
|
||||
/* Followed by disabling reset - Bit 8 in
|
||||
* CLK_RST_CONTROLLER_RST_DEV_MGBE_0 register.
|
||||
*/
|
||||
addr = devm_ioremap(dev, 0x21460018, 0x4);
|
||||
if (addr) {
|
||||
val = readl(addr);
|
||||
val &= ~BIT(8);
|
||||
writel(val, addr);
|
||||
devm_iounmap(dev, addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
goto exit;
|
||||
|
||||
@@ -257,7 +203,7 @@ int macsec_open(struct macsec_priv_data *macsec_pdata,
|
||||
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
/* Clear KT entries */
|
||||
ret = macsec_tz_kt_config(pdata, MACSEC_CMD_TZ_KT_RESET, OSI_NULL,
|
||||
ret = macsec_tz_kt_config(pdata, OSI_MACSEC_CMD_TZ_KT_RESET, OSI_NULL,
|
||||
genl_info);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "TZ key config failed %d\n", ret);
|
||||
@@ -265,7 +211,7 @@ int macsec_open(struct macsec_priv_data *macsec_pdata,
|
||||
}
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
|
||||
/* 4. Enable the macsec controller */
|
||||
/* Enable the macsec controller */
|
||||
ret = osi_macsec_en(pdata->osi_core,
|
||||
(OSI_MACSEC_TX_EN | OSI_MACSEC_RX_EN));
|
||||
if (ret < 0) {
|
||||
@@ -294,10 +240,8 @@ static int macsec_get_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
if (!pdata->osi_core->pre_si) {
|
||||
/* 1. Get resets */
|
||||
macsec_pdata->ns_rst = devm_reset_control_get(dev,
|
||||
"macsec_ns_rst");
|
||||
macsec_pdata->ns_rst = devm_reset_control_get(dev, "macsec_ns_rst");
|
||||
if (IS_ERR_OR_NULL(macsec_pdata->ns_rst)) {
|
||||
dev_err(dev, "Failed to get macsec_ns_rst\n");
|
||||
ret = PTR_ERR(macsec_pdata->ns_rst);
|
||||
@@ -306,16 +250,14 @@ static int macsec_get_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
|
||||
/* 2. Get clks */
|
||||
if (pdata->osi_core->mac == OSI_MAC_HW_MGBE) {
|
||||
macsec_pdata->mgbe_clk = devm_clk_get(dev,
|
||||
"mgbe_macsec");
|
||||
macsec_pdata->mgbe_clk = devm_clk_get(dev, "mgbe_macsec");
|
||||
if (IS_ERR(macsec_pdata->mgbe_clk)) {
|
||||
dev_err(dev, "failed to get macsec clk\n");
|
||||
ret = PTR_ERR(macsec_pdata->mgbe_clk);
|
||||
goto exit;
|
||||
}
|
||||
} else {
|
||||
macsec_pdata->eqos_tx_clk = devm_clk_get(dev,
|
||||
"eqos_macsec_tx");
|
||||
macsec_pdata->eqos_tx_clk = devm_clk_get(dev, "eqos_macsec_tx");
|
||||
if (IS_ERR(macsec_pdata->eqos_tx_clk)) {
|
||||
dev_err(dev, "failed to get eqos_tx clk\n");
|
||||
ret = PTR_ERR(macsec_pdata->eqos_tx_clk);
|
||||
@@ -329,7 +271,6 @@ static int macsec_get_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 3. Get irqs */
|
||||
macsec_pdata->ns_irq = platform_get_irq_byname(pdev, "macsec-ns-irq");
|
||||
@@ -346,7 +287,6 @@ static int macsec_get_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Sucess */
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
return ret;
|
||||
@@ -358,7 +298,6 @@ static void macsec_release_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
struct device *dev = pdata->dev;
|
||||
|
||||
PRINT_ENTRY();
|
||||
if (!pdata->osi_core->pre_si) {
|
||||
if (pdata->osi_core->mac == OSI_MAC_HW_MGBE) {
|
||||
if (!IS_ERR_OR_NULL(macsec_pdata->mgbe_clk)) {
|
||||
devm_clk_put(dev, macsec_pdata->mgbe_clk);
|
||||
@@ -372,7 +311,7 @@ static void macsec_release_platform_res(struct macsec_priv_data *macsec_pdata)
|
||||
devm_clk_put(dev, macsec_pdata->eqos_rx_clk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PRINT_EXIT();
|
||||
}
|
||||
|
||||
@@ -410,7 +349,7 @@ static struct macsec_supplicant_data *macsec_get_supplicant(
|
||||
int i;
|
||||
|
||||
/* check for already exist instance */
|
||||
for (i = 0; i < MAX_NUM_SC; i++) {
|
||||
for (i = 0; i < OSI_MAX_NUM_SC; i++) {
|
||||
if (supplicant[i].snd_portid == portid &&
|
||||
supplicant[i].in_use == OSI_ENABLE) {
|
||||
return &supplicant[i];
|
||||
@@ -426,7 +365,7 @@ static int update_prot_frame(
|
||||
int enable = OSI_NONE;
|
||||
|
||||
/* check any supplicant instance set */
|
||||
for (i = 0; i < MAX_NUM_SC; i++) {
|
||||
for (i = 0; i < OSI_MAX_NUM_SC; i++) {
|
||||
if (supplicant[i].protect_frames == OSI_ENABLE) {
|
||||
enable = OSI_ENABLE;
|
||||
break;
|
||||
@@ -442,7 +381,7 @@ static int update_set_controlled_port(
|
||||
int enable = OSI_NONE;
|
||||
|
||||
/* check any supplicant instance set */
|
||||
for (i = 0; i < MAX_NUM_SC; i++) {
|
||||
for (i = 0; i < OSI_MAX_NUM_SC; i++) {
|
||||
if (supplicant[i].enabled == OSI_ENABLE) {
|
||||
enable = OSI_ENABLE;
|
||||
break;
|
||||
@@ -469,7 +408,7 @@ static int macsec_set_prot_frames(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
if (!macsec_pdata) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
@@ -483,7 +422,7 @@ static int macsec_set_prot_frames(struct sk_buff *skb, struct genl_info *info)
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
supplicant = macsec_get_supplicant(macsec_pdata, info->snd_portid);
|
||||
if (!supplicant) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
dev_err(pdata->dev, "%s: failed to get supplicant data",
|
||||
__func__);
|
||||
goto err_unlock;
|
||||
@@ -502,7 +441,62 @@ exit:
|
||||
|
||||
static int macsec_set_cipher(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
return -1;
|
||||
struct nlattr **attrs = info->attrs;
|
||||
struct macsec_priv_data *macsec_pdata;
|
||||
struct macsec_supplicant_data *supplicant;
|
||||
struct ether_priv_data *pdata = NULL;
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
if (!attrs[NV_MACSEC_ATTR_IFNAME] ||
|
||||
!attrs[NV_MACSEC_ATTR_CIPHER_SUITE]) {
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
if (!macsec_pdata) {
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
|
||||
if (!netif_running(pdata->ndev)) {
|
||||
ret = -ENETDOWN;
|
||||
dev_err(pdata->dev, "%s: MAC interface down!!\n", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
supplicant = macsec_get_supplicant(macsec_pdata, info->snd_portid);
|
||||
if (!supplicant) {
|
||||
ret = -EPROTO;
|
||||
dev_err(pdata->dev, "%s: failed to get supplicant data\n",
|
||||
__func__);
|
||||
goto err_unlock;
|
||||
}
|
||||
supplicant->cipher = nla_get_u32(attrs[NV_MACSEC_ATTR_CIPHER_SUITE]);
|
||||
|
||||
if (supplicant->cipher != OSI_MACSEC_CIPHER_AES128 &&
|
||||
supplicant->cipher != OSI_MACSEC_CIPHER_AES256) {
|
||||
ret = -EPROTO;
|
||||
dev_err(pdata->dev, "%s: Invalid cipher suit %d\n",
|
||||
__func__, supplicant->cipher);
|
||||
goto err_unlock;
|
||||
}
|
||||
|
||||
if (macsec_pdata->cipher != supplicant->cipher) {
|
||||
ret = osi_macsec_cipher_config(pdata->osi_core,
|
||||
supplicant->cipher);
|
||||
if (ret < 0) {
|
||||
dev_err(pdata->dev, "Failed to set macsec cipher\n");
|
||||
}
|
||||
macsec_pdata->cipher = supplicant->cipher;
|
||||
}
|
||||
err_unlock:
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int macsec_set_controlled_port(struct sk_buff *skb,
|
||||
@@ -525,7 +519,7 @@ static int macsec_set_controlled_port(struct sk_buff *skb,
|
||||
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
if (!macsec_pdata) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
@@ -539,7 +533,7 @@ static int macsec_set_controlled_port(struct sk_buff *skb,
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
supplicant = macsec_get_supplicant(macsec_pdata, info->snd_portid);
|
||||
if (!supplicant) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
dev_err(pdata->dev, "%s: failed to get supplicant data",
|
||||
__func__);
|
||||
goto err_unlock;
|
||||
@@ -557,7 +551,7 @@ static int macsec_set_controlled_port(struct sk_buff *skb,
|
||||
ret = osi_macsec_en(macsec_pdata->ether_pdata->osi_core,
|
||||
macsec_en);
|
||||
if (ret < 0) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto err_unlock;
|
||||
}
|
||||
macsec_pdata->enabled = macsec_en;
|
||||
@@ -611,7 +605,7 @@ static int macsec_dis_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
struct device *dev = NULL;
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
struct osi_macsec_kt_config kt_config = {0};
|
||||
struct macsec_table_config *table_config;
|
||||
struct osi_macsec_table_config *table_config;
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
|
||||
PRINT_ENTRY();
|
||||
@@ -620,10 +614,8 @@ static int macsec_dis_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
if (macsec_pdata) {
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
} else {
|
||||
#ifndef TEST
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
#endif
|
||||
}
|
||||
dev = pdata->dev;
|
||||
|
||||
@@ -654,10 +646,9 @@ static int macsec_dis_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
pr_err("");
|
||||
|
||||
#ifndef TEST
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
ret = osi_macsec_config(pdata->osi_core, &rx_sa, OSI_DISABLE,
|
||||
CTLR_SEL_RX, &kt_idx);
|
||||
OSI_CTLR_SEL_RX, &kt_idx);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to disable Rx SA", __func__);
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
@@ -666,11 +657,11 @@ static int macsec_dis_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
table_config = &kt_config.table_config;
|
||||
table_config->ctlr_sel = CTLR_SEL_RX;
|
||||
table_config->rw = LUT_WRITE;
|
||||
table_config->ctlr_sel = OSI_CTLR_SEL_RX;
|
||||
table_config->rw = OSI_LUT_WRITE;
|
||||
table_config->index = kt_idx;
|
||||
|
||||
ret = macsec_tz_kt_config(pdata, MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
ret = macsec_tz_kt_config(pdata, OSI_MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
info);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to program SAK through TZ %d",
|
||||
@@ -678,7 +669,6 @@ static int macsec_dis_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
#endif
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
return ret;
|
||||
@@ -696,7 +686,7 @@ static int macsec_en_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
struct device *dev = NULL;
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
struct osi_macsec_kt_config kt_config = {0};
|
||||
struct macsec_table_config *table_config;
|
||||
struct osi_macsec_table_config *table_config;
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
|
||||
PRINT_ENTRY();
|
||||
@@ -704,10 +694,8 @@ static int macsec_en_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
if (macsec_pdata) {
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
} else {
|
||||
#ifndef TEST
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
#endif
|
||||
}
|
||||
dev = pdata->dev;
|
||||
|
||||
@@ -724,24 +712,25 @@ static int macsec_en_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
rx_sa.pn_window = macsec_pdata->pn_window;
|
||||
pr_err("%s:\n"
|
||||
"\tsci: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n"
|
||||
"\tan: %u\n"
|
||||
"\tpn: %u",
|
||||
"\tpn: %u\n"
|
||||
"\twindow: %u",
|
||||
__func__,
|
||||
rx_sa.sci[0], rx_sa.sci[1], rx_sa.sci[2], rx_sa.sci[3],
|
||||
rx_sa.sci[4], rx_sa.sci[5], rx_sa.sci[6], rx_sa.sci[7],
|
||||
rx_sa.curr_an, rx_sa.next_pn);
|
||||
rx_sa.curr_an, rx_sa.next_pn, rx_sa.pn_window);
|
||||
pr_err("\tkey: ");
|
||||
for (i = 0; i < 16; i++) {
|
||||
pr_cont(" %02x", rx_sa.sak[i]);
|
||||
}
|
||||
pr_err("");
|
||||
|
||||
#ifndef TEST
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
ret = osi_macsec_config(pdata->osi_core, &rx_sa, OSI_ENABLE,
|
||||
CTLR_SEL_RX, &kt_idx);
|
||||
OSI_CTLR_SEL_RX, &kt_idx);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to enable Rx SA", __func__);
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
@@ -751,16 +740,16 @@ static int macsec_en_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
table_config = &kt_config.table_config;
|
||||
table_config->ctlr_sel = CTLR_SEL_RX;
|
||||
table_config->rw = LUT_WRITE;
|
||||
table_config->ctlr_sel = OSI_CTLR_SEL_RX;
|
||||
table_config->rw = OSI_LUT_WRITE;
|
||||
table_config->index = kt_idx;
|
||||
kt_config.flags |= LUT_FLAGS_ENTRY_VALID;
|
||||
kt_config.flags |= OSI_LUT_FLAGS_ENTRY_VALID;
|
||||
|
||||
for (i = 0; i < KEY_LEN_128; i++) {
|
||||
for (i = 0; i < OSI_KEY_LEN_128; i++) {
|
||||
kt_config.entry.sak[i] = rx_sa.sak[i];
|
||||
}
|
||||
|
||||
ret = macsec_tz_kt_config(pdata, MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
ret = macsec_tz_kt_config(pdata, OSI_MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
info);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to program SAK through TZ %d",
|
||||
@@ -768,7 +757,6 @@ static int macsec_en_rx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
#endif
|
||||
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
@@ -787,7 +775,7 @@ static int macsec_dis_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
struct device *dev = NULL;
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
struct osi_macsec_kt_config kt_config = {0};
|
||||
struct macsec_table_config *table_config;
|
||||
struct osi_macsec_table_config *table_config;
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
|
||||
PRINT_ENTRY();
|
||||
@@ -795,10 +783,8 @@ static int macsec_dis_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
if (macsec_pdata) {
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
} else {
|
||||
#ifndef TEST
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
#endif
|
||||
}
|
||||
dev = pdata->dev;
|
||||
|
||||
@@ -829,10 +815,9 @@ static int macsec_dis_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
pr_err("");
|
||||
|
||||
#ifndef TEST
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
ret = osi_macsec_config(pdata->osi_core, &tx_sa, OSI_DISABLE,
|
||||
CTLR_SEL_TX, &kt_idx);
|
||||
OSI_CTLR_SEL_TX, &kt_idx);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to disable Tx SA", __func__);
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
@@ -842,11 +827,11 @@ static int macsec_dis_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
table_config = &kt_config.table_config;
|
||||
table_config->ctlr_sel = CTLR_SEL_TX;
|
||||
table_config->rw = LUT_WRITE;
|
||||
table_config->ctlr_sel = OSI_CTLR_SEL_TX;
|
||||
table_config->rw = OSI_LUT_WRITE;
|
||||
table_config->index = kt_idx;
|
||||
|
||||
ret = macsec_tz_kt_config(pdata, MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
ret = macsec_tz_kt_config(pdata, OSI_MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
info);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to program SAK through TZ %d",
|
||||
@@ -854,7 +839,6 @@ static int macsec_dis_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
#endif
|
||||
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
@@ -873,7 +857,7 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
struct device *dev = NULL;
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
struct osi_macsec_kt_config kt_config = {0};
|
||||
struct macsec_table_config *table_config;
|
||||
struct osi_macsec_table_config *table_config;
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
|
||||
PRINT_ENTRY();
|
||||
@@ -881,10 +865,8 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
if (macsec_pdata) {
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
} else {
|
||||
#ifndef TEST
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
#endif
|
||||
}
|
||||
dev = pdata->dev;
|
||||
|
||||
@@ -901,6 +883,7 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
tx_sa.pn_window = macsec_pdata->pn_window;
|
||||
pr_err("%s:\n"
|
||||
"\tsci: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n"
|
||||
"\tan: %u\n"
|
||||
@@ -915,10 +898,9 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
pr_err("");
|
||||
|
||||
#ifndef TEST
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
ret = osi_macsec_config(pdata->osi_core, &tx_sa, OSI_ENABLE,
|
||||
CTLR_SEL_TX, &kt_idx);
|
||||
OSI_CTLR_SEL_TX, &kt_idx);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to enable Tx SA", __func__);
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
@@ -928,16 +910,16 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
#ifndef MACSEC_KEY_PROGRAM
|
||||
table_config = &kt_config.table_config;
|
||||
table_config->ctlr_sel = CTLR_SEL_TX;
|
||||
table_config->rw = LUT_WRITE;
|
||||
table_config->ctlr_sel = OSI_CTLR_SEL_TX;
|
||||
table_config->rw = OSI_LUT_WRITE;
|
||||
table_config->index = kt_idx;
|
||||
kt_config.flags |= LUT_FLAGS_ENTRY_VALID;
|
||||
kt_config.flags |= OSI_LUT_FLAGS_ENTRY_VALID;
|
||||
|
||||
for (i = 0; i < KEY_LEN_128; i++) {
|
||||
for (i = 0; i < OSI_KEY_LEN_128; i++) {
|
||||
kt_config.entry.sak[i] = tx_sa.sak[i];
|
||||
}
|
||||
|
||||
ret = macsec_tz_kt_config(pdata, MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
ret = macsec_tz_kt_config(pdata, OSI_MACSEC_CMD_TZ_CONFIG, &kt_config,
|
||||
info);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s: failed to program SAK through TZ %d",
|
||||
@@ -945,7 +927,6 @@ static int macsec_en_tx_sa(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit;
|
||||
}
|
||||
#endif /* !MACSEC_KEY_PROGRAM */
|
||||
#endif
|
||||
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
@@ -970,7 +951,7 @@ static int macsec_deinit(struct sk_buff *skb, struct genl_info *info)
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
if (!macsec_pdata) {
|
||||
pr_err("%s: failed to get macsec_pdata", __func__);
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
@@ -979,7 +960,7 @@ static int macsec_deinit(struct sk_buff *skb, struct genl_info *info)
|
||||
supplicant = macsec_get_supplicant(macsec_pdata, info->snd_portid);
|
||||
|
||||
if (!supplicant) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
dev_err(pdata->dev, "%s: failed to get supplicant data",
|
||||
__func__);
|
||||
@@ -1006,9 +987,8 @@ static int macsec_deinit(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
|
||||
ret = macsec_close(macsec_pdata);
|
||||
//TODO - check why needs -EOPNOTSUPP, why not pass ret val
|
||||
if (ret < 0) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
done:
|
||||
@@ -1040,7 +1020,7 @@ static int macsec_init(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
if (!macsec_pdata) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
pr_err("%s: failed to get macsec_pdata", __func__);
|
||||
goto exit;
|
||||
}
|
||||
@@ -1055,8 +1035,8 @@ static int macsec_init(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
|
||||
if (macsec_pdata->next_supp_idx >= MAX_NUM_SC) {
|
||||
ret = -EOPNOTSUPP;
|
||||
if (macsec_pdata->next_supp_idx >= OSI_MAX_NUM_SC) {
|
||||
ret = -EPROTO;
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
dev_err(dev, "%s: Reached max supported supplicants", __func__);
|
||||
goto exit;
|
||||
@@ -1080,9 +1060,8 @@ static int macsec_init(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
mutex_unlock(&macsec_pdata->lock);
|
||||
ret = macsec_open(macsec_pdata, info);
|
||||
//TODO - check why needs -EOPNOTSUPP, why not pass ret val
|
||||
if (ret < 0) {
|
||||
ret = -EOPNOTSUPP;
|
||||
ret = -EPROTO;
|
||||
goto exit;
|
||||
}
|
||||
done:
|
||||
@@ -1098,23 +1077,48 @@ static int macsec_set_replay_prot(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct nlattr **attrs = info->attrs;
|
||||
unsigned int replay_prot, window;
|
||||
struct macsec_priv_data *macsec_pdata = NULL;
|
||||
struct ether_priv_data *pdata = NULL;
|
||||
struct device *dev = NULL;
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
|
||||
if (!attrs[NV_MACSEC_ATTR_IFNAME] ||
|
||||
!attrs[NV_MACSEC_ATTR_REPLAY_PROT_EN] ||
|
||||
!attrs[NV_MACSEC_ATTR_REPLAY_WINDOW]) {
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
replay_prot = nla_get_u32(attrs[NV_MACSEC_ATTR_REPLAY_PROT_EN]);
|
||||
window = nla_get_u32(attrs[NV_MACSEC_ATTR_REPLAY_WINDOW]);
|
||||
pr_err("replay_prot(window): %u(%u)\n",
|
||||
replay_prot, window);
|
||||
macsec_pdata = genl_to_macsec_pdata(info);
|
||||
|
||||
if (!macsec_pdata) {
|
||||
ret = -EPROTO;
|
||||
pr_err("%s: failed to get macsec_pdata", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* TODO - set replay window for all active SA's.
|
||||
* Store window in macsec_pdata so that future SA's can be updated
|
||||
*/
|
||||
return 0;
|
||||
pdata = macsec_pdata->ether_pdata;
|
||||
dev = pdata->dev;
|
||||
|
||||
if (!netif_running(pdata->ndev)) {
|
||||
ret = -ENETDOWN;
|
||||
dev_err(pdata->dev, "%s: MAC interface down!!\n", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (window != 0) {
|
||||
macsec_pdata->pn_window = window;
|
||||
} else {
|
||||
macsec_pdata->pn_window = OSI_PN_MAX_DEFAULT;
|
||||
}
|
||||
|
||||
exit:
|
||||
PRINT_EXIT();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct genl_ops nv_macsec_genl_ops[] = {
|
||||
@@ -1192,7 +1196,7 @@ void macsec_remove(struct ether_priv_data *pdata)
|
||||
mutex_lock(&macsec_pdata->lock);
|
||||
/* Delete if any supplicant active heartbeat timer */
|
||||
supplicant = macsec_pdata->supplicant;
|
||||
for (i = 0; i < MAX_NUM_SC; i++) {
|
||||
for (i = 0; i < OSI_MAX_NUM_SC; i++) {
|
||||
if (supplicant[i].in_use == OSI_ENABLE) {
|
||||
supplicant->snd_portid = OSI_NONE;
|
||||
supplicant->in_use = OSI_NONE;
|
||||
@@ -1220,23 +1224,6 @@ void macsec_remove(struct ether_priv_data *pdata)
|
||||
PRINT_EXIT();
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
int macsec_genl_register(void)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = genl_register_family(&nv_macsec_fam);
|
||||
if (ret < 0) {
|
||||
pr_err("failed to register genl\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void macsec_genl_unregister(void)
|
||||
{
|
||||
genl_unregister_family(&nv_macsec_fam);
|
||||
}
|
||||
#endif /* TEST */
|
||||
|
||||
int macsec_probe(struct ether_priv_data *pdata)
|
||||
{
|
||||
struct device *dev = pdata->dev;
|
||||
@@ -1248,7 +1235,7 @@ int macsec_probe(struct ether_priv_data *pdata)
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ENTRY();
|
||||
/* 1. Check if MACsec is enabled in DT, if so map the I/O base addr */
|
||||
/* Check if MACsec is enabled in DT, if so map the I/O base addr */
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "macsec-base");
|
||||
if (res) {
|
||||
osi_core->macsec_base = devm_ioremap_resource(dev, res);
|
||||
@@ -1276,7 +1263,7 @@ int macsec_probe(struct ether_priv_data *pdata)
|
||||
goto exit;
|
||||
}
|
||||
#endif
|
||||
/* 2. Alloc macsec priv data structure */
|
||||
/* Alloc macsec priv data structure */
|
||||
macsec_pdata = devm_kzalloc(dev, sizeof(struct macsec_priv_data),
|
||||
GFP_KERNEL);
|
||||
if (macsec_pdata == NULL) {
|
||||
@@ -1296,14 +1283,14 @@ int macsec_probe(struct ether_priv_data *pdata)
|
||||
macsec_pdata->id = 0;
|
||||
}
|
||||
|
||||
/* 3. Get OSI MACsec ops */
|
||||
/* Get OSI MACsec ops */
|
||||
if (osi_init_macsec_ops(osi_core) != 0) {
|
||||
dev_err(dev, "osi_init_macsec_ops failed\n");
|
||||
ret = -1;
|
||||
goto init_err;
|
||||
}
|
||||
|
||||
/* 4. Get platform resources - clks, resets, irqs.
|
||||
/* Get platform resources - clks, resets, irqs.
|
||||
* CAR is not enabled and irqs not requested until macsec_init()
|
||||
*/
|
||||
ret = macsec_get_platform_res(macsec_pdata);
|
||||
@@ -1312,15 +1299,14 @@ int macsec_probe(struct ether_priv_data *pdata)
|
||||
goto init_err;
|
||||
}
|
||||
|
||||
/* 2. Enable CAR */
|
||||
/* Enable CAR */
|
||||
ret = macsec_enable_car(macsec_pdata);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "Unable to enable macsec clks & reset\n");
|
||||
goto car_err;
|
||||
}
|
||||
/* 5. Register macsec sysfs node - done from sysfs.c */
|
||||
|
||||
/* 6. Register macsec generic netlink ops */
|
||||
/* Register macsec generic netlink ops */
|
||||
if (is_nv_macsec_fam_registered == OSI_DISABLE) {
|
||||
ret = genl_register_family(&nv_macsec_fam);
|
||||
if (ret) {
|
||||
@@ -1374,13 +1360,14 @@ static int macsec_tz_kt_config(struct ether_priv_data *pdata,
|
||||
/* return success, as info can be NULL if called from
|
||||
* sysfs calls
|
||||
*/
|
||||
return ret;
|
||||
ret = 0;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* remap osi tz cmd to netlink cmd */
|
||||
if (cmd == MACSEC_CMD_TZ_CONFIG) {
|
||||
if (cmd == OSI_MACSEC_CMD_TZ_CONFIG) {
|
||||
cmd = NV_MACSEC_CMD_TZ_CONFIG;
|
||||
} else if (cmd == MACSEC_CMD_TZ_KT_RESET) {
|
||||
} else if (cmd == OSI_MACSEC_CMD_TZ_KT_RESET) {
|
||||
cmd = NV_MACSEC_CMD_TZ_KT_RESET;
|
||||
} else {
|
||||
dev_err(dev, "%s: Wrong TZ cmd %d\n", __func__, cmd);
|
||||
@@ -1423,7 +1410,7 @@ static int macsec_tz_kt_config(struct ether_priv_data *pdata,
|
||||
kt_config->table_config.rw);
|
||||
nla_put_u8(msg, NV_MACSEC_TZ_ATTR_INDEX,
|
||||
kt_config->table_config.index);
|
||||
nla_put(msg, NV_MACSEC_TZ_ATTR_KEY, KEY_LEN_256,
|
||||
nla_put(msg, NV_MACSEC_TZ_ATTR_KEY, OSI_KEY_LEN_256,
|
||||
kt_config->entry.sak);
|
||||
nla_put_u32(msg, NV_MACSEC_TZ_ATTR_FLAG, kt_config->flags);
|
||||
nla_nest_end(msg, nest);
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
#include <net/genetlink.h>
|
||||
#include <linux/crypto.h>
|
||||
|
||||
//#define TEST 1
|
||||
|
||||
/**
|
||||
* @brief Size of Macsec IRQ name.
|
||||
*/
|
||||
@@ -86,7 +84,7 @@ static const struct nla_policy nv_macsec_sa_genl_policy[NUM_NV_MACSEC_SA_ATTR] =
|
||||
[NV_MACSEC_SA_ATTR_AN] = { .type = NLA_U8 },
|
||||
[NV_MACSEC_SA_ATTR_PN] = { .type = NLA_U32 },
|
||||
[NV_MACSEC_SA_ATTR_KEY] = { .type = NLA_BINARY,
|
||||
.len = KEY_LEN_128,},
|
||||
.len = OSI_KEY_LEN_128,},
|
||||
};
|
||||
|
||||
static const struct nla_policy nv_macsec_tz_genl_policy[NUM_NV_MACSEC_TZ_ATTR] = {
|
||||
@@ -95,7 +93,7 @@ static const struct nla_policy nv_macsec_tz_genl_policy[NUM_NV_MACSEC_TZ_ATTR] =
|
||||
[NV_MACSEC_TZ_ATTR_RW] = { .type = NLA_U8 },
|
||||
[NV_MACSEC_TZ_ATTR_INDEX] = { .type = NLA_U8 },
|
||||
[NV_MACSEC_TZ_ATTR_KEY] = { .type = NLA_BINARY,
|
||||
.len = KEY_LEN_256 },
|
||||
.len = OSI_KEY_LEN_256 },
|
||||
[NV_MACSEC_TZ_ATTR_FLAG] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
@@ -136,6 +134,8 @@ struct macsec_supplicant_data {
|
||||
unsigned int protect_frames;
|
||||
/** MACsec enabled flags for Tx/Rx controller status */
|
||||
unsigned int enabled;
|
||||
/** MACsec cipher suite */
|
||||
unsigned int cipher;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -166,10 +166,12 @@ struct macsec_priv_data {
|
||||
unsigned int protect_frames;
|
||||
/** MACsec enabled flags for Tx/Rx controller status */
|
||||
unsigned int enabled;
|
||||
/** MACsec Rx PN Window */
|
||||
unsigned int pn_window;
|
||||
/** MACsec controller init reference count */
|
||||
atomic_t ref_count;
|
||||
/** supplicant instance specific data */
|
||||
struct macsec_supplicant_data supplicant[MAX_NUM_SC];
|
||||
struct macsec_supplicant_data supplicant[OSI_MAX_NUM_SC];
|
||||
/** next supplicant instance index */
|
||||
unsigned short next_supp_idx;
|
||||
/** macsec mutex lock */
|
||||
@@ -184,11 +186,6 @@ int macsec_open(struct macsec_priv_data *macsec_pdata,
|
||||
void *const genl_info);
|
||||
int macsec_close(struct macsec_priv_data *macsec_pdata);
|
||||
|
||||
#ifdef TEST
|
||||
int macsec_genl_register(void);
|
||||
void macsec_genl_unregister(void);
|
||||
#endif /* TEST */
|
||||
|
||||
#ifdef MACSEC_DEBUG
|
||||
#define PRINT_ENTRY() (pr_info("-->%s()\n", __func__))
|
||||
#define PRINT_EXIT() (pr_info("<--%s()\n", __func__))
|
||||
|
||||
@@ -296,7 +296,7 @@ static ssize_t macsec_cipher_show(struct device *dev,
|
||||
struct macsec_priv_data *macsec_pdata = pdata->macsec_pdata;
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n",
|
||||
(macsec_pdata->cipher == MACSEC_CIPHER_AES128) ?
|
||||
(macsec_pdata->cipher == OSI_MACSEC_CIPHER_AES128) ?
|
||||
"aes128" : "aes256");
|
||||
}
|
||||
|
||||
@@ -328,20 +328,20 @@ static ssize_t macsec_cipher_store(struct device *dev,
|
||||
|
||||
if (strncmp(buf, "aes128", 6) == OSI_NONE) {
|
||||
ret = osi_macsec_cipher_config(pdata->osi_core,
|
||||
MACSEC_CIPHER_AES128);
|
||||
OSI_MACSEC_CIPHER_AES128);
|
||||
if (ret < 0) {
|
||||
dev_err(pdata->dev, "Failed to set macsec cipher\n");
|
||||
} else {
|
||||
macsec_pdata->cipher = MACSEC_CIPHER_AES128;
|
||||
macsec_pdata->cipher = OSI_MACSEC_CIPHER_AES128;
|
||||
dev_info(pdata->dev, "macsec cipher aes128 enabled\n");
|
||||
}
|
||||
} else if (strncmp(buf, "aes256", 6) == OSI_NONE) {
|
||||
ret = osi_macsec_cipher_config(pdata->osi_core,
|
||||
MACSEC_CIPHER_AES256);
|
||||
OSI_MACSEC_CIPHER_AES256);
|
||||
if (ret < 0) {
|
||||
dev_err(pdata->dev, "Failed to set macsec cipher\n");
|
||||
} else {
|
||||
macsec_pdata->cipher = MACSEC_CIPHER_AES256;
|
||||
macsec_pdata->cipher = OSI_MACSEC_CIPHER_AES256;
|
||||
dev_info(pdata->dev, "macsec cipher aes256 enabled\n");
|
||||
}
|
||||
} else {
|
||||
@@ -454,9 +454,9 @@ static void format_output(char **buf_p,
|
||||
{
|
||||
char *buf = *buf_p;
|
||||
unsigned int flags = lut_config->flags;
|
||||
struct lut_inputs entry = lut_config->lut_in;
|
||||
struct osi_lut_inputs entry = lut_config->lut_in;
|
||||
|
||||
if ((flags & LUT_FLAGS_DA_VALID) == LUT_FLAGS_DA_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_DA_VALID) == OSI_LUT_FLAGS_DA_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "DA: " MAC_ADDR_FMT " ",
|
||||
entry.da[5], entry.da[4], entry.da[3],
|
||||
entry.da[2], entry.da[1], entry.da[0]);
|
||||
@@ -464,7 +464,7 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "DA: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_SA_VALID) == LUT_FLAGS_SA_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_SA_VALID) == OSI_LUT_FLAGS_SA_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "SA: " MAC_ADDR_FMT " ",
|
||||
entry.sa[5], entry.sa[4], entry.sa[3],
|
||||
entry.sa[2], entry.sa[1], entry.sa[0]);
|
||||
@@ -472,24 +472,25 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "SA: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_ETHTYPE_VALID) == LUT_FLAGS_ETHTYPE_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_ETHTYPE_VALID) ==
|
||||
OSI_LUT_FLAGS_ETHTYPE_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "ethtype: " ETHTYPE_FMT " ",
|
||||
entry.ethtype[1], entry.ethtype[0]);
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "ethtype: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_VLAN_VALID) == LUT_FLAGS_VLAN_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_VLAN_VALID) == OSI_LUT_FLAGS_VLAN_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "vlan: ");
|
||||
if ((flags & LUT_FLAGS_VLAN_PCP_VALID) ==
|
||||
LUT_FLAGS_VLAN_PCP_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_VLAN_PCP_VALID) ==
|
||||
OSI_LUT_FLAGS_VLAN_PCP_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "prio: %u ",
|
||||
entry.vlan_pcp);
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "prio: X ");
|
||||
}
|
||||
if ((flags & LUT_FLAGS_VLAN_ID_VALID) ==
|
||||
LUT_FLAGS_VLAN_ID_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_VLAN_ID_VALID) ==
|
||||
OSI_LUT_FLAGS_VLAN_ID_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "id: %u ",
|
||||
entry.vlan_id);
|
||||
} else {
|
||||
@@ -499,10 +500,10 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "vlan: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_DVLAN_PKT) == LUT_FLAGS_DVLAN_PKT) {
|
||||
if ((flags & OSI_LUT_FLAGS_DVLAN_PKT) == OSI_LUT_FLAGS_DVLAN_PKT) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "dvlan: 1 ");
|
||||
if ((flags & LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL) ==
|
||||
LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL) {
|
||||
if ((flags & OSI_LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL) ==
|
||||
OSI_LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "dvlan_outer_tag: 1 ");
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "dvlan_outer_tag: 0 ");
|
||||
@@ -511,8 +512,8 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "dvlan: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_BYTE0_PATTERN_VALID) ==
|
||||
LUT_FLAGS_BYTE0_PATTERN_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_BYTE0_PATTERN_VALID) ==
|
||||
OSI_LUT_FLAGS_BYTE0_PATTERN_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte0: Pattern: %x "
|
||||
"offset: %u ",
|
||||
entry.byte_pattern[0],
|
||||
@@ -521,8 +522,8 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte0: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_BYTE1_PATTERN_VALID) ==
|
||||
LUT_FLAGS_BYTE1_PATTERN_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_BYTE1_PATTERN_VALID) ==
|
||||
OSI_LUT_FLAGS_BYTE1_PATTERN_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte1: Pattern: %x "
|
||||
"offset: %u ",
|
||||
entry.byte_pattern[1],
|
||||
@@ -531,8 +532,8 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte1: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_BYTE2_PATTERN_VALID) ==
|
||||
LUT_FLAGS_BYTE2_PATTERN_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_BYTE2_PATTERN_VALID) ==
|
||||
OSI_LUT_FLAGS_BYTE2_PATTERN_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte2: Pattern: %x "
|
||||
"offset: %u ",
|
||||
entry.byte_pattern[2],
|
||||
@@ -541,8 +542,8 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte2: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_BYTE3_PATTERN_VALID) ==
|
||||
LUT_FLAGS_BYTE3_PATTERN_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_BYTE3_PATTERN_VALID) ==
|
||||
OSI_LUT_FLAGS_BYTE3_PATTERN_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte3: Pattern: %x "
|
||||
"offset: %u ",
|
||||
entry.byte_pattern[3],
|
||||
@@ -551,8 +552,9 @@ static void format_output(char **buf_p,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Byte3: X ");
|
||||
}
|
||||
|
||||
if ((flags & LUT_FLAGS_PREEMPT_VALID) == LUT_FLAGS_PREEMPT_VALID) {
|
||||
if ((flags & LUT_FLAGS_PREEMPT) == LUT_FLAGS_PREEMPT) {
|
||||
if ((flags & OSI_LUT_FLAGS_PREEMPT_VALID) ==
|
||||
OSI_LUT_FLAGS_PREEMPT_VALID) {
|
||||
if ((flags & OSI_LUT_FLAGS_PREEMPT) == OSI_LUT_FLAGS_PREEMPT) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "prempt: 1 ");
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "prempt: 0 ");
|
||||
@@ -571,21 +573,21 @@ static void format_output(char **buf_p,
|
||||
static int parse_inputs(const char *buf,
|
||||
struct osi_macsec_lut_config *lut_config, int *bufp)
|
||||
{
|
||||
struct lut_inputs *lut_in;
|
||||
struct osi_lut_inputs *lut_in;
|
||||
int temp[OSI_ETH_ALEN] = {0};
|
||||
int temp2[OSI_ETH_ALEN] = {0};
|
||||
int temp3[LUT_BYTE_PATTERN_MAX] = {0};
|
||||
int temp4[ETHTYPE_LEN] = {0};
|
||||
unsigned char byte[LUT_BYTE_PATTERN_MAX] = {0};
|
||||
int temp3[OSI_LUT_BYTE_PATTERN_MAX] = {0};
|
||||
int temp4[OSI_ETHTYPE_LEN] = {0};
|
||||
unsigned char byte[OSI_LUT_BYTE_PATTERN_MAX] = {0};
|
||||
unsigned char mac_da[OSI_ETH_ALEN] = {0};
|
||||
unsigned char mac_sa[OSI_ETH_ALEN] = {0};
|
||||
unsigned char ethtype[ETHTYPE_LEN] = {0};
|
||||
unsigned int byte_offset[LUT_BYTE_PATTERN_MAX] = {0};
|
||||
unsigned char ethtype[OSI_ETHTYPE_LEN] = {0};
|
||||
unsigned int byte_offset[OSI_LUT_BYTE_PATTERN_MAX] = {0};
|
||||
unsigned int vlan_pcp = 0, vlan_id = 0, flags = 0;
|
||||
unsigned short controller;
|
||||
int mac_da_valid, mac_sa_valid, ethtype_valid, vlan_valid;
|
||||
int dvlan, dvlan_outer_tag;
|
||||
int byte_valid[LUT_BYTE_PATTERN_MAX];
|
||||
int byte_valid[OSI_LUT_BYTE_PATTERN_MAX];
|
||||
int i, valid, index;;
|
||||
|
||||
|
||||
@@ -620,11 +622,11 @@ static int parse_inputs(const char *buf,
|
||||
mac_sa[i] = (unsigned char)temp2[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < ETHTYPE_LEN; i++) {
|
||||
for (i = 0; i < OSI_ETHTYPE_LEN; i++) {
|
||||
ethtype[i] = (unsigned char)temp4[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < LUT_BYTE_PATTERN_MAX; i++) {
|
||||
for (i = 0; i < OSI_LUT_BYTE_PATTERN_MAX; i++) {
|
||||
byte[i] = (unsigned char)temp3[i];
|
||||
}
|
||||
|
||||
@@ -648,7 +650,7 @@ static int parse_inputs(const char *buf,
|
||||
for (i = 0; i < OSI_ETH_ALEN; i++) {
|
||||
lut_in->da[i] = mac_da[OSI_ETH_ALEN - 1 - i];
|
||||
}
|
||||
flags |= LUT_FLAGS_DA_VALID;
|
||||
flags |= OSI_LUT_FLAGS_DA_VALID;
|
||||
}
|
||||
|
||||
if (mac_sa_valid) {
|
||||
@@ -656,32 +658,31 @@ static int parse_inputs(const char *buf,
|
||||
for (i = 0; i < OSI_ETH_ALEN; i++) {
|
||||
lut_in->sa[i] = mac_sa[OSI_ETH_ALEN - 1 - i];
|
||||
}
|
||||
flags |= LUT_FLAGS_SA_VALID;
|
||||
flags |= OSI_LUT_FLAGS_SA_VALID;
|
||||
}
|
||||
|
||||
if (ethtype_valid) {
|
||||
/* Reverse endianess for HW */
|
||||
for (i = 0; i < ETHTYPE_LEN; i++) {
|
||||
lut_in->ethtype[i] = ethtype[ETHTYPE_LEN - 1 - i];
|
||||
for (i = 0; i < OSI_ETHTYPE_LEN; i++) {
|
||||
lut_in->ethtype[i] = ethtype[OSI_ETHTYPE_LEN - 1 - i];
|
||||
}
|
||||
flags |= LUT_FLAGS_ETHTYPE_VALID;
|
||||
|
||||
flags |= OSI_LUT_FLAGS_ETHTYPE_VALID;
|
||||
}
|
||||
|
||||
for (i = 0; i < LUT_BYTE_PATTERN_MAX; i++) {
|
||||
for (i = 0; i < OSI_LUT_BYTE_PATTERN_MAX; i++) {
|
||||
if (byte_valid[i]) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
flags |= LUT_FLAGS_BYTE0_PATTERN_VALID;
|
||||
flags |= OSI_LUT_FLAGS_BYTE0_PATTERN_VALID;
|
||||
break;
|
||||
case 1:
|
||||
flags |= LUT_FLAGS_BYTE1_PATTERN_VALID;
|
||||
flags |= OSI_LUT_FLAGS_BYTE1_PATTERN_VALID;
|
||||
break;
|
||||
case 2:
|
||||
flags |= LUT_FLAGS_BYTE2_PATTERN_VALID;
|
||||
flags |= OSI_LUT_FLAGS_BYTE2_PATTERN_VALID;
|
||||
break;
|
||||
case 3:
|
||||
flags |= LUT_FLAGS_BYTE3_PATTERN_VALID;
|
||||
flags |= OSI_LUT_FLAGS_BYTE3_PATTERN_VALID;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -694,19 +695,20 @@ static int parse_inputs(const char *buf,
|
||||
if (vlan_valid) {
|
||||
lut_in->vlan_pcp = vlan_pcp;
|
||||
lut_in->vlan_id = vlan_id;
|
||||
flags |= (LUT_FLAGS_VLAN_ID_VALID | LUT_FLAGS_VLAN_PCP_VALID |
|
||||
LUT_FLAGS_VLAN_VALID);
|
||||
flags |= (OSI_LUT_FLAGS_VLAN_ID_VALID |
|
||||
OSI_LUT_FLAGS_VLAN_PCP_VALID |
|
||||
OSI_LUT_FLAGS_VLAN_VALID);
|
||||
}
|
||||
|
||||
if (dvlan) {
|
||||
flags |= LUT_FLAGS_DVLAN_PKT;
|
||||
flags |= OSI_LUT_FLAGS_DVLAN_PKT;
|
||||
if (dvlan_outer_tag) {
|
||||
flags |= LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL;
|
||||
flags |= OSI_LUT_FLAGS_DVLAN_OUTER_INNER_TAG_SEL;
|
||||
}
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
flags |= LUT_FLAGS_ENTRY_VALID;
|
||||
flags |= OSI_LUT_FLAGS_ENTRY_VALID;
|
||||
}
|
||||
|
||||
lut_config->flags = flags;
|
||||
@@ -724,11 +726,11 @@ static void dump_byp_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
char *buf = *buf_p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= BYP_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_BYP_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = ctlr_sel;
|
||||
lut_config.lut_sel = LUT_SEL_BYPASS;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_BYPASS;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
pr_err("%s: Failed to read BYP LUT\n", __func__);
|
||||
@@ -736,8 +738,8 @@ static void dump_byp_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
return;
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%d.\t", i);
|
||||
if ((lut_config.flags & LUT_FLAGS_ENTRY_VALID) !=
|
||||
LUT_FLAGS_ENTRY_VALID) {
|
||||
if ((lut_config.flags & OSI_LUT_FLAGS_ENTRY_VALID) !=
|
||||
OSI_LUT_FLAGS_ENTRY_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Invalid\n");
|
||||
memset(&lut_config, 0, sizeof(lut_config));
|
||||
continue;
|
||||
@@ -745,8 +747,8 @@ static void dump_byp_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
|
||||
format_output(&buf, &lut_config);
|
||||
/* BYP LUT output field */
|
||||
if ((lut_config.flags & LUT_FLAGS_CONTROLLED_PORT) ==
|
||||
LUT_FLAGS_CONTROLLED_PORT) {
|
||||
if ((lut_config.flags & OSI_LUT_FLAGS_CONTROLLED_PORT) ==
|
||||
OSI_LUT_FLAGS_CONTROLLED_PORT) {
|
||||
buf += scnprintf(buf,
|
||||
PAGE_SIZE, "ctrl port: 1\n");
|
||||
} else {
|
||||
@@ -780,10 +782,10 @@ static ssize_t macsec_byp_lut_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
dump_byp_lut(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_byp_lut(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
dump_byp_lut(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_byp_lut(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -819,13 +821,12 @@ static ssize_t macsec_byp_lut_store(struct device *dev,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
//TODO - need to lock. Since lut_status is updated.
|
||||
lut_config.lut_sel = LUT_SEL_BYPASS;
|
||||
lut_config.table_config.rw = LUT_WRITE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_BYPASS;
|
||||
lut_config.table_config.rw = OSI_LUT_WRITE;
|
||||
/* Rest of LUT attributes are filled by parse_inputs() */
|
||||
if (lut_config.table_config.index > BYP_LUT_MAX_INDEX) {
|
||||
if (lut_config.table_config.index > OSI_BYP_LUT_MAX_INDEX) {
|
||||
dev_err(dev, "%s: Index can't be > %d\n", __func__,
|
||||
BYP_LUT_MAX_INDEX);
|
||||
OSI_BYP_LUT_MAX_INDEX);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
@@ -870,8 +871,8 @@ static ssize_t macsec_mmc_counters_show(struct device *dev,
|
||||
dev_err(pdata->dev, "Not Allowed. Ether interface is not up\n");
|
||||
return 0;
|
||||
}
|
||||
osi_macsec_read_mmc(osi_core);
|
||||
|
||||
osi_macsec_read_mmc(osi_core);
|
||||
buf += scnprintf(buf, PAGE_SIZE, "tx_pkts_untaged:\t%llu\n",
|
||||
mmc->tx_pkts_untaged);
|
||||
buf += scnprintf(buf, PAGE_SIZE, "tx_pkts_too_long:\t%llu\n",
|
||||
@@ -910,6 +911,7 @@ static ssize_t macsec_mmc_counters_show(struct device *dev,
|
||||
buf += scnprintf(buf, PAGE_SIZE, "rx_pkts_ok sc%d: \t%llu\n",
|
||||
i, mmc->rx_pkts_ok[i]);
|
||||
}
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
|
||||
@@ -930,14 +932,14 @@ static void dump_dbg_buffers(char **buf_p, unsigned short ctlr_sel,
|
||||
int i;
|
||||
unsigned int idx_max;
|
||||
|
||||
if (ctlr_sel == CTLR_SEL_TX) {
|
||||
idx_max = TX_DBG_BUF_IDX_MAX;
|
||||
if (ctlr_sel == OSI_CTLR_SEL_TX) {
|
||||
idx_max = OSI_TX_DBG_BUF_IDX_MAX;
|
||||
} else {
|
||||
idx_max = RX_DBG_BUF_IDX_MAX;
|
||||
idx_max = OSI_RX_DBG_BUF_IDX_MAX;
|
||||
}
|
||||
for (i = 0; i < idx_max; i++) {
|
||||
memset(&dbg_buf_config, OSI_NONE, sizeof(dbg_buf_config));
|
||||
dbg_buf_config.rw = DBG_TBL_READ;
|
||||
dbg_buf_config.rw = OSI_DBG_TBL_READ;
|
||||
dbg_buf_config.ctlr_sel = ctlr_sel;
|
||||
dbg_buf_config.index = i;
|
||||
if (osi_macsec_dbg_buf_config(osi_core, &dbg_buf_config) < 0) {
|
||||
@@ -956,7 +958,7 @@ static void dump_dbg_buffers(char **buf_p, unsigned short ctlr_sel,
|
||||
/* reset debug buffer after buf read */
|
||||
for (i = 0; i < idx_max; i++) {
|
||||
memset(&dbg_buf_config, OSI_NONE, sizeof(dbg_buf_config));
|
||||
dbg_buf_config.rw = DBG_TBL_WRITE;
|
||||
dbg_buf_config.rw = OSI_DBG_TBL_WRITE;
|
||||
dbg_buf_config.ctlr_sel = ctlr_sel;
|
||||
dbg_buf_config.index = i;
|
||||
if (osi_macsec_dbg_buf_config(osi_core, &dbg_buf_config) < 0) {
|
||||
@@ -986,10 +988,10 @@ static ssize_t macsec_dbg_buffer_show(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx Dbg Buffers:\n");
|
||||
dump_dbg_buffers(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_dbg_buffers(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx Dbg Buffers:\n");
|
||||
dump_dbg_buffers(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_dbg_buffers(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1050,7 +1052,7 @@ static ssize_t macsec_dbg_events_store(struct device *dev,
|
||||
}
|
||||
}
|
||||
dbg_buf_config.ctlr_sel = controller;
|
||||
dbg_buf_config.rw = DBG_TBL_WRITE;
|
||||
dbg_buf_config.rw = OSI_DBG_TBL_WRITE;
|
||||
|
||||
if (osi_macsec_dbg_events_config(osi_core, &dbg_buf_config) < 0) {
|
||||
dev_err(dev, "%s: Failed to config dbg trigger events\n", __func__);
|
||||
@@ -1098,19 +1100,19 @@ static ssize_t macsec_sci_lut_show(struct device *dev,
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
|
||||
for (i = 0; i <= SC_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_SC_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = CTLR_SEL_TX;
|
||||
lut_config.lut_sel = LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.table_config.ctlr_sel = OSI_CTLR_SEL_TX;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
dev_err(dev, "%s: Failed to read BYP LUT\n", __func__);
|
||||
dev_err(dev, "%s: Failed to read SCI LUT\n", __func__);
|
||||
goto exit;
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%d.\t", i);
|
||||
if ((lut_config.flags & LUT_FLAGS_ENTRY_VALID) !=
|
||||
LUT_FLAGS_ENTRY_VALID) {
|
||||
if ((lut_config.flags & OSI_LUT_FLAGS_ENTRY_VALID) !=
|
||||
OSI_LUT_FLAGS_ENTRY_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Invalid\n");
|
||||
memset(&lut_config, 0, sizeof(lut_config));
|
||||
continue;
|
||||
@@ -1120,10 +1122,10 @@ static ssize_t macsec_sci_lut_show(struct device *dev,
|
||||
an_valid = lut_config.sci_lut_out.an_valid;
|
||||
buf += scnprintf(buf, PAGE_SIZE, "AN3: %d AN2: %d "
|
||||
"AN1: %d AN0: %d ",
|
||||
an_valid & AN3_VALID ? 1 : 0,
|
||||
an_valid & AN2_VALID ? 1 : 0,
|
||||
an_valid & AN1_VALID ? 1 : 0,
|
||||
an_valid & AN0_VALID ? 1 : 0);
|
||||
an_valid & OSI_AN3_VALID ? 1 : 0,
|
||||
an_valid & OSI_AN2_VALID ? 1 : 0,
|
||||
an_valid & OSI_AN1_VALID ? 1 : 0,
|
||||
an_valid & OSI_AN0_VALID ? 1 : 0);
|
||||
buf += scnprintf(buf, PAGE_SIZE, "sc_index: %d\n",
|
||||
lut_config.sci_lut_out.sc_index);
|
||||
memset(&lut_config, 0, sizeof(lut_config));
|
||||
@@ -1132,19 +1134,19 @@ static ssize_t macsec_sci_lut_show(struct device *dev,
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
|
||||
for (i = 0; i <= SC_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_SC_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = CTLR_SEL_RX;
|
||||
lut_config.lut_sel = LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.table_config.ctlr_sel = OSI_CTLR_SEL_RX;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
dev_err(dev, "%s: Failed to read BYP LUT\n", __func__);
|
||||
goto exit;
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%d.\t", i);
|
||||
if ((lut_config.flags & LUT_FLAGS_ENTRY_VALID) !=
|
||||
LUT_FLAGS_ENTRY_VALID) {
|
||||
if ((lut_config.flags & OSI_LUT_FLAGS_ENTRY_VALID) !=
|
||||
OSI_LUT_FLAGS_ENTRY_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Invalid\n");
|
||||
memset(&lut_config, 0, sizeof(lut_config));
|
||||
continue;
|
||||
@@ -1190,9 +1192,9 @@ static ssize_t macsec_sci_lut_store(struct device *dev,
|
||||
struct ether_priv_data *pdata = netdev_priv(ndev);
|
||||
struct osi_core_priv_data *osi_core = pdata->osi_core;
|
||||
struct osi_macsec_lut_config lut_config;
|
||||
int an_valid[MAX_NUM_SA] = {0};
|
||||
int an_valid[OSI_MAX_NUM_SA] = {0};
|
||||
int ret, bufp;
|
||||
int temp[SCI_LEN];
|
||||
int temp[OSI_SCI_LEN];
|
||||
int i;
|
||||
int sc_index;
|
||||
|
||||
@@ -1217,25 +1219,25 @@ static ssize_t macsec_sci_lut_store(struct device *dev,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
lut_config.lut_sel = LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = LUT_WRITE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SCI;
|
||||
lut_config.table_config.rw = OSI_LUT_WRITE;
|
||||
/* Rest of LUT attributes are filled by parse_inputs() */
|
||||
if (lut_config.table_config.index > SC_LUT_MAX_INDEX) {
|
||||
if (lut_config.table_config.index > OSI_SC_LUT_MAX_INDEX) {
|
||||
dev_err(dev, "%s: Index can't be > %d\n", __func__,
|
||||
SC_LUT_MAX_INDEX);
|
||||
OSI_SC_LUT_MAX_INDEX);
|
||||
goto exit;
|
||||
}
|
||||
if (sc_index > SC_LUT_MAX_INDEX) {
|
||||
if (sc_index > OSI_SC_LUT_MAX_INDEX) {
|
||||
dev_err(dev, "%s: SC Index can't be > %d\n", __func__,
|
||||
SC_LUT_MAX_INDEX);
|
||||
OSI_SC_LUT_MAX_INDEX);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Configure the outputs */
|
||||
for (i = 0; i < SCI_LEN; i++) {
|
||||
for (i = 0; i < OSI_SCI_LEN; i++) {
|
||||
lut_config.sci_lut_out.sci[i] = (unsigned char)temp[i];
|
||||
}
|
||||
for (i = 0; i < MAX_NUM_SA; i++) {
|
||||
for (i = 0; i < OSI_MAX_NUM_SA; i++) {
|
||||
if (an_valid[i] > OSI_ENABLE) {
|
||||
dev_err(dev, "%s: an_valid bitmap error\n", __func__);
|
||||
goto exit;
|
||||
@@ -1246,7 +1248,7 @@ static ssize_t macsec_sci_lut_store(struct device *dev,
|
||||
lut_config.sci_lut_out.sc_index = sc_index;
|
||||
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
dev_err(dev, "%s: Failed to config BYP LUT\n", __func__);
|
||||
dev_err(dev, "%s: Failed to config SCI LUT\n", __func__);
|
||||
goto exit;
|
||||
} else {
|
||||
dev_err(dev, "%s: Added SCI LUT idx: %d", __func__,
|
||||
@@ -1273,10 +1275,10 @@ static void dump_kt(char **buf_p, unsigned short ctlr_sel,
|
||||
char *buf = *buf_p;
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i <= TABLE_INDEX_MAX; i++) {
|
||||
for (i = 0; i <= OSI_TABLE_INDEX_MAX; i++) {
|
||||
memset(&kt_config, OSI_NONE, sizeof(kt_config));
|
||||
kt_config.table_config.ctlr_sel = ctlr_sel;
|
||||
kt_config.table_config.rw = LUT_READ;
|
||||
kt_config.table_config.rw = OSI_LUT_READ;
|
||||
kt_config.table_config.index = i;
|
||||
if (osi_macsec_kt_config(osi_core, &kt_config, OSI_NULL) < 0) {
|
||||
pr_err("%s: Failed to read KT\n", __func__);
|
||||
@@ -1284,22 +1286,22 @@ static void dump_kt(char **buf_p, unsigned short ctlr_sel,
|
||||
return;
|
||||
} else {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%d.\t", i);
|
||||
if ((kt_config.flags & LUT_FLAGS_ENTRY_VALID) !=
|
||||
LUT_FLAGS_ENTRY_VALID) {
|
||||
if ((kt_config.flags & OSI_LUT_FLAGS_ENTRY_VALID) !=
|
||||
OSI_LUT_FLAGS_ENTRY_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Invalid\n");
|
||||
memset(&kt_config, 0, sizeof(kt_config));
|
||||
continue;
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "SAK: 0x");
|
||||
for (j = 0; j < KEY_LEN_256; j++) {
|
||||
for (j = 0; j < OSI_KEY_LEN_256; j++) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%02x",
|
||||
kt_config.entry.sak[KEY_LEN_256 - 1 - j]);
|
||||
kt_config.entry.sak[OSI_KEY_LEN_256 - 1 - j]);
|
||||
}
|
||||
buf += scnprintf(buf, PAGE_SIZE, " H: 0x");
|
||||
for (j = 0; j < KEY_LEN_128; j++) {
|
||||
for (j = 0; j < OSI_KEY_LEN_128; j++) {
|
||||
buf += scnprintf(buf, PAGE_SIZE, "%02x",
|
||||
kt_config.entry.h[KEY_LEN_128 - 1 - j]);
|
||||
kt_config.entry.h[OSI_KEY_LEN_128 - 1 - j]);
|
||||
}
|
||||
buf += scnprintf(buf, PAGE_SIZE, "\n");
|
||||
}
|
||||
@@ -1329,7 +1331,7 @@ static ssize_t macsec_tx_kt_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
dump_kt(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_kt(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1355,7 +1357,7 @@ static ssize_t macsec_rx_kt_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
dump_kt(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_kt(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1380,11 +1382,11 @@ static ssize_t macsec_kt_store(struct device *dev,
|
||||
struct ether_priv_data *pdata = netdev_priv(ndev);
|
||||
struct osi_core_priv_data *osi_core = pdata->osi_core;
|
||||
struct crypto_cipher *tfm;
|
||||
unsigned char hkey[KEY_LEN_128];
|
||||
unsigned char zeros[KEY_LEN_128] = {0};
|
||||
unsigned char hkey[OSI_KEY_LEN_128];
|
||||
unsigned char zeros[OSI_KEY_LEN_128] = {0};
|
||||
struct osi_macsec_kt_config kt_config = {0};
|
||||
int temp[KEY_LEN_256] = {0};
|
||||
unsigned char sak[KEY_LEN_256] = {0};
|
||||
int temp[OSI_KEY_LEN_256] = {0};
|
||||
unsigned char sak[OSI_KEY_LEN_256] = {0};
|
||||
|
||||
int valid, index, ctlr, key256bit;
|
||||
int i, ret, bufp = 0;
|
||||
@@ -1418,20 +1420,20 @@ static ssize_t macsec_kt_store(struct device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
if ((index > TABLE_INDEX_MAX) ||
|
||||
if ((index > OSI_TABLE_INDEX_MAX) ||
|
||||
(valid != OSI_ENABLE && valid != OSI_DISABLE) ||
|
||||
(ctlr != CTLR_SEL_TX && ctlr != CTLR_SEL_RX)) {
|
||||
(ctlr != OSI_CTLR_SEL_TX && ctlr != OSI_CTLR_SEL_RX)) {
|
||||
dev_err(pdata->dev, "%s: Invalid inputs\n", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
kt_config.table_config.ctlr_sel = ctlr;
|
||||
kt_config.table_config.rw = LUT_WRITE;
|
||||
kt_config.table_config.rw = OSI_LUT_WRITE;
|
||||
kt_config.table_config.index = index;
|
||||
|
||||
/* HKEY GENERATION */
|
||||
tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC);
|
||||
if (crypto_cipher_setkey(tfm, sak, KEY_LEN_128)) {
|
||||
if (crypto_cipher_setkey(tfm, sak, OSI_KEY_LEN_128)) {
|
||||
pr_err("%s: Failed to set cipher key for H generation",
|
||||
__func__);
|
||||
goto exit;
|
||||
@@ -1439,31 +1441,31 @@ static ssize_t macsec_kt_store(struct device *dev,
|
||||
crypto_cipher_encrypt_one(tfm, hkey, zeros);
|
||||
crypto_free_cipher(tfm);
|
||||
|
||||
for (i = 0; i < KEY_LEN_128; i++) {
|
||||
for (i = 0; i < OSI_KEY_LEN_128; i++) {
|
||||
sak[i] = (unsigned char)temp[i];
|
||||
}
|
||||
if (key256bit == 1) {
|
||||
for (i = KEY_LEN_128; i < KEY_LEN_256; i++) {
|
||||
for (i = OSI_KEY_LEN_128; i < OSI_KEY_LEN_256; i++) {
|
||||
sak[i] = (unsigned char)temp[i];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < KEY_LEN_128; i++) {
|
||||
kt_config.entry.h[i] = hkey[KEY_LEN_128 - 1 - i];
|
||||
for (i = 0; i < OSI_KEY_LEN_128; i++) {
|
||||
kt_config.entry.h[i] = hkey[OSI_KEY_LEN_128 - 1 - i];
|
||||
}
|
||||
|
||||
if (key256bit == 1) {
|
||||
for (i = 0; i < KEY_LEN_256; i++) {
|
||||
kt_config.entry.sak[i] = sak[KEY_LEN_256 - 1 - i];
|
||||
for (i = 0; i < OSI_KEY_LEN_256; i++) {
|
||||
kt_config.entry.sak[i] = sak[OSI_KEY_LEN_256 - 1 - i];
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < KEY_LEN_128; i++) {
|
||||
kt_config.entry.sak[i] = sak[KEY_LEN_128 - 1 - i];
|
||||
for (i = 0; i < OSI_KEY_LEN_128; i++) {
|
||||
kt_config.entry.sak[i] = sak[OSI_KEY_LEN_128 - 1 - i];
|
||||
}
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
kt_config.flags |= LUT_FLAGS_ENTRY_VALID;
|
||||
kt_config.flags |= OSI_LUT_FLAGS_ENTRY_VALID;
|
||||
}
|
||||
|
||||
ret = osi_macsec_kt_config(osi_core, &kt_config, OSI_NULL);
|
||||
@@ -1508,12 +1510,12 @@ static void dump_sc_state_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
char *buf = *buf_p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= SC_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_SC_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = ctlr_sel;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
lut_config.lut_sel = LUT_SEL_SC_STATE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SC_STATE;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
pr_err("%s: Failed to read BYP LUT\n", __func__);
|
||||
*buf_p = buf;
|
||||
@@ -1549,10 +1551,10 @@ static ssize_t macsec_sc_state_lut_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
dump_sc_state_lut(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_sc_state_lut(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
dump_sc_state_lut(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_sc_state_lut(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1589,18 +1591,17 @@ static ssize_t macsec_sc_state_lut_store(struct device *dev,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if ((index > SC_LUT_MAX_INDEX) ||
|
||||
(ctlr != CTLR_SEL_TX && ctlr != CTLR_SEL_RX) ||
|
||||
(curr_an > CURR_AN_MAX)) {
|
||||
if ((index > OSI_SC_LUT_MAX_INDEX) ||
|
||||
(ctlr != OSI_CTLR_SEL_TX && ctlr != OSI_CTLR_SEL_RX) ||
|
||||
(curr_an > OSI_CURR_AN_MAX)) {
|
||||
dev_err(pdata->dev, "%s:Invalid inputs", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
//TODO - need to lock. Since lut_status is updated.
|
||||
lut_config.table_config.ctlr_sel = ctlr;
|
||||
lut_config.table_config.rw = LUT_WRITE;
|
||||
lut_config.table_config.rw = OSI_LUT_WRITE;
|
||||
lut_config.table_config.index = index;
|
||||
lut_config.lut_sel = LUT_SEL_SC_STATE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SC_STATE;
|
||||
lut_config.sc_state_out.curr_an = curr_an;
|
||||
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
@@ -1630,21 +1631,21 @@ static void dump_sa_state_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
char *buf = *buf_p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= SA_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_SA_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = ctlr_sel;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
lut_config.lut_sel = LUT_SEL_SA_STATE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SA_STATE;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
pr_err("%s: Failed to read BYP LUT\n", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
switch (ctlr_sel) {
|
||||
case CTLR_SEL_TX:
|
||||
if ((lut_config.flags & LUT_FLAGS_ENTRY_VALID) ==
|
||||
LUT_FLAGS_ENTRY_VALID) {
|
||||
case OSI_CTLR_SEL_TX:
|
||||
if ((lut_config.flags & OSI_LUT_FLAGS_ENTRY_VALID) ==
|
||||
OSI_LUT_FLAGS_ENTRY_VALID) {
|
||||
buf += scnprintf(buf, PAGE_SIZE,
|
||||
"%d.\tnext_pn: %d\n", i,
|
||||
lut_config.sa_state_out.next_pn);
|
||||
@@ -1653,7 +1654,7 @@ static void dump_sa_state_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
"%d.\tInvalid\n", i);
|
||||
}
|
||||
break;
|
||||
case CTLR_SEL_RX:
|
||||
case OSI_CTLR_SEL_RX:
|
||||
buf += scnprintf(buf, PAGE_SIZE,
|
||||
"%d.\tnext_pn: %d lowest_pn: %d\n", i,
|
||||
lut_config.sa_state_out.next_pn,
|
||||
@@ -1690,10 +1691,10 @@ static ssize_t macsec_sa_state_lut_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
dump_sa_state_lut(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_sa_state_lut(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
dump_sa_state_lut(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_sa_state_lut(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1731,20 +1732,19 @@ static ssize_t macsec_sa_state_lut_store(struct device *dev,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if ((index > SA_LUT_MAX_INDEX) ||
|
||||
(ctlr != CTLR_SEL_TX && ctlr != CTLR_SEL_RX)) {
|
||||
if ((index > OSI_SA_LUT_MAX_INDEX) ||
|
||||
(ctlr != OSI_CTLR_SEL_TX && ctlr != OSI_CTLR_SEL_RX)) {
|
||||
dev_err(pdata->dev, "%s:Invalid inputs", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
//TODO - need to lock. Since lut_status is updated.
|
||||
lut_config.flags = LUT_FLAGS_ENTRY_VALID;
|
||||
lut_config.flags = OSI_LUT_FLAGS_ENTRY_VALID;
|
||||
lut_config.table_config.ctlr_sel = ctlr;
|
||||
lut_config.table_config.rw = LUT_WRITE;
|
||||
lut_config.table_config.rw = OSI_LUT_WRITE;
|
||||
lut_config.table_config.index = index;
|
||||
lut_config.sa_state_out.next_pn = next_pn;
|
||||
lut_config.sa_state_out.lowest_pn = lowest_pn;
|
||||
lut_config.lut_sel = LUT_SEL_SA_STATE;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SA_STATE;
|
||||
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
dev_err(dev, "%s: Failed to config SA STATE LUT\n", __func__);
|
||||
@@ -1774,19 +1774,19 @@ static void dump_sc_param_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
char *buf = *buf_p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= SC_LUT_MAX_INDEX; i++) {
|
||||
for (i = 0; i <= OSI_SC_LUT_MAX_INDEX; i++) {
|
||||
memset(&lut_config, OSI_NONE, sizeof(lut_config));
|
||||
lut_config.table_config.ctlr_sel = ctlr_sel;
|
||||
lut_config.table_config.rw = LUT_READ;
|
||||
lut_config.table_config.rw = OSI_LUT_READ;
|
||||
lut_config.table_config.index = i;
|
||||
lut_config.lut_sel = LUT_SEL_SC_PARAM;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SC_PARAM;
|
||||
if (osi_macsec_lut_config(osi_core, &lut_config) < 0) {
|
||||
pr_err("%s: Failed to read BYP LUT\n", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
switch (ctlr_sel) {
|
||||
case CTLR_SEL_TX:
|
||||
case OSI_CTLR_SEL_TX:
|
||||
buf += scnprintf(buf, PAGE_SIZE,
|
||||
"%d.\tkey_idx_start: %d pn_max: %u "
|
||||
"pn_threshold: %u tci %01x vlan_clear %01x sci: " SCI_FMT,
|
||||
@@ -1805,7 +1805,7 @@ static void dump_sc_param_lut(char **buf_p, unsigned short ctlr_sel,
|
||||
lut_config.sc_param_out.sci[0]);
|
||||
buf += scnprintf(buf, PAGE_SIZE, "\n");
|
||||
break;
|
||||
case CTLR_SEL_RX:
|
||||
case OSI_CTLR_SEL_RX:
|
||||
buf += scnprintf(buf, PAGE_SIZE,
|
||||
"%d.\tkey_idx_start: %d pn_max: %u pn_window: %u\n", i,
|
||||
lut_config.sc_param_out.key_index_start,
|
||||
@@ -1843,10 +1843,10 @@ static ssize_t macsec_sc_param_lut_show(struct device *dev,
|
||||
}
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Tx:\n");
|
||||
dump_sc_param_lut(&buf, CTLR_SEL_TX, osi_core);
|
||||
dump_sc_param_lut(&buf, OSI_CTLR_SEL_TX, osi_core);
|
||||
|
||||
buf += scnprintf(buf, PAGE_SIZE, "Rx:\n");
|
||||
dump_sc_param_lut(&buf, CTLR_SEL_RX, osi_core);
|
||||
dump_sc_param_lut(&buf, OSI_CTLR_SEL_RX, osi_core);
|
||||
|
||||
return (buf - start);
|
||||
}
|
||||
@@ -1873,7 +1873,7 @@ static ssize_t macsec_sc_param_lut_store(struct device *dev,
|
||||
struct osi_macsec_lut_config lut_config = {0};
|
||||
int index, ctlr;
|
||||
int ret, i, tci, vlan_clear;
|
||||
int sci[SCI_LEN] = {0};
|
||||
int sci[OSI_SCI_LEN] = {0};
|
||||
unsigned int pn_max, pn_threshold, key_index_start, pn_window;
|
||||
|
||||
if (!netif_running(ndev)) {
|
||||
@@ -1892,26 +1892,25 @@ static ssize_t macsec_sc_param_lut_store(struct device *dev,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if ((index > SC_LUT_MAX_INDEX) ||
|
||||
(ctlr != CTLR_SEL_TX && ctlr != CTLR_SEL_RX) ||
|
||||
(key_index_start > KEY_INDEX_MAX) ||
|
||||
if ((index > OSI_SC_LUT_MAX_INDEX) ||
|
||||
(ctlr != OSI_CTLR_SEL_TX && ctlr != OSI_CTLR_SEL_RX) ||
|
||||
(key_index_start > OSI_KEY_INDEX_MAX) ||
|
||||
(pn_threshold > pn_max)) {
|
||||
dev_err(pdata->dev, "%s:Invalid inputs", __func__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
//TODO - need to lock. Since lut_status is updated.
|
||||
lut_config.table_config.ctlr_sel = ctlr;
|
||||
lut_config.table_config.rw = LUT_WRITE;
|
||||
lut_config.table_config.rw = OSI_LUT_WRITE;
|
||||
lut_config.table_config.index = index;
|
||||
lut_config.lut_sel = LUT_SEL_SC_PARAM;
|
||||
lut_config.lut_sel = OSI_LUT_SEL_SC_PARAM;
|
||||
lut_config.sc_param_out.key_index_start = key_index_start;
|
||||
lut_config.sc_param_out.pn_max = pn_max;
|
||||
lut_config.sc_param_out.pn_threshold = pn_threshold;
|
||||
lut_config.sc_param_out.pn_window = pn_window;
|
||||
lut_config.sc_param_out.tci = (unsigned char)tci;
|
||||
lut_config.sc_param_out.vlan_in_clear = (unsigned char)vlan_clear;
|
||||
for (i = 0; i < SCI_LEN; i++) {
|
||||
for (i = 0; i < OSI_SCI_LEN; i++) {
|
||||
lut_config.sc_param_out.sci[i] = (unsigned char)sci[i];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user