From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0061.outbound.protection.outlook.com [104.47.32.61]) by dpdk.org (Postfix) with ESMTP id 48BEE695D for ; Thu, 13 Sep 2018 13:36:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+amfKQOnPQj/YPbgzdCnlzLevl8JTTTlMAWlhXVjoys=; b=cZHQplULbTvMm6RsKwosfoQPIufAglZcVtYWxglBXc9Ml0df/HYBp6HLHdmzqLbbukByBSoS4Q74BCAM9lHMI7y8hGjHte3eoizEYEcRjNXZeHfq2kRY6hF1pYM4PpXgJi8IOF39hJnvm8bEhgEA0ailY1jOJ+JYfcMBrR7dLSE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; Received: from ubuntubox.rdc.aquantia.com (95.79.108.179) by BLUPR0701MB1650.namprd07.prod.outlook.com (2a01:111:e400:58c6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.15; Thu, 13 Sep 2018 11:36:00 +0000 From: Igor Russkikh To: dev@dpdk.org Cc: pavel.belous@aquantia.com, igor.russkikh@aquantia.com Date: Thu, 13 Sep 2018 14:35:18 +0300 Message-Id: <1536838528-11800-11-git-send-email-igor.russkikh@aquantia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1536838528-11800-1-git-send-email-igor.russkikh@aquantia.com> References: <1536838528-11800-1-git-send-email-igor.russkikh@aquantia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [95.79.108.179] X-ClientProxiedBy: VI1PR0202CA0026.eurprd02.prod.outlook.com (2603:10a6:803:14::39) To BLUPR0701MB1650.namprd07.prod.outlook.com (2a01:111:e400:58c6::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2437b41c-933e-4bcb-fc01-08d6196d14e4 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BLUPR0701MB1650; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1650; 3:CCUD7lmNbYYKi1AzdFLWmla+W1D3kSMBclDULxyMosKpd2o1/uO/hkhQF9GiRJkCOv0uOiqU6hNH1uw5yaK4nszUDgQs39Us5Q99cGYV61ACt4NVciaeqslaE+wDenMMUhkJOWEe0UUYTL/18ub9ivAlohn6ADoCN46QPsPRO4P88/NHusJfbWKx8TXFSEgfyOzufenF6sy0UACBQcYpkk3qtcQ3FBFb/tyTKMHtJuFVAUUf47g5TrrC/7yrgrt9; 25:eu/uJ/Tjgt7tCueUXxRY/qUh7KUnFbJyHlyV6k41bCxlbZb5uvlPg3HST8hzMjhjzQ56U9Ib7biDyG7mfuKQ5AWJCZwFMAuOm3OpdxH/IiibJiVxtVFsEYUc4F78RCkgC+wjly/OyqLBjp4dANKpa3pW2Qxk/9XYXxccvin1HEpYVt/76NM4+60f7W3+tIG0hT5hKw1pQwV5egbL8GHqVPPz3nSuIHpyam7lJhkRv3v5SVAUdFMUofLnQXyKLc7QCt73Qs/o9iNBmZMd15daD89D9ki1160FEqplybRIuG+6tw1aqcveJ29hp/S46v9japahCD+P++W2GBET0wQkk7orCS11uknS9YQi5L2U9Ag=; 31:l1f5xnAc61xA6uPfGmqohWXBYCH7iyBY5e1zNj4UZyOunKjWHwhmWhNI+aoWHp5j1eDCbU8Y+7SvjGo0ur4xW2yll1TAw4IvzzgNKgofPvQPe+nOyIBPWR26i7RnlFyzO63gK++u9O5URbID5FveItkOOKBi6ywyXSVNiJqxsY9DCbyKJ04jroCUC2vALqFi0q3DiQASJDarvF5eM2e2bx+Z+Oqa15Gl4iDPPl3mcUM= X-MS-TrafficTypeDiagnostic: BLUPR0701MB1650: X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1650; 20:E9DUat6j42sox881twbDK4EnErJ5L2pdxcoPjz9i6+0nwLOVvogSH7tJkEryMXapVJYdRstFPtO9s+5NzJ1U1LSWQhq3GFKr/80nkNc/Np3zixLUe181bo+f/VTX/Z0Z6hlRUBkjJZk7+hOpQJQ9p0ZWSM8cWtuDIPtJnW7KxcFRGFESHowfMCOkRnRnIyF6Jz4xih5RsOoVzOMrTKxE1n5i35GRM0RBB2ccUJS2decshofXaMrcPR8jdJHWnXTqv8pl75UYV8lpQlKATRsy4FMgNP19gAUL3C6i67tmxINSZ7569VmlgTV3JQiQhMzn+U8+lT9T1t4eEdxTqSyK3LCyX00UUMY9QcfBnEYxL/mrlqNYv3ofLy1QC8HnrBy7jkpczfYW6VfsyTFSUhp+lgiUC8LBuweSvia/hYRFH8LCFNvM/MeHQDrHZXnMoBcMEZ0fjG9ZE/UTmpwFuaSue4DjYqijfSnnLROFKRYuVA9cans7gI9ulGJPI3w2W7q9; 4:4hng3sSsQ0sSR1+sCvHoN+CMY/0t+gVIBiR62b6HxCv2NNY+7wNCF3AkTRETllNBaWPu1+0oXnNn8+aAYp5U9OFSKj6XOkCJhzGN9LEBLBmlk1Vylx7ePIOof3q/vlzmc153Gmo1uN4qjseIPXfW3bMJfvLzXJbS7MczaklonvD1/46aPItvWhYYXQpm6T+54yCHbuff6/8STNjf6IeR1qeHiKIrHdPBxs1TP38R60fSdrAbSyeY1DhkHKMpUq26fPQrmV+jyzumNSO2yFZvBQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231311)(944501410)(52105095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201708071742011)(7699050); SRVR:BLUPR0701MB1650; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB1650; X-Forefront-PRVS: 07943272E1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39840400004)(366004)(396003)(376002)(136003)(346002)(199004)(189003)(6666003)(6916009)(97736004)(8936002)(68736007)(25786009)(50226002)(81166006)(81156014)(4326008)(107886003)(6486002)(51416003)(2906002)(53936002)(5660300001)(36756003)(86362001)(575784001)(316002)(52116002)(8676002)(16586007)(7736002)(305945005)(11346002)(446003)(476003)(956004)(47776003)(72206003)(66066001)(44832011)(478600001)(486006)(186003)(26005)(16526019)(14444005)(386003)(48376002)(2351001)(106356001)(2361001)(2616005)(3846002)(105586002)(50466002)(7696005)(6116002)(76176011)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1650; H:ubuntubox.rdc.aquantia.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1650; 23:uuyW3zilp3Sf4U2DD160UcX+0wKrqlGkanFuiiP?= =?us-ascii?Q?CoZwOGwjllc2pbAQXycQ+YV/pMzUx8b5Pw2v6q386qCdvDNaZKCPUUAvqUar?= =?us-ascii?Q?C41n1DWap/Zye0Esn/gM+mJSARS9nNi+x2QhiLoRfluBGZfOYkxAJzlOQzrW?= =?us-ascii?Q?azRzxzz+7bog4BudXK/jaUSzAFH9A+1CNK7jNrbqzIB4D/5kS3fgoVuGd9Br?= =?us-ascii?Q?MBLhmJtgkED6iUgt1Ba4H0gK7jfUwAxKRZRzGuGyOeBkNdyEK/NOKtheVEg+?= =?us-ascii?Q?cQyjQmxjVhrtjKxug5BTGx7nq6x3rxnRNZaEct6bpSsCOK+LRIoQWIvaE6hE?= =?us-ascii?Q?jjpniQXVqQFNEwMTCJtlJkElCWiKp2lg6RXRitR09SeOHEai9up1DtTi/y/H?= =?us-ascii?Q?i9MMwr/8rqLYj+Eky+JODQCmASvgBAYmtGKAKovQhKEd10ngW02zEbQQAx8m?= =?us-ascii?Q?zvp/f2TrZin9tUiCp5BRdDwNMcsmGgn0CqFBOESES8prDdej9yRX8G09fc4f?= =?us-ascii?Q?mqLJDBQRajAd9MoBVd/4eFOd32DTSbENSb13LVsmJVnwWXNqfC9v2BW3fuvY?= =?us-ascii?Q?eZPz1W0YPQ4ewB0JYAsmzPXaTfqR8FQY98HgeICM502eip61XtmtlJ0R2Gvv?= =?us-ascii?Q?reeBYBmVjaldexHxGEuZtFr7V/246c0+EYxdkqVUHdaKbYLDvnzKA5Ft/DyS?= =?us-ascii?Q?siqPhg8shK8e5xZgtiNwi6xxPfYqjnuE7f+2rYWjuCr+ZwxNCbHwsTwwMGYX?= =?us-ascii?Q?+E+vPixto35Vb984+QDet2di66j3EErOqjJ98OVyP/pMb8mpWjXaTVgLQwcK?= =?us-ascii?Q?hBCr2CSlMEmWl+vjwcRoxKzGEcKudLnHTqo2ohpAEp+B5iPlrCbq3xmdc1gu?= =?us-ascii?Q?DhRawg1FiHP+2YmnD0m2qY5WKY9RpMLwvmq0oalgTENAa1tD09mFQZiwE9w0?= =?us-ascii?Q?H8qafBkcjhTVXqJRri/N8syCz0n8x+Dnm9t9YOJTvOJDTfxVkE/B4Dzxsuz1?= =?us-ascii?Q?/igt0JFNjGfAM2vs1yS0xaTPGi3XqAiuhMB8ktE1ICOHwF9vZFMpohwgusqt?= =?us-ascii?Q?Q/d/KuPvjwNzj0lUncsiSR6+Wrj8iEcQ3lFxRZcdKBUjq0xuD01S9ORp/Z2f?= =?us-ascii?Q?34oev6B8e36/TuCdEuZNGR44m9TKYM7rWENZh7V8zTQ/lGWrJje80rDzE3Z1?= =?us-ascii?Q?oEKWktW0mTUaTH8XHfxCP14YsPSnDazmFmXR6osM1DMDH46bA/oTZCaxae8k?= =?us-ascii?Q?QFR5TeL5v1Y1skGjGMTjZP6x6XpQ2d/mtirs+yLbOKXWLGDa4SYvC6/QJ7MQ?= =?us-ascii?Q?TbSpxt/lAXJSXSWY8TiWnx4U=3D?= X-Microsoft-Antispam-Message-Info: 15lEPLLp+jSLGbc3IrOqPeLJ4zq0Q9vuIA11kTBgXdveoEJkNhXnrGhATIfbrZx1cLNZHTK1n11iLYfUUhI2GNlYxsLLoz0V6niPvoeeJdNy9ZgHu6PgMbTnDSgqjbBdCqLvJk8ODijdVGO+XyiPARwln+88lTDmzjksGxcktj9LbTVHEerqLX5c2sMelcPywqkrYxJuPj6dJlar3bJppzwmEkxYh8mLIhKD/CaGAcFQfC1PkDgZttb7lxklasAiq8xejg3n2bklEEpRU36Vv+rQGP4zknuqM3f3Se30sFHVTsZPK5WRkInNj7N2AY1QUJCDN8VdNgJKhoi3JYQxtlFqRIwM6XirG/ORW53Bhz8= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1650; 6:IWHSxHs43t6s8H5Nl/BNgrLUAZCDeXdVT8kplbOIH+blIJQgKeeMPVxF8D5YsdjfqiZbkCipL3Z8r+mWvnYryw7zowefqs7ZW5XjoRH7WcPGHPmCeWSQDRimiM0ArCRPRVy2DH1A6+LfHGDlKdismOGyEsNhNhK39BaDWWvOEzw/ATKLuElx/cfNsRS/+Oybu/a054UCtuGwNHr0KGRl3QhTqxK0YqdSQpChQTt+y0JkLKEmEbd24o36rnbYkoIYspHWzvO69GmAJQOn6s8hqSBdsURs3dcIEe6fJ2XHsT/qq6mUvWq0awBfDV72OZfnltV/+OzjFfXjAQ5pw7wYf53y4n1PCf+RaBGeJkNORUaRPntmR0PTJPHjDm8xSKpgCclspww1+8VbljMM8WIV2AF714sx00rEMKRkAEbe6FmPTuBXl8HYbXizubfOWV0tDWneZYq17cY842nsrn5llA==; 5:0DGSyEJsvrQLvOByR9tdUrh1tk2z7nD8ofBjSVxgP3kE8lYQuxScYWOX1gHY5ivWowepWjQz0NA0+i+brI/SON8lDN5nC2ocH/mxrEW3/e5GQbLK5fVxKLamqFitd3gMytjhxeBNRLB0vNMskwVTgTWJVHIKxMVt6J5ImUVrXUU=; 7:Vxu0uwn7yHcGVJlqBYcJXhRkDC+HW+7WMryBhO4T6Tla/96Msm2vQ3KU4sLDB+ABli+SMEyXmS+Kis0rCgvT83wSY/MRfPN9wmYYSEss0MUHvZKA37UhnaaafLXdkhx7gOrvb+TO13opS70Lf+qbnKCRPHS1AJJDLk3IvUxpTnBODW4/PPhBR3YJGwK0xkYkqT0S0kwHWh5VLknL0rNWWD9QljdFYg04xlV3hLXurhPy1UuPYrCdTj2EKWaH4T7x SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2018 11:36:00.3267 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2437b41c-933e-4bcb-fc01-08d6196d14e4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1650 Subject: [dpdk-dev] [PATCH v2 11/21] net/atlantic: RSS and RETA manipulation API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Sep 2018 11:36:04 -0000 Signed-off-by: Igor Russkikh --- drivers/net/atlantic/atl_ethdev.c | 99 +++++++++++++++++++++++++++++++++ drivers/net/atlantic/hw_atl/hw_atl_b0.c | 29 +--------- 2 files changed, 100 insertions(+), 28 deletions(-) diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 71f4e8e0a..b58f684f6 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -75,6 +75,19 @@ static int atl_dev_interrupt_action(struct rte_eth_dev *dev, static void atl_dev_interrupt_handler(void *param); +/* RSS */ +static int atl_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size); +static int atl_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size); +static int atl_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf); +static int atl_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf); + + static int eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev); static int eth_atl_pci_remove(struct rte_pci_device *pci_dev); @@ -143,6 +156,12 @@ static const struct eth_dev_ops atl_eth_dev_ops = { .dev_reset = atl_dev_reset, /* Link */ .link_update = atl_dev_link_update, + + .reta_update = atl_reta_update, + .reta_query = atl_reta_query, + .rss_hash_update = atl_rss_hash_update, + .rss_hash_conf_get = atl_rss_hash_conf_get, + }; /** @@ -802,6 +821,86 @@ atl_dev_interrupt_handler(void *param) atl_dev_interrupt_action(dev, dev->intr_handle); } + +static int +atl_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size) +{ + int i; + struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct aq_hw_cfg_s *cf = ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); + + for (i = 0; i < reta_size && i < cf->aq_rss.indirection_table_size; i++) + cf->aq_rss.indirection_table[i] = min(reta_conf->reta[i], + dev->data->nb_rx_queues - 1); + + hw_atl_b0_hw_rss_set(hw, &cf->aq_rss); + return 0; +} + +static int +atl_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size) +{ + int i; + struct aq_hw_cfg_s *cf = ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); + + for (i = 0; i < reta_size && i < cf->aq_rss.indirection_table_size; i++) + reta_conf->reta[i] = cf->aq_rss.indirection_table[i]; + reta_conf->mask = ~0U; + return 0; +} + +static int +atl_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct aq_hw_cfg_s *cfg = + ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); + static u8 def_rss_key[40] = { + 0x1e, 0xad, 0x71, 0x87, 0x65, 0xfc, 0x26, 0x7d, + 0x0d, 0x45, 0x67, 0x74, 0xcd, 0x06, 0x1a, 0x18, + 0xb6, 0xc1, 0xf0, 0xc7, 0xbb, 0x18, 0xbe, 0xf8, + 0x19, 0x13, 0x4b, 0xa9, 0xd0, 0x3e, 0xfe, 0x70, + 0x25, 0x03, 0xab, 0x50, 0x6a, 0x8b, 0x82, 0x0c + }; + + cfg->is_rss = !!rss_conf->rss_hf; + if (rss_conf->rss_key) { + memcpy(cfg->aq_rss.hash_secret_key, rss_conf->rss_key, + rss_conf->rss_key_len); + cfg->aq_rss.hash_secret_key_size = rss_conf->rss_key_len; + } else { + memcpy(cfg->aq_rss.hash_secret_key, def_rss_key, + sizeof(def_rss_key)); + cfg->aq_rss.hash_secret_key_size = sizeof(def_rss_key); + } + + hw_atl_b0_hw_rss_set(hw, &cfg->aq_rss); + hw_atl_b0_hw_rss_hash_set(hw, &cfg->aq_rss); + return 0; +} + +static int +atl_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct aq_hw_cfg_s *cfg = + ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); + + rss_conf->rss_hf = cfg->is_rss ? ATL_RSS_OFFLOAD_ALL : 0; + if (rss_conf->rss_key) { + rss_conf->rss_key_len = cfg->aq_rss.hash_secret_key_size; + memcpy(rss_conf->rss_key, cfg->aq_rss.hash_secret_key, + rss_conf->rss_key_len); + } + + return 0; +} + RTE_PMD_REGISTER_PCI(net_atlantic, rte_atl_pmd); RTE_PMD_REGISTER_PCI_TABLE(net_atlantic, pci_id_atl_map); RTE_PMD_REGISTER_KMOD_DEP(net_atlantic, "* igb_uio | uio_pci_generic"); diff --git a/drivers/net/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/atlantic/hw_atl/hw_atl_b0.c index 1df60719b..415b11559 100644 --- a/drivers/net/atlantic/hw_atl/hw_atl_b0.c +++ b/drivers/net/atlantic/hw_atl/hw_atl_b0.c @@ -98,8 +98,7 @@ static int hw_atl_b0_hw_qos_set(struct aq_hw_s *self) /* bug 5124 - rss hashing types - FIXME */ #define pif_rpf_rss_dont_use_udp_i (1 << 0) - -int hw_atl_b0_hw_rss_hash_type_set(struct aq_hw_s *self) +static int hw_atl_b0_hw_rss_hash_type_set(struct aq_hw_s *self) { /* misc */ unsigned int control_reg_val = @@ -297,32 +296,6 @@ int hw_atl_b0_hw_init_rx_path(struct aq_hw_s *self) return aq_hw_err_from_flags(self); } -/* calc hash only in IPv4 header, regardless of presence of TCP */ -#define pif_rpf_rss_ipv4_hdr_only_i (1 << 4) -/* calc hash only if TCP header and IPv4 */ -#define pif_rpf_rss_ipv4_tcp_hdr_only_i (1 << 3) -/* calc hash only in IPv6 header, regardless of presence of TCP */ -#define pif_rpf_rss_ipv6_hdr_only_i (1 << 2) -/* calc hash only if TCP header and IPv4 */ -#define pif_rpf_rss_ipv6_tcp_hdr_only_i (1 << 1) -/* bug 5124 - rss hashing types - FIXME */ -#define pif_rpf_rss_dont_use_udp_i (1 << 0) - - -int hw_atl_b0_hw_rss_hash_type_set(struct aq_hw_s *self) -{ - /* misc */ - unsigned int control_reg_val = - IS_CHIP_FEATURE(RPF2) ? 0x000F0000U : 0x00000000U; - - /* RSS hash type set for IP/TCP */ - control_reg_val |= pif_rpf_rss_ipv4_hdr_only_i;//0x1EU; - - aq_hw_write_reg(self, 0x5040U, control_reg_val); - - return aq_hw_err_from_flags(self); -} - static int hw_atl_b0_hw_mac_addr_set(struct aq_hw_s *self, u8 *mac_addr) { int err = 0; -- 2.13.3.windows.1