From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Santosh.Shukla@cavium.com>
Received: from NAM02-BL2-obe.outbound.protection.outlook.com
 (mail-bl2nam02on0067.outbound.protection.outlook.com [104.47.38.67])
 by dpdk.org (Postfix) with ESMTP id AC9E02BBD
 for <dev@dpdk.org>; Thu,  8 Jun 2017 13:06:21 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=yUZWcJuAKI5wKuDqlhcmVvdvaBIp9Zw66OJls23qZH0=;
 b=dnHviR66kQoLK6iHfE0lPhosodhbS5PKc0u5FGE/d4sBz0lc9Ws3y+piLwMrE2uBnVVj25UWnI4+wdDG8lVNfU9vlEDMfaeerBGhOvLFY9xPqrZDqiHsTJP9JwF6syVvnqviJma5dHjCsJT7UNbO8goZbs3GF9MLO8I3iZFDpCI=
Authentication-Results: monjalon.net; dkim=none (message not signed)
 header.d=none;monjalon.net; dmarc=none action=none
 header.from=caviumnetworks.com;
Received: from localhost.localdomain (14.140.2.178) by
 DM5PR07MB3099.namprd07.prod.outlook.com (10.172.85.9) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id
 15.1.1143.10; Thu, 8 Jun 2017 11:06:10 +0000
From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
To: thomas@monjalon.net,
	bruce.richardson@intel.com,
	dev@dpdk.org
Cc: jerin.jacob@caviumnetworks.com, hemant.agrawal@nxp.com,
 shreyansh.jain@nxp.com, gaetan.rivet@6wind.com,
 Santosh Shukla <santosh.shukla@caviumnetworks.com>
Date: Thu,  8 Jun 2017 16:35:06 +0530
Message-Id: <20170608110513.22548-4-santosh.shukla@caviumnetworks.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20170608110513.22548-1-santosh.shukla@caviumnetworks.com>
References: <20170608110513.22548-1-santosh.shukla@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [14.140.2.178]
X-ClientProxiedBy: BMXPR01CA0025.INDPRD01.PROD.OUTLOOK.COM (10.174.214.11) To
 DM5PR07MB3099.namprd07.prod.outlook.com (10.172.85.9)
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DM5PR07MB3099:
X-MS-Office365-Filtering-Correlation-Id: 302740da-692e-4e27-fa59-08d4ae5e6085
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(22001)(201703131423075)(201703031133081); SRVR:DM5PR07MB3099; 
X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3099;
 3:nD5xfDN3ArYUXTEB9hyqOkI+nH69ftAtUH57Vzd+vBMSHISVQkiYBM1maaybjbq4Ex33rT8JkM/BCTfxmDmaEKmPG3vSrptZIVQ/9gFnDi3JJXJfCqZCPn7XSlSfYgpjCVovF7B8WrKJjnePzXXwZuQpbXuAd3+D8KOEeDYYqlJv6YRY8BYUJaTLCC1zsif8VSVdx4WaVoooe52MWXa0Gc1DqRRB6NPg16F/DwLi3uUHeFMznNeuuW2dL6jzb17RQGNmvswnwBGdUv5jO36jD5CJvHbFumidHUgSSQrfGNw6zQpp9AZJMtHwjPCVXWnXY63w/WxKb0vhw0ndLSHKMA==;
 25:o2+RD9x9ksO4cWgoR6krGjFZ2rOFEkGNQ+SwPjRgpW6cHPQZS/Q4RTVoNL62aFyj6yRULXJSZKcFyAVAOoQWp42W/VuqkSEjVghrmOBOQd+HArD0n2n9PcvJjV81dJyebxzBdA+fxF28fUdWB4MLI+vWQusFfTC8rqXlJGZL3k5C0mGMtL8b7FC4+86GCMjNCKjp1wtqKsQv2/Zu+e7v9/ovxe6aUZn7y22vN3qaFafbvk9wRSDNvfVpUrjpcySwhtdVJEqjQuvTOmzLuRNNkyRzFLCH964tEErqXrhEx7yijEymoIYIWgAP8T747Fbbh7VmmBvC/mSriG2Rpt4V0n0GDQFoEqCerjGphpunayUylERTwF555hdiYauYHoaD1mNrQE9zekQF7Lbqek1Hcx9cC2ncAJs8hA93psQoo718M+o52BpjUusb0XSIQqMKmYI6OjzQC/ZrChr4DiqJuViB9tz/UI8ihuBFlUNToGo=
