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 39D04A052A; Tue, 2 Feb 2021 14:45:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C2D332402C4; Tue, 2 Feb 2021 14:45:13 +0100 (CET) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mails.dpdk.org (Postfix) with ESMTP id A5DFD2402B5 for ; Tue, 2 Feb 2021 14:45:12 +0100 (CET) Received: by mail-wr1-f51.google.com with SMTP id b3so2390037wrj.5 for ; Tue, 02 Feb 2021 05:45:12 -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=wahA3d+zuIFub8pGHL+AwUqnk+m9jNlnGK+X35NTG7I=; b=FdeQB+lDQs8iOqBus/eoBxGy8y/FnukZdiC6xuT1UXcu5OnyLvoBSvZ4V9JkAOq6l/ eK0s0sKVLRo8eLlFOkVRFdivmxkejOk/yRT4mf7RyhJoGsXirBJKSpmARckcAiVOOmed KxXXReNTbSt3hD5mDP8DaZa+a9E7FpVkIl3qOd+44hDxKLVBe+kz7hMvpyY7DH/wl5U1 /qR6c8J41YpC+hywkmRzoCPdioidGl9Fta88y+bH/FXssy1/ONitYwSaEeLHZ5rprGfa s+HZAuyFezGK1jBd4d0scmuYxSK364AF4p2ObyneOq2gFN5h8XCiYbK0vSc2AsYkj/Km Mv6w== 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=wahA3d+zuIFub8pGHL+AwUqnk+m9jNlnGK+X35NTG7I=; b=drdI1meaup/HGXR0g9ezaVK6jueFi0F1wdqkjyW7nRUqPo9za/X1+MkK4Qu9Z871mu n0k+oHMieM30VcLi9t7bICCsx2xSeTR+2j4n50j5w54y0arRB154FJSNbnlYrlD9FLrF r++Kie6R/TCaMqZj02CwQHJcwLagJA8sLHwpwfClvyblJnxqUa1uvd23VahrOMMGtfQ9 alEsJ40SMRATq6iZGxg9hJZtRA2Ar/oX0rdtOtXaUV4i5zKbY+eAHNl6A34UryGytifO TnvDmkQ34RMBTFhfpw1b1q2QZJ3nQ3RJwNrRbHyFB/v8H5Oa2jAc3Y+PL8ouN28Xgo2T GJiA== X-Gm-Message-State: AOAM532zsojLIMmWjkIPkTfRBuKrhMOCYcaAPSLxCvT1UAzWzLvgvgvV Hnb9i0fp1X2DUGRNUI2l5xBD7w== X-Google-Smtp-Source: ABdhPJy72cWr57onwRM+lBxCkbYRE0HR9DJUyPGg1MHiHjAzoFT4Zg5dpdhZa8EN3pF/tptucebmwg== X-Received: by 2002:a5d:6691:: with SMTP id l17mr23685767wru.372.1612273512328; Tue, 02 Feb 2021 05:45:12 -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 b7sm35327340wrs.50.2021.02.02.05.45.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Feb 2021 05:45:11 -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:44:57 +0000 Message-Id: <20210202134457.27666-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 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v4] 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 --- 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 */ -- 2.25.1