From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44F84C433DB for ; Tue, 2 Feb 2021 13:45:15 +0000 (UTC) Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by mail.kernel.org (Postfix) with ESMTP id B0E2364F70 for ; Tue, 2 Feb 2021 13:45:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B0E2364F70 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mayadata.io Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org 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