From patchwork Tue Nov 14 10:23:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mingjin Ye X-Patchwork-Id: 134254 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 23D3D43326; Tue, 14 Nov 2023 11:38:14 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0C0434027D; Tue, 14 Nov 2023 11:38:14 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id A037F4027B; Tue, 14 Nov 2023 11:38:12 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699958292; x=1731494292; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=oFsHjZJuusbFVtD09ho7788IdxmEY5gAqTJAh9OzzLM=; b=CYceW8IGk8NLdy9Zih5d1FRIMBYglf9uWRqEDZ1CH84x2EA4voFKBvVU bGCm9eyXJsOpMFo5O92MLNZHDxuguQwQYHlwTW+BAWfeemouIKx0ihtwB 68qMeOptBYeEpgKedYhtJfyb+9b4Ly9mwIEDqoRPCEMhWgyWQIOvDpPWv LuIgytsTyO5yD3hMT0IYx/IlC2V84M9uXmN9zGDXFfVbS8S3l0yvowwmp eEAFxcFhBHwnhhhnSmk1ZO/dxbtVaj8pE+qe6rld+SLgWR/N/vJwYvVTP MQUoMJs8gaF/z1HZ+XPFvnOvkIluyqnnJawcn5DvgeA4tjRl1jO0BDpI0 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10893"; a="370826386" X-IronPort-AV: E=Sophos;i="6.03,301,1694761200"; d="scan'208";a="370826386" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 02:38:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10893"; a="768218233" X-IronPort-AV: E=Sophos;i="6.03,301,1694761200"; d="scan'208";a="768218233" Received: from unknown (HELO localhost.localdomain) ([10.239.252.253]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 02:38:09 -0800 From: Mingjin Ye To: dev@dpdk.org Cc: qiming.yang@intel.com, Mingjin Ye , stable@dpdk.org, Anatoly Burakov Subject: [PATCH] vfio: add get device info API Date: Tue, 14 Nov 2023 10:23:00 +0000 Message-Id: <20231114102300.409158-1-mingjinx.ye@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 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. Cc: stable@dpdk.org Signed-off-by: Mingjin Ye --- lib/eal/include/rte_vfio.h | 26 ++++++++++++++++++++++++++ lib/eal/linux/eal_vfio.c | 19 +++++++++++++++++++ lib/eal/version.map | 3 +++ 3 files changed, 48 insertions(+) diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h index 3487c4f2a2..b3f55963e3 100644 --- a/lib/eal/include/rte_vfio.h +++ b/lib/eal/include/rte_vfio.h @@ -212,6 +212,32 @@ 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. + */ +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..5810d9fcd7 100644 --- a/lib/eal/linux/eal_vfio.c +++ b/lib/eal/linux/eal_vfio.c @@ -1222,6 +1222,25 @@ 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) +{ + if (!device_info || *vfio_dev_fd < 0) + return -1; + + if (*vfio_dev_fd == 0) { + if (rte_vfio_setup_device(sysfs_base, dev_addr, + vfio_dev_fd, device_info)) + return -1; + } else { + if (ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, &device_info)) + 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 e00a844805..8a211aaefd 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -413,6 +413,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 {