X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3099;
 31:JUvzuOEoIy8MwjvKBf63t2LvvPaR02D5iEXHunt5Y6gvYdUFoYKGquRM8ykM1E7jl4M3dm0/HCI8vIoNSTGJNsOw6prno1wtPpYmNf7LnVB6lZAKSHcsbFdvqcCQ/mMZdte7Zas/Tm4Fbyl72llIj+S+sQIjzapmG2AcYrC/rT+dKGZbYj7XpHOmVWBjx/wV7ppsQClpLsjgHhXiTrvNuaeKLUTqAJcumquMzvymsKU=;
 20:MP2rufcME1jBUf/dkZiHdsyQi1XPg5gCM4PvTbZsQ6CAg0QylAoZmxvfqgB70OpSw3o+PpAaQnApJ2/p+8rtzXX2U+DJGLIlUuzXlILn4bXeaMp4tCeq07cW65KM/k9umbDoqxF50nxaJXFryCFPYZsgcjcHM2tQI8cDRQkmuoQPU5m9mk6uoS8vqmuP/SaTICZkbbpLWKte97LgXZRDKDH+Mj1k4tJ8hzDoYAiLka3kOW9g08oGhXVzXjx27qv9B2Hr5sMHoLJ6YnG+U32llG3oL1VdZ/6IbLARLILYdQX2XFyWZcBnx8iwqW0UE81YdNyCW9HOSV2MVph4eLcN/mjLfdePcBOSlEDrcaV5GCCM8pXeV2fLNG0XEL5U1Cfb+8bbaFlcZV9LkSHMYsmVBZzwMNeYKqr8d4Sh0U5Gd1U8/GVJx0JV6D2ESG1h02CtreO8R3wifzHb8DXN8xxzvrHduOHI0AbCmL+XCJRU5VCN50uQHSVhVk0RVO0BCLg9Uu9uqLagLc96jna5bvPWC6tB31iSh+8t9m0YBoXmuZfN1JxOQFgPC+esIl1u/SK5P/AOSgA1hobFXq5Mqx8bKcVt7nryOv9gkrMYVZIUKIs=
X-Microsoft-Antispam-PRVS: <DM5PR07MB30997BB5360DD3AF02FFF62FEAC90@DM5PR07MB3099.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:;
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(3002001)(100000703101)(100105400095)(10201501046)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123558100)(20161123564025)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);
 SRVR:DM5PR07MB3099; BCL:0; PCL:0;
 RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);
 SRVR:DM5PR07MB3099; 
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB3099;
 4:E/64SfNG1BiXcPrqSbh3oMzdxrtGlzFMZFzx+laNYx?=
 =?us-ascii?Q?yDxKNksHpj11F2E1KH262TMTkncstcqpIaDQ+Sglu5UzLU6ReQcvCKN8nr0o?=
 =?us-ascii?Q?uatekc6K016k+5jlzldCjJQ2qn40Suc/NZfx/xukOGBKKbxPL0u2zLxg5O43?=
 =?us-ascii?Q?6sgzgtqmLHWG4Isd9oIhgBgo7DYkuaRoXeUofoDFr5zF71zKWR0wZhnE9job?=
 =?us-ascii?Q?9j0aisqpo7fMlkNcE9dUk1H4r2301DhhnzKVCJPcEbi/f3dRFtQ5ItErmMM0?=
 =?us-ascii?Q?RSqEnin77noVru5bQur5Mdu2jfTvn/nlpNKaoQVvZnEBVI9LI2/CZzw1BvNW?=
 =?us-ascii?Q?koghc1o2i87pajsyY7a0L+I1sRiaPpsIQfQuGe8HAFCxf3JkGrOUbtdPc6K5?=
 =?us-ascii?Q?T2jMRlD5yUwiOXwxxnfbTofNEt/ezLTL3TmSOeHQ4lKZY2myLDmwMmV15u1t?=
 =?us-ascii?Q?H8UlmrRNQwkIC1h30dcZR4R9JOnXQVQ5NtOtQKFfK+lKq5v76vtfUhJSV3y0?=
 =?us-ascii?Q?O788oaUeOyARTSZ5BAyvc5vMjdnct0grYlolxLgoVbx/czo79I5jH8wpsZEU?=
 =?us-ascii?Q?LVQqlCM432LF8CRz36YXrAQ48FPiq2nwc6C5zX1g6GC36ZidjGpwzkUh7dxT?=
 =?us-ascii?Q?7OHFnqufl5xh8CZ25SzhJFwn/sSMa2+0BV4dRT+t2+Trp8lPZcBS+zoM3zh5?=
 =?us-ascii?Q?dlDpjRqjyZVFVJgJdGRJo8EE7gWjkoJfba8itPFA0pkFY7v3t4l0AZnOJyRu?=
 =?us-ascii?Q?7+YSR5ZmC3NLpCEgk8Euc5BBRFupPzKpxF417H86EJbUsonQmQzPpl5DEveh?=
 =?us-ascii?Q?ch64l1VzJYW+XAYRSKtn2P8MQVrOaMCXXW4E43ifO/VZDqQEMpqlB4fk6uHi?=
 =?us-ascii?Q?BOMPE4sUpPrwy6OTQUj2cFK8Dxb0GI9mXVLHREhS4p2hGpvGqWFmOz6fX173?=
 =?us-ascii?Q?6q8rs6tOjjJHfj7OXc+4h70Lvm3COc0p9aWXveaqQQZG5XbZ2zYHsi6gVUnh?=
 =?us-ascii?Q?VQGB52QIgQyo5UzQYd1kszMUMxxkmuy0GK3sWA40PND7IFin9OVv03mt2+VU?=
 =?us-ascii?Q?scxYfXYaibK+p+1eygiC671nTRIWGels7DNzT+Ml0otnaAbAQN81PvAwdvCW?=
 =?us-ascii?Q?/uPgxGcAs=3D?=
