From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0086.outbound.protection.outlook.com [104.47.2.86]) by dpdk.org (Postfix) with ESMTP id 0AE965F17 for ; Wed, 25 Apr 2018 14:59:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=SnTk8+iOt+2s7iv6YedZO1mU3V8lqiWEwcECy3padWE=; b=aOMMLJ7CoKqmJZqh5j1Z5VtkfmcAMJ5GZ6WMlN+fiVS6EWivipJ1jmDo/g9G+RXlvNRzLViTzg9hWzELTe5d4fvbAHh+LO9t0RbdP9RP4NkGK121jmpm0JEmyEI8iSRZo/3J8P7kj+erc8FD7bjoK1DC5DIGLxoLXmebALR/urA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=hemant.agrawal@nxp.com; Received: from bf-netperf1.ap.freescale.net (14.142.187.166) by DB4PR04MB0765.eurprd04.prod.outlook.com (2a01:111:e400:984d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.15; Wed, 25 Apr 2018 12:59:07 +0000 From: Hemant Agrawal To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shreyansh.jain@nxp.com Date: Wed, 25 Apr 2018 18:26:59 +0530 Message-Id: <1524661022-21484-2-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1524661022-21484-1-git-send-email-hemant.agrawal@nxp.com> References: <1524661022-21484-1-git-send-email-hemant.agrawal@nxp.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.142.187.166] X-ClientProxiedBy: MAXPR0101CA0035.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:d::21) To DB4PR04MB0765.eurprd04.prod.outlook.com (2a01:111:e400:984d::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB4PR04MB0765; X-Microsoft-Exchange-Diagnostics: 1; DB4PR04MB0765; 3:2wQdJJ+oO6vKLg9mfy3G2A/v3O7245R53eH0tWkQtbUVQOa6AS2PYf7wEpAZRpEFnhS2xjZ8vlq6y7bmbW5sdO3vn9XzgkVvYd32KTZp268TBwFPYMz36xt/9VT/W6R3pKDmWeZuRN2Iyhh36gC8rUKtkhqhIxTa1Nfn8E3LuG/q69npCDoTpfFmqE5pXv543wVfpPWmFqb/6VjzMrIC93NVnw16zRagvot5QgYuycPY/7kLYEGXa13Ao9L2eoNL; 25:cmOVZCfTxHXccB1e0PjaJ/uLEEWXDIhbzc51VSvOmqkHDwZ2mVDmEiCO+jbRFnFlTGEhW60okeRZkPXqzMn+SGqVSXsE4vo4MnmsIl5e7mFAONZna6KVb5SqlLMzrzagzQuoU55Q0KWkEMNO5v6QdX8vv3PYdaBOfm1a7dABYHSuCsEvAgkF7rGwRwB4/gsSnHJDm8coZRAkeJ0YZWUd2PeBQjxbj4q12t9byoiB2Vn3S35QGA/W7Ee+Bb//mAoHEAylkucdAoZpjNo4/8yAIlJ+8j05jeWHUonEzrDL+7HLAEfrfsrerGWKYYLC35usBMLfwh/VQZDRyfSeyH1Xlzri3bXJ2KHog1HC5Ez6Yak=; 31:CfStKa5W7QzrfxGA/+L52s94wF8aiSK+7yPZ2mMQGzWLbPw1X/9csROfPcMTWUzLU7StbMArnHWlCTNTP76l6YrfmyA4kQv4LCklHmQ5ENVykh974uGsK3jdfJIVNI4l4X+QZG/kKhulUrWT8RQG0namDTYKrDZd9xNnMGKT2wN3mZ9AftkIp1wXLMboPvnN4zvn8glJQEfAlUEOCnLSWlrfAqbCuLTOb2KfUvGUUgs= X-MS-TrafficTypeDiagnostic: DB4PR04MB0765: X-Microsoft-Exchange-Diagnostics: 1; DB4PR04MB0765; 20:Z3aFVqg34UsXC/Up81puhre9d+JmtKEWNFjCGoPNZKssX7s8WR5WDRiA7pFQetwQ4x4S3aFnj9AHYdNUyAl7nu6+SYeAOHqHlE0he+UAxu97HL3nyf9pEGW48YfRbMLChlBTnrQnEUGbNHPUOob8s09Wb2GScoay3MQJWE8lsxeCgFz1SnA2DNcDgipr6fPKHdC8kM3j09/Kwn1T2RUnHj9BeWJmbkSUi6awZybM+SP9bUU5UuA8N1m6YvGsVTLGrMVp8Zqa5ef4HAIIfxwdIigEDfMS65kIYRgxM2ZDrp7Y/cy2XLwKqNWavDMBbIma4e2sCWy+9kG1lSkYeILyiXHQ/y1RP8cfhMd+/4OVBUrLNWvjmQY9aI7ZxDI9OS2CwzDc3dinZb3hvFQsYX1e97/m4bH2FaeyhN/iQ+dZXLCRWJRR+C1lTFpUbHCw9EvlhAIDHMjUSZ+qsx/JgyMyMH6MOKQ/QuxU1uxtvX0he9NzlxAWr4M1s6mIUT9++kuC; 4:0M+v++22sgoUiCE7tsnUCwMmvsZew+DAyoJPvtr1NvWZ8EyDvLZ9PT2FNhPrpMgNz15MMoXEiiR5O4yXgaf4wI3llhK26o420JqjuWhmwPWSMTDSmGKs6EuI0kxtPx9wBtgkfew1b0AvsnldvXS1SbGRY5thcTaTkN3pF58A3ooI6bOXqOWUlZ71ItYIXF5r/8XGgQWNDCj/SmW977SOIELOybvinYVcPjnyRtHiG18Xn9RKBYoc0jUMmXZXZKe7axm/D8/VORIZVI8SuHo3rw5XRLtTvQmu2eEIZ0XzXBVHXRw6JP+EZNga1ip8Mg7R X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231232)(944501410)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:DB4PR04MB0765; BCL:0; PCL:0; RULEID:; SRVR:DB4PR04MB0765; X-Forefront-PRVS: 06530126A4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(346002)(376002)(39860400002)(396003)(366004)(189003)(199004)(3846002)(186003)(26005)(6506007)(956004)(76176011)(97736004)(2616005)(11346002)(105586002)(446003)(6486002)(5009440100003)(486006)(386003)(52116002)(2351001)(2361001)(51416003)(5660300001)(25786009)(478600001)(2906002)(44832011)(316002)(16586007)(50226002)(47776003)(6666003)(6916009)(36756003)(8936002)(476003)(6512007)(106356001)(6116002)(55236004)(66066001)(53936002)(16526019)(68736007)(4326008)(86362001)(7736002)(81156014)(575784001)(8676002)(81166006)(50466002)(305945005)(48376002)(110426005); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR04MB0765; H:bf-netperf1.ap.freescale.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB4PR04MB0765; 23:gzkzEgLuiOWhVkX18CNlYK9qfFNkXQGMKGKlKjBDz?= =?us-ascii?Q?ZUmQ84rgqaWrc7/DdirMLzblzWsjvZtS1mzeZSsQOqIkxXkhu5eyK7jXu/Y1?= =?us-ascii?Q?DaXCWeM/26bI0YHod/pADN4wYCC6Tkii1T9mjfZPv95myedLCbf0i+JQ6v9G?= =?us-ascii?Q?TacWMTOUr8X6hb1QZ0NUandQqEyTOkICe9TM2Kl0zItrgauShgR2wizwkGzc?= =?us-ascii?Q?Ds92vXsVU7Gconb6to80odyIm2cuw8XLtwOrXt08v+xZ9pjqBR6tS6kaM6WM?= =?us-ascii?Q?UT3N4pv/QLKlOcQcY7BqBa3zKsqyjk9begXlPZspWZBeptK2H4P77R1lrd+w?= =?us-ascii?Q?j39My5aBz2ecb8OW2zFdaduCS/UIt0urNckhiudrPv4EX5TQjQhTmCciYEPy?= =?us-ascii?Q?6zYJvyAERZAGZ9WFsyG98Ww/tiwfo7MN3g2Ad6fFchOV0e0zdyAZ32zOOG2A?= =?us-ascii?Q?8Azw/gEmgn5Evhf32COwpYDLxdIVAmRsLz80e7fuyEm7z5n79zHBay+8enKV?= =?us-ascii?Q?4gfFu1IofkpSfaqioZoIrousChtS516B63+N77jVuDhoNrTDbayyTzun3Dkd?= =?us-ascii?Q?BJClnT8ICC2RpfMBobKzEEzp71+smkXVtZ+jHo+XyQlXu5Dq5KtHKK6PwcIG?= =?us-ascii?Q?C/8prj1nx7Cy7g7pFXA7SXpZ1+Pt2mapxxapCyjuLiXSfJyNKpTjXHGLM1nM?= =?us-ascii?Q?6el9b4rOMQnJhKYlUbklVRjzldJjna7CGlwPC0WgtM7TwLy9gykEHM+QYvIu?= =?us-ascii?Q?UWbaQ8Sm3xjIZuEYZZSd9uP/dFZZlRjp/GQE+XTyi3BrBCI94VQNneCT9d16?= =?us-ascii?Q?3o4scYTPy/ksYeUZMSqb7OWYus/big7ioL6cTGMqiEk2OAjxZpLapMJ1CX6i?= =?us-ascii?Q?aMivKLtzeGfyISE85cLwdmj7b5swGvgsjg8jQQ9M71x6locWpB/1t7AQ/Jnj?= =?us-ascii?Q?EmHnpo/cvhfmImEyiLwZrSrfLadAWeIsdNuyy+VcNIoMoEjdBTkQzHISAo8v?= =?us-ascii?Q?1svgUxPEuC8+2TQhYhe0jzNABsPGpZGMhdW0m8Jqe4yzyKZnlpo1tZpUjyHH?= =?us-ascii?Q?uLvogPgpuUYdL7+dh/GVstApDbeN5064DubCEy8hvaVx/sgOgymNLZwYIUPK?= =?us-ascii?Q?uG6SyJS9Nik00edekDC6zkhLM3Mz7a2mQ02yQlLzQHjjlsIre9XCsYK1rnQu?= =?us-ascii?Q?QyKX9ZCVlDVHs/VBNFju6uwCRileL1mLfIy3BQW5UjatqLtvLpnEWfgp3qqK?= =?us-ascii?Q?yhQFKP+37ZV3W7dsXTj9+YQkJQlfzzqAjNiXAXqySM41HgLUDGECtkdZYJKK?= =?us-ascii?Q?1zNsvezGfnQjx8pYiiRfKLd0s5meyhlo+ZQX51+We0B?= X-Microsoft-Antispam-Message-Info: 04I4sRwOgHSwiyBdkTDaEwNsffdnVvxq3/NQ77gg8azTsfr0ze5YeshalLCU+EYSMMRmUfycMBemly0DL3AUJmlPWyIb7xRAiiFC0OULMJIifvYRPyF5A6EJQ/en5sLBzs79U0Nem13W7DnJTnWqwwabFZm+ZESAU+IOI7CceFCJ/atmrFgErMoEb5X0zFFT X-Microsoft-Exchange-Diagnostics: 1; DB4PR04MB0765; 6:7xTKW0NYl7bw+qxSESkh2UgL96TGX/UnXvntlWgpMAKorIiWXnkyF3rg1UxPggnD6l38KUgkp89dFA8VoNi2E+lx1gQZ1bSfNH/ngImZmez0u7FfiBx7sovIH5dvaafqVfdTNshCixBQW0+GBDb9oOn/ThFeXDax9PmFkQcIOlmivwjTZsSDLhuSd1KW1sCKHl+0HHg0l1jcJOxLYSq+1badKb+nF/JYkIijLvXoRtyEi/qRM3BPfe0rlCFIwSjzRRNS9FuXd7YzoElAUQa1FEAbf/swewboo3XBJMhP8x6m+o8pR8fOnHzrL167hymstd47yqJQeepx0/s2W5sjmZGR9peru10IgHcQXPpYgN7ebtW738MiGZVZZlytqGiMVlESDznur6xix9BfKmM5oTPQyXdQnS4bLMR1pta3phtsMJr70dAj0Aw4uBwzzVcRirShJu2/M3ju+xukXLI86w==; 5:1ZNH82tJ8Uzo3IaIcu/mKcGpIrRWFXOutjl/BAIwzFkx2A64JHCDtvrfSSD8gSWmyiC4cE3dS4sGXxs0EPS/+YhUuGpVbj9o/o9GFFDXDpEnil9TBqWTLcQQX9ZH85KhYq+B69KYfF/f4G8omBgCqjVTq9sFwaAqej76xLgxFPY=; 24:PTz2t9qU0HWRnijIVzh+twixdwXq//YRxouf1e6LWhaQ59jwDlq++I61mzsnlvlMA+K2iv5xCBTAfARTsFrKokC2gb6BuE/da+kh/3M34Mo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB4PR04MB0765; 7:seqIlQtnu3K/wVZbmncwVtdoW1rodcD+4pYKxWQZQvCmsUDRML450p0AfzeOm4G1qkgi2RBeyZ0L+dbw88sahmxWQlAIUe008a3JR4s40GT+MmpwpUn5J5+h/q8ywfQhwwED1AW5/Jx8A0TnTcfq+e43d9aMNxfDKO0JFns56iZStlATG8YEfRI2OtQwj9Kh7lLgeUIGyYt/S0b+5Sdh1hlBohG7k9Iq7LNjPVZyh9ras+C+GMdXx1S0sWdJ9Kvl X-MS-Office365-Filtering-Correlation-Id: d6b5e20e-7cd8-4a18-c604-08d5aaac5560 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2018 12:59:07.4733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d6b5e20e-7cd8-4a18-c604-08d5aaac5560 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR04MB0765 Subject: [dpdk-dev] [PATCH 2/5] bus/fslmc: support device blacklisting 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: Wed, 25 Apr 2018 12:59:11 -0000 Signed-off-by: Hemant Agrawal --- doc/guides/cryptodevs/dpaa2_sec.rst | 11 ++++ doc/guides/nics/dpaa2.rst | 11 ++++ drivers/bus/fslmc/fslmc_bus.c | 107 ++++++++++++++++++++++++++++++++---- drivers/bus/fslmc/rte_fslmc.h | 4 ++ 4 files changed, 122 insertions(+), 11 deletions(-) diff --git a/doc/guides/cryptodevs/dpaa2_sec.rst b/doc/guides/cryptodevs/dpaa2_sec.rst index 5558ea5..0fdd673 100644 --- a/doc/guides/cryptodevs/dpaa2_sec.rst +++ b/doc/guides/cryptodevs/dpaa2_sec.rst @@ -134,6 +134,17 @@ Supported DPAA2 SoCs * LS2088A/LS2048A * LS1088A/LS1048A +Whitelisting & Blacklisting +--------------------------- + +For blacklisting a DPAA2 SEC device, following commands can be used. + + .. code-block:: console + + -b "fslmc:dpseci.x" -- ... + +Where x is the device object id as configured in resource container. + Limitations ----------- diff --git a/doc/guides/nics/dpaa2.rst b/doc/guides/nics/dpaa2.rst index 8e38eff..7d069aa 100644 --- a/doc/guides/nics/dpaa2.rst +++ b/doc/guides/nics/dpaa2.rst @@ -561,6 +561,17 @@ which are lower than logging ``level``. Using ``pmd.dpaa2`` as log matching criteria, all PMD logs can be enabled which are lower than logging ``level``. +Whitelisting & Blacklisting +--------------------------- + +For blacklisting a DPAA2 device, following commands can be used. + + .. code-block:: console + + -b "fslmc:dpni.x" -- ... + +Where x is the device object id as configured in resource container. + Limitations ----------- diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c index d0b3261..e7c8cc6 100644 --- a/drivers/bus/fslmc/fslmc_bus.c +++ b/drivers/bus/fslmc/fslmc_bus.c @@ -23,6 +23,7 @@ int dpaa2_logtype_bus; #define VFIO_IOMMU_GROUP_PATH "/sys/kernel/iommu_groups" +#define FSLMC_BUS_NAME fslmc struct rte_fslmc_bus rte_fslmc_bus; uint8_t dpaa2_virt_mode; @@ -93,6 +94,22 @@ insert_in_device_list(struct rte_dpaa2_device *newdev) TAILQ_INSERT_TAIL(&rte_fslmc_bus.device_list, newdev, next); } +static struct rte_devargs * +fslmc_devargs_lookup(struct rte_dpaa2_device *dev) +{ + struct rte_devargs *devargs; + char dev_name[32]; + + RTE_EAL_DEVARGS_FOREACH("fslmc", devargs) { + devargs->bus->parse(devargs->name, &dev_name); + if (strcmp(dev_name, dev->device.name) == 0) { + DPAA2_BUS_INFO("**Devargs matched %s", dev_name); + return devargs; + } + } + return NULL; +} + static void dump_device_list(void) { @@ -182,6 +199,7 @@ scan_one_fslmc_device(char *dev_name) DPAA2_BUS_ERR("Unable to clone device name. Out of memory"); goto cleanup; } + dev->device.devargs = fslmc_devargs_lookup(dev); /* Add device in the fslmc device list */ insert_in_device_list(dev); @@ -200,6 +218,54 @@ scan_one_fslmc_device(char *dev_name) } static int +rte_fslmc_parse(const char *name, void *addr) +{ + uint16_t dev_id; + char *t_ptr; + char *sep = strchr(name, ':'); + + if (strncmp(name, RTE_STR(FSLMC_BUS_NAME), + strlen(RTE_STR(FSLMC_BUS_NAME)))) { + return -EINVAL; + } + + if (!sep) { + DPAA2_BUS_ERR("Incorrect device name observed"); + return -EINVAL; + } + + t_ptr = (char *)(sep + 1); + + if (strncmp("dpni", t_ptr, 4) && + strncmp("dpseci", t_ptr, 6) && + strncmp("dpcon", t_ptr, 5) && + strncmp("dpbp", t_ptr, 4) && + strncmp("dpio", t_ptr, 4) && + strncmp("dpci", t_ptr, 4) && + strncmp("dpmcp", t_ptr, 5) && + strncmp("dpdmai", t_ptr, 6)) { + DPAA2_BUS_ERR("Unknown or unsupported device"); + return -EINVAL; + } + + t_ptr = strchr(name, '.'); + if (!t_ptr) { + DPAA2_BUS_ERR("Incorrect device string observed (%s)", t_ptr); + return -EINVAL; + } + + t_ptr = (char *)(t_ptr + 1); + if (sscanf(t_ptr, "%hu", &dev_id) <= 0) { + DPAA2_BUS_ERR("Incorrect device string observed (%s)", t_ptr); + return -EINVAL; + } + + if (addr) + strcpy(addr, (char *)(sep + 1)); + return 0; +} + +static int rte_fslmc_scan(void) { int ret; @@ -274,6 +340,8 @@ static int rte_fslmc_probe(void) { int ret = 0; + int probe_all; + struct rte_dpaa2_device *dev; struct rte_dpaa2_driver *drv; @@ -303,6 +371,8 @@ rte_fslmc_probe(void) return 0; } + probe_all = rte_fslmc_bus.bus.conf.scan_mode != RTE_BUS_SCAN_WHITELIST; + TAILQ_FOREACH(dev, &rte_fslmc_bus.device_list, next) { TAILQ_FOREACH(drv, &rte_fslmc_bus.driver_list, next) { ret = rte_fslmc_match(drv, dev); @@ -312,9 +382,21 @@ rte_fslmc_probe(void) if (!drv->probe) continue; - ret = drv->probe(drv, dev); - if (ret) - DPAA2_BUS_ERR("Unable to probe"); + if (dev->device.devargs && + dev->device.devargs->policy == RTE_DEV_BLACKLISTED) { + DPAA2_BUS_LOG(DEBUG, "%s Blacklisted, skipping", + dev->device.name); + continue; + } + + if (probe_all || + (dev->device.devargs && + dev->device.devargs->policy == + RTE_DEV_WHITELISTED)) { + ret = drv->probe(drv, dev); + if (ret) + DPAA2_BUS_ERR("Unable to probe"); + } break; } } @@ -329,17 +411,19 @@ static struct rte_device * rte_fslmc_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, const void *data) { + const struct rte_dpaa2_device *dstart; struct rte_dpaa2_device *dev; - TAILQ_FOREACH(dev, &rte_fslmc_bus.device_list, next) { - if (start != NULL) { - if (&dev->device == start) - start = NULL; /* starting point found */ - continue; - } - + if (start != NULL) { + dstart = RTE_DEV_TO_FSLMC_CONST(start); + dev = TAILQ_NEXT(dstart, next); + } else { + dev = TAILQ_FIRST(&rte_fslmc_bus.device_list); + } + while (dev != NULL) { if (cmp(&dev->device, data) == 0) return &dev->device; + dev = TAILQ_NEXT(dev, next); } return NULL; @@ -422,6 +506,7 @@ struct rte_fslmc_bus rte_fslmc_bus = { .bus = { .scan = rte_fslmc_scan, .probe = rte_fslmc_probe, + .parse = rte_fslmc_parse, .find_device = rte_fslmc_find_device, .get_iommu_class = rte_dpaa2_get_iommu_class, }, @@ -430,7 +515,7 @@ struct rte_fslmc_bus rte_fslmc_bus = { .device_count = {0}, }; -RTE_REGISTER_BUS(fslmc, rte_fslmc_bus.bus); +RTE_REGISTER_BUS(FSLMC_BUS_NAME, rte_fslmc_bus.bus); RTE_INIT(fslmc_init_log); static void diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h index 69d0fec..de40e86 100644 --- a/drivers/bus/fslmc/rte_fslmc.h +++ b/drivers/bus/fslmc/rte_fslmc.h @@ -31,6 +31,7 @@ extern "C" { #include #include #include +#include #include @@ -49,6 +50,9 @@ struct rte_dpaa2_driver; TAILQ_HEAD(rte_fslmc_device_list, rte_dpaa2_device); TAILQ_HEAD(rte_fslmc_driver_list, rte_dpaa2_driver); +#define RTE_DEV_TO_FSLMC_CONST(ptr) \ + container_of(ptr, const struct rte_dpaa2_device, device) + extern struct rte_fslmc_bus rte_fslmc_bus; enum rte_dpaa2_dev_type { -- 2.7.4