From patchwork Tue Feb 2 13:54:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Connolly X-Patchwork-Id: 87635 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 C3BFEA052A; Tue, 2 Feb 2021 14:55:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 82BFA2402DD; Tue, 2 Feb 2021 14:55:02 +0100 (CET) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by mails.dpdk.org (Postfix) with ESMTP id C51672402C6 for ; Tue, 2 Feb 2021 14:55:00 +0100 (CET) Received: by mail-wm1-f51.google.com with SMTP id y187so2379886wmd.3 for ; Tue, 02 Feb 2021 05:55:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mayadata-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iAiVkTXueTWr+0w27K1lFFosWpfV3aICJbqjiYicw+o=; b=j08vFGX6M/h5qctkm5n5EzkwdmVrSFU1LzjuXTGQRmY7KpqRESrn3qT+9wUzOYstWF 0ft83YF7kziFMoWRf4KmhyYhEQa0jDAYlwepQ4/yAXkooiCOi2Y4z6Su+rheg4iL8G+6 /3/1OugrxuuXew4HC2eeB0elgqEP7lIEqk+RAjAoCPjoFxBS+AGHylOzk+aQODP/dBk9 ZBtCE3w9VlixZ2PKKT2ynvp15yFhk7FpGvuTrnLrWGkvGwidV7eQjgExTQMsPkA1bJRc xXCr1jdFTm2eykammLd1+ArCxwFSWUlJ1JAl7pfWm7LPqpzh+0ulUDAD3ewVK/9qqKy0 jGyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iAiVkTXueTWr+0w27K1lFFosWpfV3aICJbqjiYicw+o=; b=MN6vcK6W5BgDfN346GNb592L20rTYuarqAVgeuSvGSDmQ8YycqRA/Z9T+U1HNjMYJz NZ199F98GrN3QEdChOec2tL7G6hCdxnsZbj9jiw5I1BElRU5joWllGfwjhxdC60/pmXu 7CjY7fsBQSRzqBENFnjpQ+RexmeiW6UPXVWhh4SJu38UVu7pGZPaqgx+vILjuAtVXUEk F8b8JJ7XCATmNvxJIDRQ6YB7kVFoqWmR/i2VLdn7HqoFpAMatc1hFzZMZtAKKiPfOCt1 D5HhOh+vk+LioRd2l1biEM1o1t0L+/BS3SNASB3C8y+VNjoStt096tglYVRiJV9/Qpga 4ENg== X-Gm-Message-State: AOAM531L9vG7LJY12rWJjy+lqzF34UTj8vuXlFjiHsPs4GCUa0jmngE0 L+7TDFl9VsJsNFyX80p7urgAJA== X-Google-Smtp-Source: ABdhPJyNx9KmaLs6KoypD8RJ2AIQoxE97hefFF8eRHQSRpSf5G/cRCQEmMxSB+lGQvj7Hz1iyT44Kw== X-Received: by 2002:a1c:730f:: with SMTP id d15mr3722507wmb.135.1612274100538; Tue, 02 Feb 2021 05:55:00 -0800 (PST) Received: from FENIX.localdomain (cpc98320-croy25-2-0-cust77.19-2.cable.virginm.net. [80.235.134.78]) by smtp.gmail.com with ESMTPSA id e4sm32472204wrw.96.2021.02.02.05.54.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Feb 2021 05:54:59 -0800 (PST) From: Nick Connolly To: talshn@nvidia.com, dmitry.kozliuk@gmail.com, pallavi.kadam@intel.com, thomas@monjalon.net Cc: dev@dpdk.org, Nick Connolly Date: Tue, 2 Feb 2021 13:54:47 +0000 Message-Id: <20210202135447.28868-1-nick.connolly@mayadata.io> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210125170821.11306-1-nick.connolly@mayadata.io> References: <20210125170821.11306-1-nick.connolly@mayadata.io> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v5] bus/pci: nvme on Windows requires class id and bus 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 Sender: "dev" Attaching to an NVMe disk on Windows using SPDK requires the PCI class ID and device.bus fields. Decode the class ID from the PCI device info strings if it is present and set device.bus. Signed-off-by: Nick Connolly Acked-by: Tal Shnaiderman --- v5: * Add missing version history v4: * Use #define to determine length of Class ID v3: * Put version history at top - v2 mistakenly had it after the diffs v2: * If only a 4-digit class ID is available, convert it to 6-digit format drivers/bus/pci/windows/pci.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index f66258452..dceb0f4b2 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -23,6 +23,9 @@ DEFINE_DEVPROPKEY(DEVPKEY_Device_Numa_Node, 0x540b947e, 0x8b40, 0x45bc, * the registry hive for PCI devices. */ +/* Class ID consists of hexadecimal digits */ +#define RTE_PCI_DRV_CLASSID_DIGIT "0123456789abcdefABCDEF" + /* The functions below are not implemented on Windows, * but need to be defined for compilation purposes */ @@ -280,17 +283,29 @@ parse_pci_hardware_id(const char *buf, struct rte_pci_id *pci_id) { int ids = 0; uint16_t vendor_id, device_id; - uint32_t subvendor_id = 0; + uint32_t subvendor_id = 0, class_id = 0; + const char *cp; ids = sscanf_s(buf, "PCI\\VEN_%" PRIx16 "&DEV_%" PRIx16 "&SUBSYS_%" PRIx32, &vendor_id, &device_id, &subvendor_id); if (ids != 3) return -1; + /* Try and find PCI class ID */ + for (cp = buf; !(cp[0] == 0 && cp[1] == 0); cp++) + if (*cp == '&' && sscanf_s(cp, + "&CC_%" PRIx32, &class_id) == 1) { + /* Convert 4-digit class IDs to 6-digit format */ + if (strspn(cp + 4, RTE_PCI_DRV_CLASSID_DIGIT) == 4) + class_id <<= 8; + break; + } + pci_id->vendor_id = vendor_id; pci_id->device_id = device_id; pci_id->subsystem_device_id = subvendor_id >> 16; pci_id->subsystem_vendor_id = subvendor_id & 0xffff; + pci_id->class_id = class_id; return 0; } @@ -339,6 +354,7 @@ pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) if (ret != 0) goto end; + dev->device.bus = &rte_pci_bus.bus; dev->addr = addr; dev->id = pci_id; dev->max_vfs = 0; /* TODO: get max_vfs */