From patchwork Thu Jan 28 17:00:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Connolly X-Patchwork-Id: 87495 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 1F5BDA09E4; Thu, 28 Jan 2021 18:01:08 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0A17540682; Thu, 28 Jan 2021 18:01:08 +0100 (CET) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by mails.dpdk.org (Postfix) with ESMTP id 478EB4067A for ; Thu, 28 Jan 2021 18:01:07 +0100 (CET) Received: by mail-wr1-f44.google.com with SMTP id d16so6094483wro.11 for ; Thu, 28 Jan 2021 09:01:07 -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=CNf+85cbXh23ehZIgiERZt1a3GwrUV50nvLvRDpYiEY=; b=Ri8H/yOxMa7VidQgKlcCIUW6VMCUuEspQPDJIt8gIZ8i3NXdH9yXBIJKXxhvAMfpMJ N6xO3asZaF7Ux7I3CMmCrBw87GDqyGLlxwRffOgF1VwFNM6ZCTkmcf5kKVm7wo0kD8SX oECe4uOG0c85+SfA5U8SDxZHmkcAwySG5vxQnoK2xNc7Mdm2tZvYZmosxN/o85y/B5om qX+zEeESULjZSt3ehOLQYa+FpogpEvGae8Y93pbpn7tYMr36W93g4/GammbB92covJBf kpoSMdvFUiwy1u/ST58AUA916/r4TuAFfEgu93OaM3JP2jsv/qz/Fd+XteUfafavYD9N rVmQ== 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=CNf+85cbXh23ehZIgiERZt1a3GwrUV50nvLvRDpYiEY=; b=Jc9J418RJXshPpPvT9AOmXgnscHanwuGOFJIYLXRSSnLB3q9/qrQvL+VIha9kaA+Fv sQQcjsp81OjnTHjD0CeNqXmn026qAIU7F+GgQ32p8zthnsr/g7KzGG5SU17HtMnTY79T wtnG/yvVB8D4denoIJpqLFPQsjxVbiy4WEcXylkZFtMNFDPlE5QxEjONLQ5P02VgXo2A UViRsm6hL/Hw7JUHtLuYen8IYn5RfnF0Mi5QmmnEJQzpLIpOW9indW+KkOABNZKWhMNp 2nwFz97sIOSaZn55KSwG7X5HdGrrhs/U7o+tpkONJ3Wx/X9UrKoakD0Y2S66C8GEusho Wmgg== X-Gm-Message-State: AOAM5330I0chh9/Fvf+adCI5SnwFbln6vw6iYE62p5COjrEpPQkoT/I2 NohEQ6JJ3Qnz02ppP4t7JaIaZg== X-Google-Smtp-Source: ABdhPJyMKn7D3MonyoR+qG0q7OIyvagxuowX8gpOtRqE61hraxcZY5aw8KuHT9cxTSrNH9F7+A5S5g== X-Received: by 2002:adf:83a6:: with SMTP id 35mr17235989wre.274.1611853266976; Thu, 28 Jan 2021 09:01:06 -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 d16sm7519544wrr.59.2021.01.28.09.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Jan 2021 09:01:06 -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:00:46 +0000 Message-Id: <20210128170046.3826-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 v2] 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 | 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 */