From patchwork Wed Mar 12 22:59:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Micha=C5=82_Winiarski?= X-Patchwork-Id: 14014021 X-Patchwork-Delegate: bhelgaas@google.com Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F029D1D5CC6; Wed, 12 Mar 2025 23:00:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741820442; cv=fail; b=jUPF2Sn9GEytKQw418YMciGe69Zybvt+fGu5Eij1XsBLfh3fqgS1hBTP+4wSci5EMjIrX9uJjuRoNf45ocpYJ+yygksu0b4R00tlAKaeCL1ipvPFu43+jXfVBSGUVEewYrvCCrbeZoa5J6040sSak660rf7kg+aaflT72X7cH8k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741820442; c=relaxed/simple; bh=qtnCioYzMCkom9EPC/STqqRZo/KsY0KgZyXS6FSiysc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R9Hq31F5SEghn7xFytgjLCbvjHxf7nJjRsEfRm4GsI0B/Ll1o+obwRomYs/+xdYYF5XzmFAHjJRPGEtw88G86irmQ4fnDbRyCzZPMC3qsxvTumaArwEKY3MIfgM9k8HuWlzVsGqE3+wd2Z6/ZWvOtl2yU893xXszusgW+FrHEjc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=gfh9fdDB; arc=fail smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="gfh9fdDB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741820441; x=1773356441; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=qtnCioYzMCkom9EPC/STqqRZo/KsY0KgZyXS6FSiysc=; b=gfh9fdDBXoZnVcyp95tQTdfAZzRdZVj+bkmP3xJqk1xM3G/jz6H6bkZV fDESmjV6tzHfD9KLWBvah9SZ75lqA9iRP39gngWO3bIb6fngQWKVVuIz6 CBNvnUHiFjr1bUla7r+f2ZpiONKOW7zXHjjG6PJnMoFF2RW2ld5b1pNZt s8J6fSwLRHBELC4scLb5TZxNlhgpEXFvbDq0i3cvY5XXO10oJkzVMERR7 Ki53ZrLOSs70NgC/50FZ7/oWPmdw57rz8H4q7jGNmgDYGXzgjaWkqdQ1r 5TZ0v2oH/V2uI3BhYnhvoO3vuE1uqfjM3Dr8i2K8lTtZ4/+xPLe9H7Pc0 w==; X-CSE-ConnectionGUID: vKyrfepwRq2lIMWjIEDJ3Q== X-CSE-MsgGUID: DpqHHlEgSmGmaIF8dQErEw== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="43103745" X-IronPort-AV: E=Sophos;i="6.14,243,1736841600"; d="scan'208";a="43103745" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 16:00:35 -0700 X-CSE-ConnectionGUID: nHQvRjleRk+71qeDcOZhZQ== X-CSE-MsgGUID: 0q1+Px1KSBSL4uTmvz7yjw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,243,1736841600"; d="scan'208";a="151604445" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 16:00:35 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 12 Mar 2025 16:00:34 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 12 Mar 2025 16:00:34 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.44) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 12 Mar 2025 16:00:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CQgYaLqw3HCUjAngPkghZcXCOozcIwnW32pXmSnGxJuU4bHlxfJs+JdO1jXMkBCvEIOcSzHmbHLICgTy8iUQE9DrAhoSojKhgvIdSdpHFLvAKUAgjYGiJVyvnJMiHcCYdm2/1otBjHwUs/ZNFBrMw5WpoG3w/DwynqKish/HLGDQoWsOqrZA7lS3+TdwJuSvU0ASKnEvOvCkz+FTMKPr4jr1U7ZTvfYSwI/0vKIbzlGoY6qTV3Vk9baifUc8l/6wAIDZes2zeBeVMSTq8TsYH2/FRJtnTk6pTd52mzbEWka2QtulxMK+N3qQMYkCu2tJmWaxneqFNHJ/PXodfh73Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zU4+soR73AbeVtWJ9o1ctMXYyUuJ1z7e0Y6XZTGEFWw=; b=jeiKn2D+pSTfXvG5eV8JbC5DxfOsHYJ7tg5c6k7y7UJpCSaxqWjAv2qFH8fhXeN2nMXbIvPkfvjzIux7I/kjY6NncZyD6FDqiZnWzhKyXAWNy/802tOLpfziG0/QzsbsQVGaQMHtlW54OYfC/WsYDEkCYrYdQrbtJ4GCloYcGyVtMYSX5IBwOdumLwE4XFHf2f6mIiGxvHPtV6grj5NSa21c0m4KFphZVZEcVSHUtW/G+oZ/iLMWlZm4NL2Ro0H/nrheZmkcrW/pDf5R6lG5tKiwFUnNn3pgqsWzNI+EuyZbaYirxzcNb0hQnnuB6dPuJXGW/DAONbIM/7GpzP8haw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by SA1PR11MB6735.namprd11.prod.outlook.com (2603:10b6:806:25e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Wed, 12 Mar 2025 23:00:32 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%6]) with mapi id 15.20.8511.026; Wed, 12 Mar 2025 23:00:32 +0000 From: =?utf-8?q?Micha=C5=82_Winiarski?= To: , , , , "Bjorn Helgaas" , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Krzy?= =?utf-8?q?sztof_Wilczy=C5=84ski?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= CC: Rodrigo Vivi , Michal Wajdeczko , Lucas De Marchi , =?utf-8?q?Thomas_Hellstr=C3=B6m?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Matt Roper , =?utf-8?q?Micha=C5=82_Winiarski?= Subject: [PATCH v5 1/6] PCI/IOV: Restore VF resizable BAR state after reset Date: Wed, 12 Mar 2025 23:59:44 +0100 Message-ID: <20250312225949.969716-2-michal.winiarski@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250312225949.969716-1-michal.winiarski@intel.com> References: <20250312225949.969716-1-michal.winiarski@intel.com> X-ClientProxiedBy: MI0P293CA0012.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:44::20) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|SA1PR11MB6735:EE_ X-MS-Office365-Filtering-Correlation-Id: cdcdc688-0f49-4352-ec3b-08dd61b9b0e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?8/FKPZ6oIndLA+/INhedlwkvE3hxjU5?= =?utf-8?q?JBawuPzKT2e+agHdh3rGtqCqD86peEuGtm9Eo7ciWKwkuPTxjA0ba2B+xw+kUFGxX?= =?utf-8?q?e5F5Gg1wWsNlZHXg/OYrokVGIZhIidEOVR0eYl7unhqdHURUkm68Q0Q2W2EOuHGRb?= =?utf-8?q?FRfRs79sxqCKkeA147PsIvmH3M3PYs5KDiTn6/1poHiCRsmk9a1HdOtJiu3XUSfu9?= =?utf-8?q?axv/dKmIHgStO0kcwZF71L0KAmnyLbhOEr+q5B8GXEpFxq18EvvrhZdTzJOnfmgNC?= =?utf-8?q?7UE+cNSg2sj5pgIg+CY4JIUEy0XivPYHkMWXTCu3OGn+hDAcptRPeLoSzGrQNLuiF?= =?utf-8?q?YdvNfXa3TZYzNur6Ek0JtJJNANNamlU9ZoNk+s/kRaQuq19JSIVpniJr+L1c5TWjb?= =?utf-8?q?56e1uHpC83HWAUjl8IdBQLcNJ30ZesCiaL16Ue0ptMzUV3DuZOGTmOAFWBW8AYFQL?= =?utf-8?q?PI9mmf3TwvMrxyno9h1NxplbgAOrU8+14t4kTzN2SOw5QFUOX1yxYJONY4765NwqK?= =?utf-8?q?NwkaZeDz1+kcKQSjABzvOgsT/qrqA8UikmBay+kIpKt9mPKo3k3ZsBv84GZ1Ew34u?= =?utf-8?q?7yn3CzL4RcTPBy2MLthwU/puNskdYSjcHzomy6sSSn3JwpRwBiSy+qlKdiPO0zKGt?= =?utf-8?q?1YWnPb7yeGjar/dWleq2BpIYPrl40ElwWkVjJm8x5Kfn2+Hjzv8aVTRRdKIZkiv1w?= =?utf-8?q?Jka2AdxTSCamHmK5F8SuRg5EVS5IZl4NPWy/4flt9SgE7MkyXrTquAy6NyZwOj2xC?= =?utf-8?q?mMeYNRfjtuL0zo8cix6WL6WVzCQXosi6Yt+mv8qDihhEt1i92t3xmFuaDWvUNbhAd?= =?utf-8?q?Dq3olhL0UiXrN7FTbeRv04A8LO+nFGWcGyzbOII5KkO5Q98cMo27XLoJJm3PfgL7N?= =?utf-8?q?WGoxMDAZCvkZncEUiD4O5FbosNbpUHDNEO8ELOIqM9Dtjh+1XpDy++o/2QCSl0U2l?= =?utf-8?q?gGnYo76w+dbtMNNTgEb5OTScK5ttYmecTVt0+Eq7vakdk0V9p3nRzc6oln9uByLg1?= =?utf-8?q?suN/xM7Nnz0HOu2duhI9yvWLeVUO2DKavGbox8V83Dl4j7Kc1PN0C6c0BLkl5vW+t?= =?utf-8?q?CllbCQWgpTOzB0iOkKVvgEs2hQO8zFyjA0qHqdtMWT/uMAKk61LgvujBbW1gqHoXv?= =?utf-8?q?PszaxgC4U+g/S/XHxN/FbdQjRMvAmoAzgKXb+eWPTeAu4z3mWl7UdyKNfH1DYXzOi?= =?utf-8?q?B9bppK9I3Tec4+Js2JSfb3d2aPsA3kwZxIDepkHzJpZnoIeN5qQ2SveMAtLcCsKg1?= =?utf-8?q?sfWsyVNsRJpcy4G18Wl2hYwUUOf8M4mYbGspnyeafyQO2XsILZ6jr6A13TkGmxURW?= =?utf-8?q?iiaw4ix1kW49?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?zfLmD/4KFcyy+3wEFxaBELLi8NAg?= =?utf-8?q?OFjRou1p8idpeAgZyb5+wWtjkAhmJzOwclYm2DxNbpDirpLotVfZfd1aKFKgtO4He?= =?utf-8?q?zHBWhEgSMKAqWqM8/aq+9IagyyBtYxOti14DpxBk0TFWlD1PVp/M6obaV4zjAaZxw?= =?utf-8?q?ThvGYeLoS/JmdoDk7/87yjSCKA7PxodfUNDqFV1wX5HtCzI2uMlUq2/t262eUBso0?= =?utf-8?q?rh4/fgoGXfBeXGKU0K+hYZwe52w7/XKLBZTs6kC/Og92p7s9WN0UdJsmeBlyNfJpY?= =?utf-8?q?QMxFH1Y8x2InbLfQTFrpSlm8nWTo8sJidd/F0LrFNbeo58ExOY1iXYbqPk5t/nU+t?= =?utf-8?q?QuZmb3om1pNXed43wUBcOA2nQWgHO5fc7iNxAX+s+vJDFcw7Z8d9H9RxsdvNJtWS7?= =?utf-8?q?ePxDtzYkCQnqiVHORR2h9VJsoBDQHXAwjaSKhQVZssv0SGum0b2OPz9wfTBeNcoLG?= =?utf-8?q?ZOPEvSLJ8Q1d0W1wplh2QPHIqKrd546AcX4RKYkM7X/UVAv5Mz+Kv6IQUdEROqxbz?= =?utf-8?q?nefGQ1cycRAKh8IrEg6X8cB4sQY8V2rX8Vlk2AaC/T36NFDiNc1Daj6ti+7UWAW+d?= =?utf-8?q?u6GIVgoh3HRTdx0JBTlcjmxNvi+G2qZbQtNpeAT/ELBNTZWYoMiCUlHl4/9ReYdQ+?= =?utf-8?q?iuoeQQd3wRSC+S8MkclRDc5v6uNasFIi4QL5fPq2hXYEYXMklOjsYM+q6Lt+AAh6/?= =?utf-8?q?OtiLXSW/ehwGTgDdltBEdb8zxYHrsHT1bVmZvIc09kFzaRKsDEUiF7B1EqnBO+oO/?= =?utf-8?q?BC6ZcRzBhXgQYpLddEMWlrXAm0cnSjKf6rgV/NERxE9fv7ISQOCoElYr0OZ94rz4r?= =?utf-8?q?ribJp5mGiHiNG7lvoTDgtT4RyrGi5POqXgCg3OWJPby1QE7aeZbRKwUxGQW7GO1zX?= =?utf-8?q?TxQdGJ1zOMjC14y2OixvRJT1W4ahkAspDAuGweuA8gX11+rlybzLhmNHThgx8e6ku?= =?utf-8?q?eZA84LzVpGGIjgX6eNYxIAw/ruR9mc2emPL7zX5XcrxRGYuyjjjfH7rg59RBSJbgr?= =?utf-8?q?e8MTaZ1csXD9CUsMwBWeGZN+nqNictr5e7yKuFDvLn1R1VxOEun7UiHnTs2BvwhTS?= =?utf-8?q?9FQ495Xrz9NDUWw63/XVGlCjNDR/ntjliaDj5H68P7Swif4qASyGpKGWZDBpc8ItU?= =?utf-8?q?lWV1VBoQ+oKW7zMf9cVywakY2w5+UeEpA9ccSCGcpVKkt/qG5XLceMN/KXHiQ/peC?= =?utf-8?q?IOfH0RRgMTeK3nbjwVgRK9minhki+dpMk2MF9gk0WItklFvf0vhW+xeoNlWakdTPd?= =?utf-8?q?QwAxNqpdf98K8wUxLGuhrShZGYHLyzAtYh1iiO94zFTPniq/XndMtNHdCmPa+42L+?= =?utf-8?q?o5D+y9at3eyXg5cxpimnf6hqs/tU+TijdbpQ1TJ4jC9QKndmH+LV/sX4vlWUCXJqx?= =?utf-8?q?HLRLg501/RqnrnM8otQ/PtozO94IQDdq39hbBLY8B0rpXMuEpSEqovIBqNJybJT34?= =?utf-8?q?IYtcjtDX6u/Y5WSv5GwRuXO7Wg3BWtv0FnR2icAewSOnMWUvsRqC/WUK5KyChopD/?= =?utf-8?q?1WGPnVHSoewsHK7V86RYjDplKimFTHqR/Q=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: cdcdc688-0f49-4352-ec3b-08dd61b9b0e3 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2025 23:00:32.2175 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3xQMAcNwVmqicNT0lNKLDh7hq0s7EgJIOwgdhhlbpjTVWuwsB5ly5/bvC/i70ueGkhmaLKFalQTAUl6XynCC0PsazadpJ0QK34897ctYYfo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB6735 X-OriginatorOrg: intel.com Similar to regular resizable BAR, VF BAR can also be resized, e.g. by the system firmware or the PCI subsystem itself. Add the capability ID and restore it as a part of IOV state. See PCIe r4.0, sec 9.3.7.4. Signed-off-by: Michał Winiarski Reviewed-by: Ilpo Järvinen Reviewed-by: Christian König --- drivers/pci/iov.c | 29 ++++++++++++++++++++++++++++- include/uapi/linux/pci_regs.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 121540f57d4bf..eb4d33eacacb8 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -7,6 +7,7 @@ * Copyright (C) 2009 Intel Corporation, Yu Zhao */ +#include #include #include #include @@ -868,6 +869,30 @@ static void sriov_release(struct pci_dev *dev) dev->sriov = NULL; } +static void sriov_restore_vf_rebar_state(struct pci_dev *dev) +{ + unsigned int pos, nbars, i; + u32 ctrl; + + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_VF_REBAR); + if (!pos) + return; + + pci_read_config_dword(dev, pos + PCI_REBAR_CTRL, &ctrl); + nbars = FIELD_GET(PCI_REBAR_CTRL_NBAR_MASK, ctrl); + + for (i = 0; i < nbars; i++, pos += 8) { + int bar_idx, size; + + pci_read_config_dword(dev, pos + PCI_REBAR_CTRL, &ctrl); + bar_idx = FIELD_GET(PCI_REBAR_CTRL_BAR_IDX, ctrl); + size = pci_rebar_bytes_to_size(dev->sriov->barsz[bar_idx]); + ctrl &= ~PCI_REBAR_CTRL_BAR_SIZE; + ctrl |= FIELD_PREP(PCI_REBAR_CTRL_BAR_SIZE, size); + pci_write_config_dword(dev, pos + PCI_REBAR_CTRL, ctrl); + } +} + static void sriov_restore_state(struct pci_dev *dev) { int i; @@ -1027,8 +1052,10 @@ resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno) */ void pci_restore_iov_state(struct pci_dev *dev) { - if (dev->is_physfn) + if (dev->is_physfn) { + sriov_restore_vf_rebar_state(dev); sriov_restore_state(dev); + } } /** diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index 3c2558b98d225..aadd483c47d6f 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -744,6 +744,7 @@ #define PCI_EXT_CAP_ID_L1SS 0x1E /* L1 PM Substates */ #define PCI_EXT_CAP_ID_PTM 0x1F /* Precision Time Measurement */ #define PCI_EXT_CAP_ID_DVSEC 0x23 /* Designated Vendor-Specific */ +#define PCI_EXT_CAP_ID_VF_REBAR 0x24 /* VF Resizable BAR */ #define PCI_EXT_CAP_ID_DLF 0x25 /* Data Link Feature */ #define PCI_EXT_CAP_ID_PL_16GT 0x26 /* Physical Layer 16.0 GT/s */ #define PCI_EXT_CAP_ID_NPEM 0x29 /* Native PCIe Enclosure Management */