From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0061.outbound.protection.outlook.com [104.47.38.61]) by dpdk.org (Postfix) with ESMTP id B676BFA5E for ; Wed, 18 Jan 2017 15:03:51 +0100 (CET) Received: from BN3PR03CA0108.namprd03.prod.outlook.com (10.174.66.26) by MWHPR03MB2479.namprd03.prod.outlook.com (10.169.200.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13; Wed, 18 Jan 2017 14:03:49 +0000 Received: from BY2FFO11FD046.protection.gbl (2a01:111:f400:7c0c::178) by BN3PR03CA0108.outlook.office365.com (2603:10b6:400:4::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Wed, 18 Jan 2017 14:03:49 +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 BY2FFO11FD046.mail.protection.outlook.com (10.1.15.170) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Wed, 18 Jan 2017 14:03:49 +0000 Received: from tophie.ap.freescale.net ([10.232.14.39]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0IE2514026776; Wed, 18 Jan 2017 07:03:47 -0700 From: Shreyansh Jain To: CC: , , Shreyansh Jain Date: Wed, 18 Jan 2017 19:35:26 +0530 Message-ID: <1484748329-5418-11-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com> References: <1484735880-17178-1-git-send-email-shreyansh.jain@nxp.com> <1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131292218292515497; (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)(336005)(7916002)(39850400002)(39410400002)(39380400002)(39840400002)(39860400002)(39450400003)(39400400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(8676002)(110136003)(5660300001)(2950100002)(36756003)(97736004)(5003940100001)(105606002)(92566002)(6666003)(86362001)(85426001)(626004)(38730400001)(33646002)(50466002)(77096006)(53936002)(6916009)(106466001)(48376002)(50986999)(81166006)(104016004)(2351001)(2906002)(305945005)(4326007)(8656002)(356003)(76176999)(189998001)(47776003)(81156014)(54906002)(50226002)(8936002)(68736007); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB2479; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD046; 1:EUf8ZqaNBbq8xwyA7uQfA7awazvU4mzp6RU2XuXYo3+kdXNC7+4eAWPdd31ymBozNoY8KyvIRDKRZ8fi+TmJHWE48XwaZbQuYPbqovYefiiP4FxgR9RAZxLP2DgKrrWMnfrT2Me67+wRdwO0fEddEDL/39VwH0GtsH1aBuxZCFLWGXPjgmEf615r6p09DXZ//SgVQ8PN0cXYRMZtWLKZvd5kNKgfFoU8t1nZ8vXWXrWFpQqRu+cgxEatt9pwikHfMYTzWepqlhhigK5yZAtORsekOUVOMoO4DwsCXuWVK6WFH5rxdJ9f90LrvjEprOz/rhoKtYNofJYe5kF/fIvjIhyDoEVXFPG+Eh8N2U20Tx+dkRqUSP265UXHyJNWutbLPX6kUF2peTj2Z9WBA3LQcd2UuBPfZgQdjI25xyrfxP/0VfqHLwscJFAoyj8ZCOOevqToMJeeGxngQ/Tec7CEdAh43mb0vfSACb86+4xudJ2ViCpUt7C/T7Sau+0kBsdaP8gUPBTFiLhxtfp1QMtqDWOI7c+xSFSH3pjkYmGud6CUmefaVqx5vFcbVIOfi1y1ToUHkVORYZBPWCToVuFzBQOZ808r8JntlbwaM3fP6yAUxucEv1AaAcu3CRimaCv3HPVG3oaWIehNYGIq7Q0AezsGEdMVIB7FPHTyJvO38oRxqMURNBjCFKCmfLUFXcoLT1UbKh65ZEF0yx3PC071DA== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: be861582-8212-46dc-32a9-08d43faad390 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:MWHPR03MB2479; X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 3:+91cIGfb9e2pGgrQx9CWKfJhLRvdP2YleMQLfqijXCEVLQ/uzlrepKwUHLOj3ym+z7BzznY9+oZAycZdMcZL+qITD3/PbZV0fWLbK0P5saM+sVGXHtMynTEMWWa6969kJ/rnpzdbyaRToMPEqNNljWbQWvALmknGagQ+c6B6eKfivraPvx8V3ieaYATT9f9duyGEgUiE3aOF78WqsEfntm9wjss8SG8LEW6MyZat2XyQb6MVYIY081h+pZsHSO0bzzDmOIfJGPzvQYcU0uWFo+RFgLHSQhAMAxfvmWuBAlZhQIhSlXNgGdqZYzjk/6POpy3B+gEBO7mQ6Cv6DEkL2KbtbUySVsebpz6uAa+mGV411NJ5qA2xI2/tE+G1Ju8X X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 25:A9+PmI1i3LtaA8b/P718trVJbz/62OBIZ7zda0GRpTs1ELJk3iOKjC24kpSRRy0fj84MeMhBBHjKd6oZjgGx9llW1aT/8DB6UWkN+ZblgVBdO9HdM5VFhybTgZ5sHjFkSBCof4Q0hvSnmJoKu/NzBSk9cFin6JhtiojbqORdylS70+3hcBauLykMnASIpIr/ljiRJ0apCi6kxBF1+jNIQDbZmZFFY3UIzlrxIO45Vay8iBvQOtRCIB+3Cp4o5B07qSoB9u3j/OguTkgfgfg1I/kukMjs5KsSJdDsozRAfTpXXZBqIA/528u3vtAUEcuU5bEFeiTA/FZRD3WyZRe33olS/EU/pxcJGCDlVVAumTQlBwuDK+O0fcYWuB6C6o9uEyh7pwQpLT5YSiTU0Q+3lVmYoBVAxQtJvE/UsskhPi7bVu4+mBL3dhCACpM+Hlrw6gyMGWcBn4qL5mxcvh8gN5YBo9T9x+vaISKDWwPi2bvaIIhITv2Qlk20+N8XHMsB7Ahn+ikcdF75f84AYDICCyOPPJLNhruPztGNHQklqkqz3okmeagKiysy7QSP7OR1cdlQfJxl/pO7dw8PEP4aEi1Jj2bPZ53g/WgJ3O+ag8U5/MPS8GuLPHWgLhuQQ7l/IJ2+QWlENPeY8Oi4HrzeXHE14eEUeTo485TpadlQ6QD3cHiYgN/HHTfETM3kNCaixuyY3F9kej5mjIgrJ1hP8JYreHWtr1HYvh1LnItzgq/zO3sz2P12w21w3Dd2S2LgGlc2nQFqtzX9liyn38RGRv1uSXOgyn43oKOtP2rJ8y4= X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 31:akUDLRqNDVOUV31twFME9OyLGGa5xdcuhdztJ1OOHnfbBVlzr+Z0m9lLvT1zAvwHd4i6QneTXgfcnqdlvwj2p2Brw2R3tSGeIkJTKpQdl9dNfUk9jGTycUg1nPhK6EFocSiL+K38k3ygQS9moCu4sGlchZKE12M0nxAUe/XoW4viH8EeW2M3jMhvUf/SA3Wg7bxs4d3h0p4ZBKe9wWX8QtYHt+22WocvU2L1NlA4GABWIsF/ifmbRe9MIk4P6stgBAZWk2MD413Sc7llH50kYfbbzQaNiM/z2MbiKb2yoJU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13015025)(13018025)(13017025)(13023025)(13024025)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6096035)(20161123561025)(20161123556025)(20161123563025)(20161123565025)(20161123559025); SRVR:MWHPR03MB2479; BCL:0; PCL:0; RULEID:(400006); SRVR:MWHPR03MB2479; X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 4:7XzHKHusUmwIqQbWuRqEFNFKrz38KEadms6m8UodPBuVfSbkcX/opB6WpfFc9hyC2rPfpn9p1sNQ/jBx4Op8Ho5hhb39OCxNDXSxPPZbPkl53C1ZgRmKLjCf6VO8FI8sVSftYJnqFFRR4jHSmh/EyHs82HablXjPAtRKL42FvYWOgokWRdqciB7c0urvZZnFhUlL+uNeQ9Cfds9TNFo88okT51tq3UEI3kHb1iLCx0ci3TpCjngBF/1A/Ph3X71TVkbL4WYMqB3aPX9z8WlPZTE13hPsZUsUGxRf1hpwbJ1I0/SpZ/zfpZptxwPTi7VPxuRMlj+KhgUCw2+3t4wfEt1W77HjrK6QoSCwyyrkCAezV9hMI1g9IhYpH4InDw0D/B15KzC3kO/T0+n7kmyM2H7l2qfwGbUf+WlFTJgHdkHhakj3xnJytUcTW07cDNM8Bk2JmrhukKlXgaQwHSK/twNQSV/6HyxIwNF1kAmEqOgte+t1OiRauMc+7YY8gSgHV2+R0ZrdDT1A7dXfgAm7y/oXzEddmIrtREuwkC3IuqcBVzHVxXt1sT5/MgXNWPvkrsaaMoqIZdrRG7gviQ2MY/B71UEdE7Kfn1MrnkQnWi0WmShkIV+sJ46h7fGIc53o11LGsrdP1b4Dp0DEXqwqGxWeOJwXYH3gj3eSX+ZFFavOf+gY8FYw62BbvpgSeQcI012dMCP7B2Elq0esv9fXq/44oH07HUNllo3PnGgFTCHe2lxdDN2qPx2feBxyLnq73gBvP8OuoQ6HPhbl6Z4+/g== X-Forefront-PRVS: 01917B1794 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR03MB2479; 23:yW07hKlSNcPfkK28BY/NEsiwN3tN43YT36Z0IvBHG?= =?us-ascii?Q?hhHUQnylnH60gg6SEmMbJgtE/W3MDKntnBSZ33bxc3KWCcVwFJdUniB8KMPm?= =?us-ascii?Q?uGG1olwcVinLYDmaZeXhgYPWp9OeXOoVaYia+xwQJemuaO3ZAnMW96TLvAyD?= =?us-ascii?Q?4BCYMmTEB5II5+QJ1Ofu6c3YFWz1eTH/OePFvMcZmZhngHBs6i2Vzn9qlYXZ?= =?us-ascii?Q?wi8SV6w3FlcizzT9mopPnWXG9EPFBdZUFlOrSbbFhHp/EbU3fp1fIXrFP9KV?= =?us-ascii?Q?g+6V5Kjfhcq2brKRgpyNdqyEJycmQdvF4PbqGG016mE3mhXdgYqa+FdKSD2J?= =?us-ascii?Q?sYn82RJsUMoirtrnAsBkoqF72XpS5M4p8s0HcONX2E4TmUYU8SMghHurX2i9?= =?us-ascii?Q?HwhC/KPe1IZuP7mTd+1Pfxxnirpce22mi5Q3xN8/vquWqCe8zbjhmexXbWpR?= =?us-ascii?Q?GxxKGY8rMIn6wj/aAj1+lkkB25WJ+44HjxIGJk/Zc6L/fAzGCtgOmqmliR7u?= =?us-ascii?Q?KR/DZGbGIPAUQS6o3ldV/3HiFdW4nV8RVYRlxrSQfFamBAlHdmvJbbYgjh5p?= =?us-ascii?Q?cU2b7Ph2xh2qOOWMT3+AtCbWCi4u+MGH+6teYwnWsJ9vWVwc+M8/N8YXXS3/?= =?us-ascii?Q?sDoo9gD3Pbiy3MG45g4Y1+ujHPJzxM8DH+4+MReVLsSxtM5kBb6L18Qu6laY?= =?us-ascii?Q?JynIiUBlLL3u3i+T6nKb/vUhn9DAvu8xLu3e8cAYF2RLW2ocaTKw6EPjduz0?= =?us-ascii?Q?Gslcso7I400n4qQCAPGRkma6yHlGewf/h7c/e2VINvkChi+k39oJ2y41+hmk?= =?us-ascii?Q?lr/RR/JBvTZzSZ4UIhVzjDsMT+uNkKgkq6zzG+NgTI9FeuBGUbbYs6rcFlqe?= =?us-ascii?Q?Wv44OJu5HuuV0jvjnU7jZpQogSCIREi4ZaczwAb38IAuRpSo2oDq2JzSwkE9?= =?us-ascii?Q?zIAqrkZtRayetGsEGewsVXNCUev4kxWNHIeQoxUFaIztJmxhMzEBuw5Dufsf?= =?us-ascii?Q?merXYUl8gs3xooMUXdUL6pu52ybQsiPJi3Hz0fqtUijMd2Y9ZIPhXur2KB3C?= =?us-ascii?Q?0NYVFoBYT6muBsqHHKxi1VH+sAugRZXnLMdS1g86t5S3VLjIeOYrkk34n0w4?= =?us-ascii?Q?kRMS6zyqNoPT7qQmNfe5lxHrainx4/0nyzpnM5G15lLOIPPbXp+/oVXEymj7?= =?us-ascii?Q?d/NLa31P2pnTxmkfQWon0xRYyiPE2ynPa/WnRIsWXShYVpfL7TJixOwFLSwz?= =?us-ascii?Q?Bkz5Q3FT//VFj0eQibONnzTzgZODyR4J9ysu8R4y1GB93StDhYeYtqknvZv2?= =?us-ascii?Q?YdZ6IqjvpLpsafE02CaAUY=3D?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 6:49+U65N/87+5qvares9pbMG6fsFqSPbv2uTzJDmBdA8HefA4KPr+IKGkB3YVxY/vwJDIGGS6Vq8ARbWEKU8RfRkgymCPxTErEIyZCpMkmjeUBMqEeFJ8pTl/ph8q0WLwRZ5y3DEqvMOzNQHnJa3ZHN8j0FQhDf2WVfj1sNaw50whOv7yKwWRNa1rJ6H+0PPNQrQEQrIbDMTRH56p3EU92nBy6fVLqHFD5bUMgwig3UWaW0V2zNiOSKMvxatFyBToKYGf/thVJOSaBo3DUHoDIt2iG+sHi8CdOQKsnMd7LmVmWDZbeOnAPuwdsjzmQfvkH235BXojsBp6Mw03GRBRSooSIaQiF4oe/iDadNnoNRWyqkp1UjEiPEFA26tHPLYtRtmxhj0qrfNn//yd+urI2RyHPqeIgGQd63chCZPhkhFH/KgkoA2/+uNWCK04BUAB; 5:683F3/Gu7DY5Q12nO9fcOPApP4XvTKnRWmN1ITnGTKjpXOPgPexFNfZ85u8RzFAaYmAJgTQmaa86uyfjA6IYbEbtyUZHEnbTuP8MQNqQb97+6BHJ2vQAnckOEc0bnHraILK2CU8gKSxU+amBrPOzwXR1i0+xlhwOXS4tDXM1zy4doxX4EvBFrYSAP+Ek0Wd1; 24:Ggz2N4rlu383ynWD6bX5PJBkEuB1ptjSGAvybYi4xbJe7WXfTlUmBsLCDVxraaj+V9zHDrqcb5MGoLX620f2OZk1pWs7W1wcMV9ojIA1J38= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2479; 7:xkgWvcs3ZA3Jjz4pUG/4tEEW18I8BczlM0MUP6yUYtjJSIQN22kn/+2CAsnoh192LUI877QkPk92WYYrROqsy44w7+dDsudufLPqZ1H5UJRP/9efHTgDP+rWZ3gzZz8iUeobdhKguKFhFChrRlGbbKj5rB1F138f90Gu8It5D6omrRvzkwD/dSack/NxhXw+3KeVuoyZMuTUU4J9N9vKSAAdkfGSnk03PY1aS1htAtKfTH/uPso873tBJIEsYiFIWrV4cGzX0JZjkqhFvc4nMadDiEiFvAcHiEmbP0/+23IrdGNUJMy/rdGfdIUXkeXqasNsS6q8WDyEOE3dC7BgCaTwjHCGmDai5V74ztEDabI3oS6ALJCmUbMKefbu/cbVLeU43IqLlGsC6GLmCdXvVpxrUTozphWrQlrZd+ZtdD608Gm3jRTpn7G+i+GNXfFcI1zYdjQoHUBdDF2Jo3D1RQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 14:03:49.0487 (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: MWHPR03MB2479 Subject: [dpdk-dev] [PATCH v10 10/13] test: add Bus based scan and probe test cases for PCI 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, 18 Jan 2017 14:03:52 -0000 Signed-off-by: Shreyansh Jain Reviewed-by: Ferruh Yigit --- app/test/test_pci.c | 164 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 114 insertions(+), 50 deletions(-) diff --git a/app/test/test_pci.c b/app/test/test_pci.c index cda186d..09261cc 100644 --- a/app/test/test_pci.c +++ b/app/test/test_pci.c @@ -38,9 +38,11 @@ #include #include +#include #include #include #include +#include #include "test.h" #include "resource.h" @@ -61,10 +63,31 @@ int test_pci_run = 0; /* value checked by the multiprocess test */ static unsigned pci_dev_count; +struct test_pci_bus; +static struct test_pci_bus *pci_bus; /* global reference to a Test PCI bus */ + +/** List of PCI devices */ +TAILQ_HEAD(test_pci_device_list, rte_pci_device); +/** List of PCI drivers */ +TAILQ_HEAD(test_pci_driver_list, rte_pci_driver); static int my_driver_init(struct rte_pci_driver *dr, struct rte_pci_device *dev); +struct test_pci_bus { + struct rte_bus bus; + struct test_pci_device_list test_device_list; + struct test_pci_driver_list test_driver_list; +}; + +struct test_pci_bus test_pci_bus = { + .bus = { + .name = "test_pci_bus", + .scan = rte_eal_pci_scan, + .probe = rte_eal_pci_probe, + }, +}; + /* IXGBE NICS */ struct rte_pci_id my_driver_id[] = { {RTE_PCI_DEVICE(0x0001, 0x1234)}, @@ -79,7 +102,7 @@ struct rte_pci_id my_driver_id2[] = { struct rte_pci_driver my_driver = { .driver = { - .name = "test_driver" + .name = "test_driver", }, .probe = my_driver_init, .id_table = my_driver_id, @@ -88,7 +111,7 @@ struct rte_pci_driver my_driver = { struct rte_pci_driver my_driver2 = { .driver = { - .name = "test_driver2" + .name = "test_driver2", }, .probe = my_driver_init, .id_table = my_driver_id2, @@ -108,6 +131,55 @@ my_driver_init(__attribute__((unused)) struct rte_pci_driver *dr, return 0; } +/* dump devices on the bus */ +static void +do_pci_device_dump(FILE *f) +{ + int i; + struct rte_pci_device *dev = NULL; + + TAILQ_FOREACH(dev, &test_pci_bus.test_device_list, next) { + + fprintf(f, PCI_PRI_FMT, dev->addr.domain, dev->addr.bus, + dev->addr.devid, dev->addr.function); + fprintf(f, " - vendor:%x device:%x\n", dev->id.vendor_id, + dev->id.device_id); + + for (i = 0; i != sizeof(dev->mem_resource) / + sizeof(dev->mem_resource[0]); i++) { + fprintf(f, " %16.16"PRIx64" %16.16"PRIx64"\n", + dev->mem_resource[i].phys_addr, + dev->mem_resource[i].len); + } + } +} + +/* Dummy implementation for rte_eal_pci_probe() over test_pci_bus */ +static int +do_pci_bus_probe(void) +{ + int ret; + struct rte_pci_device *device; + struct rte_pci_driver *driver; + + TAILQ_FOREACH(device, &test_pci_bus.test_device_list, next) { + TAILQ_FOREACH(driver, &test_pci_bus.test_driver_list, next) { + ret = rte_pci_match(driver, device); + if (!ret) { + if (!driver->probe) + continue; + + device->driver = driver; + ret = driver->probe(driver, device); + if (ret != 0) + return ret; + } + } + } + + return 0; +} + static void blacklist_all_devices(void) { @@ -115,7 +187,7 @@ blacklist_all_devices(void) unsigned i = 0; char pci_addr_str[16]; - TAILQ_FOREACH(dev, &pci_device_list, next) { + TAILQ_FOREACH(dev, &(test_pci_bus.test_device_list), next) { snprintf(pci_addr_str, sizeof(pci_addr_str), PCI_PRI_FMT, dev->addr.domain, dev->addr.bus, dev->addr.devid, dev->addr.function); @@ -142,19 +214,11 @@ static void free_devargs_list(void) } } -/* backup real devices & drivers (not used for testing) */ -struct pci_driver_list real_pci_driver_list = - TAILQ_HEAD_INITIALIZER(real_pci_driver_list); -struct pci_device_list real_pci_device_list = - TAILQ_HEAD_INITIALIZER(real_pci_device_list); - REGISTER_LINKED_RESOURCE(test_pci_sysfs); static int test_pci_setup(void) { - struct rte_pci_device *dev; - struct rte_pci_driver *dr; const struct resource *r; int ret; @@ -167,22 +231,22 @@ test_pci_setup(void) ret = setenv("SYSFS_PCI_DEVICES", "test_pci_sysfs/bus/pci/devices", 1); TEST_ASSERT_SUCCESS(ret, "failed to setenv"); - /* Unregister original devices & drivers lists */ - while (!TAILQ_EMPTY(&pci_driver_list)) { - dr = TAILQ_FIRST(&pci_driver_list); - rte_eal_pci_unregister(dr); - TAILQ_INSERT_TAIL(&real_pci_driver_list, dr, next); - } + TAILQ_INIT(&test_pci_bus.test_device_list); + TAILQ_INIT(&test_pci_bus.test_driver_list); - while (!TAILQ_EMPTY(&pci_device_list)) { - dev = TAILQ_FIRST(&pci_device_list); - TAILQ_REMOVE(&pci_device_list, dev, next); - TAILQ_INSERT_TAIL(&real_pci_device_list, dev, next); - } + /* Create a new Bus called 'test_pci_bus' */ + /* Bus doesn't exist; Create the test bus */ + printf("Creating a Test PCI bus\n"); + rte_bus_register(&test_pci_bus.bus); + pci_bus = &test_pci_bus; + + printf("Scan for Test devices and add to bus\n"); + ret = pci_bus->bus.scan(); - ret = rte_eal_pci_scan(); TEST_ASSERT_SUCCESS(ret, "failed to scan PCI bus"); - rte_eal_pci_dump(stdout); + + printf("Dump of all devices scanned:\n"); + do_pci_device_dump(stdout); return 0; } @@ -190,10 +254,11 @@ test_pci_setup(void) static int test_pci_cleanup(void) { - struct rte_pci_device *dev; - struct rte_pci_driver *dr; + struct rte_pci_device *dev = NULL; + struct rte_pci_driver *dr = NULL; const struct resource *r; int ret; + void *temp; unsetenv("SYSFS_PCI_DEVICES"); @@ -203,28 +268,23 @@ test_pci_cleanup(void) ret = resource_rm_by_tar(r); TEST_ASSERT_SUCCESS(ret, "Failed to delete resource %s", r->name); + TEST_ASSERT_NOT_NULL(pci_bus, "Invalid bus specified"); + /* * FIXME: there is no API in DPDK to free a rte_pci_device so we * cannot free the devices in the right way. Let's assume that we * don't care for tests. */ - while (!TAILQ_EMPTY(&pci_device_list)) { - dev = TAILQ_FIRST(&pci_device_list); - TAILQ_REMOVE(&pci_device_list, dev, next); + TAILQ_FOREACH_SAFE(dev, &(test_pci_bus.test_device_list), next, temp) { + TAILQ_REMOVE(&(test_pci_bus.test_device_list), dev, next); + dev->driver = NULL; } - /* Restore original devices & drivers lists */ - while (!TAILQ_EMPTY(&real_pci_driver_list)) { - dr = TAILQ_FIRST(&real_pci_driver_list); - TAILQ_REMOVE(&real_pci_driver_list, dr, next); - rte_eal_pci_register(dr); + TAILQ_FOREACH_SAFE(dr, &(test_pci_bus.test_driver_list), next, temp) { + TAILQ_REMOVE(&(test_pci_bus.test_driver_list), dr, next); } - while (!TAILQ_EMPTY(&real_pci_device_list)) { - dev = TAILQ_FIRST(&real_pci_device_list); - TAILQ_REMOVE(&real_pci_device_list, dev, next); - TAILQ_INSERT_TAIL(&pci_device_list, dev, next); - } + rte_bus_unregister(&pci_bus->bus); return 0; } @@ -234,16 +294,19 @@ test_pci_blacklist(void) { struct rte_devargs_list save_devargs_list; - printf("Dump all devices\n"); - TEST_ASSERT(TAILQ_EMPTY(&pci_driver_list), - "pci_driver_list not empty"); + TEST_ASSERT_NOT_NULL(pci_bus, "Invalid bus specified"); - rte_eal_pci_register(&my_driver); - rte_eal_pci_register(&my_driver2); + TEST_ASSERT(TAILQ_EMPTY(&test_pci_bus.test_driver_list), + "PCI Driver list not empty"); + + /* Add test drivers to Bus */ + TAILQ_INSERT_TAIL(&test_pci_bus.test_driver_list, &my_driver, next); + TAILQ_INSERT_TAIL(&test_pci_bus.test_driver_list, &my_driver2, next); pci_dev_count = 0; - printf("Scan bus\n"); - rte_eal_pci_probe(); + + printf("Probe the Test Bus\n"); + do_pci_bus_probe(); if (pci_dev_count == 0) { printf("no device detected\n"); @@ -257,8 +320,8 @@ test_pci_blacklist(void) blacklist_all_devices(); pci_dev_count = 0; - printf("Scan bus with all devices blacklisted\n"); - rte_eal_pci_probe(); + printf("Probe bus with all devices blacklisted\n"); + do_pci_bus_probe(); free_devargs_list(); devargs_list = save_devargs_list; @@ -270,8 +333,9 @@ test_pci_blacklist(void) test_pci_run = 1; - rte_eal_pci_unregister(&my_driver); - rte_eal_pci_unregister(&my_driver2); + /* Clear the test drivers added to Test Bus */ + TAILQ_REMOVE(&(test_pci_bus.test_driver_list), &my_driver, next); + TAILQ_REMOVE(&(test_pci_bus.test_driver_list), &my_driver2, next); return 0; } -- 2.7.4