From patchwork Wed Jun 22 09:06:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shreyansh Jain X-Patchwork-Id: 14203 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 8BBA0C438; Wed, 22 Jun 2016 11:07:45 +0200 (CEST) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0085.outbound.protection.outlook.com [65.55.169.85]) by dpdk.org (Postfix) with ESMTP id B1015C40A for ; Wed, 22 Jun 2016 11:06:37 +0200 (CEST) Received: from DM2PR03CA0037.namprd03.prod.outlook.com (10.141.96.36) by CY1PR0301MB1628.namprd03.prod.outlook.com (10.162.166.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.523.12; Wed, 22 Jun 2016 09:06:36 +0000 Received: from BL2FFO11FD029.protection.gbl (2a01:111:f400:7c09::155) by DM2PR03CA0037.outlook.office365.com (2a01:111:e400:2428::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.523.12 via Frontend Transport; Wed, 22 Jun 2016 09:06:36 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; 6wind.com; dkim=none (message not signed) header.d=none; 6wind.com; dmarc=none action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD029.mail.protection.outlook.com (10.173.160.69) with Microsoft SMTP Server (TLS) id 15.1.517.7 via Frontend Transport; Wed, 22 Jun 2016 09:06:35 +0000 Received: from Tophie.ap.freescale.net (Tophie.ap.freescale.net [10.232.14.199]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id u5M9663h022009; Wed, 22 Jun 2016 02:06:33 -0700 From: Shreyansh Jain To: CC: , Date: Wed, 22 Jun 2016 14:36:27 +0530 Message-ID: <1466586396-22618-9-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1466586396-22618-1-git-send-email-shreyansh.jain@nxp.com> References: <1466510566-9240-1-git-send-email-shreyansh.jain@nxp.com> <1466586396-22618-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131110599959016991; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(77096005)(110136002)(50986999)(81156014)(50226002)(87936001)(2950100001)(81166006)(50466002)(2906002)(189998001)(2351001)(229853001)(105606002)(4326007)(48376002)(47776003)(8676002)(106466001)(5003940100001)(586003)(104016004)(8936002)(76176999)(68736007)(6806005)(19580405001)(69596002)(86362001)(7846002)(19580395003)(356003)(36756003)(11100500001)(85426001)(33646002)(92566002)(97736004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB1628; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD029; 1:Zsny1wvXhGUrgQYFGbKPN1TtvPanbyrutEkDG0VgtfyImDTV2/RKb6gBHj7PBvC+4B3DiPLP4796GejfsnZsTKFDdEJ2Lj+YO0BkKyh8N25mmuLAP9AKhiaWRTL9kzs0M6TYADpvp298ShH+ua5k5SflelPcjoJM1w/KXYanRiwEjZ2ZR580PH6MCbzAQ7qasF0R4Z4qRR9R5+2Dq0QtXxjgmeseWmINtfTJoe5bSn/mTF/adPPISnu/ceZW+X8VTazE34LxKDmiTpkmh/r1yeUYanfEBn7MQXvxrRdJEmLllttH8CRT1CxaT+5TXF+MoUT5Bs7gcRCMv9TieJ9gUMZogjSkhskkuwnH7jt9bxqsuT3OGyLSwp9P21AHyFwEBgE6yfwUgzl/diIJCrleryDVoV2ZznHEX+oVco+RCq2EhOh4mHkrcqAuROR17uBEYdfwRU5FRAMEjU/wAJydQfzzpNs57ChBmUVDcb3/GBhC/xsKxnCvW1L3jIftGAWeven3l3rc6cHrE/Bc5Dx7TtyiMxnc2q+72nH1WSLEogVxrqnMLPFVn6OM2AveGecXo9k7JrCG2KpuxoR8vL4kmQ== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 4e93c52a-b9f4-4440-14be-08d39a7c834d X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1628; 2:u5pnViOiYKZPNidHNNBtbPSrJgRzgCopjnDka4swU6nbhusLEL/4ULm28upk2Whzox1DwrkoYHco9zs8gxg/ZRT9kxNNgz29xcrKCMI6s8cIk60ex493u5oqgL1UtLYMwiIFks/fxmz7JrlEWAFK4X7N+ZwVEs72Z+md+NbuErfxtRek67cT03L6rVb8BJCS; 3:56dBBujU1YzY+afZgERDGFs3uk4f8ScKsezN72cPs1g4mTQWe/hLj32aB0N19cXg+n8elr6eEsVW9t1fkS1oOquKxloidTqymbtZ1up3VhzUxMMZiTqOG845IFFnLyPygznYRL5qf+epSY9uq1nLskxodrKdtXSk944XB1rHufyTZzFOG4cFP/7yoLvrQ9t4RINLtTBmVWrcjncpmofWStYbPXxbsatXBl3VefOoOO0=; 25:4ln/mL+hPJgmmkwdXgzTdTBA6pbTjTP3z771ChjvaHg2Q7g5kVPvv1vnh2H1EZISsYfDtlyaUj0dcFiDyKtwvW3lQT6+E448FndH388cv3YtBJISL+Rttr33NQMclw9K20t+S88vkvKO1ug91JepB/IKBe0d3JmHqx6a5+IZjjqdSjKBdx1PJ5Mk82b6B6j922n+u9Ocytd6Z4DuIZ/FPO7dhXgkdQWx3Z7B+O0czns4vUo7JvwphZyp6bPvoaB+0X/He3caO4khf2NkIvVZHHHn+N+qtCvBoW7Jh6yVzHjT65ziMoQBpa61liHBjX7VQ3KlTtE5yq21uUl1to7RGlogd41oa5WiU7709t5TLA7xZRp22mdL77KGkUgCyGbhsa5tsisczYW+DXngGxo2xv/rGWs5gTc/aCigrzya/tU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1628; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13017025)(5005006)(8121501046)(13023025)(13018025)(13015025)(13024025)(10201501046)(3002001)(6055026); SRVR:CY1PR0301MB1628; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB1628; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1628; 4:vML26Yl6ECOS/5bBx2l0wBOjMJa8rW03Z/Po+IGOAAxSNyhOSlEV0EPRuP6s5ql+3b71DcwY7Bhs2LwqlPaeAXCuK2v18Nkwj2uA8IyOBfIuKD5YdeloVQgCKOQAYMpQIfmy5W2AJdEbhs4Jot5NhACGUV0XDXI0P/i7mEFmREHk7yX5vL/BiOvxX6d0xGOE6EI98YYJ2BSGPH+aLdHuUHne7VkiMXA7awcrkAKR0lqiGFs+rWEOHZkXZnsIHh6skD5VQPqAE6osVKe9s1HNuQEOeXAlMt4vWdGXixYb3PuEbecL+uEUJ2JfWQdkFSk9YIcme3+95qXbZMiahvK1ThvATBGE8G6OqIcfS+xpx91EVwUrRypZ7W49ogDh5SjoXEd066tEXmvsvXS3WIgypkS+mMerc9/FYxrj+5tgEGmH5Ms+O9INp6eKlSF6AldBNOrXEr3WlzItAq1gHWDD31D4+1NFqeCosiy0nHE4YvFTyaWz/RxshlPjKnEb/HPqMcm5+WN2CIOMr9yBos+6vA== X-Forefront-PRVS: 0981815F2F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB1628; 23:2Zn+O/I+SDm2wj7mvbBBR1X/wAAaUUaclO1r8gx?= =?us-ascii?Q?7HfMbHX0qPlAu+p0Iv9jSba720CkgWsxySNZeJ7fTEajOg/JxUulfmPp8HCR?= =?us-ascii?Q?2uM6bZGJVZ3Jjcx7murKs8XegLyHuQ8yPPZnqbuE8W8vTC7zCDfZBcUNwxzK?= =?us-ascii?Q?qY4kcbr6RQXw8ysa77JvOo7ifQqFgUkUJzBojfUXp1+2uaIfnsWBJnb91iFp?= =?us-ascii?Q?hnbxf+EICQNq8fN4EJrJAIYDFwJ02So45shECKF3XfPhhKP1KZApfs9bF6Vh?= =?us-ascii?Q?Sdu2e89kjcsWXY3eHOnxjCqAujsyyQX9g61rrhN406Koz5GDCx6vVVeUeNQ1?= =?us-ascii?Q?SdTuHHbd969PDq3I+2tUmCJRW1jl7AXPcvD15hJA3t3vBU6eEBuSQ3yb+OiR?= =?us-ascii?Q?7p1WqwN8wp94gUfDpkVPx3kPoheQ4vNL8tKx8D4R0HEOiSxjM/LBZRTe2Wsv?= =?us-ascii?Q?V6y9JnHhdPzsbmrJdqbvEcAgreh9pEIE8QP6kdg6UsTOFRN3UuDYm8SnyLIl?= =?us-ascii?Q?o8ZYofCezGTpYMdHoBzt+4EDXe6fCVT9rN62fAwYTMJJzD2Au4FyO+jOM3A3?= =?us-ascii?Q?460Jr53NtCicMmFgPNynvjYqcyt2q32B02IyAj6xSqAXFPfdYAgKcBDz8QyH?= =?us-ascii?Q?AiLUjhQs87LvtuInuRJmYt8Ex70AdWd09Ab0qnEWA2QqkytmamMpH8Nzcx3j?= =?us-ascii?Q?rk0sB2s3PFHXa+TZFtGhIQ35I8umJ2T4xSWoERYqde4lSFOice6icRmhzY4C?= =?us-ascii?Q?bNAK5q7VQCukFc+4Jg4RZaNNd/jf0ujhgcr/zRkdNFPdCC/6RUgpkJWdfsns?= =?us-ascii?Q?YHY8x4m/RmerN4K7psmO2uQVyDotYa4A0MYpAIpSfeZByjhPr4GBOK2+Us+a?= =?us-ascii?Q?HtOtxLzR6s+v7gbStNDv6R06no2N5Iley0Ij4CQnr0SpLfir25gz8Rdo01HK?= =?us-ascii?Q?30v846Rot+l7bvuzMWqvUj/67LWT2/n43Vj6fQfEpVVTwaQ1ehBFKf3YRZ9e?= =?us-ascii?Q?zNtRpmZpU39uacoqhxfsxa6MbVON+8EiTB6VpQQItwbdsCH6EQMXdG4jTv5X?= =?us-ascii?Q?QgjiGg3+suzU93QmXZCSCEs/SCXYQFCNz73N75OZC3MzckzwYgieCVD874Nf?= =?us-ascii?Q?YGPkfPJsqXA0=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1628; 6:jvs1I6OlKMQ+fy66P1jKkarI3BrDjej33wPGrjh73gGjvD6TEHJxVW6f9nHYmJTeSp7SdPnf4HPEyTgRxzeIh6GsVsrSX1BgqPwBw46BLcP4dZTlo9PKbVYXZVfCE3F6YW8GxWAsFbS1Lak2T+m5WmA/zMlGjhTF1oo8eSJLrtK04Iiojt4H0E/H6r2VgOEnZIEJXu2GmwMy3hFt5C0mVIc+rNl8rqXZnpIW+xfS9wgQVVsDiBp83CpnuCtOkg2tKgHzjcwmIrHcZMTRjYDgg5GaYih3x2kgsVl9dtPIUDk7YabSTknigN9048/2vFz6; 5:yQMzuWPD8Ld4Ispte34ZF4oI9didTPW+Gkd1dkDyjcVsdM+TTuXZxIRRjnsyviYFOqw0+G5h6rHjr7baTT5e8IsAOqslOp/fF3Ua7wOLuFlb4+oG4CJzIvGozwEn6px3HRaJiwgkZMYMkdc+5x8AjobyF3i4xEYIwZhoMFtW3Lk=; 24:1ZKSsANcxTEVymVN0tw/pv1lpgz1Y8ZD6D0Fpj2UWpchj0Knbwr+TZ+t9u8Ylm6gR22i1HVaQQ+JHdb/PFHm3iIREu/mxG/eJkfyRfP7kmg=; 7:l4rDZJG3Sq2irNFa4i6rjek+JjxuaEKl/UgBgh4DrdlfHkFs58CUW9AjKZ5gf9LqU5PBsQZvbGP9KGORQ0MwIvgjP67KdU5WE4KiQB20aacnFsGSDOwq1GPySHi+bLNfQ+HMZlm75FbToeqY0UZQW634DCbk9SXa6FqxCTkxMLLPjK7kjGrWs/gBMvMdHneNxxfWdokgeGzuk8qU6a7I65okgFJIF2XamSskGLu6ZRoaKXLQFGcHkMFmFYAkaZF/d0IhvlNpvELDUPNuHoy6Pg== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2016 09:06:35.6676 (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.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1628 Subject: [dpdk-dev] [PATCH v5 08/17] drivers: convert all pdev drivers as 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Simplify crypto and ethdev pci drivers init by using newly introduced init macros and helpers. Those drivers then don't need to register as "rte_driver"s anymore. virtio and mlx* drivers use the general purpose RTE_INIT macro, as they both need some special stuff to be done before registering a pci driver. Signed-off-by: David Marchand Signed-off-by: Shreyansh Jain --- drivers/crypto/qat/rte_qat_cryptodev.c | 16 +++-------- drivers/net/bnx2x/bnx2x_ethdev.c | 35 +++++------------------- drivers/net/cxgbe/cxgbe_ethdev.c | 24 +++-------------- drivers/net/e1000/em_ethdev.c | 16 +++-------- drivers/net/e1000/igb_ethdev.c | 40 +++++----------------------- drivers/net/ena/ena_ethdev.c | 18 +++---------- drivers/net/enic/enic_ethdev.c | 23 +++------------- drivers/net/fm10k/fm10k_ethdev.c | 23 +++------------- drivers/net/i40e/i40e_ethdev.c | 26 +++--------------- drivers/net/i40e/i40e_ethdev_vf.c | 25 +++--------------- drivers/net/ixgbe/ixgbe_ethdev.c | 47 +++++---------------------------- drivers/net/mlx4/mlx4.c | 20 +++----------- drivers/net/mlx5/mlx5.c | 19 +++---------- drivers/net/nfp/nfp_net.c | 21 +++------------ drivers/net/qede/qede_ethdev.c | 40 ++++++---------------------- drivers/net/szedata2/rte_eth_szedata2.c | 25 +++--------------- drivers/net/virtio/virtio_ethdev.c | 26 +++++------------- drivers/net/vmxnet3/vmxnet3_ethdev.c | 23 +++------------- 18 files changed, 76 insertions(+), 391 deletions(-) diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c index 0ff3944..970970a 100644 --- a/drivers/crypto/qat/rte_qat_cryptodev.c +++ b/drivers/crypto/qat/rte_qat_cryptodev.c @@ -117,21 +117,11 @@ static struct rte_cryptodev_driver rte_qat_pmd = { .name = "rte_qat_pmd", .id_table = pci_id_qat_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .devinit = rte_cryptodev_pci_probe, + .devuninit = rte_cryptodev_pci_remove, }, .cryptodev_init = crypto_qat_dev_init, .dev_private_size = sizeof(struct qat_pmd_private), }; -static int -rte_qat_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - return rte_cryptodev_pmd_driver_register(&rte_qat_pmd, PMD_PDEV); -} - -static struct rte_driver pmd_qat_drv = { - .type = PMD_PDEV, - .init = rte_qat_pmd_init, -}; - -PMD_REGISTER_DRIVER(pmd_qat_drv); +RTE_EAL_PCI_REGISTER(rte_qat_pmd); diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index 071b44f..5ab3c75 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -506,11 +506,15 @@ static struct eth_driver rte_bnx2x_pmd = { .name = "rte_bnx2x_pmd", .id_table = pci_id_bnx2x_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_bnx2x_dev_init, .dev_private_size = sizeof(struct bnx2x_softc), }; +RTE_EAL_PCI_REGISTER(rte_bnx2x_pmd); + /* * virtual function driver struct */ @@ -519,36 +523,11 @@ static struct eth_driver rte_bnx2xvf_pmd = { .name = "rte_bnx2xvf_pmd", .id_table = pci_id_bnx2xvf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_bnx2xvf_dev_init, .dev_private_size = sizeof(struct bnx2x_softc), }; -static int rte_bnx2x_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - rte_eth_driver_register(&rte_bnx2x_pmd); - - return 0; -} - -static int rte_bnx2xvf_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - rte_eth_driver_register(&rte_bnx2xvf_pmd); - - return 0; -} - -static struct rte_driver rte_bnx2x_driver = { - .type = PMD_PDEV, - .init = rte_bnx2x_pmd_init, -}; - -static struct rte_driver rte_bnx2xvf_driver = { - .type = PMD_PDEV, - .init = rte_bnx2xvf_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_bnx2x_driver); -PMD_REGISTER_DRIVER(rte_bnx2xvf_driver); +RTE_EAL_PCI_REGISTER(rte_bnx2xvf_pmd); diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c index 04eddaf..1389371 100644 --- a/drivers/net/cxgbe/cxgbe_ethdev.c +++ b/drivers/net/cxgbe/cxgbe_ethdev.c @@ -869,29 +869,11 @@ static struct eth_driver rte_cxgbe_pmd = { .name = "rte_cxgbe_pmd", .id_table = cxgb4_pci_tbl, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_cxgbe_dev_init, .dev_private_size = sizeof(struct port_info), }; -/* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of PCI CXGBE devices. - */ -static int rte_cxgbe_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - CXGBE_FUNC_TRACE(); - - rte_eth_driver_register(&rte_cxgbe_pmd); - return 0; -} - -static struct rte_driver rte_cxgbe_driver = { - .name = "cxgbe_driver", - .type = PMD_PDEV, - .init = rte_cxgbe_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_cxgbe_driver); +RTE_EAL_PCI_REGISTER(rte_cxgbe_pmd); diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 653be09..c67e67f 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -368,18 +368,15 @@ static struct eth_driver rte_em_pmd = { .id_table = pci_id_em_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_em_dev_init, .eth_dev_uninit = eth_em_dev_uninit, .dev_private_size = sizeof(struct e1000_adapter), }; -static int -rte_em_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - rte_eth_driver_register(&rte_em_pmd); - return 0; -} +RTE_EAL_PCI_REGISTER(rte_em_pmd); static int em_hw_init(struct e1000_hw *hw) @@ -1771,10 +1768,3 @@ eth_em_set_mc_addr_list(struct rte_eth_dev *dev, e1000_update_mc_addr_list(hw, (u8 *)mc_addr_set, nb_mc_addr); return 0; } - -struct rte_driver em_pmd_drv = { - .type = PMD_PDEV, - .init = rte_em_pmd_init, -}; - -PMD_REGISTER_DRIVER(em_pmd_drv); diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index b822992..a523944 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -983,12 +983,16 @@ static struct eth_driver rte_igb_pmd = { .id_table = pci_id_igb_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_igb_dev_init, .eth_dev_uninit = eth_igb_dev_uninit, .dev_private_size = sizeof(struct e1000_adapter), }; +RTE_EAL_PCI_REGISTER(rte_igb_pmd); + /* * virtual function driver struct */ @@ -997,18 +1001,15 @@ static struct eth_driver rte_igbvf_pmd = { .name = "rte_igbvf_pmd", .id_table = pci_id_igbvf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_igbvf_dev_init, .eth_dev_uninit = eth_igbvf_dev_uninit, .dev_private_size = sizeof(struct e1000_adapter), }; -static int -rte_igb_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - rte_eth_driver_register(&rte_igb_pmd); - return 0; -} +RTE_EAL_PCI_REGISTER(rte_igbvf_pmd); static void igb_vmdq_vlan_hw_filter_enable(struct rte_eth_dev *dev) @@ -1021,20 +1022,6 @@ igb_vmdq_vlan_hw_filter_enable(struct rte_eth_dev *dev) E1000_WRITE_REG(hw, E1000_RCTL, rctl); } -/* - * VF Driver initialization routine. - * Invoked one at EAL init time. - * Register itself as the [Virtual Poll Mode] Driver of PCI IGB devices. - */ -static int -rte_igbvf_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - - rte_eth_driver_register(&rte_igbvf_pmd); - return 0; -} - static int igb_check_mq_mode(struct rte_eth_dev *dev) { @@ -4844,16 +4831,6 @@ eth_igb_set_eeprom(struct rte_eth_dev *dev, return nvm->ops.write(hw, first, length, data); } -static struct rte_driver pmd_igb_drv = { - .type = PMD_PDEV, - .init = rte_igb_pmd_init, -}; - -static struct rte_driver pmd_igbvf_drv = { - .type = PMD_PDEV, - .init = rte_igbvf_pmd_init, -}; - static int eth_igb_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id) { @@ -5014,6 +4991,3 @@ eth_igb_configure_msix_intr(struct rte_eth_dev *dev) E1000_WRITE_FLUSH(hw); } - -PMD_REGISTER_DRIVER(pmd_igb_drv); -PMD_REGISTER_DRIVER(pmd_igbvf_drv); diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 8d01e9a..dc32435 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1431,23 +1431,11 @@ static struct eth_driver rte_ena_pmd = { .name = "rte_ena_pmd", .id_table = pci_id_ena_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_ena_dev_init, .dev_private_size = sizeof(struct ena_adapter), }; -static int -rte_ena_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - rte_eth_driver_register(&rte_ena_pmd); - return 0; -}; - -struct rte_driver ena_pmd_drv = { - .name = "ena_driver", - .type = PMD_PDEV, - .init = rte_ena_pmd_init, -}; - -PMD_REGISTER_DRIVER(ena_pmd_drv); +RTE_EAL_PCI_REGISTER(rte_ena_pmd); diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 6bea940..d5e395d 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -660,28 +660,11 @@ static struct eth_driver rte_enic_pmd = { .name = "rte_enic_pmd", .id_table = pci_id_enic_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_enicpmd_dev_init, .dev_private_size = sizeof(struct enic), }; -/* Driver initialization routine. - * Invoked once at EAL init time. - * Register as the [Poll Mode] Driver of Cisco ENIC device. - */ -static int -rte_enic_pmd_init(__rte_unused const char *name, - __rte_unused const char *params) -{ - ENICPMD_FUNC_TRACE(); - - rte_eth_driver_register(&rte_enic_pmd); - return 0; -} - -static struct rte_driver rte_enic_driver = { - .type = PMD_PDEV, - .init = rte_enic_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_enic_driver); +RTE_EAL_PCI_REGISTER(rte_enic_pmd); diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index ce053b0..8ec8f5e 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -3064,29 +3064,12 @@ static struct eth_driver rte_pmd_fm10k = { .id_table = pci_id_fm10k_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_fm10k_dev_init, .eth_dev_uninit = eth_fm10k_dev_uninit, .dev_private_size = sizeof(struct fm10k_adapter), }; -/* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of PCI FM10K devices. - */ -static int -rte_pmd_fm10k_init(__rte_unused const char *name, - __rte_unused const char *params) -{ - PMD_INIT_FUNC_TRACE(); - rte_eth_driver_register(&rte_pmd_fm10k); - return 0; -} - -static struct rte_driver rte_fm10k_driver = { - .type = PMD_PDEV, - .init = rte_pmd_fm10k_init, -}; - -PMD_REGISTER_DRIVER(rte_fm10k_driver); +RTE_EAL_PCI_REGISTER(rte_pmd_fm10k); diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index f94ad87..f2712ab 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -645,12 +645,16 @@ static struct eth_driver rte_i40e_pmd = { .id_table = pci_id_i40e_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_i40e_dev_init, .eth_dev_uninit = eth_i40e_dev_uninit, .dev_private_size = sizeof(struct i40e_adapter), }; +RTE_EAL_PCI_REGISTER(rte_i40e_pmd); + static inline int rte_i40e_dev_atomic_read_link_status(struct rte_eth_dev *dev, struct rte_eth_link *link) @@ -680,28 +684,6 @@ rte_i40e_dev_atomic_write_link_status(struct rte_eth_dev *dev, } /* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of PCI IXGBE devices. - */ -static int -rte_i40e_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - rte_eth_driver_register(&rte_i40e_pmd); - - return 0; -} - -static struct rte_driver rte_i40e_driver = { - .type = PMD_PDEV, - .init = rte_i40e_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_i40e_driver); - -/* * Initialize registers for flexible payload, which should be set by NVM. * This should be removed from code once it is fixed in NVM. */ diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 37af399..3411831 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1555,34 +1555,15 @@ static struct eth_driver rte_i40evf_pmd = { .name = "rte_i40evf_pmd", .id_table = pci_id_i40evf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = i40evf_dev_init, .eth_dev_uninit = i40evf_dev_uninit, .dev_private_size = sizeof(struct i40e_adapter), }; -/* - * VF Driver initialization routine. - * Invoked one at EAL init time. - * Register itself as the [Virtual Poll Mode] Driver of PCI Fortville devices. - */ -static int -rte_i40evf_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - - rte_eth_driver_register(&rte_i40evf_pmd); - - return 0; -} - -static struct rte_driver rte_i40evf_driver = { - .type = PMD_PDEV, - .init = rte_i40evf_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_i40evf_driver); +RTE_EAL_PCI_REGISTER(rte_i40evf_pmd); static int i40evf_dev_configure(struct rte_eth_dev *dev) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index e11a431..dd521e8 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1493,12 +1493,16 @@ static struct eth_driver rte_ixgbe_pmd = { .id_table = pci_id_ixgbe_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_ixgbe_dev_init, .eth_dev_uninit = eth_ixgbe_dev_uninit, .dev_private_size = sizeof(struct ixgbe_adapter), }; +RTE_EAL_PCI_REGISTER(rte_ixgbe_pmd); + /* * virtual function driver struct */ @@ -1507,39 +1511,15 @@ static struct eth_driver rte_ixgbevf_pmd = { .name = "rte_ixgbevf_pmd", .id_table = pci_id_ixgbevf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_ixgbevf_dev_init, .eth_dev_uninit = eth_ixgbevf_dev_uninit, .dev_private_size = sizeof(struct ixgbe_adapter), }; -/* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of PCI IXGBE devices. - */ -static int -rte_ixgbe_pmd_init(const char *name __rte_unused, const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - - rte_eth_driver_register(&rte_ixgbe_pmd); - return 0; -} - -/* - * VF Driver initialization routine. - * Invoked one at EAL init time. - * Register itself as the [Virtual Poll Mode] Driver of PCI niantic devices. - */ -static int -rte_ixgbevf_pmd_init(const char *name __rte_unused, const char *param __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - - rte_eth_driver_register(&rte_ixgbevf_pmd); - return 0; -} +RTE_EAL_PCI_REGISTER(rte_ixgbevf_pmd); static int ixgbe_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) @@ -7232,16 +7212,3 @@ ixgbevf_dev_allmulticast_disable(struct rte_eth_dev *dev) ixgbevf_update_xcast_mode(hw, IXGBEVF_XCAST_MODE_NONE); } - -static struct rte_driver rte_ixgbe_driver = { - .type = PMD_PDEV, - .init = rte_ixgbe_pmd_init, -}; - -static struct rte_driver rte_ixgbevf_driver = { - .type = PMD_PDEV, - .init = rte_ixgbevf_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_ixgbe_driver); -PMD_REGISTER_DRIVER(rte_ixgbevf_driver); diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 9ed1491..b594433 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -5837,15 +5837,10 @@ static struct eth_driver mlx4_driver = { .dev_private_size = sizeof(struct priv) }; -/** - * Driver initialization routine. - */ -static int -rte_mlx4_pmd_init(const char *name, const char *args) +RTE_INIT(rte_mlx4_pmd_init); +static void +rte_mlx4_pmd_init(void) { - (void)name; - (void)args; - RTE_BUILD_BUG_ON(sizeof(wr_id_t) != sizeof(uint64_t)); /* * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use @@ -5856,13 +5851,4 @@ rte_mlx4_pmd_init(const char *name, const char *args) setenv("RDMAV_HUGEPAGES_SAFE", "1", 1); ibv_fork_init(); rte_eal_pci_register(&mlx4_driver.pci_drv); - return 0; } - -static struct rte_driver rte_mlx4_driver = { - .type = PMD_PDEV, - .name = MLX4_DRIVER_NAME, - .init = rte_mlx4_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_mlx4_driver) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 041cfc3..1989a37 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -646,14 +646,10 @@ static struct eth_driver mlx5_driver = { .dev_private_size = sizeof(struct priv) }; -/** - * Driver initialization routine. - */ -static int -rte_mlx5_pmd_init(const char *name, const char *args) +RTE_INIT(rte_mlx5_pmd_init); +static void +rte_mlx5_pmd_init(void) { - (void)name; - (void)args; /* * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use * huge pages. Calling ibv_fork_init() during init allows @@ -663,13 +659,4 @@ rte_mlx5_pmd_init(const char *name, const char *args) setenv("RDMAV_HUGEPAGES_SAFE", "1", 1); ibv_fork_init(); rte_eal_pci_register(&mlx5_driver.pci_drv); - return 0; } - -static struct rte_driver rte_mlx5_driver = { - .type = PMD_PDEV, - .name = MLX5_DRIVER_NAME, - .init = rte_mlx5_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_mlx5_driver) diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index ef7011e..951c8b4 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -2468,29 +2468,14 @@ static struct eth_driver rte_nfp_net_pmd = { .id_table = pci_id_nfp_net_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = nfp_net_init, .dev_private_size = sizeof(struct nfp_net_adapter), }; -static int -nfp_net_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - PMD_INIT_LOG(INFO, "librte_pmd_nfp_net version %s\n", - NFP_NET_PMD_VERSION); - - rte_eth_driver_register(&rte_nfp_net_pmd); - return 0; -} - -static struct rte_driver rte_nfp_net_driver = { - .type = PMD_PDEV, - .init = nfp_net_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_nfp_net_driver); +RTE_EAL_PCI_REGISTER(rte_nfp_net_pmd); /* * Local variables: diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 1273fd3..4fcb54c 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1056,7 +1056,9 @@ static struct eth_driver rte_qedevf_pmd = { .id_table = pci_id_qedevf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, - }, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, + }, .eth_dev_init = qedevf_eth_dev_init, .eth_dev_uninit = qedevf_eth_dev_uninit, .dev_private_size = sizeof(struct qede_dev), @@ -1068,39 +1070,13 @@ static struct eth_driver rte_qede_pmd = { .id_table = pci_id_qede_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, - }, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, + }, .eth_dev_init = qede_eth_dev_init, .eth_dev_uninit = qede_eth_dev_uninit, .dev_private_size = sizeof(struct qede_dev), }; -static int -rte_qedevf_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - rte_eth_driver_register(&rte_qedevf_pmd); - - return 0; -} - -static int -rte_qede_pmd_init(const char *name __rte_unused, - const char *params __rte_unused) -{ - rte_eth_driver_register(&rte_qede_pmd); - - return 0; -} - -static struct rte_driver rte_qedevf_driver = { - .type = PMD_PDEV, - .init = rte_qede_pmd_init -}; - -static struct rte_driver rte_qede_driver = { - .type = PMD_PDEV, - .init = rte_qedevf_pmd_init -}; - -PMD_REGISTER_DRIVER(rte_qede_driver); -PMD_REGISTER_DRIVER(rte_qedevf_driver); +RTE_EAL_PCI_REGISTER(rte_qede_pmd); +RTE_EAL_PCI_REGISTER(rte_qedevf_pmd); diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 985a8d6..6815dbb 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1574,31 +1574,12 @@ static struct eth_driver szedata2_eth_driver = { .pci_drv = { .name = RTE_SZEDATA2_PCI_DRIVER_NAME, .id_table = rte_szedata2_pci_id_table, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = rte_szedata2_eth_dev_init, .eth_dev_uninit = rte_szedata2_eth_dev_uninit, .dev_private_size = sizeof(struct pmd_internals), }; -static int -rte_szedata2_init(const char *name __rte_unused, - const char *args __rte_unused) -{ - rte_eth_driver_register(&szedata2_eth_driver); - return 0; -} - -static int -rte_szedata2_uninit(const char *name __rte_unused) -{ - return 0; -} - -static struct rte_driver rte_szedata2_driver = { - .type = PMD_PDEV, - .name = RTE_SZEDATA2_DRIVER_NAME, - .init = rte_szedata2_init, - .uninit = rte_szedata2_uninit, -}; - -PMD_REGISTER_DRIVER(rte_szedata2_driver); +RTE_EAL_PCI_REGISTER(szedata2_eth_driver); diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index a833740..9f5faf1 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1255,29 +1255,24 @@ static struct eth_driver rte_virtio_pmd = { .name = "rte_virtio_pmd", .id_table = pci_id_virtio_map, .drv_flags = RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_virtio_dev_init, .eth_dev_uninit = eth_virtio_dev_uninit, .dev_private_size = sizeof(struct virtio_hw), }; -/* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of PCI virtio devices. - * Returns 0 on success. - */ -static int -rte_virtio_pmd_init(const char *name __rte_unused, - const char *param __rte_unused) +RTE_INIT(rte_virtio_pmd_init); +static void +rte_virtio_pmd_init(void) { if (rte_eal_iopl_init() != 0) { PMD_INIT_LOG(ERR, "IOPL call failed - cannot use virtio PMD"); - return -1; + return; } - rte_eth_driver_register(&rte_virtio_pmd); - return 0; + rte_eal_pci_register(&rte_virtio_pmd.pci_drv); } /* @@ -1499,10 +1494,3 @@ __rte_unused uint8_t is_rx) { return 0; } - -static struct rte_driver rte_virtio_driver = { - .type = PMD_PDEV, - .init = rte_virtio_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_virtio_driver); diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index 29b469c..79c5f6d 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -332,25 +332,15 @@ static struct eth_driver rte_vmxnet3_pmd = { .name = "rte_vmxnet3_pmd", .id_table = pci_id_vmxnet3_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, + .devinit = rte_eth_dev_pci_probe, + .devuninit = rte_eth_dev_pci_remove, }, .eth_dev_init = eth_vmxnet3_dev_init, .eth_dev_uninit = eth_vmxnet3_dev_uninit, .dev_private_size = sizeof(struct vmxnet3_hw), }; -/* - * Driver initialization routine. - * Invoked once at EAL init time. - * Register itself as the [Poll Mode] Driver of Virtual PCI VMXNET3 devices. - */ -static int -rte_vmxnet3_pmd_init(const char *name __rte_unused, const char *param __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); - - rte_eth_driver_register(&rte_vmxnet3_pmd); - return 0; -} +RTE_EAL_PCI_REGISTER(rte_vmxnet3_pmd); static int vmxnet3_dev_configure(struct rte_eth_dev *dev) @@ -948,10 +938,3 @@ vmxnet3_process_events(struct vmxnet3_hw *hw) } #endif - -static struct rte_driver rte_vmxnet3_driver = { - .type = PMD_PDEV, - .init = rte_vmxnet3_pmd_init, -}; - -PMD_REGISTER_DRIVER(rte_vmxnet3_driver);