From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.138]) by mx.groups.io with SMTP id smtpd.web11.6334.1688105228742614706 for ; Thu, 29 Jun 2023 23:07:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@os.amperecomputing.com header.s=selector2 header.b=PhLKtuTs; spf=pass (domain: os.amperecomputing.com, ip: 40.107.93.138, mailfrom: chrisli@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HhlnyTgAc9X6MUkM4o8QdvwHDUObmwSW4XPvglDZcWyUIY33CWCAKD7NyWI/0nEZpnkfQCd1aY38dCSJQKhE07auyjpMuSvvSvbwoLbL5XFYx1uMkJPyxs+oZV56BY6up4XPOnGGdjWMsfjAgIVEeFsFhKEhTWulU7n2e/P02TxPH3FyQnhY5AvO2GIaPKBoqXjL2jb4Dy5euDQT1rs7xjGmpu7bIcZyW7/Fseu27JZS21KV15IHpZhqoQ7qFQ5xHHF8u0VhMhRXTOFjCUgeVJ5ZnhYHV1NjqQw+/Mzeb2Ka2ad48Fw6fxEgT79uEiIHLVpOKp5TTkp5t6386cRcpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=3ipRn9xxxZ98Dkmdy6tZbUasT0v69PlUsKGyIoaIEMo=; b=iqvsR8VNv/dIgfYr8He4eVdfLlt67FyU0DFK4u0nGAhYdskcOkcqz2i2/F0AZ/7MueigtUkGFQQIDNvndjffBX92ngcUmNZq/WDwB1iTehKv23FJNjzZvL98k9IqjrKTuPlfHEVxwRbL989eUlrvoiWC28gr89RN4gJK8KisAPnti/lejwFo6wiVh6mffug/ZezJCd22r25zsrYiFPxiJcHHFr1TUsWSp8rxA90LSmw8OvVaFLO445cLA2Z9edWvIaZCjK2Zqu2e7dQUzeEuqj4Z7C7mh+OUH2RBkW646kMts2yCHk1R9Qu6skKBpZXvRllF99KMAH6sLyUQGSEwkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3ipRn9xxxZ98Dkmdy6tZbUasT0v69PlUsKGyIoaIEMo=; b=PhLKtuTsNVUHLFZ4gx0ALWEP5XV48XqowJVZSOmPZIAMAWtKv7BcKq04zVhsTTtrHhgYyZFq2brlFeqinXyQsbWIyRXL9/D0+AxtYeQ7ETBSg2gsoijDcxmc8L6uhk7uX/5PqDQZUGnckxa45JiMNps1AYkeKp/7e6DPZTy48Ck= Received: from SN6PR01MB4656.prod.exchangelabs.com (2603:10b6:805:cf::31) by SJ0PR01MB7493.prod.exchangelabs.com (2603:10b6:a03:3e0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.24; Fri, 30 Jun 2023 06:07:03 +0000 Received: from SN6PR01MB4656.prod.exchangelabs.com ([fe80::291a:3b8c:e5d7:8a16]) by SN6PR01MB4656.prod.exchangelabs.com ([fe80::291a:3b8c:e5d7:8a16%4]) with mapi id 15.20.6521.026; Fri, 30 Jun 2023 06:07:02 +0000 From: "Chris Li OS" To: "Yao, Jiewen" , "devel@edk2.groups.io" Subject: Re: [PATCH 1/1] MdePkg: Add Cxl20.h into IndustryStandard Thread-Topic: [PATCH 1/1] MdePkg: Add Cxl20.h into IndustryStandard Thread-Index: AQHZqYEldzIsQb3uyUmUZ9Ix3q8qaa+heGDwgAFmbto= Date: Fri, 30 Jun 2023 06:07:02 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=True;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-06-30T06:06:58.043Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4656:EE_|SJ0PR01MB7493:EE_ x-ms-office365-filtering-correlation-id: 09cb3ae7-ec46-43e0-de41-08db793038c8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: orQY7ETEO4esVuN4GWVdDfEQq8COU4UWtu/0kTf4EnIgvXFkejhuJGAeaI/JbSf3TqXx9+MsuzkLyXqzjxTxQhgbY1cA9w+2J8cggUJwR/W0h0zh0ETuRIxBFFFThuha1rjPBPBhL4O5dY+wMo84/5ipWUiWiykf55WH/J9j10Q7VxYV6mYKax1v/8R4uBlZ6cmCQWhOG1x/e17xSvg4RPuvx94so1hQr0QT5id1TiCR/Zzl8+0V1gngoHphPzJHX9jLFOzGih1nSR7aSMCs7KN2NRL7+eEQvjB085+lLqgOEhRRQTQ/JN6xoN5HxzNG9ycY/FmTrNiBw2FQI/CYgyDirWI7rEcKx+wRKJyQcN3+/40rs+8ZgHv28PKUe+e/STpog1XESb520TDfZ/EiY2hSQ5mpHWkRKZgnSu9Abo89DtHOhI4un2uwGIiLW5/nP4NuljijgYCU4neCIXzKGULhFkidCSq7YpKvM/gDvcOwGdDyrQVvn8SuUOODswap5IPXv1WJ4APrpKjQOXLxj78kXp//YKrMahDvcW4tcofFeR1/P8Kjqv8ZNQ5uLDa8jJHdynLsVvWb2ZDM5GchUbQem2HBX8qnAhnJ95LtZX6jPseG67Pd/06MeOzAhtqM x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4656.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(396003)(366004)(376002)(346002)(136003)(39850400004)(451199021)(26005)(110136005)(2906002)(7696005)(186003)(83380400001)(38100700002)(53546011)(6506007)(122000001)(71200400001)(9686003)(86362001)(55016003)(19627235002)(41300700001)(30864003)(64756008)(478600001)(38070700005)(66556008)(66446008)(66476007)(91956017)(316002)(76116006)(33656002)(8936002)(66946007)(52536014)(8676002)(5660300002)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?HTblMr8KJlpzlRkrXmTuX68S9XJ1yRciKKE++O2Vm3E/3N18SVxPoscHZJ?= =?iso-8859-1?Q?kx10fOi3mqjozLPNX3u4wb8ypDuq2vaaYIE7zRlR+lDPtiRcjN1DWvDvMH?= =?iso-8859-1?Q?J2bM/Q5QKeCHJSiatqDDpq4Lyc4zgDPTxzR4v0gCOC48DaTmKTQy6BUx/c?= =?iso-8859-1?Q?hNFCqmsw9tgD0zvWCyOMrgDM51UYLqepBNLUtFGiH04tIkPa9QXEC5PtRv?= =?iso-8859-1?Q?7G4gcbMKCtMQ7R5TsSL9Qwef9ZaqsPijWbsr7st0rNIiI2J3SycWz4bR9k?= =?iso-8859-1?Q?qpERUo6CYodoQZupbmpgB9GmSb13LdhXd15tzvtPSbtjcUnPhAHjOpM+Ug?= =?iso-8859-1?Q?5MF+bFICMoSRSTNNScQs92OSPFOo69Qgay4OnagAD2O/eNNAEuiRC+I6ew?= =?iso-8859-1?Q?82hCR2yRhzc7TlxiJ3HjiyHxBUsoqvyWkI34XhWryxpsMNztKfBBtYjPAq?= =?iso-8859-1?Q?iuISaheQYnZi0rTWzPQVmIRVj6SlciJmuB8+u5Q73roWVzd9rUScy2hMtC?= =?iso-8859-1?Q?z5jUK8PEWhYphQn/tBNzA9qCYpDg6a+F+G9OvTrkjDEe8tXJ0Tery4Ar9J?= =?iso-8859-1?Q?idAJ+LybE5PMTCAKNo+yThPYBrQSHcdWhvCBU6bsCVoH5Lsmhab2KbJ0zp?= =?iso-8859-1?Q?2Yf6yf5HgiDbWh7XovgkIVEwCxGes2GqTXmrKEEYxgJVfjrMMQr1dYODCk?= =?iso-8859-1?Q?0ek8oqRSHIkwie9b+Urmmp3Ymuyg81EKH+eF2etzUcvlNkjJw4CUQJ2mih?= =?iso-8859-1?Q?z5tORpb5cuIDBAlmUfhb3LJIyIGK+RAD1DrR90V0AXBV+iewof0u+HkD0f?= =?iso-8859-1?Q?LlQC4SDiPmiBNaFJA2R7VDd048WTJvUUkeitQuQYxARF30CPI7J0zz56Ka?= =?iso-8859-1?Q?p3uTw3rhCsFoLxDgRXqNe7UC4RIS3n9uxx4NBfhOG9cdHmE5qOTmxLv0ok?= =?iso-8859-1?Q?tSBFaum1DVVN0h20InbTcCK2ACZGzOuVlr1tqNUXwfVAIH/NZxtwQS5PYo?= =?iso-8859-1?Q?Msz8Q20plUmPhpzStrzNFo2ZOvc/TLGJZYLqhEU+jKyHGm2TO8bLeDI02X?= =?iso-8859-1?Q?RVDs/Njt0z97f5h2q7GeqHgklEpZJ6l0TswWt6iumPWIHaE9r8OGixv/30?= =?iso-8859-1?Q?NpsHYrtOGrJEvz8M9WMc7qua8XabiPQrd5HbT77CouVn3qAxj9bzTHT72b?= =?iso-8859-1?Q?Spt9g8RVE0bljTuFXQx7NehMUvXGqREd0MrGaVf6KMTBIppc4hnGm9BRZX?= =?iso-8859-1?Q?Xcd2ew5gloVQbDMoSFKQv8l/NNcrXoDtH+36DGBFZz2tvqV580XpfsmVqe?= =?iso-8859-1?Q?1nqcgVAj/G68uUftf9qipZ6G6OKmJLxTECvXVQZV19rTcOespI7mA8jQ6H?= =?iso-8859-1?Q?9Hy1t/T9Q3jZrHPG2LBFALhMQ6N9L/xPcZlTrt7UV/9TbZXQ/QDGYiK7TE?= =?iso-8859-1?Q?Wr52HN1YONAEZHFnHaPdYpW3oFZd4S1lD2D1chkkjPSvcTOAjhveH63ovN?= =?iso-8859-1?Q?tjJyhagN5RNZIrE5jsQTZqP9OeziYI5CZCwPYl4U1tUCm2ijWQgf43WQC9?= =?iso-8859-1?Q?ES2bg60EWZVRjKNPIj2VsFCbbuMpHrjZTyI0OdcegnVsLaUolT8cN9UjLR?= =?iso-8859-1?Q?ZdQYXCju/BNCrNfVdWHXaU0Tm/dzmPn5LTSphf0CjFG/2RKEN9iczPDg?= =?iso-8859-1?Q?=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4656.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09cb3ae7-ec46-43e0-de41-08db793038c8 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jun 2023 06:07:02.1117 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bmOlS+wqE08uHqFtdJ25XeGtwZHtvh1ifP3ch0ZP1R+y0v7yrI9ROnVDiVEZaFuOkCGoRkWNGZC0KcV7vIm6987+Oy/x0HhC7FWb2ftQedqcFFnhMbPq6N9E1pWnoPGi X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR01MB7493 Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Thanks Jiewen, will soon send an v2 for it.=0A= =0A= ________________________________________=0A= From: Yao, Jiewen =0A= Sent: Thursday, June 29, 2023 4:43 PM=0A= To: Chris Li OS; devel@edk2.groups.io=0A= Cc: Yao, Jiewen=0A= Subject: RE: [PATCH 1/1] MdePkg: Add Cxl20.h into IndustryStandard=0A= =0A= Thanks for the update.=0A= =0A= +} HDM_DECODER_N_INFO;=0A= =0A= I think this need add CXL_ prefix.=0A= =0A= Other looks good to me.=0A= =0A= Thank you=0A= Yao, Jiewen=0A= =0A= =0A= =0A= > -----Original Message-----=0A= > From: Chris Li OS =0A= > Sent: Wednesday, June 28, 2023 1:28 PM=0A= > To: devel@edk2.groups.io; Yao, Jiewen =0A= > Subject: [PATCH 1/1] MdePkg: Add Cxl20.h into IndustryStandard=0A= >=0A= > 1) Add CXL 2.0 header file to comply with CXL 2.0 specification=0A= > 2) CXL 2.0 header will embed Cxl11.h=0A= > 3) Updated Cxl.h to point to 2.0 header file=0A= >=0A= > Signed-off-by: Chris Li =0A= > ---=0A= > MdePkg/Include/IndustryStandard/Cxl.h | 2 +-=0A= > MdePkg/Include/IndustryStandard/Cxl20.h | 477 ++++++++++++++++++++++++= =0A= > 2 files changed, 478 insertions(+), 1 deletion(-)=0A= > create mode 100644 MdePkg/Include/IndustryStandard/Cxl20.h=0A= >=0A= > diff --git a/MdePkg/Include/IndustryStandard/Cxl.h=0A= > b/MdePkg/Include/IndustryStandard/Cxl.h=0A= > index 06c1230e3e..9ad3242e25 100644=0A= > --- a/MdePkg/Include/IndustryStandard/Cxl.h=0A= > +++ b/MdePkg/Include/IndustryStandard/Cxl.h=0A= > @@ -12,7 +12,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent=0A= > #ifndef _CXL_MAIN_H_=0A= > #define _CXL_MAIN_H_=0A= >=0A= > -#include =0A= > +#include =0A= > //=0A= > // CXL assigned new Vendor ID=0A= > //=0A= > diff --git a/MdePkg/Include/IndustryStandard/Cxl20.h=0A= > b/MdePkg/Include/IndustryStandard/Cxl20.h=0A= > new file mode 100644=0A= > index 0000000000..a08251f4e9=0A= > --- /dev/null=0A= > +++ b/MdePkg/Include/IndustryStandard/Cxl20.h=0A= > @@ -0,0 +1,477 @@=0A= > +/** @file=0A= > + CXL 2.0 Register definitions=0A= > +=0A= > + This file contains the register definitions based on the Compute Expre= ss Link=0A= > + (CXL) Specification Revision 2.0.=0A= > +=0A= > + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
=0A= > +=0A= > + SPDX-License-Identifier: BSD-2-Clause-Patent=0A= > +=0A= > +**/=0A= > +=0A= > +#ifndef CXL20_H_=0A= > +#define CXL20_H_=0A= > +=0A= > +#include =0A= > +=0A= > +//=0A= > +// Ensure proper structure formats=0A= > +//=0A= > +#pragma pack(1)=0A= > +=0A= > +=0A= > +//=0A= > +// CXL DVSEC IDs and Revisions=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.1.1=0A= > +//=0A= > +#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_CXL_DEVICE 0x0=0A= > +#define CXL_DVSEC_ID_NON_CXL_FUNCTION_MAP 0x2=0A= > +#define CXL_DVSEC_ID_CXL20_EXTENSIONS_DVSEC_FOR_PORTS 0x3=0A= > +#define CXL_DVSEC_ID_GPF_DVSEC_FOR_CXL_PORTS 0x4=0A= > +#define CXL_DVSEC_ID_GPF_DVSEC_FOR_CXL_DEVICES 0x5=0A= > +#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_FLEX_BUS_PORT 0x7=0A= > +#define CXL_DVSEC_ID_REGISTER_LOCATOR 0x8=0A= > +#define CXL_DVSEC_ID_MLD 0x9=0A= > +#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_TEST_CAPABILITY 0xA=0A= > +=0A= > +#define CXL20_DVSEC_REVISON_REGISTOR_LOCATOR 0x0=0A= > +=0A= > +//=0A= > +// Register Block ID=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.1.9.1=0A= > +//=0A= > +#define CXL_REGISTER_BLOCK_ID_EMPTY 0x0=0A= > +#define CXL_REGISTER_BLOCK_ID_COMPONENT 0x01=0A= > +#define CXL_REGISTER_BLOCK_ID_BAR_VIRTUALIZATION_ACL 0x02=0A= > +#define CXL_REGISTER_BLOCK_ID_DEVICE 0x03=0A= > +=0A= > +//=0A= > +// Component Register Block Register Ranges Offset=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.4=0A= > +//=0A= > +#define CXL_COMPONENT_REGISTERS_RANGE_OFFSET_IO 0x0=0A= > +#define CXL_COMPONENT_REGISTERS_RANGE_OFFSET_CACHE_MEM=0A= > 0x1000=0A= > +#define CXL_COMPONENT_REGISTERS_RANGE_OFFSET_ARB_MUX 0xE000=0A= > +=0A= > +//=0A= > +// CXL Cache Memory Capability IDs=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5=0A= > +//=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_CXL 0x1=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_RAS 0x2=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_SECURITY 0x3=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_LINK 0x4=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_HDM_DECODER 0x5=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_EXTENDED_SECURITY 0x6=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_IDE 0x7=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_SNOOP_FILTER 0x8=0A= > +#define CXL_CACHE_MEM_CAPABILITY_ID_MASK 0xFFFF=0A= > +=0A= > +//=0A= > +// Generic CXL Device Capability IDs 0x0000 ~ 0x3FFF=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.2.1= =0A= > +//=0A= > +#define CXL_DEVICE_CAPABILITY_ID_CAPABILITIES_ARRAY_REGISTER=0A= > 0x0000=0A= > +#define CXL_DEVICE_CAPABILITY_ID_DEVICE_STATUS 0x0001= =0A= > +#define CXL_DEVICE_CAPABILITY_ID_PRIMARY_MAILBOX 0x0002= =0A= > +#define CXL_DEVICE_CAPABILITY_ID_SECONDARY_MAILBOX 0x0003= =0A= > +=0A= > +//=0A= > +// Specific CXL Device Capability IDs 0x4000 ~ 0x7FFF=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.2.1= =0A= > +//=0A= > +// (ref: CXL 2.0 spec $8.2.8.5)=0A= > +#define CXL_DEVICE_CAPABILITY_ID_MEMORY_DEVICE_STATUS=0A= > 0x4000=0A= > +#define CXL_DEVICE_CAPABILITY_ID_MASK 0xFFFF= =0A= > +=0A= > +//=0A= > +// Memory Device Status=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.5.1.1= =0A= > +//=0A= > +#define CXL_MEM_DEVICE_MEDIA_STATUS_NOT_READY 0b00=0A= > +#define CXL_MEM_DEVICE_MEDIA_STATUS_READY 0b01=0A= > +#define CXL_MEM_DEVICE_MEDIA_STATUS_ERROR 0b10=0A= > +#define CXL_MEM_DEVICE_MEDIA_STATUS_DISABLED 0b11=0A= > +=0A= > +//=0A= > +// PCIe DVSEC for CXL Device=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.1.3=0A= > +//=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 CacheCapable : 1; // bit 0=0A= > + UINT16 IoCapable : 1; // bit 1=0A= > + UINT16 MemCapable : 1; // bit 2=0A= > + UINT16 MemHwInitMode : 1; // bit 3=0A= > + UINT16 HdmCount : 2; // bit 4..5= =0A= > + UINT16 CacheWriteBackAndInvalidateCapable : 1; // bit 6=0A= > + UINT16 CxlResetCapable : 1; // bit 7=0A= > + UINT16 CxlResetTimeout : 3; // bit 8..10= =0A= > + UINT16 CxlResetMemClrCapable : 1; // bit 11=0A= > + UINT16 Reserved : 1; // bit 12=0A= > + UINT16 MultipleLogicalDevice : 1; // bit 13=0A= > + UINT16 ViralCapable : 1; // bit 14=0A= > + UINT16 PmInitCompletionReportingCapable : 1; // bit 15=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_DVSEC_CXL_DEVICE_CAPABILITY;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 CacheEnable : 1; // bit 0=0A= > + UINT16 IoEnable : 1; // bit 1=0A= > + UINT16 MemEnable : 1; // bit 2=0A= > + UINT16 CacheSfCoverage : 5; // bit 3..7=0A= > + UINT16 CacheSfGranularity : 3; // bit 8..10=0A= > + UINT16 CacheCleanEviction : 1; // bit 11=0A= > + UINT16 Reserved1 : 2; // bit 12..13=0A= > + UINT16 ViralEnable : 1; // bit 14=0A= > + UINT16 Reserved2 : 1; // bit 15=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_DVSEC_CXL_DEVICE_CONTROL;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 Reserved1 : 14; // bit 0..13=0A= > + UINT16 ViralStatus : 1; // bit 14=0A= > + UINT16 Reserved2 : 1; // bit 15=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_DVSEC_CXL_DEVICE_STATUS;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 DisableCaching : 1; // bit 0=0A= > + UINT16 InitiateCacheWriteBackAndInvalidate : 1; // bit 1=0A= > + UINT16 InitiateCxlReset : 1; // bit 2=0A= > + UINT16 CxlResetMemClrEnable : 1; // bit 3=0A= > + UINT16 Reserved : 12; // bit 4..15= =0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_2_0_DVSEC_CXL_DEVICE_CONTROL2;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 CacheInvalid : 1; // bit 0= =0A= > + UINT16 CxlResetComplete : 1; // bit 1= =0A= > + UINT16 Reserved : 13; // bit 2= ..14=0A= > + UINT16 PowerManagementInitialzationComplete : 1; // bit 1= 5=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_2_0_DVSEC_CXL_DEVICE_STATUS2;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 ConfigLock : 1; // bit 0=0A= > + UINT16 Reserved : 15; // bit 1..15=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_DVSEC_CXL_DEVICE_LOCK;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT16 CacheSizeUnit : 4; // bit 0..3=0A= > + UINT16 Reserved : 4; // bit 4..7=0A= > + UINT16 CacheSize : 8; // bit 8..15=0A= > + } Bits;=0A= > + UINT16 Uint16;=0A= > +} CXL_2_0_DVSEC_CXL_DEVICE_CAPABILITY2;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemorySizeHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE1_SIZE_HIGH;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemoryInfoValid : 1; // bit 0=0A= > + UINT32 MemoryActive : 1; // bit 1=0A= > + UINT32 MediaType : 3; // bit 2..4=0A= > + UINT32 MemoryClass : 3; // bit 5..7=0A= > + UINT32 DesiredInterleave : 5; // bit 8..12=0A= > + UINT32 MemoryActiveTimeout : 3; // bit 13..15=0A= > + UINT32 Reserved : 12; // bit 16..27=0A= > + UINT32 MemorySizeLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE1_SIZE_LOW;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemoryBaseHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE1_BASE_HIGH;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 Reserved : 28; // bit 0..27=0A= > + UINT32 MemoryBaseLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE1_BASE_LOW;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemorySizeHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE2_SIZE_HIGH;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemoryInfoValid : 1; // bit 0=0A= > + UINT32 MemoryActive : 1; // bit 1=0A= > + UINT32 MediaType : 3; // bit 2..4=0A= > + UINT32 MemoryClass : 3; // bit 5..7=0A= > + UINT32 DesiredInterleave : 5; // bit 8..12=0A= > + UINT32 MemoryActiveTimeout : 3; // bit 13..15=0A= > + UINT32 Reserved : 12; // bit 16..27=0A= > + UINT32 MemorySizeLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE2_SIZE_LOW;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemoryBaseHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE2_BASE_HIGH;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 Reserved : 28; // bit 0..27=0A= > + UINT32 MemoryBaseLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_DVSEC_CXL_DEVICE_RANGE2_BASE_LOW;=0A= > +=0A= > +typedef struct {=0A= > + PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER Header;=0A= > // offset 0x00=0A= > + PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_1=0A= > DesignatedVendorSpecificHeader1; // offset 0x04=0A= > + PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_2=0A= > DesignatedVendorSpecificHeader2; // offset 0x08=0A= > + CXL_DVSEC_CXL_DEVICE_CAPABILITY DeviceCapability;= =0A= > // offset 0x0A=0A= > + CXL_DVSEC_CXL_DEVICE_CONTROL DeviceControl;=0A= > // offset 0x0C=0A= > + CXL_DVSEC_CXL_DEVICE_STATUS DeviceStatus; = //=0A= > offset 0x0E=0A= > + CXL_2_0_DVSEC_CXL_DEVICE_CONTROL2 DeviceControl2;=0A= > // offset 0x10=0A= > + CXL_2_0_DVSEC_CXL_DEVICE_STATUS2 DeviceStatus2;=0A= > // offset 0x12=0A= > + CXL_DVSEC_CXL_DEVICE_LOCK DeviceLock; = //=0A= > offset 0x14=0A= > + CXL_2_0_DVSEC_CXL_DEVICE_CAPABILITY2 DeviceCapability2;= =0A= > // offset 0x16=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE1_SIZE_HIGH DeviceRange1SizeHig= h;=0A= > // offset 0x18=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE1_SIZE_LOW DeviceRange1SizeLow= ;=0A= > // offset 0x1C=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE1_BASE_HIGH=0A= > DeviceRange1BaseHigh; // offset 0x20=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE1_BASE_LOW=0A= > DeviceRange1BaseLow; // offset 0x24=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE2_SIZE_HIGH DeviceRange2SizeHig= h;=0A= > // offset 0x28=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE2_SIZE_LOW DeviceRange2SizeLow= ;=0A= > // offset 0x2C=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE2_BASE_HIGH=0A= > DeviceRange2BaseHigh; // offset 0x30=0A= > + CXL_DVSEC_CXL_DEVICE_RANGE2_BASE_LOW=0A= > DeviceRange2BaseLow; // offset 0x34=0A= > +} CXL_2_0_DVSEC_CXL_DEVICE;=0A= > +=0A= > +//=0A= > +// Register Locator DVSEC=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.1.9=0A= > +//=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 RegisterBir : 3; // bit 0..2=0A= > + UINT32 Reserved : 5; // bit 3..7=0A= > + UINT32 RegisterBlockIdentifier : 8; // bit 8..15=0A= > + UINT32 RegisterBlockOffsetLow : 16; // bit 16..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_REGISTER_LOCATOR_DVSEC_REGISTER_OFFSET_LOW;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 RegisterBlockOffsetHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_REGISTER_LOCATOR_DVSEC_REGISTER_OFFSET_HIGH;=0A= > +=0A= > +typedef struct {=0A= > + CXL_REGISTER_LOCATOR_DVSEC_REGISTER_OFFSET_LOW OffsetLow;=0A= > + CXL_REGISTER_LOCATOR_DVSEC_REGISTER_OFFSET_HIGH OffsetHigh;=0A= > +} CXL_REGISTER_LOCATOR_DVSEC_REGISTER_BLOCK;=0A= > +=0A= > +=0A= > +typedef struct {=0A= > + PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER Header;=0A= > // offset 0x00=0A= > + PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_1=0A= > DesignatedVendorSpecificHeader1; // offset 0x04=0A= > + PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_2=0A= > DesignatedVendorSpecificHeader2; // offset 0x08=0A= > + UINT16 Reserved; = // offset 0x0A=0A= > + CXL_REGISTER_LOCATOR_DVSEC_REGISTER_BLOCK RegisterBlock[1];= =0A= > // offset 0x0C=0A= > +} CXL_REGISTER_LOCATOR_DVSEC;=0A= > +=0A= > +//=0A= > +// CXL HDM Decoder Capability Header Register=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5.5=0A= > +//=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 CxlCapabilityId : 16; // bit 0..15=0A= > + UINT32 CxlCapabilityVersion : 4; // bit 16..19=0A= > + UINT32 CxlHdmDecoderCapabilityPointer : 12; // bit 20..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_CAPABILITY_HEADER_REGISTER;=0A= > +=0A= > +//=0A= > +// CXL HDM Decoder Capability Register=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5.12=0A= > +//=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 DecoderCount : 4; // bit 0..3=0A= > + UINT32 TargetCount : 4; // bit 4..7=0A= > + UINT32 A11to8InterleaveCapable : 1; // bit 8=0A= > + UINT32 A14to12InterleaveCapable : 1; // bit 9=0A= > + UINT32 PoisonOnDecodeErrorCapability : 1; // bit 10=0A= > + UINT32 Reserved : 21; // bit 11..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_2_0_HDM_DECODER_CAPABILITY_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 PoisonOnDecodeErrorEnable : 1; // bit 0=0A= > + UINT32 HdmDecoderEnable : 1; // bit 1=0A= > + UINT32 Reserved : 30; // bit 2..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_GLOBAL_CONTROL_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 Reserved : 28; // bit 0..27=0A= > + UINT32 MemoryBaseLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_BASE_LOW_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemoryBaseHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_BASE_HIGH_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 Reserved : 28; // bit 0..27=0A= > + UINT32 MemorySizeLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_SIZE_LOW_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 MemorySizeHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_SIZE_HIGH_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 InterleaveGranularity : 4; // bit 0..3=0A= > + UINT32 InterleaveWays : 4; // bit 4..7=0A= > + UINT32 LockOnCommit : 1; // bit 8=0A= > + UINT32 Commit : 1; // bit 9=0A= > + UINT32 Committed : 1; // bit 10=0A= > + UINT32 ErrorNotCommitted : 1; // bit 11=0A= > + UINT32 TargetDeviceType : 1; // bit 12=0A= > + UINT32 Reserved : 19; // bit 13..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_2_0_HDM_DECODER_N_CONTROL_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 TargetPortIdentiferWay0 : 8; // bit 0..7=0A= > + UINT32 TargetPortIdentiferWay1 : 8; // bit 8..15=0A= > + UINT32 TargetPortIdentiferWay2 : 8; // bit 16..23=0A= > + UINT32 TargetPortIdentiferWay3 : 8; // bit 24..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_TARGET_LIST_LOW_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 Reserved : 28; // bit 0..27=0A= > + UINT32 DpaSkipLow : 4; // bit 28..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_DPA_SKIP_LOW_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 TargetPortIdentiferWay4 : 8; // bit 0..7=0A= > + UINT32 TargetPortIdentiferWay5 : 8; // bit 8..15=0A= > + UINT32 TargetPortIdentiferWay6 : 8; // bit 16..23=0A= > + UINT32 TargetPortIdentiferWay7 : 8; // bit 24..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_TARGET_LIST_HIGH_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT32 DpaSkipHigh : 32; // bit 0..31=0A= > + } Bits;=0A= > + UINT32 Uint32;=0A= > +} CXL_HDM_DECODER_N_DPA_SKIP_HIGH_REGISTER;=0A= > +=0A= > +typedef union {=0A= > + CXL_HDM_DECODER_N_TARGET_LIST_LOW_REGISTER TargetListLow;=0A= > + CXL_HDM_DECODER_N_DPA_SKIP_LOW_REGISTER DpaSkipLow;=0A= > +} CXL_HDM_DECODER_N_TARGET_LIST_OR_DPA_SKIP_LOW;=0A= > +=0A= > +typedef union {=0A= > + CXL_HDM_DECODER_N_TARGET_LIST_HIGH_REGISTER TargetListHigh;=0A= > + CXL_HDM_DECODER_N_DPA_SKIP_HIGH_REGISTER DpaSkipHigh;=0A= > +} CXL_HDM_DECODER_N_TARGET_LIST_OR_DPA_SKIP_HIGH;=0A= > +=0A= > +typedef struct {=0A= > + CXL_HDM_DECODER_N_BASE_LOW_REGISTER DecoderBaseLow;=0A= > // 0x10=0A= > + CXL_HDM_DECODER_N_BASE_HIGH_REGISTER DecoderBaseHigh;=0A= > // 0x14=0A= > + CXL_HDM_DECODER_N_SIZE_LOW_REGISTER DecoderSizeLow;=0A= > // 0x18=0A= > + CXL_HDM_DECODER_N_SIZE_HIGH_REGISTER DecoderSizeHigh;=0A= > // 0x1c=0A= > + CXL_2_0_HDM_DECODER_N_CONTROL_REGISTER DecoderControl;=0A= > // 0x20=0A= > + CXL_HDM_DECODER_N_TARGET_LIST_OR_DPA_SKIP_LOW=0A= > DecoderTargetListDpaSkipLow; // 0x24=0A= > + CXL_HDM_DECODER_N_TARGET_LIST_OR_DPA_SKIP_HIGH=0A= > DecoderTargetListDpaSkipHigh; // 0x28=0A= > + UINT32 Reserved; = // 0x2C=0A= > +} HDM_DECODER_N_INFO;=0A= > +=0A= > +typedef union {=0A= > + struct {=0A= > + UINT64 CxlDeviceCapabilityId : 16; // bit 0..15=0A= > + UINT64 CxlDeviceCapabilityVersion : 8; // bit 16..23=0A= > + UINT64 Reserved1 : 8; // bit 24..31=0A= > + UINT64 CxlDeviceCapabilitiesCount : 16; // bit 32..47=0A= > + UINT64 Reserved2 : 16; // bit 48..63=0A= > + } Bits;=0A= > + UINT64 Uint64;=0A= > +} CXL_DEVICE_CAPABILITIES_ARRAY_REGISTER;=0A= > +=0A= > +//=0A= > +// CXL Memory Status Register=0A= > +// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.5=0A= > +//=0A= > +typedef union {=0A= > + struct {=0A= > + UINT64 DeviceFatal : 1; // bit 0=0A= > + UINT64 FwHalt : 1; // bit 1=0A= > + UINT64 MediaStatus : 2; // bit 2..3=0A= > + UINT64 MailboxInterfacesReady : 1; // bit 4=0A= > + UINT64 ResetNeeded : 3; // bit 5..7=0A= > + UINT64 Reserved : 56; // bit 8..63=0A= > + } Bits;=0A= > + UINT64 Uint64;=0A= > +} CXL_MEMORY_DEVICE_STATUS_REGISTER;=0A= > +=0A= > +#pragma pack()=0A= > +=0A= > +#endif=0A= > --=0A= > 2.34.1=0A=