From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <shreyansh.jain@nxp.com>
Received: from NAM01-BN3-obe.outbound.protection.outlook.com
 (mail-bn3nam01on0069.outbound.protection.outlook.com [104.47.33.69])
 by dpdk.org (Postfix) with ESMTP id E0BEF558D
 for <dev@dpdk.org>; Mon, 26 Dec 2016 13:50:51 +0100 (CET)
Received: from BN6PR03CA0054.namprd03.prod.outlook.com (10.173.137.16) by
 BN1PR0301MB0740.namprd03.prod.outlook.com (10.160.78.147) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.803.11; Mon, 26 Dec 2016 12:50:50 +0000
Received: from BN1BFFO11FD037.protection.gbl (2a01:111:f400:7c10::1:175) by
 BN6PR03CA0054.outlook.office365.com (2603:10b6:404:4c::16) with Microsoft
 SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.11 via
 Frontend Transport; Mon, 26 Dec 2016 12:50:50 +0000
Authentication-Results: spf=fail (sender IP is 192.88.158.2)
 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.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
 BN1BFFO11FD037.mail.protection.outlook.com (10.58.144.100) with Microsoft
 SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id
 15.1.789.10 via Frontend Transport; Mon, 26 Dec 2016 12:50:50 +0000
Received: from Tophie.ap.freescale.net ([10.232.14.87])
 by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uBQCl90O011201;
 Mon, 26 Dec 2016 05:50:47 -0700
From: Shreyansh Jain <shreyansh.jain@nxp.com>
To: <david.marchand@6wind.com>
CC: <dev@dpdk.org>, <thomas.monjalon@6wind.com>, Shreyansh Jain
 <shreyansh.jain@nxp.com>
Date: Mon, 26 Dec 2016 18:20:38 +0530
Message-ID: <1482756644-13726-7-git-send-email-shreyansh.jain@nxp.com>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1482756644-13726-1-git-send-email-shreyansh.jain@nxp.com>
References: <1481893853-31790-1-git-send-email-shreyansh.jain@nxp.com>
 <1482756644-13726-1-git-send-email-shreyansh.jain@nxp.com>
