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 044B6A09E4; Thu, 28 Jan 2021 18:04:53 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B3FD740682; Thu, 28 Jan 2021 18:04:53 +0100 (CET) Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by mails.dpdk.org (Postfix) with ESMTP id 2AD6D4067A for ; Thu, 28 Jan 2021 18:04:52 +0100 (CET) Received: by mail-wr1-f54.google.com with SMTP id z6so6098715wrq.10 for ; Thu, 28 Jan 2021 09:04:52 -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=wT4P/q/KIw91SXYmx0WrtagpWtxyx6Dfc1UeXAWRmZs=; b=fvaxGwoxrl8I+MqiVnrhqTLFH3M5AN8dObtX2yenULZhHx2mNaf16NPGLzk054HLlq SiDg7sbkmHfRnlpgnSPfF7YyY9QiDBE83ywQIKPqHhGokvZm4ZX4nubY23y4EmchYZm9 pU8wspNBf3UbSAMhNsL5nG4dLH6MR/jzfqEfrwGCS2obLzgFtWITYvjmry6NV3LG17JT GbX+RtIqf3nCw6s3w+WNge6C8lr2H3xSypTy5ngcaQNAr5xQG3WeYxpBhicBDPBwlrPw UCgzw4EdasJYxcKj8Q0LLhB+8geIFQdSSgC1W41skkte0RfAX0f05v1kuhBo9ImIWwwj AsrA== 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=wT4P/q/KIw91SXYmx0WrtagpWtxyx6Dfc1UeXAWRmZs=; b=gvQhZkHMY6vyOx4PSnjj5s19T1iBiqzrwZ1Jb1l3xaUzz8b277Ka9xpeuHz9848elR 0dWfWq0pfzddtTboqDSlE1B7AfT39VtrE3++/f+GKpJczM4WPhm83ozUmLXF4m+FjRNM rv+gaTJiiskFKM+mhNEUgzbztQNbhJoQ3wOKA12zcAa2T11DjKI4uwrMk3m6mEX6pX2U o6ktv41zCGDwzNoJi2kZzXN8XD15d58uu6wPHEgOuga2R8z+I4DVrdFdBCeLH2cBPEtN Krk9ggAS/B2ZBEhYFCHv7TAU75TStwj/XH6+9/x/xTFbzaPZb3BfzgaPIFHfFgPl5fxJ wmdA== X-Gm-Message-State: AOAM531KDBB4bkneY7w7AcV3DWY9hnVVfhI4uWaLfXFO3DpVmghpbfMk q3vy+qm9RDXKCIu9MtQvPMEHKg== X-Google-Smtp-Source: ABdhPJx6Hrnzvk+MlRGF9i9D+c6izJHgQxxSWvv85bv3hHFuxXmmgbSsUJpT4ZImtkIleaITuHPvtQ== X-Received: by 2002:a05:6000:188c:: with SMTP id a12mr17916212wri.105.1611853491884; Thu, 28 Jan 2021 09:04:51 -0800 (PST) Received: from FENIX.datacoresoftware.com (cpc98320-croy25-2-0-cust77.19-2.cable.virginm.net. [80.235.134.78]) by smtp.gmail.com with ESMTPSA id b7sm8288248wrs.50.2021.01.28.09.04.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Jan 2021 09:04:51 -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: Thu, 28 Jan 2021 17:04:35 +0000 Message-Id: <20210128170435.4304-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 v3] 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 --- 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 | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index f66258452..d380fc1ae 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -280,17 +280,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, "0123456789abcdefABCDEF") == 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 +351,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