X-Forefront-PRVS: 0332AACBC3
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(4630300001)(6069001)(6009001)(39450400003)(39850400002)(39410400002)(39400400002)(39840400002)(81166006)(8676002)(2950100002)(72206003)(6512007)(6666003)(42882006)(8656002)(5660300001)(110136004)(1076002)(575784001)(38730400002)(53936002)(3846002)(7736002)(5009440100003)(25786009)(5003940100001)(305945005)(48376002)(50226002)(6506006)(478600001)(42186005)(36756003)(5890100001)(50986999)(6486002)(66066001)(76176999)(189998001)(33646002)(107886003)(47776003)(4326008)(2906002)(110426004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3099; H:localhost.localdomain; FPR:;
 SPF:None; MLV:sfv; LANG:en; 
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB3099;
 23:c3s3wklK6PAtyMoMjuxVRw4NebzxH581s7QxxmNEZ?=
 =?us-ascii?Q?JCoR3bP5AIRbN7TjhqhhWdgClUYUXUdoDolDyqCWBApBsZBf7QsqILxSQWyd?=
 =?us-ascii?Q?kylfvnhaJmb12Vjty23jY3Vse+HCmLhfEfZ80OtiKi/er0SZvSC08cXPocBn?=
 =?us-ascii?Q?e9G8+FnlqNZTvzmOgTbvh3Ysse+e8EnZnxIcIGHbSG5cZGnagBsO/OJJTOSK?=
 =?us-ascii?Q?xaliRL1/qWkIolZCrPUdS00iWQjIz71goG3e+f1+5J2IOVW3uJvA01PvZoMk?=
 =?us-ascii?Q?iyIkNQkPXZWLQXaZgesrbKqUvE7+eigLO+971wW8KBLz/5YrT9+pCLZFAmrJ?=
 =?us-ascii?Q?RbZs593ZU+sp7XXQt8bZPmzzFoYG715BzBI7jo3vyn6e4Fai1Y5Kps990dTE?=
 =?us-ascii?Q?ZweDSXaRljz1iLRhgfPj0k9Ci4kpUUCo8+tSmJEnwYVlAWtZDjzW3Lhe99rz?=
 =?us-ascii?Q?fwtLaF7qkGEyri7X/IDRm0mWGknBIwL6e7M5N7aq+3YXd98WwDtO4SaTGY8X?=
 =?us-ascii?Q?+ump4Vg3yXL+z/GCOsTVeZhJdvij83S6uSbh3Dzdn2u9vA/oSHSkBMXND8W+?=
 =?us-ascii?Q?n5BdnchrTfiic18MuXbfADdeOS2GsagoXGVL1FmC6vSBEugYuz23TG4F1D7H?=
 =?us-ascii?Q?ds2/zpEy+7B3jKmZ26xOmHg/PgOa3eDeWZeJd+iKZbsWScRY/1EhpzqorrN0?=
 =?us-ascii?Q?D/api3j7j0eK5uT3o4/gnj0U6pqMqQTg9elE8xVUBnUZXeO1fD4uDxSLGDNS?=
 =?us-ascii?Q?l2CKg/zMX2Gdorj28OpzYX6ffcreckRNGFIFeul/M+007rkLx1MKPL1gdoO6?=
 =?us-ascii?Q?tDIAdfhL1XizO/kl+4/SnD7gjZGqSQ6FD42V2Rtwzg4DRaqZifVhG+5zVsPe?=
 =?us-ascii?Q?yCUf1towi/vVbEkN1E55ou2tgov1yFTF9vYfJ266TbDnLmc82Sz+ZmWTUt1m?=
 =?us-ascii?Q?W+GcNc6UMhVq+pm0Vq5XZ7mjjxndJvLtgcVw/T11JH2geVj23xQtHldTyXXA?=
 =?us-ascii?Q?NJ2rZE9XaMr2pM6EL/17I4fjvxs+SHJ8YPatiOuCIP5Vc8Lelf4jsk6G64sq?=
 =?us-ascii?Q?P0KTBMcxsXfrM83qw0YCnE0NCOsYt7TihmO0Pg/kBAQwVNLQmsB1Gb15vqtJ?=
 =?us-ascii?Q?1C8YKGXQ46URf7HRYUBk8ussvgC/Iq2pC1OT+5dWxii3j61Jg/6yQ=3D=3D?=
X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3099;
 6:rOGEs0rWkTA+VdzUBvR5HqJ/EAyVy6SVHPjLf3UOtomf2vwo3RE/+DQMPlu/o48zBcTtSBYMe8wIH4dYigdl1z2kt5OBXIehOlgx4WijOZy/qLc5ztUZauUCS/ofGHydsny7jbZxciwBEPfOAP/aPdiL8Kgz2+cH4yLUp510QU8+VpbF/bEgrcmkXO4G6Ob1DwykqCY334r5mmATFnUVVcvVdDZC4bCXLU5c6wRmheUH5Fj5MdNYLNp9tc4yPuUYZpeXuXBATRFt1GXZ6i9HTa93IFCNo23CsnY4n7jLA77doRvBSGdz+7aNVGUKZ+SGR6LaqrhEHAekHHMH1tpsp5W82n7P8PszahnSis797JvAFvMqAzMQMS7WilFD2bB1WtIHJ9VG3DJ6tPjpbqx16mW+EX1XY70UBiUSSkgF9muMA54dwA8OGPf28vQbYjCpsf+C4BZDsn6kVjGJpL4kP5iHq8OvRmTiDreYSOwWkCQrkh2mxYejqT0QegGUwVBTaWHf7pRHXwzv4ocnSUNnOg==
X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3099;
 5:yHdD/YvyXh0eGzRwXmV898MtdfioyKykLvqd7Unua6piwUed/SELndHYkfTyo57vVeQV15ZAKM2JvTzIF2Ict7q5ekIlGirKbtFjwdTLSEz9bcvv9SzBMFq4NW4KpmLrCr0IHkbcphTLax6dctkOiYH2kAiJYkFfOXfON5Pdb9PKlOliDQjABhArelwGFrdqi8AJTeArz0UNjOfBQ3idw6OUKFbkTogeVKJvgPyuPSPxZhoeIKTozjfYJvPjZ64ipkYbNzYeyXSh6MFYzkieQ2asH22DiDJTMMmpXE4v54D8/jLd9FB0tyP4djqUqdZtj4WI8BwP3wI0HZHGRftzEwJGwxJPpJioFV9odEEMgd5E8LwAAwp6HUrYRou2h3BsoeeqUcKTHxEYY8S0njLnHehgCkZ3C2Yarhhi1TwnEiTyP1OXQwAVW3V3CY5wN64rplW67tJucb4AncI7k2fu6LY0OhZl/wwc9K2fGT9vvBln7ml1kMK1Hq3v6nHguZk9;
 24:GYbPGtWhy/ejswkRIb1aipQx9w7hq9RBVYXDosfw5nWwI6am8E3iyCnneLzXWJe9abgN9J4Iv/eJihOc23WuqmDxQHy1Djnm5CsFO5vbC6o=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3099;
 7:2hCIT6ZYJKZc3nqSaNK2DeQFk4GaLaSwguPC+BnGrS1N6Txk61ubhkiugy4FnveI+RR0+4QDoof94nOZFr1v/dsQD/0OQ7Sxnoxn3Snp5KptqSYkchTQvXt0DdyR/kQszHhsu2euiYURo7+ZhowedgMHctnfjNky3nMQLVrWPS9slWxL53EBEu7iO+Xm1ft4bvnfLVS+lL+C4Otz3ZCDm37YqWRqSQI9/V88MBuWSSeUVEmpNptVNDBDnTo5/vG4wr6tpw69JxloUZ/Ro179ATO3Sl5TXYL81pl57RMCg7hDsZm4IUNyQf0Wh1icU6omTy4m3T55y+7/AqlSbaEYrw==
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2017 11:06:10.8603 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3099
Subject: [dpdk-dev] [PATCH 03/10] bus: get iommu class
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: Thu, 08 Jun 2017 11:06:22 -0000

Currently there is noway to detect iova address mapping scheme for a
device on the bus.

API(rte_bus_get_iommu_class) helps to automatically detect and select
appropriate iova mapping scheme for iommu capable device on that bus.

Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  1 +
 lib/librte_eal/common/eal_common_bus.c          | 23 +++++++++++++++++++++++
 lib/librte_eal/common/eal_common_pci.c          |  1 +
 lib/librte_eal/common/include/rte_bus.h         | 21 +++++++++++++++++++++
 lib/librte_eal/linuxapp/eal/rte_eal_version.map |  1 +
 5 files changed, 47 insertions(+)

diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
index a9cc3a67e..0beadacfb 100644
--- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -198,5 +198,6 @@ DPDK_17.08 {
 	global:
 
 	rte_pci_get_iommu_class;
+	rte_bus_get_iommu_class;
 
 } DPDK_17.05;
diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c
index 8f9baf8b8..04398275d 100644
--- a/lib/librte_eal/common/eal_common_bus.c
+++ b/lib/librte_eal/common/eal_common_bus.c
@@ -145,3 +145,26 @@ rte_bus_dump(FILE *f)
 		}
 	}
 }