X-EOPAttributedMessage: 0
X-Matching-Connectors: 131272302504422888;
 (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)(336005)(7916002)(39410400002)(39450400003)(39400400002)(39840400002)(39860400002)(39380400002)(39850400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(50466002)(8936002)(8676002)(81156014)(81166006)(5660300001)(92566002)(68736007)(38730400001)(305945005)(110136003)(356003)(97736004)(48376002)(85426001)(5003940100001)(6916009)(189998001)(6666003)(86362001)(2950100002)(626004)(36756003)(50226002)(8656002)(47776003)(50986999)(76176999)(105606002)(106466001)(69596002)(77096006)(33646002)(4326007)(2906002)(2351001)(104016004)(7059030)(21314002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0740; H:az84smr01.freescale.net;
 FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; 
X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD037;
 1:SreNe2Zz3Z4mpKENJhz2Eq0Wac+Af6gRfOVpqa3YuwZnyon6+lFUUDxZT/h1EeztukK3Nu25LFiBTklZfkKDYYsMEpr+5JrkChT2/Cw4mrpvWF/Y1CcEKpdI6jhqZqQD5o1EtpE5oOHSR0LT6rAZuGiJ/Vvzg74DPgVEW07gWsK0emsdblOaTJB4szwimXflqf/ECSKDEIaRVBhFsUY2fyqtQYM7Z7vmq8LLyg+HxaA17hpQmNAHwGvwdqlFSngcYv0PaBCz0di8HY/ydiGi4lqfp8u9giowhw3zqIMIQSHzjRASKlNy3fxI0WiaTXs0TMUC18gJvjPgWbnEkzwjoUUEmPZBfB3hXhGMSLZrBrERYk3qiCOBEkcPFU539EMJF1zdga+Un28l6I36UrakIpGKyj8wXeDLDnhZmkEYrlCrXvHt34KxoMsyB1LcqScP35jd1YoTDo0/NHym5jy8fpF8IjochP5x3sPvio1vXEj6MKE3g1IpN9tbj9P4dZYcqHycVqHhCt/iQRSlL7s9zeCAEZt6LzYqid8CgMKfsv/Gq0hFCTzYormEr6oBVr9rW1uVjazmvMPE9O8B8b3EQr0BlXteqoC/P6lc9R0DjxGe2/ixd9pbi12paEpm0yrn3t9lX0x68itu4axNkSIBC20biIXqSGki9dd8z5gx/C4wbXwYO3A2qRcntPRqhiYXZ7CJyLU01yKp+nqmHRXW3u+4u9YjrHIV/0dAm9+A/JI=
MIME-Version: 1.0
Content-Type: text/plain
X-MS-Office365-Filtering-Correlation-Id: 01dcd3aa-9627-4434-4188-08d42d8dd201
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001);
 SRVR:BN1PR0301MB0740; 
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740;
 3:cdfVMv6u3Zpy4bGkOHvJwqGEM0zeC8iFjukSwTheGRQH3ywBNthkD1nn5O31ScMj/K50PmCjt9pXLl+ZnFS6PS2033/bxTcLHo8+omqnhbGSbdKTqxznRbQLSW7sEhuv7l9PjHR+V6urW2XHKmNca5xG3AsK2YH9PNMl5W9sqsrwpsA0M1oA7vocfLYfSvJknGGlWHdzh5qfoAHV3GH1jljGfKLEAkLB4/I+yDXvJ3qLo4aMnv0iu022flqJoDYNxvNETZd9I9vytvO3XSuqGdAN2w5JnqdUxT6pzPwzJpEzDX29O4h3ntoQxtkgeBXI+hGFBPsG+iP7mtUCqYeJLqRkDqfxPcdPDw9gP2bt2n8=;
 25:6eBNO0oIf0Honjv9DSHL4nhnhI9SFvGZEI0AYhCYnlK31u2nXPfRECwBaFD15t6U/z0az9ObSshBvso0SvYvpKQl5SfWV5CroN0tBchJ4NJuOK585YjghlNpwJ18FEf83tWHlP4ji7vrLnQDDQjfJif/2OWTkC/3x+IEKNMbiSs/bJBGC4PqQnQ7fbs8C0ZDkmsa2i5HRAso1KVK4g0AiRsdnWfWSwf7wXAPnEPU0ir3j/QKoJwQBjBiEFdrIemB8s4AXPWMFR/pOSBbsNmLzsE415PcXxjF5RGEiEymsH+m/P6JnPVzbpNDwoTJtLHWI7tygs0QqWh7XwHvBZ+mY1Bdy//JKaQLZJ8/Jh7MY5veBBUdMlakYN1LePW78yuuiHFAvIh/uNocWDZced4sMEO5pQEzZqWocNIrM/9leeuQUaOELCwjaBe8wBgpljb0xhEVpWEAkqd1s7tgoForbw==
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740;
 31:P2AE2fgKU15ODad9b5KYhMX8eA+x8FGpAHjblUlt0SREqVEfFsIZBggLeBNxkXgnDlzyCJo/bZYmqpo4aUH43ek87r4Okb1PNRTt01pomZ+spkrCKqYZ0lwMG7stMzn15UtKpcpqk1wV44bm9HYaiplWuvcT93U0AYX6FHfSY8nfMWDmmIElcJ8GjyWjhPGKisGMYbAeAk2Bb149uOg0O52gefQeRVyCBnZanpy9+7jRP53a5dP3ahWK0TGcMc/YgxckDKJBXVKrMR1KcOKJcQ==
X-Microsoft-Antispam-PRVS: <BN1PR0301MB0740A7EA45CE0870D03C233590960@BN1PR0301MB0740.namprd03.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(185117386973197);
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(6095060)(601004)(2401047)(13024025)(13023025)(13015025)(13017025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6096035)(20161123561025)(20161123559025)(20161123556025)(20161123565025)(20161123563025);
 SRVR:BN1PR0301MB0740; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0740; 
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740;
 4:olfSiO7yY8ZoLTg0ap1MO7wfoQLQ61nRJA1s0uQDd2SPqoP+xmHGsmFJSdUFTUVDM+5Q0NPbdVqJWXM22tejkBsp/DktGm19VHd9z2Ae8cXBmHkWslQZSYWCJXF3Yo8MxH4aJJ9OCvVxCsSbfu7PcePmBdhPKgi5vpJX4SM9A9RDISRlZRjHMDlj1lkSxJ287nLPZSuQjhnjKGcxl9KHxEn9Vf4/DL2eaLGlawoL4VBi1nF9B0DrkBzFY2cdwiQEmW8dYWQ7uzXruAtbR0Ld5xXW3PYfej1iKAoKKMDKucD9lOxsf7Wbg9yx5MhCLGakwOKlLXnZiu6iiNGsh1G6cTcXfAbG2ECuq3pfKu5kUswVooZlTSB51kxO9v3MONaeswwVxDDUvK86OjLPOyKvu6Y5XDmgWSP8t9eMB1yoNkdUKBBCHq6/2ELtvEE3n9dLu6t69kKRxEDfi+qLdPiT5BC/697E8dRFo+Nljyzgh2zP9/r2nm+Awaot9mMsuxayOwO1PcbJZZUPxB0i+21dQ0bFn5wMdcG8HTGUfb64yUHCfopfj9RmKhTsf23u54RZkup1uiPU5NZwQRPMoO73jxrYqOvaNRZZG9kFesanrfx9hdyAhGSVhzSHlsO5GEm0QcDTEfEnFU5FgxPqupd0CS7PC0ZKR39zKRyJ1nqgJge8bI+SHtvmNANvqPJiOXjjYT+afgv3uzrkGMSaz5te2npd8MszihBzQPJ69h1k+WwieNGcv6g6WAGTAdRdV8rj
X-Forefront-PRVS: 016885DD9B
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR0301MB0740;
 23:0qnGKCzWikth0RmZc4bo4Re/MRWWyQQ3y3zcfQC?=
 =?us-ascii?Q?BJwYSbTwrWt3djZrffuunSvW0Gm5j6VhhYzZZnm05cPT8TdYBfAOFhqeygot?=
 =?us-ascii?Q?HwjZ4gtQGvKKaYr23F9oGOozrBXH3dnPMJZicA0hHm6LrJLLGbO9FNaOJlYR?=
 =?us-ascii?Q?OOmpxxbXIeB+8oiwkwDg4oMyAAAT5FX2WOd5oC/8K8wwBZ5zB/SL0n92WN6O?=
 =?us-ascii?Q?qqtxGhpMGS1H3e5ZGE4sl1qyenpxn6XFA2tDwBQAUaQyzRBAR6llTduzjzXL?=
 =?us-ascii?Q?1lfmKA9DZ9Ghp372m/weTBP+WtZdqqZuDS4FVlPNYQBS1jKIUVz30Kfy9PYK?=
 =?us-ascii?Q?ko//fmrgIRpv+yLvju3MdR2BrCFwt+nGuTau83b3z/LBoq9P65ll6WlkW1rz?=
 =?us-ascii?Q?6uiQKKjknUXgZ8kodUA2TB612SSOTt/hgNt+7IBZGKyQwLgNAZIns3QCO4cY?=
 =?us-ascii?Q?2NjgAt5iEP5ezug7yr5QzN25PbzePyfY3r486j6+JpotKMHe7Zx8N3umPb1s?=
 =?us-ascii?Q?JNa6iPWEvdGwuiY7VjwdpZmRpW9kvc8/4X67qqcR8ltTpy6IHkcIPWdY0T0V?=
 =?us-ascii?Q?w2IH7pVcwzVYJb3X8p7BGscpww+OqYiPXCmGU8/Pyjb9rE/mDpJElUKbPaei?=
 =?us-ascii?Q?X7yfX2ibeCrJDW7Ml51K3BCictuQFS8pbznNGI1Ov6IWCdr159Xqz4saqD4Z?=
 =?us-ascii?Q?jfC1HoPY3KbWyaWUoOfyhiavcEEiEwSbPk7ckeCBc6EJOifqL2MzpXJe9Iiu?=
 =?us-ascii?Q?7cQUtULkIhz8eGTr5WG1Z7bXbvG5y3ry7NR6h48KVnxQFaXahe2K7yOkL1KA?=
 =?us-ascii?Q?dDbmtrL69E/fQZvKYdMebYtItN7c8JtFlqr2R5/a4FiRb95pW4PwdQensMB0?=
 =?us-ascii?Q?c4JB2XV60lIzYg60oCjy8QwjBYbp+B33Dl5JtSL2DX2UIjYCEJR8zT/sxXwx?=
 =?us-ascii?Q?idWMJIhzx1GL18eBfp+x0W8lufkcSi9j6kqnywIA4vZaA9a4xf+XBJntz3KV?=
 =?us-ascii?Q?a2i0eSDL7khEr2Pu2nkPjyNwfXldATYqy22hFmPP1t/QZSGcxQn8yHOe6Jwe?=
 =?us-ascii?Q?cDolDxY3o3sdzukKI93nDzHGeW+cwsqg9NNmCuqR845Q7Kp9MM18Y4Dozi4t?=
 =?us-ascii?Q?uzHELCXtaaD4kX0SVo2bi3OyTyHD5kePVYojTavKHEXdsWFObbVbvswokuZT?=
 =?us-ascii?Q?bJzDo1BuzPkhd4Cnzvzk7EGak1bAkXGSi/b2/kn9xIw6Cxtzn1/laMN3ig/X?=
 =?us-ascii?Q?RW+p8vwI+XAsEJw7qQoY8YvJQ6NVRcytDYkRCbTJMVMVNeV5cRuBvjIWUMyg?=
 =?us-ascii?Q?4zuRA4wT6sN6JFaAbnEP2fIWlCpWuc5XkFwE/Ht1dPH6G?=
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740;
 6:NG7ziLfqeZOey06dPCoN6syxaLl9q86G3bVx6RLl7NruDSIMkSHy5J3iB5vqP1OSVRtBisB3lFww2JHhKQPlTKcYgV4n1bZyHgG/GOc3nevEvjd3hQbmTamkiSLaPVjE1gvtJ4bwv2WmjgkHQlqgn9g2wKiSVo32Fga5cgV+VajGvIwHXPjYMcx/ODUQiwXqJ18UiPXYDqvTCcgHszBmYkTtQS4cH4DBQOUpQ38rKuqml2A2T/VaqpefekXtoULErbEPcmKlkJknP2OpQ3YCh4oa2Jv8MjMY2ryLgqMXXL8b2+C4HqRTPjBB+EEumrhZfSHbo3Bn4FEHZXI7KbIRTWmUWjDtH5+fvgKMcmDRCUeQe2Wvc5EJHGzmVVfmOlHJjth+Gs/PiZmubYPzYJGRWxKkkQcw4y7hBzdDef4CgS6+rm//UxQAkgMsaJ5my7mf;
 5:Iu/CxNsic+ujWlp++2+ndLqVZM3NvgTxCm87SyWI14OgdjirYIntGHCcH4EqEiX8U/QyjzcVcpERkeqpDSvPF8msbXg+eMAE7J2hwWGgDvrHdxPSz6l+NsYvJD2csjgELEqs7ximXTD6eDe8HW2RS7yXY4e5vKy3LPNYaU26PSrFhJQ86WOBT7gvb6Vxf6BV;
 24:8uRWKzUqHT9G2Ep+ixUgGcKpmdoAT8g6qfN9jX5eEhbWkl+G/LSC4S4nKsKZGjJ+IsAAHHTN8yWFdMWAqiCSCJVnGJj9tvzGLKjd/f7sRRI=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740;
 7:0lV7NA1cowCYpyUeA0mQfI+oh2tTcPJ1zI3cpwOIHOlayhNfGqYSxb8pvTBRGCaWOaoRi/rBk3o9ubYJTMQj8NU5Q4lBEWnVvIVU32X5M97kr8EHT/xPEi7m/FHOn0VqAc0++jB8CB1QKWHCQ6rXjyypaScj/vFbPGl70+CY5HrcJ9fVQ9l8S3uMTEljHRiF9yIBSdnH0bEDGCy0uoCRwoEP1fuBgeVNtYG0vKQc/MlPYeQkn2gBcyTPxEfzOPYM7/+9w4DLer4mc5SuUgU39NvykUzBD5rLgO5oG/d8gwZ6y9QIwg2v77bIbPu+KWuwP3lrRS+I/8wUI7EMtFnpPZQa5Yn24kdEMcfVvKL8icyWE35s+vQSrseeuQttKURD7akbu2sJVLcIrE4Grk5ItXFyg0iHohSP1Kqdjvk6TUVejGGOP9ymLlXZUH/7if9TBqnSGwF4KbqZZUzqUMxIZA==
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2016 12:50:50.0678 (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: BN1PR0301MB0740
Subject: [dpdk-dev] [PATCH v4 06/12] eal: enable probe from bus
	infrastructure
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Mon, 26 Dec 2016 12:50:52 -0000

The model is:
 rte_eal_init
 `--> calls rte_eal_bus_probe()
      This iterates over all the drivers and devices and matches them. For
      matched bus specific device-driver and calls:
      `-> rte_driver->probe()
          for all matched device/drivers (rte_bus->match() successful)
          This would be responsible for devargs related checks, eventually
          calling:
          `-> rte_xxx_driver->probe()
              which does all the work from eth_dev allocation to init.
              (Currently, eth_dev init is done by eth_driver->eth_dev_init,
                which would be removed soon)

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
---
 lib/librte_eal/common/eal_common_bus.c | 51 +++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c
index b7ccbd8..6dc7b73 100644
--- a/lib/librte_eal/common/eal_common_bus.c
+++ b/lib/librte_eal/common/eal_common_bus.c
@@ -194,11 +194,60 @@ rte_eal_bus_scan(void)
 	return 0;
 }
 
+static int
+perform_probe(struct rte_bus *bus __rte_unused, struct rte_driver *driver,
+	      struct rte_device *device)
+{
+	int ret;
+
+	if (!driver->probe) {
+		RTE_LOG(ERR, EAL, "Driver (%s) doesn't support probe.\n",
+			driver->name);
+		/* This is not an error - just a badly implemented PMD */
+		return 0;
+	}
+
+	ret = driver->probe(driver, device);
+	if (ret < 0)
+		/* One of the probes failed */
+		RTE_LOG(ERR, EAL, "Probe failed for (%s).\n", driver->name);
+
+	/* In either case, ret <0 (error), ret > 0 (not supported) and ret = 0
+	 * success, return ret
+	 */
+	return ret;
+}
+
 /* Match driver<->device and call driver->probe() */
 int
 rte_eal_bus_probe(void)
 {
-	/* Until driver->probe is available, this is dummy implementation */
+	int ret;
+	struct rte_bus *bus;
+	struct rte_device *device;
+	struct rte_driver *driver;
+
+	/* For each bus registered with EAL */
+	TAILQ_FOREACH(bus, &rte_bus_list, next) {
+		TAILQ_FOREACH(device, &bus->device_list, next) {
+			TAILQ_FOREACH(driver, &bus->driver_list, next) {
+				ret = bus->match(driver, device);
+				if (!ret) {
+					ret = perform_probe(bus, driver,
+							    device);
+					if (ret < 0)
+						return ret;
+
+					device->driver = driver;
+					/* ret == 0 is success; ret >0 implies
+					 * driver doesn't support the device.
+					 * in either case, continue
+					 */
+				}
+			}
+		}
+	}
+
 	return 0;
 }
 
-- 
2.7.4