From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0049.outbound.protection.outlook.com [104.47.34.49]) by dpdk.org (Postfix) with ESMTP id 4F4B768CA for ; Fri, 16 Sep 2016 06:32:29 +0200 (CEST) Received: from BLUPR0301CA0033.namprd03.prod.outlook.com (10.162.113.171) by CY4PR03MB2440.namprd03.prod.outlook.com (10.168.163.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.619.10; Fri, 16 Sep 2016 04:32:28 +0000 Received: from BN1AFFO11FD035.protection.gbl (2a01:111:f400:7c10::149) by BLUPR0301CA0033.outlook.office365.com (2a01:111:e400:5259::43) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.8 via Frontend Transport; Fri, 16 Sep 2016 04:32:27 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD035.mail.protection.outlook.com (10.58.52.159) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.619.6 via Frontend Transport; Fri, 16 Sep 2016 04:32:27 +0000 Received: from Tophie.ap.freescale.net ([10.232.14.87]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u8G4Trfo029256; Thu, 15 Sep 2016 21:32:24 -0700 From: Shreyansh Jain To: CC: , David Marchand , , Thomas Monjalon , Shreyansh Jain Date: Fri, 16 Sep 2016 09:59:43 +0530 Message-ID: <1474000200-16705-9-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1474000200-16705-1-git-send-email-shreyansh.jain@nxp.com> References: <1466510566-9240-1-git-send-email-shreyansh.jain@nxp.com> <1474000200-16705-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131184739476727976; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(2351001)(189998001)(305945005)(229853001)(575784001)(105606002)(106466001)(626004)(97736004)(33646002)(77096005)(76176999)(4326007)(2906002)(50986999)(92566002)(104016004)(2950100001)(47776003)(86362001)(5003940100001)(586003)(356003)(11100500001)(8666005)(7846002)(68736007)(36756003)(8676002)(5890100001)(85426001)(50226002)(50466002)(8936002)(48376002)(110136003)(81156014)(19580405001)(81166006)(87936001)(5660300001)(19580395003)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2440; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD035; 1:aGkdVNm6KG8nhODviNId2xVoKvyAsIYQKz7bmFaAi2EP2OdkDlRpjRo9f5Wd3iUhK2NYK5JZfGoOl3P+pwZBM31+mM6Ea/xQqFRk9vLKLL1aDUVX4qTz4sySu3Tfvu5hUV4l6M2wThTeDa/gnSF85uARGQmhzOX8Eftj/dl5+I2lAXT2K9+9ySfA7zFKsWElwntVpISdJjPvkmA7dvlQmCRWDzYD1hj78vj68H2awJouzUO+20JlCxXnYzDS1+e2G0CRsnQSmrh/5thuKZk462Xx9hoojFf8seNpHhYWesf5kzg+b8gV1NWsxAeUjvo0ixBiflFkYCWSdtuufpEpDQoZWJx3OeWE+57RY9Vhq14QPmUMc/0JCxZj8vMU6BaCXccgMq2qHkl/RQuUq+rXxA3XO59jvWpU5hddT0CEtYOvVw6P1i0UtLSWTmnxFCyKdy4vb5XEeCcE6Wsu/VCnYpni/VlmDTyEjrAzN3vsaDevjxf33yi810KAJVz3106yk2RzXBAGnnhA2YelqOTzHFJaVB+Db+4XscQ/ui6gXYZ/jw6RTX6p+/D1YHwKHUmhp0kKcTUKG5WFQHWzRzPh+5ZLiJdRx1gEzRPLHHvrCpEbcWn8y2OfJUhrDQ0vlHgmnhZ/O3V4uI78zhUQp2HGNbVdIP1ldgt+PlWHqgTFbkOEaL3rSYmNu4Subeqvr7twfZWMf38btzVltPs/w2gEyr1QN+UjzNu+ySWZO8U3nu0= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: b2b8b083-a4ed-4505-5da0-08d3ddea76da X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2440; 2:4Pn3XlcbP7xJ3VRF9pBkCSkHAyh19yrr/hWcVrt5Zv1gqvE7L9S8u4Ts+Xj4fcmOEtJ5V9BrlR8VXEhQa9rdFgzChGw0vQsfG3ZrXhGNhveHx+rJTxIzPavH714K3jjouHXic/WJHiCJd2o9mzSzTEqzWjPKyKYahbAHKvrhWOM6P0mt/ynbjacValTrHDlK; 3:BmO3vhDcVPzheyrsDgU/4B19MJFk2pvVCxOHU9NNs4tsNG/XwBEHMckQWRETrC44/fVFjfIT6xUN6l/oB9cFdXy4CtSyIo42BQmxozDCGCCp73w2arZwGfnfFNnhw/VFO4CC7uTb4blR1jU22vyDtNP6RWrfnQ0zWFHM8QKSpTmg5Lnq+u1F5uF30erCFKMNVHjjF54mLVjTDr1EiQ+PZelVwt3cz87j/Bilb9zPlKk=; 25:sBoEgMswd2SPqtrjCQyeuv9gz4HKkgBM0kOSrsJwng4dTWRPF5TpdAN7QyVI3PTk4J32ljbwO4b+OE80Zi+zT4hN9xLTqmF6ZXlKVa+4zAbJoDWvd8dXZ0+D5Xn/cheVtH4XBZWGXMcPaEGB22zf0Ta2jMM9ethg2+o3MEPHsz5ZOdZV10ymu5vghmMIU/w6Vl5sT0aHT+o635Lc1OasMr+NTt3CSkYHbGbtE175CmPrbB3ovlEfrJmDv0JDenXRd53rKDgaA6VSOlV+wPkLbX+XiusRSxGDMW8Qnq28N0heWEmJdadrKfzizaYlvJp4isbqIP1WvUIn9oArcm9V00cO8jvx9FU4S4IqAF/wYLprI6hvmVMcK9/c/dLxYYzlzYH0sfZqdUImWzecq/33sCKZDrxZGQ+EHx4bc+yp2VU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY4PR03MB2440; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2440; 31:MnoOd5F6KdNHVI9xvYNt2Dda/uPDdvmLZmf6yy0Sa2JC12GAvdNHYJBEV6DTULmBQBe4+9Xrcez9/FX8iUVCGU6Fp9Tcq4ZIJOuSTXmicFR0t41lZmDAZIBDFtDvuPxtgr002CAPiRUx/cw7TIDIaehBciQAO5mgdoFaHcqrlLH2OAX0GlTqopQQAUcbbPYqFMfpdQjiKw1joMsJrrWIdHpJIgeIddoy0iCDzP5ozwg=; 4:RSpXNv7jyStuT/Nbj3i1oe59kT0Af53/FcWi7mivO55cNVI56NBqnnrE7ZQcCtXxuOBX+nZC2qC9RUbP8FAoPUvX67b46r0B5xrc6pSxt8XC1ElF47GdV/Vv1ZT+MSDYePP8PfzGwaDIv1oQW400F4qTg1X/REdFzjBogWSA1kZaTozSxDgqfR99Rq4zGUyLQ4Nwx5tK5Z7NwMjCopEPeruXgqu6u3MLZpRPH9EQyAIc0PK1H0gqpWT5rmARhCkjPA1X9hC6U5I1M6JWeIZi5rCXWLXVt49To+IMEcvw751/b5Hd7ESrGIzZl84tuXsZnt4T7iG84OrSnUjVNRR++UuEw1/n4NPpIufs1mOEBESmuQupJ1DsXcMdC2Eg/EC18Bk29G1zgehvnY5BRsXKCYePNurRXO9Mryx22rXi6nm6DQkCuz0uatvyHc0iR8k/b36tCbjhGFnPA3m62BfiDt1zM/f4e8zuKWOgfHfbfWWl+yNsEYwnaZaYycSBYLE3I/x1Klu2qvzeCWPbQXRwYlGxMBHr91RXWBXryJI5XWo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(13017025)(13015025)(13018025)(13024025)(13023025)(3002001)(10201501046)(6055026); SRVR:CY4PR03MB2440; BCL:0; PCL:0; RULEID:(400006); SRVR:CY4PR03MB2440; X-Forefront-PRVS: 0067A8BA2A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR03MB2440; 23:qSgiFQBqT1L+P4dz9SXCT+wl1ZvEogxzZeA/KIbyJ?= =?us-ascii?Q?nyVmvZQPGDUUcMFQ/SPNncWduZzejcXnc7OryWymOS4OQ3Amrr8YMIN5QYWH?= =?us-ascii?Q?7A41YD5N/kSiaTytu6rrCAoSVU3ET2QfhvC5Ps6UTIDF6uYB6CldbKWgQWH/?= =?us-ascii?Q?fixhKrYl6Mbd4Z1M1Wk81NCXxFxMUHT3sdzuakAjvuLP70kPa0qaJzARJcT3?= =?us-ascii?Q?Lwn1xOTnY71gdcv7Z5mMZ5/u9TjTI+br7EtxRPvItV+xVB4wdJWd/SwFDmKr?= =?us-ascii?Q?ohWg/kspEU9CqkzkHbvhSpvlr8v2fH60obFMUBmm8N4iDbC404/3fdilkAWQ?= =?us-ascii?Q?CS4Lycb0D+EdDMCc4Yxrzz8wASIAzxqzTho3qlFmFOuqvImLXHXUomaHGNke?= =?us-ascii?Q?kc+hbrQxbur2K6Tm0y+Gl+k+YTKPLD5Zeoe5aLeUUU0X/u1aOMG/QGSMWNIP?= =?us-ascii?Q?6BBO4KNNu5i4++WZi/sX/2jt52Aw5DtehU1LG5c7KrYaALarV8dwW3Kngy1D?= =?us-ascii?Q?dC+JIhAqdRQGXzVyd5nqLSdfoE4HwSPjGGFE64tJHOxnt7qENq3KqsNIs3dR?= =?us-ascii?Q?f2qieNnkzkGd9TuiMqfR9r1wJChHWqtNJk5CuRoAGcghfzClMCV2ybBzdAQt?= =?us-ascii?Q?MeUsQDU5q8QUK3anPFIIKGhTqJDqC0ZpGdDnJiE+rGnR/3I5iba94DlRSxdN?= =?us-ascii?Q?MvzjQNx844j8D+f1HAwiyq+UJ52/xqDwqav6/U93YDcCxAgeiHlzpFofLISz?= =?us-ascii?Q?cmkvjssirwKCUe8QDuLB45HoJdl8Q8vc9HaMlt89iFNjx56LgN/n9Es530+V?= =?us-ascii?Q?W5lGk6WPFWeGNWfYw0nOKGGvwND+A+HfYLgq4yu0z8/Jvoqi0Xs8wEqYiLCF?= =?us-ascii?Q?+aFp1ukLA1DHsHWbdk3ckH/TPFes/FDAQ/qLuvKlItSTVG2Pwvxx4R9iyK0N?= =?us-ascii?Q?DxuEVclzrrTrg8s1AFCkqPaf30Iy+FVh69s8YKVn1QIK6pb+khIHUu79s/a/?= =?us-ascii?Q?LoAJQgPaS7iyMP9KQ9U95ltfMR4ZWTO3Eca/P5009CKjl3ZxpNS+DKfy+SpN?= =?us-ascii?Q?JSt18oI/t/vE2EXTNJpOw/ZVBHMrueNYk1R3/WOUtpYQuonnEppqFoai8AC2?= =?us-ascii?Q?hjFuKOAC2FQhZAIDHCiTpTtX/fK4JBuGn6MBIdStE4kIeOTZoxU0fDePscno?= =?us-ascii?Q?k1swGX6bUIUco0y5krcnEBB8niQ9ztKkTGYQx9zgP7E/UntfzOc+gtlSQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2440; 6:fa82kkFQHEvQnWN3/jCs4qV/HepylwM8Jl2krA/R6qZo3E2VApq7L5uFSXDlIF//Q4PLb1fnlTFU5D9JwqpgORnU1KXc6p2/ZuwkcLxc3ruQxUuw17Xzs3OdgmmxdizAfS+TNrcUhoKfzceIgxlMbEtzz8N83KPdRctcP6ogcHBnfnNqnx8G8gZeLaYQ20T2c8uP0agkruNf1Q99XwAhdvLULz2P6fw/Pt93uoaxedBGK+zX9tTeY7lxnVjuNMx7U9Od+ZT8ZB5zxITzSDJzeoIbsK7OILq1mlkKxVuCu+s=; 5:7B9pqls9m7ZZbhK8efJLbDeMtDhqsc+sBqrIN8/37IvPY43ArNYJz1qxH3jxIQ/e607v2UBi7RMI/zL1hye+ds1ylV4l7gMq3pfAcwt68ZDVv8RTQpyw847LrrnW5sRuz/KJqXpiWC2pxv/53WsD9qExrLH4ufz76sfl4Bkm2s0=; 24:zkdqrZ6e1BddBBpJPlPSgrp+8OUuAf8Q5c1SQ0bPptnnfnvuw6g/gCu7/S28ytSo9Pg+LkkyaMBpLs57JZBZ1feMJYhApkwinEL/eMdt7VU=; 7:iN2d+X5iF25WHziWvUJ3DpH4T7qbt5OzvFbsIr5xN4aujaLJMRPCaVLeZJtF/44jKsZxi1hUC3deRd2GAQUBbxdSCPcDrse4M305Zan2BIVPaip77uPSVdvpBMQzX0fj7HKQQgW7v403wm0Vj5FTc+Pqroync819/zRa5C9gzMYibxWskI+mWy1dxBkeudVQ00trWVUfPHLs/pCDQwqEhLCO2Rdg1dSUoOiNz0TnuuKU/IrIzrU9m5tFi9kRBAhO SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2016 04:32:27.3763 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR03MB2440 Subject: [dpdk-dev] [PATCH v10 08/25] driver: init/uninit common wrappers for PCI drivers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Sep 2016 04:32:30 -0000 From: David Marchand crypto and ethdev drivers aligned to PCI probe/remove. These wrappers are mapped directly to PCI resources. Existing handlers for init/uninit can be easily reused for this. Signed-off-by: David Marchand Signed-off-by: Shreyansh Jain --- lib/librte_cryptodev/rte_cryptodev.c | 17 +++++++++-------- lib/librte_cryptodev/rte_cryptodev_pmd.h | 12 ++++++++++++ lib/librte_cryptodev/rte_cryptodev_version.map | 7 +++++++ lib/librte_ether/rte_ethdev.c | 14 +++++++------- lib/librte_ether/rte_ethdev.h | 13 +++++++++++++ lib/librte_ether/rte_ether_version.map | 9 +++++++++ 6 files changed, 57 insertions(+), 15 deletions(-) diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c index dca368d..910c841 100644 --- a/lib/librte_cryptodev/rte_cryptodev.c +++ b/lib/librte_cryptodev/rte_cryptodev.c @@ -429,9 +429,9 @@ rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size, return cryptodev; } -static int -rte_cryptodev_init(struct rte_pci_driver *pci_drv, - struct rte_pci_device *pci_dev) +int +rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv, + struct rte_pci_device *pci_dev) { struct rte_cryptodev_driver *cryptodrv; struct rte_cryptodev *cryptodev; @@ -490,8 +490,8 @@ rte_cryptodev_init(struct rte_pci_driver *pci_drv, return -ENXIO; } -static int -rte_cryptodev_uninit(struct rte_pci_device *pci_dev) +int +rte_cryptodev_pci_remove(struct rte_pci_device *pci_dev) { const struct rte_cryptodev_driver *cryptodrv; struct rte_cryptodev *cryptodev; @@ -539,15 +539,16 @@ rte_cryptodev_pmd_driver_register(struct rte_cryptodev_driver *cryptodrv, { /* Call crypto device initialization directly if device is virtual */ if (type == PMD_VDEV) - return rte_cryptodev_init((struct rte_pci_driver *)cryptodrv, + return rte_cryptodev_pci_probe( + (struct rte_pci_driver *)cryptodrv, NULL); /* * Register PCI driver for physical device intialisation during * PCI probing */ - cryptodrv->pci_drv.probe = rte_cryptodev_init; - cryptodrv->pci_drv.remove = rte_cryptodev_uninit; + cryptodrv->pci_drv.probe = rte_cryptodev_pci_probe; + cryptodrv->pci_drv.remove = rte_cryptodev_pci_remove; rte_eal_pci_register(&cryptodrv->pci_drv); diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h index 9a9174f..450a376 100644 --- a/lib/librte_cryptodev/rte_cryptodev_pmd.h +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h @@ -536,6 +536,18 @@ rte_cryptodev_pmd_driver_register(struct rte_cryptodev_driver *crypto_drv, void rte_cryptodev_pmd_callback_process(struct rte_cryptodev *dev, enum rte_cryptodev_event_type event); +/** + * Wrapper for use by pci drivers as a .probe function to attach to a crypto + * interface. + */ +int rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv, + struct rte_pci_device *pci_dev); + +/** + * Wrapper for use by pci drivers as a .remove function to detach a crypto + * interface. + */ +int rte_cryptodev_pci_remove(struct rte_pci_device *pci_dev); #ifdef __cplusplus } diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map index a08fd20..1fc0d57 100644 --- a/lib/librte_cryptodev/rte_cryptodev_version.map +++ b/lib/librte_cryptodev/rte_cryptodev_version.map @@ -39,3 +39,10 @@ DPDK_16.07 { rte_cryptodev_parse_vdev_init_params; } DPDK_16.04; + +DPDK_16.11 { + global: + + rte_cryptodev_pci_probe; + rte_cryptodev_pci_remove; +} DPDK_16.07; diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index d07348e..f534967 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -245,9 +245,9 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev) return 0; } -static int -rte_eth_dev_init(struct rte_pci_driver *pci_drv, - struct rte_pci_device *pci_dev) +int +rte_eth_dev_pci_probe(struct rte_pci_driver *pci_drv, + struct rte_pci_device *pci_dev) { struct eth_driver *eth_drv; struct rte_eth_dev *eth_dev; @@ -299,8 +299,8 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv, return diag; } -static int -rte_eth_dev_uninit(struct rte_pci_device *pci_dev) +int +rte_eth_dev_pci_remove(struct rte_pci_device *pci_dev) { const struct eth_driver *eth_drv; struct rte_eth_dev *eth_dev; @@ -357,8 +357,8 @@ rte_eth_dev_uninit(struct rte_pci_device *pci_dev) void rte_eth_driver_register(struct eth_driver *eth_drv) { - eth_drv->pci_drv.probe = rte_eth_dev_init; - eth_drv->pci_drv.remove = rte_eth_dev_uninit; + eth_drv->pci_drv.probe = rte_eth_dev_pci_probe; + eth_drv->pci_drv.remove = rte_eth_dev_pci_remove; rte_eal_pci_register(ð_drv->pci_drv); } diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 96575e8..83079e9 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -4372,6 +4372,19 @@ rte_eth_dev_get_port_by_name(const char *name, uint8_t *port_id); int rte_eth_dev_get_name_by_port(uint8_t port_id, char *name); +/** + * Wrapper for use by pci drivers as a .probe function to attach to a ethdev + * interface. + */ +int rte_eth_dev_pci_probe(struct rte_pci_driver *pci_drv, + struct rte_pci_device *pci_dev); + +/** + * Wrapper for use by pci drivers as a .remove function to detach a ethdev + * interface. + */ +int rte_eth_dev_pci_remove(struct rte_pci_device *pci_dev); + #ifdef __cplusplus } #endif diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map index 45ddf44..17e7448 100644 --- a/lib/librte_ether/rte_ether_version.map +++ b/lib/librte_ether/rte_ether_version.map @@ -138,4 +138,13 @@ DPDK_16.07 { rte_eth_dev_get_name_by_port; rte_eth_dev_get_port_by_name; rte_eth_xstats_get_names; + } DPDK_16.04; + +DPDK_16.11 { + global: + + rte_eth_dev_pci_probe; + rte_eth_dev_pci_remove; + +} DPDK_16.07; -- 2.7.4