mirror of https://github.com/acidanthera/audk.git
464 lines
18 KiB
C
Executable File
464 lines
18 KiB
C
Executable File
/** @file
|
|
CXL 2.0 Register definitions
|
|
|
|
This file contains the register definitions based on the Compute Express Link
|
|
(CXL) Specification Revision 2.0.
|
|
|
|
Copyright (c) 2023, Ampere Computing LLC. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef CXL20_H_
|
|
#define CXL20_H_
|
|
|
|
#include <IndustryStandard/Cxl11.h>
|
|
|
|
//
|
|
// CXL DVSEC IDs
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.1.1
|
|
//
|
|
#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_CXL_DEVICE 0x0
|
|
#define CXL_DVSEC_ID_NON_CXL_FUNCTION_MAP 0x2
|
|
#define CXL_DVSEC_ID_CXL20_EXTENSIONS_DVSEC_FOR_PORTS 0x3
|
|
#define CXL_DVSEC_ID_GPF_DVSEC_FOR_CXL_PORTS 0x4
|
|
#define CXL_DVSEC_ID_GPF_DVSEC_FOR_CXL_DEVICES 0x5
|
|
#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_FLEX_BUS_PORT 0x7
|
|
#define CXL_DVSEC_ID_REGISTER_LOCATOR 0x8
|
|
#define CXL_DVSEC_ID_MLD 0x9
|
|
#define CXL_DVSEC_ID_PCIE_DVSEC_FOR_TEST_CAPABILITY 0xA
|
|
|
|
//
|
|
// Register Block ID
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.1.9.1
|
|
//
|
|
#define CXL_REGISTER_BLOCK_ID_EMPTY 0x0
|
|
#define CXL_REGISTER_BLOCK_ID_COMPONENT 0x1
|
|
#define CXL_REGISTER_BLOCK_ID_BAR_VIRTUALIZATION_ACL 0x2
|
|
#define CXL_REGISTER_BLOCK_ID_DEVICE 0x3
|
|
|
|
//
|
|
// CXL component register layout
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.4
|
|
//
|
|
// |------------------------------------|
|
|
// |--------- Range & Type -------------|
|
|
// |------------------------------------| IO Base - 0KB
|
|
// | (0KB - 4KB)IO Regs |
|
|
// |------------------------------------| Cache and Mem Base - 4KB
|
|
// | {4KB - 8KB)Cache & Mem Regs |
|
|
// |------------------------------------| Implementation Spec Regs Base - 8KB
|
|
// | (8KB - 56KB)Implement Spec Regs|
|
|
// |------------------------------------| ARB/Mux Regs Base - 56KB
|
|
// | (56KB - 57KB)ARBMUX Regs |
|
|
// |------------------------------------| Reserved Base - 57KB
|
|
// | (57KB - 63KB)Reserved |
|
|
// |------------------------------------| End 64KB
|
|
//
|
|
// Component Register Block Register Ranges Offset
|
|
//
|
|
#define CXL_COMPONENT_REGISTER_RANGE_OFFSET_IO 0x0
|
|
#define CXL_COMPONENT_REGISTER_RANGE_OFFSET_CACHE_MEM 0x1000
|
|
#define CXL_COMPONENT_REGISTER_RANGE_OFFSET_ARB_MUX 0xE000
|
|
|
|
//
|
|
// CXL Cache Memory Capability IDs
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5
|
|
//
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_CXL 0x1
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_RAS 0x2
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_SECURITY 0x3
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_LINK 0x4
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_HDM_DECODER 0x5
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_EXTENDED_SECURITY 0x6
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_IDE 0x7
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_SNOOP_FILTER 0x8
|
|
#define CXL_CACHE_MEM_CAPABILITY_ID_MASK 0xFFFF
|
|
|
|
//
|
|
// Generic CXL Device Capability IDs 0x0000 ~ 0x3FFF
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.2.1
|
|
//
|
|
#define CXL_DEVICE_CAPABILITY_ID_CAPABILITIES_ARRAY_REGISTER 0x0000
|
|
#define CXL_DEVICE_CAPABILITY_ID_DEVICE_STATUS 0x0001
|
|
#define CXL_DEVICE_CAPABILITY_ID_PRIMARY_MAILBOX 0x0002
|
|
#define CXL_DEVICE_CAPABILITY_ID_SECONDARY_MAILBOX 0x0003
|
|
|
|
//
|
|
// Specific CXL Device Capability IDs 0x4000 ~ 0x7FFF
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.2.1 and 8.2.8.5
|
|
|
|
//
|
|
#define CXL_DEVICE_CAPABILITY_ID_MEMORY_DEVICE_STATUS 0x4000
|
|
#define CXL_DEVICE_CAPABILITY_ID_MASK 0xFFFF
|
|
|
|
//
|
|
// Memory Device Status
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.5.1.1
|
|
//
|
|
#define CXL_MEM_DEVICE_MEDIA_STATUS_NOT_READY 0x0
|
|
#define CXL_MEM_DEVICE_MEDIA_STATUS_READY 0x1
|
|
#define CXL_MEM_DEVICE_MEDIA_STATUS_ERROR 0x2
|
|
#define CXL_MEM_DEVICE_MEDIA_STATUS_DISABLED 0x3
|
|
|
|
//
|
|
// Ensure proper structure formats
|
|
//
|
|
#pragma pack(1)
|
|
|
|
//
|
|
// PCIe DVSEC for CXL Device
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.1.3
|
|
//
|
|
typedef union {
|
|
struct {
|
|
UINT16 CacheCapable : 1; // bit 0
|
|
UINT16 IoCapable : 1; // bit 1
|
|
UINT16 MemCapable : 1; // bit 2
|
|
UINT16 MemHwInitMode : 1; // bit 3
|
|
UINT16 HdmCount : 2; // bit 4..5
|
|
UINT16 CacheWriteBackAndInvalidateCapable : 1; // bit 6
|
|
UINT16 CxlResetCapable : 1; // bit 7
|
|
UINT16 CxlResetTimeout : 3; // bit 8..10
|
|
UINT16 CxlResetMemClrCapable : 1; // bit 11
|
|
UINT16 Reserved : 1; // bit 12
|
|
UINT16 MultipleLogicalDevice : 1; // bit 13
|
|
UINT16 ViralCapable : 1; // bit 14
|
|
UINT16 PmInitCompletionReportingCapable : 1; // bit 15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_CAPABILITY;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 CacheEnable : 1; // bit 0
|
|
UINT16 IoEnable : 1; // bit 1
|
|
UINT16 MemEnable : 1; // bit 2
|
|
UINT16 CacheSfCoverage : 5; // bit 3..7
|
|
UINT16 CacheSfGranularity : 3; // bit 8..10
|
|
UINT16 CacheCleanEviction : 1; // bit 11
|
|
UINT16 Reserved1 : 2; // bit 12..13
|
|
UINT16 ViralEnable : 1; // bit 14
|
|
UINT16 Reserved2 : 1; // bit 15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_CONTROL;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 Reserved1 : 14; // bit 0..13
|
|
UINT16 ViralStatus : 1; // bit 14
|
|
UINT16 Reserved2 : 1; // bit 15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_STATUS;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 DisableCaching : 1; // bit 0
|
|
UINT16 InitiateCacheWriteBackAndInvalidate : 1; // bit 1
|
|
UINT16 InitiateCxlReset : 1; // bit 2
|
|
UINT16 CxlResetMemClrEnable : 1; // bit 3
|
|
UINT16 Reserved : 12; // bit 4..15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_CONTROL2;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 CacheInvalid : 1; // bit 0
|
|
UINT16 CxlResetComplete : 1; // bit 1
|
|
UINT16 Reserved : 13; // bit 2..14
|
|
UINT16 PowerManagementInitialzationComplete : 1; // bit 15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_STATUS2;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 ConfigLock : 1; // bit 0
|
|
UINT16 Reserved : 15; // bit 1..15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_LOCK;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT16 CacheSizeUnit : 4; // bit 0..3
|
|
UINT16 Reserved : 4; // bit 4..7
|
|
UINT16 CacheSize : 8; // bit 8..15
|
|
} Bits;
|
|
UINT16 Uint16;
|
|
} CXL_DVSEC_CXL_DEVICE_CAPABILITY2;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 MemorySizeHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_HIGH;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 MemoryInfoValid : 1; // bit 0
|
|
UINT32 MemoryActive : 1; // bit 1
|
|
UINT32 MediaType : 3; // bit 2..4
|
|
UINT32 MemoryClass : 3; // bit 5..7
|
|
UINT32 DesiredInterleave : 5; // bit 8..12
|
|
UINT32 MemoryActiveTimeout : 3; // bit 13..15
|
|
UINT32 Reserved : 12; // bit 16..27
|
|
UINT32 MemorySizeLow : 4; // bit 28..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_LOW;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 MemoryBaseHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_CXL_DEVICE_RANGE_BASE_HIGH;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 Reserved : 28; // bit 0..27
|
|
UINT32 MemoryBaseLow : 4; // bit 28..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_CXL_DEVICE_RANGE_BASE_LOW;
|
|
|
|
typedef struct {
|
|
PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER Header; // offset 0x00
|
|
PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_1 DvsecHeader1; // offset 0x04
|
|
PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_2 DvsecHeader2; // offset 0x08
|
|
CXL_DVSEC_CXL_DEVICE_CAPABILITY DeviceCapability; // offset 0x0A
|
|
CXL_DVSEC_CXL_DEVICE_CONTROL DeviceControl; // offset 0x0C
|
|
CXL_DVSEC_CXL_DEVICE_STATUS DeviceStatus; // offset 0x0E
|
|
CXL_DVSEC_CXL_DEVICE_CONTROL2 DeviceControl2; // offset 0x10
|
|
CXL_DVSEC_CXL_DEVICE_STATUS2 DeviceStatus2; // offset 0x12
|
|
CXL_DVSEC_CXL_DEVICE_LOCK DeviceLock; // offset 0x14
|
|
CXL_DVSEC_CXL_DEVICE_CAPABILITY2 DeviceCapability2; // offset 0x16
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_HIGH DeviceRange1SizeHigh; // offset 0x18
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_LOW DeviceRange1SizeLow; // offset 0x1C
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_BASE_HIGH DeviceRange1BaseHigh; // offset 0x20
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_BASE_LOW DeviceRange1BaseLow; // offset 0x24
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_HIGH DeviceRange2SizeHigh; // offset 0x28
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_SIZE_LOW DeviceRange2SizeLow; // offset 0x2C
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_BASE_HIGH DeviceRange2BaseHigh; // offset 0x30
|
|
CXL_DVSEC_CXL_DEVICE_RANGE_BASE_LOW DeviceRange2BaseLow; // offset 0x34
|
|
} CXL_DVSEC_CXL_DEVICE;
|
|
|
|
#define CXL_DVSEC_CXL_DEVICE_REVISION_1 0x1
|
|
|
|
//
|
|
// Register Locator DVSEC
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.1.9
|
|
//
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 RegisterBir : 3; // bit 0..2
|
|
UINT32 Reserved : 5; // bit 3..7
|
|
UINT32 RegisterBlockIdentifier : 8; // bit 8..15
|
|
UINT32 RegisterBlockOffsetLow : 16; // bit 16..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_REGISTER_LOCATOR_REGISTER_OFFSET_LOW;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 RegisterBlockOffsetHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_DVSEC_REGISTER_LOCATOR_REGISTER_OFFSET_HIGH;
|
|
|
|
typedef struct {
|
|
CXL_DVSEC_REGISTER_LOCATOR_REGISTER_OFFSET_LOW OffsetLow;
|
|
CXL_DVSEC_REGISTER_LOCATOR_REGISTER_OFFSET_HIGH OffsetHigh;
|
|
} CXL_DVSEC_REGISTER_LOCATOR_REGISTER_BLOCK;
|
|
|
|
typedef struct {
|
|
PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER Header; // offset 0x00
|
|
PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_1 DvsecHeader1; // offset 0x04
|
|
PCI_EXPRESS_DESIGNATED_VENDOR_SPECIFIC_HEADER_2 DvsecHeader2; // offset 0x08
|
|
UINT16 Reserved; // offset 0x0A
|
|
CXL_DVSEC_REGISTER_LOCATOR_REGISTER_BLOCK RegisterBlock[]; // offset 0x0C
|
|
} CXL_DVSEC_REGISTER_LOCATOR;
|
|
|
|
#define CXL_DVSEC_REGISTER_LOCATOR_REVISION_0 0x0
|
|
|
|
//
|
|
// CXL HDM Decoder Capability Header Register
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5.5
|
|
//
|
|
typedef union {
|
|
struct {
|
|
UINT32 CxlCapabilityId : 16; // bit 0..15
|
|
UINT32 CxlCapabilityVersion : 4; // bit 16..19
|
|
UINT32 CxlHdmDecoderCapabilityPointer : 12; // bit 20..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_CAPABILITY_HEADER_REGISTER;
|
|
|
|
//
|
|
// CXL HDM Decoder Capability Register
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.5.12
|
|
//
|
|
typedef union {
|
|
struct {
|
|
UINT32 DecoderCount : 4; // bit 0..3
|
|
UINT32 TargetCount : 4; // bit 4..7
|
|
UINT32 InterleaveCapableA11to8 : 1; // bit 8
|
|
UINT32 InterleaveCapableA14to12 : 1; // bit 9
|
|
UINT32 PoisonOnDecodeErrorCapability : 1; // bit 10
|
|
UINT32 Reserved : 21; // bit 11..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_CAPABILITY_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 PoisonOnDecodeErrorEnable : 1; // bit 0
|
|
UINT32 HdmDecoderEnable : 1; // bit 1
|
|
UINT32 Reserved : 30; // bit 2..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_GLOBAL_CONTROL_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 Reserved : 28; // bit 0..27
|
|
UINT32 MemoryBaseLow : 4; // bit 28..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_BASE_LOW_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 MemoryBaseHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_BASE_HIGH_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 Reserved : 28; // bit 0..27
|
|
UINT32 MemorySizeLow : 4; // bit 28..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_SIZE_LOW_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 MemorySizeHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_SIZE_HIGH_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 InterleaveGranularity : 4; // bit 0..3
|
|
UINT32 InterleaveWays : 4; // bit 4..7
|
|
UINT32 LockOnCommit : 1; // bit 8
|
|
UINT32 Commit : 1; // bit 9
|
|
UINT32 Committed : 1; // bit 10
|
|
UINT32 ErrorNotCommitted : 1; // bit 11
|
|
UINT32 TargetDeviceType : 1; // bit 12
|
|
UINT32 Reserved : 19; // bit 13..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_CONTROL_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 TargetPortIdentiferWay0 : 8; // bit 0..7
|
|
UINT32 TargetPortIdentiferWay1 : 8; // bit 8..15
|
|
UINT32 TargetPortIdentiferWay2 : 8; // bit 16..23
|
|
UINT32 TargetPortIdentiferWay3 : 8; // bit 24..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_TARGET_LIST_LOW_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 Reserved : 28; // bit 0..27
|
|
UINT32 DpaSkipLow : 4; // bit 28..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_DPA_SKIP_LOW_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 TargetPortIdentiferWay4 : 8; // bit 0..7
|
|
UINT32 TargetPortIdentiferWay5 : 8; // bit 8..15
|
|
UINT32 TargetPortIdentiferWay6 : 8; // bit 16..23
|
|
UINT32 TargetPortIdentiferWay7 : 8; // bit 24..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_TARGET_LIST_HIGH_REGISTER;
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 DpaSkipHigh : 32; // bit 0..31
|
|
} Bits;
|
|
UINT32 Uint32;
|
|
} CXL_HDM_DECODER_DPA_SKIP_HIGH_REGISTER;
|
|
|
|
typedef union {
|
|
CXL_HDM_DECODER_TARGET_LIST_LOW_REGISTER TargetListLow;
|
|
CXL_HDM_DECODER_DPA_SKIP_LOW_REGISTER DpaSkipLow;
|
|
} CXL_HDM_DECODER_TARGET_LIST_OR_DPA_SKIP_LOW;
|
|
|
|
typedef union {
|
|
CXL_HDM_DECODER_TARGET_LIST_HIGH_REGISTER TargetListHigh;
|
|
CXL_HDM_DECODER_DPA_SKIP_HIGH_REGISTER DpaSkipHigh;
|
|
} CXL_HDM_DECODER_TARGET_LIST_OR_DPA_SKIP_HIGH;
|
|
|
|
typedef struct {
|
|
CXL_HDM_DECODER_BASE_LOW_REGISTER DecoderBaseLow; // 0x10
|
|
CXL_HDM_DECODER_BASE_HIGH_REGISTER DecoderBaseHigh; // 0x14
|
|
CXL_HDM_DECODER_SIZE_LOW_REGISTER DecoderSizeLow; // 0x18
|
|
CXL_HDM_DECODER_SIZE_HIGH_REGISTER DecoderSizeHigh; // 0x1c
|
|
CXL_HDM_DECODER_CONTROL_REGISTER DecoderControl; // 0x20
|
|
CXL_HDM_DECODER_TARGET_LIST_OR_DPA_SKIP_LOW DecoderTargetListDpaSkipLow; // 0x24
|
|
CXL_HDM_DECODER_TARGET_LIST_OR_DPA_SKIP_HIGH DecoderTargetListDpaSkipHigh; // 0x28
|
|
UINT32 Reserved; // 0x2C
|
|
} CXL_HDM_DECODER;
|
|
|
|
//
|
|
// CXL Device Capabilities Array Register
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.1
|
|
//
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT64 CxlDeviceCapabilityId : 16; // bit 0..15
|
|
UINT64 CxlDeviceCapabilityVersion : 8; // bit 16..23
|
|
UINT64 Reserved1 : 8; // bit 24..31
|
|
UINT64 CxlDeviceCapabilitiesCount : 16; // bit 32..47
|
|
UINT64 Reserved2 : 16; // bit 48..63
|
|
} Bits;
|
|
UINT64 Uint64;
|
|
} CXL_DEVICE_CAPABILITIES_ARRAY_REGISTER;
|
|
|
|
//
|
|
// CXL Memory Status Register
|
|
// Compute Express Link Specification Revision 2.0 - Chapter 8.2.8.5
|
|
//
|
|
typedef union {
|
|
struct {
|
|
UINT64 DeviceFatal : 1; // bit 0
|
|
UINT64 FwHalt : 1; // bit 1
|
|
UINT64 MediaStatus : 2; // bit 2..3
|
|
UINT64 MailboxInterfacesReady : 1; // bit 4
|
|
UINT64 ResetNeeded : 3; // bit 5..7
|
|
UINT64 Reserved : 56; // bit 8..63
|
|
} Bits;
|
|
UINT64 Uint64;
|
|
} CXL_MEMORY_DEVICE_STATUS_REGISTER;
|
|
|
|
#pragma pack()
|
|
|
|
#endif
|