From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CA2FF4339B; Wed, 22 Nov 2023 11:38:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA91240A81; Wed, 22 Nov 2023 11:38:05 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) by mails.dpdk.org (Postfix) with ESMTP id AB48340A77 for ; Wed, 22 Nov 2023 11:38:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1700649484; x=1732185484; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cufHr8mNyUc91pqOAeiKkzE6kSAjmEr+8oi2XGq9PDE=; b=Dqs1ala0Qlx7HHiAXjbmgFejgErMouFheXg+cCADFbyIS4Cr+EgnXO7q 0Q1iBcHexPsWImY0Oh20NSVQjHHV+Lkz82V8lQ8b+QxT7VbUreq74jgnL mLMt9eeu7lNFc5a2/3PwYcA9rota3bc7JxOVxqqe32ql/BSPuB9ZfVnmP x2G3NeiCn31Njj5k7IrzJJ6LXjyOEUH5p+Z9WYp4pvp6VNoHbLZpZRiVn F9zDIUuSFn6hiOfARlMchvY1MqEZ35RydQ0oM6XI1RPRzRnxbH9blzkT5 BQp5p6GzASWZWXScmOJzbNhljvI2IZAasXMvWKIcaV9ba9N4L/aNrHI9Q Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10901"; a="5221088" X-IronPort-AV: E=Sophos;i="6.04,218,1695711600"; d="scan'208";a="5221088" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2023 02:38:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,218,1695711600"; d="scan'208";a="8389755" Received: from unknown (HELO localhost.localdomain) ([10.239.252.253]) by fmviesa002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2023 02:38:01 -0800 From: Mingjin Ye To: dev@dpdk.org Cc: qiming.yang@intel.com, Mingjin Ye , Anatoly Burakov Subject: [PATCH v7 1/2] vfio: add get device info API Date: Wed, 22 Nov 2023 10:22:31 +0000 Message-Id: <20231122102232.108299-2-mingjinx.ye@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231122102232.108299-1-mingjinx.ye@intel.com> References: <20231114102418.409285-1-mingjinx.ye@intel.com> <20231122102232.108299-1-mingjinx.ye@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch adds an API to support getting device information. The driver can use the "rte_vfio_get_device_info" helper to get device information from EAL. Signed-off-by: Mingjin Ye --- lib/eal/include/rte_vfio.h | 29 +++++++++++++++++++++++++++++ lib/eal/linux/eal_vfio.c | 27 +++++++++++++++++++++++++++ lib/eal/version.map | 3 +++ 3 files changed, 59 insertions(+) diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h index 22832afd0f..50c4f5b617 100644 --- a/lib/eal/include/rte_vfio.h +++ b/lib/eal/include/rte_vfio.h @@ -17,6 +17,8 @@ extern "C" { #include #include +#include + /* * determine if VFIO is present on the system */ @@ -239,6 +241,33 @@ int rte_vfio_get_group_num(const char *sysfs_base, const char *dev_addr, int *iommu_group_num); +/** + * Get device information + * + * This function is only relevant to linux and will return + * an error on BSD. + * + * @param sysfs_base + * sysfs path prefix. + * + * @param dev_addr + * device location. + * + * @param vfio_dev_fd + * VFIO fd. + * + * @param device_info + * Device information. + * + * @return + * 0 on success. + * <0 on failure. + */ +__rte_experimental +int +rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, + int *vfio_dev_fd, struct vfio_device_info *device_info); + /** * Open a new VFIO container fd * diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c index ad3c1654b2..05a0091006 100644 --- a/lib/eal/linux/eal_vfio.c +++ b/lib/eal/linux/eal_vfio.c @@ -1222,6 +1222,33 @@ vfio_set_iommu_type(int vfio_container_fd) return NULL; } +int +rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, + int *vfio_dev_fd, struct vfio_device_info *device_info) +{ + int ret; + + if (!device_info || *vfio_dev_fd < 0) + return -1; + + if (*vfio_dev_fd == 0) { + ret = rte_vfio_setup_device(sysfs_base, dev_addr, + vfio_dev_fd, device_info); + if (ret) + return -1; + } else { + ret = ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, device_info); + if (ret) { + RTE_LOG(ERR, EAL, "%s cannot get device info, " + "error %i (%s)\n", dev_addr, errno, + strerror(errno)); + return -1; + } + } + + return 0; +} + int vfio_has_supported_extensions(int vfio_container_fd) { diff --git a/lib/eal/version.map b/lib/eal/version.map index 5e0cd47c82..c06ceaad50 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -393,6 +393,9 @@ EXPERIMENTAL { # added in 23.07 rte_memzone_max_get; rte_memzone_max_set; + + # added in 23.11 + rte_vfio_get_device_info; # WINDOWS_NO_EXPORT }; INTERNAL { -- 2.25.1