From patchwork Tue Feb 23 18:18:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Connolly X-Patchwork-Id: 88108 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 30C4DA034F; Tue, 23 Feb 2021 19:19:12 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A545E4068C; Tue, 23 Feb 2021 19:19:11 +0100 (CET) Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by mails.dpdk.org (Postfix) with ESMTP id 289434068B for ; Tue, 23 Feb 2021 19:19:11 +0100 (CET) Received: by mail-wr1-f49.google.com with SMTP id u14so23574684wri.3 for ; Tue, 23 Feb 2021 10:19:11 -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=Gn62CWWfekpfkkKu19di9INHyRDoLptZqIZ9inGpWRE=; b=HTFdJdFnw15u2RXaakKmNYSz0Vv72jEcRY3E5eMbU+NiR20/F1EgYDa7XmyjCAP2Zo Z7nhQRNHmxS/+LfqTQy1HYEKqllFnIgiOc0oDdztM1pFuzMaqUdRQ0LOfwLt5vT/tjyX 6OFCxh4y0c0hl+6zaOmWhaaR8UeGNaKwYvtHJOF9VeCJHEetzigz4lsx+s349Tjw2LS2 0VT3F1RWvQM4jyRvVdaRXppcI7UyVxPprAat5GKNeb9PAKyMP5H32VzB+g0YavDxrs5u ncjFC8v4IpC4pNFoK+Xr0v5Mn6Qx/8QK+qvEl79BpP0Uq4HBqprgZFK1olY3JGasSLo1 fgGA== 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=Gn62CWWfekpfkkKu19di9INHyRDoLptZqIZ9inGpWRE=; b=XmHhc7BFIfpwbtffqojGcZyNBFBujNcsZrzfMYnEhZ/dYENs7Nc4C6TPY2i0xAWMwJ 78kYJLqRE4Na+XZ6sncHvMBDSaewjY/xoafgHYYmDuROQtpSAdHbEWvljOKBjRt57iPI iPfZ9T9e06NagVmqd8mm7yGhEtiuSuqGm9yu53ov4E3lu0KiX0r7YAHX//+Bg6BrbOpn 9eROBRwF2gpgQQWHMqCUzcGPgRf0mCZH6SejNdTDNrbfY7IzbOZ2P1xpTk1ssGAH0qN5 zX8UkY+V13bnWqXIG5t8zldWVw2jHkpiQCyn7Trpg9UKJz5Nr1z9mwigdJy6FyJ7N/FH Jl8A== X-Gm-Message-State: AOAM532xyyGVPS/9DSN5gkR8Yogp6eFhc2kiQklgIBBHCULwodp0WsBi nUc9b+2IXLSa5/J2f22lu5MVHw== X-Google-Smtp-Source: ABdhPJyWijKNMhHpeUiWbuA541HMUtcSLpTSOw5XUQLPrBGZZ09f8Bo6z/zXYfNvfoQwMaE9cNyRKA== X-Received: by 2002:adf:80c3:: with SMTP id 61mr28021800wrl.100.1614104350819; Tue, 23 Feb 2021 10:19:10 -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 x66sm3306849wmg.6.2021.02.23.10.19.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Feb 2021 10:19:10 -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, 23 Feb 2021 18:18:57 +0000 Message-Id: <20210223181857.2516-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 v6] 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 Acked-by: Dmitry Kozlyuk --- v6: * no changes - resending to resolve spurious iol-testing failure 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 */