get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 52880,
    "url": "http://patches.dpdk.org/api/patches/52880/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/75675c055efff4b0ea26bf32049cabd98c252c8f.1555515863.git.igor.russkikh@aquantia.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": "<75675c055efff4b0ea26bf32049cabd98c252c8f.1555515863.git.igor.russkikh@aquantia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/75675c055efff4b0ea26bf32049cabd98c252c8f.1555515863.git.igor.russkikh@aquantia.com",
    "date": "2019-04-17T15:45:30",
    "name": "[v2,2/7] net/atlantic: enable macsec configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "3f1b020c8c5792ea29466841996b5e24410987e9",
    "submitter": {
        "id": 1124,
        "url": "http://patches.dpdk.org/api/people/1124/?format=api",
        "name": "Igor Russkikh",
        "email": "igor.russkikh@aquantia.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/75675c055efff4b0ea26bf32049cabd98c252c8f.1555515863.git.igor.russkikh@aquantia.com/mbox/",
    "series": [
        {
            "id": 4355,
            "url": "http://patches.dpdk.org/api/series/4355/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4355",
            "date": "2019-04-17T15:45:25",
            "name": "add MACSEC hw offload to atlantic PMD",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/4355/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/52880/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/52880/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E47351B758;\n\tWed, 17 Apr 2019 17:45:35 +0200 (CEST)",
            "from NAM05-CO1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr720087.outbound.protection.outlook.com [40.107.72.87])\n\tby dpdk.org (Postfix) with ESMTP id BF2821B73C\n\tfor <dev@dpdk.org>; Wed, 17 Apr 2019 17:45:33 +0200 (CEST)",
            "from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by\n\tDM6PR11MB3466.namprd11.prod.outlook.com (20.176.123.151) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1792.19; Wed, 17 Apr 2019 15:45:30 +0000",
            "from DM6PR11MB3625.namprd11.prod.outlook.com\n\t([fe80::f035:2c20:5a61:7653]) by\n\tDM6PR11MB3625.namprd11.prod.outlook.com\n\t([fe80::f035:2c20:5a61:7653%3]) with mapi id 15.20.1813.011;\n\tWed, 17 Apr 2019 15:45:30 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=nksbjvBauA0gTfCl1rbWL94FpDS4sPVvYht+d211IVE=;\n\tb=jQhlX2nQHfvHqDd+gARloWK5LewRSOLok+ZlLQ4qjGywHVxjwm+RtlvGGeffk+nX5+OCiXXLRWwfKWVuoIaxogp1ajLpiRB2xwsC2qTVnT8k5fL5AvBYBqLRInhsMAZKctDwEOnNqn/U5QEmALdXymeNALR6B49cEfgn2OJRDl4=",
        "From": "Igor Russkikh <Igor.Russkikh@aquantia.com>",
        "To": "\"dev@dpdk.org\" <dev@dpdk.org>",
        "CC": "\"ferruh.yigit@intel.com\" <ferruh.yigit@intel.com>, \"thomas@monjalon.net\"\n\t<thomas@monjalon.net>, \"arybchenko@solarflare.com\"\n\t<arybchenko@solarflare.com>, \"konstantin.ananyev@intel.com\"\n\t<konstantin.ananyev@intel.com>,\n\tIgor Russkikh <Igor.Russkikh@aquantia.com>, \n\tPavel Belous <Pavel.Belous@aquantia.com>",
        "Thread-Topic": "[PATCH v2 2/7] net/atlantic: enable macsec configuration",
        "Thread-Index": "AQHU9TSWmJUDzQe65EupVNTWzaYyAg==",
        "Date": "Wed, 17 Apr 2019 15:45:30 +0000",
        "Message-ID": "<75675c055efff4b0ea26bf32049cabd98c252c8f.1555515863.git.igor.russkikh@aquantia.com>",
        "References": "<cover.1555515863.git.igor.russkikh@aquantia.com>",
        "In-Reply-To": "<cover.1555515863.git.igor.russkikh@aquantia.com>",
        "Accept-Language": "en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "BYAPR07CA0027.namprd07.prod.outlook.com\n\t(2603:10b6:a02:bc::40) To DM6PR11MB3625.namprd11.prod.outlook.com\n\t(2603:10b6:5:13a::21)",
        "authentication-results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Igor.Russkikh@aquantia.com; ",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-mailer": "git-send-email 2.17.1",
        "x-originating-ip": "[95.79.108.179]",
        "x-ms-publictraffictype": "Email",
        "x-ms-office365-filtering-correlation-id": "c8b652f3-b3c9-4078-6fd0-08d6c34bb884",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600140)(711020)(4605104)(2017052603328)(7193020);\n\tSRVR:DM6PR11MB3466; ",
        "x-ms-traffictypediagnostic": "DM6PR11MB3466:",
        "x-microsoft-antispam-prvs": "<DM6PR11MB346654A5281ED9E8F17652B098250@DM6PR11MB3466.namprd11.prod.outlook.com>",
        "x-forefront-prvs": "0010D93EFE",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(366004)(376002)(346002)(396003)(39850400004)(136003)(199004)(189003)(118296001)(2616005)(5660300002)(76176011)(71190400001)(256004)(476003)(6486002)(71200400001)(97736004)(6436002)(11346002)(446003)(14444005)(486006)(44832011)(26005)(186003)(2501003)(52116002)(6506007)(66066001)(4326008)(102836004)(478600001)(86362001)(386003)(25786009)(6512007)(68736007)(72206003)(5640700003)(107886003)(8936002)(2351001)(106356001)(2906002)(6116002)(8676002)(1730700003)(36756003)(7736002)(54906003)(53936002)(3846002)(14454004)(305945005)(99286004)(50226002)(105586002)(316002)(81156014)(81166006)(6916009);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3466;\n\tH:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "received-spf": "None (protection.outlook.com: aquantia.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam-message-info": "qjLiEoRi4BwnQ6qecE5Qup45XLD4uNUCXCoHZzuXsQnSonEauKmnwt88mTq/acIamIXD0cD4/LhtNIwQnfsT99o98bdzLncMDr261GtYvLPCpQ81DuvByqCqHN5W4z4K9h4ka7jqobLktKYyDo32HS/qvC4cGlFRMrcyZOGk7ZMxg7wN4zTsrPHkRQxUlS4fijJd1crr0CpF7TL/KjA5fy7R0yrxq1Z5M0CufklzL2SUTLlbc3Q6971w7F7OSsV2ZK3bM9lIRjBTErRF8FWH46DLaTB9BRvMGdFd+xiuhwzb+b/eNoRyMSprMA9RbClLtXbrFYBa2wt41O/iC/yQZvIfxrs7z0t+4W2VQAMG6n3Al8uPT8gnEpnrKM39IXfOlp8LN2MyIzQf6U9fim70rkBYARzCXQwvUHy3AwgnN/8=",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "MIME-Version": "1.0",
        "X-OriginatorOrg": "aquantia.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "c8b652f3-b3c9-4078-6fd0-08d6c34bb884",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "17 Apr 2019 15:45:30.7556\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "83e2e134-991c-4ede-8ced-34d47e38e6b1",
        "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR11MB3466",
        "Subject": "[dpdk-dev] [PATCH v2 2/7] net/atlantic: enable macsec configuration",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Pavel Belous <pavel.belous@aquantia.com>\n\nThis is a driver side of macsec configuration routines.\nIt fills in config structures and sends requests to FW\nfor configuration activities.\n\nWe declare macsec offload bits in DPDK offload capabilities.\n\nAlso update documentation with feature matrix for the\nenabled feature.\n\nSigned-off-by: Pavel Belous <pavel.belous@aquantia.com>\nSigned-off-by: Igor Russkikh <igor.russkikh@aquantia.com>\n---\n doc/guides/nics/atlantic.rst          |   6 +\n doc/guides/nics/features/atlantic.ini |   1 +\n drivers/net/atlantic/atl_ethdev.c     | 216 ++++++++++++++++++++++++++\n drivers/net/atlantic/atl_ethdev.h     |  12 ++\n 4 files changed, 235 insertions(+)",
    "diff": "diff --git a/doc/guides/nics/atlantic.rst b/doc/guides/nics/atlantic.rst\r\nindex 80591b13c185..22f2410d0e9a 100644\r\n--- a/doc/guides/nics/atlantic.rst\r\n+++ b/doc/guides/nics/atlantic.rst\r\n@@ -19,6 +19,12 @@ Supported features\r\n - RSS (Receive Side Scaling)\r\n - Checksum offload\r\n - Jumbo Frame upto 16K\r\n+- MACSEC offload\r\n+\r\n+Experimental API features\r\n+^^^^^^^^^^^^^^^^^^^^^^^^^\r\n+\r\n+- MACSEC PMD API is considered as experimental and is subject to change/removal in next DPDK releases.\r\n \r\n Configuration Information\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^\r\ndiff --git a/doc/guides/nics/features/atlantic.ini b/doc/guides/nics/features/atlantic.ini\r\nindex 5ed095b14323..2bb8ecc01789 100644\r\n--- a/doc/guides/nics/features/atlantic.ini\r\n+++ b/doc/guides/nics/features/atlantic.ini\r\n@@ -20,6 +20,7 @@ VLAN filter          = Y\r\n Flow control         = Y\r\n CRC offload          = Y\r\n VLAN offload         = Y\r\n+MACsec offload       = Y\r\n L3 checksum offload  = Y\r\n L4 checksum offload  = Y\r\n Packet type parsing  = Y\r\ndiff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\r\nindex 8327863cd9b6..1e91f162f6c2 100644\r\n--- a/drivers/net/atlantic/atl_ethdev.c\r\n+++ b/drivers/net/atlantic/atl_ethdev.c\r\n@@ -167,6 +167,7 @@ static struct rte_pci_driver rte_atl_pmd = {\r\n \t\t\t| DEV_RX_OFFLOAD_UDP_CKSUM \\\r\n \t\t\t| DEV_RX_OFFLOAD_TCP_CKSUM \\\r\n \t\t\t| DEV_RX_OFFLOAD_JUMBO_FRAME \\\r\n+\t\t\t| DEV_RX_OFFLOAD_MACSEC_STRIP \\\r\n \t\t\t| DEV_RX_OFFLOAD_VLAN_FILTER)\r\n \r\n #define ATL_TX_OFFLOADS (DEV_TX_OFFLOAD_VLAN_INSERT \\\r\n@@ -174,6 +175,7 @@ static struct rte_pci_driver rte_atl_pmd = {\r\n \t\t\t| DEV_TX_OFFLOAD_UDP_CKSUM \\\r\n \t\t\t| DEV_TX_OFFLOAD_TCP_CKSUM \\\r\n \t\t\t| DEV_TX_OFFLOAD_TCP_TSO \\\r\n+\t\t\t| DEV_TX_OFFLOAD_MACSEC_INSERT \\\r\n \t\t\t| DEV_TX_OFFLOAD_MULTI_SEGS)\r\n \r\n static const struct rte_eth_desc_lim rx_desc_lim = {\r\n@@ -698,6 +700,205 @@ atl_dev_reset(struct rte_eth_dev *dev)\r\n \treturn ret;\r\n }\r\n \r\n+static int\r\n+atl_dev_configure_macsec(struct rte_eth_dev *dev)\r\n+{\r\n+\tstruct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);\r\n+\tstruct aq_hw_cfg_s *cf = ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\tstruct aq_macsec_config *aqcfg = &cf->aq_macsec;\r\n+\tstruct macsec_msg_fw_request msg_macsec;\r\n+\tstruct macsec_msg_fw_response response;\r\n+\r\n+\tif (!aqcfg->common.macsec_enabled ||\r\n+\t    hw->aq_fw_ops->send_macsec_req == NULL)\r\n+\t\treturn 0;\r\n+\r\n+\tmemset(&msg_macsec, 0, sizeof(msg_macsec));\r\n+\r\n+\t/* Creating set of sc/sa structures from parameters provided by DPDK */\r\n+\r\n+\t/* Configure macsec */\r\n+\tmsg_macsec.msg_type = macsec_cfg_msg;\r\n+\tmsg_macsec.cfg.enabled = aqcfg->common.macsec_enabled;\r\n+\tmsg_macsec.cfg.interrupts_enabled = 1;\r\n+\r\n+\thw->aq_fw_ops->send_macsec_req(hw, &msg_macsec, &response);\r\n+\r\n+\tif (response.result)\r\n+\t\treturn -1;\r\n+\r\n+\tmemset(&msg_macsec, 0, sizeof(msg_macsec));\r\n+\r\n+\t/* Configure TX SC */\r\n+\r\n+\tmsg_macsec.msg_type = macsec_add_tx_sc_msg;\r\n+\tmsg_macsec.txsc.index = 0; /* TXSC always one (??) */\r\n+\tmsg_macsec.txsc.protect = aqcfg->common.encryption_enabled;\r\n+\r\n+\t/* MAC addr for TX */\r\n+\tmsg_macsec.txsc.mac_sa[0] = rte_bswap32(aqcfg->txsc.mac[1]);\r\n+\tmsg_macsec.txsc.mac_sa[1] = rte_bswap32(aqcfg->txsc.mac[0]);\r\n+\tmsg_macsec.txsc.sa_mask = 0x3f;\r\n+\r\n+\tmsg_macsec.txsc.da_mask = 0;\r\n+\tmsg_macsec.txsc.tci = 0x0B;\r\n+\tmsg_macsec.txsc.curr_an = 0; /* SA index which currently used */\r\n+\r\n+\t/*\r\n+\t * Creating SCI (Secure Channel Identifier).\r\n+\t * SCI constructed from Source MAC and Port identifier\r\n+\t */\r\n+\tuint32_t sci_hi_part = (msg_macsec.txsc.mac_sa[1] << 16) |\r\n+\t\t\t       (msg_macsec.txsc.mac_sa[0] >> 16);\r\n+\tuint32_t sci_low_part = (msg_macsec.txsc.mac_sa[0] << 16);\r\n+\r\n+\tuint32_t port_identifier = 1;\r\n+\r\n+\tmsg_macsec.txsc.sci[1] = sci_hi_part;\r\n+\tmsg_macsec.txsc.sci[0] = sci_low_part | port_identifier;\r\n+\r\n+\thw->aq_fw_ops->send_macsec_req(hw, &msg_macsec, &response);\r\n+\r\n+\tif (response.result)\r\n+\t\treturn -1;\r\n+\r\n+\tmemset(&msg_macsec, 0, sizeof(msg_macsec));\r\n+\r\n+\t/* Configure RX SC */\r\n+\r\n+\tmsg_macsec.msg_type = macsec_add_rx_sc_msg;\r\n+\tmsg_macsec.rxsc.index = aqcfg->rxsc.pi;\r\n+\tmsg_macsec.rxsc.replay_protect =\r\n+\t\taqcfg->common.replay_protection_enabled;\r\n+\tmsg_macsec.rxsc.anti_replay_window = 0;\r\n+\r\n+\t/* MAC addr for RX */\r\n+\tmsg_macsec.rxsc.mac_da[0] = rte_bswap32(aqcfg->rxsc.mac[1]);\r\n+\tmsg_macsec.rxsc.mac_da[1] = rte_bswap32(aqcfg->rxsc.mac[0]);\r\n+\tmsg_macsec.rxsc.da_mask = 0;//0x3f;\r\n+\r\n+\tmsg_macsec.rxsc.sa_mask = 0;\r\n+\r\n+\thw->aq_fw_ops->send_macsec_req(hw, &msg_macsec, &response);\r\n+\r\n+\tif (response.result)\r\n+\t\treturn -1;\r\n+\r\n+\tmemset(&msg_macsec, 0, sizeof(msg_macsec));\r\n+\r\n+\t/* Configure RX SC */\r\n+\r\n+\tmsg_macsec.msg_type = macsec_add_tx_sa_msg;\r\n+\tmsg_macsec.txsa.index = aqcfg->txsa.idx;\r\n+\tmsg_macsec.txsa.next_pn = aqcfg->txsa.pn;\r\n+\r\n+\tmsg_macsec.txsa.key[0] = rte_bswap32(aqcfg->txsa.key[3]);\r\n+\tmsg_macsec.txsa.key[1] = rte_bswap32(aqcfg->txsa.key[2]);\r\n+\tmsg_macsec.txsa.key[2] = rte_bswap32(aqcfg->txsa.key[1]);\r\n+\tmsg_macsec.txsa.key[3] = rte_bswap32(aqcfg->txsa.key[0]);\r\n+\r\n+\thw->aq_fw_ops->send_macsec_req(hw, &msg_macsec, &response);\r\n+\r\n+\tif (response.result)\r\n+\t\treturn -1;\r\n+\r\n+\tmemset(&msg_macsec, 0, sizeof(msg_macsec));\r\n+\r\n+\t/* Configure RX SA */\r\n+\r\n+\tmsg_macsec.msg_type = macsec_add_rx_sa_msg;\r\n+\tmsg_macsec.rxsa.index = aqcfg->rxsa.idx;\r\n+\tmsg_macsec.rxsa.next_pn = aqcfg->rxsa.pn;\r\n+\r\n+\tmsg_macsec.rxsa.key[0] = rte_bswap32(aqcfg->rxsa.key[3]);\r\n+\tmsg_macsec.rxsa.key[1] = rte_bswap32(aqcfg->rxsa.key[2]);\r\n+\tmsg_macsec.rxsa.key[2] = rte_bswap32(aqcfg->rxsa.key[1]);\r\n+\tmsg_macsec.rxsa.key[3] = rte_bswap32(aqcfg->rxsa.key[0]);\r\n+\r\n+\thw->aq_fw_ops->send_macsec_req(hw, &msg_macsec, &response);\r\n+\r\n+\tif (response.result)\r\n+\t\treturn -1;\r\n+\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_enable(struct rte_eth_dev *dev,\r\n+\t\t      uint8_t encr, uint8_t repl_prot)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tcfg->aq_macsec.common.macsec_enabled = 1;\r\n+\tcfg->aq_macsec.common.encryption_enabled = encr;\r\n+\tcfg->aq_macsec.common.replay_protection_enabled = repl_prot;\r\n+\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_disable(struct rte_eth_dev *dev)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tcfg->aq_macsec.common.macsec_enabled = 0;\r\n+\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_config_txsc(struct rte_eth_dev *dev, uint8_t *mac)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tmemset(&cfg->aq_macsec.txsc.mac, 0, sizeof(cfg->aq_macsec.txsc.mac));\r\n+\tmemcpy((uint8_t *)&cfg->aq_macsec.txsc.mac + 2, mac, ETHER_ADDR_LEN);\r\n+\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_config_rxsc(struct rte_eth_dev *dev,\r\n+\t\t\t   uint8_t *mac, uint16_t pi)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tmemset(&cfg->aq_macsec.rxsc.mac, 0, sizeof(cfg->aq_macsec.rxsc.mac));\r\n+\tmemcpy((uint8_t *)&cfg->aq_macsec.rxsc.mac + 2, mac, ETHER_ADDR_LEN);\r\n+\tcfg->aq_macsec.rxsc.pi = pi;\r\n+\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_select_txsa(struct rte_eth_dev *dev,\r\n+\t\t\t   uint8_t idx, uint8_t an,\r\n+\t\t\t   uint32_t pn, uint8_t *key)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tcfg->aq_macsec.txsa.idx = idx;\r\n+\tcfg->aq_macsec.txsa.pn = pn;\r\n+\tcfg->aq_macsec.txsa.an = an;\r\n+\r\n+\tmemcpy(&cfg->aq_macsec.txsa.key, key, 16);\r\n+\treturn 0;\r\n+}\r\n+\r\n+int atl_macsec_select_rxsa(struct rte_eth_dev *dev,\r\n+\t\t\t   uint8_t idx, uint8_t an,\r\n+\t\t\t   uint32_t pn, uint8_t *key)\r\n+{\r\n+\tstruct aq_hw_cfg_s *cfg =\r\n+\t\tATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private);\r\n+\r\n+\tcfg->aq_macsec.rxsa.idx = idx;\r\n+\tcfg->aq_macsec.rxsa.pn = pn;\r\n+\tcfg->aq_macsec.rxsa.an = an;\r\n+\r\n+\tmemcpy(&cfg->aq_macsec.rxsa.key, key, 16);\r\n+\treturn 0;\r\n+}\r\n \r\n static int\r\n atl_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\r\n@@ -1532,6 +1733,21 @@ atl_rss_hash_conf_get(struct rte_eth_dev *dev,\r\n \treturn 0;\r\n }\r\n \r\n+static bool\r\n+is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)\r\n+{\r\n+\tif (strcmp(dev->device->driver->name, drv->driver.name))\r\n+\t\treturn false;\r\n+\r\n+\treturn true;\r\n+}\r\n+\r\n+bool\r\n+is_atlantic_supported(struct rte_eth_dev *dev)\r\n+{\r\n+\treturn is_device_supported(dev, &rte_atl_pmd);\r\n+}\r\n+\r\n RTE_PMD_REGISTER_PCI(net_atlantic, rte_atl_pmd);\r\n RTE_PMD_REGISTER_PCI_TABLE(net_atlantic, pci_id_atl_map);\r\n RTE_PMD_REGISTER_KMOD_DEP(net_atlantic, \"* igb_uio | uio_pci_generic\");\r\ndiff --git a/drivers/net/atlantic/atl_ethdev.h b/drivers/net/atlantic/atl_ethdev.h\r\nindex 1e29999b539c..b162138c59d3 100644\r\n--- a/drivers/net/atlantic/atl_ethdev.h\r\n+++ b/drivers/net/atlantic/atl_ethdev.h\r\n@@ -104,4 +104,16 @@ uint16_t atl_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\r\n uint16_t atl_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\r\n \t\tuint16_t nb_pkts);\r\n \r\n+int atl_macsec_enable(struct rte_eth_dev *dev, uint8_t encr, uint8_t repl_prot);\r\n+int atl_macsec_disable(struct rte_eth_dev *dev);\r\n+int atl_macsec_config_txsc(struct rte_eth_dev *dev, uint8_t *mac);\r\n+int atl_macsec_config_rxsc(struct rte_eth_dev *dev,\r\n+\t\t\t   uint8_t *mac, uint16_t pi);\r\n+int atl_macsec_select_txsa(struct rte_eth_dev *dev, uint8_t idx,\r\n+\t\t\t   uint8_t an, uint32_t pn, uint8_t *key);\r\n+int atl_macsec_select_rxsa(struct rte_eth_dev *dev, uint8_t idx,\r\n+\t\t\t   uint8_t an, uint32_t pn, uint8_t *key);\r\n+\r\n+bool is_atlantic_supported(struct rte_eth_dev *dev);\r\n+\r\n #endif /* _ATLANTIC_ETHDEV_H_ */\r\n",
    "prefixes": [
        "v2",
        "2/7"
    ]
}