get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 52919,
    "url": "http://patches.dpdk.org/api/patches/52919/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/0fea06dca373665088ac509d59a1a0d93bb475c2.1555587238.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": "<0fea06dca373665088ac509d59a1a0d93bb475c2.1555587238.git.igor.russkikh@aquantia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/0fea06dca373665088ac509d59a1a0d93bb475c2.1555587238.git.igor.russkikh@aquantia.com",
    "date": "2019-04-18T11:39:51",
    "name": "[v3,2/6] net/atlantic: enable macsec configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "f526891504f1ac4cd232e52910bc6642a2b3db36",
    "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/0fea06dca373665088ac509d59a1a0d93bb475c2.1555587238.git.igor.russkikh@aquantia.com/mbox/",
    "series": [
        {
            "id": 4374,
            "url": "http://patches.dpdk.org/api/series/4374/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4374",
            "date": "2019-04-18T11:39:46",
            "name": "add MACSEC hw offload to atlantic PMD",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/4374/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/52919/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/52919/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 355561B9A7;\n\tThu, 18 Apr 2019 13:39:56 +0200 (CEST)",
            "from NAM04-CO1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr690089.outbound.protection.outlook.com [40.107.69.89])\n\tby dpdk.org (Postfix) with ESMTP id C662E1B99B\n\tfor <dev@dpdk.org>; Thu, 18 Apr 2019 13:39:53 +0200 (CEST)",
            "from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by\n\tDM6PR11MB3866.namprd11.prod.outlook.com (10.255.61.11) with Microsoft\n\tSMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1792.14; Thu, 18 Apr 2019 11:39:52 +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\tThu, 18 Apr 2019 11:39:52 +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=PKtAi0+z2kZ1yhoCQSL5vjVVExRa91uK4x7bHDN52jA=;\n\tb=jvEZz5PedBlrp16ssluWo1HVedl7dW/Jn0OB0yD0fj0IgNde52C5mxzQOSGp+RkmImN81VLyYPfGhbnf2P1vAu2Sq9lXzCrLCGmwTMm3ljQdabhy/U9kLIkfhoTW7Q3gz0n6GvBvXS7aAvyM71RJNZ6JaKXXgXn/6UgcifxIfQQ=",
        "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\tPavel Belous <Pavel.Belous@aquantia.com>, \n\tIgor Russkikh <Igor.Russkikh@aquantia.com>",
        "Thread-Topic": "[PATCH v3 2/6] net/atlantic: enable macsec configuration",
        "Thread-Index": "AQHU9dtvNAcs+rdcxUSrCY6N8qJJjw==",
        "Date": "Thu, 18 Apr 2019 11:39:51 +0000",
        "Message-ID": "<0fea06dca373665088ac509d59a1a0d93bb475c2.1555587238.git.igor.russkikh@aquantia.com>",
        "References": "<cover.1555587238.git.igor.russkikh@aquantia.com>",
        "In-Reply-To": "<cover.1555587238.git.igor.russkikh@aquantia.com>",
        "Accept-Language": "en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "BYAPR11CA0051.namprd11.prod.outlook.com\n\t(2603:10b6:a03:80::28) 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": "0eafbea9-a409-4e38-cdba-08d6c3f291dd",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);\n\tSRVR:DM6PR11MB3866; ",
        "x-ms-traffictypediagnostic": "DM6PR11MB3866:",
        "x-microsoft-antispam-prvs": "<DM6PR11MB3866844B974F09183563F5DF98260@DM6PR11MB3866.namprd11.prod.outlook.com>",
        "x-forefront-prvs": "0011612A55",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(396003)(39850400004)(136003)(366004)(376002)(346002)(199004)(189003)(76176011)(186003)(6486002)(26005)(97736004)(2501003)(102836004)(1730700003)(81156014)(6506007)(6116002)(8676002)(3846002)(386003)(81166006)(6916009)(5640700003)(446003)(2906002)(11346002)(52116002)(50226002)(118296001)(256004)(99286004)(14444005)(6436002)(86362001)(71200400001)(71190400001)(44832011)(4326008)(66066001)(14454004)(486006)(25786009)(36756003)(72206003)(478600001)(8936002)(476003)(2351001)(6512007)(53936002)(7736002)(30864003)(5660300002)(54906003)(316002)(107886003)(2616005)(68736007)(305945005);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3866;\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": "oE7WAPiulWopZmzIhPTsYagnNxpuiJ3YBZnVgXGz82Io7AKCqy8Iubb391Ny75w3RsupYfEhrLnPBBBvpPDC0KWGwUL/6VHJ7o125sqRGwSjrTjGi/PQDNh0BuuTZ5xpwWXIuFjRcTipt0FvAF+XVLiGiwh4/YyedFp0x7KHaXBV8ia7CLKoJWoUpDbfS+4jlZ8mo0k4Jh2wMwNlzW3HgWApO4Fj8ux8Vymh9P2e99BrelaJ6xoV4LNB6d3XS0Qc8iP0q20nM7dcNGFXQ/FXON9JWDnaX1vJ4SgeIBBlDqcHHRUCbYN9TKH6JtOIMSFElU604a7e6zK0pTTBqZCp/z53vR52QBxoVqD6QtSVNCJzJfH8lcnFsNGEbMDvuAw+zs5kiaAF6Fk1aHCJ6A63i2pH4LeN+pwmRNBKSxRdGR0=",
        "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": "0eafbea9-a409-4e38-cdba-08d6c3f291dd",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "18 Apr 2019 11:39:51.9140\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": "DM6PR11MB3866",
        "Subject": "[dpdk-dev] [PATCH v3 2/6] 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\nThese are driver macsec configuration routines.\nThey fill in config structures and prepare these\nto be send to FW. Actual configuration will happen in\nlink interrupt handler.\n\nWe declare macsec offload bits in DPDK offload capabilities\nand provide external experimental macsec API wrappers.\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/Makefile                 |   1 +\n drivers/net/atlantic/atl_ethdev.c             |  93 ++++++++++++++\n drivers/net/atlantic/atl_ethdev.h             |  12 ++\n drivers/net/atlantic/meson.build              |   1 +\n drivers/net/atlantic/rte_pmd_atlantic.c       | 102 +++++++++++++++\n drivers/net/atlantic/rte_pmd_atlantic.h       | 120 ++++++++++++++++++\n .../net/atlantic/rte_pmd_atlantic_version.map |  12 ++\n 9 files changed, 348 insertions(+)\n create mode 100644 drivers/net/atlantic/rte_pmd_atlantic.c\n create mode 100644 drivers/net/atlantic/rte_pmd_atlantic.h",
    "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/Makefile b/drivers/net/atlantic/Makefile\r\nindex 62dcdbffa69c..263f12b5575f 100644\r\n--- a/drivers/net/atlantic/Makefile\r\n+++ b/drivers/net/atlantic/Makefile\r\n@@ -31,5 +31,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_utils.c\r\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_llh.c\r\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_utils_fw2x.c\r\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_b0.c\r\n+SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += rte_pmd_atlantic.c\r\n \r\n include $(RTE_SDK)/mk/rte.lib.mk\r\ndiff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\r\nindex 8327863cd9b6..7ea6919ff1ca 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,82 @@ atl_dev_reset(struct rte_eth_dev *dev)\r\n \treturn ret;\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 +1610,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\ndiff --git a/drivers/net/atlantic/meson.build b/drivers/net/atlantic/meson.build\r\nindex 28fb97cace6e..60b84684ec0a 100644\r\n--- a/drivers/net/atlantic/meson.build\r\n+++ b/drivers/net/atlantic/meson.build\r\n@@ -9,4 +9,5 @@ sources = files(\r\n \t'hw_atl/hw_atl_llh.c',\r\n \t'hw_atl/hw_atl_utils_fw2x.c',\r\n \t'hw_atl/hw_atl_utils.c',\r\n+\t'rte_pmd_atlantic.c',\r\n )\r\ndiff --git a/drivers/net/atlantic/rte_pmd_atlantic.c b/drivers/net/atlantic/rte_pmd_atlantic.c\r\nnew file mode 100644\r\nindex 000000000000..5bf4da27fdd0\r\n--- /dev/null\r\n+++ b/drivers/net/atlantic/rte_pmd_atlantic.c\r\n@@ -0,0 +1,102 @@\r\n+/* SPDX-License-Identifier: BSD-3-Clause\r\n+ * Copyright(c) 2018 Aquantia Corporation\r\n+ */\r\n+\r\n+#include <rte_ethdev_driver.h>\r\n+\r\n+#include \"rte_pmd_atlantic.h\"\r\n+#include \"atl_ethdev.h\"\r\n+\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_enable(uint16_t port,\r\n+\t\t\t  uint8_t encr, uint8_t repl_prot)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_enable(dev, encr, repl_prot);\r\n+}\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_disable(uint16_t port)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_disable(dev);\r\n+}\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_config_txsc(dev, mac);\r\n+}\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_config_rxsc(dev, mac, pi);\r\n+}\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,\r\n+\t\t\t\t uint32_t pn, uint8_t *key)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_select_txsa(dev, idx, an, pn, key);\r\n+}\r\n+\r\n+__rte_experimental int\r\n+rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,\r\n+\t\t\t\t uint32_t pn, uint8_t *key)\r\n+{\r\n+\tstruct rte_eth_dev *dev;\r\n+\r\n+\tRTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);\r\n+\r\n+\tdev = &rte_eth_devices[port];\r\n+\r\n+\tif (!is_atlantic_supported(dev))\r\n+\t\treturn -ENOTSUP;\r\n+\r\n+\treturn atl_macsec_select_rxsa(dev, idx, an, pn, key);\r\n+}\r\ndiff --git a/drivers/net/atlantic/rte_pmd_atlantic.h b/drivers/net/atlantic/rte_pmd_atlantic.h\r\nnew file mode 100644\r\nindex 000000000000..e4db7c6c278c\r\n--- /dev/null\r\n+++ b/drivers/net/atlantic/rte_pmd_atlantic.h\r\n@@ -0,0 +1,120 @@\r\n+/* SPDX-License-Identifier: BSD-3-Clause\r\n+ * Copyright(c) 2018 Aquantia Corporation\r\n+ */\r\n+\r\n+/**\r\n+ * @file rte_pmd_atlantic.h\r\n+ * atlantic PMD specific functions.\r\n+ *\r\n+ **/\r\n+\r\n+#ifndef _PMD_ATLANTIC_H_\r\n+#define _PMD_ATLANTIC_H_\r\n+\r\n+#include <rte_ethdev_driver.h>\r\n+\r\n+/**\r\n+ * Enable MACsec offload.\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @param encr\r\n+ *    1 - Enable encryption (encrypt and add integrity signature).\r\n+ *    0 - Disable encryption (only add integrity signature).\r\n+ * @param repl_prot\r\n+ *    1 - Enable replay protection.\r\n+ *    0 - Disable replay protection.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ */\r\n+int rte_pmd_atl_macsec_enable(uint16_t port, uint8_t encr, uint8_t repl_prot);\r\n+\r\n+/**\r\n+ * Disable MACsec offload.\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ */\r\n+int rte_pmd_atl_macsec_disable(uint16_t port);\r\n+\r\n+/**\r\n+ * Configure Tx SC (Secure Connection).\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @param mac\r\n+ *   The MAC address on the local side.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ */\r\n+int rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac);\r\n+\r\n+/**\r\n+ * Configure Rx SC (Secure Connection).\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @param mac\r\n+ *   The MAC address on the remote side.\r\n+ * @param pi\r\n+ *   The PI (port identifier) on the remote side.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ */\r\n+int rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi);\r\n+\r\n+/**\r\n+ * Enable Tx SA (Secure Association).\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @param idx\r\n+ *   The SA to be enabled (0 or 1).\r\n+ * @param an\r\n+ *   The association number on the local side.\r\n+ * @param pn\r\n+ *   The packet number on the local side.\r\n+ * @param key\r\n+ *   The key on the local side.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ *   - (-EINVAL) if bad parameter.\r\n+ */\r\n+int rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,\r\n+\t\t\t\t   uint32_t pn, uint8_t *key);\r\n+\r\n+/**\r\n+ * Enable Rx SA (Secure Association).\r\n+ *\r\n+ * @param port\r\n+ *   The port identifier of the Ethernet device.\r\n+ * @param idx\r\n+ *   The SA to be enabled (0 or 1)\r\n+ * @param an\r\n+ *   The association number on the remote side.\r\n+ * @param pn\r\n+ *   The packet number on the remote side.\r\n+ * @param key\r\n+ *   The key on the remote side.\r\n+ * @return\r\n+ *   - (0) if successful.\r\n+ *   - (-ENODEV) if *port* invalid.\r\n+ *   - (-ENOTSUP) if hardware doesn't support this feature.\r\n+ *   - (-EINVAL) if bad parameter.\r\n+ */\r\n+int rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,\r\n+\t\t\t\t   uint32_t pn, uint8_t *key);\r\n+\r\n+#endif /* _PMD_ATLANTIC_H_ */\r\ndiff --git a/drivers/net/atlantic/rte_pmd_atlantic_version.map b/drivers/net/atlantic/rte_pmd_atlantic_version.map\r\nindex 521e51f411fb..b16faa999f43 100644\r\n--- a/drivers/net/atlantic/rte_pmd_atlantic_version.map\r\n+++ b/drivers/net/atlantic/rte_pmd_atlantic_version.map\r\n@@ -2,3 +2,15 @@ DPDK_18.11 {\r\n \r\n \tlocal: *;\r\n };\r\n+\r\n+EXPERIMENTAL {\r\n+\tglobal:\r\n+\r\n+\trte_pmd_atl_macsec_enable;\r\n+\trte_pmd_atl_macsec_disable;\r\n+\trte_pmd_atl_macsec_config_txsc;\r\n+\trte_pmd_atl_macsec_config_rxsc;\r\n+\trte_pmd_atl_macsec_select_txsa;\r\n+\trte_pmd_atl_macsec_select_rxsa;\r\n+};\r\n+\r\n",
    "prefixes": [
        "v3",
        "2/6"
    ]
}