get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 52921,
    "url": "http://patches.dpdk.org/api/patches/52921/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/8f888e02cc43ea8df8a6d80fa3012ffc5e813969.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": "<8f888e02cc43ea8df8a6d80fa3012ffc5e813969.1555587238.git.igor.russkikh@aquantia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/8f888e02cc43ea8df8a6d80fa3012ffc5e813969.1555587238.git.igor.russkikh@aquantia.com",
    "date": "2019-04-18T11:39:57",
    "name": "[v3,4/6] net/atlantic: interrupt handling and macsec configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "a4cca30fed42f378e38c4ac1f74df36b3d0ad1a6",
    "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/8f888e02cc43ea8df8a6d80fa3012ffc5e813969.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/52921/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/52921/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 32F421B9C1;\n\tThu, 18 Apr 2019 13:40:03 +0200 (CEST)",
            "from NAM04-CO1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr690067.outbound.protection.outlook.com [40.107.69.67])\n\tby dpdk.org (Postfix) with ESMTP id F17501B9BC\n\tfor <dev@dpdk.org>; Thu, 18 Apr 2019 13:39:59 +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:58 +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:58 +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=ESnvqVrAcCDwz8buJB5q8f1zJ+WNmbJ8I1/FCeLTtqg=;\n\tb=HVbXjIgrMnObTaUOtwWM/S98Cz/wtF3fJCPMnzLb9zTR/NRgxMdXnJMgR5jlvFB38mgbxWoUnRs5u6iNAHOXdw0c+qGVEPMlFb9cnIlEBTez2UetcI9yukAFC2RvvnYwffHFzYumgK83jEuShIjcOn1SsBcc8UGo3v8cWDO+nBM=",
        "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 4/6] net/atlantic: interrupt handling and macsec\n\tconfiguration",
        "Thread-Index": "AQHU9dtzjjvGErNVgkynfxVDuCQs0A==",
        "Date": "Thu, 18 Apr 2019 11:39:57 +0000",
        "Message-ID": "<8f888e02cc43ea8df8a6d80fa3012ffc5e813969.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": "f9a4eaf1-12c9-49d6-d367-08d6c3f2957a",
        "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": "<DM6PR11MB38666F87D51B4733CA54C01B98260@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)(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": "eZGHE32x1noVoW1noB86LB8ooVMF0bf9/k6OBa66Van89O77Dh9/LDnaWcwMIsTOWOQosIp34T6tJ+WRZb8VVLQSC9zhzlhkv+4Xid2T1qNpIYYcLfdtYdTLQSJ+uHVhnc0E0sRR800lXYTJ5OnpEe6OxZwBdZDE418hJTCSO3H4EcrLYXgZKsE9EaxtmiaONu46X2bMDF1a8fGOzmG/iZuxXZ8jmdKFMqtiX/LuwCKZZpATrdHIrnOHUKjWDX/G1oIslRiJnskXaJkCy+KhqO2HP4gkYeujwEXL7uPNhK3Is4Z1Rlg3aFp0G9Y8kCtNSyEh6wfhjRIwFhz5jxfb2SOCAuuAOVBnCCQpWPSlontUFqe8JHKlf4Wp3TD7lKwU4FSQuULfszLzZv2iQDS7UHkz1IAcUUViOwkYzCc/Oqk=",
        "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": "f9a4eaf1-12c9-49d6-d367-08d6c3f2957a",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "18 Apr 2019 11:39:57.9872\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 4/6] net/atlantic: interrupt handling and\n\tmacsec 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\nMACSEC should be configured only after link up event, thus we use\nlink interrupt to file an alarm for configuration.\n\nFW also uses link interrupt line to indicate incoming events from\nMACSEC. These may include key expiration, packet counter wrap, etc.\nWe pass these events to the upper layers.\n\nSigned-off-by: Pavel Belous <pavel.belous@aquantia.com>\nSigned-off-by: Igor Russkikh <igor.russkikh@aquantia.com>\n---\n drivers/net/atlantic/atl_ethdev.c | 189 ++++++++++++++++++++++++++++--\n drivers/net/atlantic/atl_ethdev.h |   2 +-\n 2 files changed, 180 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\r\nindex 7ea6919ff1ca..dfcb3029b92f 100644\r\n--- a/drivers/net/atlantic/atl_ethdev.c\r\n+++ b/drivers/net/atlantic/atl_ethdev.c\r\n@@ -4,6 +4,7 @@\r\n \r\n #include <rte_string_fns.h>\r\n #include <rte_ethdev_pci.h>\r\n+#include <rte_alarm.h>\r\n \r\n #include \"atl_ethdev.h\"\r\n #include \"atl_common.h\"\r\n@@ -700,6 +701,129 @@ 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@@ -947,13 +1071,20 @@ atl_dev_supported_ptypes_get(struct rte_eth_dev *dev)\r\n \treturn NULL;\r\n }\r\n \r\n+static void\r\n+atl_dev_delayed_handler(void *param)\r\n+{\r\n+\tstruct rte_eth_dev *dev = (struct rte_eth_dev *)param;\r\n+\r\n+\tatl_dev_configure_macsec(dev);\r\n+}\r\n+\r\n+\r\n /* return 0 means link status changed, -1 means not changed */\r\n static int\r\n atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused)\r\n {\r\n \tstruct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);\r\n-\tstruct atl_interrupt *intr =\r\n-\t\tATL_DEV_PRIVATE_TO_INTR(dev->data->dev_private);\r\n \tstruct rte_eth_link link, old;\r\n \tint err = 0;\r\n \r\n@@ -980,8 +1111,6 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused)\r\n \t\treturn 0;\r\n \t}\r\n \r\n-\tintr->flags &= ~ATL_FLAG_NEED_LINK_CONFIG;\r\n-\r\n \tlink.link_status = ETH_LINK_UP;\r\n \tlink.link_duplex = ETH_LINK_FULL_DUPLEX;\r\n \tlink.link_speed = hw->aq_link_status.mbps;\r\n@@ -991,6 +1120,10 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused)\r\n \tif (link.link_status == old.link_status)\r\n \t\treturn -1;\r\n \r\n+\tif (rte_eal_alarm_set(1000 * 1000,\r\n+\t\t\t      atl_dev_delayed_handler, (void *)dev) < 0)\r\n+\t\tPMD_DRV_LOG(ERR, \"rte_eal_alarm_set fail\");\r\n+\r\n \treturn 0;\r\n }\r\n \r\n@@ -1068,8 +1201,9 @@ atl_dev_interrupt_get_status(struct rte_eth_dev *dev)\r\n \thw_atl_b0_hw_irq_read(hw, &cause);\r\n \r\n \tatl_disable_intr(hw);\r\n-\tintr->flags = cause & BIT(ATL_IRQ_CAUSE_LINK) ?\r\n-\t\t\tATL_FLAG_NEED_LINK_UPDATE : 0;\r\n+\r\n+\tif (cause & BIT(ATL_IRQ_CAUSE_LINK))\r\n+\t\tintr->flags |= ATL_FLAG_NEED_LINK_UPDATE;\r\n \r\n \treturn 0;\r\n }\r\n@@ -1134,15 +1268,50 @@ atl_dev_interrupt_action(struct rte_eth_dev *dev,\r\n {\r\n \tstruct atl_interrupt *intr =\r\n \t\tATL_DEV_PRIVATE_TO_INTR(dev->data->dev_private);\r\n+\tstruct atl_adapter *adapter =\r\n+\t\t(struct atl_adapter *)dev->data->dev_private;\r\n+\tstruct aq_hw_s *hw = &adapter->hw;\r\n+\r\n+\tif (!(intr->flags & ATL_FLAG_NEED_LINK_UPDATE))\r\n+\t\tgoto done;\r\n+\r\n+\tintr->flags &= ~ATL_FLAG_NEED_LINK_UPDATE;\r\n \r\n-\tif (intr->flags & ATL_FLAG_NEED_LINK_UPDATE) {\r\n-\t\tatl_dev_link_update(dev, 0);\r\n-\t\tintr->flags &= ~ATL_FLAG_NEED_LINK_UPDATE;\r\n+\t/* Notify userapp if link status changed */\r\n+\tif (!atl_dev_link_update(dev, 0)) {\r\n \t\tatl_dev_link_status_print(dev);\r\n \t\t_rte_eth_dev_callback_process(dev,\r\n \t\t\tRTE_ETH_EVENT_INTR_LSC, NULL);\r\n+\t} else {\r\n+\t\tif (hw->aq_fw_ops->send_macsec_req == NULL)\r\n+\t\t\tgoto done;\r\n+\r\n+\t\t/* Check macsec Keys expired */\r\n+\t\tstruct get_stats req = { 0 };\r\n+\t\tstruct macsec_msg_fw_request msg = { 0 };\r\n+\t\tstruct macsec_msg_fw_response resp = { 0 };\r\n+\r\n+\t\treq.ingress_sa_index = 0x0;\r\n+\t\treq.egress_sc_index = 0x0;\r\n+\t\treq.egress_sa_index = 0x0;\r\n+\t\tmsg.msg_type = macsec_get_stats_msg;\r\n+\t\tmsg.stats = req;\r\n+\r\n+\t\tint err = hw->aq_fw_ops->send_macsec_req(hw, &msg, &resp);\r\n+\t\tif (err) {\r\n+\t\t\tPMD_DRV_LOG(ERR, \"send_macsec_req fail\");\r\n+\t\t\tgoto done;\r\n+\t\t}\r\n+\t\tif (resp.stats.egress_threshold_expired ||\r\n+\t\t    resp.stats.ingress_threshold_expired ||\r\n+\t\t    resp.stats.egress_expired ||\r\n+\t\t    resp.stats.ingress_expired) {\r\n+\t\t\tPMD_DRV_LOG(INFO, \"RTE_ETH_EVENT_MACSEC\");\r\n+\t\t\t_rte_eth_dev_callback_process(dev,\r\n+\t\t\t\tRTE_ETH_EVENT_MACSEC, NULL);\r\n+\t\t}\r\n \t}\r\n-\r\n+done:\r\n \tatl_enable_intr(dev);\r\n \trte_intr_enable(intr_handle);\r\n \r\ndiff --git a/drivers/net/atlantic/atl_ethdev.h b/drivers/net/atlantic/atl_ethdev.h\r\nindex b162138c59d3..f547571b5c97 100644\r\n--- a/drivers/net/atlantic/atl_ethdev.h\r\n+++ b/drivers/net/atlantic/atl_ethdev.h\r\n@@ -34,7 +34,7 @@\r\n \t(&((struct atl_adapter *)adapter)->hw_cfg)\r\n \r\n #define ATL_FLAG_NEED_LINK_UPDATE (uint32_t)(1 << 0)\r\n-#define ATL_FLAG_NEED_LINK_CONFIG (uint32_t)(4 << 0)\r\n+#define ATL_FLAG_MACSEC (uint32_t)(4 << 0)\r\n \r\n struct atl_interrupt {\r\n \tuint32_t flags;\r\n",
    "prefixes": [
        "v3",
        "4/6"
    ]
}