+
+/*
+ * Get iommu class of devices on the bus.
+ */
+enum rte_iova_mode
+rte_bus_get_iommu_class(void)
+{
+	int mode = RTE_IOVA_DC;
+	struct rte_bus *bus;
+
+	TAILQ_FOREACH(bus, &rte_bus_list, next) {
+
+		if (bus->get_iommu_class) {
+			mode |= bus->get_iommu_class();
+		}
+	}
+
+	if (mode != RTE_IOVA_VA) {
+		/* Mapping could be _DC or _PA. Use default IOVA mode */
+		mode = RTE_IOVA_PA;
+	}
+	return mode;
+}
diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
index 5ae520186..9d4ed7927 100644
--- a/lib/librte_eal/common/eal_common_pci.c
+++ b/lib/librte_eal/common/eal_common_pci.c
@@ -487,6 +487,7 @@ struct rte_pci_bus rte_pci_bus = {
 	.bus = {
 		.scan = rte_pci_scan,
 		.probe = rte_pci_probe,
+		.get_iommu_class = rte_pci_get_iommu_class,
 	},
 	.device_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.device_list),
 	.driver_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.driver_list),
diff --git a/lib/librte_eal/common/include/rte_bus.h b/lib/librte_eal/common/include/rte_bus.h
index 56eacd0c9..734f6f051 100644
--- a/lib/librte_eal/common/include/rte_bus.h
+++ b/lib/librte_eal/common/include/rte_bus.h
@@ -91,6 +91,16 @@ typedef int (*rte_bus_scan_t)(void);
  */
 typedef int (*rte_bus_probe_t)(void);
 
