Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Win10 10586 has support for NVDIMM Firmware Interface Table ACPI table:
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\km\acpitabl.h
- //
- // NFIT ACPI table (ACPI 6.0 section 5.2.25)
- //
- #define NFIT_TABLE_SIGNATURE 0x5449464e // 'NFIT'
- typedef struct _NFIT_TABLE {
- DESCRIPTION_HEADER Header;
- ULONG Reserved;
- UCHAR Structures[ANYSIZE_ARRAY];
- } NFIT_TABLE, *PNFIT_TABLE;
- //
- // NFIT Structure common header
- //
- typedef struct _NFIT_STRUCT_HEADER {
- USHORT Type;
- USHORT Length;
- } NFIT_STRUCT_HEADER, *PNFIT_STRUCT_HEADER;
- //
- // NFIT Structure Types
- //
- typedef enum _NFIT_STRUCTURE_TYPE {
- NfitSystemPhysicalAddressRange = 0,
- NfitMemoryDeviceToSystemAddressRangeMap = 1,
- NfitInterleave = 2,
- NfitSmbiosManagementInformation = 3,
- NfitNvdimmControlRegion = 4,
- NfitNvdimmBlockDataWindowRegion = 5,
- NfitFlushHintAddress = 6,
- NfitMaximum
- } NFIT_STRUCTURE_TYPE, *PNFIT_STRUCTURE_TYPE;
- #include <guiddef.h>
- //
- // System Physical Address Range Types (GUIDs)
- //
- DEFINE_GUID( /* 7305944F-FDDA-44E3-B16C3F22D252E5D0 */
- NFitSpaRangeVolatileMemory,
- 0x7305944F,
- 0xFDDA,
- 0x44E3,
- 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0);
- DEFINE_GUID( /* 66F0D379-B4F3-4074-AC430D3318B78CDB */
- NFitSpaRangeByteAddressablePersistentMemory,
- 0x66F0D379,
- 0xB4F3,
- 0x4074,
- 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB);
- DEFINE_GUID( /* 92F701F6-13B4-405D-910B299367E8234C */
- NFitSpaRangeNvdimmControlRegion,
- 0x92F701F6,
- 0x13B4,
- 0x405D,
- 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C);
- DEFINE_GUID( /* 91AF0530-5D86-470E-A6B00A2DB9408249 */
- NFitSpaRangeNvdimmBlockDataWindow,
- 0x91AF0530,
- 0x5D86,
- 0x470E,
- 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49);
- DEFINE_GUID( /* 77AB535A-45FC-624B-5560F7B281D1F96E */
- NFitSpaRangeVolatileVirtualDisk,
- 0x77AB535A,
- 0x45FC,
- 0x624B,
- 0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E);
- DEFINE_GUID( /* 3D5ABD30-4175-87CE-6D64D2ADE523C4BB */
- NFitSpaRangeVolatileVirtualCD,
- 0x3D5ABD30,
- 0x4175,
- 0x87CE,
- 0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB);
- DEFINE_GUID( /* 5CEA02C9-4D07-69D3-269F4496FBE096F9 */
- NFitSpaRangePersistentVirtualDisk,
- 0x5CEA02C9,
- 0x4D07,
- 0x69D3,
- 0x26, 0x9F, 0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9);
- DEFINE_GUID( /* 08018188-42CD-BB48-100F5387D53DED3D */
- NFitSpaRangePersistentVirtualCD,
- 0x08018188,
- 0x42CD,
- 0xBB48,
- 0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D);
- //
- // System Physical Address Range Flags
- //
- typedef enum _NFIT_SPA_RANGE_FLAG {
- NfitSpaRangeFlagManagementOnlyControlRegion = 0x0001,
- NfitSpaRangeFlagProximityDomainValid = 0x0002,
- } NFIT_SPA_RANGE_FLAG, *PNFIT_SPA_RANGE_FLAG;
- #define NFIT_VALID_SPA_RANGE_FLAGS \
- (NfitSpaRangeFlagManagementOnlyControlRegion | \
- NfitSpaRangeFlagProximityDomainValid)
- //
- // System Physical Address Range Memory Mapping Attributes (defined in UEFI)
- //
- typedef enum _NFIT_SPA_RANGE_MEMORY_MAP_ATTRIBUTES {
- NfitSpaRangeAttributeUC = 0x00000001,
- NfitSpaRangeAttributeWC = 0x00000002,
- NfitSpaRangeAttributeWT = 0x00000004,
- NfitSpaRangeAttributeWB = 0x00000008,
- NfitSpaRangeAttributeUCE = 0x00000010,
- NfitSpaRangeAttributeWP = 0x00001000,
- NfitSpaRangeAttributeRP = 0x00002000,
- NfitSpaRangeAttributeXP = 0x00004000,
- NfitSpaRangeAttributeNV = 0x00008000,
- NfitSpaRangeAttributeMoreReliable = 0x00010000
- } NFIT_SPA_RANGE_MEMORY_MAP_ATTRIBUTES, *PNFIT_SPA_RANGE_MEMORY_MAP_ATTRIBUTES;
- #define NFIT_VALID_SPA_RANGE_MEMORY_MAP_ATTRIBUTES \
- (NfitSpaRangeAttributeUC | \
- NfitSpaRangeAttributeWC | \
- NfitSpaRangeAttributeWT | \
- NfitSpaRangeAttributeWB | \
- NfitSpaRangeAttributeUCE | \
- NfitSpaRangeAttributeWP | \
- NfitSpaRangeAttributeRP | \
- NfitSpaRangeAttributeXP | \
- NfitSpaRangeAttributeNV | \
- NfitSpaRangeAttributeMoreReliable)
- //
- // NFIT System Physical Address Range Structure
- //
- typedef struct _NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE {
- NFIT_STRUCT_HEADER Header;
- USHORT SPARangeIndex;
- USHORT Flags;
- ULONG Reserved;
- ULONG ProximityDomain;
- GUID AddressRangeType;
- ULONG64 SPARangeBase;
- ULONG64 SPARangeLength;
- ULONG64 AddressRangeMappingAttribute;
- } NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE, *PNFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE;
- #if _MSC_VER >= 1200
- #pragma warning(push)
- #endif
- #pragma warning(disable: 4214) // nonstandard extension used : bit field types other than int
- typedef struct _NFIT_DEVICE_HANDLE {
- union {
- struct {
- ULONG DIMMNumber:4;
- ULONG MemoryChannelNumber:4;
- ULONG MemoryControllerId:4;
- ULONG SocketId:4;
- ULONG NodeControllerId:12;
- ULONG Reserved:4;
- } NfitHandle;
- ULONG AsUlong;
- } u;
- } NFIT_DEVICE_HANDLE, *PNFIT_DEVICE_HANDLE;
- #if _MSC_VER >= 1200
- #pragma warning(pop)
- #endif
- //
- // Memory Device State Flags
- //
- typedef enum _NFIT_DEVICE_STATE_FLAG {
- NfitDeviceStateFlagSaveFail = 0x0001,
- NfitDeviceStateFlagRestoreFail = 0x0002,
- NfitDeviceStateFlagPlatformFlushFail = 0x0004,
- NfitDeviceStateFlagNotArm = 0x0008,
- NfitDeviceStateFlagHealthEvent = 0x0010,
- NfitDeviceStateFlagNotifyEnabled = 0x0020,
- } NFIT_DEVICE_STATE_FLAG, *PNFIT_DEVICE_STATE_FLAG;
- #define NFIT_VALID_DEVICE_STATE_FLAGS \
- (NfitDeviceStateFlagSaveFail | \
- NfitDeviceStateFlagRestoreFail | \
- NfitDeviceStateFlagPlatformFlushFail | \
- NfitDeviceStateFlagNotArm | \
- NfitDeviceStateFlagHealthEvent | \
- NfitDeviceStateFlagNotifyEnabled)
- //
- // NFIT Memory Device to System Physical Address Range Mapping Structure
- //
- typedef struct _NFIT_MEMORY_DEVICE_TO_SPA_RANGE_MAPPING {
- NFIT_STRUCT_HEADER Header;
- NFIT_DEVICE_HANDLE NfitHandle;
- USHORT MemoryDevicePhysicalId;
- USHORT MemoryDeviceRegionId;
- USHORT SpaRangeIndex;
- USHORT NVDIMMControlRegionIndex;
- ULONG64 MemoryDeviceRegionSize;
- ULONG64 RegionOffset;
- ULONG64 MemoryDpaRegionBase;
- USHORT InterleaveIndex;
- USHORT InterleaveWays;
- USHORT MemoryDeviceStateFlags;
- USHORT Reserved;
- } NFIT_MEMORY_DEVICE_TO_SPA_RANGE_MAPPING, *PNFIT_MEMORY_DEVICE_TO_SPA_RANGE_MAPPING;
- //
- // NFIT Interleave Structure
- //
- typedef struct _NFIT_INTERLEAVE {
- NFIT_STRUCT_HEADER Header;
- USHORT InterleaveIndex;
- USHORT Reserved;
- ULONG LinesDescribed;
- ULONG LineSize;
- ULONG LineOffsets[ANYSIZE_ARRAY];
- } NFIT_INTERLEAVE, *PNFIT_INTERLEAVE;
- //
- // NFIT SMBIOS Management Information Structure
- //
- typedef struct _NFIT_SMBIOS_MANAGEMENT_INFO {
- NFIT_STRUCT_HEADER Header;
- ULONG Reserved;
- UCHAR Data[ANYSIZE_ARRAY];
- } NFIT_SMBIOS_MANAGEMENT_INFO, *PNFIT_SMBIOS_MANAGEMENT_INFO;
- //
- // NVDIMM Control Region Flags
- //
- typedef enum _NFIT_CONTROL_REGION_FLAG {
- NfitControlRegionFlagBufferBlockDataWindow = 0x0001
- } NFIT_CONTROL_REGION_FLAG, *PNFIT_CONTROL_REGION_FLAG;
- #define NFIT_VALID_CONTROL_REGION_FLAGS \
- (NfitControlRegionFlagBufferBlockDataWindow)
- //
- // NFIT Control Region Structure
- //
- typedef struct _NFIT_NVDIMM_CONTROL_REGION {
- NFIT_STRUCT_HEADER Header;
- USHORT NvdimmControlRegionIndex;
- USHORT VendorId;
- USHORT DeviceId;
- USHORT RevisionId;
- USHORT SubsystemVendorId;
- USHORT SubsystemDeviceId;
- USHORT SubsystemRevisionId;
- UCHAR Reserved[6];
- ULONG SerialNumber;
- USHORT RegionFormatInterfaceCode;
- USHORT BCWCount;
- ULONG64 BCWSize;
- ULONG64 BCWCommandRegisterOffset;
- ULONG64 BCWCommandRegisterSize;
- ULONG64 BCWStatusRegisterOffset;
- ULONG64 BCWStatusRegisterSize;
- USHORT NvdimmControlRegionFlag;
- UCHAR Reserved1[6];
- } NFIT_NVDIMM_CONTROL_REGION, *PNFIT_NVDIMM_CONTROL_REGION;
- #define NVDIMM_CONTROL_REGION_BASE_SIZE (FIELD_OFFSET(NFIT_NVDIMM_CONTROL_REGION, BCWSize))
- #define NVDIMM_CONTROL_REGION_EXTENDED_SIZE (sizeof(NFIT_NVDIMM_CONTROL_REGION))
- //
- // NFIT Block Data Window Region Structure
- //
- typedef struct _NFIT_BLOCK_DATA_WINDOW_REGION {
- NFIT_STRUCT_HEADER Header;
- USHORT NvdimmControlRegionIndex;
- USHORT BlockDataWindowCount;
- ULONG64 BlockDataWindowOffset;
- ULONG64 BlockDataWindowSize;
- ULONG64 BlockAccessibleCapacity;
- ULONG64 FirstAccessibleBlockAddress;
- } NFIT_BLOCK_DATA_WINDOW_REGION, *PNFIT_BLOCK_DATA_WINDOW_REGION;
- //
- // NFIT Flush Hint Address Structure
- //
- typedef struct _NFIT_FLUSH_HINT_ADDRESS {
- NFIT_STRUCT_HEADER Header;
- NFIT_DEVICE_HANDLE NfitHandle;
- USHORT FlushHintAddressCount;
- UCHAR Reserved[6];
- ULONG64 FlushHintAddress[ANYSIZE_ARRAY];
- } NFIT_FLUSH_HINT_ADDRESS, *PNFIT_FLUSH_HINT_ADDRESS;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement