get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/128547/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 128547,
    "url": "http://patches.dpdk.org/api/patches/128547/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230613071614.2259604-14-gakhil@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230613071614.2259604-14-gakhil@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230613071614.2259604-14-gakhil@marvell.com",
    "date": "2023-06-13T07:16:12",
    "name": "[v3,13/15] net/cnxk: create/destroy MACsec SC/SA",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "e6b711c3e42b877b014eac68394bc3d1b2dd0bb2",
    "submitter": {
        "id": 2094,
        "url": "http://patches.dpdk.org/api/people/2094/?format=api",
        "name": "Akhil Goyal",
        "email": "gakhil@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230613071614.2259604-14-gakhil@marvell.com/mbox/",
    "series": [
        {
            "id": 28472,
            "url": "http://patches.dpdk.org/api/series/28472/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=28472",
            "date": "2023-06-13T07:15:59",
            "name": "net/cnxk: add MACsec support",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/28472/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/128547/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/128547/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 4EFEB42CA0;\n\tTue, 13 Jun 2023 09:18:16 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 0B6FD42D74;\n\tTue, 13 Jun 2023 09:17:15 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 856C742D70\n for <dev@dpdk.org>; Tue, 13 Jun 2023 09:17:13 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 35D56E6q005620; Tue, 13 Jun 2023 00:17:12 -0700",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3r650235h5-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Tue, 13 Jun 2023 00:17:12 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Tue, 13 Jun 2023 00:17:10 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Tue, 13 Jun 2023 00:17:10 -0700",
            "from localhost.localdomain (unknown [10.28.36.102])\n by maili.marvell.com (Postfix) with ESMTP id 1C7435E6866;\n Tue, 13 Jun 2023 00:17:07 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=yBzz8Ap6aQ/hQRfsDrv5YvP4uoJiN4MFJcW+zvHQ7Ow=;\n b=ajeyZr1ZSjuggOn/Pft64mfgmlR+MdafL5Jauel7B6LmdMzTTrVEQ0CKDKvGgliCAxWs\n mz41wtmgeL0WX0t1nYghLg8GJVkzFOZs8csPa8Gn/w5wPl/c2NRFTjyEtOoy6bsgRc6A\n jL16s+pP3W7mHYZyWllBWWkoZFmudA4ghXaKy1E15pQbuBHA51b1/yy2Ia7ZaaQcRWam\n HZcAkULdy/MSWhx4LvmeUxYrsUOp/2qiQNNV04thadAQfEC6tqmDRm2jjD9XdqsqhnNU\n CpLRzBG7BmwPtFDr2QHoEfjsXTCx5DccC7mvA3lDc30yCgaIMNwwsCGd2C67La2Hsh2A rw==",
        "From": "Akhil Goyal <gakhil@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas@monjalon.net>, <david.marchand@redhat.com>,\n <vattunuru@marvell.com>, <jerinj@marvell.com>, <adwivedi@marvell.com>,\n <ndabilpuram@marvell.com>, Akhil Goyal <gakhil@marvell.com>",
        "Subject": "[PATCH v3 13/15] net/cnxk: create/destroy MACsec SC/SA",
        "Date": "Tue, 13 Jun 2023 12:46:12 +0530",
        "Message-ID": "<20230613071614.2259604-14-gakhil@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230613071614.2259604-1-gakhil@marvell.com>",
        "References": "<20230607152819.226838-1-gakhil@marvell.com>\n <20230613071614.2259604-1-gakhil@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "20o_OXyleVYbAFRXDmnH9BA9vaM6Wy1J",
        "X-Proofpoint-GUID": "20o_OXyleVYbAFRXDmnH9BA9vaM6Wy1J",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26\n definitions=2023-06-13_04,2023-06-12_02,2023-05-22_02",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Added support to create/destroy MACsec SA and SC.\n\nSigned-off-by: Akhil Goyal <gakhil@marvell.com>\n---\n drivers/net/cnxk/cn10k_ethdev_sec.c |   9 +-\n drivers/net/cnxk/cnxk_ethdev_mcs.c  | 250 ++++++++++++++++++++++++++++\n drivers/net/cnxk/cnxk_ethdev_mcs.h  |  16 ++\n 3 files changed, 271 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c\nindex 8dd2c8b7a5..1db29a0b55 100644\n--- a/drivers/net/cnxk/cn10k_ethdev_sec.c\n+++ b/drivers/net/cnxk/cn10k_ethdev_sec.c\n@@ -9,6 +9,7 @@\n #include <rte_pmd_cnxk.h>\n \n #include <cn10k_ethdev.h>\n+#include <cnxk_ethdev_mcs.h>\n #include <cnxk_security.h>\n #include <roc_priv.h>\n \n@@ -1090,10 +1091,10 @@ cn10k_eth_sec_ops_override(void)\n \tinit_once = 1;\n \n \t/* Update platform specific ops */\n-\tcnxk_eth_sec_ops.macsec_sa_create = NULL;\n-\tcnxk_eth_sec_ops.macsec_sc_create = NULL;\n-\tcnxk_eth_sec_ops.macsec_sa_destroy = NULL;\n-\tcnxk_eth_sec_ops.macsec_sc_destroy = NULL;\n+\tcnxk_eth_sec_ops.macsec_sa_create = cnxk_eth_macsec_sa_create;\n+\tcnxk_eth_sec_ops.macsec_sc_create = cnxk_eth_macsec_sc_create;\n+\tcnxk_eth_sec_ops.macsec_sa_destroy = cnxk_eth_macsec_sa_destroy;\n+\tcnxk_eth_sec_ops.macsec_sc_destroy = cnxk_eth_macsec_sc_destroy;\n \tcnxk_eth_sec_ops.session_create = cn10k_eth_sec_session_create;\n \tcnxk_eth_sec_ops.session_destroy = cn10k_eth_sec_session_destroy;\n \tcnxk_eth_sec_ops.capabilities_get = cn10k_eth_sec_capabilities_get;\ndiff --git a/drivers/net/cnxk/cnxk_ethdev_mcs.c b/drivers/net/cnxk/cnxk_ethdev_mcs.c\nindex b0205f45c5..89876abc57 100644\n--- a/drivers/net/cnxk/cnxk_ethdev_mcs.c\n+++ b/drivers/net/cnxk/cnxk_ethdev_mcs.c\n@@ -6,6 +6,256 @@\n #include <cnxk_ethdev_mcs.h>\n #include <roc_mcs.h>\n \n+static int\n+mcs_resource_alloc(struct cnxk_mcs_dev *mcs_dev, enum mcs_direction dir, uint8_t rsrc_id[],\n+\t\t   uint8_t rsrc_cnt, enum cnxk_mcs_rsrc_type type)\n+{\n+\tstruct roc_mcs_alloc_rsrc_req req = {0};\n+\tstruct roc_mcs_alloc_rsrc_rsp rsp = {0};\n+\tint i;\n+\n+\treq.rsrc_type = type;\n+\treq.rsrc_cnt = rsrc_cnt;\n+\treq.dir = dir;\n+\n+\tif (roc_mcs_rsrc_alloc(mcs_dev->mdev, &req, &rsp)) {\n+\t\tplt_err(\"Cannot allocate mcs resource.\");\n+\t\treturn -1;\n+\t}\n+\n+\tfor (i = 0; i < rsrc_cnt; i++) {\n+\t\tswitch (rsp.rsrc_type) {\n+\t\tcase CNXK_MCS_RSRC_TYPE_FLOWID:\n+\t\t\trsrc_id[i] = rsp.flow_ids[i];\n+\t\t\tbreak;\n+\t\tcase CNXK_MCS_RSRC_TYPE_SECY:\n+\t\t\trsrc_id[i] = rsp.secy_ids[i];\n+\t\t\tbreak;\n+\t\tcase CNXK_MCS_RSRC_TYPE_SC:\n+\t\t\trsrc_id[i] = rsp.sc_ids[i];\n+\t\t\tbreak;\n+\t\tcase CNXK_MCS_RSRC_TYPE_SA:\n+\t\t\trsrc_id[i] = rsp.sa_ids[i];\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tplt_err(\"Invalid mcs resource allocated.\");\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\treturn 0;\n+}\n+\n+int\n+cnxk_eth_macsec_sa_create(void *device, struct rte_security_macsec_sa *conf)\n+{\n+\tstruct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device;\n+\tstruct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);\n+\tuint8_t salt[RTE_SECURITY_MACSEC_SALT_LEN] = {0};\n+\tstruct roc_mcs_pn_table_write_req pn_req = {0};\n+\tuint8_t hash_key_rev[CNXK_MACSEC_HASH_KEY] = {0};\n+\tuint8_t hash_key[CNXK_MACSEC_HASH_KEY] = {0};\n+\tstruct cnxk_mcs_dev *mcs_dev = dev->mcs_dev;\n+\tstruct roc_mcs_sa_plcy_write_req req = {0};\n+\tuint8_t ciph_key[32] = {0};\n+\tenum mcs_direction dir;\n+\tuint8_t sa_id = 0;\n+\tint i, ret = 0;\n+\n+\tif (!roc_feature_nix_has_macsec())\n+\t\treturn -ENOTSUP;\n+\n+\tdir = (conf->dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\tret = mcs_resource_alloc(mcs_dev, dir, &sa_id, 1, CNXK_MCS_RSRC_TYPE_SA);\n+\tif (ret) {\n+\t\tplt_err(\"Failed to allocate SA id.\");\n+\t\treturn -ENOMEM;\n+\t}\n+\treq.sa_index[0] = sa_id;\n+\treq.sa_cnt = 1;\n+\treq.dir = dir;\n+\n+\tif (conf->key.length != 16 && conf->key.length != 32)\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < conf->key.length; i++)\n+\t\tciph_key[i] = conf->key.data[conf->key.length - 1 - i];\n+\n+\tmemcpy(&req.plcy[0][0], ciph_key, conf->key.length);\n+\n+\troc_aes_hash_key_derive(conf->key.data, conf->key.length, hash_key);\n+\tfor (i = 0; i < CNXK_MACSEC_HASH_KEY; i++)\n+\t\thash_key_rev[i] = hash_key[CNXK_MACSEC_HASH_KEY - 1 - i];\n+\n+\tmemcpy(&req.plcy[0][4], hash_key_rev, CNXK_MACSEC_HASH_KEY);\n+\n+\tfor (i = 0; i < RTE_SECURITY_MACSEC_SALT_LEN; i++)\n+\t\tsalt[i] = conf->salt[RTE_SECURITY_MACSEC_SALT_LEN - 1 - i];\n+\tmemcpy(&req.plcy[0][6], salt, RTE_SECURITY_MACSEC_SALT_LEN);\n+\n+\treq.plcy[0][7] |= (uint64_t)conf->ssci << 32;\n+\treq.plcy[0][8] = (conf->dir == RTE_SECURITY_MACSEC_DIR_TX) ? (conf->an & 0x3) : 0;\n+\n+\tret = roc_mcs_sa_policy_write(mcs_dev->mdev, &req);\n+\tif (ret) {\n+\t\tplt_err(\"Failed to write SA policy.\");\n+\t\treturn -EINVAL;\n+\t}\n+\tpn_req.next_pn = ((uint64_t)conf->xpn << 32) | rte_be_to_cpu_32(conf->next_pn);\n+\tpn_req.pn_id = sa_id;\n+\tpn_req.dir = dir;\n+\n+\tret = roc_mcs_pn_table_write(mcs_dev->mdev, &pn_req);\n+\tif (ret) {\n+\t\tplt_err(\"Failed to write PN table.\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn sa_id;\n+}\n+\n+int\n+cnxk_eth_macsec_sa_destroy(void *device, uint16_t sa_id, enum rte_security_macsec_direction dir)\n+{\n+\tstruct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device;\n+\tstruct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);\n+\tstruct cnxk_mcs_dev *mcs_dev = dev->mcs_dev;\n+\tstruct roc_mcs_clear_stats stats_req = {0};\n+\tstruct roc_mcs_free_rsrc_req req = {0};\n+\tint ret = 0;\n+\n+\tif (!roc_feature_nix_has_macsec())\n+\t\treturn -ENOTSUP;\n+\n+\tstats_req.type = CNXK_MCS_RSRC_TYPE_SA;\n+\tstats_req.id = sa_id;\n+\tstats_req.dir = (dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\tstats_req.all = 0;\n+\n+\tret = roc_mcs_stats_clear(mcs_dev->mdev, &stats_req);\n+\tif (ret)\n+\t\tplt_err(\"Failed to clear stats for SA id %u, dir %u.\", sa_id, dir);\n+\n+\treq.rsrc_id = sa_id;\n+\treq.dir = (dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\treq.rsrc_type = CNXK_MCS_RSRC_TYPE_SA;\n+\n+\tret = roc_mcs_rsrc_free(mcs_dev->mdev, &req);\n+\tif (ret)\n+\t\tplt_err(\"Failed to free SA id %u, dir %u.\", sa_id, dir);\n+\n+\treturn ret;\n+}\n+\n+int\n+cnxk_eth_macsec_sc_create(void *device, struct rte_security_macsec_sc *conf)\n+{\n+\tstruct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device;\n+\tstruct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);\n+\tstruct roc_mcs_set_pn_threshold pn_thresh = {0};\n+\tstruct cnxk_mcs_dev *mcs_dev = dev->mcs_dev;\n+\tenum mcs_direction dir;\n+\tuint8_t sc_id = 0;\n+\tint i, ret = 0;\n+\n+\tif (!roc_feature_nix_has_macsec())\n+\t\treturn -ENOTSUP;\n+\n+\tdir = (conf->dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\tret = mcs_resource_alloc(mcs_dev, dir, &sc_id, 1, CNXK_MCS_RSRC_TYPE_SC);\n+\tif (ret) {\n+\t\tplt_err(\"Failed to allocate SC id.\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tif (conf->dir == RTE_SECURITY_MACSEC_DIR_TX) {\n+\t\tstruct roc_mcs_tx_sc_sa_map req = {0};\n+\n+\t\treq.sa_index0 = conf->sc_tx.sa_id & 0xFF;\n+\t\treq.sa_index1 = conf->sc_tx.sa_id_rekey & 0xFF;\n+\t\treq.rekey_ena = conf->sc_tx.re_key_en;\n+\t\treq.sa_index0_vld = conf->sc_tx.active;\n+\t\treq.sa_index1_vld = conf->sc_tx.re_key_en && conf->sc_tx.active;\n+\t\treq.tx_sa_active = 0;\n+\t\treq.sectag_sci = conf->sc_tx.sci;\n+\t\treq.sc_id = sc_id;\n+\n+\t\tret = roc_mcs_tx_sc_sa_map_write(mcs_dev->mdev, &req);\n+\t\tif (ret) {\n+\t\t\tplt_err(\"Failed to map TX SC-SA\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tpn_thresh.xpn = conf->sc_tx.is_xpn;\n+\t} else {\n+\t\tfor (i = 0; i < RTE_SECURITY_MACSEC_NUM_AN; i++) {\n+\t\t\tstruct roc_mcs_rx_sc_sa_map req = {0};\n+\n+\t\t\treq.sa_index = conf->sc_rx.sa_id[i] & 0x7F;\n+\t\t\treq.sc_id = sc_id;\n+\t\t\treq.an = i & 0x3;\n+\t\t\treq.sa_in_use = 0;\n+\t\t\t/* Clearing the sa_in_use bit automatically clears\n+\t\t\t * the corresponding pn_thresh_reached bit\n+\t\t\t */\n+\t\t\tret = roc_mcs_rx_sc_sa_map_write(mcs_dev->mdev, &req);\n+\t\t\tif (ret) {\n+\t\t\t\tplt_err(\"Failed to map RX SC-SA\");\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\treq.sa_in_use = conf->sc_rx.sa_in_use[i];\n+\t\t\tret = roc_mcs_rx_sc_sa_map_write(mcs_dev->mdev, &req);\n+\t\t\tif (ret) {\n+\t\t\t\tplt_err(\"Failed to map RX SC-SA\");\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\t\tpn_thresh.xpn = conf->sc_rx.is_xpn;\n+\t}\n+\n+\tpn_thresh.threshold = conf->pn_threshold;\n+\tpn_thresh.dir = dir;\n+\n+\tret = roc_mcs_pn_threshold_set(mcs_dev->mdev, &pn_thresh);\n+\tif (ret) {\n+\t\tplt_err(\"Failed to write PN threshold.\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn sc_id;\n+}\n+\n+int\n+cnxk_eth_macsec_sc_destroy(void *device, uint16_t sc_id, enum rte_security_macsec_direction dir)\n+{\n+\tstruct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device;\n+\tstruct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);\n+\tstruct cnxk_mcs_dev *mcs_dev = dev->mcs_dev;\n+\tstruct roc_mcs_clear_stats stats_req = {0};\n+\tstruct roc_mcs_free_rsrc_req req = {0};\n+\tint ret = 0;\n+\n+\tif (!roc_feature_nix_has_macsec())\n+\t\treturn -ENOTSUP;\n+\n+\tstats_req.type = CNXK_MCS_RSRC_TYPE_SC;\n+\tstats_req.id = sc_id;\n+\tstats_req.dir = (dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\tstats_req.all = 0;\n+\n+\tret = roc_mcs_stats_clear(mcs_dev->mdev, &stats_req);\n+\tif (ret)\n+\t\tplt_err(\"Failed to clear stats for SC id %u, dir %u.\", sc_id, dir);\n+\n+\treq.rsrc_id = sc_id;\n+\treq.dir = (dir == RTE_SECURITY_MACSEC_DIR_TX) ? MCS_TX : MCS_RX;\n+\treq.rsrc_type = CNXK_MCS_RSRC_TYPE_SC;\n+\n+\tret = roc_mcs_rsrc_free(mcs_dev->mdev, &req);\n+\tif (ret)\n+\t\tplt_err(\"Failed to free SC id.\");\n+\n+\treturn ret;\n+}\n+\n static int\n cnxk_mcs_event_cb(void *userdata, struct roc_mcs_event_desc *desc, void *cb_arg)\n {\ndiff --git a/drivers/net/cnxk/cnxk_ethdev_mcs.h b/drivers/net/cnxk/cnxk_ethdev_mcs.h\nindex 762c299fb8..68c6493169 100644\n--- a/drivers/net/cnxk/cnxk_ethdev_mcs.h\n+++ b/drivers/net/cnxk/cnxk_ethdev_mcs.h\n@@ -13,6 +13,14 @@ struct cnxk_mcs_dev {\n \tuint8_t idx;\n };\n \n+enum cnxk_mcs_rsrc_type {\n+\tCNXK_MCS_RSRC_TYPE_FLOWID,\n+\tCNXK_MCS_RSRC_TYPE_SECY,\n+\tCNXK_MCS_RSRC_TYPE_SC,\n+\tCNXK_MCS_RSRC_TYPE_SA,\n+\tCNXK_MCS_RSRC_TYPE_PORT,\n+};\n+\n struct cnxk_mcs_event_data {\n \t/* Valid for below events\n \t * - ROC_MCS_EVENT_RX_SA_PN_SOFT_EXP\n@@ -59,3 +67,11 @@ struct cnxk_mcs_event_desc {\n \tenum roc_mcs_event_subtype subtype;\n \tstruct cnxk_mcs_event_data metadata;\n };\n+\n+int cnxk_eth_macsec_sa_create(void *device, struct rte_security_macsec_sa *conf);\n+int cnxk_eth_macsec_sc_create(void *device, struct rte_security_macsec_sc *conf);\n+\n+int cnxk_eth_macsec_sa_destroy(void *device, uint16_t sa_id,\n+\t\t\t       enum rte_security_macsec_direction dir);\n+int cnxk_eth_macsec_sc_destroy(void *device, uint16_t sc_id,\n+\t\t\t       enum rte_security_macsec_direction dir);\n",
    "prefixes": [
        "v3",
        "13/15"
    ]
}