+
+/**
+ * Get iommu class of devices on the bus.
+ * Check that those devices are attached to iommu driver.
+ *
+ * @return
+ *      enum rte_iova_mode value.
+ */
+typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);
+
 /**
  * A structure describing a generic bus.
  */
@@ -99,6 +109,7 @@ struct rte_bus {
 	const char *name;            /**< Name of the bus */
 	rte_bus_scan_t scan;         /**< Scan for devices attached to bus */
 	rte_bus_probe_t probe;       /**< Probe devices on bus */
+	rte_bus_get_iommu_class_t get_iommu_class; /**< Get iommu class */
 };
 
 /**
@@ -150,6 +161,16 @@ int rte_bus_probe(void);
  */
 void rte_bus_dump(FILE *f);
 
+
+/**
+ * Get iommu class of devices on the bus.
+ * Check that those devices are attached to iommu driver.
+ *
+ * @return
+ *	enum rte_iova_mode value.
+ */
+enum rte_iova_mode rte_bus_get_iommu_class(void);
+
 /**
  * Helper for Bus registration.
  * The constructor has higher priority than PMD constructors.
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
index 2cea7c272..6c016c82e 100644
--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -203,5 +203,6 @@ DPDK_17.08 {
 	global:
 
 	rte_pci_get_iommu_class;
+	rte_bus_get_iommu_class;
 
 } DPDK_17.05;
-- 
2.11.0