summaryrefslogtreecommitdiff
path: root/Board/EM/SMBIOS
diff options
context:
space:
mode:
authorraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
committerraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
commitb7c51c9cf4864df6aabb99a1ae843becd577237c (patch)
treeeebe9b0d0ca03062955223097e57da84dd618b9a /Board/EM/SMBIOS
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Board/EM/SMBIOS')
-rw-r--r--Board/EM/SMBIOS/SMBIOSBoard.CIF22
-rw-r--r--Board/EM/SMBIOS/SMBios.sdl354
-rw-r--r--Board/EM/SMBIOS/SMBios32.ffsbin0 -> 19929 bytes
-rw-r--r--Board/EM/SMBIOS/SMBios64.ffsbin0 -> 19821 bytes
-rw-r--r--Board/EM/SMBIOS/SMBiosBoard.chmbin0 -> 340652 bytes
-rw-r--r--Board/EM/SMBIOS/SMBiosBoard.dxs54
-rw-r--r--Board/EM/SMBIOS/SMBiosBoard.mak108
-rw-r--r--Board/EM/SMBIOS/SMBiosFlashData.ffsbin0 -> 2088 bytes
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SMB.EQU1345
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SMBDATA.MAC2708
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SMBMACRO.AID1228
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SMBSTRUC.DEF793
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/Smbdesc.def2021
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/Smbhdr.equ297
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.asm259
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.cif17
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.mak81
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.sdl4036
-rw-r--r--Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticDataEnd.asm81
-rw-r--r--Board/EM/SMBIOS/SmbiosBoard.c1790
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit32.objbin0 -> 25687 bytes
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit64.objbin0 -> 27565 bytes
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c204
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c3213
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c6413
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.cif17
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs82
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak98
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.sdl50
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc32.objbin0 -> 62125 bytes
-rw-r--r--Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc64.objbin0 -> 74299 bytes
-rw-r--r--Board/EM/SMBIOS/SmbiosGetFlashData32.ffsbin0 -> 2525 bytes
-rw-r--r--Board/EM/SMBIOS/SmbiosGetFlashData64.ffsbin0 -> 2838 bytes
-rw-r--r--Board/EM/SMBIOS/Smbrun.asm890
34 files changed, 16561 insertions, 0 deletions
diff --git a/Board/EM/SMBIOS/SMBIOSBoard.CIF b/Board/EM/SMBIOS/SMBIOSBoard.CIF
new file mode 100644
index 0000000..c4cbb8c
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBIOSBoard.CIF
@@ -0,0 +1,22 @@
+<component>
+ name = "SMBIOS - Board"
+ category = eModule
+ LocalRoot = "Board\EM\SMBIOS\"
+ RefName = "SMBIOSBoard"
+[files]
+"SMBios.sdl"
+"SmbiosGetFlashData32.ffs"
+"SmbiosGetFlashData64.ffs"
+"SMBios32.ffs"
+"SMBios64.ffs"
+"SMBiosFlashData.ffs"
+"SmbiosBoard.c"
+"SMBiosBoard.dxs"
+"SMBiosBoard.mak"
+"SMBiosBoard.chm"
+"Smbrun.asm"
+[parts]
+"SMBIOSProto"
+"SmbiosStaticData"
+"SmbiosDMIEditBoard"
+<endComponent>
diff --git a/Board/EM/SMBIOS/SMBios.sdl b/Board/EM/SMBIOS/SMBios.sdl
new file mode 100644
index 0000000..89348f1
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBios.sdl
@@ -0,0 +1,354 @@
+TOKEN
+ Name = "SMBIOS_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable SMBIOS support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "AMI_SMBIOS_MODULE_VERSION"
+ Value = "0108"
+ Help = "AMI SMBIOS module version number: MMNN -> MM = Major, NN = Minor"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_PI_1_1"
+ Value = "0"
+ Help = "SMBIOS PI 1.1 Support"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "EFI_SMBIOS_PROTOCOL_GUID"
+ Value = "{0x5e90a50d, 0x6955, 0x4a49, 0x90, 0x32, 0xda, 0x38, 0x12, 0xf8, 0xe8, 0xe5}"
+ Help = "SMBIOS Protocol GUID"
+ TokenType = Expression
+ TargetH = Yes
+ Token = "SMBIOS_PI_1_1" "=" "0"
+End
+
+TOKEN
+ Name = "EFI_SMBIOS_PROTOCOL_GUID"
+ Value = "{0x03583ff6, 0xcb36, 0x4940, 0x94, 0x7e, 0xb9, 0xb3, 0x9f, 0x4a, 0xfa, 0xf7}"
+ Help = "SMBIOS Protocol GUID"
+ TokenType = Expression
+ TargetH = Yes
+ Token = "SMBIOS_PI_1_1" "=" "1"
+End
+
+TOKEN
+ Name = "SMBIOS_TABLE_LOCATION"
+ Value = "0"
+ Help = "SMBIOS Table location: \0 = Above 1MB only"
+ TokenType = Integer
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_TABLE_LOCATION"
+ Value = "1"
+ Help = "SMBIOS Table location: \0 = Above 1MB only \1 = Auto (E000 Segment, if unable to allocate to E000, then put table above 1MB)"
+ TokenType = Integer
+ TargetH = Yes
+ Token = "CSM_SUPPORT" "=" "1"
+End
+
+TOKEN
+ Name = "SMBIOS_DMIEDIT_DATA_LOC"
+ Value = "0"
+ Help = "SMBIOS DMIEdit data location: \0 = Boot Block \2 = NVRAM"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_PRESERVE_NVRAM"
+ Value = "1"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "2"
+End
+
+TOKEN
+ Name = "ADD_STRUCTURE_LOCATION"
+ Value = "1"
+ Help = "Location in Smbios Table for new structure being added: \ON -> Sequentially by Handle Number \OFF = At end of table"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "WRITE_STRUCTURE_HANDLE_POLICY"
+ Value = "0"
+ Help = "WriteStructureByHandle function policy: \OFF -> Delete existing structure then add new one (for backward compatibility) \ON = Existing structure to be modified in place"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_UPDATE_POLICY"
+ Value = "0"
+ Help = "Order of updating structures during Post: \OFF -> NVRam data (DMIEdit), dynamic data (CPU, memory, slot...), OEM update \ON = Dynamic data (CPU, memory, slot...), OEM update, NVRam data (DMIEdit)"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UPDATE_BASEBOARD_TYPE2"
+ Value = "0"
+ Help = "Enable/Disable BaseBoard Type 2 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_BOARD_MANUFACTURER"
+ Value = "0"
+ Help = "Enable/Disable Board Manufacturer (Type 2) dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "UPDATE_BASEBOARD_TYPE2" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_BOARD_NAME"
+ Value = "0"
+ Help = "Enable/Disable Board Name (Type 2) dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "UPDATE_BASEBOARD_TYPE2" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_SYSTEM_CHASSIS_TYPE3"
+ Value = "0"
+ Help = "Enable/Disable System Chassis Type 3 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "SYS_CHASSIS_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_CPU_TYPE4"
+ Value = "1"
+ Help = "Enable/Disable CPU Types 4/7 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "PROCESSOR_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_SLOT_TYPE9"
+ Value = "1"
+ Help = "Enable/Disable System Slot Type 9 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "SYSTEM_SLOT_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_ONBOARD_DEV_TYPE10"
+ Value = "1"
+ Help = "Enable/Disable OnBoard Devices Type 10 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "ONBOARD_DEVICE_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_MEMORY_TYPE16"
+ Value = "1"
+ Help = "Enable/Disable Memory Types 16/17/18/19/20 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UPDATE_BATTERY_TYPE22"
+ Value = "1"
+ Help = "Enable/Disable Portable Battery Type 22 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_ADDITIONAL_INFO_TYPE40"
+ Value = "1"
+ Help = "Enable/Disable Additional Info Type 40 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "ADDITIONAL_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "UPDATE_DEVICE_EXT_TYPE41"
+ Value = "1"
+ Help = "Enable/Disable OnBoard Devices Extended Type 41 dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+ Token = "ONBOARD_DEVICE_EXTENDED_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DYNAMIC_UPDATE_TYPE0_EC_VERSION"
+ Value = "1"
+ Help = "Enable/Disable Type 0 EC version dynamic update"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CSM_OEM_SMBIOS_PNPFUNC_FILE"
+ Value = "$(BUILD_DIR)\smbrun.bin"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_DYNAMIC_UPDATE_POLICY"
+ Value = "0"
+ Help = "Control when dynamic updates will be done: \OFF -> At Ready To Boot event \ON = In Smbios driver entry point"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+#
+# This is the table containing memory module Manufacturer ID Code.
+# It provides a way for OEM to add additional entries that are not already in JEDEC_MF_ID table in Smbios.c.
+# Entries to be added should be in the form of: number of continuation codes, manufacturer's ID code, manufacturer string (ref. JEP-106).
+# "Undefined" should be the last entry in this token.
+#
+TOKEN
+ Name = "MANUFACTURER_ID_CODE"
+ Value = '{{6, 0xf1, "InnoDisk Corporation"}, {0, 0, "Undefined"}}'
+ Help = 'This is the table containing memory module Manufacturer ID Code.\It provides a way for OEM to add additional entries that are not already in JEDEC_MF_ID table in Smbios.c.\Entries to be added should be in the form of: number of continuation codes, manufacturer ID code, manufacturer string (ref. JEP-106).\"Undefined" should be the last entry in this table.'
+ TokenType = Expression
+ TargetH = Yes
+End
+
+PATH
+ Name = "SMBIOS_DIR"
+End
+
+MODULE
+ Help = "Includes SMBiosBoard.mak to Project"
+ File = "SMBiosBoard.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SMBiosBoard.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SMBios32.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+ Token = "x64_BUILD" "=" "0"
+End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SMBios64.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+ Token = "x64_BUILD" "=" "1"
+End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SmbiosFlashData.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "0"
+End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SmbiosFlashData.ffs"
+ Parent = "FT_FV_BB"
+ InvokeOrder = AfterParent
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "0"
+ Token = "FtRecovery_SUPPORT" "=" "1"
+End
+
+# Token commented out
+# Enable this token once AFU util can support DMI data in FV_MAIN
+#ELINK
+# Name = "$(SMBIOS_DIR)\SmbiosFlashData.ffs"
+# Parent = "FV_MAIN"
+# InvokeOrder = AfterParent
+# Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "1"
+#End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SmbiosGetFlashData32.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+ Token = "x64_BUILD" "=" "0"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "!=" "2"
+End
+
+ELINK
+ Name = "$(SMBIOS_DIR)\SmbiosGetFlashData64.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+ Token = "x64_BUILD" "=" "1"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "!=" "2"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\smbrun.inf"
+ Parent = "CSM_CUSTOM_INFS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "PreserveDmiEditData,"
+ Parent = "SMIFlashPreUpdateList"
+ InvokeOrder = AfterParent
+ Token = "SmbiosDMIEdit_SUPPORT" "=" "1"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "2"
+ Token = "SMBIOS_PRESERVE_NVRAM" "=" "1"
+End
+
+ELINK
+ Name = "RestoreDmiEditData,"
+ Parent = "SMIFlashEndUpdateList"
+ InvokeOrder = AfterParent
+ Token = "SmbiosDMIEdit_SUPPORT" "=" "1"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "2"
+ Token = "SMBIOS_PRESERVE_NVRAM" "=" "1"
+End
+
+ELINK
+ Name = "RecoveryPreserveDmiEditData,"
+ Parent = "OemBeforeFlashUpdateList"
+ InvokeOrder = AfterParent
+ Token = "SmbiosDMIEdit_SUPPORT" "=" "1"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "2"
+End
+
+ELINK
+ Name = "RecoveryRestoreDmiEditData,"
+ Parent = "OemAfterFlashUpdateList"
+ InvokeOrder = AfterParent
+ Token = "SmbiosDMIEdit_SUPPORT" "=" "1"
+ Token = "SMBIOS_DMIEDIT_DATA_LOC" "=" "2"
+End
+
+ELINK
+ Name = "SmbiosOemUpdateList"
+ InvokeOrder = ReplaceParent
+End
diff --git a/Board/EM/SMBIOS/SMBios32.ffs b/Board/EM/SMBIOS/SMBios32.ffs
new file mode 100644
index 0000000..6c98f6f
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBios32.ffs
Binary files differ
diff --git a/Board/EM/SMBIOS/SMBios64.ffs b/Board/EM/SMBIOS/SMBios64.ffs
new file mode 100644
index 0000000..7308188
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBios64.ffs
Binary files differ
diff --git a/Board/EM/SMBIOS/SMBiosBoard.chm b/Board/EM/SMBIOS/SMBiosBoard.chm
new file mode 100644
index 0000000..df8e3e3
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosBoard.chm
Binary files differ
diff --git a/Board/EM/SMBIOS/SMBiosBoard.dxs b/Board/EM/SMBIOS/SMBiosBoard.dxs
new file mode 100644
index 0000000..d344878
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosBoard.dxs
@@ -0,0 +1,54 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+//**********************************************************************
+// $Header: /Alaska/BIN/Modules/SMBIOS/SMBiosBoard.dxs 2 6/02/09 3:44p Davidd $
+//
+// $Revision: 2 $
+//
+// $Date: 6/02/09 3:44p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/SMBIOS/SMBiosBoard.dxs $
+//
+// 2 6/02/09 3:44p Davidd
+// Updated AMI headers (EIP 22180)
+//
+// 1 7/18/05 5:59p Davidd
+// File added for porting the SMBIOS dynamic data.
+//
+//
+//**********************************************************************
+
+#include <protocol\CPU.h>
+#include <protocol\PciRootBridgeIo.h>
+
+DEPENDENCY_START
+ EFI_CPU_ARCH_PROTOCOL_GUID AND
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID
+DEPENDENCY_END
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosBoard.mak b/Board/EM/SMBIOS/SMBiosBoard.mak
new file mode 100644
index 0000000..939c9dc
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosBoard.mak
@@ -0,0 +1,108 @@
+#//**********************************************************************//
+#//**********************************************************************//
+#//** **//
+#//** (C)Copyright 1985-2009, American Megatrends, Inc. **//
+#//** **//
+#//** All Rights Reserved. **//
+#//** **//
+#//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+#//** **//
+#//** Phone: (770)-246-8600 **//
+#//** **//
+#//**********************************************************************//
+#//**********************************************************************//
+
+#************************************************************************//
+# $Header: /Alaska/BIN/Modules/SMBIOS/SMBiosBoard.mak 9 11/01/10 12:33p Davidd $
+#
+# $Revision: 9 $
+#
+# $Date: 11/01/10 12:33p $
+#************************************************************************//
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Modules/SMBIOS/SMBiosBoard.mak $
+#
+# 9 11/01/10 12:33p Davidd
+# [TAG] EIP41560
+# [Category] Improvement
+# [Description] DMIEDIT modified values are not preserved in reboot
+# [Files]
+# Smbios.c
+# Smbios.sdl
+# SmbiosBoard.c
+# SmbiosBoard.mak
+#
+# 8 6/02/09 3:45p Davidd
+# Updated AMI headers (EIP 22180)
+#
+# 7 1/22/08 4:19p Olegi
+#
+# 3 10/29/07 7:27p Felixp
+# Update to be compatible with SMBIOS label 4.6.1_ALPHA_01.05
+#
+# 2 12/02/05 12:17p Felixp
+# Pricate SMBIOSBoard.mak added.
+#
+# 1 12/02/05 12:16p Felixp
+#
+# 2 12/02/05 11:45a Felixp
+#
+# 1 7/18/05 6:01p Davidd
+# File added for porting the SMBIOS dynamic data.
+#
+#************************************************************************//
+
+all : SMBIOSBOARD
+
+SMBIOSBOARD : $(BUILD_DIR)\SMBiosBoard.mak SMBiosBoardBin SmBiosPnPBin
+
+SMBIOS_BOARD_OBJECTS = $(BUILD_DIR)\BOARD\EM\SMBIOS\smbiosboard.obj
+
+$(BUILD_DIR)\SMBiosBoard.mak : $(SMBIOS_DIR)\SMBIOSBoard.CIF $(SMBIOS_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(SMBIOS_DIR)\SMBIOSBoard.CIF $(CIF2MAK_DEFAULTS)
+
+SMBiosBoardBin : $(AMIDXELIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\SMBiosBoard.mak all\
+ NAME=SMBiosBoard \
+ OBJECTS="$(SMBIOS_BOARD_OBJECTS)" \
+ GUID=CEF68C66-06AB-4fb3-A3ED-5FFA885B5725\
+ ENTRY_POINT=SMIBiosBoardDriverEntryPoint\
+ TYPE=BS_DRIVER \
+ "CFLAGS=$(CFLAGS) /D\"SMBIOS_OEM_UPDATE_LIST=$(SmbiosOemUpdateList)\""\
+ COMPRESS=1
+
+SmBiosPnPBin: $(BUILD_DIR)\smbrun.inf
+
+$(BUILD_DIR)\smbrun.inf: $(BUILD_DIR)\token.mak $(CSM_OEM_SMBIOS_PNPFUNC_FILE)
+ copy << $@
+
+[MODULE]
+ModuleID = 1
+VendorID = 0
+DeviceID = 3
+File = $(CSM_OEM_SMBIOS_PNPFUNC_FILE)
+<<
+
+$(CSM_OEM_SMBIOS_PNPFUNC_FILE): $(BUILD_DIR)\smbrun.obj
+ $(ASMLINK) $(BUILD_DIR)\smbrun.obj, $*.exe, $*.map,,,
+ exe2bin $*.exe $@
+
+$(BUILD_DIR)\smbrun.obj: $(SMBIOS_DIR)\smbrun.asm
+ $(ASM) /c /nologo /Fo$(BUILD_DIR)\ $(SMBIOS_DIR)\smbrun.asm
+
+
+#//**********************************************************************//
+#//**********************************************************************//
+#//** **//
+#//** (C)Copyright 1985-2009, American Megatrends, Inc. **//
+#//** **//
+#//** All Rights Reserved. **//
+#//** **//
+#//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+#//** **//
+#//** Phone: (770)-246-8600 **//
+#//** **//
+#//**********************************************************************//
+#//**********************************************************************//
diff --git a/Board/EM/SMBIOS/SMBiosFlashData.ffs b/Board/EM/SMBIOS/SMBiosFlashData.ffs
new file mode 100644
index 0000000..37242c9
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosFlashData.ffs
Binary files differ
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SMB.EQU b/Board/EM/SMBIOS/SMBiosStaticData/SMB.EQU
new file mode 100644
index 0000000..ca721db
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SMB.EQU
@@ -0,0 +1,1345 @@
+;Inclusion guard
+ifndef _SMB_EQU_
+_SMB_EQU_ equ 1
+
+;----------------------------------------------------------------------------
+; Do not change any structure definition unless otherwise specified
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2013, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMB.EQU 9 5/29/13 12:50p Davidd $
+;
+; $Revision: 9 $
+;
+; $Date: 5/29/13 12:50p $
+;
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMB.EQU $
+;
+; 9 5/29/13 12:50p Davidd
+; [TAG] EIP124735
+; [Category] Spec Update
+; [Severity] Normal
+; [Description] SMBIOS 2.8.0 specification support for Aptio 4
+; [Files] Smb.equ
+; Smbdata.mac
+; Smbdesc.def
+; Smbstruc.def
+; Smbios.c
+; Smbios.h
+; SmbiosDynamicData.h
+;
+; 8 4/06/11 10:30a Davidd
+; [TAG] EIP56234
+; [Category] Spec Update
+; [Severity] Minor
+; [Description] SMBIOS 2.7.1 requirement
+; [Files] Smb.equ
+;
+; 7 10/08/10 8:17p Davidd
+; [TAG] EIP43278
+;
+; [Category] Function Request
+;
+; [Severity] Normal
+;
+; [Description] SMBIOS 2.7 requirement
+;
+; [Files] Include\Protocol\Smbios.h
+; Include\Protocol\SmbiosDynamicData.h
+; Board\EM\SMBIOS\SMBiosStaticData\SmbiosStaticData.sdl
+; Board\EM\SMBIOS\SMBiosStaticData\SMBDATA.MAC
+; Board\EM\SMBIOS\SMBiosStaticData\SMBSTRUC.DEF
+; Board\EM\SMBIOS\SMBiosStaticData\SMBMACRO.AID
+; Board\EM\SMBIOS\SMBiosStaticData\Smbdesc.def
+; Board\EM\SMBIOS\SMBiosStaticData\SMB.EQU
+;
+; 6 6/02/09 4:47p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 5 5/21/09 3:42p Davidd
+; Added new equates per SMBIOS 2.6.1 specification.
+;
+; 4 10/13/08 12:02p Davidd
+; Changes made to support SMBIOS specification v2.5 and v2.6
+;
+; 3 3/29/07 5:15p Davidd
+; Changed the year in the AMI banner.
+;
+; 2 5/31/05 12:03p Davidd
+; Added equates for PCI Express.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+; 9 11/07/03 4:39p Girim
+; Corrected the Type Equates, added the Processor Type, Processor Upgrade
+; and Pointing Device Equates and Updated the Copyright Headers.
+;
+; 8 10/18/02 3:45p Girim
+; SMBIOS 2.3.3 Compliance.
+;
+; 7 10/18/02 3:40p Girim
+; Added new equates in Base Board Info (Type 2) and Processor Info (Type
+; 4) as defined in SMBIOS 2.3.3.
+; Removed duplicate definitions in System Enclosure (Type 3)
+;
+; 6 9/09/02 7:07p Girim
+; Added Safe Keyword Log:
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+; GENERAL EQUATES
+;----------------------------------------------------------------------------
+; indicate the presence/absence of an item/structure, used in SMBDESC.DEF
+Present EQU 1 ; present
+Absent EQU 0 ; absent
+
+; indicate the item yes/not supported information, used in SMBDESC.DEF
+Yes EQU 1 ; supported
+No EQU 0 ; not supported
+
+; indicate the item enabled/disabled information, used in SMBDESC.DEF
+ENABLED EQU 1 ; enabled
+DISABLED EQU 0 ; disabled
+
+IEPS_LENGTH EQU 10h ; length of IEPS
+DEFINE textequ <TEXTEQU>
+
+;----------------------------------------------------------------------------
+; DIFFERENT STRUCTURE TYPE EQUATES
+;----------------------------------------------------------------------------
+; Structure Name Structure Type
+BIOS_INFORMATION_TYPE equ 00h ; type 00
+SYSTEM_INFORMATION_TYPE equ 01h ; type 01
+BASE_BOARD_INFORMATION_TYPE equ 02h ; type 02
+SYSTEM_ENCLOSURE_CHASSIS_TYPE equ 03h ; type 03
+PROCESSOR_INFORMATION_TYPE equ 04h ; type 04
+MEMORY_CONTROLLER_INFORMATION_TYPE equ 05h ; type 05
+MEMORY_MODULE_INFORMATION_TYPE equ 06h ; type 06
+CACHE_INFORMATION_TYPE equ 07h ; type 07
+PORT_CONNECTOR_INFORMATION_TYPE equ 08h ; type 08
+SYSTEM_SLOT_INFORMATION_TYPE equ 09h ; type 09
+ONBOARD_DEVICE_INFORMATION_TYPE equ 0Ah ; type 10
+OEM_STRING_INFORMATION_TYPE equ 0Bh ; type 11
+SYSTEM_CONFIGURATION_TYPE equ 0Ch ; type 12
+BIOS_LANGUAGE_INFORMATION_TYPE equ 0Dh ; type 13
+GROUP_ASSOCIATION_TYPE equ 0Eh ; type 14
+EVENTLOG_INFORMATION_TYPE equ 0Fh ; type 15
+MEMORY_ARRAY_INFORMATION_TYPE equ 10h ; type 16
+MEMORY_DEVICE_INFORMATION_TYPE equ 11h ; type 17
+MEMORY_ERROR_INFORMATION_TYPE equ 12h ; type 18
+MEMORY_ARRAY_MAPPED_ADDRESS_INFORMATION_TYPE equ 13h ; type 19
+MEMORY_DEVICE_MAPPED_ADDRESS_INFORMATION_TYPE equ 14h ; type 20
+BUILTIN_POINTING_DEVICE_TYPE equ 15h ; type 21
+PORTABLE_BATTERY_TYPE equ 16h ; type 22
+SYSTEM_RESET_TYPE equ 17h ; type 23
+HARDWARE_SECURITY_TYPE equ 18h ; type 24
+SYSTEM_POWER_CONTROLS_TYPE equ 19h ; type 25
+VOLTAGE_PROBE_TYPE equ 1Ah ; type 26
+COOLING_DEVICE_TYPE equ 1Bh ; type 27
+TEMPATURE_PROBE_TYPE equ 1Ch ; type 28
+ELECTRICAL_CURRENT_PROBE_TYPE equ 1Dh ; type 29
+OUT_OF_BAND_REMOTE_ACCESS_TYPE equ 1Eh ; type 30
+BOOT_INTEGRITY_SERVICES_TYPE equ 1Fh ; type 31
+SYSTEM_BOOT_INFORMATION_TYPE equ 20h ; type 32
+SIXTYFOUR_BIT_MEMORY_ERROR_INFORMATION_TYPE equ 21h ; type 33
+MANAGEMENT_DEVICE_TYPE equ 22h ; type 34
+MANAGEMENT_DEVICE_COMPONENT_TYPE equ 23h ; type 35
+MANAGEMENT_DEVICE_THRESHOLD_DATA_TYPE equ 24h ; type 36
+MEMORY_CHANNEL_TYPE equ 25h ; type 37
+IPMI_DEVICE_INFORMATION_TYPE equ 26h ; type 38
+SYSTEM_POWER_SUPPLY_TYPE equ 27h ; type 39
+INACTIVE_STRUCTURE_TYPE equ 7Eh ; type 126
+END_OF_TABLE_TYPE equ 7Fh ; type 127
+OEM_IO_GPNV_INFORMATION_TYPE equ 0F0h ; type F0..OEM Defined
+OEM_MEMORY_GPNV_INFORMATION_TYPE equ 0F1h ; type F1..OEM Defined
+
+;----------------------------------------------------------------------------
+; Structure Type 0: No equates used in BIOS INFORMATION Structure
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 1: Equates used in SYSTEM INFORMATION Structure
+;----------------------------------------------------------------------------
+; Wakeup Type (an enumerated BYTE value)
+; Equate Name Value Meaning
+; 00h ; Reserved
+SI_OTHER equ 01h ; Other
+SI_UNKNOWN equ 02h ; Unknown
+SI_APM_TIMER equ 03h ; APM Timer
+SI_MODEM_RING equ 04h ; Modem Ring
+SI_LAN_REMOTE equ 05h ; LAN Remote
+SI_POWER_SWITCH equ 06h ; Power Switch
+SI_PCI_PME equ 07h ; PCI PME#
+SI_AC_POWER equ 08h ; AC Power Restored
+
+;----------------------------------------------------------------------------
+; Structure Type 2: Equates used in BASE BOARD INFORMATION Structure
+;----------------------------------------------------------------------------
+; Base Board Type (an enumerated BYTE value)
+; Equate Name Value Meaning
+; 00h ; Reserved
+BB_UNKNOWN equ 01h ; Unknown
+BB_OTHER equ 02h ; Other
+BB_SERVER_BLADE equ 03h ; Server Blade
+BB_CONNECTIVITY_SWITCH equ 04h ; Connectivity Switch
+BB_SYS_MGMT_MODULE equ 05h ; System Management Module
+BB_PROCESSOR_MODULE equ 06h ; Processor Module
+BB_IO_MODULE equ 07h ; I/O Module
+BB_MEMORY_MODULE equ 08h ; Memory Module
+BB_DAUGHTER_BOARD equ 09h ; Daughter Board
+BB_MOTHER_BOARD equ 0Ah ; Motherboard (includes Processor, Memory, and I/O)
+BB_PROC_MEM_MODULE equ 0Bh ; Processor/Memory Module
+BB_PROC_IO_MODULE equ 0Ch ; Processor/IO Module
+BB_INTERCONNECT_BOARD equ 0Dh ; Interconnect Board
+
+;----------------------------------------------------------------------------
+; Structure Type 3: Equates used in SYSTEM ENCLOSURE/CHASSIS Structure
+;----------------------------------------------------------------------------
+; System Chassis Type (an enumerated BYTE value)
+; Equate Name Value Meaning
+; 00h ; Reserved
+SE_OTHER equ 01h ; Other
+SE_UNKNOWN equ 02h ; Unknown
+SE_DESKTOP equ 03h ; Desktop
+SE_LOW_PROFILE_DTP equ 04h ; Low Profile Desktop
+SE_PIZZA_BOX equ 05h ; Pizza Box
+SE_MINI_TOWER equ 06h ; Mini Tower
+SE_TOWER equ 07h ; Tower
+SE_PORTABLE equ 08h ; Portable
+SE_LAPTOP equ 09h ; Laptop
+SE_NOTEBOOK equ 0Ah ; Notebook
+SE_HAND_HELD equ 0Bh ; Handheld
+SE_DOCKING_STATION equ 0Ch ; Docking Station
+SE_ALL_IN_ONE equ 0Dh ; All in One
+SE_SUB_NOTEBOOK equ 0Eh ; Sub Notebook
+SE_SPACE_SAVING equ 0Fh ; Space Saving
+SE_LUNCH_BOX equ 10h ; Lunch Box
+SE_MAIN_SER_CHASIS equ 11h ; Main Server Chassis
+SE_EXP_CHASIS equ 12h ; Expansion Chassis
+SE_SUB_CHASIS equ 13h ; SubChassis
+SE_BUS_EXP_CHASIS equ 14h ; Bus Expansion Chassis
+SE_PERPL_CHASIS equ 15h ; Peripheral Chassis
+SE_RAID_CHASIS equ 16h ; RAID Chassis
+SE_ROCK_MOUNT_CHASIS equ 17h ; Rack Mount Chassis
+SE_SEALED_CASE_PC equ 18h ; Sealed-case PC
+SE_MULTI_SYS_CHASIS equ 19h ; Multi-System Chasis
+SE_COMPACT_PCI equ 1Ah ; CompactPCI
+SE_ADVANCED_TCA equ 1Bh ; AdvancedTCA
+SE_BLADE equ 1Ch ; Blade
+SE_BLADE_ENCLOSURE equ 1Dh ; Blade Enclosure
+
+;----------------------------------------------------------------------------
+; System Chassis Bootup state, Chassis Power Supply and Chassis Thermal State
+; equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SCS_OTHER equ 01h ; Other
+SCS_UNKNOWN equ 02h ; Unknown
+SCS_SAFE equ 03h ; Safe
+SCS_WARNING equ 04h ; Warning
+SCS_CRITICAL equ 05h ; Critical
+SCS_NON_RECOVERABLE equ 06h ; Non-recoverable
+
+;----------------------------------------------------------------------------
+; System Chassis Security state equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SSS_OTHER equ 01h ; Other
+SSS_UNKNOWN equ 02h ; Unknown
+SSS_NONE equ 03h ; None
+SSS_EXT_INTE_LOCKED equ 04h ; External interface locked out
+SSS_EXT_INTE_ENABLE equ 05h ; External interface enabled
+
+;----------------------------------------------------------------------------
+; Structure Type 4: Equates used in PROCESSOR INFORMATION Structure
+;----------------------------------------------------------------------------
+; Processor Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+CPU_OTHER equ 01h ; Other
+CPU_UNKNOWN equ 02h ; Unknown
+CPU_CENTRAL_PROCESSOR equ 03h ; Central processor
+CPU_MATH_PROCESSOR equ 04h ; Math processor
+CPU_DSP_PROCESSOR equ 05h ; DSP processor
+CPU_VIDEO_PROCESSOR equ 06h ; Video Processor
+
+;----------------------------------------------------------------------------
+; Processor Family equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+FA_OTHER equ 01h ; Other
+FA_UNKNOWN equ 02h ; Unknown
+FA_8086 equ 03h ; 8086
+FA_80286 equ 04h ; 80286
+FA_80386 equ 05h ; 80386
+FA_80486 equ 06h ; 80486
+FA_8087 equ 07h ; 8087
+FA_80287 equ 08h ; 80287
+FA_80387 equ 09h ; 80387
+FA_80487 equ 0Ah ; 80487
+FA_PENTIUM_FAMILY equ 0Bh ; Pentium family
+FA_PENTIUM_PRO_FAMILY equ 0Ch ; Pemtium-Pro family
+FA_PENTIUM_II_FAMILY equ 0Dh ; Pentium II family
+FA_PENTIUM_MMX_FAMILY equ 0Eh ; Pentium mmx family
+FA_CELERON_FAMILY equ 0Fh ; Pentium Celeron family
+FA_PII_XEON_FAMILY equ 10h ; Pentium II Xeon family
+FA_PIII_FAMILY equ 11h ; Pentium III family
+FA_M1_FAMILY equ 12h ; M1 family
+FA_M2_FAMILY equ 13h ; M2 family
+FA_CELERON_M equ 14h ; Intel(R) Celeron(R) M Processor
+FA_PENTIUM_4_HT equ 15h ; Intel(R) Pentium(R) 4 HT Processor
+FA_AMD_DURON_FAMILY equ 18h ; AMD Duron family
+FA_K5_FAMILY equ 19h ; AMD K5 family
+FA_K6_FAMILY equ 1Ah ; AMD K6 family
+FA_K6_2_FAMILY equ 1Bh ; AMD K6-2 family
+FA_K6_3_FAMILY equ 1Ch ; AMD K6-3 family
+FA_AMD_ATHLON_FAMILY equ 1Dh ; AMD Athlon family
+FA_AMD_2900_FAMILY equ 1Eh ; AMD29000 family
+FA_K6_2P_FAMILY equ 1Fh ; AMD K6-2+ family
+FA_POWER_PC_FAMILY equ 20h ; Power Pc family
+FA_POWER_PC_601 equ 21h ; Power Pc 601 family
+FA_POWER_PC_603 equ 22h ; Power Pc 603 family
+FA_POWER_PC_603_PLUS equ 23h ; Power Pc 603 Plus family
+FA_POWER_PC_604 equ 24h ; Power Pc 604 family
+FA_POWER_PC_620 equ 25h ; Power Pc 620 family
+FA_POWER_PC_X704 equ 26h ; Power Pc x704 family
+FA_POWER_PC_750 equ 27h ; Power Pc 750 family
+FA_CORE_DUO equ 28h ; Intel(R) Core(TM) Duo Processor
+FA_CORE_DUO_MOBILE equ 29h ; Intel(R) Core(TM) Duo Mobile Processor
+FA_CORE_SOLO_MOBILE equ 2Ah ; Intel(R) Core(TM) Solo Mobile Processor
+FA_ATOM equ 2Bh ; Intel(R) Atom(TM) Processor
+FA_ALPHA_FAMILY equ 30h ; DEC Aplpha family
+FA_ALPHA_21064 equ 31h ; Alpha 21064
+FA_ALPHA_21066 equ 32h ; Alpha 21066
+FA_ALPHA_21164 equ 33h ; Alpha 21164
+FA_ALPHA_21164PC equ 34h ; Alpha 21064PC
+FA_ALPHA_21164a equ 35h ; Alpha 21164a
+FA_ALPHA_21264 equ 36h ; Alpha 21264
+FA_ALPHA_21364 equ 37h ; Alpha 21364
+FA_AMD_TURION_II_ULTRA equ 38h ; AMD Turion II Ultra Dual-Core Mobile M Processor Family
+FA_AMD_TURION_II_DUAL equ 39h ; AMD Turion II Dual-Core Mobile M Processor Family
+FA_ATHLON_II_DUAL equ 3Ah ; AMD Athlon II Dual-Core M Processor
+FA_OPTERON_6100 equ 3Bh ; AMD Opteron 6100 Series Processor
+FA_OPTERON_4100 equ 3Ch ; AMD Opteron 4100 Series Processor
+FA_OPTERON_6200 equ 3Dh ; AMD Opteron 6200 Series Processor
+FA_OPTERON_4200 equ 3Eh ; AMD Opteron 4200 Series Processor
+FA_AMD_FX equ 3Fh ; AMD FX(TM) Series Processor
+FA_MIPS_FAMILY equ 40h ; Mips family
+FA_MIPS_R4000 equ 41h ; Mips R4000
+FA_MIPS_R4200 equ 42h ; Mips R4200
+FA_MIPS_R4400 equ 43h ; Mips R4400
+FA_MIPS_R4600 equ 44h ; Mips R4600
+FA_MIPS_R10000 equ 45h ; Mips R10000
+FA_AMD_C equ 46h ; AMD C-Series Processor
+FA_AMD_E equ 47h ; AMD E-Series Processor
+FA_AMD_A equ 48h ; AMD A-Series Processor
+FA_AMD_G equ 49h ; AMD G-Series Processor
+FA_AMD_Z equ 4Ah ; AMD Z-Series Processor
+FA_AMD_R equ 4Bh ; AMD R-Series Processor
+FA_OPTERON_4300 equ 4Ch ; AMD Opteron(TM) 4300 Series Processor
+FA_OPTERON_6300 equ 4Dh ; AMD Opteron(TM) 6300 Series Processor
+FA_OPTERON_3300 equ 4Eh ; AMD Opteron(TM) 3300 Series Processor
+FA_FIREPRO equ 4Fh ; AMD FirePro(TM) Series Processor
+FA_SPARC_FAMILY equ 50h ; Sparc family
+FA_SPARC_SUPPERSPARC equ 51h ; SupperSPARC
+FA_SPARC_MICROSPARC_II equ 52h ; microSPARC II
+FA_SPARC_MICROSPARC_IIep equ 53h ; microSPARC IIep
+FA_SPARC_ULTRASPARC equ 54h ; ultraSPARC
+FA_SPARC_ULTRASPARC_II equ 55h ; ultraSPARC II
+FA_SPARC_ULTRASPARC_II_i equ 56h ; ultraSPARC IIi
+FA_SPARC_ULTRASPARC_III equ 57h ; ultraSPARC III
+FA_SPARC_ULTRASPARC_III_i equ 58h ; ultraSPARC IIIi
+FA_68040_FAMILY equ 60h ; 68040 family
+FA_68xxx_FAMILY equ 61h ; 68xxx family
+FA_68000 equ 62h ; Motorola 68000 family
+FA_68010 equ 63h ; Motorola 68010 family
+FA_68020 equ 64h ; Motorola 68020 family
+FA_68030 equ 65h ; Motorola 68030 family
+FA_HOBBIT_FAMILY equ 70h ; Hobbit family
+FA_CRUSOE_TM5000 equ 78h ; Crusoe TM5000
+FA_CRUSOE_TM3000 equ 79h ; Crusoe TM3000
+FA_EFFICEON_TM8000 equ 7Ah ; Efficeon TM8000
+FA_WEITEK_FAMILY equ 80h ; Weitek family
+FA_ITANIUM_FAMILY equ 82h ; Itanium family
+FA_AMD_ATHLON_64_FAMILY equ 83h ; AMD Athlon 64 family
+FA_AMD_OPTERON_FAMILY equ 84h ; AMD Opteron family
+FA_AMD_SEMPRON_FAMILY equ 85h ; AMD Sempron family
+FA_AMD_TURION_FAMILY equ 86h ; AMD Turion family
+FA_AMD_OPTERON_DUALCORE equ 87h ; Dual-Core AMD Opteron family
+FA_AMD_ATHLON_64X2_DUALCORE equ 88h ; AMD Athlon 64 X2 Dual-Core
+FA_AMD_TURION_64X2_MOBILE equ 89h ; AMD Turion 64 X2 Mobile
+FA_AMD_QUAD_CORE_OPTERON equ 8Ah ; Quad-Core AMD Opteron(TM) Processor Family
+FA_AMD_3RD_GEN_OPTERON equ 8Bh ; Third-Generation AMD Opteron(TM) Processor Family
+FA_AMD_PHENOM_FX_QUAD_CORE equ 8Ch ; AMD Phenom(TM) FX Quad-Core Processor Family
+FA_AMD_PHENOM_X4_QUAD_CORE equ 8Dh ; AMD Phenom(TM) X4 Quad-Core Processor Family
+FA_AMD_PHENOM_X2_DUAL_CORE equ 8Eh ; AMD Phenom(TM) X2 Dual-Core Processor Family
+FA_AMD_ATHLON_X2_DUAL_CORE equ 8Fh ; AMD Athlon(TM) X2 Dual-Core Processor Family
+FA_RISC_FAMILY equ 90h ; RISC family
+FA_PA_RISC_8500 equ 91h ; PA-RISC 8500
+FA_PA_RISC_8000 equ 92h ; PA-RISC 8000
+FA_PA_RISC_7300LC equ 93h ; PA-RISC 7300LC
+FA_PA_RISC_7200 equ 94h ; PA-RISC 7200
+FA_PA_RISC_7100LC equ 95h ; PA-RISC 7100LC
+FA_PA_RISC_7100 equ 96h ; PA-RISC 7100
+FA_V30_FAMILY equ 0A0h ; V30 family
+FA_QUAD_CORE_XEON_3200 equ 0A1h ; Quad-Core Intel(R) Xeon(R) processor 3200 Series
+FA_DUAL_CORE_XEON_3000 equ 0A2h ; Dual-Core Intel(R) Xeon(R) processor 3000 Series
+FA_QUAD_CORE_XEON_5300 equ 0A3h ; Quad-Core Intel(R) Xeon(R) processor 5300 Series
+FA_DUAL_CORE_XEON_5100 equ 0A4h ; Dual-Core Intel(R) Xeon(R) processor 5100 Series
+FA_DUAL_CORE_XEON_5000 equ 0A5h ; Dual-Core Intel(R) Xeon(R) processor 5000 Series
+FA_DUAL_CORE_XEON_LV equ 0A6h ; Dual-Core Intel(R) Xeon(R) processor LV
+FA_DUAL_CORE_XEON_ULV equ 0A7h ; Dual-Core Intel(R) Xeon(R) processor ULV
+FA_DUAL_CORE_XEON_7100 equ 0A8h ; Dual-Core Intel(R) Xeon(R) processor 7100 Series
+FA_QUAD_CORE_XEON_5400 equ 0A9h ; Quad-Core Intel(R) Xeon(R) processor 5400 Series
+FA_QUAD_CORE_XEON equ 0AAh ; Quad-Core Intel(R) Xeon(R) processor
+FA_DUAL_CORE_XEON_5200 equ 0ABh ; Dual-Core Intel(R) Xeon(R) processor 5200 Series
+FA_DUAL_CORE_XEON_7200 equ 0ACh ; Dual-Core Intel(R) Xeon(R) processor 7200 Series
+FA_QUAD_CORE_XEON_7300 equ 0ADh ; Quad-Core Intel(R) Xeon(R) processor 7300 Series
+FA_QUAD_CORE_XEON_7400 equ 0AEh ; Quad-Core Intel(R) Xeon(R) processor 7400 Series
+FA_MULTI_CORE_XEON_7400 equ 0AFh ; Multi-Core Intel(R) Xeon(R) processor 7400 Series
+FA_PIII_XEON_FAMILY equ 0B0h ; Pentium III Xeon processor
+FA_PIII_SPEED_STEP equ 0B1h ; Pentium Processor with Intel Speed Step Technology
+FA_P4_FAMILY equ 0B2h ; Pentium 4 Processor
+FA_XEON_FAMILY equ 0B3h ; Intel Xeon Family
+FA_AS400_FAMILY equ 0B4h ; AS400 Family
+FA_XEON_MP equ 0B5h ; Intel Xeon Processor MP
+FA_AMD_ATHLON_XP equ 0B6h ; AMD Athlon XP Processor Family
+FA_AMD_ATHLON_MP equ 0B7h ; AMD Athlon MP Processor Family
+FA_ITANIUM2 equ 0B8h ; Intel Itanium2 Processor
+FA_PENTIUM_M_FAMILY equ 0B9h ; Intel Pentium M Processor
+FA_CELERON_D_FAMILY equ 0BAh ; Intel Celeron D Processor
+FA_PENTIUM_D_FAMILY equ 0BBh ; Intel Pentium D Processor
+FA_PENTIUM_EXTREME_FAMILY equ 0BCh ; Intel Pentium Processor Extreme Edition
+FA_INTEL_CORE_SOLE equ 0BDh ; Intel(R) Core(TM) Solo Processor
+FA_INTEL_CORE_2 equ 0BFh ; Intel(R) Core(TM)2 Duo Processor
+FA_INTEL_CORE_2_SOLO equ 0C0h ; Intel(R) Core(TM)2 Solo processor
+FA_INTEL_CORE_2_EXTREME equ 0C1h ; Intel(R) Core(TM)2 Extreme processor
+FA_INTEL_CORE_2_QUAD equ 0C2h ; Intel(R) Core(TM)2 Quad processor
+FA_CORE_2_EXTREME_MOBIL equ 0C3h ; Intel(R) Core(TM)2 Extreme Mobile processor
+FA_CORE_2_DUO_MOBIL equ 0C4h ; Intel(R) Core(TM)2 Duo Mobile processor
+FA_CORE_2_SOLO_MOBIL equ 0C5h ; Intel(R) Core(TM)2 Solo Mobile processor
+FA_CORE_I7 equ 0C6h ; Intel(R) Core(TM)2 i7 processor
+FA_DUAL_CORE_CELERON equ 0C7h ; Dual-Core Intel(R) Celeron(R) processor
+FA_IBM390_FAMILY equ 0C8h ; IBM390 family
+FA_G4_FAMILY equ 0C9h ; G4 family
+FA_G5_FAMILY equ 0CAh ; G5 family
+FA_G6_FAMILY equ 0CBh ; ESA/390 G6 family
+FA_Z_ARCHITECTURE equ 0CCh ; z/Architecture Base
+FA_INTEL_CORE_I5 equ 0CDh ; Intel Core i5 Processor
+FA_INTEL_CORE_I3 equ 0CEh ; Intel Core i3 Processor
+FA_VIA_C7_M equ 0D2h ; VIA C7 M Processor
+FA_VIA_C7_D equ 0D3h ; VIA C7 D Processor
+FA_VIA_C7 equ 0D4h ; VIA C7 Processor
+FA_VIA_EDEN equ 0D5h ; VIA Eden Processor
+FA_MULTI_CORE_XEON equ 0D6h ; Multi-Core Intel(R) Xeon(R) processor
+FA_DUAL_CORE_XEON_3XXX equ 0D7h ; Dual-Core Intel(R) Xeon(R) processor 3xxx Series
+FA_QUAD_CORE_XEON_3XXX equ 0D8h ; Quad-Core Intel(R) Xeon(R) processor 3xxx Series
+FA_DUAL_CORE_XEON_5XXX equ 0DAh ; Dual-Core Intel(R) Xeon(R) processor 5xxx Series
+FA_QUAD_CORE_XEON_5XXX equ 0DBh ; Quad-Core Intel(R) Xeon(R) processor 5xxx Series
+FA_DUAL_CORE_XEON_7XXX equ 0DDh ; Dual-Core Intel(R) Xeon(R) processor 7xxx Series
+FA_QUAD_CORE_XEON_7XXX equ 0DEh ; Quad-Core Intel(R) Xeon(R) processor 7xxx Series
+FA_MULTI_CORE_XEON_7XXX equ 0DFh ; Multi-Core Intel(R) Xeon(R) processor 7xxx Series
+FA_MULTI_CORE_XEON_3400 equ 0E0h ; Multi-Core Intel(R) Xeon(R) processor 3400 Series
+FA_OPTERON_3000 equ 0E4h ; AMD Opteron(TM) 3000 Series Processor
+FA_SEMPRON_II equ 0E5h ; AMD Sempron(TM) II Processor
+FA_EMBEDED_OPTERON_QUAD_CORE equ 0E6h ; Embedded AMD Opteron(TM) Quad-Core Processor Family
+FA_PHENOM_TRIPLE_CORE equ 0E7h ; AMD Phenom(TM) Triple-Core Processor Family
+FA_TUIRON_ULTRA_DUAL_CORE_MOBILE equ 0E8h ; AMD Tuiron(TM) Ultra Dual-Core Mobile Processor Family
+FA_TUIRON_DUAL_CORE_MOBILE equ 0E9h ; AMD Tuiron(TM) Dual-Core Mobile Processor Family
+FA_ATHLON_DUAL_CORE equ 0EAh ; AMD Athlon(TM) Dual-Core Processor Family
+FA_SEMPRON_SI equ 0EBh ; AMD Sempron(TM) SI Processor Family
+FA_PHENOM_II equ 0ECh ; AMD Phenom II Processor Family
+FA_ATHLON_FAMILY equ 0EDh ; AMD Athlon II Processor Family
+FA_AMD_OPTERON_6CORE equ 0EEh ; Six-Core AMD Opteron Processor Family
+FA_AMD_SEMPRON_M equ 0EFh ; AMD Sempron M Processor Family
+FA_I860_FAMILY equ 0FAh ; i860 family
+FA_I960_FAMILY equ 0FBh ; i960 family
+FA_PROC_FAMILY_2 equ 0FEh ; Indicator to obtain the processor
+ ; family from the Processor Family 2
+ ; field
+FA_SH_3 equ 104h ; SH-3
+FA_SH_4 equ 105h ; SH-4
+FA_ARM equ 118h ; ARM
+FA_STRONG_ARM equ 119h ; StrongARM
+FA_6x86 equ 12Ch ; 6x86
+FA_MEDIA_GX equ 12Dh ; MediaGX
+FA_MII equ 12Eh ; MII
+FA_WINCHIP equ 140h ; WinChip
+FA_DSP equ 15Eh ; DSP
+FA_VIDEO_PROCESSOR equ 1F4h ; Video Processor
+;----------------------------------------------------------------------------
+; Processor Upgrade equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+UPG_OTHER equ 01h ; Other
+UPG_UNKNOWN equ 02h ; Unknown
+UPG_DAUGHTER_BOARD equ 03h ; Daughter board
+UPG_ZIF_SOCKET equ 04h ; ZIF socket
+UPG_REPLACEABLE_PIGGY_BACK equ 05h ; Replaceable Piggy Back
+UPG_NONE equ 06h ; None
+UPG_LIF_SOCKET equ 07h ; LIF socket
+UPG_SLOT1 equ 08h ; Slot 1
+UPG_SLOT2 equ 09h ; Slot 2
+UPG_370 equ 0Ah ; 370 Pin Socket
+UPG_SLOTA equ 0Bh ; Slot A
+UPG_SLOTM equ 0Ch ; Slot M
+UPG_423 equ 0Dh ; Socket 423
+UPG_SOCKETA equ 0Eh ; Socket A (Socket 462)
+UPG_SOCKET478 equ 0Fh ; Socket 478
+UPG_SOCKET754 equ 10h ; Socket 754
+UPG_SOCKET940 equ 11h ; Socket 940
+UPG_SOCKET939 equ 12h ; Socket 939
+UPG_SOCKET604 equ 13h ; Socket mPGA604
+UPG_SOCKET771 equ 14h ; Socket LGA771
+UPG_SOCKET775 equ 15h ; Socket LGA775
+UPG_SOCKET_S1 equ 16h ; Socket S1
+UPG_SOCKET_AM2 equ 17h ; Socket AM2
+UPG_SOCKET_F equ 18h ; Socket F (1207)
+UPG_SOCKET_LGA_1366 equ 19h ; Socket LGA 1366
+UPG_SOCKET_G34 equ 1Ah ; Socket G34
+UPG_SOCKET_AM3 equ 1Bh ; Socket AM3
+UPG_SOCKET_C32 equ 1Ch ; Socket C32
+UPG_SOCKET_LGA_1156 equ 1Dh ; Socket LGA 1156
+UPG_SOCKET_LGA_1567 equ 1Eh ; Socket LGA 1567
+UPG_SOCKET_PGA_988A equ 1Fh ; Socket PGA 988A
+UPG_SOCKET_BGA_1288 equ 20h ; Socket BGA 1288
+UPG_SOCKET_RPGA_988B equ 21h ; Socket rPGA988B
+UPG_SOCKET_BGA_1023 equ 22h ; Socket BGA 1023
+UPG_SOCKET_BGA_1224 equ 23h ; Socket BGA 1224
+UPG_SOCKET_BGA_1155 equ 24h ; Socket BGA 1155
+UPG_SOCKET_LGA_1356 equ 25h ; Socket LGA 1356
+UPG_SOCKET_LGA_2011 equ 26h ; Socket LGA 2011
+UPG_SOCKET_FS_1 equ 27h ; Socket FS 1
+UPG_SOCKET_FS_2 equ 28h ; Socket FS 2
+UPG_SOCKET_FM_1 equ 29h ; Socket FM 1
+UPG_SOCKET_FM_2 equ 2Ah ; Socket FM 2
+UPG_SOCKET_LGA_2011_3 equ 2Bh ; Socket LGA2011-3
+UPG_SOCKET_LGA_1356_3 equ 2Ch ; Socket LGA1356-3
+
+;----------------------------------------------------------------------------
+; Processor Voltage (a byte value)
+; Voltage is specified in Bit6-0 of this byte. Bit6-0 is interpreted according
+; to Bit-7.
+; Bit-7 = 0, Standard type
+; In this case Bit6-0 is a bit-mapped list of allowed voltages
+; (bit-mapped voltage equates below)
+; = 1, User defined type
+; In this case Bit6-0 is an enumerated value calculated as follows
+; value = 10*the voltage in volts
+; e.g. for 2.9V, bit6-0 should contain 29 decimal or 13h.
+;----------------------------------------------------------------------------
+; Equate Name Value Meaning
+STANDARD equ 00000000b ; Bit-7 = 0, Standard (bit6-0 is a list of allowed voltages)
+USER_DEFINED equ 10000000b ; Bit-7 = 1, User defined (bit6-0 is an enumerated value)
+
+; Bit-mappes Voltage equates
+VOLT_5 equ 00000001b ; Bit-0 = 1, 5 Volt
+VOLT_33 equ 00000010b ; Bit-1 = 1, 3.3 Volt
+VOLT_29 equ 00000100b ; Bit-2 = 1, 2.9 Volt
+ ; Bit6-3.....not defined
+
+;----------------------------------------------------------------------------
+; Structure Type 5: Equates used in MEMORY CONTROLLER Structure
+;----------------------------------------------------------------------------
+; Memory Controller Error Detecting method equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+MC_OTHER equ 01h ; Other
+MC_UNKNOWN equ 02h ; Unknown
+MC_NONE equ 03h ; None
+MC_8BIT_PARITY equ 04h ; Parity
+MC_32BIT_ECC equ 05h ; 32-bit ECC
+MC_64BIT_ECC equ 06h ; 64-bit ECC
+MC_128BIT_ECC equ 07h ; 128-bit ECC
+MC_CRC equ 08h ; CRC
+
+;----------------------------------------------------------------------------
+; Memory Controller supported Interleave equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+IS_OTHER equ 01h ; Other
+IS_UNKNOWN equ 02h ; Unknown
+IS_ONEWAY_INTLEAVE equ 03h ; One-way Interleave
+IS_TWOWAY_INTLEAVE equ 04h ; Two-way Interleave
+IS_FORWAY_INTLEAVE equ 05h ; Four-way Interleave
+IS_EHTWAY_INTLEAVE equ 06h ; Eight-way Interleave
+IS_STNWAY_INTLEAVE equ 07h ; Sixteen-way Interleave
+
+;----------------------------------------------------------------------------
+; Memory Controller Current Interleave equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+ICS_OTHER equ 01h ; Other
+ICS_UNKNOWN equ 02h ; Unknown
+ICS_ONEWAY_INTLEAVE equ 03h ; One-way Interleave
+ICS_TWOWAY_INTLEAVE equ 04h ; Two-way Interleave
+ICS_FORWAY_INTLEAVE equ 05h ; Four-way Interleave
+ICS_EHTWAY_INTLEAVE equ 06h ; Eight-way Interleave
+ICS_STNWAY_INTLEAVE equ 07h ; Sixteen-way Interleave
+
+;----------------------------------------------------------------------------
+; Structure Type 6: Equates used in MEMORY MODULE Structure
+;----------------------------------------------------------------------------
+; Memory Speed equates (an enumerated byte value)
+; Equate Name Value Meaning
+MM_SPEED_UNKNOWN equ 00h ; Memory speed unknown
+ ; if memory speed is known, specify it as mentioned in SMBDESC.DEF
+; Memory Module Bank Connection equates (an enumerated byte value)
+; Equate Name Value Meaning
+MM_NO_BANK_CONNECTION equ 0Fh ; No Bank connection
+RAS_1 equ 00 ; Ras-1 line
+RAS_2 equ 01 ; Ras-2 line
+RAS_3 equ 02 ; Ras-3 line
+RAS_4 equ 03 ; Ras-4 line
+RAS_5 equ 04 ; Ras-5 line
+RAS_6 equ 05 ; Ras-6 line
+RAS_7 equ 06 ; Ras-7 line
+RAS_8 equ 07 ; Ras-8 line
+RAS_9 equ 08 ; Ras-9 line
+RAS_10 equ 09 ; Ras-10 line
+RAS_11 equ 10 ; Ras-11 line
+RAS_12 equ 11 ; Ras-12 line
+RAS_13 equ 12 ; Ras-13 line
+RAS_14 equ 13 ; Ras-14 line
+RAS_15 equ 14 ; Ras-15 line
+RAS_16 equ 15 ; Ras-16 line
+
+;----------------------------------------------------------------------------
+; Memory Module Size equates (a byte value)
+; Bit-7 = 0, module has signle-bank connection
+; 1, module has double-bank connection
+; Bit6-0= n, where 2^n is the memory module size in MB
+; (7Dh = Not determinable
+; 7Eh = Module is installed but not enabled
+; 7Fh - Module is not installed)
+;----------------------------------------------------------------------------
+; Equate Name Value Meaning
+MM_SINGLE_BANK equ 00000000b; Bit-7 = 0, Single bank connection
+MM_DOUBLE_BANK equ 10000000b; Bit-7 = 1, Double bank Connection
+MM_SIZE_NOT_DETERMINABLE equ 7Dh ; Memory Size is not determinable
+MM_NOT_ENABLED equ 7Eh ; Memory Socket is populated but not enabled
+MM_NOT_INSTALLED equ 7Fh ; Memory Not installed
+
+;----------------------------------------------------------------------------
+; Memory Module Type equates (Bit-field word Value)
+; Equate Name Value Meaning
+; 1 0
+; 5432109876543210
+MM_TYPE_OTHER equ 0000000000000001b; Other type
+MM_TYPE_UNKNOWN equ 0000000000000010b; Unknown type
+MM_TYPE_STANDARD equ 0000000000000100b; Standard type
+MM_TYPE_FAST_PAGE_MODE equ 0000000000001000b; Fast page mode type
+MM_TYPE_EDO equ 0000000000010000b; EDO type
+MM_TYPE_PARITY equ 0000000000100000b; Parity type
+MM_TYPE_ECC equ 0000000001000000b; ECC type
+MM_TYPE_SIMM equ 0000000010000000b; SIMM type
+MM_TYPE_DIMM equ 0000000100000000b; DIMM type
+MM_TYPE_BURST_EDO equ 0000001000000000b; BURST EDO type
+MM_TYPE_SDRAM equ 0000010000000000b; SDRAM type
+ ; Bit15-11 Reserved and must be zero
+;----------------------------------------------------------------------------
+; Structure Type 7: Equates used in CACHE INFORMATION Structure
+;----------------------------------------------------------------------------
+; Cache Error Correction Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SR_OTHER equ 01h ; Other
+SR_UNKNOWN equ 02h ; Unknown
+SR_NONE equ 03h ; None
+SR_PARITY equ 04h ; Parity
+SR_SINGLEBIT_ECC equ 05h ; Single-bit ECC
+SR_MULTIBIT_ECC equ 06h ; Multi-bit ECC
+
+;----------------------------------------------------------------------------
+; System Cache Type equates (an enumerated BYTE Value)
+; Equate Name Value Meaning
+SCT_OTHER equ 01h ; Other
+SCT_UNKNOWN equ 02h ; Unknown
+SCT_INSTRUCTION equ 03h ; Instruction
+SCT_DATA equ 04h ; Data
+SCT_UNIFIED equ 05h ; Unified
+
+;----------------------------------------------------------------------------
+; System Cache Associativity equates (an enumerated BYTE Value)
+; Equate Name Value Meaning
+CA_OTHER equ 01h ; Other
+CA_UNKNOWN equ 02h ; Unknown
+CA_DIRECT_MAPPED equ 03h ; Direct Mapped
+CA_2WAY_ASSOC equ 04h ; 2way Associativity
+CA_4WAY_ASSOC equ 05h ; 4way Associativity
+CA_FULLY_ASSOC equ 06h ; Fully Associativity
+CA_8WAY_ASSOC equ 07h ; 8way Associativity
+CA_16WAY_ASSOC equ 08h ; 16way Associativity
+CA_12WAY_ASSOC equ 09h ; 12way Associativity
+CA_24WAY_ASSOC equ 0Ah ; 24way Associativity
+CA_32WAY_ASSOC equ 0Bh ; 32way Associativity
+CA_48WAY_ASSOC equ 0Ch ; 48way Associativity
+CA_64WAY_ASSOC equ 0Dh ; 64way Associativity
+CA_20WAY_ASSOC equ 0Eh ; 20way Associativity
+
+;----------------------------------------------------------------------------
+; Cache Type equates (Bit-field word Value)
+; Equate Name Value Meaning
+; 1 0
+; 5432109876543210
+CH_OTHER equ 0000000000000001b ; Other
+CH_UNKNOWN equ 0000000000000010b ; Unknown
+CH_NON_BURST equ 0000000000000100b ; Non-burst
+CH_BURST equ 0000000000001000b ; Burst
+CH_PIPELINE_BURST equ 0000000000010000b ; Pipeline Burst
+CH_SYNCHRONOUS equ 0000000000100000b ; Synchronous
+CH_ASYNCHRONOUS equ 0000000001000000b ; Asynchronous
+ ; Bit15-7 is reserved and must be zero
+
+;----------------------------------------------------------------------------
+; Equates used in the WORD defining the following:
+; Bit15-10= Reserved, must be 0
+; Bit9-8 = Cache Configuration Operational Mode
+; Bit-7 = Cache Enable/Disable information at boot time
+; Bit6-5 = Cache Configuration Location relative to CPU module
+; Bit4 = Reserved, must be zero
+; Bit3 = Cache Socket
+; Bit2-0 = Cache Level
+;----------------------------------------------------------------------------
+; Equate Name Value Meaning
+; 1 0
+; 5432109876543210
+; Bit9-8 = Cache Configuration Operational Mode equates
+COM_WRITE_THROUGH equ 0000000000000000b ; Write-thru
+COM_WRITE_BACK equ 0000000100000000b ; Write-back
+COM_VARIES_WITH_MEM equ 0000001000000000b ; Varies with Memory Address
+COM_UNKNOWN equ 0000001100000000b ; Unknown
+; Bit-7 = Cache Enable/Disable information at Boot time equates
+CACHE_ENABLED equ 0000000010000000b ; Enabled
+CACHE_DISABLED equ 0000000000000000b ; Disabled
+; Bit6-5 = Cache Configuration Location relative to CPU equates
+CCL_INTERNAL equ 0000000000000000b ; Internal
+CCL_EXTERNAL equ 0000000000100000b ; External
+CCL_RESERVED equ 0000000001000000b ; Reserved
+CCL_UNKNOWN equ 0000000001100000b ; Unknown
+; Bit-3 = Cache Configuration Socket equates
+CS_NOT_SOCKETED equ 0000000000000000b ; Not socketed
+CS_SOCKETED equ 0000000000001000b ; Socketed
+; Bit2-0 = Cache Configuration Level equates
+CL_L1 equ 0000000000000000b ; Level 1
+CL_L2 equ 0000000000000001b ; Level 2
+CL_L3 equ 0000000000000010b ; Level 3
+
+;----------------------------------------------------------------------------
+; Structure Type 8: Equates used in PORT CONNECTOR INFORMATION Structure
+;----------------------------------------------------------------------------
+; Internal Port Connector Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+PC_NONE equ 00h ; None
+PC_CENTRONICS equ 01h ; Centronic
+PC_MINI_CENTRONIC equ 02h ; Mini Centronic
+PC_PROPRIETARY equ 03h ; Proprietary
+PC_DB25_PIN_MALE equ 04h ; DB-25 Pin Male
+PC_DB25_PIN_FEMALE equ 05h ; DB-25 Pin Female
+PC_DB15_PIN_MALE equ 06h ; DB-15 Pin Male
+PC_DB15_PIN_FEMALE equ 07h ; DB-15 Pin Female
+PC_DB9_PIN_MALE equ 08h ; DB-9 Pin Male
+PC_DB9_PIN_FEMALE equ 09h ; DB-9 Pin female
+PC_RJ_11 equ 0Ah ; RJ-11
+PC_RJ_45 equ 0Bh ; RJ-45
+PC_50_PINMINI_SCSI equ 0Ch ; 50 Pin mini SCSI
+PC_MINI_DIN equ 0Dh ; Mini-DIN
+PC_MICRO_DIN equ 0Eh ; Miciro-DIN
+PC_PS_2 equ 0Fh ; PS/2
+PC_INFRARED equ 10h ; Infrared
+PC_HP_HIL equ 11h ; HP-HIL
+PC_ACCESS_BUS_USB equ 12h ; Access Bus (USB)
+PC_SSA_SCSI equ 13h ; SSA SCSI
+PC_CIR_DIN8_MALE equ 14h ; Circular DIN-8 Male
+PC_CIR_DIN8_FEMALE equ 15h ; Circular DIN-8 Female
+PC_ONBOARD_IDE equ 16h ; On board IDE
+PC_ONBOARD_FLOPPY equ 17h ; On board Floppy
+PC_DUAL_INLINE_9PIN equ 18h ; 9 pin dual inline (pin 10 cut)
+PC_DUL_INLINE_25PIN equ 19h ; 25 pin dual inline (pin 26 cut)
+PC_DUL_INLINE_50PIN equ 1Ah ; 50 pin dual inline
+PC_DUL_INLINE_68PIN equ 1Bh ; 68 pin dual inline
+PC_ONBRD_SND_INPUT equ 1Ch ; On board sound input from CD-ROM
+PC_CENTRONIC_TYPE14 equ 1Dh ; Mini-centronic type-14
+PC_CENTRONIC_TYPE26 equ 1Eh ; Mini-centronic type-26
+PC_MINI_JACK equ 1Fh ; Mini-jack (headphones)
+PC_BNC equ 20h ; BNC
+PC_IEEE_1394 equ 21h ; 1394
+PC_SAS_SATA equ 22h ; SAS/SATA Plug Receptacle
+PC_PC_98 equ 0A0h ; PC-98
+PC_PC_98_HIRESO equ 0A1h ; PC-98Hireso
+PC_PC_H98 equ 0A2h ; PC-H98
+PC_PC_98_NOTE equ 0A3h ; PC-98Note
+PC_PC_98_FULL equ 0A4h ; PC-98Full
+PC_OTHER equ 0FFh ; Other- Use Reference Designator Strings to supply information
+
+;----------------------------------------------------------------------------
+; Port Connector Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+PT_NONE equ 00h ; None
+PT_PARL_XT_AT equ 01h ; Parallel Port XT/AT Compatible
+PT_PARL_PORT_PS2 equ 02h ; Parallel Port PS/2
+PT_PARL_PORT_ECP equ 03h ; Parallel Port ECP
+PT_PARL_PORT_EPP equ 04h ; Parallel Port EPP
+PT_PARL_ECP_EPP equ 05h ; Parallel Port ECC/EPP
+PT_SR_PORT_XT_AT equ 06h ; Serial Port XT/AT Compatible
+PT_SR_PORT_16450 equ 07h ; Serial Port 16450 Compatible
+PT_SR_PORT_16550 equ 08h ; Serial Port 16550 Compatible
+PT_SR_PORT_16550A equ 09h ; Serial Port 16550A Compatible
+PT_SCSI_PORT equ 0Ah ; SCSI Port
+PT_MIDI_PORT equ 0Bh ; MIDI Port
+PT_JOY_STIC_PORT equ 0Ch ; Joy stick Port
+PT_KEYBOARD_PORT equ 0Dh ; Keyboard Port
+PT_MOUSE_PORT equ 0Eh ; Mouse Port
+PT_SSA_SCSI equ 0Fh ; SSA SCSI Port
+PT_USB equ 10h ; USB Port
+PT_FIREWIRE_1394 equ 11h ; Firewire-1394 Port
+PT_PCMCIA_TYPE1 equ 12h ; PCMCIA TYPE I
+PT_PCMCIA_TYPE2 equ 13h ; PCMCIA TYPE II
+PT_PCMCIA_TYPE3 equ 14h ; PCMCIA TYPE III
+PT_CARDBUS equ 15h ; Cardbus
+PT_ACCESS_BUS_PORT equ 16h ; Access bus port
+PT_SCSI2 equ 17h ; SCSI II
+PT_SCSI_WIDE equ 18h ; SCSI Wide
+PT_PC_98 equ 19h ; PC-98
+PT_PC_98_HIRESO equ 1Ah ; PC-98Hireso
+PT_PC_H98 equ 1Bh ; PC-H98
+PT_VIDEO_PORT equ 1Ch ; Video port
+PT_AUDIO_PORT equ 1Dh ; Audi port
+PT_MODEM_PORT equ 1Eh ; Modem Port
+PT_NETWORK_PORT equ 1Fh ; Network port
+PT_SATA_PORT equ 20h ; SATA
+PT_SAS_PORT equ 21h ; SAS
+PT_8251_COMPATIBLE equ 0A0h ; 8251 Compatible
+PT_8251_FIFO_COMP equ 0A1h ; 8251 FIFO Compatible
+PT_OTHER equ 0FFh ; Other
+
+;----------------------------------------------------------------------------
+; Structure Type 9: Equates used in SYSTEM SLOT INFORMATION Structure
+;----------------------------------------------------------------------------
+; System Slot Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SYS_SLOT_OTHER equ 01h ; Other
+SYS_SLOT_UNKNOWN equ 02h ; Unknown
+SYS_SLOT_ISA equ 03h ; ISA
+SYS_SLOT_MCA equ 04h ; MCA
+SYS_SLOT_EISA equ 05h ; EISA
+SYS_SLOT_PCI equ 06h ; PCI
+SYS_SLOT_PCMCIA equ 07h ; PCMCIA
+SYS_SLOT_VL_VESA equ 08h ; Vl-vesa
+SYS_SLOT_PROPRIETARY equ 09h ; Proprietary type
+SYS_SLOT_PROC_CARD_SLOT equ 0Ah ; Processor Card slot
+SYS_SLOT_PROP_CARD_SLOT equ 0Bh ; Proprietary Memory card slot
+SYS_SLOT_IO_RISER_SLOT equ 0Ch ; I/O Riser card slot
+SYS_SLOT_NU_BUS equ 0Dh ; NuBus
+SYS_SLOT_PCI_66MHZ equ 0Eh ; PCI-66Mhz Capable
+SYS_SLOT_AGP equ 0Fh ; Advance Graphics Port
+SYS_SLOT_AGP_2X equ 10h ; AGP 2X
+SYS_SLOT_AGP_4X equ 11h ; AGP 4X
+SYS_SLOT_PCI_X equ 12h ; PCI-X
+SYS_SLOT_AGP_8X equ 13h ; AGP 8X
+SYS_SLOT_PC98_C20 equ 0A0h ; PC-98/C20
+SYS_SLOT_PC98_C24 equ 0A1h ; PC-98/C24
+SYS_SLOT_PC98_E equ 0A2h ; PC-98/E
+SYS_SLOT_PC98_LOCAL equ 0A3h ; PC-98/Local Bus
+SYS_SLOT_PC98_CARD equ 0A4h ; PC-98 Card
+SYS_SLOT_PCIE equ 0A5h ; PCI Express
+SYS_SLOT_PCIE_X1 equ 0A6h ; PCI Express x1
+SYS_SLOT_PCIE_X2 equ 0A7h ; PCI Express x2
+SYS_SLOT_PCIE_X4 equ 0A8h ; PCI Express x4
+SYS_SLOT_PCIE_X8 equ 0A9h ; PCI Express x8
+SYS_SLOT_PCIE_X16 equ 0AAh ; PCI Express x16
+SYS_SLOT_PCIE_2 equ 0ABh ; PCI Express Gen 2
+SYS_SLOT_PCIE_2_X1 equ 0ACh ; PCI Express Gen 2 x1
+SYS_SLOT_PCIE_2_X2 equ 0ADh ; PCI Express Gen 2 x2
+SYS_SLOT_PCIE_2_X4 equ 0AEh ; PCI Express Gen 2 x4
+SYS_SLOT_PCIE_2_X8 equ 0AFh ; PCI Express Gen 2 x8
+SYS_SLOT_PCIE_2_X16 equ 0B0h ; PCI Express Gen 2 x16
+SYS_SLOT_PCIE_3 equ 0B1h ; PCI Express Gen 3
+SYS_SLOT_PCIE_3_X1 equ 0B2h ; PCI Express Gen 3 x1
+SYS_SLOT_PCIE_3_X2 equ 0B3h ; PCI Express Gen 3 x2
+SYS_SLOT_PCIE_3_X4 equ 0B4h ; PCI Express Gen 3 x4
+SYS_SLOT_PCIE_3_X8 equ 0B5h ; PCI Express Gen 3 x8
+SYS_SLOT_PCIE_3_X16 equ 0B6h ; PCI Express Gen 3 x16
+
+;----------------------------------------------------------------------------
+; System Slot Data bus width equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+DBW_OTHER equ 01h ; Other
+DBW_UNKNOWN equ 02h ; Unknown
+DBW_8BIT equ 03h ; 8-bit
+DBW_16BIT equ 04h ; 16-bit
+DBW_32BIT equ 05h ; 32-bit
+DBW_64BIT equ 06h ; 64-bit
+DBW_128BIT equ 07h ; 128-bit
+DBW_1X equ 08h ; PCIE 1X
+DBW_2X equ 09h ; PCIE 2X
+DBW_4X equ 0Ah ; PCIE 4X
+DBW_8X equ 0Bh ; PCIE 8X
+DBW_12X equ 0Ch ; PCIE 12X
+DBW_16X equ 0Dh ; PCIE 16X
+DBW_32X equ 0Eh ; PCIE 32X
+
+;----------------------------------------------------------------------------
+; System Slot Usage equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SCU_OTHER equ 01h ; Other
+SCU_UNKNOWN equ 02h ; Unknown
+SCU_AVAILABLE equ 03h ; Available
+SCU_IN_USE equ 04h ; In use
+
+;----------------------------------------------------------------------------
+; System Slot Length equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+SL_OTHER equ 01h ; Other
+SL_UNKNOWN equ 02h ; Unknown
+SL_SHORT_LENGTH equ 03h ; Short length
+SL_LONG_LENGTH equ 04h ; Long length
+
+;----------------------------------------------------------------------------
+; System Slot Characteristic-1 equates (Bit-field byte value)
+; Equate Name Value Meaning
+; 76543210
+
+SCH_UNKNOWN equ 00000001b ; Unknown
+SCH_5V equ 00000010b ; 5 volt
+SCH_33V equ 00000100b ; 3.3 volt
+SCH_SHARED equ 00001000b ; Shared
+SCH_PCCARD16 equ 00010000b ; PC Card bus
+SCH_CARDBUS equ 00100000b ; Card bus
+SCH_ZOOMVIDEO equ 01000000b ; Zoom Video
+SCH_MODEMRING equ 10000000b ; Modem ring resume
+
+;----------------------------------------------------------------------------
+; System Slot Characteristic-2 equates (Bit-field byte value)
+; Equate Name Value Meaning
+; 76543210
+SCH_PME equ 0000000100000000b ; PCI Slot supports Power management (PME#) signal
+SCH_HOT_PLUG equ 0000001000000000b ; supports Hot Plug devices
+SCH_PCI_SUPPORT_SMBUS equ 0000010000000000b ; PCI Slot Supports SMBUS Signal
+ ; Bit7-3 = Reserved set to 0
+;----------------------------------------------------------------------------
+; Structure Type 10: Equates used in ON-BOARD DEVICE INFORMATION Structure
+;----------------------------------------------------------------------------
+; On-board Device Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+OBD_OTHER equ 01h ; Other
+OBD_UNKNOWN equ 02h ; Unknown
+OBD_VIDEO equ 03h ; Video
+OBD_SCSI equ 04h ; SCSI
+OBD_ETHERNET equ 05h ; Ethernet
+OBD_TOKEN_RING equ 06h ; Token ring
+OBD_SOUND equ 07h ; Sound
+OBD_PATA equ 08h ; PATA Controller
+OBD_SATA equ 09h ; SATA Controller
+OBD_SAS equ 0Ah ; SAS Controller
+
+;----------------------------------------------------------------------------
+; Structure Type 11: No equates used in OEM STRINGS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 12: No equates used in SYSTEM CONFIGURATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 13: Equates used in BIOS LANGUAGE INFORMATION Structure
+;----------------------------------------------------------------------------
+; BIOS Language Flag equates (bit-field byte value)
+; Equate Name Value Meaning
+; 76543210
+LONG_FORMAT equ 00000000b ; Long format
+ABBRIVIATED_FORMAT equ 00000001b ; Abbreviated format
+ ; bit7-1 = reserved
+; Note: In Long Format, each language string is in the form of
+; "ISO 639 Language name |ISO 3166 Territory Name| Encoding Method"
+; LONG FORMAT -> db 'en|US|iso8859-1', 0
+; ABBRIVATED FORMAT -> db 'enUS', 0
+
+;----------------------------------------------------------------------------
+; Structure Type 14: No equates used in GROUP ASSOCIATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 16: Equates used in PHYSICAL MEMORY ARRAY Structure
+;----------------------------------------------------------------------------
+; Memory Array Location equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+ARRAY_LOC_OTHER equ 001h ; Other
+ARRAY_LOC_UNKNOWN equ 002h ; Unknown
+ARRAY_LOC_MOTHERBOARD equ 003h ; System board/ Motherboard
+ARRAY_LOC_ISAADDONCARD equ 004h ; ISA Add on card
+ARRAY_LOC_EISAADDONCARD equ 005h ; EISA Add on card
+ARRAY_LOC_PCIADDONCARD equ 006h ; PCI Add on card
+ARRAY_LOC_MCAADDONCARD equ 007h ; MCA Add on card
+ARRAY_LOC_PCMCIAADDONCARD equ 008h ; PCMCIA Add on card
+ARRAY_LOC_PROPADDONCARD equ 009h ; Propriatery Add on card
+ARRAY_LOC_NuBus equ 00Ah ; Nubus
+ARRAY_LOC_PC98_C20 equ 0A0h ; PC98/C20
+ARRAY_LOC_PC98_C24 equ 0A1h ; PC98/C24
+ARRAY_LOC_PC98_E equ 0A2h ; PC98-E
+ARRAY_LOC_PC98_LOCALBUS equ 0A3h ; PC-98 Local bus
+
+;----------------------------------------------------------------------------
+; Memory Array Use equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+ARRAY_USE_OTHER equ 01h ; Other
+ARRAY_USE_UNKNOWN equ 02h ; Unknown
+ARRAY_USE_SYSTEM_MEMORY equ 03h ; System Memory
+ARRAY_USE_VIDEOMEMORY equ 04h ; Video Memory
+ARRAY_USE_FLASHMEMORY equ 05h ; Flash Memory
+ARRAY_USE_NONVOLMEMORY equ 06h ; Non volatile Memory
+ARRAY_USE_CACHEMEMORY equ 07h ; Cache Memory
+
+;----------------------------------------------------------------------------
+; Memory Array Error Correction Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+ARRAY_ERROR_OTHER equ 01h ; Other
+ARRAY_ERROR_UNKNOWN equ 02h ; Unknown
+ARRAY_ERROR_NONE equ 03h ; None
+ARRAY_ERROR_PARITY equ 04h ; Parity
+ARRAY_ERROR_SINGLEBIT_ECC equ 05h ; Single-bit ECC
+ARRAY_ERROR_MULTIBIT_ECC equ 06h ; Multi-bit ECC
+ARRAY_ERROR_CRC equ 07H ; CRC
+
+;----------------------------------------------------------------------------
+; Structure Type 17: Equates used in MEMORY DEVICES Structure
+;----------------------------------------------------------------------------
+; Memory Device Form Factor equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+DEVICE_FORMFACTOR_OTHER equ 01h ; other
+DEVICE_FORMFACTOR_UNKNOWN equ 02h ; unknown
+DEVICE_FORMFACTOR_SIMM equ 03h ; SIMM
+DEVICE_FORMFACTOR_SIP equ 04h ; SIP
+DEVICE_FORMFACTOR_CHIP equ 05h ; CHIP
+DEVICE_FORMFACTOR_DIP equ 06h ; DIP
+DEVICE_FORMFACTOR_ZIP equ 07h ; ZIP
+DEVICE_FORMFACTOR_PROPCARD equ 08h ; Propriatery Card
+DEVICE_FORMFACTOR_DIMM equ 09h ; DIMM
+DEVICE_FORMFACTOR_TSOP equ 0Ah ; TSOP
+DEVICE_FORMFACTOR_ROWOFCHIP equ 0Bh ; ROWCHIP
+DEVICE_FORMFACTOR_RIMM equ 0Ch ; RIMM
+DEVICE_FORMFACTOR_SODIMM equ 0Dh ; SODIMM
+DEVICE_FORMFACTOR_SRIMM equ 0Eh ; SRIMM
+DEVICE_FORMFACTOR_FBDIMM equ 0Fh ; FB-DIMM
+
+;----------------------------------------------------------------------------
+; Memory Device Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+MEMORY_DEVICE_TYPE_OTHER equ 01h ; Other
+MEMORY_DEVICE_TYPE_UNKNOWN equ 02h ; Unknown
+MEMORY_DEVICE_TYPE_DRAM equ 03h ; DRAM
+MEMORY_DEVICE_TYPE_EDRAM equ 04h ; EDRAM
+MEMORY_DEVICE_TYPE_VRAM equ 05h ; VRAM
+MEMORY_DEVICE_TYPE_SRAM equ 06h ; SRAM
+MEMORY_DEVICE_TYPE_RAM equ 07h ; RAM
+MEMORY_DEVICE_TYPE_ROM equ 08h ; ROM
+MEMORY_DEVICE_TYPE_FLASH equ 09h ; FLASH
+MEMORY_DEVICE_TYPE_EEPROM equ 0Ah ; EEPROM
+MEMORY_DEVICE_TYPE_FEPROM equ 0Bh ; FEPROM
+MEMORY_DEVICE_TYPE_EPROM equ 0Ch ; EPROM
+MEMORY_DEVICE_TYPE_CDRAM equ 0Dh ; CDRAM
+MEMORY_DEVICE_TYPE_3DRAM equ 0Eh ; 3DRAM
+MEMORY_DEVICE_TYPE_SDRAM equ 0Fh ; SDRAM
+MEMORY_DEVICE_TYPE_SGRAM equ 10h ; SGRAM
+MEMORY_DEVICE_TYPE_RDRAM equ 11h ; RDRAM
+MEMORY_DEVICE_TYPE_DDR equ 12h ; DDR
+MEMORY_DEVICE_TYPE_DDR2 equ 13h ; DDR2
+MEMORY_DEVICE_TYPE_DDR2_FB_DIM equ 14h ; DDR2 FB-DIMM
+MEMORY_DEVICE_TYPE_DDR3 equ 18h ; DDR3
+MEMORY_DEVICE_TYPE_FBD2 equ 19h ; FBD2
+
+;----------------------------------------------------------------------------
+; Structure Type 18: Equates used in 32Bit MEMORY ERROR Structure
+;----------------------------------------------------------------------------
+; 32bit Memory Error equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+ERR_TYP_OTHER equ 01h ; Other
+ERR_TYP_UNKNOWN equ 02h ; Unknown
+ERR_TYP_OK equ 03h ; OK
+ERR_TYP_BADREAD equ 04h ; BAD Read
+ERR_TYP_PARITYERROR equ 05h ; Parity Error
+ERR_TYP_SINGLEBITERROR equ 06h ; Single bit Error
+ERR_TYP_DOUBLEBITERROR equ 07h ; Double bit Error
+ERR_TYP_MULTIBITERROR equ 08h ; Multi bit Error
+ERR_TYP_NIBBLEERROR equ 09h ; Nibble Error
+ERR_TYP_CHECKSUMERROR equ 0Ah ; Checksum Error
+ERR_TYP_CRCERROR equ 0Bh ; CRC Error
+ERR_TYP_CORRECTSINGERR equ 0Ch ; Correctable Single bit Error
+ERR_TYP_CORRECTEDERROR equ 0Dh ; Corrected Error
+ERR_TYP_UNCORRECTABLEERR equ 0Eh ; Uncorrectable Error
+
+;----------------------------------------------------------------------------
+; 32bit Memory Error Granularity equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+GRANULARITY_OTHER equ 01h ; Other
+GRANULARITY_UNKNOWN equ 02h ; Unknown
+GRANULARITY_DEVICELEVEL equ 03h ; Device level
+GRANULARITY_MEMPARTIONLEVEL equ 04h ; Memory Partition Level
+
+;----------------------------------------------------------------------------
+; 32bit Memory Error Operation equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+OPERATION_OTHER equ 01h ; Other
+OPERATION_UNKNOWN equ 02h ; Unknown
+OPERATION_READ equ 03h ; Read
+OPERATION_WRITE equ 04h ; Write
+OPERATION_PARTIAL_WRITE equ 05h ; Partial Write
+;----------------------------------------------------------------------------
+; Structure Type 19: No equates used in MEMORY ARRAY MAPPED ADDRESS
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 20: No equates used in MEMORY DEVICE MAPPED ADDRESS
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 21: Equates used in Pointing Device Structure
+;----------------------------------------------------------------------------
+; Pointing Device Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+POR_OTHER equ 01h ; Other
+POR_UNKNOWN equ 02h ; Unknown
+POR_MOUSE equ 03h ; Mouse
+POR_TRACK_BALL equ 04h ; Track ball
+POR_TRACK_POINT equ 05h ; Track Point
+POR_GLIDE_POINT equ 06h ; Glide Point
+POR_TOUCH_PAD equ 07h ; Touch Pad
+POR_TOUCH_SCR equ 08h ; Touch Screen
+POR_OPTICAL_SENSOR equ 09h ; Optical Sensor
+
+;----------------------------------------------------------------------------
+; Pointing Device Interface equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+PDI_OTHER equ 001h ; Other
+PDI_UNKNOWN equ 002h ; Unknown
+PDI_SERIAL equ 003h ; Serial
+PDI_PS2 equ 004h ; PS2
+PDI_INFRARED equ 005h ; Infrared
+PDI_HP_HIL equ 006h ; HP-HIL
+PDI_BUS_MOUSE equ 007h ; Bus Mouse
+PDI_APPLE_DESKTOP_BUS equ 008h ; Apple Desktop Bus
+PDI_BUS_MOUSE_DB9 equ 0A0h ; Bus Mouse DB9
+PDI_BUS_MOUSE_MICRO_DIN equ 0A1h ; Bus Mouse Micro DIN
+PDI_USB equ 0A2h ; USB
+
+;----------------------------------------------------------------------------
+; Structure Type 22: Equates used in Portable Battery Structure
+;----------------------------------------------------------------------------
+; Device Chemistry Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+PBC_OTHER equ 01h ; Other
+PBC_UNKNOWN equ 02h ; Unknown
+PBC_LEAD_ACID equ 03h ; Lead ACID
+PBC_NICKEL_CAD equ 04h ; Nickle Cadmium
+PBC_NICKEL_HYDRIDE equ 05h ; Nickle metal hydride
+PBC_LITHIUM_ION equ 06h ; Lithium-ion
+PBC_ZINC_AIR equ 07h ; Zinc air
+PBC_LITHIUM_POLYMER equ 08h ; Lithium Polymer
+
+;----------------------------------------------------------------------------
+; Structure Type 23: Equates used in System Reset Structure
+;----------------------------------------------------------------------------
+; Capabilities equates (Bit-field byte value)
+; Equate name Value Meaning
+; 76543210
+SRC_SYSTEM_RESET equ 00000001b; Bit-0 = System Reset enabled
+SRC_BOOT_OPTION_OS equ 00000010b; Bit2-1 = 01, OS
+SRC_BOOT_OPTION_SU equ 00000100b; Bit2-1 = 10, System Utilities
+SRC_BOOT_OPTION_NRB equ 00001100b; Bit2-1 = 11, do not reboot
+SRC_BOOT_OPTION_LIMIT_OS equ 00000010b; Bit4-3 = 01, OS
+SRC_BOOT_OPTION_LIMIT_SU equ 00000100b; Bit4-3 = 10, System Utilities
+SRC_BOOT_OPTION_LIMIT_NRB equ 00001100b; Bit4-3 = 11, do not reboot
+SRC_WATCHDOG_TIMER equ 00100000b; Bit-5 = Watchdog timer
+ ; Bit7-6 = Reserved
+
+;----------------------------------------------------------------------------
+; Structure Type 24: equates used in Hardware Security Structure
+;----------------------------------------------------------------------------
+; Hardware Security Settings equates (Bit-field byte value)
+; Equate name Value Meaning
+; 76543210
+HSS_FRONT_PANEL_RESET_DISABLED equ 00000000b; Bit1-0 = 00, disabled
+HSS_FRONT_PANEL_RESET_ENABLED equ 00000001b; Bit1-0 = 01, enabled
+HSS_FRONT_PANEL_RESET_ABSENT equ 00000010b; Bit1-0 = 10, not implemented
+HSS_FRONT_PANEL_RESET_UNKNOWN equ 00000011b; Bit1-0 = 11, unknown
+HSS_SUPERVISOR_PASSWORD_DISABLED equ 00000000b; Bit3-2 = 00, disabled
+HSS_SUPERVISOR_PASSWORD_ENABLED equ 00000100b; Bit3-2 = 01, enabled
+HSS_SUPERVISOR_PASSWORD_ABSENT equ 00001000b; Bit3-2 = 10, not implemented
+HSS_SUPERVISOR_PASSWORD_UNKNOWN equ 00001100b; Bit3-2 = 11, unknown
+HSS_KEYBOARD_PASSWORD_DISABLED equ 00000000b; Bit5-4 = 00, disabled
+HSS_KEYBOARD_PASSWORD_ENABLED equ 00000100b; Bit5-4 = 01, enabled
+HSS_KEYBOARD_PASSWORD_ABSENT equ 00001000b; Bit5-4 = 10, not implemented
+HSS_KEYBOARD_PASSWORD_UNKNOWN equ 00001100b; Bit5-4 = 11, unknown
+HSS_POWERON_PASSWORD_DISABLED equ 00000000b; Bit7-6 = 00, disabled
+HSS_POWERON_PASSWORD_ENABLED equ 00000100b; Bit7-6 = 01, enabled
+HSS_POWERON_PASSWORD_ABSENT equ 00001000b; Bit7-6 = 10, not implemented
+HSS_POWERON_PASSWORD_UNKNOWN equ 00001100b; Bit7-6 = 11, unknown
+
+;----------------------------------------------------------------------------
+; Structure Type 25: No equates used in System Power Controls Structure
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 26: Equates used in Voltage Probe Structure
+;----------------------------------------------------------------------------
+; Location and Status (a byte value) Bit7-5 = Status (enumerated value)
+; Bit4-0 = Location (enumerated value)
+; Location
+; Equate name Value Meaning
+PL_OTHER equ 01h ; Other
+PL_UNKNOWN equ 02h ; Unknown
+PL_PROCESSOR equ 03h ; Processor
+PL_DISK equ 04h ; Disk
+PL_PERIPHERAL_BAY equ 05h ; Peripheral Bay
+PL_SYSTEM_MGMT_MODULE equ 06h ; System Management Module
+PL_MOTHERBOARD equ 07h ; Motherboard
+PL_MEMORY_MODULE equ 08h ; Memory Module
+PL_PROCESSOR_MODULE equ 09h ; Processor Module
+PL_POWER_UNIT equ 0Ah ; Power Unit
+PL_ADDIN_CARD equ 0Bh ; Add-in card
+; Status
+; Equate name Value Meaning
+PS_OTHER equ 020h ; Other
+PS_UNKNOWN equ 040h ; Unknown
+PS_OK equ 060h ; OK
+PS_NON_CRITICAL equ 080h ; Non-critical
+PS_CRITICAL equ 0A0h ; Critical
+PS_NON_RECOVERABLE equ 0C0h ; Non-recoverable
+
+;----------------------------------------------------------------------------
+; Structure Type 27: Equates used in Cooling Device Structure
+;----------------------------------------------------------------------------
+; Device Type and Status (a byte value) Bit7-5 = Status (enumerated value)
+; Bit4-0 = Device Type (enumerated value)
+; Device Type
+; Equate name Value Meaning
+CDT_OTHER equ 01h ; Other
+CDT_UNKNOWN equ 02h ; Unknown
+CDT_FAN equ 03h ; Fan
+CDT_CENTRIFUGAL_BLOWER equ 04h ; Centrifugal Blower
+CDT_CHIP_FAN equ 05h ; Chip Fan
+CDT_CABINET_FAN equ 06h ; Cabinet Fan
+CDT_POWER_SUPPLY_FAN equ 07h ; Power Supply Fan
+CDT_HEAT_PIPE equ 08h ; Heat Pipe
+CDT_INTEGRATED_FREEZE equ 09h ; Integrated Refrigeration
+CDT_ACTIVE_COOLING equ 14h ; Active Cooling
+CDT_PASSIVE_COOLING equ 15h ; Passive Cooling
+
+;----------------------------------------------------------------------------
+; Status
+; Equate name Value Meaning
+CDS_OTHER equ 020h ; Other
+CDS_UNKNOWN equ 040h ; Unknown
+CDS_OK equ 060h ; OK
+CDS_NON_CRITICAL equ 080h ; Non-critical
+CDS_CRITICAL equ 0A0h ; Critical
+CDS_NON_RECOVERABLE equ 0C0h ; Non-recoverable
+
+;----------------------------------------------------------------------------
+; Structure Type 28: Equates used in Temperature Probe Structure
+;----------------------------------------------------------------------------
+; This structure uses the same equates as Voltage Probe Structure to
+; indicate corresponding probe location and status.
+
+;----------------------------------------------------------------------------
+; Structure Type 29: Equates used in Electrical Current Probe Structure
+;----------------------------------------------------------------------------
+; This structure uses the same equates as Voltage Probe Structure to
+; indicate corresponding probe location and status.
+
+;----------------------------------------------------------------------------
+; Structure Type 30: Equates used in Out-of-Band Remote Access Structure
+;----------------------------------------------------------------------------
+; Connections Bit7-2 = Reserved
+; Bit-1 = Outbound Connection 0/1 -> disabled/enabled
+; Bit-0 = Inbound Connection 0/1 -> disabled/enabled
+; Equate name Value Meaning
+; 76543210
+INBOUND_CONNECTION_ENABLED equ 00000001b; inbound connection
+OUTBOUND_CONNECTION_ENABLED equ 00000010b; outbound connection
+
+;----------------------------------------------------------------------------
+; Structure Type 34: Equates used in MANAGEMENT DEVICE Structure
+;----------------------------------------------------------------------------
+; Management Device Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+MGMT_DEVICE_TYPE_OTHER equ 01h ; Other
+MGMT_DEVICE_TYPE_UNKNOWN equ 02h ; Unknown
+MGMT_DEVICE_TYPE_LM75 equ 03h ; LM75
+MGMT_DEVICE_TYPE_LM78 equ 04h ; LM78
+MGMT_DEVICE_TYPE_LM79 equ 05h ; LM79
+MGMT_DEVICE_TYPE_LM80 equ 06h ; LM80
+MGMT_DEVICE_TYPE_LM81 equ 07h ; LM81
+MGMT_DEVICE_TYPE_ADM9240 equ 08h ; ADM9240
+MGMT_DEVICE_TYPE_DS1780 equ 09h ; DS1780
+MGMT_DEVICE_TYPE_MAXIM1617 equ 0Ah ; MAXIM1617
+MGMT_DEVICE_TYPE_GL518SM equ 0Bh ; GL518SM
+MGMT_DEVICE_TYPE_W83781D equ 0Ch ; W83781D
+MGMT_DEVICE_TYPE_HT82H791 equ 0Dh ; HT82H791
+
+;----------------------------------------------------------------------------
+; Management Device Address Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+MGMT_DEVICE_ADDRESS_TYPE_OTHER equ 01h ; Other
+MGMT_DEVICE_ADDRESS_TYPE_UNKNOWN equ 02h ; Unknown
+MGMT_DEVICE_ADDRESS_TYPE_IO_PORT equ 03h ; IO Port
+MGMT_DEVICE_ADDRESS_TYPE_MEMORY equ 04h ; Memory Mapped
+MGMT_DEVICE_ADDRESS_TYPE_SMBUS equ 05h ; SMBUS
+
+;----------------------------------------------------------------------------
+; Structure Type 37: Equates used in MEMORY CHANNEL Structure
+;----------------------------------------------------------------------------
+; Memory Channel Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+MEMORY_CHANNEL_TYPE_OTHER equ 01h ; Other
+MEMORY_CHANNEL_TYPE_UNKNOWN equ 02h ; Unknown
+MEMORY_CHANNEL_TYPE_RAMBUS equ 03h ; RamBus
+MEMORY_CHANNEL_TYPE_SYNCLINK equ 04h ; SyncLink
+
+;----------------------------------------------------------------------------
+; Structure Type 38: Equates used in IPMI DEVICE INFORMATION Structure
+;----------------------------------------------------------------------------
+; Memory Channel Type equates (an enumerated BYTE value)
+; Equate Name Value Meaning
+IPMI_DEVICE_INTERFACE_TYPE_UNKNOWN equ 00h ; Unknown
+IPMI_DEVICE_INTERFACE_TYPE_KCS equ 01h ; KCS: Keyboard Controller Style
+IPMI_DEVICE_INTERFACE_TYPE_SMIC equ 02h ; SMIC: Server Management Interface Chip
+IPMI_DEVICE_INTERFACE_TYPE_BT equ 03h ; BT: Block Transfer
+
+;----------------------------------------------------------------------------
+; Structure Type 38: No equates used in SYSTEM POWER SUPPLY Structure
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; SMBIOS BIOS related error codes
+SMBIOS_ERROR_CODE_START equ 08300h
+ERRSMBIOS_NOT_ENOUGH_SPACE_IN_F000 equ (SMBIOS_ERROR_CODE_START + 1)
+
+;----------------------------------------------------------------------------
+;End of Inclusion guard
+endif ;_SMB_EQU_
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2013, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SMBDATA.MAC b/Board/EM/SMBIOS/SMBiosStaticData/SMBDATA.MAC
new file mode 100644
index 0000000..4249c0f
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SMBDATA.MAC
@@ -0,0 +1,2708 @@
+ ECHO --Including: SMBDATA.MAC
+
+;----------------------------------------------------------------------------
+; DO NOT CHANGE ANY STRUCTURE DEFINITION UNLESS OTHERWISE SPECIFIED
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMBDATA.MAC 39 4/07/16 5:54p Davidd $
+;
+; $Revision: 39 $
+;
+; $Date: 4/07/16 5:54p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMBDATA.MAC $
+;
+; 39 4/07/16 5:54p Davidd
+; [TAG] EIP231162
+; [Category] New Feature
+; [Description] Merge Aptio V Smbios -09 changes for Aptio 4
+; 4.6.5.5_SMBIOS_40 release
+; [Files] Smbios.sdl
+; SmbiosDynamicData.h
+; Smbios.h
+; SmbiosStaticData.sdl
+; SmbiosStaticData.asm
+; SmbData.mac
+; SmbMacro.aid
+; SmbDesc.def
+;
+; 38 2/17/15 1:08p Davidd
+; [TAG] EIP205509
+; [Category] Improvement
+; [Description] Merge Aptio V Smbios EIP193807, 193858, 196901 changes
+; into Aptio 4 Smbios
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbdesc.def
+;
+; 37 11/13/13 3:40p Davidd
+; [TAG] EIP143030
+; [Category] Improvement
+; [Description] Synchronize Aptio 4 Smbios with recent changes on Aptio
+; V Smbios for '4.6.5.1_SMBIOS_36' release
+; [Files] SmbiosStaticData.sdl
+; Smbdesc.def
+; SMBDATA.MAC
+;
+; 36 6/03/13 6:23p Davidd
+; [TAG] EIP125665
+; [Category] New Feature
+; [Description] Request to Support multiple instances of SMBIOS Type 3
+; structure (merge EIP106206 into Aptio 4)
+; [Files] Smbdata.mac
+; SmbiosStaticData.sdl
+; Smbstruc.def
+; Smbios.c
+; SmbiosDMIEditFunc.c
+; Smbios.h
+;
+; 35 5/29/13 12:49p Davidd
+; [TAG] EIP124735
+; [Category] Spec Update
+; [Severity] Normal
+; [Description] SMBIOS 2.8.0 specification support for Aptio 4
+; [Files] Smb.equ
+; Smbdata.mac
+; Smbdesc.def
+; Smbstruc.def
+; Smbios.c
+; Smbios.h
+; SmbiosDynamicData.h
+;
+; 34 11/12/12 10:17a Davidd
+; [TAG] EIP106202
+; [Category] Bug Fix
+; [Severity] Minor
+; [Symptom] 16-bit and 32-bit were display 0
+; [RootCause] Error in CreateBootIntegrityServicesInfo macro
+; [Solution] Corrected error in CreateBootIntegrityServicesInfo macro
+; [Files] Smbdata.mac
+;
+; 33 9/13/12 12:10p Davidd
+; [TAG] EIP99388
+; [Category] Improvement
+; [Description] can not modified SMBIOS type 38 by
+; smbiosstaticdata.sdl
+; [Files] Smbdata.mac
+; Smbdesc.def
+;
+; 32 3/26/12 11:54a Davidd
+; [TAG] EIP84370
+; [Category] New Feature
+; [Description] Flash memory(type 16 and 17) on aptio
+; [Files] Smbdata.mac
+; SmbiosStaticData.asm
+; SmbiosStaticData.sdl
+; Smbios.c
+; Smbios.mak
+; Smbios.h
+;
+; 31 3/12/12 3:06p Davidd
+; [TAG] EIP82983
+; [Category] Improvement
+; [Description] Need Creating Tokens for Type1:UUID/Type11/Typ12/Type22
+; [Files] SmbiosStaticData.sdl
+; Smbdata.mac
+; Smbdesc.def
+;
+; 30 1/17/12 4:50p Davidd
+; [TAG] EIP78264
+; [Category] Improvement
+; [Description] SMBOS Type 2 (Spec 2.7.1) - No multiple type 2 support
+; [Files] Smbios.c
+; Smbios.h
+; Smbdata.mac
+; Smbdesc.def
+; SmbiosStaticData.sdl
+;
+; 29 9/29/11 4:41p Davidd
+; [TAG] EIP68202
+; [Category] NEW FEATURE
+; [Description] Allow Smbios Type 2 Location field and Type 3 SKU
+; Number field
+; to be apdated by dmieditwingui tool
+; [Files] Smbios.c
+; SmbiosDMIEditFunc.c
+; Smbdata.mac
+;
+; 28 4/05/11 11:46a Davidd
+; [TAG] EIP55656
+; [Category] Improvement
+; [Description] Provide generic support in SMBIOS module to include
+; build time EC version
+; [Files] SmbiosBoard.c
+; Smbdata.mac
+; Smbios.sdl
+;
+; 27 2/09/11 10:27a Davidd
+; [TAG] EIP53081
+; [Category] Bug Fix
+; [Severity] Minor
+; [Symptom] Smbios Management Device (type 34) must be enabled in
+; order to
+; see System Power Supply (type 39)
+; [RootCause] Macro to create System Power Supply structure (type 39)
+; was grouped inside macro to create Smbios Management
+; Device
+; (type 34)
+; [Solution] Seperated Type 39 macro from 34.
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbmacro.aid
+; Smbdesc.def
+;
+; 26 12/14/10 11:15a Davidd
+; [TAG] EIP49944
+; [Category] Improvement
+; [Description] Smbios enhancements for incorporating no strings
+; [Files] Smbdata.mac
+;
+; 25 12/10/10 3:06p Davidd
+; [TAG] EIP49728
+; [Category] BUG FIX
+; [Severity] Normal
+; [Symptom] SMBIOS Type 10 Data incorrect
+; [RootCause] Macro to create Type 10 structure is incorrect.
+; [Solution] Modified macro to create one Type 10 Entry containing
+; the number of ONBOARD_DEVICES.
+; [Files]
+; Smbdata.mac
+; Smbios.c
+;
+; 24 12/02/10 12:02p Davidd
+; [TAG] EIP48600
+; [Category] BUG FIX
+; [Severity] Normal
+; [Symptom] With SMBIOS 4.6.1_ALPHA_01.28 eModule, the DMIEDIT.EXE
+; tool would hang and type10 Description String is wrong
+; [RootCause] Recent change in macro used to create Type 10 structure
+; was causing the problem.
+; [Solution] Reverted the change (for Type 10) to previous
+; 4.6.1_ALPHA_01.27 label.
+; [Files] Smbdata.mac
+;
+; 23 10/08/10 8:15p Davidd
+; [TAG] EIP43278
+;
+; [Category] Function Request
+;
+; [Severity] Normal
+;
+; [Description] SMBIOS 2.7 requirement
+;
+; [Files] Include\Protocol\Smbios.h
+; Include\Protocol\SmbiosDynamicData.h
+; Board\EM\SMBIOS\SMBiosStaticData\SmbiosStaticData.sdl
+; Board\EM\SMBIOS\SMBiosStaticData\SMBDATA.MAC
+; Board\EM\SMBIOS\SMBiosStaticData\SMBSTRUC.DEF
+; Board\EM\SMBIOS\SMBiosStaticData\SMBMACRO.AID
+; Board\EM\SMBIOS\SMBiosStaticData\Smbdesc.def
+; Board\EM\SMBIOS\SMBiosStaticData\SMB.EQU
+;
+; 22 8/18/09 8:43a Davidd
+; Change made to increase the handle number at the end of type 39 (System
+; Power Supply)
+;
+; 21 6/02/09 4:44p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 20 5/19/09 11:05a Davidd
+; Corrected CreateOnboardDevicesExtendedInfo macro returning used handle
+; in the next structure (EIP 21149).
+;
+; 19 2/03/09 2:56p Davidd
+;
+; 18 10/23/08 6:31p Davidd
+; More changes for SMBIOS v2.5 and v2.6 support
+;
+; 17 10/13/08 11:16a Davidd
+; Changes made to support SMBIOS v2.5 and v2.6
+;
+; 16 4/04/08 5:12p Davidd
+; Made changes to use SDL token Ax_MEMORY_SOCKETS as number of memory
+; slot for each memory array.
+;
+; 15 2/22/08 10:29a Davidd
+; Simplified the way the number of memory slots for each physical memory
+; array are defined.
+;
+; 14 2/01/08 11:58a Davidd
+; Changes made to support SMBIOS type 17 with multiple memory arrays.
+;
+; 13 11/21/07 10:15a Davidd
+; Modified CreatePortableBatteryInfo to support multiple entries.
+;
+; 12 11/16/07 6:41p Davidd
+; Made changes to support multiple entries for Physical Memory Array
+; Information type 16 and Built-in Pointing Device Information type 21.
+;
+; 11 11/07/07 3:24p Davidd
+; Fixed ROM image build verification problem by setting the BIOS Release
+; Date to "TODAY" field in timestamp.equ instead of the system date.
+;
+; 10 3/29/07 4:55p Davidd
+; Changed the year in the AMI banner.
+;
+; 9 3/21/07 4:07p Michaela
+; made changes to CreateMemoryInfo macro to support multiple
+; memory arrays
+;
+; 8 3/14/07 2:17p Pavell
+; Changes for ITK
+;
+; 7 7/14/06 9:08a Pavell
+;
+; 6 3/01/06 5:04p Davidd
+; Modified loop counters to correctly handle more than one physical
+; memory array.
+;
+; 5 8/10/05 4:07p Davidd
+; In CreateBiosLanguageInfo, changed the current language to 1.
+;
+; 4 7/13/05 5:23p Davidd
+; Added changes to automatically fill in BIOS release date using system
+; date at build time.
+;
+; 3 7/08/05 12:58p Davidd
+; Updated Type 0 structure to use CORE major and minor version from
+; Core.sdl tokens.
+;
+; 2 6/21/05 12:07p Davidd
+; Corrected hanging problem as BIOS Version was changed starting from
+; label "ALPHA-1.00.12".
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+include timestamp.equ
+include token.equ
+
+IFNDEF _smbdata_mac_ ; Start of Inclusion Guard _smbdata_mac_
+_smbdata_mac_ EQU 1
+
+;----------------------------------------------------------------------------
+; Structure Type 0 : BIOS INFORMATION
+;----------------------------------------------------------------------------
+CreateBiosInfo macro xHandle:REQ
+
+ LOCAL xBVersion
+
+ MKF_CMA = MKF_CORE_MAJOR_VERSION
+ MKF_CMI = MKF_CORE_MINOR_VERSION
+ IFDEF MKF_ITK_SUPPORT
+ IF MKF_ITK_SUPPORT EQ -1
+ xBVersionNoTime TEXTEQU @CATSTR (%MKF_TWO_LETTER_PRODUCT_NAME, %MKF_PRODUCT_CHIPSET_FAMILY, %MKF_PRODUCT_BOARD_REVISION, %MKF_PRODUCT_BOARD_SUB_REVISION, <.>, %MKF_THREE_LETTER_OEMID, <.>, %MKF_PRODUCT_BUILD_NUMBER)
+ xBVersion TEXTEQU @CATSTR(xBVersionNoTime, <.>, %FOUR_DIGIT_YEAR, <.>, %TWO_DIGIT_MONTH, %TWO_DIGIT_DAY, <.>, %TWO_DIGIT_HOUR, %TWO_DIGIT_MINUTE)
+ ELSE
+ xBVersion TEXTEQU @CATSTR (%MKF_CORE_MAJOR_VERSION, <.>, %MKF_CORE_MINOR_VERSION, <.>, %MKF_CORE_REVISION)
+ ENDIF
+ ENDIF
+ IFNDEF MKF_ITK_SUPPORT
+ xBVersion TEXTEQU @CATSTR (%MKF_CORE_MAJOR_VERSION, <.>, %MKF_CORE_MINOR_VERSION, <.>, %MKF_CORE_REVISION)
+ ENDIF
+ BIOSINFO_STRUC {\
+ { 0, sizeof(BIOSINFO_STRUC), xHandle },
+ 1,
+ 2,
+ MKF_BI_BIOS_START_ADDR,
+ 3,
+ BIOS_SIZE_IN_KB(MKF_BIOS_SIZE),
+ BIOS_CHAR(),BIOS_CHAR1(),EXT_CHAR(),EXT_CHAR2(),
+ MKF_CMA,MKF_CMI,MKF_ECMA,MKF_ECMI\
+ }
+ SCAN_PUT_STR %MKF_BIOS_VENDOR
+ PUT_STR %xBVersion
+ SCAN_PUT_STR %TODAY
+ TERMINATOR
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 1 : SYSTEM INFORMATION
+;----------------------------------------------------------------------------
+CreateSysInfo macro xHandle:REQ
+
+ LOCAL length, strnum, nMN, nPN, nVE, nSN, nSK, nFA
+
+ xHandle = xHandle + 1
+ length = sizeof SYSINFO_STRUC
+ strnum = 1
+
+ IFNDEF MKF_SYSTEM_MANUFACTURER
+ nMN = 0
+ ELSE
+ nMN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_SYSTEM_PRODUCT_NAME
+ nPN = 0
+ ELSE
+ nPN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_SYSTEM_VERSION
+ nVE = 0
+ ELSE
+ nVE = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_SYSTEM_SERIAL_NUMBER
+ nSN = 0
+ ELSE
+ nSN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_SYSTEM_SKU_NUMBER
+ nSK = 0
+ ELSE
+ nSK = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_SYSTEM_FAMILY
+ nFA = 0
+ ELSE
+ nFA = strnum
+ ENDIF
+
+ SYSINFO_STRUC {\
+ {1, length, xHandle},
+ nMN,
+ nPN,
+ nVE,
+ nSN,
+ MKF_SMBIOS_UUID,
+ MKF_SYSTEM_WAKEUP_TYPE,
+ nSK,
+ nFA\
+ }
+ IFDEF MKF_SYSTEM_MANUFACTURER
+ SCAN_PUT_STR %MKF_SYSTEM_MANUFACTURER
+ ENDIF
+ IFDEF MKF_SYSTEM_PRODUCT_NAME
+ SCAN_PUT_STR %MKF_SYSTEM_PRODUCT_NAME
+ ENDIF
+ IFDEF MKF_SYSTEM_VERSION
+ SCAN_PUT_STR %MKF_SYSTEM_VERSION
+ ENDIF
+ IFDEF MKF_SYSTEM_SERIAL_NUMBER
+ SCAN_PUT_STR %MKF_SYSTEM_SERIAL_NUMBER
+ ENDIF
+ IFDEF MKF_SYSTEM_SKU_NUMBER
+ SCAN_PUT_STR %MKF_SYSTEM_SKU_NUMBER
+ ENDIF
+ IFDEF MKF_SYSTEM_FAMILY
+ SCAN_PUT_STR %MKF_SYSTEM_FAMILY
+ ENDIF
+ TERMINATOR
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 2 : BASEBOARD INFORMATION
+;----------------------------------------------------------------------------
+CreateBaseBoardInfo macro xHandle:REQ
+
+ LOCAL length, chndl, sMN, sPR, sVE, sSN, sAT, sLC, sTemp, vFF, vBT
+ LOCAL strnum, nBB, nMN, nPR, nVE, nSN, nAT, nLC
+
+ chndl = xHandle + 1 + MKF_NUMBER_OF_BASEBOARDS
+
+ IF MKF_BASE_BOARD_INFO
+ length = sizeof BASEBOARD_INFO_STRUC
+
+ IF MKF_NUMBER_OF_BASEBOARDS EQ 1
+ xHandle = xHandle + 1
+ strnum = 1
+
+ IFNDEF MKF_BASE_BOARD_MANUFACTURER
+ nMN = 0
+ ELSE
+ nMN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_BASE_BOARD_PRODUCT_NAME
+ nPR = 0
+ ELSE
+ nPR = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_BASE_BOARD_VERSION
+ nVE = 0
+ ELSE
+ nVE = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_BASE_BOARD_SERIAL_NUMBER
+ nSN = 0
+ ELSE
+ nSN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_BB_ASSET_TAG
+ nAT = 0
+ ELSE
+ nAT = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ IFNDEF MKF_BB_LOC_IN_CHASSIS
+ nLC = 0
+ ELSE
+ nLC = strnum
+ ENDIF
+
+ BASEBOARD_INFO_STRUC {\
+ {2, length, xHandle},
+ nMN,
+ nPR,
+ nVE,
+ nSN,
+ nAT,
+ BASE_BOARD_FEATURE_FLAGS(),
+ nLC,
+ chndl,
+ MKF_BB_BOARD_TYPE,
+ 00h\
+ }
+ IFDEF MKF_BASE_BOARD_MANUFACTURER
+ SCAN_PUT_STR %MKF_BASE_BOARD_MANUFACTURER
+ ENDIF
+ IFDEF MKF_BASE_BOARD_PRODUCT_NAME
+ SCAN_PUT_STR %MKF_BASE_BOARD_PRODUCT_NAME
+ ENDIF
+ IFDEF MKF_BASE_BOARD_VERSION
+ SCAN_PUT_STR %MKF_BASE_BOARD_VERSION
+ ENDIF
+ IFDEF MKF_BASE_BOARD_SERIAL_NUMBER
+ SCAN_PUT_STR %MKF_BASE_BOARD_SERIAL_NUMBER
+ ENDIF
+ IFDEF MKF_BB_ASSET_TAG
+ SCAN_PUT_STR %MKF_BB_ASSET_TAG
+ ENDIF
+ IFDEF MKF_BB_LOC_IN_CHASSIS
+ SCAN_PUT_STR %MKF_BB_LOC_IN_CHASSIS
+ ENDIF
+ TERMINATOR
+ ELSE
+ nBB = 1
+ REPEAT MKF_NUMBER_OF_BASEBOARDS
+ xHandle = xHandle + 1
+ strnum = 1
+
+ sTemp TEXTEQU @CATSTR(<BASEBOARD_FEATURE_FLAG_>, <%nBB>)
+ vFF = @CATSTR(%sTemp)
+ sTemp TEXTEQU @CATSTR(<BASEBOARD_TYPE_>, <%nBB>)
+ vBT = @CATSTR(%sTemp)
+
+ sMN TEXTEQU @CATSTR(<BASEBOARD_MANUFACTURER_>, <%nBB>)
+; sMN will be set to "BASEBOARD_MANUFACTURER_X" if string is not defined,
+; therefore if we search the string for "BASEBOARD_MANUFACTURER_" and it
+; returns a non-zero value, it means the string is not defined.
+ IF @INSTR(1, %sMN, <BASEBOARD_MANUFACTURER_>) NE 0
+ nMN = 0
+ ELSE
+ nMN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ sPR TEXTEQU @CATSTR(<BASEBOARD_PRODUCT_>, <%nBB>)
+ IF @INSTR(1, %sPR, <BASEBOARD_PRODUCT_>) NE 0
+ nPR = 0
+ ELSE
+ nPR = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ sVE TEXTEQU @CATSTR(<BASEBOARD_VERSION_>, <%nBB>)
+ IF @INSTR(1, %sVE, <BASEBOARD_VERSION_>) NE 0
+ nVE = 0
+ ELSE
+ nVE = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ sSN TEXTEQU @CATSTR(<BASEBOARD_SERIAL_NUMBER_>, <%nBB>)
+ IF @INSTR(1, %sSN, <BASEBOARD_SERIAL_NUMBER_>) NE 0
+ nSN = 0
+ ELSE
+ nSN = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ sAT TEXTEQU @CATSTR(<BASEBOARD_ASSET_TAG_>, <%nBB>)
+ IF @INSTR(1, %sAT, <BASEBOARD_ASSET_TAG_>) NE 0
+ nAT = 0
+ ELSE
+ nAT = strnum
+ strnum = strnum + 1
+ ENDIF
+
+ sLC TEXTEQU @CATSTR(<BASEBOARD_LOCATION_>, <%nBB>)
+ IF @INSTR(1, %sLC, <BASEBOARD_LOCATION_>) NE 0
+ nLC = 0
+ ELSE
+ nLC = strnum
+ ENDIF
+
+ BASEBOARD_INFO_STRUC {\
+ {2, length, xHandle},
+ nMN,
+ nPR,
+ nVE,
+ nSN,
+ nAT,
+ vFF,
+ nLC,
+ chndl,
+ vBT,
+ 00h\
+ }
+ IF nMN NE 0
+ SCAN_PUT_STR %sMN
+ ENDIF
+ IF nPR
+ SCAN_PUT_STR %sPR
+ ENDIF
+ IF nVE
+ SCAN_PUT_STR %sVE
+ ENDIF
+ IF nSN
+ SCAN_PUT_STR %sSN
+ ENDIF
+ IF nAT
+ SCAN_PUT_STR %sAT
+ ENDIF
+ IF nLC
+ SCAN_PUT_STR %sLC
+ ENDIF
+ nBB = nBB + 1
+ TERMINATOR
+ ENDM
+ ENDIF ; MKF_NUMBER_OF_BASEBOARDS
+ ENDIF ; MKF_BASE_BOARD_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 3 : SYSTEM ENCLOSURE OR CHASSIS
+;----------------------------------------------------------------------------
+CreateSysChassisInfo macro xHandle:REQ
+
+ LOCAL length, LockPresence, xSysHt, xNoPwrCords, xNoContEle, xContEleRcrdLen
+ LOCAL xCt, xCbs, xPss, xTs, xSs, xOem, xContElement
+
+ LOCAL strnum, MFG, sMfg, vCl, VER, sVer, SN, sSn, ATN, sAtn, SKU, sSku, nSC, sTemp
+
+ LockPresence = 0
+
+ IF MKF_SYS_CHASSIS_INFO
+ nSC = 1
+ REPEAT MKF_NUMBER_OF_SYSTEM_CHASSIS
+ xHandle = xHandle + 1
+ strnum = 1
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_MANUFACTURER_>, <%nSC>)
+ IF @INSTR(1, %sTemp, <MKF_SYS_CHASSIS_MANUFACTURER_>) NE 0
+ MFG = 0
+ ELSE
+ MFG = strnum
+ strnum = strnum + 1
+ sMfg TEXTEQU @CATSTR(%sTemp)
+ ENDIF
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_LOCK_>, <%nSC>)
+ vCl TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_TYPE_>, <%nSC>)
+ xCt TEXTEQU @CATSTR(%sTemp)
+ xCt TEXTEQU xCt OR vCl
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_VERSION_>, <%nSC>)
+ IF @INSTR(1, %sTemp, <MKF_SYS_CHASSIS_VERSION_>) NE 0
+ VER = 0
+ ELSE
+ VER = strnum
+ strnum = strnum + 1
+ sVer TEXTEQU @CATSTR(%sTemp)
+ ENDIF
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_SERIAL_NUM_>, <%nSC>)
+ IF @INSTR(1, %sTemp, <MKF_SYS_CHASSIS_SERIAL_NUM_>) NE 0
+ SN = 0
+ ELSE
+ SN = strnum
+ strnum = strnum + 1
+ sSn TEXTEQU @CATSTR(%sTemp)
+ ENDIF
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_ASSET_TAG_NUM_>, <%nSC>)
+ IF @INSTR(1, %sTemp, <MKF_SYS_CHASSIS_ASSET_TAG_NUM_>) NE 0
+ ATN = 0
+ ELSE
+ ATN = strnum
+ strnum = strnum + 1
+ sAtn TEXTEQU @CATSTR(%sTemp)
+ ENDIF
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_BOOT_STATE_>, <%nSC>)
+ xCbs TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_PWR_SUPPLY_STATE_>, <%nSC>)
+ xPss TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_THERMAL_STATE_>, <%nSC>)
+ xTs TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_SECURE_STATE_>, <%nSC>)
+ xSs TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_OEM_>, <%nSC>)
+ xOem TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_HEIGHT_>, <%nSC>)
+ xSysHt TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_NO_PWR_CORDS_>, <%nSC>)
+ xNoPwrCords TEXTEQU @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_ELEMENT_COUNT_>, <%nSC>)
+ xNoContEle = @CATSTR(%sTemp)
+
+ sTemp TEXTEQU @CATSTR(<MKF_ELEMENT_LEN_>, <%nSC>)
+ xContEleRcrdLen = @CATSTR(%sTemp)
+
+ xContElement TEXTEQU @CATSTR(<MKF_CONT_ELEMENT_>, <%nSC>)
+ xContElement TEXTEQU @CATSTR(%xContElement)
+
+ sTemp TEXTEQU @CATSTR(<MKF_SYS_CHASSIS_SKU_NUMBER_>, <%nSC>)
+ IF @INSTR(1, %sTemp, <MKF_SYS_CHASSIS_SKU_NUMBER_>) NE 0
+ SKU = 0
+ ELSE
+ SKU = strnum
+ sSku TEXTEQU @CATSTR(%sTemp)
+ ENDIF
+
+ IF (xNoContEle * xContEleRcrdLen) EQ 0
+ length = sizeof SYSENC_STRUC
+ SYSENC_STRUC {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ SKU\
+ }
+ ELSEIF nSC EQ 1
+ length = sizeof SYSENC_STRUC_1
+ SYSENC_STRUC_1 {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ xContElement,
+ SKU\
+ }
+ ELSEIF nSC EQ 2
+ length = sizeof SYSENC_STRUC_2
+ SYSENC_STRUC_2 {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ xContElement,
+ SKU\
+ }
+ ELSEIF nSC EQ 3
+ length = sizeof SYSENC_STRUC_3
+ SYSENC_STRUC_3 {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ xContElement,
+ SKU\
+ }
+ ELSEIF nSC EQ 4
+ length = sizeof SYSENC_STRUC_4
+ SYSENC_STRUC_4 {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ xContElement,
+ SKU\
+ }
+ ELSEIF nSC EQ 5
+ length = sizeof SYSENC_STRUC_5
+ SYSENC_STRUC_5 {\
+ {3, length, xHandle},
+ MFG,xCt,VER,SN,ATN,
+ xCbs,xPss,xTs,xSs,xOem,
+ xSysHt,xNoPwrCords,
+ xNoContEle,
+ xContEleRcrdLen,
+ xContElement,
+ SKU\
+ }
+ ENDIF
+
+ IF MFG NE 0
+ SCAN_PUT_STR %sMfg
+ ENDIF
+ IF VER NE 0
+ SCAN_PUT_STR %sVer
+ ENDIF
+ IF SN NE 0
+ SCAN_PUT_STR %sSn
+ ENDIF
+ IF ATN NE 0
+ SCAN_PUT_STR %sAtn
+ ENDIF
+ IF SKU NE 0
+ SCAN_PUT_STR %sSku
+ ENDIF
+ TERMINATOR
+ nSC = nSC + 1
+ ENDM
+ ENDIF ; MKF_SYS_CHASSIS_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 4 : PROCESSOR INFORMATION
+;----------------------------------------------------------------------------
+CreateProcessorInfo macro xHandle:REQ
+
+ LOCAL length, xSi, xSv, rC, xN, xPT, xPF, xPS, xPA, xPP, xPF2
+ LOCAL strnum, nSN, nAT, nPN
+
+ xL1 = 0FFFFh
+ xL2 = 0FFFFh
+ xL3 = 0FFFFh
+ xVt = 0
+ xMs = 0
+ xUg = 0
+ length = sizeof PROC_STRUC
+
+ IF MKF_PROCESSOR_INFO
+ rC = 1
+ REPEAT MKF_NO_OF_PROCESSOR_SOCKETS
+ xHandle = xHandle + 1
+
+ IF MKF_NUMBER_OF_PROC_CACHE GT 0
+ xL1 = xHandle + 1
+ ENDIF
+ IF MKF_NUMBER_OF_PROC_CACHE GT 1
+ xL2 = xL1 + 1
+ ENDIF
+ IF MKF_NUMBER_OF_PROC_CACHE GT 2
+ xL3 = xL2 + 1
+ ENDIF
+
+ xSd TEXTEQU @CATSTR(<PROC_SOC_DESIG_>, <%rC>)
+ xPT TEXTEQU @CATSTR(<PROC_TYPE_>, <%rC>)
+ xPF TEXTEQU @CATSTR(<PROC_FAMILY_>, <%rC>)
+ xSv TEXTEQU @CATSTR(<PROC_VOLTAGE_>, <%rC>)
+ xSs TEXTEQU @CATSTR(<PROC_MAX_SPEED_>, <%rC>)
+ xSu TEXTEQU @CATSTR(<PROC_UPGRADE_>, <%rC>)
+ xPS TEXTEQU @CATSTR(<PROC_SERIAL_NO_>, <%rC>)
+ xPA TEXTEQU @CATSTR(<PROC_ASSET_TAG_>, <%rC>)
+ xPP TEXTEQU @CATSTR(<PROC_PART_NO_>, <%rC>)
+ xPF2 TEXTEQU @CATSTR(<PROC_FAMILY_2_>, <%rC>)
+
+ strnum = 4
+
+ nSN = @SIZESTR(%xPS)
+ IF nSN NE 0
+ nSN = strnum
+ strnum = strnum + 1
+ ENDIF
+ nAT = @SIZESTR(%xPA)
+ IF nAT NE 0
+ nAT = strnum
+ strnum = strnum + 1
+ ENDIF
+ nPN = @SIZESTR(%xPP)
+ IF nPN NE 0
+ nPN = strnum
+ ENDIF
+
+ PROC_STRUC {\
+ {4,length,xHandle},
+ 01h,xPT,xPF,
+ 02h,0,
+ 03h,
+ @PROC_VOLT(%xSv),
+ 0,
+ xSs,
+ 0,41h,
+ xSu,
+ xL1,xL2,xL3,
+ nSN,nAT,nPN,
+ 1,1,1,
+ 04h,xPF2}
+ SCAN_PUT_STR %xSd
+ BYTE " ",0
+ BYTE " ",0
+ IF nSN NE 0
+ SCAN_PUT_STR %xPS
+ ENDIF
+ IF nAT NE 0
+ SCAN_PUT_STR %xPA
+ ENDIF
+ IF nPN NE 0
+ SCAN_PUT_STR %xPP
+ ENDIF
+ TERMINATOR
+ rC = rC+1
+ xHandle = CreateProcCacheInfo(xHandle)
+ ENDM
+ ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 5 : MEMORY CONTROLLER INFORMATION
+;----------------------------------------------------------------------------
+CreateMemCtrlInfo macro xHandle:REQ, hStart:REQ
+
+ LOCAL length, hMemMod, xEDD
+
+ IF MKF_MEM_CTRL_INFO
+ xHandle = xHandle + 1
+ hMemMod = hStart
+ length = (15 + (2 * MKF_A1_MEMORY_SOCKETS) + 1)
+
+ xEDD = MKF_MEM_CTRL_EDD
+ xMs = MKF_MAX_MEM_MODULE_SIZE
+ MEMCTRL_STRUC {\
+ {5, length, xHandle},
+ xEDD,
+ MEM_CTRL_ECC(),
+ MKF_MEM_CTRL_INTRLV,
+ MKF_MEM_CTRL_INTRLV,
+ MEM_SIZE_IN_MB(xMs),
+ MEM_CTRL_SPEED(),
+ SUPPORTED_MEM_TYPE(),
+ MEM_MOD_VOLTAGE(),
+ MKF_A1_MEMORY_SOCKETS\
+ }
+ REPEAT MKF_A1_MEMORY_SOCKETS
+ WORD hMemMod
+ hMemMod = hMemMod + 1
+ ENDM
+ BYTE MEM_CTRL_ECC()
+ TERMINATOR ; Memory Controller structure NOT Terminated by NULL
+ TERMINATOR ; Memory Controller structure NOT Terminated by NULL
+ ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 6 : MEMORY MODULE INFORMATION
+;----------------------------------------------------------------------------
+CreateMemModuleInfo macro xHandle:REQ
+
+ LOCAL length, rC, xS, dS, xN, xL, xMs
+
+ length = 0CH
+IF MKF_MEM_MODULE_INFO
+ rC = 1
+ REPEAT MKF_A1_MEMORY_SOCKETS
+ xHandle = xHandle + 1
+
+ DMIHDR_STRUC {6, length, xHandle}
+ BYTE 1
+
+ xS TEXTEQU @CATSTR(<MEMORY_INFO_>, <%rC>)
+ xN = @INSTR(1, %xS, <,>)
+ dS TEXTEQU @SUBSTR(%xS, 1, (xN-1))
+ xL = @SIZESTR(%xS)
+ xL = xL -xN
+ xS TEXTEQU @SUBSTR(%xS, (xN+1), xL)
+ xMs = @MEMORY_INFO(%xS)
+ xS TEXTEQU @CATSTR(<MEMORY_TYPE_>, <%rC>)
+ @MEMORY_TYPE %xS
+ WORD xMs
+ xS TEXTEQU @CATSTR(<MEMORY_ERR_STATUS_>, <%rC>)
+ @MEMORY_ERR_STATUS %xS
+ SCAN_PUT_STR %dS
+ TERMINATOR
+ rC = rC+1
+ ENDM
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 7: CACHE INFORMATION (INTERNAL)
+;----------------------------------------------------------------------------
+CreateProcCacheInfo macro xHandle:REQ
+
+ LOCAL length, rC, xS, dS, xN, xL
+
+ length = sizeof CACHE_INFO_STRUC
+
+ rC = 1
+ REPEAT MKF_NUMBER_OF_PROC_CACHE
+ xHandle = xHandle + 1
+
+ DMIHDR_STRUC {7, length, xHandle}
+ BYTE 1
+ xS TEXTEQU @CATSTR(<PROC_CACHE_CFG_L>, <%rC>)
+ xN = @INSTR(1, %xS, <,>)
+ dS TEXTEQU @SUBSTR(%xS, 1, (xN-1))
+ xL = @SIZESTR(%xS)
+ xL = xL -xN
+ xS TEXTEQU @SUBSTR(%xS, (xN+1), xL)
+ @CACHE_CFG %xS
+ xS TEXTEQU @CATSTR(<PROC_CACHE_INFO_L>, <%rC>)
+ @CACHE_INFO %xS
+ xS TEXTEQU @CATSTR(<PROC_CACHE_CHAR_L>, <%rC>)
+ @CACHE_CHAR %xS
+ SCAN_PUT_STR %dS
+ TERMINATOR
+ rC = rC+1
+ ENDM
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 7: CACHE INFORMATION (EXTERNAL)
+;----------------------------------------------------------------------------
+CreateExternalCacheInfo macro xHandle:REQ
+
+ LOCAL length, rC, xS, dS, xN, xL
+
+IF MKF_EXTERNAL_CACHE_INFORMATION
+ xHandle = xHandle + 1
+ length = sizeof CACHE_INFO_STRUC
+
+ DMIHDR_STRUC {7, length, xHandle}
+ BYTE 1
+ xS TEXTEQU <EXTERNAL_CACHE_CFG>
+ xN = @INSTR(1, %xS, <,>)
+ dS TEXTEQU @SUBSTR(%xS, 1, (xN-1))
+ xL = @SIZESTR(%xS)
+ xL = xL -xN
+ xS TEXTEQU @SUBSTR(%xS, (xN+1), xL)
+ @EXT_CACHE_CFG %xS
+ xS TEXTEQU <EXTERNAL_CACHE_INFO>
+ @CACHE_INFO %xS
+ xS TEXTEQU <EXTERNAL_CACHE_CHAR>
+ @CACHE_CHAR %xS
+ SCAN_PUT_STR %dS
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 8 : PORT CONNECTOR INFORMATION
+;----------------------------------------------------------------------------
+CreatePortConnectorInfo macro xHandle:REQ
+
+ LOCAL length, iS, eS, iP, eP, pT, xC, xN, xS, rC, xLabel
+
+ length = sizeof PORT_CONNECTOR_STRUC
+IF MKF_PORT_CONNECTOR_INFO
+ IF MKF_NUMBER_OF_EXT_PORT_CONNECTORS GT 0
+ rC = 1
+ REPEAT MKF_NUMBER_OF_EXT_PORT_CONNECTORS
+ xHandle = xHandle + 1
+ xN = 1
+
+ DMIHDR_STRUC {8, length, xHandle}
+ xS TEXTEQU @CATSTR(<EXT_CONNECTOR_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ iS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ iP TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ eS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ eP TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ pT TEXTEQU @SUBSTR(%xS, <%xC>, xN)
+ DEFINE_EXT_CONNECTOR %iS, %iP, %eS, %eP, %pT
+ TERMINATOR
+ rC = rC+1
+ ENDM
+ ENDIF
+
+ IF MKF_NUMBER_OF_INT_PORT_CONNECTORS GT 0
+ rC = 1
+ REPEAT MKF_NUMBER_OF_INT_PORT_CONNECTORS
+ xHandle = xHandle + 1
+ xN = 1
+
+ DMIHDR_STRUC {8, length, xHandle}
+ xS TEXTEQU @CATSTR(<INT_CONNECTOR_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ iS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ iP TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ pT TEXTEQU @SUBSTR(%xS, <%xC>, xN)
+ DEFINE_INT_CONNECTOR %iS, %iP, %pT
+ TERMINATOR
+ rC = rC+1
+ ENDM
+ ENDIF
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 9 : SYSTEM SLOT INFORMATION
+;----------------------------------------------------------------------------
+CreateSystemSlotInfo macro xHandle:REQ
+
+ LOCAL length, xS1, xS2, rC, xH, sD, sT, sW, cU, sL, sI, sc1, sc2, xC, xN, xS, xSG, xB, xDF
+
+ length = sizeof SYSTEM_SLOT_INFO_STRUC
+
+IF MKF_SYSTEM_SLOT_INFO
+ IF MKF_NUMBER_OF_SYSTEM_SLOTS GT 0
+ rC = 1
+ REPEAT MKF_NUMBER_OF_SYSTEM_SLOTS
+ xHandle = xHandle + 1
+ xN = 1
+
+ xS1 TEXTEQU @CATSTR(<SEGGRP_BUS_DEV_FUNC_>, <%rC>)
+ xS2 TEXTEQU @CATSTR(<SYSTEM_SLOT_CHAR_>, <%rC>)
+ xS TEXTEQU @CATSTR(<SYSTEM_SLOT_INFO_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ sD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ sT TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ sW TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ cU TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ sL TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ sI TEXTEQU @SUBSTR(%xS, <%xC>, xN)
+ xS TEXTEQU @CATSTR(<SEGGRP_BUS_DEV_FUNC_>, <%rC>)
+ xN = 1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xSG TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xB TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xC = xC+1
+ xDF TEXTEQU @SUBSTR(%xS, <%xC>)
+
+ SYS_SLOT_INFO 9, length, xHandle, sD, sT, sW, cU, sL, sI, xS2, xSG, xB, xDF
+ TERMINATOR
+ rC = rC+1
+ ENDM
+ ENDIF
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 10 : ON BOARD DEVICES INFORMATION
+;----------------------------------------------------------------------------
+CreateOnboardDeviceInfo macro xHandle:REQ
+
+ LOCAL length, xS, xE, xT, xN, rC, xD, xC
+
+IF MKF_ONBOARD_DEVICE_INFO
+ xHandle = xHandle + 1
+ length = 4 + (2 * MKF_NUMBER_OF_ONBOARD_DEVICES)
+ rC = 1
+
+ DMIHDR_STRUC {10, length, xHandle}
+ REPEAT MKF_NUMBER_OF_ONBOARD_DEVICES
+ xN = 1
+ xS TEXTEQU @CATSTR(<ONBOARD_DEVICE_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xE TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xT TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ ONBOARD_DEV_SUB_STRUC {((xE shl 7) OR xT), rC}
+ rC = rC + 1
+ ENDM
+ rC = 1
+ REPEAT MKF_NUMBER_OF_ONBOARD_DEVICES
+ xN = 1
+ xS TEXTEQU @CATSTR(<ONBOARD_DEVICE_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ xD TEXTEQU @SUBSTR(%xS, <%xC>, <%xN>)
+ SCAN_PUT_STR %xD
+ rC = rC + 1
+ ENDM
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 11 : OEM STRINGS INFORMATION
+;----------------------------------------------------------------------------
+CreateOemStringInfo macro xHandle:REQ
+
+ LOCAL xS, rC
+
+IF MKF_OEM_STRING_INFO
+ xHandle = xHandle + 1
+
+ OEM_STRING_STRUC {\
+ {11, 5, xHandle},
+ MKF_NUMBER_OF_OEM_STRINGS\
+ }
+ rC = 1
+ REPEAT MKF_NUMBER_OF_OEM_STRINGS
+ xS TEXTEQU @CATSTR(<OEM_STRING_>, <%rC>)
+ SCAN_PUT_STR %xS
+ rC = rC+1
+ ENDM
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 12 : SYSTEM CONFIGURATION STRINGS INFORMATION
+;----------------------------------------------------------------------------
+CreateSystemConfigOptionInfo macro xHandle:REQ
+
+ LOCAL xS, rC
+
+IF MKF_SYSTEM_CONFIG_OPTION_INFO
+ xHandle = xHandle + 1
+
+ SYSTEM_CONFIG_OPT_STRUC {\
+ {12, 5, xHandle},
+ MKF_NUMBER_OF_SYSTEM_CONFIG_STRINGS\
+ }
+ rC = 1
+ REPEAT MKF_NUMBER_OF_SYSTEM_CONFIG_STRINGS
+ xS TEXTEQU @CATSTR(<SYSTEM_CONFIG_STRING_>, <%rC>)
+ SCAN_PUT_STR %xS
+ rC = rC+1
+ ENDM
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 13: BIOS LANGUAGE INFORMATION
+;----------------------------------------------------------------------------
+CreateBiosLanguageInfo macro xHandle:REQ
+
+ LOCAL xS, rC
+
+IF MKF_BIOS_LANGUAGE_INFO
+ xHandle = xHandle + 1
+
+ BIOS_LANGUAGE_INFO_STRUC {\
+ {13, 16h, xHandle},
+ NUMBER_OF_LANGUAGE_STRINGS,
+ BIOS_LANGUAGE_FORMAT,
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ CURRENT_LANGUAGE\
+ }
+ rC = 1
+ REPEAT NUMBER_OF_LANGUAGE_STRINGS
+ xS TEXTEQU @CATSTR(<LANGUAGE_STRING_>, <%rC>)
+ SCAN_PUT_STR %xS
+ rC = rC+1
+ ENDM
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 14: GROUP ASSOCIATION INFORMATION
+;----------------------------------------------------------------------------
+; NOT IMPLEMENTED NOW
+
+;----------------------------------------------------------------------------
+; Structure Type 15: EVENT LOG INFORMATION
+;----------------------------------------------------------------------------
+CreateEventLogInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 14h
+IF MKF_EVENT_LOG_INFO
+ xHandle = xHandle + 1
+ length = (17h + (NO_OF_SUPPORTED_EVENTS * LENGTH_OF_EACH_LOG_TYPE_DESC))
+
+ EVENTLOG_INFO_STRUC {\
+ {15, length, xHandle},
+ 0004h,
+ 0000h,
+ 0002h,
+ 02h,
+ 00h,
+ 00000000h,
+ 046c046ah,
+ 00h,
+ NO_OF_SUPPORTED_EVENTS,
+ LENGTH_OF_EACH_LOG_TYPE_DESC\
+ }
+ BYTE (NO_OF_SUPPORTED_EVENTS*LENGTH_OF_EACH_LOG_TYPE_DESC) dup(0FFh)
+ TERMINATOR
+ TERMINATOR
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 16: PHYSICAL MEMORY ARRAY INFORMATION
+;----------------------------------------------------------------------------
+CreateMemoryInfo MACRO xHandle:REQ
+
+ LOCAL length, HArrayError, HArray, HMdevice, HMMAddress
+ LOCAL AC, ILoopCount, xN, xNN, xSi, xSv, xTv, xoN
+ LOCAL xNmd, xCt, xMl, xDc, ICurDev, xDn, xDh, xMs, xA, xDw, xFf, xMt, xTd, xAt
+
+ length = sizeof PHY_MEM_ARRAY_STRUC
+ AC = 1
+ REPEAT MKF_NO_OF_PHYSICAL_MEMORY_ARRAY
+ xHandle = xHandle + 1
+ HArray = xHandle
+
+IF MKF_MEMORY_ERROR_INFO
+ HArrayError = xHandle + 1
+ELSE
+ HArrayError = 0FFFEh
+ENDIF
+
+ xA TEXTEQU @CATSTR(<MKF_A>, <%AC>)
+ xMs = @CATSTR(%xA, <_MEMORY_SOCKETS>)
+
+ PHY_MEM_ARRAY_STRUC {\
+ {16, length, xHandle},
+ @CATSTR(<ARRAY_LOC_>,<%AC>),
+ @CATSTR(<ARRAY_USE_>,<%AC>),
+ @CATSTR(<ARRAY_ERROR_COR_>,<%AC>),
+ @CATSTR(<MAX_MEM_CAP_>,<%AC>),
+ HArrayError,
+ xMs,
+ @CATSTR(<EXT_MAX_MEM_CAP_>,<%AC>)\
+ }
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 18: MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_MEMORY_ERROR_INFO
+ length = sizeof MEMORY_ARRAY_ERR_STRUC
+ xHandle = xHandle + 1
+ MEMORY_ARRAY_ERR_STRUC {\
+ {18, length, xHandle},
+ MKF_MEMORY_ERROR_TYPE,
+ MKF_ERROR_GRANULARITY,
+ MKF_ERROR_OPERATION,
+ MKF_VENDOR_SYNDROME,
+ MKF_MEMORY_ARRAY_ERROR_ADDRESS,
+ MKF_DEVICE_ERROR_ADDRESS,
+ MKF_ERROR_RESOLUTION\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF
+
+;----------------------------------------------------------------------------
+; Structure Type 19: MEMORY ARRAY MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+ length = sizeof MEMORY_ARRAY_MAPPED_ADDRESS_STRUC
+ xHandle = xHandle + 1
+ HMMAddress = xHandle
+ MEMORY_ARRAY_MAPPED_ADDRESS_STRUC{\
+ {19, length, xHandle},
+ MKF_ARRAY_MAPPED_STARTING_ADDRESS,
+ MKF_ARRAY_MAPPED_ENDING_ADDRESS,
+ HArray,
+ MKF_PARTITION_WIDTH,
+ 0,
+ 0\
+ }
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 17: MEMORY DEVICE INFORMATION
+;----------------------------------------------------------------------------
+ ILoopCount = 1
+ xA TEXTEQU @CATSTR(<A>, <%AC>)
+
+ REPEAT xMs
+ length = sizeof MEMORY_DEVICE_STRUC
+ xSv TEXTEQU @CATSTR(%xA, <_DEVICE_>, <%ILoopCount>)
+ xDw = @CATSTR(%xA, <_DATAWIDTH>)
+ xFf = @CATSTR(%xA, <_FORMFACTOR>)
+ xMt = @CATSTR(%xA, <_MEMORYTYPE>)
+ xTd = @CATSTR(%xA, <_TYPEDETAIL>)
+ xAt = @CATSTR(%xA, <_ATTRIBUTES>)
+ xHandle = xHandle + 1
+ HMdevice = xHandle
+
+IF MKF_MEMORY_ERROR_INFO
+ HArrayError = xHandle + 1
+ELSE
+ HArrayError = 0FFFEh
+ENDIF
+
+ MEMORY_DEVICE_STRUC {\
+ {17, length, xHandle},
+ HArray,
+ HArrayError,
+ 0ffffh,
+ xDw,
+ 0,
+ xFf,
+ 0,
+ 01h,
+ 02h,
+ xMt,
+ xTd,
+ 0,
+ 03h,
+ 04h,
+ 05h,
+ 06h,
+ xAt,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0\
+ }
+ xoN = 1
+ xN = @INSTR(xoN, %xSv, <,>)
+ xTv TEXTEQU @SUBSTR(%xSv, xoN, (xN-xoN))
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ xN = @INSTR(xoN, %xSv, <,>)
+ xTv TEXTEQU @SUBSTR(%xSv, xoN, (xN-xoN))
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ xN = @INSTR(xoN, %xSv, <,>)
+ xTv TEXTEQU @SUBSTR(%xSv, xoN, (xN-xoN))
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ xN = @INSTR(xoN, %xSv, <,>)
+ xTv TEXTEQU @SUBSTR(%xSv, xoN, (xN-xoN))
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ xN = @INSTR(xoN, %xSv, <,>)
+ xTv TEXTEQU @SUBSTR(%xSv, xoN, (xN-xoN))
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ xTv TEXTEQU @SUBSTR(%xSv, xoN)
+ SCAN_PUT_STR %xTv
+ xoN = xN + 1
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 18: MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_MEMORY_ERROR_INFO
+ length = sizeof MEMORY_ARRAY_ERR_STRUC
+ xHandle = xHandle + 1
+ MEMORY_ARRAY_ERR_STRUC {\
+ {18, length, xHandle},
+ MKF_MEMORY_ERROR_TYPE,
+ MKF_ERROR_GRANULARITY,
+ MKF_ERROR_OPERATION,
+ MKF_VENDOR_SYNDROME,
+ MKF_MEMORY_ARRAY_ERROR_ADDRESS,
+ MKF_DEVICE_ERROR_ADDRESS,
+ MKF_ERROR_RESOLUTION\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF
+
+;----------------------------------------------------------------------------
+; Structure Type 20: MEMORY DEVICE MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_MEMORY_DEVICE_INFO
+ length = sizeof MEMORY_DEVICE_MAPPED_ADDRESS_STRUC
+ xHandle = xHandle + 1
+ MEMORY_DEVICE_MAPPED_ADDRESS_STRUC {\
+ {20, length, xHandle},
+ MKF_MEMORY_DEVICE_STARTING_ADDRESS,
+ MKF_MEMORY_DEVICE_ENDING_ADDRESS,
+ HMdevice,
+ HMMAddress,
+ 01h,
+ 00h,
+ MKF_INTERLEAVE_DATA_DEPTH,
+ 0,
+ 0\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF
+ ILoopCount = ILoopCount + 1
+ ENDM ; xMs
+ AC = AC + 1
+ENDM ; MKF_NO_OF_PHYSICAL_MEMORY_ARRAY
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 37: MEMORY CHANNEL INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+CreateMemoryChannelInfo macro xHandle:REQ
+
+ LOCAL ILoopCount, xNmd, xCt, xMl, sLen
+
+IF MKF_MEMORY_CHANNEL_INFO
+ ILoopCount = 1
+ REPEAT MKF_NUMBER_OF_MEMORY_CHANNELS
+ xHandle = xHandle + 1
+
+ xNmd = @CATSTR (<NUMBER_OF_MEMORY_DEVICES_IN_CHANNEL_>, <%ILoopCount>)
+ xCt = @CATSTR (<CHANNEL_>, <%ILoopCount>, <_TYPE>)
+ xMl = @CATSTR (<MAX_CHANNEL_>, <%ILoopCount>, <_LOAD>)
+ sLen = 7 + 3 * xNmd
+ MEMORY_CHANNEL_STRUC {\
+ {37, sLen, xHandle},
+ xCt,
+ xMl,
+ xNmd\
+ }
+
+ REPEAT xNmd
+ db 1
+ dw 0
+ ENDM ; xNmd
+
+ TERMINATOR
+ TERMINATOR
+ ILoopCount = ILoopCount + 1
+ ENDM ; MKF_NUMBER_OF_MEMORY_CHANNELS
+ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 16: SYSTEM FLASH MEMORY ARRAY INFORMATION
+;----------------------------------------------------------------------------
+CreateFlashMemoryInfo MACRO xHandle:REQ
+
+LOCAL FMArray,FMdevice,FMMAddress
+
+IF MKF_FLASH_MEMORY_ARRAY_INFO
+xHandle = xHandle + 1
+FMArray = xHandle
+PHY_MEM_ARRAY_STRUC {\
+{16, sizeof(PHY_MEM_ARRAY_STRUC), xHandle},
+03h,
+05h,
+03h,
+(MKF_BIOS_SIZE/400h),
+0FFFEh,
+01h,
+00h\
+}
+TERMINATOR
+TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 19: MEMORY ARRAY MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+xHandle = xHandle + 1
+FMMAddress = xHandle
+MEMORY_ARRAY_MAPPED_ADDRESS_STRUC{\
+{19, sizeof(MEMORY_ARRAY_MAPPED_ADDRESS_STRUC), xHandle},
+(0FFFFFFFFh - MKF_BIOS_SIZE + 1) SHR 10,
+0FFFFFFFFh SHR 10,
+FMArray,
+01h, 0, 0\
+}
+TERMINATOR
+TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 17: MEMORY DEVICE INFORMATION
+;----------------------------------------------------------------------------
+xHandle = xHandle + 1
+FMdevice = xHandle
+MEMORY_DEVICE_STRUC {\
+{17, sizeof(MEMORY_DEVICE_STRUC), xHandle},
+FMArray,
+0FFFEh,
+08h,
+08h,
+(MKF_BIOS_SIZE/400h) OR 8000h,
+01h,
+00h,
+01h,
+02h,
+09h,
+1000h,
+00h,
+03h,
+04h,
+05h,
+06h,
+00h,
+00h,
+00h,
+00h,
+00h,
+00h\
+}
+BYTE 20h, 0
+BYTE 20h, 0
+BYTE 20h, 0
+BYTE 20h, 0
+BYTE 20h, 0
+BYTE 20h, 0
+TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 20: MEMORY DEVICE MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+xHandle = xHandle + 1
+MEMORY_DEVICE_MAPPED_ADDRESS_STRUC {\
+{20, sizeof(MEMORY_DEVICE_MAPPED_ADDRESS_STRUC), xHandle},
+(0FFFFFFFFh - MKF_BIOS_SIZE + 1) SHR 10,
+0FFFFFC00h SHR 10,
+FMdevice,
+FMMAddress,
+01h,
+00h,
+00h,
+00h,
+00h\
+}
+TERMINATOR
+TERMINATOR
+ENDIF ; MKF_FLASH_MEMORY_ARRAY_INFO
+EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 21: BUILT-IN POINTING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+CreateBuiltinPointingDeviceInfo macro xHandle:REQ
+
+ LOCAL PointDevCntr
+
+IF MKF_BUILTIN_POINTING_DEVICE_INFO
+ PointDevCntr = 1
+
+ REPEAT MKF_NO_OF_POINTING_DEVICE
+ xHandle = xHandle + 1
+
+ BUILTIN_POINT_DEV_STRUC {\
+ {21, 07h, xHandle},
+ @CATSTR(<POINTING_DEVICE_TYPE_>,<%PointDevCntr>),
+ @CATSTR(<POINTING_DEVICE_INTERFACE_>,<%PointDevCntr>),
+ @CATSTR(<POINTING_DEVICE_NUM_BUTTONS_>,<%PointDevCntr>)\
+ }
+ TERMINATOR
+ TERMINATOR
+ PointDevCntr = PointDevCntr + 1
+ ENDM ; MKF_NO_OF_POINTING_DEVICE
+ENDIF ; MKF_BUILTIN_POINTING_DEVICE_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 22: PORTABLE BATTERY INFORMATION
+;----------------------------------------------------------------------------
+CreatePortableBatteryInfo macro xHandle:REQ
+
+ LOCAL BC, xDCh, xDC, xDV, xME, xSSN, xSMD, xDCM, xOS
+
+IF MKF_PORTABLE_BATTERY_INFO
+
+ BC = 1
+
+ REPEAT MKF_NO_OF_PORTABLE_BATTERY
+ xHandle = xHandle + 1
+
+ xDCh = @CATSTR(<DEVICE_CHEMISTRY_>,<%BC>)
+ xDC = @CATSTR(<DESIGN_CAPACITY_>,<%BC>)
+ xDV = @CATSTR(<DESIGN_VOLTAGE_>,<%BC>)
+ xME = @CATSTR(<MAX_ERROR_IN_BAT_DATA_>,<%BC>)
+ xSSN = @CATSTR(<PORT_BAT_SBDS_SERIAL_NO_>,<%BC>)
+ xSMD = @CATSTR(<PORT_BAT_SBDS_MAN_DATE_>,<%BC>)
+ xDCM = @CATSTR(<DESIGN_CAPACITY_MULTIPLIER_>,<%BC>)
+ xOS = @CATSTR(<OEM_SPECIFIC_>,<%BC>)
+
+ PORTABLE_BATTERY_STRUC {\
+ {22, sizeof(PORTABLE_BATTERY_STRUC), xHandle},
+ 01h, 02h, 03h, 04h, 05h,
+ xDCh,
+ xDC,
+ xDV,
+ 06,
+ xME,
+ xSSN,
+ ,
+ 07,
+ ,
+ xOS\
+ }
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_LOCATION_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_MANUFACTURER_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_MANUFACTURE_DATE_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_SERIAL_NUMBER_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_DEVICE_NAME_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_SBDS_VER_NO_>,<%BC>)
+ SCAN_PUT_STR @CATSTR(<PORT_BAT_SBDS_DEV_CHEM_>,<%BC>)
+ TERMINATOR
+ BC = BC + 1
+ ENDM ; MKF_NO_OF_PORTABLE_BATTERY
+ENDIF ; MKF_PORTABLE_BATTERY_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 23: SYSTEM RESET INFORMATION
+;----------------------------------------------------------------------------
+CreateSystemResetInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 0Dh
+IF MKF_SYSTEM_RESET_INFO
+ xHandle = xHandle + 1
+
+ SYSTEM_RESET_STRUC {\
+ {23, length, xHandle},
+ RESET_CAPABILITIES,
+ RESET_COUNT,
+ RESET_LIMIT,
+ RESET_TIMER_INTERVAL,
+ RESET_TIMEOUT\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_SYSTEM_RESET_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 24: HARDWARE SECURITY INFORMATION
+;----------------------------------------------------------------------------
+CreateHardwareSecurityInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 05h
+IF MKF_HARDWARE_SECURITY_INFO
+ xHandle = xHandle + 1
+
+ HARDWARE_SECURITY_STRUC {\
+ {24, length, xHandle},
+ MKF_HARDWARE_SECURITY_SETTINGS\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_HARDWARE_SECURITY_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 25: SYSTEM POWER CONTROLS INFORMATION
+;----------------------------------------------------------------------------
+CreateSystemPowerControlsInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 09h
+
+IF MKF_SYSTEM_POWER_CONTROLS_INFO
+ xHandle = xHandle + 1
+
+ SYSTEM_POWER_CONTROLS_STRUC {\
+ {25, length, xHandle},
+ NEXT_SCHEDULED_POWERON_MONTH,
+ NEXT_SCHEDULED_POWERON_DAY_OF_MONTH,
+ NEXT_SCHEDULED_POWERON_HOUR,
+ NEXT_SCHEDULED_POWERON_MINUTE,
+ NEXT_SCHEDULED_POWERON_SECOND\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_SYSTEM_POWER_CONTROLS_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 30: OUT-OF-BAND REMOTE ACCESS INFORMATION
+;----------------------------------------------------------------------------
+CreateOutofBandRemoteAccessInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 06h
+
+IF MKF_OUT_OF_BAND_REMOTE_ACCESS_INFO
+ xHandle = xHandle + 1
+
+ OUT_OF_BAND_REMOTE_ACCESS_STRUC {\
+ {30, length, xHandle},
+ 01h,
+ MKF_OBRA_CONNECTIONS\
+ }
+ SCAN_PUT_STR %MKF_OBRA_MANUFACTURER_NAME
+ TERMINATOR
+ENDIF ; MKF_OUT_OF_BAND_REMOTE_ACCESS_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 31: BOOT INTEGRITY SERVICES
+;----------------------------------------------------------------------------
+CreateBootIntegrityServicesInfo MACRO xHandle:REQ
+
+IF MKF_BIS_INFO
+ xHandle = xHandle + 1
+
+ BOOT_INTEGRITY_STRUC {\
+ {31, sizeof(BOOT_INTEGRITY_STRUC), xHandle},
+ MKF_CHECKSUM,
+ 0,
+ 0,
+ MKF_BIS_ENTRY_POINT_REAL_MODE,
+ MKF_BIS_ENTRY_POINT_FLAT_MODE,
+ 0,
+ 0\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_BIS_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 32: SYSTEM BOOT INFORMATION
+;----------------------------------------------------------------------------
+CreateSystemBootInfo MACRO xHandle:REQ
+
+IF MKF_SYSTEM_BOOT_INFO
+ xHandle = xHandle + 1
+
+ SYS_BOOT_INFORMATION_STRUC {\
+ {32, sizeof(SYS_BOOT_INFORMATION_STRUC), xHandle},
+ {0,0,0,0,0,0},
+ {0,0,0,0,0,0,0,0,0,0}\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_SYSTEM_BOOT_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 33: 64-BIT MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+CreateSixtyFourBitMemoryErrorInfo MACRO xHandle:REQ
+
+ LOCAL length
+
+ length = 01Fh
+
+IF MKF_SIXTY_FOURBIT_MEMORY_ERROR_INFO
+ xHandle = xHandle + 1
+
+ SIXTYFOUR_BIT_MEMORY_ARRAY_ERR_STRUC {\
+ {33, length, xHandle},
+ MKF_MEMORY_ERROR_TYPE,
+ MKF_ERROR_GRANULARITY,
+ MKF_ERROR_OPERATION,
+ MKF_VENDOR_SYNDROME,
+ MEM_ARR_ERR_ADD,
+ DEV_ERR_ADD,
+ MKF_ERROR_RESOLUTION\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_SIXTY_FOURBIT_MEMORY_ERROR_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 34: MANAGEMENT DEVICE INFORMATION
+;----------------------------------------------------------------------------
+CreateManagementDeviceInfo macro xHandle:REQ
+
+ LOCAL length, mD, mT, mA, mAt, xC, xN, xS, rC, mH, cH, tH
+ LOCAL vD,lS,maxV,minV,reS,tolE,accY,oD,nomV,rCMdi,rCVpi, rCEdi
+ LOCAL Tphndl,tD,dtS,cuG,oDc,nS,nD,eD,xT,xCc,xE,xV,rCo
+ LOCAL xPs, mPc, pSc, xTs
+
+ length = 0Bh
+
+IF MKF_MANAGEMENT_DEVICE_INFO
+ rCMdi = 1
+
+ REPEAT MKF_NUMBER_OF_MANAGEMENT_DEVICES
+ xHandle = xHandle + 1
+ mH = xHandle
+
+ mD TEXTEQU @CATSTR(<MANAGEMENT_DEVICE_STRING_>, <%rCMdi>)
+ mT TEXTEQU @CATSTR(<MANAGEMENT_DEVICE_TYPE_>, <%rCMdi>)
+ mA TEXTEQU @CATSTR(<MANAGEMENT_DEVICE_ADDR_>, <%rCMdi>)
+ mAt TEXTEQU @CATSTR(<MANAGEMENT_DEVICE_ADDR_TYPE_>, <%rCMdi>)
+
+ MANAGEMENT_DEV_INFO 34, length, xHandle, mD, mT, mA, mAt
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 26: VOLTAGE PROBE INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_VOLTAGE_PROBE_INFO
+ rCVpi =1
+ xV TEXTEQU @CATSTR(<NUMBER_OF_VOLTAGE_PROBE_ASSOCIATED_MGMT_DEV_>, <%rCMdi>)
+
+ REPEAT xV
+ xHandle = xHandle + 1
+ cH = xHandle
+ length = sizeof VOLTAGE_PROBE_STRUC
+
+ xN = 1
+ xS TEXTEQU @CATSTR(<VOLTAGE_PROBE_INFO_>, <%rCMdi>, <_>, <%rCVpi>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ vD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ lS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ maxV TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ minV TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ reS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ tolE TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ accY TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ oD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ nomV = @SUBSTR(%xS, <%xC>, xN)
+
+ VOLTAGE_PRO_INFO 26, length, xHandle, vD, lS, maxV, minV, reS, tolE, accY, oD, nomV
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+ tH = xHandle
+ length = sizeof MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC
+
+ xN = 1
+ xS TEXTEQU @CATSTR(<MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_>, <%rCMdi>, <_>, <%rCVpi>)
+ xC = @INSTR(xN, %xS, <,>)
+ ltnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltnr = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @SIZESTR(%xS)
+ utnr = @SUBSTR(%xS, xN, (xC-xN+1))
+
+ MANAGEMENT_DEV_THRESHOLD_INFO 36, length, xHandle, ltnc, utnc, ltc, utc, ltnr, utnr
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 35: MANAGEMENT DEVICE COMPONENT INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+
+ MANAGEMENT_DEVICE_COMPONENT_STRUC{\
+ {35, sizeof(MANAGEMENT_DEVICE_COMPONENT_STRUC), xHandle},
+ 01h, mH, cH, tH}
+
+ SCAN_PUT_STR %MKF_MGMT_DEV_COMPONENT_DESCRIPTION
+ TERMINATOR
+
+ rCVpi = rCVpi + 1
+ ENDM ; xV
+ENDIF ; IF MKF_VOLTAGE_PROBE_INFO
+
+;----------------------------------------------------------------------------
+; Structure Type 28: TEMPERATURE PROBE INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_TEMPERATURE_PROBE_INFO
+ rCTpi = 1
+ xT TEXTEQU @CATSTR(<NUMBER_OF_TEMPERATURE_PROBE_ASSOCIATED_MGMT_DEV_>, <%rCMdi>)
+
+ REPEAT xT
+ xHandle = xHandle + 1
+ Tphndl = xHandle
+ cH = xHandle
+ length = sizeof TEMPERATURE_PROBE_STRUC
+ xN = 1
+ xS TEXTEQU @CATSTR(<TEMPERATURE_PROBE_INFO_>, <%rCMdi>, <_>, <%rCTpi>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ tD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ lS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ maxV TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ minV TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ reS TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ tolE TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ accY TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ oD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ nomV = @SUBSTR(%xS, <%xC>, xN)
+
+ TEMPERATURE_PRO_INFO 28, length, xHandle, tD, lS, maxV, minV, reS, tolE, accY, oD, nomV
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+
+ xHandle = xHandle + 1
+ tH = xHandle
+ length = sizeof MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC
+ xN = 1
+ xS TEXTEQU @CATSTR(<MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_>, <%rCMdi>, <_>, <%rCTpi>)
+ xC = @INSTR(xN, %xS, <,>)
+ ltnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltnr = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @SIZESTR(%xS)
+ utnr = @SUBSTR(%xS, xN, (xC-xN+1))
+
+ MANAGEMENT_DEV_THRESHOLD_INFO 36, length, xHandle, ltnc, utnc, ltc, utc, ltnr, utnr
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 35: MANAGEMENT DEVICE COMPONENT INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+
+ MANAGEMENT_DEVICE_COMPONENT_STRUC{\
+ {35, sizeof(MANAGEMENT_DEVICE_COMPONENT_STRUC), xHandle},
+ 01h,
+ mH,
+ cH,
+ tH\
+ }
+ SCAN_PUT_STR %MKF_MGMT_DEV_COMPONENT_DESCRIPTION
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 27: COOLING DEVICE
+;----------------------------------------------------------------------------
+IF MKF_COOLING_DEVICE_INFO
+ rCo = 1
+ xCc TEXTEQU @CATSTR(<NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_>, <%rCMdi>, <_>, <%rCTpi>)
+
+ REPEAT xCc
+ xHandle = xHandle + 1
+ cH = xHandle
+ length = sizeof COOLING_DEVICE_STRUC
+
+ xN = 1
+ xS TEXTEQU @CATSTR(<COOLING_DEVICE_INFO_>, <%rCMdi>, <_>, <%rCTpi>, <_>, <%rCo>)
+ xC = @INSTR(xN, %xS, <,>)
+ dtS = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ cuG = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ oDc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ nS = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @SIZESTR(%xS)
+
+ IF xC LT xN
+ COOLING_DEV_INFO 27, length, xHandle, Tphndl, dtS, cuG, oDc, nS, 0
+ TERMINATOR
+ ELSE
+ nD TEXTEQU @SUBSTR(%xS, xN, (xC-xN+1))
+ COOLING_DEV_INFO 27, length, xHandle, Tphndl, dtS, cuG, oDc, nS, 1
+ SCAN_PUT_STR %nD
+ ENDIF
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+ tH = xHandle
+
+ length = sizeof MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC
+ xN = 1
+ xS TEXTEQU @CATSTR(<MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_>, <%rCMdi>, <_>, <%rCTpi>, <_>, <%rCo>)
+ xC = @INSTR(xN, %xS, <,>)
+ ltnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utnc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ utc = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(xN, %xS, <,>)
+ ltnr = @SUBSTR(%xS, xN, (xC-xN))
+ xN = xC+1
+ xC = @SIZESTR(%xS)
+ utnr = @SUBSTR(%xS, xN, (xC-xN+1))
+
+ MANAGEMENT_DEV_THRESHOLD_INFO 36, length, xHandle, ltnc, utnc, ltc, utc, ltnr, utnr
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 35: MANAGEMENT DEVICE COMPONENT INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+
+ MANAGEMENT_DEVICE_COMPONENT_STRUC{\
+ {35, sizeof(MANAGEMENT_DEVICE_COMPONENT_STRUC), xHandle},
+ 01h, mH, cH, tH}
+
+ SCAN_PUT_STR %MKF_MGMT_DEV_COMPONENT_DESCRIPTION
+ TERMINATOR
+
+ rCo = rCo + 1
+ ENDM ; xCc
+ENDIF ; IF MKF_COOLING_DEVICE_INFO
+ ENDM ; xT
+ENDIF ; IF MKF_TEMPERATURE_PROBE_INFO
+
+;----------------------------------------------------------------------------
+; Structure Type 29: ELECTRICAL PROBE INFORMATION
+;----------------------------------------------------------------------------
+IF MKF_ELECTRICAL_PROBE_INFO
+ rCEdi =1
+
+ xE TEXTEQU @CATSTR(<NUMBER_OF_ELECTRICAL_PROBE_ASSOCIATED_MGMT_DEV_>, <%rCMdi>)
+
+ REPEAT xE
+ xHandle = xHandle + 1
+ cH = xHandle
+ length = sizeof ELECTRICAL_CURRENT_PROBE_STRUC
+
+ xN = 1
+ xS TEXTEQU @CATSTR(<ELECTRICAL_PROBE_INFO_>,<%rCMdi>, <_>,<%rCEdi>)
+ xC = @INSTR(<%xN>,%xS,<,>)
+ eD TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ lS TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ maxV TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ minV TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ reS TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ tolE TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ accY TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>,%xS,<,>)
+ oD TEXTEQU @SUBSTR(%xS,<%xN>,(xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ nomV = @SUBSTR(%xS,<%xC>,xN)
+
+ ELECTRICAL_PRO_INFO 29, length, xHandle, eD, lS, maxV, minV, reS, tolE, accY, oD, nomV
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+ tH = xHandle
+ length = sizeof MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC
+
+ eltnc TEXTEQU @CATSTR(<LOWER_THRESHOLD_NON_CRITICAL_>,<%rCEdi>)
+ eutnc TEXTEQU @CATSTR(<UPPER_THRESHOLD_CRITICAL_>,<%rCEdi>)
+ eltc TEXTEQU @CATSTR(<LOWER_THRESHOLD_CRITICAL_>,<%rCEdi>)
+ eutc TEXTEQU @CATSTR(<UPPER_THRESHOLD_NON_CRITICAL_>,<%rCEdi>)
+ eltnr TEXTEQU @CATSTR(<LOWER_THRESHOLD_NON_RECOVERABLE_>,<%rCEdi>)
+ eutnr TEXTEQU @CATSTR(<UPPER_THRESHOLD_NON_RECOVERABLE_>,<%rCEdi>)
+
+ MANAGEMENT_DEV_THRESHOLD_INFO 36, length, xHandle, eltnc, eutnc, eltc, eutc, eltnr, eutnr
+ TERMINATOR
+ TERMINATOR
+
+;----------------------------------------------------------------------------
+; Structure Type 35: MANAGEMENT DEVICE COMPONENT INFORMATION
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+
+ MANAGEMENT_DEVICE_COMPONENT_STRUC{\
+ {35, sizeof(MANAGEMENT_DEVICE_COMPONENT_STRUC), xHandle},
+ 01h, mH, cH, tH}
+
+ SCAN_PUT_STR %MKF_MGMT_DEV_COMPONENT_DESCRIPTION
+ TERMINATOR
+
+ rCEdi = rCEdi + 1
+ ENDM ; xE
+ENDIF ; IF MKF_ELECTRICAL_PROBE_INFO
+ rCMdi = rCMdi + 1
+ ENDM ; MKF_NUMBER_OF_MANAGEMENT_DEVICES
+
+ENDIF ; IF MKF_MANAGEMENT_DEVICE_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 39: SYSTEM POWER SUPPLY
+;----------------------------------------------------------------------------
+CreateSystemPowerSupplyInfo macro xHandle:REQ
+
+ LOCAL length, vpH, cdH, tpH, cpH, s1, v1, v2
+ LOCAL sPr, vLS, vMa, vMi, vRe, vTo, vAc, vOD, vNo ; Type 26/28/29
+ LOCAL vTS, vCG, vOD, vNS, sDe ; Type 27
+ LOCAL vPS, vPG, sLo, sDN, sMa, sSN, sAT, sPN, sRL, vMP, vPC ; Type 39
+
+IF MKF_SYSTEM_POWER_SUPPLY_INFO
+ vPS = 1
+ REPEAT MKF_NUMBER_OF_POWER_SUPPLY
+;----------------------------------------------------------------------------
+; Associated Structure Type 26: VOLTAGE PROBE INFORMATION
+;----------------------------------------------------------------------------
+
+ s1 TEXTEQU @CATSTR(<VOLTAGE_PROBE_39_>, <%vPS>)
+ v1 = @SUBSTR(%s1, 1, 1)
+ IF v1 EQ 1
+ xHandle = xHandle + 1
+ vpH = xHandle
+ length = sizeof VOLTAGE_PROBE_STRUC
+ v1 = @INSTR(1, %s1, <,>) + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ sPr TEXTEQU @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vLS = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMa = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMi = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vRe = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vTo = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vAc = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vOD = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @SIZESTR(%s1) - v1 + 1
+ vNo = @SUBSTR(%s1, v1, v2)
+
+ VOLTAGE_PRO_INFO 26, length, vpH, sPr, vLS, vMa, vMi, vRe, vTo, vAc, vOD, vNo
+ TERMINATOR
+ ELSE
+ vpH = 0FFFFh
+ ENDIF
+;----------------------------------------------------------------------------
+; Associated Structure Type 28: TEMPERATURE PROBE INFORMATION
+;----------------------------------------------------------------------------
+ s1 TEXTEQU @CATSTR(<COOLING_DEVICE_39_>, <%vPS>)
+ v1 = @SUBSTR(%s1, 1, 1)
+ IF v1 EQ 1
+ s1 TEXTEQU @CATSTR(<TEMPERATURE_PROBE_39_>, <%vPS>)
+ v1 = @SUBSTR(%s1, 1, 1)
+ IF v1 EQ 1
+ xHandle = xHandle + 1
+ tpH = xHandle
+ length = sizeof TEMPERATURE_PROBE_STRUC
+ v1 = @INSTR(1, %s1, <,>) + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ sPr TEXTEQU @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vLS = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMa = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMi = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vRe = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vTo = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vAc = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vOD = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @SIZESTR(%s1) - v1 + 1
+ vNo = @SUBSTR(%s1, v1, v2)
+
+ TEMPERATURE_PRO_INFO 28, length, tpH, sPr, vLS, vMa, vMi, vRe, vTo, vAc, vOD, vNo
+ TERMINATOR
+ ELSE
+ tpH = 0FFFFh
+ ENDIF
+ ENDIF
+;----------------------------------------------------------------------------
+; Associated Structure Type 27: COOLING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+ s1 TEXTEQU @CATSTR(<COOLING_DEVICE_39_>, <%vPS>)
+ v1 = @SUBSTR(%s1, 1, 1)
+ IF v1 EQ 1
+ xHandle = xHandle + 1
+ cdH = xHandle
+ length = sizeof COOLING_DEVICE_STRUC
+ v1 = @INSTR(1, %s1, <,>) + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vTS = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vCG = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vOD = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vNS = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @SIZESTR(%s1) - v1 + 1
+ sDe TEXTEQU @SUBSTR(%s1, v1, v2)
+
+ COOLING_DEV_INFO 27, length, cdH, tpH, vTS, vCG, vOD, vNS, 1
+ SCAN_PUT_STR %sDe
+ TERMINATOR
+ ELSE
+ cdH = 0FFFFh
+ ENDIF
+;----------------------------------------------------------------------------
+; Associated Structure Type 29: ELECTRICAL CURRENT PROBE INFORMATION
+;----------------------------------------------------------------------------
+ s1 TEXTEQU @CATSTR(<ELECTRICAL_PROBE_39_>, <%vPS>)
+ v1 = @SUBSTR(%s1, 1, 1)
+ IF v1 EQ 1
+ xHandle = xHandle + 1
+ cpH = xHandle
+ length = sizeof ELECTRICAL_CURRENT_PROBE_STRUC
+ v1 = @INSTR(1, %s1, <,>) + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ sPr TEXTEQU @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vLS = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMa = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vMi = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vRe = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vTo = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vAc = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @INSTR(v1, %s1, <,>)
+ vOD = @SUBSTR(%s1, v1, (v2 - v1))
+ v1 = v2 + 1
+ v2 = @SIZESTR(%s1) - v1 + 1
+ vNo = @SUBSTR(%s1, v1, v2)
+
+ ELECTRICAL_PRO_INFO 29, length, cpH, sPr, vLS, vMa, vMi, vRe, vTo, vAc, vOD, vNo
+ TERMINATOR
+ ELSE
+ cpH = 0FFFFh
+ ENDIF
+;----------------------------------------------------------------------------
+; Create Type 39
+;----------------------------------------------------------------------------
+ xHandle = xHandle + 1
+ length = sizeof SYSTEM_POWER_SUPPLY_STRUC
+ vPG = @CATSTR(<POWER_SUPPLY_UNIT_GROUP_>, <%vPS>)
+ sLo TEXTEQU @CATSTR(<POWER_SUPPLY_LOCATION_>, <%vPS>)
+ sDN TEXTEQU @CATSTR(<POWER_SUPPLY_DEVICE_NAME_>, <%vPS>)
+ sMa TEXTEQU @CATSTR(<POWER_SUPPLY_MANUFACTURER_>, <%vPS>)
+ sSN TEXTEQU @CATSTR(<POWER_SUPPLY_SERIAL_NUMBER_>, <%vPS>)
+ sAT TEXTEQU @CATSTR(<POWER_SUPPLY_ASSET_TAG_NUMBER_>, <%vPS>)
+ sPN TEXTEQU @CATSTR(<POWER_SUPPLY_MODEL_PART_NUMBER_>, <%vPS>)
+ sRL TEXTEQU @CATSTR(<POWER_SUPPLY_REVISION_LEVEL_>, <%vPS>)
+ vMP = @CATSTR(<POWER_SUPPLY_MAX_POWER_CAPACITY_>, <%vPS>)
+ vPC TEXTEQU @CATSTR(<POWER_SUPPLY_CHARACTERISTICS_>, <%vPS>)
+
+ SYSTEM_POWER_SUPPLY_INFO 39, length, xHandle, vPG, sLo, sDN, sMa, sSN, sAT, sPN, sRL, vMP, vPC, vpH, cdH, cpH
+ TERMINATOR
+ vPS = vPS + 1
+ ENDM ; MKF_NUMBER_OF_POWER_SUPPLY
+ENDIF ; MKF_SYSTEM_POWER_SUPPLY_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 38: IPMI DEVICE INFORMATION
+;----------------------------------------------------------------------------
+CreateIPMIDeviceInfo MACRO xHandle:REQ
+
+ LOCAL iit, isr, isa, nsda, ibal, ibah, bamii, intnum
+
+IF MKF_IPMI_DEVICE_INFO
+ xHandle = xHandle + 1
+
+ iit = MKF_IPMI_INTERFACE_TYPE
+ isr = MKF_IPMI_SPECIFICATION_REVISION
+ isa = MKF_I2C_SLAVE_ADDRESS
+ nsda = MKF_NV_STORAGE_DEVICE_ADDRESS
+ ibal = IPMI_BASE_ADDRESS_LO
+ ibah = IPMI_BASE_ADDRESS_HI
+ bamii = MKF_BASE_ADDR_MOD_INTR_INFO
+ intnum = MKF_INTERRUPT_NUMBER
+
+ IPMI_DEVICE_INFORMATION_STRUC{\
+ {38, sizeof(IPMI_DEVICE_INFORMATION_STRUC), xHandle},
+ iit,
+ isr,
+ isa,
+ nsda,
+ ibal,
+ ibah,
+ bamii,
+ intnum\
+ }
+ TERMINATOR
+ TERMINATOR
+ENDIF ; MKF_IPMI_DEVICE_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 40 : ADDITIONAL INFORMATION
+;----------------------------------------------------------------------------
+CreateAdditionalInformation macro xHandle:REQ
+
+ LOCAL length, rC, eL, rH, rT, rI, rO, uS, sC, sN, rV, xS
+
+ IF (MKF_ADDITIONAL_INFO AND (MKF_ADDITIONAL_INFO_COUNT GT 0))
+ xHandle = xHandle + 1
+ length = sizeof(ADDITIONAL_INFO_STRUC) + (MKF_ADDITIONAL_INFO_COUNT * sizeof(ADDITIONAL_INFO_ENTRY_STRUC))
+
+ ADDITIONAL_INFO_STRUC {\
+ {40, length, xHandle},
+ MKF_ADDITIONAL_INFO_COUNT\
+ }
+
+ rC = 1
+ sC = 1
+ REPEAT MKF_ADDITIONAL_INFO_COUNT
+ eL = sizeof ADDITIONAL_INFO_ENTRY_STRUC
+ rT = @CATSTR (REF_TYPE_, <%rC>)
+ rI = @CATSTR (REF_TYPE_INSTANCE_, <%rC>)
+ rO TEXTEQU @CATSTR (REF_OFFSET_, <%rC>)
+ uS = @CATSTR (USE_STRING_, <%rC>)
+ IF uS EQ 1
+ sN = sC
+ sC = sC + 1
+ ELSE
+ sN = 0
+ ENDIF
+ rV TEXTEQU @CATSTR (VALUE_, <%rC>)
+ ADDITIONAL_INFO_ENTRY_STRUC {\
+ eL,
+ (rT*16)+rI,
+ rO,
+ sN,
+ {rV}\
+ }
+ rC = rC + 1
+ ENDM ; MKF_ADDITIONAL_INFO_COUNT
+
+ rC = 1
+ REPEAT MKF_ADDITIONAL_INFO_COUNT
+ uS = @CATSTR (USE_STRING_, <%rC>)
+ IF uS EQ 1
+ xS TEXTEQU @CATSTR (STRING_, <%rC>)
+ SCAN_PUT_STR %xS
+ ENDIF
+ rC = rC + 1
+ ENDM ; MKF_ADDITIONAL_INFO_COUNT
+ TERMINATOR
+ ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 41 : Onboard Devices Extended Information
+;----------------------------------------------------------------------------
+CreateOnboardDevicesExtendedInfo macro xHandle:REQ
+
+ LOCAL length, rC, xN, xS, xC, eD, dT, dI, sD, sG, xB, dF
+
+ length = sizeof(ONBOARD_DEVICE_EXTENDED_STRUC)
+
+ IF (MKF_ONBOARD_DEVICE_EXTENDED_INFO AND (MKF_ONBOARD_DEVICE_EXT_COUNT GT 0))
+ rC = 1
+ REPEAT MKF_ONBOARD_DEVICE_EXT_COUNT
+ xHandle = xHandle + 1
+ xN = 1
+ xS TEXTEQU @CATSTR(<ONBOARD_DEVICE_EXT_>, <%rC>)
+ xC = @INSTR(<%xN>, %xS, <,>)
+ eD TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ dT TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ dI TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = @SIZESTR(%xS)
+ xN = xN-xC
+ xC = xC+1
+ sD TEXTEQU @SUBSTR(%xS, <%xC>, <%xN>)
+
+ xS TEXTEQU @CATSTR(<SEGGRP_BUS_DEVFN_EXT_>, <%rC>)
+ xN = 1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ sG TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xN = xC+1
+ xC = @INSTR(<%xN>, %xS, <,>)
+ xB TEXTEQU @SUBSTR(%xS, <%xN>, (xC-xN))
+ xC = xC+1
+ dF TEXTEQU @SUBSTR(%xS, <%xC>)
+
+ ONBOARD_DEVICE_EXTENDED_STRUC {\
+ {41, length, xHandle},
+ 1,
+ ((eD shl 7) OR dT),
+ dI,sG,xB,
+ dF\
+ }
+ SCAN_PUT_STR %sD
+ TERMINATOR
+ rC = rC + 1
+ ENDM ; MKF_ONBOARD_DEVICE_EXT_COUNT
+ ENDIF
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 240: OEM DEFINED IO STRUCTURE
+;----------------------------------------------------------------------------
+CreateOEMIOMappedGpnvInfo MACRO xHandle:REQ
+
+ IF MKF_OEM_IO_GPNV_STRUC_INFO
+ xHandle = xHandle + 1
+ DescLength = (MAX_IO_GPNV_DATAID*size DATAID_DESCRIPTOR_STRUC)
+ TotalLength = sizeof(OEM_GPNV_STRUC)+DescLength
+ OEM_GPNV_STRUC {\
+ {OEM_IO_GPNV_INFORMATION_TYPE, TotalLength, xHandle},
+ 00h,
+ 00000000h,
+ MAX_IO_GPNV_DATAID\
+ }
+ BYTE DescLength dup(0FFh)
+ TERMINATOR
+ TERMINATOR
+ ENDIF ; MKF_OEM_IO_GPNV_STRUC_INFO
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 241: OEM DEFINED MEMORY STRUCTURE
+;----------------------------------------------------------------------------
+CreateOEMMemoryMappedGpnvInfo MACRO xHandle:REQ
+ IF MKF_OEM_MEMORY_GPNV_STRUC_INFO
+ xHandle = xHandle + 1
+ DescLength = (MAX_MEMORY_GPNV_DATAID*size DATAID_DESCRIPTOR_STRUC)
+ TotalLength = sizeof(OEM_GPNV_STRUC)+DescLength
+ OEM_GPNV_STRUC {\
+ {OEM_MEMORY_GPNV_INFORMATION_TYPE, TotalLength, xHandle},
+ 00h,
+ 00000000h,
+ MAX_MEMORY_GPNV_DATAID\
+ }
+ BYTE DescLength dup(0FFh)
+ TERMINATOR
+ TERMINATOR
+ ENDIF ; MKF_OEM_MEMORY_GPNV_STRUC_INFO
+ EXITM %xHandle
+ENDM
+;----------------------------------------------------------------------------
+; Structure Type 129: INTEL ASF STRUCTURE
+;----------------------------------------------------------------------------
+CreateIntelASFTable MACRO xHandle:REQ
+IFDEF MKF_ASF_SUPPORT
+IF MKF_ASF_SUPPORT
+ xHandle = xHandle + 1
+ INTEL_ASF_STRUC{\
+ {129, sizeof(INTEL_ASF_STRUC), xHandle},
+ 01h,
+ 01h,
+ 02h,
+ 01h\
+ }
+ BYTE 'Intel_ASF',0
+ BYTE 'Intel ASF_001',0
+ TERMINATOR
+ENDIF ; MKF_ASF_SUPPORT
+ENDIF ; MKF_ASF_SUPPORT
+ EXITM %xHandle
+endm
+;----------------------------------------------------------------------------
+; Structure Type 127: END OF TABLE
+;----------------------------------------------------------------------------
+CreateEndOfTable MACRO xHandle:REQ
+ xHandle = xHandle + 1
+ END_OF_TABLE_STRUC{\
+ {127, sizeof(END_OF_TABLE_STRUC), xHandle}\
+ }
+ TERMINATOR
+ TERMINATOR
+ EXITM %xHandle
+ENDM
+
+;----------------------------------------------------------------------------
+ENDIF ; End of Inclusion Guard _smbdata_mac_
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SMBMACRO.AID b/Board/EM/SMBIOS/SMBiosStaticData/SMBMACRO.AID
new file mode 100644
index 0000000..9858192
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SMBMACRO.AID
@@ -0,0 +1,1228 @@
+ ECHO --Including: SMBMACRO.AID
+
+;----------------------------------------------------------------------------
+; DO NOT CHANGE ANY THING UNLESS OTHERWISE SPECIFIED
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+;****************************************************************************
+; $Header: $
+;
+; $Revision: $
+;
+; $Date: $
+;
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: $
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+; Structure Type 0 : BIOS INFORMATION
+;----------------------------------------------------------------------------
+
+BIOS_CHAR macro
+
+ LOCAL BIOSCHARACTER
+ BIOSCHARACTER = 0
+
+IF MKF_BI_UNKNOWN_CHAR
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 2)
+ENDIF
+
+IF MKF_BI_BIOS_CHAR_NOT_SUPPORTED
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 3)
+ENDIF
+
+IF MKF_INC_ISA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 4)
+ENDIF
+
+IF MKF_BI_MCA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 5)
+ENDIF
+
+IF MKF_BI_EISA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 6)
+ENDIF
+
+IF MKF_INC_PCI
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 7)
+ENDIF
+
+IF MKF_BI_PCMCIA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 8)
+ENDIF
+
+IF MKF_INC_PnP
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 9)
+ENDIF
+
+IFDEF MKF_APM_SUPPORT
+ IF MKF_APM_SUPPORT
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 10)
+ ENDIF
+ENDIF
+
+IF MKF_BI_BIOS_Flash
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 11)
+ENDIF
+
+IF MKF_BI_BIOS_Shadow
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 12)
+ENDIF
+
+IF MKF_BI_VL_VESA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 13)
+ENDIF
+
+IF MKF_BI_ESCD
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 14)
+ENDIF
+
+IF MKF_BI_CDROM_BOOT
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 15)
+ENDIF
+
+IF MKF_BI_SELECTABLE_BOOT
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 16)
+ENDIF
+
+IF MKF_BI_BIOS_ROM_SOCKET
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 17)
+ENDIF
+
+IF MKF_BI_PCMCIA_BOOT
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 18)
+ENDIF
+
+IF MKF_BI_EDD
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 19)
+ENDIF
+
+IF MKF_BI_INT13_NEC9800
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 20)
+ENDIF
+
+IF MKF_BI_INT13_TOSHIBA
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 21)
+ENDIF
+
+IF MKF_BI_INT13_5_25_360
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 22)
+ENDIF
+
+IF MKF_BI_INT13_5_25_1_2
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 23)
+ENDIF
+
+IF MKF_BI_INT13_3_5_720
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 24)
+ENDIF
+
+IF MKF_BI_INT13_3_5_2_88
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 25)
+ENDIF
+
+IF MKF_BI_INT5_PRINT_SCRN
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 26)
+ENDIF
+
+IFDEF MKF_KBC_SUPPORT
+IF MKF_KBC_SUPPORT
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 27)
+ENDIF
+ENDIF
+
+IF MKF_BI_INT14_SERIAL_SVC
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 28)
+ENDIF
+
+IF MKF_BI_INT17_PRN_SVC
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 29)
+ENDIF
+
+IF MKF_BI_INT10_CGA_MONO
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 30)
+ENDIF
+
+IF MKF_BI_NEC_PC_98
+ BIOSCHARACTER = BIOSCHARACTER OR (1 shl 31)
+ENDIF
+ EXITM %BIOSCHARACTER
+ENDM
+
+;----------------------------------------------------------------------------
+; Use this Macro to set bits 32:63 of BIOS Characteristics
+
+BIOS_CHAR1 macro
+ LOCAL BIOSCHARACTER1
+ BIOSCHARACTER1 = 0
+
+ BIOSCHARACTER1 = BIOSCHARACTER1 OR (1 shl 0)
+
+;BIT 32 (bit 0 in this section) is used to indicate the this BIOS is capable
+; of updating strings with variable length
+
+ EXITM %BIOSCHARACTER1
+ENDM
+
+;----------------------------------------------------------------------------
+
+EXT_CHAR macro
+
+ LOCAL BIOSEXTCHARACTER
+ BIOSEXTCHARACTER = 0
+
+IFDEF MKF_ACPI_SUPPORT
+ IF MKF_ACPI_SUPPORT
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 0)
+ ENDIF
+ENDIF
+
+IFDEF MKF_AMIUSB_SUPPORT
+ IF MKF_AMIUSB_SUPPORT
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 1)
+ ENDIF
+ENDIF
+
+IF MKF_BI_AGP_SUPPORT
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 2)
+ENDIF
+
+IF MKF_BI_I2O_BOOT_SUP
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 3)
+ENDIF
+
+IF MKF_BI_LS120_BOOT_SUP
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 4)
+ENDIF
+
+IF MKF_BI_ATAPI_ZIP_SUP
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 5)
+ENDIF
+
+IF MKF_BI_IEEE_1394_SUP
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 6)
+ENDIF
+
+IF MKF_BI_SMART_BAT_SUP
+ BIOSEXTCHARACTER = BIOSEXTCHARACTER OR (1 shl 7)
+ENDIF
+
+ EXITM %BIOSEXTCHARACTER
+ENDM
+
+;----------------------------------------------------------------------------
+
+EXT_CHAR2 macro
+
+ LOCAL BIOSEXTCHARACTER2
+ BIOSEXTCHARACTER2 = 0 ;Note: Targeted Content Distribution bit
+ ;must be set per Microsoft "SMBIOS
+ ;Support in Windows" document
+
+IF MKF_BBS_SUPPORT
+ BIOSEXTCHARACTER2 = BIOSEXTCHARACTER2 OR (1 shl 0)
+ENDIF
+
+IF MKF_NETBOOT_SUPPORT
+ BIOSEXTCHARACTER2 = BIOSEXTCHARACTER2 OR (1 shl 1)
+ENDIF
+
+IF MKF_BI_ETCD
+ BIOSEXTCHARACTER2 = BIOSEXTCHARACTER2 OR (1 shl 2)
+ENDIF
+
+IF MKF_UEFI_SUPPORT
+ BIOSEXTCHARACTER2 = BIOSEXTCHARACTER2 OR (1 shl 3)
+ENDIF
+
+IF MKF_VIRTUAL_MACHINE
+ BIOSEXTCHARACTER2 = BIOSEXTCHARACTER2 OR (1 shl 4)
+ENDIF
+
+ EXITM %BIOSEXTCHARACTER2
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 1 : SYSTEM INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 2 : BASEBOARD INFORMATION
+;----------------------------------------------------------------------------
+
+BASE_BOARD_FEATURE_FLAGS MACRO
+
+ LOCAL FEATUREFLAGS
+ FEATUREFLAGS = 0
+
+ IF MKF_BB_HOSTING_BOARD
+ FEATUREFLAGS = FEATUREFLAGS OR 01h
+ ENDIF
+
+ IF MKF_BB_REQUIRE_AUX_BOARD
+ FEATUREFLAGS = FEATUREFLAGS OR 02h
+ ENDIF
+
+ IF MKF_BB_REMOVABLE
+ FEATUREFLAGS = FEATUREFLAGS OR 04h
+ ENDIF
+
+ IF MKF_BB_REPLACEABLE
+ FEATUREFLAGS = FEATUREFLAGS OR 08h
+ ENDIF
+
+ IF MKF_BB_HOT_SWAPPABLE
+ FEATUREFLAGS = FEATUREFLAGS OR 10h
+ ENDIF
+
+ EXITM %FEATUREFLAGS
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 3 : SYSTEM ENCLOSURE OR CHASSIS
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 4 : PROCESSOR INFORMATION
+;----------------------------------------------------------------------------
+
+@PROC_VOLT MACRO arglist:VARARG
+
+ LOCAL xV, xC, xM
+ xC = 1
+ xV = 0
+ FOR arg, <arglist>
+ IF xC EQ 1
+ xM = arg
+ ENDIF
+
+ IF xC GT 1
+ IF xM EQ 0
+ xV = xV OR arg
+ ENDIF
+ IF xM GT 0
+ xV = arg OR 80h
+ ENDIF
+ ENDIF
+ xC = xC+1
+
+ ENDM
+ EXITM %xV
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 5 : MEMORY CONTROLLER INFORMATION
+;----------------------------------------------------------------------------
+
+MEM_CTRL_ECC MACRO
+
+ LOCAL MEMCONTROLLERECC
+ MEMCONTROLLERECC = 0
+
+IF MKF_MCE_OTHER
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 0)
+ENDIF
+
+IF MKF_MCE_UNKNOWN
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 1)
+ENDIF
+
+IF MKF_MCE_NONE
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 2)
+ENDIF
+
+IF MKF_MCE_SINGLE_BIT_ECC
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 3)
+ENDIF
+
+IF MKF_MCE_DOUBLE_BIT_ECC
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 4)
+ENDIF
+
+IF MKF_MCE_ERROR_SCRUBBING
+ MEMCONTROLLERECC = MEMCONTROLLERECC OR (1 shl 5)
+ENDIF
+
+ EXITM %MEMCONTROLLERECC
+
+ENDM
+
+;----------------------------------------------------------------------------
+
+MEM_CTRL_SPEED MACRO
+
+ LOCAL MEMCONTSUPSPEED
+ MEMCONTSUPSPEED = 0
+
+IF MKF_SS_OTHER
+ MEMCONTSUPSPEED = MEMCONTSUPSPEED OR (1 shl 0)
+ENDIF
+
+IF MKF_SS_UNKNOWN
+ MEMCONTSUPSPEED = MEMCONTSUPSPEED OR (1 shl 1)
+ENDIF
+
+IF MKF_SS_70ns
+ MEMCONTSUPSPEED = MEMCONTSUPSPEED OR (1 shl 2)
+ENDIF
+
+IF MKF_SS_60ns
+ MEMCONTSUPSPEED = MEMCONTSUPSPEED OR (1 shl 3)
+ENDIF
+
+IF MKF_SS_50ns
+ MEMCONTSUPSPEED = MEMCONTSUPSPEED OR (1 shl 4)
+ENDIF
+
+ EXITM %MEMCONTSUPSPEED
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Following macro is defined for Memory Type
+;----------------------------------------------------------------------------
+
+@MEMORY_TYPE MACRO arglist:VARARG
+
+ LOCAL xMt
+ xMt = 0
+ FOR arg, <arglist>
+ xMt = xMt OR arg
+ ENDM
+ WORD xMt
+ENDM
+
+;----------------------------------------------------------------------------
+
+@MEMORY_INFO MACRO arglist:VARARG
+
+ LOCAL xB, xMs, xIs, xEs, xC
+ xC = 0
+ xB = 0
+ FOR arg, <arglist>
+ xC = xC + 1
+ IF xC EQ 1
+ xB = xB OR (arg shl 4)
+ ENDIF
+ IF xC EQ 2
+ xB = xB OR arg
+ ENDIF
+ IF xC EQ 3
+ xMs = arg
+ ENDIF
+ IF xC EQ 4
+ xIs = MEM_SIZE_IN_MB(arg)
+ ENDIF
+ IF xC EQ 5
+ xEs = MEM_SIZE_IN_MB(arg)
+ ENDIF
+ IF xC EQ 6
+ xIs = xIs OR arg
+ xEs = xEs OR arg
+ ENDIF
+ ENDM
+ BYTE xB
+ BYTE xMs
+ xEs = xEs*256
+ xEs = xEs OR xIs
+ EXITM %xEs
+ENDM
+
+;----------------------------------------------------------------------------
+
+@MEMORY_ERR_STATUS MACRO arglist:VARARG
+ LOCAL xErr
+ FOR arg, <arglist>
+ xErr = 0
+ ENDM
+ BYTE xErr
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 6 : MEMORY MODULE INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+MEM_MOD_VOLTAGE MACRO
+
+ LOCAL memVolt
+ memVolt = 0
+
+IF MKF_MM_VOLTAGE_5V
+ memVolt = memVolt OR 1
+ENDIF
+
+IF MKF_MM_VOLTAGE_33V
+ memVolt = memVolt OR (1 shl 1)
+ENDIF
+
+IF MKF_MM_VOLTAGE_29V
+ memVolt = memVolt OR (1 shl 2)
+ENDIF
+
+ EXITM %memVolt
+ENDM
+
+;----------------------------------------------------------------------------
+
+SUPPORTED_MEM_TYPE MACRO
+
+ LOCAL MEMMODSUPTYPE
+ MEMMODSUPTYPE = 0
+
+IF MKF_TYPE_OTHER
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 0)
+ENDIF
+
+IF MKF_TYPE_UNKNOWN
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 1)
+ENDIF
+
+IF MKF_TYPE_STANDARD
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 2)
+ENDIF
+
+IF MKF_TYPE_FAST_PAGE_MODE
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 3)
+ENDIF
+
+IF MKF_TYPE_EDO
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 4)
+ENDIF
+
+IF MKF_TYPE_PARITY
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 5)
+ENDIF
+
+IF MKF_TYPE_ECC
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 6)
+ENDIF
+
+IF MKF_TYPE_SIMM
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 7)
+ENDIF
+
+IF MKF_TYPE_DIMM
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 8)
+ENDIF
+
+IF MKF_TYPE_BURST_EDO
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 9)
+ENDIF
+
+IF MKF_TYPE_SDRAM
+ MEMMODSUPTYPE = MEMMODSUPTYPE OR (1 shl 10)
+ENDIF
+
+ EXITM %MEMMODSUPTYPE
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Following Macro calculates the Memory size in unit of MegaByte,
+; Porting engineer has to give value in SMB.EQU files only, and this
+; macro will calculate the correct size in MB
+;----------------------------------------------------------------------------
+; aa = xSize/(1024*1024)
+
+MEM_SIZE_IN_MB macro xSize:REQ
+
+ LOCAL aa, bb
+ bb = 0
+ aa = xSize
+ WHILE aa GT 0
+ aa = aa SHR 1
+ bb = bb + 1
+ ENDM
+ IF bb GT 0
+ bb = bb - 1
+ ENDIF
+ EXITM %bb
+ENDM
+
+;----------------------------------------------------------------------------
+; Following macro will calculate the BIOS size in unit of KB Porting
+; Engineer has to give value in SMB.EQU, and this macro will
+; calculate the BIOS size in KB
+;----------------------------------------------------------------------------
+
+BIOS_SIZE_IN_KB MACRO xSize:REQ
+ LOCAL aa
+
+ aa = xSize
+ IF aa LE (256*64*1024)
+ aa = (aa/(64*1024)) - 1
+ else
+ aa = 255
+ ENDIF
+ EXITM %aa
+ENDM
+
+;----------------------------------------------------------------------------
+; Following String defines the Memory module Information Structure
+;----------------------------------------------------------------------------
+
+
+;----------------------------------------------------------------------------
+; Structure Type 7 : CACHE INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+CACHE_SIZE MACRO xSize:REQ
+ LOCAL cSize
+ IF xSize GT (64*1024)
+ cSize = (xSize/(64*1024)) OR 8000h
+ ELSE
+ cSize = xSize/(1024)
+ ENDIF
+ EXITM %cSize
+ENDM
+
+;----------------------------------------------------------------------------
+; Following macro defines the Cache Speed
+;----------------------------------------------------------------------------
+
+CACHE_SPEED MACRO xSize:REQ
+ LOCAL cSize
+ cSize = xSize
+ EXITM %cSize
+ENDM
+
+;----------------------------------------------------------------------------
+; Following Macro is defined for Cache Information
+;----------------------------------------------------------------------------
+
+@CACHE_INFO MACRO arglist:VARARG
+
+ LOCAL xCs, xIs, xTyp, xC
+ xC = 0
+ xTyp = 0
+ FOR arg, <arglist>
+ xC = xC+1
+ IF xC EQ 1
+ xCs = CACHE_SIZE(arg)
+ ENDIF
+ IF xC EQ 2
+ xIs = CACHE_SIZE(arg)
+ ENDIF
+ IF xC GT 2
+ xTyp = xTyp OR arg
+ ENDIF
+ ENDM
+ WORD xCs
+ WORD xIs
+ WORD xTyp
+ WORD xTyp
+ENDM
+
+;----------------------------------------------------------------------------
+; Following Macro is defined for Cache Operational Mode
+;----------------------------------------------------------------------------
+
+@CACHE_CFG MACRO arglist:VARARG
+
+ LOCAL xCfg
+ xCfg = 0
+ FOR arg, <arglist>
+ xCfg = xCfg OR arg
+ ENDM
+ WORD xCfg
+ENDM
+
+;----------------------------------------------------------------------------
+
+@EXT_CACHE_CFG MACRO arglist:VARARG
+
+ LOCAL xCfg
+ xCfg = 0
+ FOR arg, <arglist>
+ xCfg = xCfg OR arg OR CCL_EXTERNAL
+ ENDM
+ WORD xCfg
+ENDM
+
+;----------------------------------------------------------------------------
+; Following macro is defined for Cache Characteristics
+;----------------------------------------------------------------------------
+
+@CACHE_CHAR MACRO arglist:VARARG
+
+ LOCAL xCspeed, xErrCorrType, xSysCacheType, xAssoc, xC
+ xC = 0
+ FOR arg, <arglist>
+ xC = xC+1
+ IF xC EQ 1
+ xCspeed = CACHE_SPEED(arg)
+ ENDIF
+ IF xC EQ 2
+ xErrCorrType = arg
+ ENDIF
+ IF xC EQ 3
+ xSysCacheType = arg
+ ENDIF
+ IF xC EQ 4
+ xAssoc = arg
+ ENDIF
+ ENDM
+ BYTE xCspeed
+ BYTE xErrCorrType
+ BYTE xSysCacheType
+ BYTE xAssoc
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 8 : PORT CONNECTOR INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+DEFINE_EXT_CONNECTOR macro IntRefStr:REQ, IntConTyp:REQ, ExtRefStr:REQ, ExtConTyp:REQ, PortTyp:REQ
+
+ PORT_DEFINE_STRUC {\
+ 1,
+ IntConTyp,
+ 2,
+ ExtConTyp,
+ PortTyp\
+ }
+ PUT_STR IntRefStr
+ PUT_STR ExtRefStr
+ENDM
+
+;----------------------------------------------------------------------------
+
+DEFINE_INT_CONNECTOR macro IntRefStr:REQ, IntConTyp:REQ, PortTyp:REQ
+
+ PORT_DEFINE_STRUC {\
+ 1,
+ IntConTyp,
+ 0,
+ 0,
+ PortTyp\
+ }
+ PUT_STR IntRefStr
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 9 : SYSTEM SLOTS INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+SYSTEM_SLOT_CHAR1 MACRO
+
+ LOCAL SLOTCHAR1TYPE
+
+ SLOTCHAR1TYPE = 0
+
+
+IF SLC_CHAR_UNKNOWN
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 0)
+ENDIF
+
+IF SLC_CHAR_5VOLT
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 1)
+ENDIF
+
+IF SLC_CHAR_3_POINT_3VOLT
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 2)
+ENDIF
+
+IF SLC_CHAR_SHARE_SLOT
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 3)
+ENDIF
+
+IF SLC_CHAR_PCCARD16
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 4)
+ENDIF
+
+IF SLC_CHAR_CARDBUS
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 5)
+ENDIF
+
+IF SLC_CHAR_ZOOM_VIDEO
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 shl 6)
+ENDIF
+
+IF SLC_CHAR_MODEM_RING_RESUME
+ SLOTCHAR1TYPE = SLOTCHAR1TYPE OR (1 SHL 7)
+ENDIF
+
+ EXITM %SLOTCHAR1TYPE
+
+ENDM
+
+;----------------------------------------------------------------------------
+
+SYSTEM_SLOT_CHAR2 MACRO
+
+ LOCAL SLOTCHAR2TYPE
+ SLOTCHARTYPE2 = 1
+
+ IF SLOT_CHAR2_PME
+ SLOTCHAR2TYPE = SLTCHAR2TYPE OR (1 shl 0)
+ ENDIF
+
+ EXITM %SLOTCHAR2TYPE
+ENDM
+
+;----------------------------------------------------------------------------
+
+SYS_SLOT_CHAR MACRO arglist:VARARG
+
+ LOCAL xRet
+ xRet = 0
+ ;xRet = 1
+ FOR arg, <arglist>
+ xRet = xRet OR arg
+ ENDM
+
+ EXITM %xRet
+ENDM
+
+;----------------------------------------------------------------------------
+
+SYS_SLOT_INFO MACRO type, len, hndl, str, stype, busw, usage, slen, id, schar, seggrp, busn, devfn
+
+ SYSTEM_SLOT_INFO_STRUC {\
+ {type, len, hndl},
+ 1,
+ stype,
+ busw,
+ usage,
+ slen,
+ id,
+ LOW SYS_SLOT_CHAR(%schar),
+ HIGH SYS_SLOT_CHAR(%schar),
+ seggrp, busn, devfn\
+ }
+ PUT_STR %str
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 10 : ON-BOARD DEVICES INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 11 : OEM STRINGS INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 12 : SYSTEM CONFIGURATION INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 13 : BIOS LANGUAGE INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+
+BIOS_LANGUAGE_FLAG MACRO
+ LOCAL BIOSLANGFLAG
+ BIOSLANGFLAG= 0
+ BIOSLANGFLAG= BIOSLANGFLAG OR (ABBRIVIATED_FORMAT shl 1)
+
+ EXITM %BIOSLANGFLAG
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 14: GROUP ASSOCIATION INFORMATION
+;----------------------------------------------------------------------------
+
+SUB_GROUP_ASSOCIATION MACRO xHandle, xNum, xTyp, xSh, xAttrib
+
+ LOCAL length, xIh, hndl
+ length = (3*xNum)+5
+ xIh = xSh
+ hndl = xHandle
+ DMIHDR_STRUC {14h, length, hndl}
+ BYTE 1
+ REPEAT xNum
+ BYTE xTyp
+ WORD xIh
+ xIh = xIh+1
+ ENDM
+ SCAN_PUT_STR %xAttrib
+ TERMINATOR
+ hndl = hndl+1
+ EXITM %hndl
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 15: EVENT LOG INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 16: PHYSICAL MEMORY ARRAY INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 17: MEMORY DEVICE INFORMATION
+;----------------------------------------------------------------------------
+
+MEM_DEVICE_TYPE_DETAIL macro
+
+ LOCAL DEVICETYPEDETAIL, i
+ i = 55
+ DEVICETYPEDETAIL = 0
+
+IF MKF_MDT_OTHER
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 1)
+ENDIF
+
+IF MKF_MDT_UNKNOWN
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 2)
+ENDIF
+
+IF MKF_MDT_FASTPAGED
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 3)
+ENDIF
+
+IF MKF_MDT_STATIC_COLUMN
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 4)
+ENDIF
+
+IF MKF_MDT_PSEUDO_STATIC
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 5)
+ENDIF
+
+IF MKF_MDT_RAMBUS
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 6)
+ENDIF
+
+IF MKF_MDT_SYNCHRONOUS
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 7)
+ENDIF
+
+IF MKF_MDT_CMOS
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 8)
+ENDIF
+
+IF MKF_MDT_EDO
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 9)
+ENDIF
+
+IF MKF_MDT_WINDOWDRAM
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 10)
+ENDIF
+
+IF MKF_MDT_CACHEDRAM
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 11)
+ENDIF
+
+IF MKF_MDT_NONVOLATILE
+ DEVICETYPEDETAIL = DEVICETYPEDETAIL OR (1 shl 12)
+ENDIF
+
+ EXITM %DEVICETYPEDETAIL
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 18: MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 19: MEMORY ARRAY MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 20: MEMORY DEVICE MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 21: BUILT-IN POINTING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 22: PORTABLE BATTERY INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 23: SYSTEM RESET INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 24: HARDWARE SECURITY INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 25: SYSTEM POWER CONTROLS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 26: VOLTAGE PROBE INFORMATION
+;----------------------------------------------------------------------------
+
+VOLTAGE_PRO_INFO MACRO type, leng,hndl, str,LocationStatus, MaximumValue, MinimumValue, Resolution, Tolerance, Accuracy, OemDefined, NominalValue
+
+ VOLTAGE_PROBE_STRUC {\
+ {type, leng, hndl},
+ 1,
+ LocationStatus,
+ MaximumValue,
+ MinimumValue,
+ Resolution,
+ Tolerance,
+ Accuracy,
+ OemDefined,
+ NominalValue\
+ }
+ PUT_STR %str
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 27: COOLING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+
+COOLING_DEV_INFO MACRO type, leng,hndl,Tphndl, DeviceTypeandStatus, CoolingUnitGroup, OemDefined, NominalSpeed, Description
+
+ COOLING_DEVICE_STRUC {\
+ {type, leng, hndl},
+ Tphndl,
+ DeviceTypeandStatus,
+ CoolingUnitGroup,
+ OemDefined,
+ NominalSpeed,
+ Description\
+ }
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 28: TEMPERATURE PROBE INFORMATION
+;----------------------------------------------------------------------------
+
+TEMPERATURE_PRO_INFO MACRO type,leng,hndl,str,LS,MaxV,MinV,Rs,Tl,Acr,OD,NV
+
+ TEMPERATURE_PROBE_STRUC {\
+ {type, leng, hndl},
+ 01h,
+ LS,
+ MaxV,
+ MinV,
+ Rs,
+ Tl,
+ Acr,
+ OD,
+ NV\
+ }
+ PUT_STR %str
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 29: ELECTRICAL PROBE INFORMATION
+;----------------------------------------------------------------------------
+
+ELECTRICAL_PRO_INFO MACRO type, leng,hndl, str,LocationStatus, MaximumValue, MinimumValue, Resolution, Tolerance, Accuracy, OemDefined, NominalValue
+
+ ELECTRICAL_CURRENT_PROBE_STRUC {\
+ {type, leng, hndl},
+ 1,
+ LocationStatus,
+ MaximumValue,
+ MinimumValue,
+ Resolution,
+ Tolerance,
+ Accuracy,
+ OemDefined,
+ NominalValue\
+ }
+
+ PUT_STR %str
+
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 30: OUT-OF-BAND REMOTE ACCESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 31: BOOT INTEGRITY SERVICES ENTRY POINT INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 32: SYSTEM BOOT INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 33: 64-BIT MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 34: MANAGEMENT DEVICE INFORMATION
+;----------------------------------------------------------------------------
+
+MANAGEMENT_DEV_INFO MACRO type,leng,hndl,str,mtype,ma,mat
+
+ MANAGEMENT_DEVICE_STRUC {\
+ {type, leng, hndl},
+ 01h,
+ mtype,
+ ma,
+ mat\
+ }
+ PUT_STR %str
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 35: MANAGEMENT DEVICE COMPONENT INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+
+MANAGEMENT_DEV_THRESHOLD_INFO MACRO type,leng,hndl,lthnc,uthnc,lthc,uthc,lthnr,uthnr
+
+ MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC {\
+ {type,leng,hndl},
+ lthnc,
+ uthnc,
+ lthc,
+ uthc,
+ lthnr,
+ uthnr\
+ }
+ENDM
+
+;----------------------------------------------------------------------------
+; Structure Type 37: MEMORY CHANNEL INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 38 : IPMI DEVICE INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 39: SYSTEM POWER SUPPLY
+;----------------------------------------------------------------------------
+
+SYSTEM_POWER_SUPPLY_INFO MACRO type,leng,hndl,pug,str1,str2,str3,str4,str5,str6,str7,mpc,psc,ivph,cdh,icph
+
+ SYSTEM_POWER_SUPPLY_STRUC {\
+ {type,leng,hndl},
+ pug,
+ 01h,
+ 02h,
+ 03h,
+ 04h,
+ 05h,
+ 06h,
+ 07h,
+ mpc,
+ psc,
+ ivph,
+ cdh,
+ icph\
+ }
+ PUT_STR %str1
+ PUT_STR %str2
+ PUT_STR %str3
+ PUT_STR %str4
+ PUT_STR %str5
+ PUT_STR %str6
+ PUT_STR %str7
+ENDM
+
+;----------------------------------------------------------------------------
+; Following Macros defines Macros used in General
+;----------------------------------------------------------------------------
+
+TERMINATOR MACRO
+ db 0
+ENDM
+
+;----------------------------------------------------------------------------
+
+PUT_STR MACRO str
+ BYTE "&str",0
+ENDM
+
+;----------------------------------------------------------------------------
+
+@GET_VAL MACRO xVal
+ LOCAL xV
+ xV = xVal
+ EXITM %xV
+ENDM
+
+;----------------------------------------------------------------------------
+; Following Macro is defined for Scanning the string and remove
+; the null character and tabulation in a string
+;----------------------------------------------------------------------------
+
+SCAN_STR MACRO str
+
+ LOCAL xS, xOs, xTs
+ LOCAL xL, xT, xN, xW, xSsl
+
+ xOs TEXTEQU <str>
+ xS TEXTEQU <>
+ xL = @SIZESTR (%xOs)
+ xN = 1
+ xW = 0
+
+ WHILE xW EQ 0
+ xT = @INSTR (<%xN>, %xOs, < >)
+ IF xT EQ 0
+ xSsl = xL - xN + 1
+ xTs TEXTEQU @SUBSTR (%xOs, <%xN>, <%xSsl>)
+ xS TEXTEQU @CATSTR (%xS, %xTs)
+
+ xW = 1
+ ELSE
+ xS TEXTEQU @CATSTR (%xS, < >)
+ xN = xT + 1
+ ENDIF
+ ENDM
+ EXITM <xS>
+ENDM
+
+;----------------------------------------------------------------------------
+; This macro is defined for scaning and putting string
+;----------------------------------------------------------------------------
+
+SCAN_PUT_STR MACRO str
+
+ LOCAL xS
+ xS TEXTEQU <str>
+ xS TEXTEQU SCAN_STR(%xS)
+ PUT_STR %xS
+ENDM
+
+;----------------------------------------------------------------------------
+
+SCAN_PUT_STR1 MACRO str
+
+ LOCAL xS
+ xS TEXTEQU <str>
+ xS TEXTEQU (%xS)
+ PUT_STR %xS
+ENDM
+
+;----------------------------------------------------------------------------
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SMBSTRUC.DEF b/Board/EM/SMBIOS/SMBiosStaticData/SMBSTRUC.DEF
new file mode 100644
index 0000000..e03d21c
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SMBSTRUC.DEF
@@ -0,0 +1,793 @@
+ ECHO --Including: SMBSTRUC.DEF
+
+;----------------------------------------------------------------------------
+; Do not change any structure defination unless otherwise specified
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2013, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMBSTRUC.DEF 8 6/03/13 6:24p Davidd $
+;
+; $Revision: 8 $
+;
+; $Date: 6/03/13 6:24p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SMBSTRUC.DEF $
+;
+; 8 6/03/13 6:24p Davidd
+; [TAG] EIP125665
+; [Category] New Feature
+; [Description] Request to Support multiple instances of SMBIOS Type 3
+; structure (merge EIP106206 into Aptio 4)
+; [Files] Smbdata.mac
+; SmbiosStaticData.sdl
+; Smbstruc.def
+; Smbios.c
+; SmbiosDMIEditFunc.c
+; Smbios.h
+;
+; 7 5/29/13 12:49p Davidd
+; [TAG] EIP124735
+; [Category] Spec Update
+; [Severity] Normal
+; [Description] SMBIOS 2.8.0 specification support for Aptio 4
+; [Files] Smb.equ
+; Smbdata.mac
+; Smbdesc.def
+; Smbstruc.def
+; Smbios.c
+; Smbios.h
+; SmbiosDynamicData.h
+;
+; 6 10/08/10 8:16p Davidd
+; [TAG] EIP43278
+;
+; [Category] Function Request
+;
+; [Severity] Normal
+;
+; [Description] SMBIOS 2.7 requirement
+;
+; [Files] Include\Protocol\Smbios.h
+; Include\Protocol\SmbiosDynamicData.h
+; Board\EM\SMBIOS\SMBiosStaticData\SmbiosStaticData.sdl
+; Board\EM\SMBIOS\SMBiosStaticData\SMBDATA.MAC
+; Board\EM\SMBIOS\SMBiosStaticData\SMBSTRUC.DEF
+; Board\EM\SMBIOS\SMBiosStaticData\SMBMACRO.AID
+; Board\EM\SMBIOS\SMBiosStaticData\Smbdesc.def
+; Board\EM\SMBIOS\SMBiosStaticData\SMB.EQU
+;
+; 5 6/02/09 4:44p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 4 10/13/08 11:19a Davidd
+; Changes made to support SMBIOS specification v2.5 and v2.6
+;
+; 3 3/29/07 5:09p Davidd
+; Changed the year in the AMI banner.
+;
+; 2 12/15/06 5:31p Davidd
+; Code cleanup and reformatted to coding standard.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+; This file defines all SMBIOS Version 2.4 specification Data Stuructures
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+;Structure Header Format
+
+DMIHDR_STRUC STRUCT
+ bType BYTE ?
+ bLength BYTE ?
+ wHandle WORD ?
+DMIHDR_STRUC ENDS
+;----------------------------------------------------------------------------
+BIOSINFO_STRUC STRUCT ; 0
+ DMIHDR_STRUC {}
+ bVendor BYTE ?
+ bVerStrNum BYTE ?
+ wBiosStrtAddr WORD ?
+ bDate BYTE ?
+ bBiosSize BYTE ?
+ dBiosChar DWORD ?
+ dBiosChar1 DWORD ?
+ bExtByte BYTE ?
+ bExtByte2 BYTE ?
+ bBiosMajor BYTE ?
+ bBiosMinor BYTE ?
+ bEmbCtrlMajor BYTE ?
+ bEmbCtrlMinor BYTE ?
+BIOSINFO_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSINFO_STRUC STRUCT ; 1
+ DMIHDR_STRUC {}
+ bManufacturer BYTE ?
+ bProductName BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bUUID BYTE 16 dup (?)
+ bWakeType BYTE ?
+ bSkuNumber BYTE ?
+ bFamily BYTE ?
+SYSINFO_STRUC ENDS
+;----------------------------------------------------------------------------
+BASEBOARD_INFO_STRUC STRUCT ; 2
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bProduct BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssetTag BYTE ?
+ bFeatureFlags BYTE ?
+ bLocInChassis BYTE ?
+ wChassisHandle WORD ?
+ bBoardType BYTE ?
+ bNoOfObjectHndl BYTE ?
+BASEBOARD_INFO_STRUC ENDS
+
+BASEBOARD_INFO_SUB_STRUC STRUCT
+ wObjectHandle BYTE ?
+BASEBOARD_INFO_SUB_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSENC_STRUC STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bSKU BYTE ?
+SYSENC_STRUC ENDS
+
+SYSENC_STRUC_1 STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bContElement BYTE (MKF_ELEMENT_COUNT_1 * MKF_ELEMENT_LEN_1) dup (?)
+ bSKU BYTE ?
+SYSENC_STRUC_1 ENDS
+
+SYSENC_STRUC_2 STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bContElement BYTE (MKF_ELEMENT_COUNT_2 * MKF_ELEMENT_LEN_2) dup (?)
+ bSKU BYTE ?
+SYSENC_STRUC_2 ENDS
+
+SYSENC_STRUC_3 STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bContElement BYTE (MKF_ELEMENT_COUNT_3 * MKF_ELEMENT_LEN_3) dup (?)
+ bSKU BYTE ?
+SYSENC_STRUC_3 ENDS
+
+SYSENC_STRUC_4 STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bContElement BYTE (MKF_ELEMENT_COUNT_4 * MKF_ELEMENT_LEN_4) dup (?)
+ bSKU BYTE ?
+SYSENC_STRUC_4 ENDS
+
+SYSENC_STRUC_5 STRUCT ; 3
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bSYSENC_Type BYTE ?
+ bVersion BYTE ?
+ bSrNum BYTE ?
+ bAssTagNum BYTE ?
+ bBootState BYTE ?
+ bPwrState BYTE ?
+ bThermalState BYTE ?
+ bSecurityState BYTE ?
+ doemdefined DWORD ?
+ bHeight BYTE ?
+ bNoPwrCords BYTE ?
+ bNoContElements BYTE ?
+ bContElementLen BYTE ?
+ bContElement BYTE (MKF_ELEMENT_COUNT_5 * MKF_ELEMENT_LEN_5) dup (?)
+ bSKU BYTE ?
+SYSENC_STRUC_5 ENDS
+;----------------------------------------------------------------------------
+PROC_STRUC STRUCT ; 4
+ DMIHDR_STRUC {,,}
+ bSocketDesignation BYTE ?
+ bProcType BYTE ?
+ bProcFamily BYTE ?
+ bProcManufacturer BYTE ?
+ qProcID QWORD ?
+ bProcVersion BYTE ?
+ bVoltage BYTE ?
+ wExternalClock WORD ?
+ wMaxSpeed WORD ?
+ wCurrentSpeed WORD ?
+ bProcStatus BYTE ?
+ bProcUpgrade BYTE ?
+ wL1Cache WORD ?
+ wL2Cache WORD ?
+ wL3Cache WORD ?
+ bSerialNo BYTE ?
+ bAssetTag BYTE ?
+ bPartNo BYTE ?
+ bCoreCount BYTE ?
+ bCoreEnabled BYTE ?
+ bThreadCount BYTE ?
+ wProcessorChar WORD ?
+ wProcFamily2 WORD ?
+PROC_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMCTRL_STRUC STRUCT ; 5
+ DMIHDR_STRUC {,,}
+ bErrDetect BYTE ?
+ bEcc BYTE ?
+ bSupInterleave BYTE ?
+ bCurrentInterleave BYTE ?
+ bMaxMemSize BYTE ?
+ wSupSpeeds WORD ?
+ wSupMemTypes WORD ?
+ bMemModVolt BYTE ?
+ bSlotNum BYTE ?
+MEMCTRL_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMMOD_INFO_STRUC STRUCT ; 6
+ DMIHDR_STRUC {,,}
+ bSocDes BYTE ?
+ bBankCon BYTE ?
+ bCurrentSpd BYTE ?
+ wCurrentMemType WORD ?
+ bInstSize BYTE ?
+ bEnabledSize BYTE ?
+ bErrStatus BYTE ?
+MEMMOD_INFO_STRUC ENDS
+;----------------------------------------------------------------------------
+CACHE_INFO_STRUC STRUCT ; 7
+ DMIHDR_STRUC {,,}
+ bSocDes BYTE ?
+ wCacheConfig WORD ?
+ wMaxCacheSize WORD ?
+ wInstSize WORD ?
+ wSupType WORD ?
+ wCurrentType WORD ?
+ bCacheSpd BYTE ?
+ bErrType BYTE ?
+ bSysCacheType BYTE ?
+ bAssociativity BYTE ?
+CACHE_INFO_STRUC ENDS
+;----------------------------------------------------------------------------
+PORT_DEFINE_STRUC STRUCT ; 8
+ bInternalRefDes BYTE ?
+ bInternalConType BYTE ?
+ bExternalRefDes BYTE ?
+ bExternalConType BYTE ?
+ bPortType BYTE ?
+PORT_DEFINE_STRUC ENDS
+
+PORT_CONNECTOR_STRUC STRUCT
+ DMIHDR_STRUC {,,}
+ PORT_DEFINE_STRUC {}
+PORT_CONNECTOR_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSTEM_SLOT_INFO_STRUC STRUCT ; 9
+ DMIHDR_STRUC {,,}
+ bSlotDes BYTE ?
+ bSlotType BYTE ?
+ bSlotBusWidth BYTE ?
+ bCurrentUsage BYTE ?
+ bSlotLength BYTE ?
+ wSlotId WORD ?
+ bSlotChar1 BYTE ?
+ bSlotChar2 BYTE ?
+ wSegGroupNum WORD ?
+ bBusNum BYTE ?
+ bDevFuncNum BYTE ?
+SYSTEM_SLOT_INFO_STRUC ENDS
+;----------------------------------------------------------------------------
+ONBOARD_DEV_SUB_STRUC STRUCT ; 10
+ bDeviceType BYTE ?
+ bDescrStr BYTE ?
+ONBOARD_DEV_SUB_STRUC ENDS
+
+ONBOARD_DEVICE_STRUC STRUCT
+ DMIHDR_STRUC {,,}
+ ONBOARD_DEV_SUB_STRUC {,}
+ONBOARD_DEVICE_STRUC ENDS
+;----------------------------------------------------------------------------
+OEM_STRING_STRUC STRUCT ; 11
+ DMIHDR_STRUC {,,}
+ bCount BYTE ?
+OEM_STRING_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSTEM_CONFIG_OPT_STRUC STRUCT ; 12
+ DMIHDR_STRUC {,,}
+ bCount BYTE ?
+SYSTEM_CONFIG_OPT_STRUC ENDS
+;----------------------------------------------------------------------------
+RESERVED15_STRUC STRUCT
+ bRes0 BYTE ?
+ bRes1 BYTE ?
+ bRes2 BYTE ?
+ bRes3 BYTE ?
+ bRes4 BYTE ?
+ bRes5 BYTE ?
+ bRes6 BYTE ?
+ bRes7 BYTE ?
+ bRes8 BYTE ?
+ bRes9 BYTE ?
+ bRes10 BYTE ?
+ bRes11 BYTE ?
+ bRes12 BYTE ?
+ bRes13 BYTE ?
+ bRes14 BYTE ?
+RESERVED15_STRUC ENDS
+;----------------------------------------------------------------------------
+BIOS_LANGUAGE_INFO_STRUC STRUCT ; 13
+ DMIHDR_STRUC {,,}
+ bInstallableLang BYTE ?
+ bFlags BYTE ?
+ RESERVED15_STRUC {}
+ bCurrentLang BYTE ?
+BIOS_LANGUAGE_INFO_STRUC ENDS
+;----------------------------------------------------------------------------
+GROUP_ASSOC_STRUC STRUCT ; 14
+ DMIHDR_STRUC {,,}
+ bGroupName BYTE ?
+ bItemType BYTE ?
+ wItemHandle WORD ?
+GROUP_ASSOC_STRUC ENDS
+;----------------------------------------------------------------------------
+EVENTLOG_INFO_STRUC STRUCT ; 15
+ DMIHDR_STRUC {,,}
+ wLogAreaLength WORD ?
+ wLogHeaderOffset WORD ?
+ wLogDataOffset WORD ?
+ bAccessMethod BYTE ?
+ bLogStatus BYTE ?
+ dLogChangeToken DWORD ?
+ dAccessMethodAddress DWORD ?
+ bLogHeaderFormat BYTE ?
+ bSupportedLogTypeDesc BYTE ?
+ bSupportedLogTypeDescLength BYTE ?
+EVENTLOG_INFO_STRUC ENDS
+;----------------------------------------------------------------------------
+PHY_MEM_ARRAY_STRUC STRUCT ; 16
+ DMIHDR_STRUC {,,}
+ bLocation BYTE ?
+ bUse BYTE ?
+ bMemErrCorrection BYTE ?
+ dMaxCapacity DWORD ?
+ wMemErrInfoHandle WORD ?
+ wMemdevice WORD ?
+ qExtendedMaxCap QWORD ?
+PHY_MEM_ARRAY_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMORY_DEVICE_STRUC STRUCT ; 17
+ DMIHDR_STRUC {,,}
+ wMemoryArrayhandle WORD ?
+ wMemoryErrHandle WORD ?
+ wTotalWidth WORD ?
+ wDataWidth WORD ?
+ wSize WORD ?
+ bFormFactor BYTE ?
+ bDeviceSet BYTE ?
+ bDeviceLocator BYTE ?
+ bBankLocator BYTE ?
+ bMemoryType BYTE ?
+ wTypeDetail WORD ?
+ wMemDevSpeed WORD ?
+ bManufacturer BYTE ?
+ bSerialNumber BYTE ?
+ bAssetTag BYTE ?
+ bPartNumber BYTE ?
+ bAttributes BYTE ?
+ dExtendedSize DWORD ?
+ wConfigMemClkSpeed WORD ?
+ wMinimumVoltage WORD ?
+ wMaximumVoltage WORD ?
+ wConfiguredVoltage WORD ?
+MEMORY_DEVICE_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMORY_ARRAY_ERR_STRUC STRUCT ; 18
+ DMIHDR_STRUC {,,}
+ bErrtype BYTE ?
+ bErrGran BYTE ?
+ bErrOperation BYTE ?
+ dVendorSyndrome DWORD ?
+ dMemArrayErrAdd DWORD ?
+ dDevErrAdd DWORD ?
+ dErrResolution DWORD ?
+MEMORY_ARRAY_ERR_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMORY_ARRAY_MAPPED_ADDRESS_STRUC STRUCT ; 19
+ DMIHDR_STRUC {,,}
+ dStartingAddress DWORD ?
+ dEndingAddress DWORD ?
+ wMemoryArrayHandle WORD ?
+ bPartitionWidth BYTE ?
+ qExtendedStartingAddr QWORD ?
+ qExtendedEndingAddr QWORD ?
+MEMORY_ARRAY_MAPPED_ADDRESS_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMORY_DEVICE_MAPPED_ADDRESS_STRUC STRUCT ; 20
+ DMIHDR_STRUC {,,}
+ dStartingAddress DWORD ?
+ dEndingAddress DWORD ?
+ wMemoryDeviceHandle WORD ?
+ wMemoryArrayMappedHandle WORD ?
+ bPartitionRowPosition BYTE ?
+ bInterLeavePosition BYTE ?
+ bInterLeaveDataDepth BYTE ?
+ qExtendedStaringAddr QWORD ?
+ qExtendedEndingAddr QWORD ?
+MEMORY_DEVICE_MAPPED_ADDRESS_STRUC ENDS
+;----------------------------------------------------------------------------
+BUILTIN_POINT_DEV_STRUC STRUCT ; 21
+ DMIHDR_STRUC {,,}
+ bBlt_Type BYTE ?
+ bInterface BYTE ?
+ bButtonNum BYTE ?
+BUILTIN_POINT_DEV_STRUC ENDS
+;----------------------------------------------------------------------------
+PORTABLE_BATTERY_STRUC STRUCT ; 22
+ DMIHDR_STRUC {,,}
+ bLocation BYTE ?
+ bManufacturer BYTE ?
+ bManufactDate BYTE ?
+ bSrNum BYTE ?
+ bDevName BYTE ?
+ bDevChem BYTE ?
+ wDesignCapacity WORD ?
+ wDesignVoltage WORD ?
+ bSBDCVerNum BYTE ?
+ bMaxErrBattryData BYTE ?
+ wSBDSSrNumber WORD ?
+ wSBDSManufactureDate WORD ?
+ bSBDSDeviceChemistry BYTE ?
+ bDesignCapacityMul BYTE ?
+ dOEMSpecific DWORD ?
+PORTABLE_BATTERY_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSTEM_RESET_STRUC STRUCT ; 23
+ DMIHDR_STRUC {,,}
+ bCapabilities BYTE ?
+ wResetCount WORD ?
+ wResetLimit WORD ?
+ wTimeInterval WORD ?
+ wTimeOut WORD ?
+SYSTEM_RESET_STRUC ENDS
+;----------------------------------------------------------------------------
+HARDWARE_SECURITY_STRUC STRUCT ; 24
+ DMIHDR_STRUC {,,}
+ bHardwareSecuritySettings BYTE ?
+HARDWARE_SECURITY_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSTEM_POWER_CONTROLS_STRUC STRUCT ; 25
+ DMIHDR_STRUC {,,}
+ bNextSchPowerOnMonth BYTE ?
+ bNextSchPowerOnDayOfMonth BYTE ?
+ bNextSchPowerOnHour BYTE ?
+ bNextSchPowerOnMinute BYTE ?
+ bNextSchPowerOnSecond BYTE ?
+SYSTEM_POWER_CONTROLS_STRUC ENDS
+;----------------------------------------------------------------------------
+VOLTAGE_PROBE_STRUC STRUCT ; 26
+ DMIHDR_STRUC {,,}
+ bDescription BYTE ?
+ bLocationAndStatus BYTE ?
+ wMaximumValue WORD ?
+ wMinimumValue WORD ?
+ wResolution WORD ?
+ wTolerance WORD ?
+ wAccuracy WORD ?
+ dOEMDefined DWORD ?
+ wNominalValue WORD ?
+VOLTAGE_PROBE_STRUC ENDS
+;----------------------------------------------------------------------------
+COOLING_DEVICE_STRUC STRUCT ; 27
+ DMIHDR_STRUC {,,}
+ wTempProbeHandle WORD ?
+ bDeviceTypeAndStatus BYTE ?
+ bCoolingUnitGroup BYTE ?
+ dOEMDefinedGroup DWORD ?
+ wNominalSpeed WORD ?
+ bDescription BYTE ?
+COOLING_DEVICE_STRUC ENDS
+;----------------------------------------------------------------------------
+TEMPERATURE_PROBE_STRUC STRUCT ; 28
+ DMIHDR_STRUC {,,}
+ bTpdescription BYTE ?
+ bLocationAndStatus BYTE ?
+ wMaximumValue WORD ?
+ wMinimumValue WORD ?
+ wResolution WORD ?
+ wTolerence WORD ?
+ wAccuracy WORD ?
+ dOEMDefined DWORD ?
+ wNominalValue WORD ?
+TEMPERATURE_PROBE_STRUC ENDS
+;----------------------------------------------------------------------------
+ELECTRICAL_CURRENT_PROBE_STRUC STRUCT ; 29
+ DMIHDR_STRUC {,,}
+ bEpdescription BYTE ?
+ bLocationAndStatus BYTE ?
+ wMaximumValue WORD ?
+ wMinimumValue WORD ?
+ wResolution WORD ?
+ wTolerence WORD ?
+ wAccuracy WORD ?
+ dOEMDefined DWORD ?
+ wNominalValue WORD ?
+ELECTRICAL_CURRENT_PROBE_STRUC ENDS
+;----------------------------------------------------------------------------
+OUT_OF_BAND_REMOTE_ACCESS_STRUC STRUCT ; 30
+ DMIHDR_STRUC {,,}
+ bManufacturer BYTE ?
+ bConnections BYTE ?
+OUT_OF_BAND_REMOTE_ACCESS_STRUC ENDS
+;----------------------------------------------------------------------------
+BOOT_INTEGRITY_STRUC STRUCT ; 31
+ DMIHDR_STRUC {,,}
+ bChecksum BYTE ?
+ bReserved BYTE ?
+ wReserved WORD ?
+ dBISEntrySt DWORD ?
+ dBISEntryTt DWORD ?
+ qReserved QWORD ?
+ dReserved DWORD ?
+BOOT_INTEGRITY_STRUC ENDS
+;----------------------------------------------------------------------------
+SYS_BOOT_INFORMATION_STRUC STRUCT ; 32
+ DMIHDR_STRUC {,,}
+ bReserved BYTE 6 dup (0)
+ bBootStatus BYTE 10 dup (?)
+SYS_BOOT_INFORMATION_STRUC ENDS
+;----------------------------------------------------------------------------
+SIXTYFOUR_BIT_MEMORY_ARRAY_ERR_STRUC STRUCT ; 33
+ DMIHDR_STRUC {,,}
+ bErrtype BYTE ?
+ bErrGran BYTE ?
+ bErrOperation BYTE ?
+ dVendorSyndrome DWORD ?
+ qMemArrayErrAdd QWORD ?
+ qDevErrAdd QWORD ?
+ dErrResolution DWORD ?
+SIXTYFOUR_BIT_MEMORY_ARRAY_ERR_STRUC ENDS
+;----------------------------------------------------------------------------
+SIXTYFOUR_BIT_MEMORY_ARRAY_MAPPED_ADDRESS_STRUC STRUCT
+ DMIHDR_STRUC {,,}
+ qStartingAddress QWORD ?
+ qEndingAddress QWORD ?
+ wMemoryArrayHandle WORD ?
+ bPartionWidth BYTE ?
+SIXTYFOUR_BIT_MEMORY_ARRAY_MAPPED_ADDRESS_STRUC ENDS
+;----------------------------------------------------------------------------
+SIXTYFOUR_BIT_MEMORY_DEVICE_MAPPED_ADDRESS_STRUC STRUCT
+ DMIHDR_STRUC {,,}
+ qStartingAddress QWORD ?
+ qEndingAddress QWORD ?
+ wMemoryDeviceHandle WORD ?
+ wMemoryArrayMappedHandle WORD ?
+ bPartionRowPosition BYTE ?
+ bInterLeavePosition BYTE ?
+ bInterLeaveDataDepth BYTE ?
+SIXTYFOUR_BIT_MEMORY_DEVICE_MAPPED_ADDRESS_STRUC ENDS
+;----------------------------------------------------------------------------
+MANAGEMENT_DEVICE_STRUC STRUCT ; 34
+ DMIHDR_STRUC {,,}
+ bDescription BYTE ?
+ bManagementDevType BYTE ?
+ dAddress DWORD ?
+ bAddressType BYTE ?
+MANAGEMENT_DEVICE_STRUC ENDS
+;----------------------------------------------------------------------------
+MANAGEMENT_DEVICE_COMPONENT_STRUC STRUCT ; 35
+ DMIHDR_STRUC {,,}
+ bDescription BYTE ?
+ wManagementDevHandle WORD ?
+ wComponentHandle WORD ?
+ wThresholdHandle WORD ?
+MANAGEMENT_DEVICE_COMPONENT_STRUC ENDS
+;----------------------------------------------------------------------------
+MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC STRUCT ; 36
+ DMIHDR_STRUC {,,}
+ wLowerThresholdNonCritical WORD ?
+ wUpperThresholdNonCritical WORD ?
+ wLowerThresholdCritical WORD ?
+ wUpperThresholdCritical WORD ?
+ wLowerThresholdNonRecoverable WORD ?
+ wUpperThresholdNonRecoverable WORD ?
+MANAGEMENT_DEVICE_THRESHOLD_DATA_STRUC ENDS
+;----------------------------------------------------------------------------
+MEMORY_CHANNEL_STRUC STRUCT ; 37
+ DMIHDR_STRUC {,,}
+ bChannelType BYTE ?
+ bMaxChannelLoad BYTE ?
+ bMemDevCount BYTE ?
+MEMORY_CHANNEL_STRUC ENDS
+;----------------------------------------------------------------------------
+IPMI_DEVICE_INFORMATION_STRUC STRUCT ; 38
+ DMIHDR_STRUC {,,}
+ bInterfaceType BYTE ?
+ bIPMISpecRev BYTE ?
+ bI2CSlaveAddr BYTE ?
+ bNVStorageDeviceAddr BYTE ?
+ dBaseAddrLow DWORD ?
+ dBaseAddrHigh DWORD ?
+ bBaseAddrModIntInfo BYTE ?
+ bInterruptNumber BYTE ?
+IPMI_DEVICE_INFORMATION_STRUC ENDS
+;----------------------------------------------------------------------------
+SYSTEM_POWER_SUPPLY_STRUC STRUCT ; 39
+ DMIHDR_STRUC {,,}
+ bPowerUnitGroup BYTE ?
+ bLocation BYTE ?
+ bDeviceName BYTE ?
+ bManufacturer BYTE ?
+ bSerialNumber BYTE ?
+ bAssetTagNumber BYTE ?
+ bModelPartNumber BYTE ?
+ bRevisionLevel BYTE ?
+ wMaxCapacity WORD ?
+ wPowerSupplyChar WORD ?
+ wIpVoltageProbeHandle WORD ?
+ wCoolingDevHandle WORD ?
+ wIpCurrentProbeHandle WORD ?
+SYSTEM_POWER_SUPPLY_STRUC ENDS
+;----------------------------------------------------------------------------
+ADDITIONAL_INFO_STRUC STRUCT ; 40
+ DMIHDR_STRUC {,,}
+ bNumAdditionalInfoEntries BYTE ?
+ADDITIONAL_INFO_STRUC ENDS
+
+ADDITIONAL_INFO_ENTRY_STRUC STRUCT
+ bEntryLength BYTE ?
+ wRefHandle WORD ?
+ bRefOffset BYTE ?
+ bString BYTE ?
+ UNION
+ bValue BYTE ?
+ wValue WORD ?
+ dValue DWORD ?
+ ENDS
+ADDITIONAL_INFO_ENTRY_STRUC ENDS
+;----------------------------------------------------------------------------
+ONBOARD_DEVICE_EXTENDED_STRUC STRUCT ; 41
+ DMIHDR_STRUC {,,}
+ bRefDesignation BYTE ?
+ bDeviceType BYTE ?
+ bDeviceTypeInstance BYTE ?
+ wSegGroupNum WORD ?
+ bBusNum BYTE ?
+ bDevFuncNum BYTE ?
+ONBOARD_DEVICE_EXTENDED_STRUC ENDS
+;----------------------------------------------------------------------------
+INACTIVE_STRUC STRUCT ; 126
+ DMIHDR_STRUC {,,}
+INACTIVE_STRUC ENDS
+;----------------------------------------------------------------------------
+END_OF_TABLE_STRUC STRUCT ; 127
+ DMIHDR_STRUC {,,}
+END_OF_TABLE_STRUC ENDS
+
+;----------------------------------------------------------------------------
+; OEM DEFINED GPNV STRUCTURE
+;----------------------------------------------------------------------------
+OEM_GPNV_STRUC STRUCT
+ DMIHDR_STRUC {,,}
+ bAccessMethod BYTE ?
+ dAccessMethodAddress DWORD ?
+ wGPNVSize WORD ?
+ wNoOfDataIdDescriptor WORD ? ; #of dataid descritors present
+ ; for data id descriptor, see below
+OEM_GPNV_STRUC ENDS
+
+; details of the dataid descriptor
+DATAID_DESCRIPTOR_STRUC STRUCT
+ wDataId WORD ?
+ wHandle WORD ?
+ wSize WORD ?
+ wStartOffsetInGPNV WORD ?
+DATAID_DESCRIPTOR_STRUC ENDS
+
+;-----------------------------------------------------------------------;
+; INTEL ASF STRUCTURE
+;-----------------------------------------------------------------------;
+INTEL_ASF_STRUC STRUCT ; 129
+ DMIHDR_STRUC {,,}
+ bDescription BYTE ?
+ bStructVer BYTE ?
+ bStructID BYTE ?
+ bAttr BYTE ?
+INTEL_ASF_STRUC ENDS
+;----------------------------------------------------------------------------
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2013, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/Smbdesc.def b/Board/EM/SMBIOS/SMBiosStaticData/Smbdesc.def
new file mode 100644
index 0000000..c82ffec
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/Smbdesc.def
@@ -0,0 +1,2021 @@
+ ECHO --Including: SMBDESC.DEF
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/Smbdesc.def 24 4/07/16 5:55p Davidd $
+;
+; $Revision: 24 $
+;
+; $Date: 4/07/16 5:55p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/Smbdesc.def $
+;
+; 24 4/07/16 5:55p Davidd
+; [TAG] EIP231162
+; [Category] New Feature
+; [Description] Merge Aptio V Smbios -09 changes for Aptio 4
+; 4.6.5.5_SMBIOS_40 release
+; [Files] Smbios.sdl
+; SmbiosDynamicData.h
+; Smbios.h
+; SmbiosStaticData.sdl
+; SmbiosStaticData.asm
+; SmbData.mac
+; SmbMacro.aid
+; SmbDesc.def
+;
+; 23 2/17/15 1:09p Davidd
+; [TAG] EIP205509
+; [Category] Improvement
+; [Description] Merge Aptio V Smbios EIP193807, 193858, 196901 changes
+; into Aptio 4 Smbios
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbdesc.def
+;
+; 22 11/13/13 3:40p Davidd
+; [TAG] EIP143030
+; [Category] Improvement
+; [Description] Synchronize Aptio 4 Smbios with recent changes on Aptio
+; V Smbios for '4.6.5.1_SMBIOS_36' release
+; [Files] SmbiosStaticData.sdl
+; Smbdesc.def
+; SMBDATA.MAC
+;
+; 21 5/29/13 12:49p Davidd
+; [TAG] EIP124735
+; [Category] Spec Update
+; [Severity] Normal
+; [Description] SMBIOS 2.8.0 specification support for Aptio 4
+; [Files] Smb.equ
+; Smbdata.mac
+; Smbdesc.def
+; Smbstruc.def
+; Smbios.c
+; Smbios.h
+; SmbiosDynamicData.h
+;
+; 20 11/12/12 10:22a Davidd
+;
+; 19 9/13/12 12:12p Davidd
+; [TAG] EIP99388
+; [Category] Improvement
+; [Description] can not modified SMBIOS type 38 by
+; smbiosstaticdata.sdl
+; [Files] Smbdata.mac
+; Smbdesc.def
+;
+; 18 3/12/12 3:06p Davidd
+; [TAG] EIP82983
+; [Category] Improvement
+; [Description] Need Creating Tokens for Type1:UUID/Type11/Typ12/Type22
+; [Files] SmbiosStaticData.sdl
+; Smbdata.mac
+; Smbdesc.def
+;
+; 17 1/17/12 4:51p Davidd
+; [TAG] EIP78264
+; [Category] Improvement
+; [Description] SMBOS Type 2 (Spec 2.7.1) - No multiple type 2 support
+; [Files] Smbios.c
+; Smbios.h
+; Smbdata.mac
+; Smbdesc.def
+; SmbiosStaticData.sdl
+;
+; 16 2/09/11 10:35a Davidd
+; [TAG] EIP53081
+; [Category] Bug Fix
+; [Severity] Minor
+; [Symptom] Smbios Management Device (type 34) must be enabled in
+; order to
+; see System Power Supply (type 39)
+; [RootCause] Macro to create System Power Supply structure (type 39)
+; was grouped inside macro to create Smbios Management
+; Device
+; (type 34)
+; [Solution] Seperated Type 39 macro from 34.
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbmacro.aid
+; Smbdesc.def
+;
+; 15 10/08/10 8:16p Davidd
+; [TAG] EIP43278
+;
+; [Category] Function Request
+;
+; [Severity] Normal
+;
+; [Description] SMBIOS 2.7 requirement
+;
+; [Files] Include\Protocol\Smbios.h
+; Include\Protocol\SmbiosDynamicData.h
+; Board\EM\SMBIOS\SMBiosStaticData\SmbiosStaticData.sdl
+; Board\EM\SMBIOS\SMBiosStaticData\SMBDATA.MAC
+; Board\EM\SMBIOS\SMBiosStaticData\SMBSTRUC.DEF
+; Board\EM\SMBIOS\SMBiosStaticData\SMBMACRO.AID
+; Board\EM\SMBIOS\SMBiosStaticData\Smbdesc.def
+; Board\EM\SMBIOS\SMBiosStaticData\SMB.EQU
+;
+; 14 4/06/10 11:02a Davidd
+; Removed type 13 porting. Type 13 structure now is dynamically created
+; if enabled.
+;
+; 13 6/02/09 4:46p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 12 2/06/09 5:14p Davidd
+; Added some additional language entries for BIOS Language Information
+; structure type 13
+;
+; 11 2/03/09 2:52p Davidd
+; Moved Bios Language Information structure 13 porting info from
+; SmbiosStaticData.sdl to here.
+;
+; 10 10/27/08 2:48p Davidd
+; More changes for new type 40 and 41 support.
+;
+; 9 10/13/08 12:00p Davidd
+; Changes made to support SMBIOS specification v2.5 and v2.6
+;
+; 8 4/04/08 5:17p Davidd
+; Cleaned up and removed NUMBER_OF_MEM_MODULE_x definitions. Number of
+; memory sockets for each memory array are now defined in
+; Ax_MEMORY_SOCKETS SDL token.
+;
+; 7 2/22/08 10:30a Davidd
+; Simplified the way the number of memory slots for each physical memory
+; array are defined.
+;
+; 6 2/01/08 5:25p Davidd
+;
+; 6 2/01/08 12:06p Davidd
+; Added porting info for SMBIOS type 17 to support multi memory arrays.
+;
+; 5 12/19/07 12:09p Davidd
+;
+; 4 11/21/07 11:22a Davidd
+;
+; 4 11/21/07 11:18a Davidd
+; Static data porting for Memory Type 16, Pointing Device Type 21,
+; Portable Battery Type 22 have been moved from SmbiosStaticData.sdl to
+; here per customer request.
+;
+; 3 12/15/06 5:33p Davidd
+; Code cleanup and reformatted to coding standard.
+;
+; 1 5/24/06 11:59a Fasihm
+; Initial check-in for the Santa Rosa Project. (Matanzas CRB) with
+; Crestline + ICH8M + Merom Processor.
+;
+; 2 9/15/05 3:31p Mirk
+;
+; 1 8/16/05 11:21a Mirk
+;
+; 2 5/31/05 12:05p Davidd
+; Made changes for NAPA platform.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+; INCLUDE equates.equ
+;----------------------------------------------------------------------------
+
+;!!NOTE!!
+; This file is used to port the static information required in the SMBIOS
+; Structures.
+;
+; While porting this file, please refer SMB.EQU for Enumerated Values.
+;
+; To dynamically update any structure you can add link to 'SMBIOSPostInitTable'
+; Refer to any of the current links for implementation detail.
+
+;----------------------------------------------------------------------------
+; Structure Type 0 : BIOS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 1 : SYSTEM INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 2 : BASEBOARD INFORMATION
+;----------------------------------------------------------------------------
+; NOTE: For single board system (NUMBER_OF_BASEBOARDS = 1), for backward
+; compatibility, porting is done with SDL tokens in SmbiosStaticData.sdl.
+;
+; For multiple boards system (NUMBER_OF_BASEBOARDS > 1), porting is done
+; here instead.
+;
+; Syntax:
+; BASEBOARD_MANUFACTURER_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_PRODUCT_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_VERSION_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_SERIAL_NUMBER_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_ASSET_TAG_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_FEATURE_FLAG_1 DEFINE <01h>
+; * Baseboard Feature Flags -> Bit 0 = Hosting board (ex. motherboard)
+; Bit 1 = Board requires at least one daughter board
+; or auxiliary card to function properly
+; Bit 2 = Board is removable
+; Bit 3 = Board is replaceable
+; Bit 4 = Board is hot swappable
+; Bit 7-5 = Reserved
+; BASEBOARD_LOCATION_1 DEFINE <To be filled by O.E.M.>
+; BASEBOARD_TYPE_1 DEFINE <0Ah>
+; * Baseboard Board Type -> 01h = Unknown
+; 02h = Other
+; 03h = Server Blade
+; 04h = Connectivity Switch
+; 05h = System Management Module
+; 06h = Processor Module
+; 07h = I/O Module
+; 08h = Memory Module
+; 09h = Daughter Board
+; 0Ah = Motherboard (includes processor, memory, and I/O)
+; 0Bh = Processor/Memory Module
+; 0Ch = Processor/IO Module
+; 0Dh = Interconnect Board
+;----------------------------------------------------------------------------
+ BASEBOARD_MANUFACTURER_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_MANUFACTURER_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_MANUFACTURER_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_MANUFACTURER_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_MANUFACTURER_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_PRODUCT_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_PRODUCT_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_PRODUCT_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_PRODUCT_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_PRODUCT_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_VERSION_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_VERSION_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_VERSION_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_VERSION_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_VERSION_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_SERIAL_NUMBER_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_SERIAL_NUMBER_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_SERIAL_NUMBER_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_SERIAL_NUMBER_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_SERIAL_NUMBER_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_ASSET_TAG_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_ASSET_TAG_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_ASSET_TAG_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_ASSET_TAG_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_ASSET_TAG_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_FEATURE_FLAG_1 DEFINE <01h>
+ BASEBOARD_FEATURE_FLAG_2 DEFINE <01h>
+ BASEBOARD_FEATURE_FLAG_3 DEFINE <01h>
+ BASEBOARD_FEATURE_FLAG_4 DEFINE <01h>
+ BASEBOARD_FEATURE_FLAG_5 DEFINE <01h>
+
+ BASEBOARD_LOCATION_1 DEFINE <To be filled by O.E.M. 1>
+ BASEBOARD_LOCATION_2 DEFINE <To be filled by O.E.M. 2>
+ BASEBOARD_LOCATION_3 DEFINE <To be filled by O.E.M. 3>
+ BASEBOARD_LOCATION_4 DEFINE <To be filled by O.E.M. 4>
+ BASEBOARD_LOCATION_5 DEFINE <To be filled by O.E.M. 5>
+
+ BASEBOARD_TYPE_1 DEFINE <0Ah>
+ BASEBOARD_TYPE_2 DEFINE <0Ah>
+ BASEBOARD_TYPE_3 DEFINE <0Ah>
+ BASEBOARD_TYPE_4 DEFINE <0Ah>
+ BASEBOARD_TYPE_5 DEFINE <0Ah>
+
+;----------------------------------------------------------------------------
+; Structure Type 3 : SYSTEM ENCLOSURE OR CHASSIS
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 4 : PROCESSOR INFORMATION
+;----------------------------------------------------------------------------
+;
+; The processor information is defined in the following two macros
+; 1. PROCESSOR_INFO_n
+; 2. PROCESSOR_VOLTAGE_n
+; where n is the processor number
+; (n = 1,2,3,4... for system having support for 1,2,3,4... processors)
+;
+; Syntax of PROCESSOR_INFO_n macro
+; PROCESSOR_INFO_n DEFINE <String defining Slot, Maxm speed, Upgrade information>
+; where String defining Slot is a string
+; Maxm Speed is a number specifying speed in MHz
+;
+; PROCESSOR UPGRADE INFORMATION
+; Refer SMB.EQU file for Processor Upgrade information
+;
+; Syntax of PROCESSOR_VOLTAGE_n macro
+; PROCESSOR_VOLTAGE_n DEFINE <Format, List of Voltage capabilities>
+; Format can be either STANDARD or USER_DEFINED
+; If it is STANDARD, then the List of Voltage capabilities can have
+; more than one values e.g. VOLT_29 (2.9V), VOLT_33 (3.3V), etc.
+; If it is USER_DEFINED, then the List of Voltage capabilities can have
+; only one value and the value needs to be calculated according to the
+; following formula: Processor voltage * 10 i.e. if the processor
+; voltage is 2.9V, then this value should be 29 decimal or 13h
+; Select the number of processors supported in the motherboard.
+; note that the PROCESSOR_INFO_n and PROCESSOR_VOLTAGE_n macros are defined
+; for upto 4 processor. If the number of processors exceeds 4, then the
+; corresponding PROCESSOR_INFO_n and PROCESSOR_VOLTAGE_n macros need to
+; be defined accordingly
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ PROC_SOC_DESIG_1 DEFINE <CPU 1>
+ PROC_TYPE_1 DEFINE <CPU_CENTRAL_PROCESSOR>
+ PROC_FAMILY_1 DEFINE <FA_OTHER>
+ PROC_VOLTAGE_1 DEFINE <STANDARD, VOLT_33>
+ PROC_MAX_SPEED_1 DEFINE <0>
+ PROC_UPGRADE_1 DEFINE <UPG_OTHER>
+ PROC_SERIAL_NO_1 DEFINE <To Be Filled By O.E.M.>
+ PROC_ASSET_TAG_1 DEFINE <To Be Filled By O.E.M.>
+ PROC_PART_NO_1 DEFINE <To Be Filled By O.E.M.>
+ PROC_FAMILY_2_1 DEFINE <FA_OTHER>
+
+ PROC_SOC_DESIG_2 DEFINE <CPU 2>
+ PROC_TYPE_2 DEFINE <CPU_CENTRAL_PROCESSOR>
+ PROC_FAMILY_2 DEFINE <FA_OTHER>
+ PROC_VOLTAGE_2 DEFINE <STANDARD, VOLT_33>
+ PROC_MAX_SPEED_2 DEFINE <0>
+ PROC_UPGRADE_2 DEFINE <UPG_OTHER>
+ PROC_SERIAL_NO_2 DEFINE <To Be Filled By O.E.M.>
+ PROC_ASSET_TAG_2 DEFINE <To Be Filled By O.E.M.>
+ PROC_PART_NO_2 DEFINE <To Be Filled By O.E.M.>
+ PROC_FAMILY_2_2 DEFINE <FA_OTHER>
+
+ PROC_SOC_DESIG_3 DEFINE <CPU 3>
+ PROC_TYPE_3 DEFINE <CPU_CENTRAL_PROCESSOR>
+ PROC_FAMILY_3 DEFINE <FA_OTHER>
+ PROC_VOLTAGE_3 DEFINE <STANDARD, VOLT_33>
+ PROC_MAX_SPEED_3 DEFINE <0>
+ PROC_UPGRADE_3 DEFINE <UPG_OTHER>
+ PROC_SERIAL_NO_3 DEFINE <To Be Filled By O.E.M.>
+ PROC_ASSET_TAG_3 DEFINE <To Be Filled By O.E.M.>
+ PROC_PART_NO_3 DEFINE <To Be Filled By O.E.M.>
+ PROC_FAMILY_2_3 DEFINE <FA_OTHER>
+
+ PROC_SOC_DESIG_4 DEFINE <CPU 4>
+ PROC_TYPE_4 DEFINE <CPU_CENTRAL_PROCESSOR>
+ PROC_FAMILY_4 DEFINE <FA_OTHER>
+ PROC_VOLTAGE_4 DEFINE <STANDARD, VOLT_33>
+ PROC_MAX_SPEED_4 DEFINE <0>
+ PROC_UPGRADE_4 DEFINE <UPG_OTHER>
+ PROC_SERIAL_NO_4 DEFINE <To Be Filled By O.E.M.>
+ PROC_ASSET_TAG_4 DEFINE <To Be Filled By O.E.M.>
+ PROC_PART_NO_4 DEFINE <To Be Filled By O.E.M.>
+ PROC_FAMILY_2_4 DEFINE <FA_OTHER>
+
+;----------------------------------------------------------------------------
+; Structure Type 7: CACHE INFORMATION
+;----------------------------------------------------------------------------
+; Select the number of Caches present in the System. A value of 1 indicates
+; only L1 cache is present, a value of 2 indicates both L1 and L2 caches
+; are present, Note that these caches are internal or external to the processor.
+; The external cache (if present) is defined by EXTERNAL_CACHE_INFORMATION.
+;
+; Syntax:
+; PROCESSOR_CACHE_INFO_L1 <Maximum Cache Size, Installed Cache Size, Supported SRAM Type, Current SRAM Type>
+;
+; EXTERNAL_CACHE_INFO <Maximum Cache Size, Installed Cache Size, Supported SRAM Type, Current SRAM Type>
+;
+; * Maximum cache size and Installed cache size are WORD values.
+; Bit-15 = Granularity
+; 0/1 = granularity ios 1K/64K
+; Bit14-0 = Size
+; For example, 256k cahe can be represented as 256*1024 with granularity of 1K
+; OR as 8004h with granularity of 64k
+; * For Supported/Current SRAM Type refer to SMB.EQU File. It is described
+; in cache type equates
+;
+; Syntax:
+; PROCESSOR_CACHE_CONFIG_L1 <String, Operational Mode, Enable or Disabled at BOOT time,
+; Location relative to CPU, Socketed or Not Socketed, Cache Level Inoformation>
+;
+; EXTERNAL_CACHE_CFG <String, Operational Mode, Enable or Disabled at BOOT time, Location relative to CPU,
+; Socketed or Not Socketed, Cache Level Inoformation>
+;
+; * String -> This is a string describing the cache.
+; e.g. "L-1 Cache"
+; * Operational Mode -> Cache is Write back or write thru, etc...
+; For more detail search for cache operational mode
+; in Structure Type 7 details in SMB.EQU
+; * Cache Enbled/Disable -> (at Boot time)
+; For more detail search for Cache Enable or disable
+; in structure Type 7 details in SMB.EQU
+; * Location Relative to CPU -> Cache location is internal or external relative to CPU
+; For more detail search for Cache Location in
+; structure Type 7 details in SMB.EQU
+; * Cache Socketed/Not Socketed -> Cache is socketed or Not socketed
+; For more detail search for Cache socketed in structure
+; Type 7 details in SMB.EQU
+; * Cache Level Information -> L1, L2 etc...
+; For more detail search for level inofrmation in structure
+; Type 7 details in SMB.EQU
+; Syntax:
+; PROCESSOR_CACHE_CHAR_L1 <Cache speed, Error Correction Type, System Cache Type, Cache Associativity>
+;
+; EXTERNAL_CACHE_CHAR <Cache speed, Error Correction Type, System Cache Type, Cache Associativity>
+;
+; * Cache Speed -> Cache Module speed in ns(nano second)
+; the value is 0 if it is unknown
+; * Error Correction Type -> Single-bit, Multi-bit, etc...
+; For more detail search for Cache Error Correction in
+; structure Type-7 details in SMB.EQU
+; * System Cache Type -> Unified and etc...
+; For more detail search for System Cache Type in structure
+; Type-7 details in SMB.EQU
+; * Cache Associativity -> One-way, Two-way Associativity and etc..
+; For more detail search for Cache Associativity in structure
+; Type-7 details in SMB.EQU
+;----------------------------------------------------------------------------
+; Use MKF_NUMBER_OF_PROC_CACHE to get the No. of Processor Cache in the system.
+
+;!!PORT!!
+
+ PROC_CACHE_INFO_L1 DEFINE <0, 0, CH_UNKNOWN, CH_UNKNOWN>
+ PROC_CACHE_CFG_L1 DEFINE <L1-Cache, CACHE_DISABLED, COM_UNKNOWN, CCL_INTERNAL, CS_NOT_SOCKETED, CL_L1>
+ PROC_CACHE_CHAR_L1 DEFINE <0, SR_UNKNOWN, SCT_UNKNOWN, CA_UNKNOWN>
+
+ PROC_CACHE_INFO_L2 DEFINE <0, 0, CH_UNKNOWN, CH_UNKNOWN>
+ PROC_CACHE_CFG_L2 DEFINE <L2-Cache, CACHE_DISABLED, COM_UNKNOWN, CCL_INTERNAL, CS_NOT_SOCKETED, CL_L2>
+ PROC_CACHE_CHAR_L2 DEFINE <0, SR_UNKNOWN, SCT_UNKNOWN, CA_UNKNOWN>
+
+ PROC_CACHE_INFO_L3 DEFINE <0, 0, CH_UNKNOWN, CH_UNKNOWN>
+ PROC_CACHE_CFG_L3 DEFINE <L3-Cache, CACHE_DISABLED, COM_UNKNOWN, CCL_INTERNAL, CS_NOT_SOCKETED, CL_L3>
+ PROC_CACHE_CHAR_L3 DEFINE <0, SR_UNKNOWN, SCT_UNKNOWN, CA_UNKNOWN>
+
+ EXTERNAL_CACHE_INFO DEFINE <32*1024, 32*1024, 00, 00>
+ EXTERNAL_CACHE_CFG DEFINE <L2-Cache, 00, 00, 00, 00, CL_L2>
+ EXTERNAL_CACHE_CHAR DEFINE <40, 00, 00, 00>
+
+
+;----------------------------------------------------------------------------
+; Structure Type 8 : PORT CONNECTOR INFORMATION
+;----------------------------------------------------------------------------
+
+;<Internal_ref_designator, Internal_connector_type, External_ref_designator,
+; External_connector_type, Port_type>
+
+;!!PORT!!
+ EXT_CONNECTOR_1 DEFINE <J1A1,00H,PS2Mouse,0FH,0EH>
+ EXT_CONNECTOR_2 DEFINE <J1A1,00H,Keyboard,0FH,0DH>
+ EXT_CONNECTOR_3 DEFINE <J2A1,00H,TV Out,1DH,0FFH>
+ EXT_CONNECTOR_4 DEFINE <J2A2A,00H,COM A,08H,09H>
+ EXT_CONNECTOR_5 DEFINE <J2A2B,00H,Video,07H,1CH>
+ EXT_CONNECTOR_6 DEFINE <J3A1,00H,USB1,12H,10H>
+ EXT_CONNECTOR_7 DEFINE <J3A1,00H,USB2,12H,10H>
+ EXT_CONNECTOR_8 DEFINE <J3A1,00H,USB3,12H,10H>
+ EXT_CONNECTOR_9 DEFINE <J5A1,00H,LAN,0BH,1FH>
+ EXT_CONNECTOR_10 DEFINE <J5A1,00H,USB4,12H,10H>
+ EXT_CONNECTOR_11 DEFINE <J5A1,00H,USB5,12H,10H>
+
+;<Internal_ref_designator, Internal_connector_type, Internal_port_type>
+
+;!!PORT!!
+ INT_CONNECTOR_1 DEFINE <J9A1 - TPM HDR,0FFH,0FFH>
+ INT_CONNECTOR_2 DEFINE <J9C1 - PCIE DOCKING CONN,0FFH,0FFH>
+ INT_CONNECTOR_3 DEFINE <J2B3 - CPU FAN,0FFH,0FFH>
+ INT_CONNECTOR_4 DEFINE <J6C2 - EXT HDMI,0FFH,0FFH>
+ INT_CONNECTOR_5 DEFINE <J3C1 - GMCH FAN,0FFH,0FFH>
+ INT_CONNECTOR_6 DEFINE <J1D1 - ITP,0FFH,0FFH>
+ INT_CONNECTOR_7 DEFINE <J9E2 - MDC INTPSR,0FFH,0FFH>
+ INT_CONNECTOR_8 DEFINE <J9E4 - MDC INTPSR,0FFH,0FFH>
+ INT_CONNECTOR_9 DEFINE <J9E3 - LPC HOT DOCKING,0FFH,0FFH>
+ INT_CONNECTOR_10 DEFINE <J9E1 - SCAN MATRIX,0FFH,0FFH>
+ INT_CONNECTOR_11 DEFINE <J9G1 - LPC SIDE BAND,0FFH,0FFH>
+ INT_CONNECTOR_12 DEFINE <J8F1 - UNIFIED,0FFH,0FFH>
+ INT_CONNECTOR_13 DEFINE <J6F1 - LVDS,0FFH,0FFH>
+ INT_CONNECTOR_14 DEFINE <J2F1 - LAI FAN,0FFH,0FFH>
+ INT_CONNECTOR_15 DEFINE <J2G1 - GFX VID,0FFH,0FFH>
+ INT_CONNECTOR_16 DEFINE <J1G6 - AC JACK,0FFH,0FFH>
+ INT_CONNECTOR_17 DEFINE <J1G7 - BATT B,0FFH,0FFH>
+ INT_CONNECTOR_18 DEFINE <J1H1 - BATT A,0FFH,0FFH>
+ INT_CONNECTOR_19 DEFINE <J7H2 - SATA PWR,0FFH,0FFH>
+ INT_CONNECTOR_20 DEFINE <J7H1 - SATA PORT2,0FFH,0FFH>
+ INT_CONNECTOR_21 DEFINE <J7J3 - SATA PORT1,0FFH,0FFH>
+ INT_CONNECTOR_22 DEFINE <J8J1 - SATA PORT0,0FFH,0FFH>
+ INT_CONNECTOR_23 DEFINE <J7J4 - PATA,016H,0FFH>
+ INT_CONNECTOR_24 DEFINE <J7J5 - EMA,0FFH,0FFH>
+ INT_CONNECTOR_25 DEFINE <J4J1 - ATX PWR,0FFH,0FFH>
+ INT_CONNECTOR_26 DEFINE <J4J2 - PATA PWR,0FFH,0FFH>
+
+;----------------------------------------------------------------------------
+; Structure Type 9 : SYSTEM SLOT INFORMATION
+;----------------------------------------------------------------------------
+; The following information is needed only if SYS_SLOT_INFO = Present
+; Syntax:
+; SYSTEM_SLOT_INFO_1 DEFINE <String, Slot Type, Slot Data bus Width,
+; Slot usage, Slot length, Slot ID>
+; * String -> System Slot designator string.
+; e.g. "PCI1", "ISA1" etc..
+; * System Slot Type -> PCI, ISA, VESA, AGP, etc...
+; For more detail search for System Slot
+; Type equates in structure Type 9, refer SMB.EQU
+; * Slot Data Bus Width -> 8bit, 16bit etc..
+; For more detail search for System Slot Data Bus width
+; equates in structure Type 9, refer SMB.EQU
+; * Slot Usage -> Available, in use etc..
+; For more detail search for System Slot Usage
+; equates in structure TYPE 9 , refer SMB.EQU
+; This is a Bit-field value.
+; * Slot Length -> Half length, full length etc...
+; For more detail search for System Slot Length
+; equates in structure Type 9, refer SMB.EQU
+; * Slot ID -> The slot ID field provides a mechanism to
+; Correlate the physical attributes of the slot to
+; its logical access method
+;
+; * SYSTEM_SLOT_CHAR_1 DEFINE <Slot Characteristic 1, SlotCharacteristic 2>
+; Slot Characteristc 1 -> For more detail search for system slot
+; characteristic-1 in structure type 9, SMB.EQU
+; Slot Characteristc 2 -> For more detail search for system slot
+; characteristic-2 in structure type 9, SMB.EQU
+; * SEGGRP_BUS_DEV_FUNC_1 DEFINE <Segment Group Number, Bus Number, Device Function Number>
+; Segment Group Number -> Segment Group Number defined in the PCI Firmware Spec.
+; Bus Number -> Bus Number
+; Device Function Number -> Device / Function Number
+;----------------------------------------------------------------------------
+
+;!!NOTE!!
+; If AGP slot exists in the system then enter the AGP_BRIDGE_BUS_DEV_FUNC_NO in SMBIOS.SDL
+
+;!!PORT!!
+ SYSTEM_SLOT_INFO_1 DEFINE <J6B2, SYS_SLOT_PCIE, DBW_16X, SCU_IN_USE, SL_LONG_LENGTH, 0>
+ SYSTEM_SLOT_CHAR_1 DEFINE <SCH_33V, SCH_SHARED, SCH_PME>
+ SEGGRP_BUS_DEV_FUNC_1 DEFINE <0, 0, 8>
+
+ SYSTEM_SLOT_INFO_2 DEFINE <J6B1, SYS_SLOT_PCIE, DBW_1X, SCU_IN_USE, SL_SHORT_LENGTH, 1>
+ SYSTEM_SLOT_CHAR_2 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_2 DEFINE <0, 0, 0E3h>
+
+ SYSTEM_SLOT_INFO_3 DEFINE <J6D1, SYS_SLOT_PCIE, DBW_1X, SCU_IN_USE, SL_SHORT_LENGTH, 2>
+ SYSTEM_SLOT_CHAR_3 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_3 DEFINE <0, 0, 0E4h>
+
+ SYSTEM_SLOT_INFO_4 DEFINE <J7B1, SYS_SLOT_PCIE, DBW_1X, SCU_IN_USE, SL_SHORT_LENGTH, 3>
+ SYSTEM_SLOT_CHAR_4 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_4 DEFINE <0, 0, 0E5h>
+
+ SYSTEM_SLOT_INFO_5 DEFINE <J8B4, SYS_SLOT_PCIE, DBW_1X, SCU_IN_USE, SL_SHORT_LENGTH, 4>
+ SYSTEM_SLOT_CHAR_5 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_5 DEFINE <0, 0, 0E6h>
+
+ SYSTEM_SLOT_INFO_6 DEFINE <J8D1, SYS_SLOT_PCIE, DBW_1X, SCU_IN_USE, SL_SHORT_LENGTH, 5>
+ SYSTEM_SLOT_CHAR_6 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_6 DEFINE <0, 0, 0E7h>
+
+ SYSTEM_SLOT_INFO_7 DEFINE <J8B3, SYS_SLOT_PCI, DBW_32BIT, SCU_IN_USE, SL_SHORT_LENGTH, 6>
+ SYSTEM_SLOT_CHAR_7 DEFINE <SCH_33V, SCH_PME, SCH_SHARED>
+ SEGGRP_BUS_DEV_FUNC_7 DEFINE <0, 0, 0F0h>
+
+;----------------------------------------------------------------------------
+; Structure Type 10 : ON BOARD DEVICES INFORMATION
+;----------------------------------------------------------------------------
+; The following information is needed only if ONBOARD_DEVICE_INFO = Present
+; Syntax:
+; ONBOARD_DEVICE_1 DEFINE <Enabled or Disabled, Onboard Device Type, Descrition String>
+; * Onboard device status -> Describes the status(enabled/disabled) of on board device
+; * On board device Type -> Video, Audio, SCSI etc...
+; For more detail search for On-board device
+; Type equates in structure Type 10, refer SMB.EQU
+; * Description String -> Describes the on board device.
+; e.g."Video", "Audio" etc..
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ ONBOARD_DEVICE_1 DEFINE <ENABLED, OBD_VIDEO, To Be Filled By O.E.M.>
+ ONBOARD_DEVICE_2 DEFINE <ENABLED, OBD_ETHERNET,To Be Filled By O.E.M.>
+ ONBOARD_DEVICE_3 DEFINE <ENABLED, OBD_OTHER, Onboard 1394>
+
+;----------------------------------------------------------------------------
+; Structure Type 11 : OEM STRINGS INFORMATION
+;----------------------------------------------------------------------------
+; The following information is needed only if OEM_STRING_INFO = Present
+; Syntax:
+; OEM_STRING_1 DEFINE <String>
+; * String -> Identifies the OEM specific string.
+; e.g. "SMBIOS2.3 support with HP extension"
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+IFDEF MKF_OEM_STRING_INFO
+IF (MKF_OEM_STRING_INFO NE 0)
+ OEM_STRING_1 DEFINE MKF_OEM_STRING_1
+ OEM_STRING_2 DEFINE MKF_OEM_STRING_2
+ OEM_STRING_3 DEFINE MKF_OEM_STRING_3
+ OEM_STRING_4 DEFINE MKF_OEM_STRING_4
+ OEM_STRING_5 DEFINE MKF_OEM_STRING_5
+ OEM_STRING_6 DEFINE MKF_OEM_STRING_6
+ENDIF
+ENDIF
+
+;----------------------------------------------------------------------------
+; Structure Type 12 : SYSTEM CONFIGURATION STRINGS INFORMATION
+;----------------------------------------------------------------------------
+; The following information is needed only if SYSTEM_CONFIG_OPTION_INFO = Present
+; Syntax:
+; SYSTEM_CONFIG_STRING_1 DEFINE <String>
+; * String -> Identifies the System Configuration Information string
+; e.g. Jumper setting information on platform and etc...
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+;!!!!!!!!!!!!!!!! MAKE SURE THE DESCRIPTION DOES NOT EXCEED 64 CHARACTERS !!!!!!!!!!!!!!!!!!!!!!!!!!!
+;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+;; < 1 2 3 4 5 6 >
+;; <0123456789012345678901234567890123456789012345678901234567890123>
+IFDEF MKF_SYSTEM_CONFIG_OPTION_INFO
+IF (MKF_SYSTEM_CONFIG_OPTION_INFO NE 0)
+ SYSTEM_CONFIG_STRING_1 DEFINE MKF_SYSTEM_CONFIG_STRING_1
+ SYSTEM_CONFIG_STRING_2 DEFINE MKF_SYSTEM_CONFIG_STRING_2
+ SYSTEM_CONFIG_STRING_3 DEFINE MKF_SYSTEM_CONFIG_STRING_3
+ SYSTEM_CONFIG_STRING_4 DEFINE MKF_SYSTEM_CONFIG_STRING_4
+ SYSTEM_CONFIG_STRING_5 DEFINE MKF_SYSTEM_CONFIG_STRING_5
+ENDIF
+ENDIF
+
+;----------------------------------------------------------------------------
+; Structure Type 14: GROUP ASSOCIATION INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 15: EVENT LOG INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 16: PHYSICAL MEMORY ARRAY INFORMATION
+;----------------------------------------------------------------------------
+; Syntax:
+; ARRAY_LOC_1 DEFINE <Memory Array Location>
+; * Memory Array Location -> 01h = Other
+; 02h = Unknown
+; 03h = System Board or Motherboard
+; 04h = ISA add-on card
+; 05h = EISA add-on card
+; 06h = PCI add-on card
+; 07h = MCA add-on card
+; 08h = PCMCIA add-on card
+; 09h = Proprietary add-on card
+; 0Ah = NuBus
+; A0h = PC-98/C20 add-on card
+; A1h = PC-98/C24 add-on card
+; A2h = PC-98/E add-on card
+; A3h = PC-98/Local Bus add-on card
+; ARRAY_USE_1 DEFINE <Memory Array Use>
+; * Memory Array Use -> 01h = Other
+; 02h = Unknown
+; 03h = System memory
+; 04h = Video memory
+; 05h = Flash memory
+; 06h = Non-volatile RAM
+; 07h = Cache memory
+; ARRAY_ERROR_COR_1 DEFINE <Memory Array Error Corection Types>
+; * Memory Array Error Corection Types -> 01h = Other
+; 02h = Unknown
+; 03h = None
+; 04h = Parity
+; 05h = Single-bit ECC
+; 06h = Multi-bit ECC
+; 07h = CRC
+; MAX_MEM_CAP_1 DEFINE <Maximum Capacity>
+; * Maximum Capacity -> XXXXXXXXh = Maximum memory capacity in kilobytes
+; 80000000h = unknown
+; EXT_MAX_MEM_CAP_1 DEFINE <Extended Maximum Capacity> - Valid only when MAX_MEM_CAP_X = 80000000h
+; * Extended Maximum Capacity -> XXXXXXXXXXXXXXXXh = Maximum memory capacity in bytes
+; (when MAX_MEM_CAP_X = 80000000h)
+; 0h = When MAX_MEM_CAP_X <> 80000000h
+;----------------------------------------------------------------------------
+ ARRAY_LOC_1 DEFINE <03h>
+ ARRAY_LOC_2 DEFINE <03h>
+ ARRAY_LOC_3 DEFINE <03h>
+ ARRAY_LOC_4 DEFINE <03h>
+ ARRAY_LOC_5 DEFINE <03h>
+
+ ARRAY_USE_1 DEFINE <03h>
+ ARRAY_USE_2 DEFINE <03h>
+ ARRAY_USE_3 DEFINE <03h>
+ ARRAY_USE_4 DEFINE <03h>
+ ARRAY_USE_5 DEFINE <03h>
+
+ ARRAY_ERROR_COR_1 DEFINE <03h>
+ ARRAY_ERROR_COR_2 DEFINE <03h>
+ ARRAY_ERROR_COR_3 DEFINE <03h>
+ ARRAY_ERROR_COR_4 DEFINE <03h>
+ ARRAY_ERROR_COR_5 DEFINE <03h>
+
+ MAX_MEM_CAP_1 DEFINE <00800000h>
+ MAX_MEM_CAP_2 DEFINE <00800000h>
+ MAX_MEM_CAP_3 DEFINE <00800000h>
+ MAX_MEM_CAP_4 DEFINE <00800000h>
+ MAX_MEM_CAP_5 DEFINE <00800000h>
+
+ EXT_MAX_MEM_CAP_1 DEFINE <0>
+ EXT_MAX_MEM_CAP_2 DEFINE <0>
+ EXT_MAX_MEM_CAP_3 DEFINE <0>
+ EXT_MAX_MEM_CAP_4 DEFINE <0>
+ EXT_MAX_MEM_CAP_5 DEFINE <0>
+
+;----------------------------------------------------------------------------
+; Structure Type 17: MEMORY DEVICE INFORMATION
+;----------------------------------------------------------------------------
+; Syntax:
+; A1_DATAWIDTH -> Identifies the data width, in bits, of this
+; momory device
+;
+; A1_FORMFACTOR -> Byte value - identifies the form factor of this
+; memory device
+; 01h = Other
+; 02h = Unknown
+; 03h = SIMM
+; 04h = SIP
+; 05h = Chip
+; 06h = DIP
+; 07h = ZIP
+; 08h = Proprietary Card
+; 09h = DIMM
+; 0Ah = TSOP
+; 0Bh = Rows of chips
+; 0Ch = RIMM
+; 0Dh = SODIMM
+; 0Eh = SRIMM
+; 0Fh = FB-DIMM
+;
+; A1_MEMORYTYPE -> Identifies the type of memory used in this device
+; 01h = Other
+; 02h = Unknown
+; 03h = DRAM
+; 04h = EDRAM
+; 05h = VRAM
+; 06h = SRAM
+; 07h = RAM
+; 08h = ROM
+; 09h = FLASH
+; 0Ah = EEPROM
+; 0Bh = FEPROM
+; 0Ch = EPROM
+; 0Dh = CDRAM
+; 0Eh = 3DRAM
+; 0Fh = SDRAM
+; 10h = SGRAM
+; 11h = RDRAM
+; 12h = DDR
+; 13h = DDR2
+; 14h = DDR2 FB-DIMM
+; 18h = DDR3
+; 19h = FBD2
+;
+; A1_TYPEDETAIL -> Additional detail on the memory device type.
+; Multiple bits are set if more than one attributes applies
+; Bit 0 - Reserved, set to 0
+; Bit 1 - Other
+; Bit 2 - Unknown
+; Bit 3 - Fast-paged
+; Bit 4 - Static Column
+; Bit 5 - Pseudo-static
+; Bit 6 - RAMBUS
+; Bit 7 - Synchronous
+; Bit 8 - CMOS
+; Bit 9 - EDO
+; Bit 10 - Window DRAM
+; Bit 11 - Cache DRAM
+; Bit 12 - Non-volatile
+; Bit 13 - Registered (Buffered)
+; Bit 14 - Unbuffered (Unregistered)
+; Bit 15 - LRDIMM
+;
+; A1_ATTRIBUTES -> Attributes.
+; Bits 3-0: Rank (value = 0 for unknown)
+; Bits 7-4: Reserved
+;
+; A1_DEVICE_1 DEFINE <Device Locator String, Bank Locator String, Manufacturer String,
+; Serial Number String, Asset Tag String, Part Number String>
+;
+; * A1_DEVICE_1 Memory array #1, Device #1
+; * Device Locator String -> Identifies the physically-labeled socket or board position where
+; the memory device is located.
+; e.g."DIMM0"
+; * Bank Locator String -> Identifies the physically-labeled bank where the memory device is located.
+; e.g."BANK0"
+; * Manufacturer String -> Identifies the manufacturer of this memory device
+; * Serial Number String -> Identifies the serial number of this memory device
+; * Asset Tag String -> Identifies the Asset Tag String of this memory device
+; * Part Number String -> Identifies the part number of this memory device
+;----------------------------------------------------------------------------
+
+;Number of device info structurs are equal to the no of memory modules specified.
+;!!PORT!!
+
+; Memory Array #1
+ A1_DATAWIDTH EQU 0040h
+ A1_FORMFACTOR EQU 09h
+ A1_MEMORYTYPE EQU 13h
+ A1_TYPEDETAIL EQU 0080h
+ A1_ATTRIBUTES EQU 0
+
+ A1_DEVICE_1 DEFINE <A1_DIMM0,A1_BANK0,A1_Manufacturer0,A1_SerNum0,A1_AssetTagNum0,Array1_PartNumber0>
+ A1_DEVICE_2 DEFINE <A1_DIMM1,A1_BANK1,A1_Manufacturer1,A1_SerNum1,A1_AssetTagNum1,Array1_PartNumber1>
+ A1_DEVICE_3 DEFINE <A1_DIMM2,A1_BANK2,A1_Manufacturer2,A1_SerNum2,A1_AssetTagNum2,Array1_PartNumber2>
+ A1_DEVICE_4 DEFINE <A1_DIMM3,A1_BANK3,A1_Manufacturer3,A1_SerNum3,A1_AssetTagNum3,Array1_PartNumber3>
+ A1_DEVICE_5 DEFINE <A1_DIMM4,A1_BANK4,A1_Manufacturer4,A1_SerNum4,A1_AssetTagNum4,Array1_PartNumber4>
+ A1_DEVICE_6 DEFINE <A1_DIMM5,A1_BANK5,A1_Manufacturer5,A1_SerNum5,A1_AssetTagNum5,Array1_PartNumber5>
+ A1_DEVICE_7 DEFINE <A1_DIMM6,A1_BANK6,A1_Manufacturer6,A1_SerNum6,A1_AssetTagNum6,Array1_PartNumber6>
+ A1_DEVICE_8 DEFINE <A1_DIMM7,A1_BANK7,A1_Manufacturer7,A1_SerNum7,A1_AssetTagNum7,Array1_PartNumber7>
+ A1_DEVICE_9 DEFINE <A1_DIMM8,A1_BANK8,A1_Manufacturer8,A1_SerNum8,A1_AssetTagNum8,Array1_PartNumber8>
+ A1_DEVICE_10 DEFINE <A1_DIMM9,A1_BANK9,A1_Manufacturer9,A1_SerNum9,A1_AssetTagNum9,Array1_PartNumber9>
+ A1_DEVICE_11 DEFINE <A1_DIMM10,A1_BANK10,A1_Manufacturer10,A1_SerNum10,A1_AssetTagNum10,Array1_PartNumber10>
+ A1_DEVICE_12 DEFINE <A1_DIMM11,A1_BANK11,A1_Manufacturer11,A1_SerNum11,A1_AssetTagNum11,Array1_PartNumber11>
+ A1_DEVICE_13 DEFINE <A1_DIMM12,A1_BANK12,A1_Manufacturer12,A1_SerNum12,A1_AssetTagNum12,Array1_PartNumber12>
+ A1_DEVICE_14 DEFINE <A1_DIMM13,A1_BANK13,A1_Manufacturer13,A1_SerNum13,A1_AssetTagNum13,Array1_PartNumber13>
+ A1_DEVICE_15 DEFINE <A1_DIMM14,A1_BANK14,A1_Manufacturer14,A1_SerNum14,A1_AssetTagNum14,Array1_PartNumber14>
+ A1_DEVICE_16 DEFINE <A1_DIMM15,A1_BANK15,A1_Manufacturer15,A1_SerNum15,A1_AssetTagNum15,Array1_PartNumber15>
+ A1_DEVICE_17 DEFINE <A1_DIMM16,A1_BANK16,A1_Manufacturer16,A1_SerNum16,A1_AssetTagNum16,Array1_PartNumber16>
+ A1_DEVICE_18 DEFINE <A1_DIMM17,A1_BANK17,A1_Manufacturer17,A1_SerNum17,A1_AssetTagNum17,Array1_PartNumber17>
+ A1_DEVICE_19 DEFINE <A1_DIMM18,A1_BANK18,A1_Manufacturer18,A1_SerNum18,A1_AssetTagNum18,Array1_PartNumber18>
+ A1_DEVICE_20 DEFINE <A1_DIMM19,A1_BANK19,A1_Manufacturer19,A1_SerNum19,A1_AssetTagNum19,Array1_PartNumber19>
+ A1_DEVICE_21 DEFINE <A1_DIMM20,A1_BANK20,A1_Manufacturer20,A1_SerNum20,A1_AssetTagNum20,Array1_PartNumber20>
+ A1_DEVICE_22 DEFINE <A1_DIMM21,A1_BANK21,A1_Manufacturer21,A1_SerNum21,A1_AssetTagNum21,Array1_PartNumber21>
+ A1_DEVICE_23 DEFINE <A1_DIMM22,A1_BANK22,A1_Manufacturer22,A1_SerNum22,A1_AssetTagNum22,Array1_PartNumber22>
+ A1_DEVICE_24 DEFINE <A1_DIMM23,A1_BANK23,A1_Manufacturer23,A1_SerNum23,A1_AssetTagNum23,Array1_PartNumber23>
+ A1_DEVICE_25 DEFINE <A1_DIMM24,A1_BANK24,A1_Manufacturer24,A1_SerNum24,A1_AssetTagNum24,Array1_PartNumber24>
+ A1_DEVICE_26 DEFINE <A1_DIMM25,A1_BANK25,A1_Manufacturer25,A1_SerNum25,A1_AssetTagNum25,Array1_PartNumber25>
+ A1_DEVICE_27 DEFINE <A1_DIMM26,A1_BANK26,A1_Manufacturer26,A1_SerNum26,A1_AssetTagNum26,Array1_PartNumber26>
+ A1_DEVICE_28 DEFINE <A1_DIMM27,A1_BANK27,A1_Manufacturer27,A1_SerNum27,A1_AssetTagNum27,Array1_PartNumber27>
+ A1_DEVICE_29 DEFINE <A1_DIMM28,A1_BANK28,A1_Manufacturer28,A1_SerNum28,A1_AssetTagNum28,Array1_PartNumber28>
+ A1_DEVICE_30 DEFINE <A1_DIMM29,A1_BANK29,A1_Manufacturer29,A1_SerNum29,A1_AssetTagNum29,Array1_PartNumber29>
+ A1_DEVICE_31 DEFINE <A1_DIMM30,A1_BANK30,A1_Manufacturer30,A1_SerNum30,A1_AssetTagNum30,Array1_PartNumber30>
+ A1_DEVICE_32 DEFINE <A1_DIMM31,A1_BANK31,A1_Manufacturer31,A1_SerNum31,A1_AssetTagNum31,Array1_PartNumber31>
+
+; Memory Array #2
+ A2_DATAWIDTH EQU 0040h
+ A2_FORMFACTOR EQU 09h
+ A2_MEMORYTYPE EQU 13h
+ A2_TYPEDETAIL EQU 0080h
+ A2_ATTRIBUTES EQU 0
+
+ A2_DEVICE_1 DEFINE <A2_DIMM0,A2_BANK0,A2_Manufacturer0,A2_SerNum0,A2_AssetTagNum0,Array2_PartNumber0>
+ A2_DEVICE_2 DEFINE <A2_DIMM1,A2_BANK1,A2_Manufacturer1,A2_SerNum1,A2_AssetTagNum1,Array2_PartNumber1>
+ A2_DEVICE_3 DEFINE <A2_DIMM2,A2_BANK2,A2_Manufacturer2,A2_SerNum2,A2_AssetTagNum2,Array2_PartNumber2>
+ A2_DEVICE_4 DEFINE <A2_DIMM3,A2_BANK3,A2_Manufacturer3,A2_SerNum3,A2_AssetTagNum3,Array2_PartNumber3>
+ A2_DEVICE_5 DEFINE <A2_DIMM4,A2_BANK4,A2_Manufacturer4,A2_SerNum4,A2_AssetTagNum4,Array2_PartNumber4>
+ A2_DEVICE_6 DEFINE <A2_DIMM5,A2_BANK5,A2_Manufacturer5,A2_SerNum5,A2_AssetTagNum5,Array2_PartNumber5>
+ A2_DEVICE_7 DEFINE <A2_DIMM6,A2_BANK6,A2_Manufacturer6,A2_SerNum6,A2_AssetTagNum6,Array2_PartNumber6>
+ A2_DEVICE_8 DEFINE <A2_DIMM7,A2_BANK7,A2_Manufacturer7,A2_SerNum7,A2_AssetTagNum7,Array2_PartNumber7>
+ A2_DEVICE_9 DEFINE <A2_DIMM8,A2_BANK8,A2_Manufacturer8,A2_SerNum8,A2_AssetTagNum8,Array2_PartNumber8>
+ A2_DEVICE_10 DEFINE <A2_DIMM9,A2_BANK9,A2_Manufacturer9,A2_SerNum9,A2_AssetTagNum9,Array2_PartNumber9>
+ A2_DEVICE_11 DEFINE <A2_DIMM10,A2_BANK10,A2_Manufacturer10,A2_SerNum10,A2_AssetTagNum10,Array2_PartNumber10>
+ A2_DEVICE_12 DEFINE <A2_DIMM11,A2_BANK11,A2_Manufacturer11,A2_SerNum11,A2_AssetTagNum11,Array2_PartNumber11>
+ A2_DEVICE_13 DEFINE <A2_DIMM12,A2_BANK12,A2_Manufacturer12,A2_SerNum12,A2_AssetTagNum12,Array2_PartNumber12>
+ A2_DEVICE_14 DEFINE <A2_DIMM13,A2_BANK13,A2_Manufacturer13,A2_SerNum13,A2_AssetTagNum13,Array2_PartNumber13>
+ A2_DEVICE_15 DEFINE <A2_DIMM14,A2_BANK14,A2_Manufacturer14,A2_SerNum14,A2_AssetTagNum14,Array2_PartNumber14>
+ A2_DEVICE_16 DEFINE <A2_DIMM15,A2_BANK15,A2_Manufacturer15,A2_SerNum15,A2_AssetTagNum15,Array2_PartNumber15>
+ A2_DEVICE_17 DEFINE <A2_DIMM16,A2_BANK16,A2_Manufacturer16,A2_SerNum16,A2_AssetTagNum16,Array2_PartNumber16>
+ A2_DEVICE_18 DEFINE <A2_DIMM17,A2_BANK17,A2_Manufacturer17,A2_SerNum17,A2_AssetTagNum17,Array2_PartNumber17>
+ A2_DEVICE_19 DEFINE <A2_DIMM18,A2_BANK18,A2_Manufacturer18,A2_SerNum18,A2_AssetTagNum18,Array2_PartNumber18>
+ A2_DEVICE_20 DEFINE <A2_DIMM19,A2_BANK19,A2_Manufacturer19,A2_SerNum19,A2_AssetTagNum19,Array2_PartNumber19>
+ A2_DEVICE_21 DEFINE <A2_DIMM20,A2_BANK20,A2_Manufacturer20,A2_SerNum20,A2_AssetTagNum20,Array2_PartNumber20>
+ A2_DEVICE_22 DEFINE <A2_DIMM21,A2_BANK21,A2_Manufacturer21,A2_SerNum21,A2_AssetTagNum21,Array2_PartNumber21>
+ A2_DEVICE_23 DEFINE <A2_DIMM22,A2_BANK22,A2_Manufacturer22,A2_SerNum22,A2_AssetTagNum22,Array2_PartNumber22>
+ A2_DEVICE_24 DEFINE <A2_DIMM23,A2_BANK23,A2_Manufacturer23,A2_SerNum23,A2_AssetTagNum23,Array2_PartNumber23>
+ A2_DEVICE_25 DEFINE <A2_DIMM24,A2_BANK24,A2_Manufacturer24,A2_SerNum24,A2_AssetTagNum24,Array2_PartNumber24>
+ A2_DEVICE_26 DEFINE <A2_DIMM25,A2_BANK25,A2_Manufacturer25,A2_SerNum25,A2_AssetTagNum25,Array2_PartNumber25>
+ A2_DEVICE_27 DEFINE <A2_DIMM26,A2_BANK26,A2_Manufacturer26,A2_SerNum26,A2_AssetTagNum26,Array2_PartNumber26>
+ A2_DEVICE_28 DEFINE <A2_DIMM27,A2_BANK27,A2_Manufacturer27,A2_SerNum27,A2_AssetTagNum27,Array2_PartNumber27>
+ A2_DEVICE_29 DEFINE <A2_DIMM28,A2_BANK28,A2_Manufacturer28,A2_SerNum28,A2_AssetTagNum28,Array2_PartNumber28>
+ A2_DEVICE_30 DEFINE <A2_DIMM29,A2_BANK29,A2_Manufacturer29,A2_SerNum29,A2_AssetTagNum29,Array2_PartNumber29>
+ A2_DEVICE_31 DEFINE <A2_DIMM30,A2_BANK30,A2_Manufacturer30,A2_SerNum30,A2_AssetTagNum30,Array2_PartNumber30>
+ A2_DEVICE_32 DEFINE <A2_DIMM31,A2_BANK31,A2_Manufacturer31,A2_SerNum31,A2_AssetTagNum31,Array2_PartNumber31>
+
+; Memory Array #3
+ A3_DATAWIDTH EQU 0040h
+ A3_FORMFACTOR EQU 09h
+ A3_MEMORYTYPE EQU 13h
+ A3_TYPEDETAIL EQU 0080h
+ A3_ATTRIBUTES EQU 0
+
+ A3_DEVICE_1 DEFINE <A3_DIMM0,A3_BANK0,A3_Manufacturer0,A3_SerNum0,A3_AssetTagNum0,Array3_PartNumber0>
+ A3_DEVICE_2 DEFINE <A3_DIMM1,A3_BANK1,A3_Manufacturer1,A3_SerNum1,A3_AssetTagNum1,Array3_PartNumber1>
+ A3_DEVICE_3 DEFINE <A3_DIMM2,A3_BANK2,A3_Manufacturer2,A3_SerNum2,A3_AssetTagNum2,Array3_PartNumber2>
+ A3_DEVICE_4 DEFINE <A3_DIMM3,A3_BANK3,A3_Manufacturer3,A3_SerNum3,A3_AssetTagNum3,Array3_PartNumber3>
+ A3_DEVICE_5 DEFINE <A3_DIMM4,A3_BANK4,A3_Manufacturer4,A3_SerNum4,A3_AssetTagNum4,Array3_PartNumber4>
+ A3_DEVICE_6 DEFINE <A3_DIMM5,A3_BANK5,A3_Manufacturer5,A3_SerNum5,A3_AssetTagNum5,Array3_PartNumber5>
+ A3_DEVICE_7 DEFINE <A3_DIMM6,A3_BANK6,A3_Manufacturer6,A3_SerNum6,A3_AssetTagNum6,Array3_PartNumber6>
+ A3_DEVICE_8 DEFINE <A3_DIMM7,A3_BANK7,A3_Manufacturer7,A3_SerNum7,A3_AssetTagNum7,Array3_PartNumber7>
+ A3_DEVICE_9 DEFINE <A3_DIMM8,A3_BANK8,A3_Manufacturer8,A3_SerNum8,A3_AssetTagNum8,Array3_PartNumber8>
+ A3_DEVICE_10 DEFINE <A3_DIMM9,A3_BANK9,A3_Manufacturer9,A3_SerNum9,A3_AssetTagNum9,Array3_PartNumber9>
+ A3_DEVICE_11 DEFINE <A3_DIMM10,A3_BANK10,A3_Manufacturer10,A3_SerNum10,A3_AssetTagNum10,Array3_PartNumber10>
+ A3_DEVICE_12 DEFINE <A3_DIMM11,A3_BANK11,A3_Manufacturer11,A3_SerNum11,A3_AssetTagNum11,Array3_PartNumber11>
+ A3_DEVICE_13 DEFINE <A3_DIMM12,A3_BANK12,A3_Manufacturer12,A3_SerNum12,A3_AssetTagNum12,Array3_PartNumber12>
+ A3_DEVICE_14 DEFINE <A3_DIMM13,A3_BANK13,A3_Manufacturer13,A3_SerNum13,A3_AssetTagNum13,Array3_PartNumber13>
+ A3_DEVICE_15 DEFINE <A3_DIMM14,A3_BANK14,A3_Manufacturer14,A3_SerNum14,A3_AssetTagNum14,Array3_PartNumber14>
+ A3_DEVICE_16 DEFINE <A3_DIMM15,A3_BANK15,A3_Manufacturer15,A3_SerNum15,A3_AssetTagNum15,Array3_PartNumber15>
+ A3_DEVICE_17 DEFINE <A3_DIMM16,A3_BANK16,A3_Manufacturer16,A3_SerNum16,A3_AssetTagNum16,Array3_PartNumber16>
+ A3_DEVICE_18 DEFINE <A3_DIMM17,A3_BANK17,A3_Manufacturer17,A3_SerNum17,A3_AssetTagNum17,Array3_PartNumber17>
+ A3_DEVICE_19 DEFINE <A3_DIMM18,A3_BANK18,A3_Manufacturer18,A3_SerNum18,A3_AssetTagNum18,Array3_PartNumber18>
+ A3_DEVICE_20 DEFINE <A3_DIMM19,A3_BANK19,A3_Manufacturer19,A3_SerNum19,A3_AssetTagNum19,Array3_PartNumber19>
+ A3_DEVICE_21 DEFINE <A3_DIMM20,A3_BANK20,A3_Manufacturer20,A3_SerNum20,A3_AssetTagNum20,Array3_PartNumber20>
+ A3_DEVICE_22 DEFINE <A3_DIMM21,A3_BANK21,A3_Manufacturer21,A3_SerNum21,A3_AssetTagNum21,Array3_PartNumber21>
+ A3_DEVICE_23 DEFINE <A3_DIMM22,A3_BANK22,A3_Manufacturer22,A3_SerNum22,A3_AssetTagNum22,Array3_PartNumber22>
+ A3_DEVICE_24 DEFINE <A3_DIMM23,A3_BANK23,A3_Manufacturer23,A3_SerNum23,A3_AssetTagNum23,Array3_PartNumber23>
+ A3_DEVICE_25 DEFINE <A3_DIMM24,A3_BANK24,A3_Manufacturer24,A3_SerNum24,A3_AssetTagNum24,Array3_PartNumber24>
+ A3_DEVICE_26 DEFINE <A3_DIMM25,A3_BANK25,A3_Manufacturer25,A3_SerNum25,A3_AssetTagNum25,Array3_PartNumber25>
+ A3_DEVICE_27 DEFINE <A3_DIMM26,A3_BANK26,A3_Manufacturer26,A3_SerNum26,A3_AssetTagNum26,Array3_PartNumber26>
+ A3_DEVICE_28 DEFINE <A3_DIMM27,A3_BANK27,A3_Manufacturer27,A3_SerNum27,A3_AssetTagNum27,Array3_PartNumber27>
+ A3_DEVICE_29 DEFINE <A3_DIMM28,A3_BANK28,A3_Manufacturer28,A3_SerNum28,A3_AssetTagNum28,Array3_PartNumber28>
+ A3_DEVICE_30 DEFINE <A3_DIMM29,A3_BANK29,A3_Manufacturer29,A3_SerNum29,A3_AssetTagNum29,Array3_PartNumber29>
+ A3_DEVICE_31 DEFINE <A3_DIMM30,A3_BANK30,A3_Manufacturer30,A3_SerNum30,A3_AssetTagNum30,Array3_PartNumber30>
+ A3_DEVICE_32 DEFINE <A3_DIMM31,A3_BANK31,A3_Manufacturer31,A3_SerNum31,A3_AssetTagNum31,Array3_PartNumber31>
+
+; Memory Array #4
+ A4_DATAWIDTH EQU 0040h
+ A4_FORMFACTOR EQU 09h
+ A4_MEMORYTYPE EQU 13h
+ A4_TYPEDETAIL EQU 0080h
+ A4_ATTRIBUTES EQU 0
+
+ A4_DEVICE_1 DEFINE <A4_DIMM0,A4_BANK0,A4_Manufacturer0,A4_SerNum0,A4_AssetTagNum0,Array4_PartNumber0>
+ A4_DEVICE_2 DEFINE <A4_DIMM1,A4_BANK1,A4_Manufacturer1,A4_SerNum1,A4_AssetTagNum1,Array4_PartNumber1>
+ A4_DEVICE_3 DEFINE <A4_DIMM2,A4_BANK2,A4_Manufacturer2,A4_SerNum2,A4_AssetTagNum2,Array4_PartNumber2>
+ A4_DEVICE_4 DEFINE <A4_DIMM3,A4_BANK3,A4_Manufacturer3,A4_SerNum3,A4_AssetTagNum3,Array4_PartNumber3>
+ A4_DEVICE_5 DEFINE <A4_DIMM4,A4_BANK4,A4_Manufacturer4,A4_SerNum4,A4_AssetTagNum4,Array4_PartNumber4>
+ A4_DEVICE_6 DEFINE <A4_DIMM5,A4_BANK5,A4_Manufacturer5,A4_SerNum5,A4_AssetTagNum5,Array4_PartNumber5>
+ A4_DEVICE_7 DEFINE <A4_DIMM6,A4_BANK6,A4_Manufacturer6,A4_SerNum6,A4_AssetTagNum6,Array4_PartNumber6>
+ A4_DEVICE_8 DEFINE <A4_DIMM7,A4_BANK7,A4_Manufacturer7,A4_SerNum7,A4_AssetTagNum7,Array4_PartNumber7>
+ A4_DEVICE_9 DEFINE <A4_DIMM8,A4_BANK8,A4_Manufacturer8,A4_SerNum8,A4_AssetTagNum8,Array4_PartNumber8>
+ A4_DEVICE_10 DEFINE <A4_DIMM9,A4_BANK9,A4_Manufacturer9,A4_SerNum9,A4_AssetTagNum9,Array4_PartNumber9>
+ A4_DEVICE_11 DEFINE <A4_DIMM10,A4_BANK10,A4_Manufacturer10,A4_SerNum10,A4_AssetTagNum10,Array4_PartNumber10>
+ A4_DEVICE_12 DEFINE <A4_DIMM11,A4_BANK11,A4_Manufacturer11,A4_SerNum11,A4_AssetTagNum11,Array4_PartNumber11>
+ A4_DEVICE_13 DEFINE <A4_DIMM12,A4_BANK12,A4_Manufacturer12,A4_SerNum12,A4_AssetTagNum12,Array4_PartNumber12>
+ A4_DEVICE_14 DEFINE <A4_DIMM13,A4_BANK13,A4_Manufacturer13,A4_SerNum13,A4_AssetTagNum13,Array4_PartNumber13>
+ A4_DEVICE_15 DEFINE <A4_DIMM14,A4_BANK14,A4_Manufacturer14,A4_SerNum14,A4_AssetTagNum14,Array4_PartNumber14>
+ A4_DEVICE_16 DEFINE <A4_DIMM15,A4_BANK15,A4_Manufacturer15,A4_SerNum15,A4_AssetTagNum15,Array4_PartNumber15>
+ A4_DEVICE_17 DEFINE <A4_DIMM16,A4_BANK16,A4_Manufacturer16,A4_SerNum16,A4_AssetTagNum16,Array4_PartNumber16>
+ A4_DEVICE_18 DEFINE <A4_DIMM17,A4_BANK17,A4_Manufacturer17,A4_SerNum17,A4_AssetTagNum17,Array4_PartNumber17>
+ A4_DEVICE_19 DEFINE <A4_DIMM18,A4_BANK18,A4_Manufacturer18,A4_SerNum18,A4_AssetTagNum18,Array4_PartNumber18>
+ A4_DEVICE_20 DEFINE <A4_DIMM19,A4_BANK19,A4_Manufacturer19,A4_SerNum19,A4_AssetTagNum19,Array4_PartNumber19>
+ A4_DEVICE_21 DEFINE <A4_DIMM20,A4_BANK20,A4_Manufacturer20,A4_SerNum20,A4_AssetTagNum20,Array4_PartNumber20>
+ A4_DEVICE_22 DEFINE <A4_DIMM21,A4_BANK21,A4_Manufacturer21,A4_SerNum21,A4_AssetTagNum21,Array4_PartNumber21>
+ A4_DEVICE_23 DEFINE <A4_DIMM22,A4_BANK22,A4_Manufacturer22,A4_SerNum22,A4_AssetTagNum22,Array4_PartNumber22>
+ A4_DEVICE_24 DEFINE <A4_DIMM23,A4_BANK23,A4_Manufacturer23,A4_SerNum23,A4_AssetTagNum23,Array4_PartNumber23>
+ A4_DEVICE_25 DEFINE <A4_DIMM24,A4_BANK24,A4_Manufacturer24,A4_SerNum24,A4_AssetTagNum24,Array4_PartNumber24>
+ A4_DEVICE_26 DEFINE <A4_DIMM25,A4_BANK25,A4_Manufacturer25,A4_SerNum25,A4_AssetTagNum25,Array4_PartNumber25>
+ A4_DEVICE_27 DEFINE <A4_DIMM26,A4_BANK26,A4_Manufacturer26,A4_SerNum26,A4_AssetTagNum26,Array4_PartNumber26>
+ A4_DEVICE_28 DEFINE <A4_DIMM27,A4_BANK27,A4_Manufacturer27,A4_SerNum27,A4_AssetTagNum27,Array4_PartNumber27>
+ A4_DEVICE_29 DEFINE <A4_DIMM28,A4_BANK28,A4_Manufacturer28,A4_SerNum28,A4_AssetTagNum28,Array4_PartNumber28>
+ A4_DEVICE_30 DEFINE <A4_DIMM29,A4_BANK29,A4_Manufacturer29,A4_SerNum29,A4_AssetTagNum29,Array4_PartNumber29>
+ A4_DEVICE_31 DEFINE <A4_DIMM30,A4_BANK30,A4_Manufacturer30,A4_SerNum30,A4_AssetTagNum30,Array4_PartNumber30>
+ A4_DEVICE_32 DEFINE <A4_DIMM31,A4_BANK31,A4_Manufacturer31,A4_SerNum31,A4_AssetTagNum31,Array4_PartNumber31>
+
+;----------------------------------------------------------------------------
+; Structure Type 18: MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 19: MEMORY ARRAY MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 20: MEMORY DEVICE MAPPED ADDRESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 21: BUILT-IN POINTING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+; Syntax:
+; POINTING_DEVICE_TYPE_1 DEFINE <Pointing Device Type>
+; * Pointing Device Type -> 01h = Other
+; 02h = Unknown
+; 03h = Mouse
+; 04h = Track Ball
+; 05h = Track Point
+; 06h = Glide Point
+; 07h = Touch Pad
+; 08h = Touch Screen
+; 09h = Optical Sensor
+; POINTING_DEVICE_INTERFACE_1 DEFINE <Pointing Device Interface>
+; * Pointing Device Interface -> 01h = Other
+; 02h = Unknown
+; 03h = Serial
+; 04h = PS/2
+; 05h = Infrared
+; 06h = HP-HIL
+; 07h = Bus Mouse
+; 08h = ADB (Apple Desktop Bus)
+; A0h = Bus Mouse DB-9
+; A1h = Bus Mouse Micro-DIN
+; A2h = USB
+; POINTING_DEVICE_NUM_BUTTONS_1 DEFINE <Number of Buttons>
+;----------------------------------------------------------------------------
+ POINTING_DEVICE_TYPE_1 DEFINE <03h>
+ POINTING_DEVICE_TYPE_2 DEFINE <07h>
+ POINTING_DEVICE_TYPE_3 DEFINE <08h>
+ POINTING_DEVICE_TYPE_4 DEFINE <04h>
+ POINTING_DEVICE_TYPE_5 DEFINE <05h>
+
+ POINTING_DEVICE_INTERFACE_1 DEFINE <04h>
+ POINTING_DEVICE_INTERFACE_2 DEFINE <03h>
+ POINTING_DEVICE_INTERFACE_3 DEFINE <07h>
+ POINTING_DEVICE_INTERFACE_4 DEFINE <0A2h>
+ POINTING_DEVICE_INTERFACE_5 DEFINE <01h>
+
+ POINTING_DEVICE_NUM_BUTTONS_1 DEFINE <03h>
+ POINTING_DEVICE_NUM_BUTTONS_2 DEFINE <03h>
+ POINTING_DEVICE_NUM_BUTTONS_3 DEFINE <03h>
+ POINTING_DEVICE_NUM_BUTTONS_4 DEFINE <03h>
+ POINTING_DEVICE_NUM_BUTTONS_5 DEFINE <03h>
+
+;----------------------------------------------------------------------------
+; Structure Type 22: PORTABLE BATTERY INFORMATION
+;----------------------------------------------------------------------------
+; Syntax:
+; PORT_BAT_LOCATION_1 DEFINE <Location of the battery>
+; PORT_BAT_MANUFACTURER_1 DEFINE <Battery Manufacturer>
+; PORT_BAT_MANUFACTURE_DATE_1 DEFINE <Battery Manufacturer Date>
+; PORT_BAT_SERIAL_NUMBER_1 DEFINE <Battery Serial Number>
+; PORT_BAT_DEVICE_NAME_1 DEFINE <Battery Device Name>
+; DEVICE_CHEMISTRY_1 DEFINE <Battery Device Chemistry>
+; * Battery Device Chemistry -> 01h = Other
+; 02h = Unknown
+; 03h = Lead Acid
+; 04h = Nickel Cadmium
+; 05h = Nickel Metal Hydride
+; 06h = Lithium-ion
+; 07h = Zinc Air
+; 08h = Lithium Polymer
+; DESIGN_CAPACITY_1 DEFINE <Design Capacity of the Battery in mWatt-hours>
+; DESIGN_VOLTAGE_1 DEFINE <Design Voltage of the Battery in mVolts>
+; PORT_BAT_SBDS_VER_NO_1 DEFINE <Smart Battery Data Specification Version Number>
+; MAX_ERROR_IN_BAT_DATA_1 DEFINE <Maximum Error (as percentage in the range 0-100)>
+; PORT_BAT_SBDS_SERIAL_NO_1 DEFINE <16-bit value - Identifies battery's serial number>
+; PORT_BAT_SBDS_MAN_DATE_1 DEFINE <Cell Pack Manufacture Date>
+; * Cell Pack Manufacture Date -> Bits 15:9 Year, biased by 1980, in the range 0 to 127
+; Bits 8:5 Month, in the range 1 to 12
+; Bits 4:0 Date, in the range 1 to 31
+; PORT_BAT_SBDS_DEV_CHEM_1 DEFINE <Battery Chemistry>
+; DESIGN_CAPACITY_MULTIPLIER_1 DEFINE <Multiplication Factor of the Design Capacity>
+; OEM_SPECIFIC_1 DEFINE <OEM or BIOS Vendor-specific Information>
+;----------------------------------------------------------------------------
+IFDEF MKF_PORTABLE_BATTERY_INFO
+IF (MKF_PORTABLE_BATTERY_INFO NE 0)
+ PORT_BAT_LOCATION_1 DEFINE MKF_PORT_BAT_LOCATION_1
+ PORT_BAT_LOCATION_2 DEFINE MKF_PORT_BAT_LOCATION_2
+ PORT_BAT_LOCATION_3 DEFINE MKF_PORT_BAT_LOCATION_3
+ PORT_BAT_LOCATION_4 DEFINE MKF_PORT_BAT_LOCATION_4
+ PORT_BAT_LOCATION_5 DEFINE MKF_PORT_BAT_LOCATION_5
+
+ PORT_BAT_MANUFACTURER_1 DEFINE MKF_PORT_BAT_MANUFACTURER_1
+ PORT_BAT_MANUFACTURER_2 DEFINE MKF_PORT_BAT_MANUFACTURER_2
+ PORT_BAT_MANUFACTURER_3 DEFINE MKF_PORT_BAT_MANUFACTURER_3
+ PORT_BAT_MANUFACTURER_4 DEFINE MKF_PORT_BAT_MANUFACTURER_4
+ PORT_BAT_MANUFACTURER_5 DEFINE MKF_PORT_BAT_MANUFACTURER_5
+
+ PORT_BAT_MANUFACTURE_DATE_1 DEFINE MKF_PORT_BAT_MANUFACTURE_DATE_1
+ PORT_BAT_MANUFACTURE_DATE_2 DEFINE MKF_PORT_BAT_MANUFACTURE_DATE_2
+ PORT_BAT_MANUFACTURE_DATE_3 DEFINE MKF_PORT_BAT_MANUFACTURE_DATE_3
+ PORT_BAT_MANUFACTURE_DATE_4 DEFINE MKF_PORT_BAT_MANUFACTURE_DATE_4
+ PORT_BAT_MANUFACTURE_DATE_5 DEFINE MKF_PORT_BAT_MANUFACTURE_DATE_5
+
+ PORT_BAT_SERIAL_NUMBER_1 DEFINE MKF_PORT_BAT_SERIAL_NUMBER_1
+ PORT_BAT_SERIAL_NUMBER_2 DEFINE MKF_PORT_BAT_SERIAL_NUMBER_2
+ PORT_BAT_SERIAL_NUMBER_3 DEFINE MKF_PORT_BAT_SERIAL_NUMBER_3
+ PORT_BAT_SERIAL_NUMBER_4 DEFINE MKF_PORT_BAT_SERIAL_NUMBER_4
+ PORT_BAT_SERIAL_NUMBER_5 DEFINE MKF_PORT_BAT_SERIAL_NUMBER_5
+
+ PORT_BAT_DEVICE_NAME_1 DEFINE MKF_PORT_BAT_DEVICE_NAME_1
+ PORT_BAT_DEVICE_NAME_2 DEFINE MKF_PORT_BAT_DEVICE_NAME_2
+ PORT_BAT_DEVICE_NAME_3 DEFINE MKF_PORT_BAT_DEVICE_NAME_3
+ PORT_BAT_DEVICE_NAME_4 DEFINE MKF_PORT_BAT_DEVICE_NAME_4
+ PORT_BAT_DEVICE_NAME_5 DEFINE MKF_PORT_BAT_DEVICE_NAME_5
+
+ DEVICE_CHEMISTRY_1 DEFINE MKF_DEVICE_CHEMISTRY_1
+ DEVICE_CHEMISTRY_2 DEFINE MKF_DEVICE_CHEMISTRY_2
+ DEVICE_CHEMISTRY_3 DEFINE MKF_DEVICE_CHEMISTRY_3
+ DEVICE_CHEMISTRY_4 DEFINE MKF_DEVICE_CHEMISTRY_4
+ DEVICE_CHEMISTRY_5 DEFINE MKF_DEVICE_CHEMISTRY_5
+
+ DESIGN_CAPACITY_1 DEFINE MKF_DESIGN_CAPACITY_1
+ DESIGN_CAPACITY_2 DEFINE MKF_DESIGN_CAPACITY_2
+ DESIGN_CAPACITY_3 DEFINE MKF_DESIGN_CAPACITY_3
+ DESIGN_CAPACITY_4 DEFINE MKF_DESIGN_CAPACITY_4
+ DESIGN_CAPACITY_5 DEFINE MKF_DESIGN_CAPACITY_5
+
+ DESIGN_VOLTAGE_1 DEFINE MKF_DESIGN_VOLTAGE_1
+ DESIGN_VOLTAGE_2 DEFINE MKF_DESIGN_VOLTAGE_2
+ DESIGN_VOLTAGE_3 DEFINE MKF_DESIGN_VOLTAGE_3
+ DESIGN_VOLTAGE_4 DEFINE MKF_DESIGN_VOLTAGE_4
+ DESIGN_VOLTAGE_5 DEFINE MKF_DESIGN_VOLTAGE_5
+
+ PORT_BAT_SBDS_VER_NO_1 DEFINE MKF_PORT_BAT_SBDS_VER_NO_1
+ PORT_BAT_SBDS_VER_NO_2 DEFINE MKF_PORT_BAT_SBDS_VER_NO_2
+ PORT_BAT_SBDS_VER_NO_3 DEFINE MKF_PORT_BAT_SBDS_VER_NO_3
+ PORT_BAT_SBDS_VER_NO_4 DEFINE MKF_PORT_BAT_SBDS_VER_NO_4
+ PORT_BAT_SBDS_VER_NO_5 DEFINE MKF_PORT_BAT_SBDS_VER_NO_5
+
+ MAX_ERROR_IN_BAT_DATA_1 DEFINE MKF_MAX_ERROR_IN_BAT_DATA_1
+ MAX_ERROR_IN_BAT_DATA_2 DEFINE MKF_MAX_ERROR_IN_BAT_DATA_2
+ MAX_ERROR_IN_BAT_DATA_3 DEFINE MKF_MAX_ERROR_IN_BAT_DATA_3
+ MAX_ERROR_IN_BAT_DATA_4 DEFINE MKF_MAX_ERROR_IN_BAT_DATA_4
+ MAX_ERROR_IN_BAT_DATA_5 DEFINE MKF_MAX_ERROR_IN_BAT_DATA_5
+
+ PORT_BAT_SBDS_SERIAL_NO_1 DEFINE MKF_PORT_BAT_SBDS_SERIAL_NO_1
+ PORT_BAT_SBDS_SERIAL_NO_2 DEFINE MKF_PORT_BAT_SBDS_SERIAL_NO_2
+ PORT_BAT_SBDS_SERIAL_NO_3 DEFINE MKF_PORT_BAT_SBDS_SERIAL_NO_3
+ PORT_BAT_SBDS_SERIAL_NO_4 DEFINE MKF_PORT_BAT_SBDS_SERIAL_NO_4
+ PORT_BAT_SBDS_SERIAL_NO_5 DEFINE MKF_PORT_BAT_SBDS_SERIAL_NO_5
+
+ PORT_BAT_SBDS_MAN_DATE_1 DEFINE MKF_PORT_BAT_SBDS_MAN_DATE_1
+ PORT_BAT_SBDS_MAN_DATE_2 DEFINE MKF_PORT_BAT_SBDS_MAN_DATE_2
+ PORT_BAT_SBDS_MAN_DATE_3 DEFINE MKF_PORT_BAT_SBDS_MAN_DATE_3
+ PORT_BAT_SBDS_MAN_DATE_4 DEFINE MKF_PORT_BAT_SBDS_MAN_DATE_4
+ PORT_BAT_SBDS_MAN_DATE_5 DEFINE MKF_PORT_BAT_SBDS_MAN_DATE_5
+
+ PORT_BAT_SBDS_DEV_CHEM_1 DEFINE MKF_PORT_BAT_SBDS_DEV_CHEM_1
+ PORT_BAT_SBDS_DEV_CHEM_2 DEFINE MKF_PORT_BAT_SBDS_DEV_CHEM_2
+ PORT_BAT_SBDS_DEV_CHEM_3 DEFINE MKF_PORT_BAT_SBDS_DEV_CHEM_3
+ PORT_BAT_SBDS_DEV_CHEM_4 DEFINE MKF_PORT_BAT_SBDS_DEV_CHEM_4
+ PORT_BAT_SBDS_DEV_CHEM_5 DEFINE MKF_PORT_BAT_SBDS_DEV_CHEM_5
+
+ DESIGN_CAPACITY_MULTIPLIER_1 DEFINE MKF_DESIGN_CAPACITY_MULTIPLIER_1
+ DESIGN_CAPACITY_MULTIPLIER_2 DEFINE MKF_DESIGN_CAPACITY_MULTIPLIER_2
+ DESIGN_CAPACITY_MULTIPLIER_3 DEFINE MKF_DESIGN_CAPACITY_MULTIPLIER_3
+ DESIGN_CAPACITY_MULTIPLIER_4 DEFINE MKF_DESIGN_CAPACITY_MULTIPLIER_4
+ DESIGN_CAPACITY_MULTIPLIER_5 DEFINE MKF_DESIGN_CAPACITY_MULTIPLIER_5
+
+ OEM_SPECIFIC_1 DEFINE MKF_OEM_SPECIFIC_1
+ OEM_SPECIFIC_2 DEFINE MKF_OEM_SPECIFIC_2
+ OEM_SPECIFIC_3 DEFINE MKF_OEM_SPECIFIC_3
+ OEM_SPECIFIC_4 DEFINE MKF_OEM_SPECIFIC_4
+ OEM_SPECIFIC_5 DEFINE MKF_OEM_SPECIFIC_5
+ENDIF
+ENDIF
+
+;----------------------------------------------------------------------------
+; Structure Type 23: SYSTEM RESET INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; RESET_CAPABILITIES : Identifies the system reset capabilities for the system
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ RESET_CAPABILITIES = 00h
+
+;----------------------------------------------------------------------------
+; RESET_COUNT : Identifies the number of automatic system resets since
+; the last intentional reset
+; FFFFh -> Unknown
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ RESET_COUNT = 0FFFFh
+
+;----------------------------------------------------------------------------
+; RESET_LIMIT : Identifies the number of consecutive times the system
+; reset will be attempted
+; FFFFh -> Unknown
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ RESET_LIMIT = 0FFFFh
+
+;----------------------------------------------------------------------------
+; RESET_TIMER_INTERVAL : Identifies the number of minutes to use for the
+; watchdog timer. If the timer is not reset within this
+; interval, the system reset timeout will begin.
+; FFFFh -> Unknown
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ RESET_TIMER_INTERVAL = 0FFFFh
+
+;----------------------------------------------------------------------------
+; RESET_TIMEOUT : identifies the number of minutes before the reboot is
+; initiated. It is used after a system power cycle,
+; system reset(local or remote), and automatic system reset.
+; FFFFh -> Unknown
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ RESET_TIMEOUT = 0FFFFh
+
+;----------------------------------------------------------------------------
+; Structure Type 24: HARDWARE SECURITY INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 25: SYSTEM POWER CONTROLS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; NEXT_SCHEDULED_POWERON_MONTH : Contains the BCD value of the month on
+; which the next scheduled power-on is to occur
+; in the range of 01h to 12h.
+; Note: Any date or time field in the structure whose value is outside of
+; the field's specified range does not contribute to the total-seconds count.
+; e.g. if the month field contains the value 0xFF the next power-on is
+; scheduled to fall within the next month, perhaps on a specific
+; day-of-month and time.
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NEXT_SCHEDULED_POWERON_MONTH = 0FFh
+
+;----------------------------------------------------------------------------
+; NEXT_SCHEDULED_POWERON_DAY_OF_MONTH : Contains the BCD value of the day_of_month on
+; which the next scheduled power-on is to occur
+; in the range of 01h to 31h.
+; Note: Any date or time field in the structure whose value is outside of
+; the field's specified range does not contribute to the total-seconds count.
+; e.g. if the month field contains the value 0xFF the next power-on is
+; scheduled to fall within the next month, perhaps on a specific
+; day-of-month and time.
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NEXT_SCHEDULED_POWERON_DAY_OF_MONTH = 0FFh
+
+;----------------------------------------------------------------------------
+; NEXT_SCHEDULED_POWERON_HOUR : Contains the BCD value of the hour on
+; which the next scheduled power-on is to occur
+; in the range of 00h to 23h.
+; Note: Any date or time field in the structure whose value is outside of
+; the field's specified range does not contribute to the total-seconds count.
+; e.g. if the month field contains the value 0xFF the next power-on is
+; scheduled to fall within the next month, perhaps on a specific
+; day-of-month and time.
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NEXT_SCHEDULED_POWERON_HOUR = 0FFh
+
+;----------------------------------------------------------------------------
+; NEXT_SCHEDULED_POWERON_MINUTE : Contains the BCD value of the minute on
+; which the next scheduled power-on is to occur
+; in the range of 00h to 59h.
+; Note: Any date or time field in the structure whose value is outside of
+; the field's specified range does not contribute to the total-seconds count.
+; e.g. if the month field contains the value 0xFF the next power-on is
+; scheduled to fall within the next month, perhaps on a specific
+; day-of-month and time.
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NEXT_SCHEDULED_POWERON_MINUTE = 0FFh
+
+;----------------------------------------------------------------------------
+; NEXT_SCHEDULED_POWERON_SECOND : Contains the BCD value of the second on
+; which the next scheduled power-on is to occur
+; in the range of 00h to 59h.
+; Note: Any date or time field in the structure whose value is outside of
+; the field's specified range does not contribute to the total-seconds count.
+; e.g. if the month field contains the value 0xFF the next power-on is
+; scheduled to fall within the next month, perhaps on a specific
+; day-of-month and time.
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NEXT_SCHEDULED_POWERON_SECOND = 0FFh
+
+;----------------------------------------------------------------------------
+; Structure Type 26: VOLTAGE PROBE INFORMATION
+;----------------------------------------------------------------------------
+
+; Syntax:
+; VOLTAGE_PROBE_INFO_1 DEFINE <Voltage Probe String, Location
+; and status, Maximum Value,
+; Minimum Value, Resolution, Tolerance,
+; Accuracy, Oem Defined, Nominal Value>
+; * Voltage Probe String -> Identifies the descriptive information
+; about the probe or its location
+; e.g."LM78A"
+; * Location and Status -> Defines the probe's physical location
+; and status of the voltage monitored by this
+; voltage probe
+; * Maximum Value -> The max. voltage level readable by
+; this probe in millivolt 0x8000h -> Unknown
+; * Mimimum Value -> The Min. voltage level readable by
+; this probe in millivolt 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's
+; reading in tenths of millivolt 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this
+; probe, in +/- millivolts. 0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this
+; probe, in +/- 1/100th of a percent
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's
+; reading in millivolts. 0x8000h -> Unknown
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NUMBER_OF_VOLTAGE_PROBE_ASSOCIATED_MGMT_DEV_1 = 1
+ NUMBER_OF_VOLTAGE_PROBE_ASSOCIATED_MGMT_DEV_2 = 2
+ NUMBER_OF_VOLTAGE_PROBE_ASSOCIATED_MGMT_DEV_3 = 3
+
+;!!PORT!!
+ VOLTAGE_PROBE_INFO_1_1 DEFINE <LM78A,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_INFO_2_1 DEFINE <LM78B,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_INFO_2_2 DEFINE <LM78B,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_INFO_3_1 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_INFO_3_2 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_INFO_3_3 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;!!PORT!!
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_2_1 DEFINE <07,08,08,0Ah,0Bh,0Ch>
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_2_2 DEFINE <0Dh,0Eh,0Fh,10h,11h,12h>
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_3_1 DEFINE <13h,14h,15h,16h,17h,18h>
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_3_2 DEFINE <19h,02,03,04,05,06>
+ MANAGEMENT_DEV_VOLT_THRESHOLD_DATA_INFO_3_3 DEFINE <01,02,03,04,05,06>
+
+;----------------------------------------------------------------------------
+; Structure Type 27: COOLING DEVICE INFORMATION
+;----------------------------------------------------------------------------
+;Syntax:
+; COOLING_DEVICE_INFO_1 DEFINE <Device type and status, Cooling unit group,
+; Oem Defined, Nominal Value>
+; * Device type and Status -> Identifies the cooling device type
+; and status
+; * Cooling Unit Group -> Identifies the cooling unit group
+; to which this cooling device is associated.
+; Multiple cooling devices in the same cooling
+; unit implies a redudant configuration.
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the cooling device
+; speed in RPM. 0x8000h -> Unknown
+;Note: Nominal Value field is valid only if structure length is more than 0Ch
+;----------------------------------------------------------------------------
+; NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_1_1 = 2
+; This means Management Device number 1 and Temperature Probe Number 1 has
+; 2 cooling Device associated.
+
+;!!PORT!!
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_1_1 = 2
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_2_1 = 1
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_2_2 = 1
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_3_1 = 1
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_3_2 = 1
+ NUMBER_OF_COOLING_DEVICE_ASSOCIATED_TEMP_PROBE_3_3 = 1
+
+;----------------------------------------------------------------------------
+; Syntax :
+; COOLING_DEVICE_INFO_1_1_1 DEFINE <012h,01h,00000000h,08000h,> No Description string
+; COOLING_DEVICE_INFO_1_1_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 1> With Description string
+; This means Cooling device info_1st Mangement Device_1st Temperature Probe_1st Cooling Device
+; COOLING_DEVICE_INFO_1_1_2 DEFINE <012h,01h,00000000h,08000h>
+; This means Cooling Device Info_1st Mangement Device_1st Temperature Probe_2nd Cooling Device no.2
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ COOLING_DEVICE_INFO_1_1_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 1>
+ COOLING_DEVICE_INFO_1_1_2 DEFINE <012h,01h,00000000h,08000h,> ;No Description string
+ COOLING_DEVICE_INFO_2_1_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 2>
+ COOLING_DEVICE_INFO_2_2_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 3>
+ COOLING_DEVICE_INFO_3_1_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 4>
+ COOLING_DEVICE_INFO_3_2_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 5>
+ COOLING_DEVICE_INFO_3_3_1 DEFINE <012h,01h,00000000h,08000h,Cooling Dev 6>
+
+;----------------------------------------------------------------------------
+; Syntax :
+; MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_1_1_1 DEFINE <01,02,03,04,05,06>
+; This means Managemnt Device Info 1_Temperature Probe 1_Cooling Device Threshold 1
+; MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_1_1_2 DEFINE <01,02,03,04,05,06>
+; This means Managemnt Device Info 1_Temperature Probe 1_Cooling Device Threshold 2
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_1_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_1_1_2 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_2_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_2_2_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_3_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_3_2_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_COOL_THRESHOLD_DATA_INFO_3_3_1 DEFINE <01,02,03,04,05,06>
+
+;----------------------------------------------------------------------------
+; Structure Type 28: TEMPERATURE PROBE INFORMATION
+;----------------------------------------------------------------------------
+;
+; Syntax:
+; TEMPERATURE_PROBE_INFO_1 DEFINE <Tempature Probe String, Location
+; and status, Maximum Value,
+; Minimum Value, Resolution, Tolerance,
+; Accuracy, Oem Defined, Nominal Value>
+; * Voltage Probe String -> Identifies the descriptive information
+; about the probe or its location
+; e.g."LM78A"
+; * Location and Status -> Defines the probe's physical location
+; and status of the tempature monitored by this
+; tempature probe
+; * Maximum Value -> The max. tempature readable by
+; this probe in 1/10th degree C. 0x8000h -> Unknown
+; * Mimimum Value -> The Min. tempature readable by
+; this probe in 1/10th degree C. 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's
+; reading in 1/1000th degree C. 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this
+; probe, in +/- 1/10th degree C.0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this
+; probe, in +/- 1/100th of a percent
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's
+; reading in 1/10th degree C. 0x8000h -> Unknown
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ NUMBER_OF_TEMPERATURE_PROBE_ASSOCIATED_MGMT_DEV_1 = 1
+ NUMBER_OF_TEMPERATURE_PROBE_ASSOCIATED_MGMT_DEV_2 = 2
+ NUMBER_OF_TEMPERATURE_PROBE_ASSOCIATED_MGMT_DEV_3 = 3
+
+;!!PORT!!
+ TEMPERATURE_PROBE_INFO_1_1 DEFINE <LM78A,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ TEMPERATURE_PROBE_INFO_2_1 DEFINE <LM78B,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ TEMPERATURE_PROBE_INFO_2_2 DEFINE <LM78B,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;!!PORT!!
+ TEMPERATURE_PROBE_INFO_3_1 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ TEMPERATURE_PROBE_INFO_3_2 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ TEMPERATURE_PROBE_INFO_3_3 DEFINE <LM78C,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;!!PORT!!
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_2_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_2_2 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_3_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_3_2 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_TEMP_THRESHOLD_DATA_INFO_3_3 DEFINE <01,02,03,04,05,06>
+
+;----------------------------------------------------------------------------
+; Structure Type 29: ELECTRICAL PROBE INFORMATION
+;----------------------------------------------------------------------------
+;
+; Syntax :
+; ELECTRICAL_PROBE_INFO_1 <Electrical Probe String, Location and status, Maximum Value, Minimum Value,
+; Resolution, Tolerance, Accuracy, Oem Defined, Nominal Value>
+; * Electrical Probe String -> Identifies the descriptive information about the probe or its location.
+; e.g."ABC"
+; * Location and Status -> Defines the probe's physical location and status of the current
+; monitored by this electrical probe
+; * Maximum Value -> The max. current readable by this probe in milliamps. 0x8000h -> Unknown
+; * Mimimum Value -> The Min. current readable by this probe in milliamps. 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's reading in thenths of a milliamps.
+; 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this probe, in +/- milliamps.
+; 0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this probe, in +/- 1/100th of a percent.
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's reading in milliamps.
+; 0x8000h -> Unknown
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+;!!PORT!!
+ NUMBER_OF_ELECTRICAL_PROBE_ASSOCIATED_MGMT_DEV_1 = 1
+ NUMBER_OF_ELECTRICAL_PROBE_ASSOCIATED_MGMT_DEV_2 = 2
+ NUMBER_OF_ELECTRICAL_PROBE_ASSOCIATED_MGMT_DEV_3 = 3
+
+;!!PORT!!
+ ELECTRICAL_PROBE_INFO_1_1 DEFINE <ABC,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_INFO_2_1 DEFINE <DEF,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_INFO_2_2 DEFINE <GHI,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_INFO_3_1 DEFINE <ABC,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_INFO_3_2 DEFINE <DEF,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_INFO_3_3 DEFINE <GHI,0,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;!!PORT!!
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_1_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_2_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_2_2 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_3_1 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_3_2 DEFINE <01,02,03,04,05,06>
+ MANAGEMENT_DEV_ELEC_THRESHOLD_DATA_INFO_3_3 DEFINE <01,02,03,04,05,06>
+
+;----------------------------------------------------------------------------
+; Structure Type 30: OUT-OF-BAND REMOTE ACCESS INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 32: SYSTEM BOOT INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 33: 64-BIT MEMORY ERROR INFORMATION
+;----------------------------------------------------------------------------
+; Note: For more detail refer TYPE 18 (MEMORY ERROR INFORMATION) in this
+; file and SMB.EQU
+; In Case of 64 Bit Memory Error support following 2 fields are changed to Qword
+;----------------------------------------------------------------------------
+;!!PORT!!
+ MEM_ARR_ERR_ADD equ 8000000000000000h
+ DEV_ERR_ADD equ 8000000000000000h
+
+;----------------------------------------------------------------------------
+; Structure Type 34: MANAGEMENT DEVICE INFORMATION
+;----------------------------------------------------------------------------
+; * Device String -> Identifies string information about device
+; * Device Type -> Identifies the Device Type, for
+; more detail search for Management
+; Device Type,refer SMB.EQU
+; * Device Address -> Defines Device Address.
+; * Device Address Type -> Identifies the Address Type, for
+; more detail search for Management
+; Device Type Address, refer SMB.EQU
+;----------------------------------------------------------------------------
+;!!PORT!!
+ MANAGEMENT_DEVICE_STRING_1 DEFINE <LM78-1>
+ MANAGEMENT_DEVICE_TYPE_1 DEFINE <MGMT_DEVICE_TYPE_LM78>
+ MANAGEMENT_DEVICE_ADDR_1 = 00000000h
+ MANAGEMENT_DEVICE_ADDR_TYPE_1 DEFINE <MGMT_DEVICE_ADDRESS_TYPE_IO_PORT>
+
+ MANAGEMENT_DEVICE_STRING_2 DEFINE <LM78-2>
+ MANAGEMENT_DEVICE_TYPE_2 DEFINE <MGMT_DEVICE_TYPE_LM78>
+ MANAGEMENT_DEVICE_ADDR_2 = 00000000h
+ MANAGEMENT_DEVICE_ADDR_TYPE_2 DEFINE <MGMT_DEVICE_ADDRESS_TYPE_IO_PORT>
+
+ MANAGEMENT_DEVICE_STRING_3 DEFINE <LM75-0>
+ MANAGEMENT_DEVICE_TYPE_3 DEFINE <MGMT_DEVICE_TYPE_LM75>
+ MANAGEMENT_DEVICE_ADDR_3 = 00000000h
+ MANAGEMENT_DEVICE_ADDR_TYPE_3 DEFINE <MGMT_DEVICE_ADDRESS_TYPE_IO_PORT>
+
+;----------------------------------------------------------------------------
+; Structure Type 36: MANAGEMENT DEVICE THRESHOLD DATA INFORMATION
+;----------------------------------------------------------------------------
+; Management Device Threshold Data structure is associated with,
+; Voltage Probe, Temprature Probe, Cooling Device and Electrical Probe.
+; Each probe and cooling device has it's own Threshold data values.
+; Depends on number of probes in the system, there will be equal number
+; of Threshold Data structures will be there.
+;----------------------------------------------------------------------------
+; Lower Threshold Non-critical -> The lower non-critical threshold for this component
+; Upper Threshold Non-critical -> The upper non-critical threshold for this component
+; Lower Threshold Critical -> The Lower critical threshold for this component
+; Upper Threshold Critical -> The Upper critical threshold for this component
+; Lower Threshold Non-Recoverable -> The Lower threshold non-recoverable for this component
+; Upper Threshold Non-Recoverable -> The Upper threshold non-recoverable for this component
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ LOWER_THRESHOLD_NON_CRITICAL_1 = 8000h
+ UPPER_THRESHOLD_NON_CRITICAL_1 = 8000h
+ LOWER_THRESHOLD_CRITICAL_1 = 8000h
+ UPPER_THRESHOLD_CRITICAL_1 = 8000h
+ LOWER_THRESHOLD_NON_RECOVERABLE_1 = 8000h
+ UPPER_THRESHOLD_NON_RECOVERABLE_1 = 8000h
+
+ LOWER_THRESHOLD_NON_CRITICAL_2 = 8000h
+ UPPER_THRESHOLD_NON_CRITICAL_2 = 8000h
+ LOWER_THRESHOLD_CRITICAL_2 = 8000h
+ UPPER_THRESHOLD_CRITICAL_2 = 8000h
+ LOWER_THRESHOLD_NON_RECOVERABLE_2 = 8000h
+ UPPER_THRESHOLD_NON_RECOVERABLE_2 = 8000h
+
+ LOWER_THRESHOLD_NON_CRITICAL_3 = 8000h
+ UPPER_THRESHOLD_NON_CRITICAL_3 = 8000h
+ LOWER_THRESHOLD_CRITICAL_3 = 8000h
+ UPPER_THRESHOLD_CRITICAL_3 = 8000h
+ LOWER_THRESHOLD_NON_RECOVERABLE_3 = 8000h
+ UPPER_THRESHOLD_NON_RECOVERABLE_3 = 8000h
+
+ LOWER_THRESHOLD_NON_CRITICAL_4 = 8000h
+ UPPER_THRESHOLD_NON_CRITICAL_4 = 8000h
+ LOWER_THRESHOLD_CRITICAL_4 = 8000h
+ UPPER_THRESHOLD_CRITICAL_4 = 8000h
+ LOWER_THRESHOLD_NON_RECOVERABLE_4 = 8000h
+ UPPER_THRESHOLD_NON_RECOVERABLE_4 = 8000h
+
+;----------------------------------------------------------------------------
+; Structure Type 37: MEMORY CHANNEL INFORMATION STRUCTURE
+;----------------------------------------------------------------------------
+;!!PORT!!
+
+ CHANNEL_1_TYPE = 03h
+ MAX_CHANNEL_1_LOAD = 32
+ NUMBER_OF_MEMORY_DEVICES_IN_CHANNEL_1 = 02
+
+ CHANNEL_2_TYPE = 03h
+ MAX_CHANNEL_2_LOAD = 32
+ NUMBER_OF_MEMORY_DEVICES_IN_CHANNEL_2 = 02
+
+;----------------------------------------------------------------------------
+; Structure Type 38: IPMI DEVICE INFORMATION
+;----------------------------------------------------------------------------
+; Identifies the base address (either memory-mapped or I/O) of the BMC.
+; If the least-significant bit of the field is 1, the address is in I/O space;
+; otherwise, the address is memory-mapped. Refer IPMI Interface Specification.
+
+;!!PORT!!
+
+ IPMI_BASE_ADDRESS_LO = 00000000h
+ IPMI_BASE_ADDRESS_HI = 00000000h
+
+;----------------------------------------------------------------------------
+; Structure Type 39: SYSTEM POWER SUPPLY
+;----------------------------------------------------------------------------
+; Syntax:
+; * PWR_SUPPLY_UNIT_GROUP_X -> Identifies the power unit group to which
+; this power supply is associated
+; * PWR_SUPPLY_LOCATION_X -> String identifies the location of the
+; power supply
+; * PWR_SUPPLY_DEVICE_NAME_X -> String identifies the name of the power
+; supply
+; * PWR_SUPPLY_MANUFACTURER_X -> String identifies the name of the company
+; that manufacturered the power supply
+; * PWR_SUPPLY_SERIAL_NUMBER_X -> String identifies the serial number of
+; the power supply
+; * PWR_SUPPLY_ASSET_TAG_NUMBER_X -> String identifies the asset tag of
+; the power supply
+; * PWR_SUPPLY_MODEL_PART_NUMBER_X -> String identifies the OEM Part Order
+; number of the power supply
+; * PWR_SUPPLY_REVISION_LEVEL_X -> Power supply revision string
+; * PWR_SUPPLY_MAX_POWER_CAPACITY_X -> Maximum sustained power output in Watts
+; Set to 0x8000 if unknown
+; * PWR_SUPPLY_CHARACTERISTICS_X -> Characteristics of the power supply
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ POWER_SUPPLY_UNIT_GROUP_1 = 1
+ POWER_SUPPLY_LOCATION_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_DEVICE_NAME_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MANUFACTURER_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_SERIAL_NUMBER_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_ASSET_TAG_NUMBER_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MODEL_PART_NUMBER_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_REVISION_LEVEL_1 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MAX_POWER_CAPACITY_1 = 8000h
+ POWER_SUPPLY_CHARACTERISTICS_1 = 11A2h
+
+ POWER_SUPPLY_UNIT_GROUP_2 = 2
+ POWER_SUPPLY_LOCATION_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_DEVICE_NAME_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MANUFACTURER_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_SERIAL_NUMBER_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_ASSET_TAG_NUMBER_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MODEL_PART_NUMBER_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_REVISION_LEVEL_2 DEFINE <To Be Filled By O.E.M.>
+ POWER_SUPPLY_MAX_POWER_CAPACITY_2 = 8000h
+ POWER_SUPPLY_CHARACTERISTICS_2 = 11A2h
+
+;----------------------------------------------------------------------------
+; Type 39 - Associated VOLTAGE PROBE Type 26
+;----------------------------------------------------------------------------
+; Syntax:
+; VOLTAGE_PROBE_39_1 DEFINE <Present, Voltage Probe String, Location
+; and status, Maximum Value,
+; Minimum Value, Resolution, Tolerance,
+; Accuracy, Oem Defined, Nominal Value>
+; * Present -> 0 = Type 39 does not have Input Voltage Probe
+; -> 1 = Type 39 has Input Voltage Probe
+;
+; Followings are only valid when "Present = 1"
+;
+; * Voltage Probe String -> Identifies the descriptive information
+; about the probe or its location
+; e.g."LM78A"
+; * Location and Status -> Defines the probe's physical location
+; and status of the voltage monitored by this
+; voltage probe
+; * Maximum Value -> The max. voltage level readable by
+; this probe in millivolt 0x8000h -> Unknown
+; * Mimimum Value -> The Min. voltage level readable by
+; this probe in millivolt 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's
+; reading in tenths of millivolt 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this
+; probe, in +/- millivolts. 0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this
+; probe, in +/- 1/100th of a percent
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's
+; reading in millivolts. 0x8000h -> Unknown
+;
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ VOLTAGE_PROBE_39_1 DEFINE <1,LM78A,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ VOLTAGE_PROBE_39_2 DEFINE <0,LM78B,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;----------------------------------------------------------------------------
+; Type 39 - Associated COOLING DEVICE Type 27
+;----------------------------------------------------------------------------
+;Syntax:
+; COOLING_DEVICE_39_1 DEFINE <Present, Device type and status, Cooling unit group,
+; Oem Defined, Nominal Value>
+; * Present -> 0 = Type 39 does not have Cooling Device
+; -> 1 = Type 39 has Cooling Device
+;
+; Followings are only valid when "Present = 1"
+;
+; * Device type and Status -> Identifies the cooling device type
+; and status
+; * Cooling Unit Group -> Identifies the cooling unit group
+; to which this cooling device is associated.
+; Multiple cooling devices in the same cooling
+; unit implies a redudant configuration.
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Speed -> The nominal speed for the cooling device
+; speed in RPM. 0x8000h -> Unknown
+; * Description -> Descriptive information about the cooling device
+;
+;Note: Nominal Value field is valid only if structure length is more than 0Ch
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ COOLING_DEVICE_39_1 DEFINE <1,67h,01h,00000000h,08000h,Cooling Dev 1>
+ COOLING_DEVICE_39_2 DEFINE <0,67h,01h,00000000h,08000h,Cooling Dev 2>
+
+;----------------------------------------------------------------------------
+; Type 39 - Associated Structure Type 28: TEMPERATURE PROBE INFORMATION
+;----------------------------------------------------------------------------
+; Syntax:
+; TEMPERATURE_PROBE_39_1 DEFINE <Tempature Probe String, Location
+; and status, Maximum Value,
+; Minimum Value, Resolution, Tolerance,
+; Accuracy, Oem Defined, Nominal Value>
+; * Present -> 0 = Type 39/27 does not have Temperature Probe
+; -> 1 = Type 39/27 has Temperature Probe
+;
+; Followings are only valid when "Present = 1"
+;
+; * Voltage Probe String -> Identifies the descriptive information
+; about the probe or its location
+; e.g."LM78A"
+; * Location and Status -> Defines the probe's physical location
+; and status of the tempature monitored by this
+; tempature probe
+; * Maximum Value -> The max. tempature readable by
+; this probe in 1/10th degree C. 0x8000h -> Unknown
+; * Mimimum Value -> The Min. tempature readable by
+; this probe in 1/10th degree C. 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's
+; reading in 1/1000th degree C. 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this
+; probe, in +/- 1/10th degree C.0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this
+; probe, in +/- 1/100th of a percent
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's
+; reading in 1/10th degree C. 0x8000h -> Unknown
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ TEMPERATURE_PROBE_39_1 DEFINE <1,LM78A,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ TEMPERATURE_PROBE_39_2 DEFINE <0,LM78B,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;----------------------------------------------------------------------------
+; Type 39 - Associated Structure Type 29: ELECTRICAL PROBE INFORMATION
+;----------------------------------------------------------------------------
+; Syntax :
+; ELECTRICAL_PROBE_39_1 DEFINE <Present, Electrical Probe String, Location and status, Maximum Value,
+; Minimum Value, Resolution, Tolerance, Accuracy, Oem Defined, Nominal Value>
+; * Present -> 0 = Type 39 does not have Current Probe
+; -> 1 = Type 39 has Current Probe
+;
+; Followings are only valid when "Present = 1"
+;
+; * Electrical Probe String -> Identifies the descriptive information about the probe or its location.
+; e.g."ABC"
+; * Location and Status -> Defines the probe's physical location and status of the current
+; monitored by this electrical probe
+; * Maximum Value -> The max. current readable by this probe in milliamps. 0x8000h -> Unknown
+; * Mimimum Value -> The Min. current readable by this probe in milliamps. 0x8000h -> Unknown
+; * Resoltion -> The resolution for the probe's reading in thenths of a milliamps.
+; 0x8000h->Unknown
+; * Tolerance -> The tolerance for reading from this probe, in +/- milliamps.
+; 0x8000h->Unknown
+; * Accuracy -> The accuracy for reading from this probe, in +/- 1/100th of a percent.
+; 0x8000h->Unknown
+; * OEM-Defined -> Contains OEM- or BIOS Vaendor specific information
+; * Nominal Value -> The nominal value for the probe's reading in milliamps.
+; 0x8000h -> Unknown
+;
+; Note: Nominal Value field is valid only if structure length is more than 14h
+;----------------------------------------------------------------------------
+
+;!!PORT!!
+ ELECTRICAL_PROBE_39_1 DEFINE <1,ABC,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+ ELECTRICAL_PROBE_39_2 DEFINE <0,DEF,6Ah,08000h,08000h,08000h,08000h,08000h,0,08000h>
+
+;----------------------------------------------------------------------------
+; Structure Type 40: Additional Information
+;----------------------------------------------------------------------------
+; Provides additional information for handling unspecified enumerated values
+; and interim field updates in another structure.
+;
+; Syntax:
+; REF_TYPE_1 Structure Type for which additional
+; information is provided
+;
+; REF_TYPE_INSTANCE_1 Structure Type instance for which additional
+; information is provided
+;
+; REF_OFFSET_1 Offset of the field within the structure
+; referenced above for which additional
+; information is provided
+;
+; USE_STRING_1 0 = String is not used, 1 = String is used
+;
+; STRING_1 When USE_STRING_1 = 1, specify string to be
+; associated with the field referenced above
+;
+; VALUE_1 Enumerated value or updated field content
+;
+;----------------------------------------------------------------------------
+;!!PORT!!
+
+ REF_TYPE_1 = 10
+ REF_TYPE_INSTANCE_1 = 1
+ REF_OFFSET_1 = 1
+ USE_STRING_1 = 1
+ STRING_1 DEFINE <To Be Filled By O.E.M. 1>
+ VALUE_1 = 0
+
+ REF_TYPE_2 = 1
+ REF_TYPE_INSTANCE_2 = 1
+ REF_OFFSET_2 = 15
+ USE_STRING_2 = 0
+ STRING_2 DEFINE <To Be Filled By O.E.M. 2>
+ VALUE_2 = 30
+
+ REF_TYPE_3 = 7
+ REF_TYPE_INSTANCE_3 = 2
+ REF_OFFSET_3 = 1
+ USE_STRING_3 = 1
+ STRING_3 DEFINE <To Be Filled By O.E.M. 3>
+ VALUE_3 = 0
+
+ REF_TYPE_4 = 1
+ REF_TYPE_INSTANCE_4 = 1
+ REF_OFFSET_4 = 1
+ USE_STRING_4 = 1
+ STRING_4 DEFINE <To Be Filled By O.E.M.>
+ VALUE_4 = 0
+
+;----------------------------------------------------------------------------
+; Structure Type 41: Onboard Devices Extended Information
+;----------------------------------------------------------------------------
+; Defines the attributes of devices that are onboard (soldered onto) a system
+; element, usually the baseboard. In general, an entry in this table implies
+; that the BIOS has some level of control over the enabling of the associated
+; device for use by the system.
+;
+; NOTE: This structure replaces Onboard Device Information (Type 10) starting
+; with versiob 2.6 of the SMBIOS specification. Both Type 10 and 41 can
+; be implemented to allow existing SMBIOS browsers to properly display
+; the system's onboard devices information.
+;
+; Syntax:
+; ONBOARD_DEVICE_EXT_1 DEFINE <Enabled or Disabled, Onboard Device Type, Descrition String>
+; * Onboard device status -> Describes the status(enabled/disabled) of on board device
+; * On board device Type -> Video, Audio, SCSI etc...
+; For more detail search for On-board device
+; Type equates in structure Type 10, refer SMB.EQU
+; * Device Type Instance -> A unique value (within a given onboard device type) used
+; to indicate the order the device is designated by the system.
+; e.g. A system with two identical Ethernet NICs may designate
+; one NIC (with higher Bus/Device/Function=15/0/0) as the first
+; onboard NIC (instance 1) and the other NIC (with lower
+; Bus/Device/Function=3/0/0) as the second onboard NIC (instance 2)
+; * Description String -> Describes the on board device.
+; e.g."Video", "Audio" etc..
+;
+; SEGGRP_BUS_DEVFN_EXT_1 DEFINE <Segment Group Number, Bus Number, Device Function Number>
+; * Segment Group Number -> Segment Group Number defined in the PCI Firmware Spec.
+; * Bus Number -> Bus Number
+; * Device Function Number -> Device / Function Number
+;
+;----------------------------------------------------------------------------
+;!!PORT!!
+ ONBOARD_DEVICE_EXT_1 DEFINE <ENABLED, OBD_VIDEO, 1, Onboard IGD>
+ SEGGRP_BUS_DEVFN_EXT_1 DEFINE <0, 0, 10h>
+
+ ONBOARD_DEVICE_EXT_2 DEFINE <ENABLED, OBD_ETHERNET, 1, Onboard LAN>
+ SEGGRP_BUS_DEVFN_EXT_2 DEFINE <0, 0, 0C8h>
+
+ ONBOARD_DEVICE_EXT_3 DEFINE <ENABLED, OBD_OTHER, 1, Onboard 1394>
+ SEGGRP_BUS_DEVFN_EXT_3 DEFINE <0, 3, 0E2h>
+
+;----------------------------------------------------------------------------
+; Structure Type 5 : MEMORY CONTROLLER INFORMATION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; Structure Type 6 : MEMORY MODULE INFORMATION
+;----------------------------------------------------------------------------
+; The following information is needed only if MEM_MODULE_INFO = Present
+; This structure (TYPE 6) is associated with MEMORY CONTROLLER Structure(TYPE 5)
+; Handle information of Type 6 is defined in TYPE 5 structure.
+; Syntax:
+; MEMORY_TYPE_1 DEFINE <Memory Type, Memory Type,...>
+; * Memory Module Type -> DIMM, SIMM, SDRAM etc...
+; Following describes Memory Module Type
+; supported. At any given time more than
+; one value can be selected. Select the
+; memory type list from the following
+; MM_TYPE_OTHER, MM_TYPE_UNKNOWN, MM_TYPE_STANDARD,
+; MM_TYPE_FAST_PAGE_MODE, MM_TYPE_EDO, MM_TYPE_PARITY, MM_TYPE_ECC,
+; MM_TYPE_SIMM, MM_TYPE_DIMM, MM_TYPE_BURST_EDO, MM_TYPE_SDRAM
+; for more detail search for Memory Module
+; Type equates in structure Type 6, refer SMB.EQU
+; This field is used in Memory Controller Structure
+; also. While porting, define the proper bit
+; field according to type of memory suppoted
+; on platform. This Bit-field is defined
+; above in TYPE 5 structure
+;
+; MEMORY_INFO_1 DEFINE <String, Bank Connection, Supported Speed,
+; Installed size, Enabled size, Bank connection>
+; * String -> Memory Module designator string e.g. "DIMM1"
+; * Bank connection -> RAS line information
+; for more detail refer search for Memory Module
+; Bank connection equate in SMB.EQU
+; * Supported Speed -> The speed of the memory module is defined
+; in unit of ns(nano second). If this field is
+; unknown, the field is set to 0
+; * Installed Size -> The installed size field identify the size
+; of memory module which is installed in the
+; socket. It is determined as under.
+; Bit0-6 : size(n) where 2**n is the size in MB.
+; 7Dh-> Not determinable(installed size only)
+; 7Eh-> Module is installed but not enabled
+; 7Fh-> Not installed
+; Bit 7-> defines the single bank or double bank connection
+; * Enabled Size -> Follow the same as installed size
+; MEMORY_ERR_1 DEFINE <0>
+; * Error Status -> Currently always define 0
+;----------------------------------------------------------------------------
+
+;!!NOTE!!
+; PORT NBSMBIOS.ASM for all the memory related structures.
+; Also note that type 5, 6 and Type 16, 17, 18, 19 and 20 are related
+; even though type 5, 6 are not required by the 2.3.1 spec.
+; Make sure that the number of Memory Modules defined below are equal to
+; NUMBER_OF_MEM_MODULE in SMBIOS.SDL
+
+;!!PORT!!
+ MEMORY_TYPE_1 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_1 DEFINE <DIMM0, RAS_1, RAS_2, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_1 DEFINE <0>
+
+ MEMORY_TYPE_2 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_2 DEFINE <DIMM1, RAS_3, RAS_4, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_2 DEFINE <0>
+
+ MEMORY_TYPE_3 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_3 DEFINE <DIMM2, RAS_5, RAS_6, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_3 DEFINE <0>
+
+ MEMORY_TYPE_4 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_4 DEFINE <DIMM3, RAS_7, RAS_8, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_4 DEFINE <0>
+
+ MEMORY_TYPE_5 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_5 DEFINE <DIMM4, RAS_9, RAS_10, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_5 DEFINE <0>
+
+ MEMORY_TYPE_6 DEFINE <MM_TYPE_SDRAM, MM_TYPE_DIMM>
+ MEMORY_INFO_6 DEFINE <DIMM5, RAS_11, RAS_12, 60, 512*1024*1024, 512*1024*1024, MM_SINGLE_BANK>
+ MEMORY_ERR_6 DEFINE <0>
+
+;----------------------------------------------------------------------------
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/Smbhdr.equ b/Board/EM/SMBIOS/SMBiosStaticData/Smbhdr.equ
new file mode 100644
index 0000000..979a0d9
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/Smbhdr.equ
@@ -0,0 +1,297 @@
+ ECHO --Including: SMBHDR.EQU
+
+; Inclusion guard
+IFNDEF _smbhdr_equ_
+_smbhdr_equ_ EQU 1
+
+;----------------------------------------------------------------------------
+; Do not change any structure definition unless otherwise specified
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/Smbhdr.equ 4 6/02/09 4:47p Davidd $
+;
+; $Revision: 4 $
+;
+; $Date: 6/02/09 4:47p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/Smbhdr.equ $
+;
+; 4 6/02/09 4:47p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 3 4/13/07 11:33a Davidd
+; Updated the year in the top and bottom copyright headers.
+;
+; 2 12/15/06 5:34p Davidd
+; Code cleanup and reformatted to coding standard.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+; This release implements SMBIOS 2.4 specification
+;----------------------------------------------------------------------------
+SMBIOS_VERSION EQU 24h ; 2.4
+SMBIOS_MAJOR_VERSION EQU 02h ; Major Version 2
+SMBIOS_MINOR_VERSION EQU 04h ; Minor Version 4
+
+;----------------------------------------------------------------------------
+; OEM GPNV STRUCTURE INFORMATION
+;----------------------------------------------------------------------------
+MAX_MEMORY_GPNV_DATAID EQU 08h ; max #of dataid in memory mapped GPNV
+MAX_IO_GPNV_DATAID EQU 08h ; max #of dataid in io mapped GPNV
+
+;----------------------------------------------------------------------------
+; EVENT LOG INFORMATION
+;----------------------------------------------------------------------------
+IFDEF MKF_EVENTLOG_VERSION
+ NO_OF_SUPPORTED_EVENTS EQU MKF_NO_OF_SUPPORTED_EVENTS
+ELSE
+ NO_OF_SUPPORTED_EVENTS EQU 06h
+ LENGTH_OF_EACH_LOG_TYPE_DESC EQU 02h
+ENDIF ; MKF_EVENTLOG_VERSION
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; HEADER OF SMBIOS DATA MODULE
+;----------------------------------------------------------------------------
+SMBDataModuleHeaderSTRUC STRUC
+ bSignature BYTE 8 DUP(?) ; _AMIDMI_ signature
+ wSMBIOSVer WORD ? ; SMBIOS Spec Ver#
+ wAMIImplementationVer WORD ? ; AMI Implementation Ver#
+ bConfigurationInfo BYTE ? ; total #of configuration supported (1-based)
+ wLength WORD ? ; length of data module
+ bReserved BYTE ? ; reserved
+SMBDataModuleHeaderSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; SMBIOSInfo Details
+;----------------------------------------------------------------------------
+smbios_runtime_bit EQU 00000001b; 0 = SMBIOS POST active
+ ; 1 = SMBIOS Runtime active
+smbios_gpnv_data_bit EQU 00000010b; 0 = SMBIOS data in GPNV not changed
+ ; 1 = SMBIOS data in GPNV modified
+ ; bit15-2....NOT USED
+
+;----------------------------------------------------------------------------
+; SMBIOS INTERNAL DATA STRUCTURE
+;----------------------------------------------------------------------------
+SMBInternalDataSTRUC STRUC
+ dSMBStorageBase DWORD ? ; memory mapped storage base
+ dSMBStorageSize DWORD ? ; memory mapped storage size
+ wSMBNumRuntimeStruc WORD ? ; #of valid runtime structures
+ wSMBNumRomStruc WORD ? ; #of structures in ROM
+ wSMBRomStructuresLength WORD ? ; total length of all ROM structures
+ wSMBStructuresSegment WORD ? ; Segment of the data structures in RAM
+ wSMBStructuresStart WORD ? ; start of data structures in RAM
+ wSMBCurrentStructuresEnd WORD ? ; end of current data structures in RAM + 1
+ wSMBAvailableStructuresEnd WORD ? ; end of space available for structures + 1
+ wCPUInternalClock WORD ? ; CPU internal clock
+ wExternalClock WORD ? ; CPU Bus clock
+SMBInternalDataSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; SMBIOS INSTALLATION STRUCTURE
+;----------------------------------------------------------------------------
+SMBTableHeaderSTRUC STRUCT
+ bAnchorStr BYTE 4 DUP (?)
+ bChecksum BYTE ?
+ bLength BYTE ?
+ bMajorVer BYTE ?
+ bMinorVer BYTE ?
+ wMaxStrucSize WORD ?
+ bRevision BYTE ?
+ bFormattedArea BYTE 5 DUP (?)
+ bIntAnchorStr BYTE 5 DUP (?)
+ bIntChecksum BYTE ?
+ wStrucTblLen WORD ?
+ dStrucTblAddr DWORD ?
+ wNumSMBStruc WORD ?
+ bSMBRevision BYTE ?
+SMBTableHeaderSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; STRUCTURE OF DATA BUFFER IN SMBIOS FUNCTION 52H
+;----------------------------------------------------------------------------
+SMBIOSFun52BufferSTRUC STRUC
+ bCommand BYTE ?
+ bFieldOffset BYTE ?
+ dChangeMask DWORD ?
+ dChangeValue DWORD ?
+ wDataLength WORD ?
+ dStructureHeader DWORD ?
+ bStructureData BYTE ?
+SMBIOSFun52BufferSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; STRUCTURE OF DATA BUFFER IN SMBIOS FUNCTION 53H
+;----------------------------------------------------------------------------
+SMBIOSFun53BufferSTRUC STRUC
+ bChangeStatus BYTE ?
+ bChangeType BYTE ?
+ wChangeHandle WORD ?
+ bChangeReserved BYTE 12 DUP (?)
+SMBIOSFun53BufferSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; STRUCTURE USED IN FUNC 52H
+;----------------------------------------------------------------------------
+F52_FIELD_ABSENT EQU 0FFh ; absent field
+F52_STRING_DATA_TYPE EQU 80h ; bit-7 = 1..string data type
+ ; 0..binary data
+F52_ONE_TIME_MODIFIABLE = 40h ; bit-6 = 1..one time modifiable
+ ; 0..modifiable always
+F52_BYTE EQU 01h ; length of a BYTE data
+F52_WORD EQU 02h ; length of a WORD data
+F52_DWORD EQU 04h ; length of a DWORD data
+F52_STATUS_MODIFIED EQU 01h ; bit-0 = 1..this field is not modifiable any more
+ ; bit7-1= reserved for future use
+
+;<AMI_SHDR_START>
+;----------------------------------------------------------------------------
+; Name: ModificationHeaderSTRUC
+;
+; Fields: Name Type Description
+; -------------------------------------------------------------
+; wLength WORD length of the information in BYTEs
+; including this word
+; bType BYTE SMBIOS structure type
+;
+; Description:
+;
+;----------------------------------------------------------------------------
+;<AMI_SHDR_END>
+
+ModificationHeaderSTRUC STRUC
+
+ wLength WORD ?
+ bType BYTE ? ; structure type
+
+ModificationHeaderSTRUC ENDS
+
+;<AMI_SHDR_START>
+;----------------------------------------------------------------------------
+; Name: ModificationKeyFieldSTRUC
+;
+; Fields: Name Type Description
+; -------------------------------------------------------------
+; bOffset BYTE offset of the key-field inside the structure
+; FF -> there is no key-field
+; bType BYTE Data Type
+; Bit-7 = 0..Binary Data
+; 1..String Data
+; Bit-6 = 0..modifiable always
+; 1..One time modifiable
+; Bit5-0= reserved for future use
+; bLength BYTE Data Length in Bytes
+; Bit7-0= data length in BYTEs
+; Description:
+;
+;----------------------------------------------------------------------------
+;<AMI_SHDR_END>
+
+ModificationKeyFieldSTRUC STRUC
+
+ bOffset BYTE ? ; offset of the key-field inside the structure
+ ; FF -> there is no key-field
+ bType BYTE ? ; Data Type
+ ; Bit-7 = 0..Binary Data
+ ; 1..String Data
+ ; Bit-6 = 0..modifiable always
+ ; 1..One time modifiable
+ ; Bit5-0= reserved for future use
+ bLength BYTE ? ; Data Length in Bytes
+ ; Bit7-0= data length in BYTEs
+
+ModificationKeyFieldSTRUC ENDS
+
+;<AMI_SHDR_START>
+;----------------------------------------------------------------------------
+; Name: ModificationFieldSTRUC
+;
+; Fields: Name Type Description
+; -------------------------------------------------------------
+; bOffset BYTE offset of the key-field inside the structure
+; FF -> there is no key-field
+; bType BYTE Data Type
+; Bit-7 = 0..Binary Data
+; 1..String Data
+; Bit-6 = 0..modifiable always
+; 1..One time modifiable
+; Bit5-0= reserved for future use
+; bLength BYTE Data Length in Bytes
+; Bit7-0= data length in BYTEs
+; bStatus BYTE Status of the field
+; Description:
+;
+;----------------------------------------------------------------------------
+;<AMI_SHDR_END>
+
+ModificationFieldSTRUC STRUC
+
+ bOffset BYTE ? ; offset of the key-field inside the structure
+ ; FF -> there is no key-field
+ bType BYTE ? ; Data Type
+ ; Bit-7 = 0..Binary Data
+ ; 1..String Data
+ ; Bit-6 = 0..modifiable always
+ ; 1..One time modifiable
+ ; Bit5-0= reserved for future use
+ bLength BYTE ? ; Data Length in Bytes
+ ; Bit7-0= data length in BYTEs
+ bStatus BYTE ? ; status of this field
+
+ModificationFieldSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; EQUATES USED IN SMBIOS FUNCTION 53H
+;----------------------------------------------------------------------------
+; equates used in SMBIOS Change Status
+SMBIOS_NO_CHANGE EQU 00h ; 00h..SMBIOS No Change
+SMBIOS_OTHER_CHANGE EQU 01h ; 01h..SMBIOS Other Change
+SMBIOS_UNKNOWN_CHANGE EQU 02h ; 02h..SMBIOS Unknown Change
+SMBIOS_SINGLE_STRUCTURE_AFFECTED EQU 03h ; 03h..SMBIOS Single Structure Affected
+SMBIOS_MULTIPLE_STRUCTURE_AFFECTED EQU 04h ; 04h..SMBIOS Multiple Structure Affected
+
+; equates used in SMBIOS Change Type
+SMBIOS_ONE_MORE_STRUCTURE_CHANGED EQU 00000001b ; Bit-0 = 1, One/More Structure was changed
+SMBIOS_ONE_MORE_STRUCTURE_ADDED EQU 00000010b ; Bit-1 = 1, One/More Structure was added
+ ; Bit7-2.....Reserved
+
+;----------------------------------------------------------------------------
+; End of Inclusion guard
+ENDIF ;_smbhdr_equ_
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.asm b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.asm
new file mode 100644
index 0000000..2dea886
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.asm
@@ -0,0 +1,259 @@
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticData.asm 12 4/07/16 5:53p Davidd $
+;
+; $Revision: 12 $
+;
+; $Date: 4/07/16 5:53p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticData.asm $
+;
+; 12 4/07/16 5:53p Davidd
+; [TAG] EIP231162
+; [Category] New Feature
+; [Description] Merge Aptio V Smbios -09 changes for Aptio 4
+; 4.6.5.5_SMBIOS_40 release
+; [Files] Smbios.sdl
+; SmbiosDynamicData.h
+; Smbios.h
+; SmbiosStaticData.sdl
+; SmbiosStaticData.asm
+; SmbData.mac
+; SmbMacro.aid
+; SmbDesc.def
+;
+; 11 2/17/15 1:06p Davidd
+; [TAG] EIP205509
+; [Category] Improvement
+; [Description] Merge Aptio V Smbios EIP193807, 193858, 196901 changes
+; into Aptio 4 Smbios
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbdesc.def
+;
+; 10 3/26/12 12:02p Davidd
+; [TAG] EIP84370
+; [Category] New Feature
+; [Description] Flash memory(type 16 and 17) on aptio
+; [Files] Smbdata.mac
+; SmbiosStaticData.asm
+; SmbiosStaticData.sdl
+; Smbios.c
+; Smbios.mak
+; Smbios.h
+;
+; 9 2/09/11 10:24a Davidd
+; [TAG] EIP53081
+; [Category] Bug Fix
+; [Severity] Minor
+; [Symptom] Smbios Management Device (type 34) must be enabled in
+; order to
+; see System Power Supply (type 39)
+; [RootCause] Macro to create System Power Supply structure (type 39)
+; was grouped inside macro to create Smbios Management
+; Device
+; (type 34)
+; [Solution] Seperated Type 39 macro from 34.
+; [Files] SmbiosStaticData.asm
+; Smbdata.mac
+; Smbmacro.aid
+; Smbdesc.def
+;
+; 8 4/06/10 10:18a Davidd
+; Removed CreateBiosLanguageInfo. It is now dynamically created if
+; enabled - EIP 34939
+;
+; 7 6/02/09 4:41p Davidd
+; Reformatted for Coding Standard compliance.
+;
+; 6 6/02/09 3:55p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 5 5/19/09 11:02a Davidd
+;
+; 4 10/13/08 11:15a Davidd
+; Added type 40 and 41 support per SMBIOS specification v2.6
+;
+; 3 3/29/07 4:53p Davidd
+; Changed the year in the AMI banner and adjust indentation to coding
+; standard.
+;
+; 2 12/15/06 5:21p Davidd
+; Code cleanup and reformatted to coding standard.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+
+ INCLUDE token.equ
+ INCLUDE smbhdr.equ
+ INCLUDE smbmacro.aid
+ INCLUDE smbstruc.def
+ INCLUDE smb.equ
+ INCLUDE smbdata.mac
+ INCLUDE smbdesc.def
+
+;----------------------------------------------------------------------------
+
+SMBIOS_DSEG SEGMENT BYTE PUBLIC 'DATA'
+ ASSUME cs: SMBIOS_DSEG
+.586p
+
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+ PUBLIC _SMBDATA_STARTS
+_smbdata_starts LABEL BYTE ; Marks start of module
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; SMBIOS DATA STRUCTURES
+;----------------------------------------------------------------------------
+
+;SMBDataModuleHeaderSTRUC {'_AMIDMI_',0203h,0101h,00h,offset smbios_structures_end,00h}
+
+;----------------------------------------------------------------------------
+ PUBLIC smbios_structures_start
+smbios_structures_start LABEL BYTE
+
+ handle = 0
+IF MKF_TYPE0_STRUCTURE
+ handle = CreateBiosInfo(handle)
+ENDIF
+IF MKF_TYPE1_STRUCTURE
+ handle = CreateSysInfo(handle)
+ENDIF
+IF MKF_TYPE2_STRUCTURE
+ handle = CreateBaseBoardInfo(handle)
+ENDIF
+IF MKF_TYPE3_STRUCTURE
+ handle = CreateSysChassisInfo(handle)
+ENDIF
+IF MKF_TYPE4_STRUCTURE
+ handle = CreateProcessorInfo(handle)
+ENDIF
+IF MKF_TYPE5_STRUCTURE
+ handle = CreateMemCtrlInfo(handle, handle+1)
+ENDIF
+IF MKF_TYPE6_STRUCTURE
+ handle = CreateMemModuleInfo(handle)
+ENDIF
+IF MKF_TYPE7_STRUCTURE
+ handle = CreateExternalCacheInfo(handle)
+ENDIF
+IF MKF_TYPE8_STRUCTURE
+ handle = CreatePortConnectorInfo(handle)
+ENDIF
+IF MKF_TYPE9_STRUCTURE
+ handle = CreateSystemSlotInfo(handle)
+ENDIF
+IF MKF_TYPE10_STRUCTURE
+ handle = CreateOnboardDeviceInfo(handle)
+ENDIF
+IF MKF_TYPE11_STRUCTURE
+ handle = CreateOemStringInfo(handle)
+ENDIF
+IF MKF_TYPE12_STRUCTURE
+ handle = CreateSystemConfigOptionInfo(handle)
+ENDIF
+IF MKF_TYPE15_STRUCTURE
+ handle = CreateEventLogInfo(handle)
+ENDIF
+IF MKF_TYPE16_STRUCTURE
+ handle = CreateMemoryInfo(handle)
+ENDIF
+IF MKF_FLASH_MEMORY_ARRAY_INFO
+ handle = CreateFlashMemoryInfo(handle)
+ENDIF
+IF MKF_TYPE21_STRUCTURE
+ handle = CreateBuiltinPointingDeviceInfo(handle)
+ENDIF
+IF MKF_TYPE22_STRUCTURE
+ handle = CreatePortableBatteryInfo(handle)
+ENDIF
+IF MKF_TYPE23_STRUCTURE
+ handle = CreateSystemResetInfo(handle)
+ENDIF
+IF MKF_TYPE24_STRUCTURE
+ handle = CreateHardwareSecurityInfo(handle)
+ENDIF
+IF MKF_TYPE25_STRUCTURE
+ handle = CreateSystemPowerControlsInfo(handle)
+ENDIF
+IF MKF_TYPE30_STRUCTURE
+ handle = CreateOutofBandRemoteAccessInfo(handle)
+ENDIF
+IF MKF_TYPE31_STRUCTURE
+ handle = CreateBootIntegrityServicesInfo(handle)
+ENDIF
+IF MKF_TYPE32_STRUCTURE
+ handle = CreateSystemBootInfo(handle)
+ENDIF
+IF MKF_TYPE33_STRUCTURE
+ handle = CreateSixtyFourBitMemoryErrorInfo(handle)
+ENDIF
+IF MKF_TYPE34_STRUCTURE
+ handle = CreateManagementDeviceInfo(handle)
+ENDIF
+IF MKF_TYPE37_STRUCTURE
+ handle = CreateMemoryChannelInfo(handle)
+ENDIF
+IF MKF_TYPE39_STRUCTURE
+ handle = CreateSystemPowerSupplyInfo(handle)
+ENDIF
+IF MKF_TYPE40_STRUCTURE
+ handle = CreateAdditionalInformation(handle)
+ENDIF
+IF MKF_TYPE41_STRUCTURE
+ handle = CreateOnboardDevicesExtendedInfo(handle)
+ENDIF
+IF MKF_TYPE241_STRUCTURE
+ handle = CreateOEMMemoryMappedGpnvInfo(handle)
+ENDIF
+IF MKF_TYPE240_STRUCTURE
+ handle = CreateOEMIOMappedGpnvInfo(handle)
+ENDIF
+IF MKF_TYPE38_STRUCTURE
+ handle = CreateIPMIDeviceInfo(handle)
+ENDIF
+IF MKF_TYPE129_STRUCTURE
+ handle = CreateIntelASFTable(handle)
+ENDIF
+ handle = CreateEndOfTable(handle)
+
+ db MKF_EXTRA_RESERVED_BYTES dup (0FFh) ; Extra Space
+SMBIOS_DSEG ENDS ; End of Segment
+END ; End of File
+
+;----------------------------------------------------------------------------
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2016, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.cif b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.cif
new file mode 100644
index 0000000..1fa2711
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.cif
@@ -0,0 +1,17 @@
+<component>
+ name = "SMBIOS - Static Data"
+ category = ModulePart
+ LocalRoot = "Board\EM\SMBIOS\SMBiosStaticData"
+ RefName = "SmbiosStaticData"
+[files]
+"\SmbiosStaticData.sdl"
+"\SmbiosStaticData.mak"
+"\SmbiosStaticData.asm"
+"\SmbiosStaticDataEnd.asm"
+"\SMBDATA.MAC"
+"\SMBSTRUC.DEF"
+"\SMBMACRO.AID"
+"\Smbdesc.def"
+"\SMB.EQU"
+"\Smbhdr.equ"
+<endComponent>
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.mak b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.mak
new file mode 100644
index 0000000..15ccb38
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.mak
@@ -0,0 +1,81 @@
+#************************************************************************
+#************************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#************************************************************************
+#************************************************************************
+#************************************************************************
+# $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticData.mak 7 5/15/09 3:26p Davidd $
+#
+# $Revision: 7 $
+#
+# $Date: 5/15/09 3:26p $
+#************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticData.mak $
+#
+# 7 5/15/09 3:26p Davidd
+# Changes made to the build process to support Nested Firmware Volume
+#
+# 6 3/29/07 4:51p Davidd
+# Changed the year in the AMI banner and adjust indentation.
+#
+# 5 3/14/07 2:16p Pavell
+# Changes for ITK
+#
+# 4 11/09/05 2:07p Felixp
+# Type of FFS file changed from RAW to FREEFORM
+#
+# 3 11/07/05 6:18p Davidd
+# Changes made to support AMIBCP.
+#
+# 2 7/20/05 2:59p Davidd
+# Removed masm option /Fl. Listing files are not needed.
+#
+# 1 4/29/05 2:15p Davidd
+# Initial checkin.
+#
+#************************************************************************//
+all : SMBIOS_STATIC
+
+SMBIOS_STATIC : $(BUILD_DIR)\SMBiosStaticData.ffs
+
+$(BUILD_DIR)\SMBiosStaticData.ffs : $(BUILD_DIR)\SMBiosSD.bin
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=DAF4BF89-CE71-4917-B522-C89D32FBC59F\
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ RESOURCE=$** SECTION_GUID=AB56DC60-0057-11da-A8DB-000102EEE626 \
+ FFSFILE=$@ COMPRESS=1 NAME=SMBiosStaticData
+
+$(BUILD_DIR)\SMBiosSD.bin : $(BUILD_DIR)\SMBiosSD.exe
+ exe2bin $(BUILD_DIR)\SMBiosSD.exe $(BUILD_DIR)\SMBiosSD.bin
+
+$(BUILD_DIR)\SMBiosSD.exe : $(SMBOBJS) $(SMBIOSDATA_DIR)\SMBiosStaticDataEnd.asm $(BUILD_DIR)\timestamp.equ
+ $(ASM) /c /nologo /Fo$(BUILD_DIR)\SMBiosStaticDataEnd.obj $(SMBIOSDATA_DIR)\SMBiosStaticDataEnd.asm
+ $(ASMLINK) $(SMBOBJS) + $(BUILD_DIR)\SMBiosStaticDataEnd.obj, $(BUILD_DIR)\SMBiosSD.exe,$(BUILD_DIR)\SMBiosSD.map,,,
+
+$(BUILD_DIR)\SMBiosStaticData.obj : $(SMBIOSDATA_DIR)\SMBiosStaticData.asm $(BUILD_DIR)\timestamp.equ
+ $(ASM) /c /nologo /Fo$(BUILD_DIR)\SMBiosStaticData.obj $(SMBIOSDATA_DIR)\SMBiosStaticData.asm
+
+#************************************************************************
+#************************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#************************************************************************
+#************************************************************************
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.sdl b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.sdl
new file mode 100644
index 0000000..9d05d6b
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticData.sdl
@@ -0,0 +1,4036 @@
+TOKEN
+ Name = "EXTRA_RESERVED_BYTES"
+ Value = "4096"
+ Help = "Number of extra bytes to reserve in addition to the static table."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_STRING"
+ Value = "To be filled by O.E.M."
+ Help = "Default unported strings in Smbios static table"
+ TokenType = Expression
+End
+
+##############################################################################
+#
+# TYPE 0 - BIOS INFORMATION
+#
+##############################################################################
+
+TOKEN
+ Name = "TYPE0_STRUCTURE"
+ Value = "1"
+ Help = "ON -> BIOS Information structure will be present\OFF -> BIOS Information structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BIOS_VENDOR"
+ Value = "American Megatrends Inc."
+ Help = "Specifies the BIOS Vendor's Name."
+ TokenType = Expression
+ TargetEQU = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "BI_BIOS_START_ADDR"
+ Value = "0F000h"
+ Help = "Segment location of BIOS Starting Address, e.g.0E800h.\NOTE : The size of the runtime BIOS image can be computed by subtracting the Starting Address Segment from 10000h and multiplying the result by 16."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BIOS_SIZE"
+ Value = "$(FLASH_SIZE)"
+ Help = "Physical size of the flash part containing the BIOS"
+ TokenType = Integer
+ TargetH = Yes
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "BIOS Characteristics"
+ Help = "Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc."
+ TokenType = Expression
+End
+
+TOKEN
+ Name = "BI_UNKNOWN_CHAR"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 2\ON -> BIOS Characteristics are Unknown\OFF -> BIOS Characteristics are Known "
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_BIOS_CHAR_NOT_SUPPORTED"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 3\ON -> BIOS Characteristics are not Supported\OFF -> BIOS Characteristics are Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_MCA"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 5\ON -> MCA is Supported.\OFF -> MCA is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_EISA"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 6\ON -> EISA is Supported.\OFF -> EISA is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_PCMCIA"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 8\ON -> PC Card (PCMCIA) is Supported.\OFF -> PC Card (PCMCIA) is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_BIOS_FLASH"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 11\ON -> BIOS is Upgradeable (Flash)\OFF -> BIOS is Not Upgradeable."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_BIOS_SHADOW"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 12\ON -> BIOS Shadowing is Allowed.\OFF -> BIOS Shadowing is Not Allowed."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_VL_VESA"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 13\ON -> VL-VESA is Supported.\OFF -> VL-VESA is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_ESCD"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 14\ON -> ESCD support is Available.\OFF -> ESCD support is Not Available"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_CDROM_BOOT"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 15\ON -> Boot from CD is Supported\OFF -> Boot from CD is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_SELECTABLE_BOOT"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 16\ON -> Selectable Boot is Supported\OFF -> Selectable Boot is Not Supported"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_BIOS_ROM_SOCKET"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 17\ON -> If the ROM is Socketed\OFF -> If the ROM is Soldered"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_PCMCIA_BOOT"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 18\ON -> Boot from PC Card (PCMCIA) is Supported.\OFF -> Boot from PC Card (PCMCIA) is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_EDD"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 19\ON -> EDD (Enhanced Disk Drive) Specification is Supported.\OFF -> EDD (Enhanced Disk Drive) Specification is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_NEC9800"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 20\ON -> Int13h Japanese Floppy for NEC 9800 1.2MB (3.5inch, 1KBytes/Sector, 360 RPM) is Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_TOSHIBA"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 21\ON -> Int13h Japanese Floppy for Toshiba 1.2MB (3.5inch, 360 RPM) is Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_5_25_360"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 22\ON -> Int13h - 5.25inch/360KB Floppy Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_5_25_1_2"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 23\ON -> Int13h - 5.25inch/1.2MB Floppy Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_3_5_720"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 24\ON -> Int13h - 3.5inch/720KB Floppy Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT13_3_5_2_88"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 25\ON -> Int13h - 3.5inch/2.88MB Floppy Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT5_PRINT_SCRN"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 26\ON -> Int5h - Print Screen Service is Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT14_SERIAL_SVC"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 28\ON -> Int14h - Serial Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT17_PRN_SVC"
+ Value = "1"
+ Help = "BIOS Characteristics Bit 29\ON -> Int17h - Printer Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_INT10_CGA_MONO"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 30\ON -> Int10h - CGA/Mono Video Services are Supported.\OFF -> Does Not Support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_NEC_PC_98"
+ Value = "0"
+ Help = "BIOS Characteristics Bit 31\ON -> NEC PC-98 is Supported.\OFF -> NEC PC-98 is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "BIOS Characteristics Extension Byte 1"
+ Help = "Optional space reserved for future supported functions. The number of Extension Bytes that are present is indicated by the Length in offset 1 minus 12h."
+ TokenType = Expression
+End
+
+TOKEN
+ Name = "BI_AGP_SUPPORT"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 2\ON -> AGP is Supported.\OFF -> AGP is Not Supported"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_I2O_BOOT_SUP"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 3\ON -> I2O Boot is Supported.\OFF -> I2O Boot is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_LS120_BOOT_SUP"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 4\ON -> LS-120 Boot is Supported.\OFF -> LS-120 Boot is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_ATAPI_ZIP_SUP"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 5\ON -> ATAPI ZIP Drive Boot is Supported.\OFF -> ATAPI ZIP Drive Boot is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_IEEE_1394_SUP"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 6\ON -> 1394 Boot is Supported.\OFF -> 1394 Boot is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_SMART_BAT_SUP"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 1 Bit 7\ON -> Smart Battery is Supported.\OFF -> Smart Battery is Not Supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "BIOS Characteristics Extension Byte 2"
+ Help = "Optional space reserved for future supported functions. The number of Extension Bytes that are present is indicated by the Length in offset 1 minus 12h."
+ TokenType = Expression
+End
+
+TOKEN
+ Name = "BBS_SUPPORT"
+ Value = "1"
+ Help = "BIOS Characteristics Extension Byte 2 Bit 0\ON -> Enable BIOS Boot Specification support.\OFF -> Disable BIOS Boot Specification support."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NETBOOT_SUPPORT"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 2 Bit 1\ON -> Function key-initiated Network Service boot support enabled. \OFF -> Function key-initiated Network Service boot support disabled."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BI_ETCD"
+ Value = "1"
+ Help = "BIOS Characteristics Extension Byte 2 Bit 2\ON -> Enable Targeted Content Distribution is ON.\OFF -> Enable Targeted Content Distribution is OFF."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "UEFI_SUPPORT"
+ Value = "1"
+ Help = "BIOS Characteristics Extension Byte 2 Bit 3\ON -> UEFI Specification is supported.\OFF -> UEFI Specification is not supported."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "VIRTUAL_MACHINE"
+ Value = "0"
+ Help = "BIOS Characteristics Extension Byte 2 Bit 4\ON -> The SMBIOS table describes a virtual machine.\OFF -> The SMBIOS table describes a real machine."
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "ECMA"
+ Value = "0FFh"
+ Help = "Embedded Controller Firmware Major Release.\0FFh = System does not have field upgradeable embedded controller firmware."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "ECMI"
+ Value = "0FFh"
+ Help = "Embedded Controller Firmware Minor Release.\0FFh = System does not have field upgradeable embedded controller firmware."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 1 - SYSTEM INFORMATION
+#
+##############################################################################
+#
+# The information in this Structure defines attributes of the overall
+# system and is intended to be associated with the Component ID group of
+# the system's MIF.\An SMBIOS implementation is associated with a single
+# system instance and contains one and only one System Information
+# (Type 1) structure.
+#
+##############################################################################
+
+TOKEN
+ Name = "TYPE1_STRUCTURE"
+ Value = "1"
+ Help = "ON -> System Information structure will be present\OFF -> System Information structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_MANUFACTURER"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Manufacturer Name."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_PRODUCT_NAME"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Product Name"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_VERSION"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Product Version."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_SERIAL_NUMBER"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Serial Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_WAKEUP_TYPE"
+ Value = "06h"
+ Help = "Specifies the System Wake-up Type.\00h - Reserved\01h - Other\02h - Unknown\03h - APM Timer\04h - Modem Ring\05h - LAN Remote\06h - Power Switch\07h - PCI PME#\08h - AC Power Restored"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 08h"
+End
+
+TOKEN
+ Name = "SYSTEM_SKU_NUMBER"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYSTEM_FAMILY"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_UUID"
+ Value = "{0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9}"
+ Help = "List of TYPE 1 UUID"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 2 - BASE BOARD (or MODULE) INFORMATION
+#
+##############################################################################
+#
+# This information in this structure defines attributes of a system
+# baseboard - for example a motherboard, planar, or server blade or other
+# standard system module.
+#
+##############################################################################
+
+TOKEN
+ Name = "BASE_BOARD_INFO"
+ Value = "0"
+ Help = "ON -> BaseBoard Information (Type 2) structure will be present\OFF -> BaseBoard Information (Type 2) structure will not be present\"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE2_STRUCTURE"
+ Value = "$(BASE_BOARD_INFO)"
+ Help = "Alternate token name for BASE_BOARD_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_BASEBOARDS"
+ Value = "1"
+ Help = "Number of Baseboard (Type 2) structure"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+End
+
+############################################################################
+# When NUMBER_OF_BASEBOARDS = 1:
+# For backward compatibility, porting information is to be done below
+#
+# When NUMBER_OF_BASEBOARDS > 1:
+# Porting information is to be done in Smbdesc.def file
+############################################################################
+
+TOKEN
+ Name = "BASE_BOARD_MANUFACTURER"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Board Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BASE_BOARD_PRODUCT_NAME"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Product Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BASE_BOARD_VERSION"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Product Version."
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BASE_BOARD_SERIAL_NUMBER"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Product Serial Number."
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_ASSET_TAG"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number of the Base Board."
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_LOC_IN_CHASSIS"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Location of Base Board in the Chassis."
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_BOARD_TYPE"
+ Value = "0Ah"
+ Help = "Specifies the Base Board type.\\01h - Unknown\02h - Other\03h - Server Blade\04h - Connectivity Switch\05h - System Management Module\06h - Processor Module\07h - I/O Module\08h - Memory Module\09h - Daughter Board\0Ah - Motherboard (includes Processor, Memory, and I/O)\0Bh - Processor/Memory Module\0Ch - Processor/IO Module\0Dh - Interconnect Board"
+ TokenType = Integer
+ TargetEQU = Yes
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_HOSTING_BOARD"
+ Value = "1"
+ Help = "ON - Board is Hosting Board eg. Motherboard\OFF - Board is not a Hosting Board"
+ TokenType = Boolean
+ TargetEQU = Yes
+ Range = "ON - OFF"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_REQUIRE_AUX_BOARD"
+ Value = "0"
+ Help = "ON - Board requires atleast one Daughter Board or Auxiliary card to function properly\OFF - Board can function properly without Daughter Board or Auxilliary Card"
+ TokenType = Boolean
+ TargetEQU = Yes
+ Range = "ON - OFF"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_REMOVABLE"
+ Value = "0"
+ Help = "ON - Board is Removable. It is designed to be taken in and out of the Chassis without imaparing the function of the Chassis.\OFF - Board is not Removable."
+ TokenType = Boolean
+ TargetEQU = Yes
+ Range = "ON - OFF"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_REPLACEABLE"
+ Value = "1"
+ Help = "ON - Board is Replaceable. It is possible to replace (either as a field repair or upgrade) the board with a physically different one. The board is inherently removable.\OFF - Board is not Replaceable."
+ TokenType = Boolean
+ TargetEQU = Yes
+ Range = "ON - OFF"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "BB_HOT_SWAPPABLE"
+ Value = "0"
+ Help = "ON - Board is Hot Swappable. It is possible to replace the board with a physically different but equvalent one while power is applied to the Board. The board is inherently replaceable and removable.\OFF - Board is not Hot Swappable."
+ TokenType = Boolean
+ TargetEQU = Yes
+ Range = "ON - OFF"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+TOKEN
+ Name = "NUMBER_OF_OBJECT_HANDLES"
+ Value = "0"
+ Help = "Number of Contained Object Handles"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+ Token = "BASE_BOARD_INFO" "=" "1"
+ Token = "NUMBER_OF_BASEBOARDS" "=" "1"
+End
+
+##############################################################################
+#
+# TYPE 3 - SYSTEM ENCLOSURE OR CHASSIS
+#
+##############################################################################
+#
+# The information in this structure defines attributes of the system's
+# mechanical enclosure(s). For example, if the system included a separate
+# enclosure for its peripheral devices, two structures would be returned:
+# one for the main, system enclosure and the second for the peripheral
+# device enclosure.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYS_CHASSIS_INFO"
+ Value = "1"
+ Help = "ON -> System Chassis Information (Type 3) structure will be present\OFF -> System Chassis Information (Type 3) structure will not be present\"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "TYPE3_STRUCTURE"
+ Value = "$(SYS_CHASSIS_INFO)"
+ Help = "Alternate token name for SYS_CHASSIS_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_SYSTEM_CHASSIS"
+ Value = "1"
+ Help = "Number of System Chassis (Type 3) structure"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Token = "SYS_CHASSIS_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_MANUFACTURER_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Chassis Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_MANUFACTURER_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Chassis Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_MANUFACTURER_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Chassis Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_MANUFACTURER_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Chassis Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_MANUFACTURER_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the System Chassis Manufacturer."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_LOCK_1"
+ Value = "0"
+ Help = "Bit7 of System Chassis Type\ON => Chassis Lock is present \OFF => Either a Lock is not present or it is unknown if the Chassis or Enclosure has a lock"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_LOCK_2"
+ Value = "0"
+ Help = "Bit7 of System Chassis Type\ON => Chassis Lock is present \OFF => Either a Lock is not present or it is unknown if the Chassis or Enclosure has a lock"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_LOCK_3"
+ Value = "0"
+ Help = "Bit7 of System Chassis Type\ON => Chassis Lock is present \OFF => Either a Lock is not present or it is unknown if the Chassis or Enclosure has a lock"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_LOCK_4"
+ Value = "0"
+ Help = "Bit7 of System Chassis Type\ON => Chassis Lock is present \OFF => Either a Lock is not present or it is unknown if the Chassis or Enclosure has a lock"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_LOCK_5"
+ Value = "0"
+ Help = "Bit7 of System Chassis Type\ON => Chassis Lock is present \OFF => Either a Lock is not present or it is unknown if the Chassis or Enclosure has a lock"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_TYPE_1"
+ Value = "03"
+ Help = "Bits 6:0 - Enumeration Value See Below.\01h - Other\02h - Unknown\03h - Desktop\04h - Low Profile Desktop\05h - Pizza Box\06h - Mini Tower\07h - Tower\08h - Portable\09h - Lap Top\0Ah - Notebook\0Bh - Hand Held\0Ch - Docking Station\0Dh - All in One\0Eh - Sub Notebook\0Fh - Space-saving\10h - Lunch Box\11h - Main Server Chassis\12h - Expansion Chassis\13h - Sub Chassis\14h - Bus Expansion Chassis\15h - Peripheral Chassis\16h - RAID Chassis\17h - Rack Mount Chassis\18h - Sealed-Case PC\19h - Multi-System Chassis. When this value is specified by an SMBIOS implementation, the physical chassis associated with this structure supports multiple, independently reporting physical systems\ - regardless of the chassis' current configuration. Systems in the same physical chassis are required to report the same value in this structure's Serial Number field.\ For a Chassis that may also be configured as either a single system or multiple physical systems, the Multi-System Chassis value is reported even if the chassis is currently configured as a \ Single System. This allows management applications to recognize the multi-system potential of the chassis.\1Ah - CompactPCI\1Bh - AdvancedTCA\1Ch - Blade\1Dh - Blade Enclosure\1Eh - Tablet\1Fh - Convertible\20h - Detachable"
+
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 19h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_TYPE_2"
+ Value = "03"
+ Help = "Bits 6:0 - Enumeration Value See Below.\01h - Other\02h - Unknown\03h - Desktop\04h - Low Profile Desktop\05h - Pizza Box\06h - Mini Tower\07h - Tower\08h - Portable\09h - Lap Top\0Ah - Notebook\0Bh - Hand Held\0Ch - Docking Station\0Dh - All in One\0Eh - Sub Notebook\0Fh - Space-saving\10h - Lunch Box\11h - Main Server Chassis\12h - Expansion Chassis\13h - Sub Chassis\14h - Bus Expansion Chassis\15h - Peripheral Chassis\16h - RAID Chassis\17h - Rack Mount Chassis\18h - Sealed-Case PC\19h - Multi-System Chassis. When this value is specified by an SMBIOS implementation, the physical chassis associated with this structure supports multiple, independently reporting physical systems\ - regardless of the chassis' current configuration. Systems in the same physical chassis are required to report the same value in this structure's Serial Number field.\ For a Chassis that may also be configured as either a single system or multiple physical systems, the Multi-System Chassis value is reported even if the chassis is currently configured as a \ Single System. This allows management applications to recognize the multi-system potential of the chassis.\1Ah - CompactPCI\1Bh - AdvancedTCA\1Ch - Blade\1Dh - Blade Enclosure\1Eh - Tablet\1Fh - Convertible\20h - Detachable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 19h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_TYPE_3"
+ Value = "03"
+ Help = "Bits 6:0 - Enumeration Value See Below.\01h - Other\02h - Unknown\03h - Desktop\04h - Low Profile Desktop\05h - Pizza Box\06h - Mini Tower\07h - Tower\08h - Portable\09h - Lap Top\0Ah - Notebook\0Bh - Hand Held\0Ch - Docking Station\0Dh - All in One\0Eh - Sub Notebook\0Fh - Space-saving\10h - Lunch Box\11h - Main Server Chassis\12h - Expansion Chassis\13h - Sub Chassis\14h - Bus Expansion Chassis\15h - Peripheral Chassis\16h - RAID Chassis\17h - Rack Mount Chassis\18h - Sealed-Case PC\19h - Multi-System Chassis. When this value is specified by an SMBIOS implementation, the physical chassis associated with this structure supports multiple, independently reporting physical systems\ - regardless of the chassis' current configuration. Systems in the same physical chassis are required to report the same value in this structure's Serial Number field.\ For a Chassis that may also be configured as either a single system or multiple physical systems, the Multi-System Chassis value is reported even if the chassis is currently configured as a \ Single System. This allows management applications to recognize the multi-system potential of the chassis.\1Ah - CompactPCI\1Bh - AdvancedTCA\1Ch - Blade\1Dh - Blade Enclosure\1Eh - Tablet\1Fh - Convertible\20h - Detachable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 19h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_TYPE_4"
+ Value = "03"
+ Help = "Bits 6:0 - Enumeration Value See Below.\01h - Other\02h - Unknown\03h - Desktop\04h - Low Profile Desktop\05h - Pizza Box\06h - Mini Tower\07h - Tower\08h - Portable\09h - Lap Top\0Ah - Notebook\0Bh - Hand Held\0Ch - Docking Station\0Dh - All in One\0Eh - Sub Notebook\0Fh - Space-saving\10h - Lunch Box\11h - Main Server Chassis\12h - Expansion Chassis\13h - Sub Chassis\14h - Bus Expansion Chassis\15h - Peripheral Chassis\16h - RAID Chassis\17h - Rack Mount Chassis\18h - Sealed-Case PC\19h - Multi-System Chassis. When this value is specified by an SMBIOS implementation, the physical chassis associated with this structure supports multiple, independently reporting physical systems\ - regardless of the chassis' current configuration. Systems in the same physical chassis are required to report the same value in this structure's Serial Number field.\ For a Chassis that may also be configured as either a single system or multiple physical systems, the Multi-System Chassis value is reported even if the chassis is currently configured as a \ Single System. This allows management applications to recognize the multi-system potential of the chassis.\1Ah - CompactPCI\1Bh - AdvancedTCA\1Ch - Blade\1Dh - Blade Enclosure\1Eh - Tablet\1Fh - Convertible\20h - Detachable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 19h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_TYPE_5"
+ Value = "03"
+ Help = "Bits 6:0 - Enumeration Value See Below.\01h - Other\02h - Unknown\03h - Desktop\04h - Low Profile Desktop\05h - Pizza Box\06h - Mini Tower\07h - Tower\08h - Portable\09h - Lap Top\0Ah - Notebook\0Bh - Hand Held\0Ch - Docking Station\0Dh - All in One\0Eh - Sub Notebook\0Fh - Space-saving\10h - Lunch Box\11h - Main Server Chassis\12h - Expansion Chassis\13h - Sub Chassis\14h - Bus Expansion Chassis\15h - Peripheral Chassis\16h - RAID Chassis\17h - Rack Mount Chassis\18h - Sealed-Case PC\19h - Multi-System Chassis. When this value is specified by an SMBIOS implementation, the physical chassis associated with this structure supports multiple, independently reporting physical systems\ - regardless of the chassis' current configuration. Systems in the same physical chassis are required to report the same value in this structure's Serial Number field.\ For a Chassis that may also be configured as either a single system or multiple physical systems, the Multi-System Chassis value is reported even if the chassis is currently configured as a \ Single System. This allows management applications to recognize the multi-system potential of the chassis.\1Ah - CompactPCI\1Bh - AdvancedTCA\1Ch - Blade\1Dh - Blade Enclosure\1Eh - Tablet\1Fh - Convertible\20h - Detachable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 19h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_VERSION_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Version"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_VERSION_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Version"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_VERSION_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Version"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_VERSION_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Version"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_VERSION_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Version"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SERIAL_NUM_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SERIAL_NUM_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SERIAL_NUM_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SERIAL_NUM_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SERIAL_NUM_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Chassis Serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_ASSET_TAG_NUM_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_ASSET_TAG_NUM_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_ASSET_TAG_NUM_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_ASSET_TAG_NUM_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_ASSET_TAG_NUM_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the Asset Tag Number."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_BOOT_STATE_1"
+ Value = "03h"
+ Help = "Specifies the state of the System Chassis or enclosure when it was last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_BOOT_STATE_2"
+ Value = "03h"
+ Help = "Specifies the state of the System Chassis or enclosure when it was last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_BOOT_STATE_3"
+ Value = "03h"
+ Help = "Specifies the state of the System Chassis or enclosure when it was last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_BOOT_STATE_4"
+ Value = "03h"
+ Help = "Specifies the state of the System Chassis or enclosure when it was last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_BOOT_STATE_5"
+ Value = "03h"
+ Help = "Specifies the state of the System Chassis or enclosure when it was last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_PWR_SUPPLY_STATE_1"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Power Supply(Supplies) when last booted. 01h\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_PWR_SUPPLY_STATE_2"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Power Supply(Supplies) when last booted. 01h\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_PWR_SUPPLY_STATE_3"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Power Supply(Supplies) when last booted. 01h\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_PWR_SUPPLY_STATE_4"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Power Supply(Supplies) when last booted. 01h\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_PWR_SUPPLY_STATE_5"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Power Supply(Supplies) when last booted. 01h\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_THERMAL_STATE_1"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Thermal State when last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_THERMAL_STATE_2"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Thermal State when last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_THERMAL_STATE_3"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Thermal State when last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_THERMAL_STATE_4"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Thermal State when last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_THERMAL_STATE_5"
+ Value = "03h"
+ Help = "Specifies the state of System Chassis or enclosure's Thermal State when last booted.\01h - Other\02h - Unknown\03h - Safe\04h - Warning\05h - Critical\06h - Non-recoverable"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 06h"
+End
+
+TOKEN
+ Name = "SYS_SECURE_STATE_1"
+ Value = "03h"
+ Help = "Specifies the System Chassis or enclosure's physical Security Status when last booted.\01h - Other\02h - Unknown\03h - None\04h - External interface locked out\05h - External interface enabled"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+TOKEN
+ Name = "SYS_SECURE_STATE_2"
+ Value = "03h"
+ Help = "Specifies the System Chassis or enclosure's physical Security Status when last booted.\01h - Other\02h - Unknown\03h - None\04h - External interface locked out\05h - External interface enabled"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+TOKEN
+ Name = "SYS_SECURE_STATE_3"
+ Value = "03h"
+ Help = "Specifies the System Chassis or enclosure's physical Security Status when last booted.\01h - Other\02h - Unknown\03h - None\04h - External interface locked out\05h - External interface enabled"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+TOKEN
+ Name = "SYS_SECURE_STATE_4"
+ Value = "03h"
+ Help = "Specifies the System Chassis or enclosure's physical Security Status when last booted.\01h - Other\02h - Unknown\03h - None\04h - External interface locked out\05h - External interface enabled"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+TOKEN
+ Name = "SYS_SECURE_STATE_5"
+ Value = "03h"
+ Help = "Specifies the System Chassis or enclosure's physical Security Status when last booted.\01h - Other\02h - Unknown\03h - None\04h - External interface locked out\05h - External interface enabled"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+TOKEN
+ Name = "SYS_OEM_1"
+ Value = "0000000"
+ Help = "Contains OEM or BIOS Vender Specific Information."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "DWORD"
+End
+
+TOKEN
+ Name = "SYS_OEM_2"
+ Value = "0000000"
+ Help = "Contains OEM or BIOS Vender Specific Information."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "DWORD"
+End
+
+TOKEN
+ Name = "SYS_OEM_3"
+ Value = "0000000"
+ Help = "Contains OEM or BIOS Vender Specific Information."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "DWORD"
+End
+
+TOKEN
+ Name = "SYS_OEM_4"
+ Value = "0000000"
+ Help = "Contains OEM or BIOS Vender Specific Information."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "DWORD"
+End
+
+TOKEN
+ Name = "SYS_OEM_5"
+ Value = "0000000"
+ Help = "Contains OEM or BIOS Vender Specific Information."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "DWORD"
+End
+
+TOKEN
+ Name = "SYS_HEIGHT_1"
+ Value = "0"
+ Help = "Specifies the Height of the System Enclosure in 'U's.\1U = 1.75 inches = 4.445cm\0 = UnSpecified Height"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_HEIGHT_2"
+ Value = "0"
+ Help = "Specifies the Height of the System Enclosure in 'U's.\1U = 1.75 inches = 4.445cm\0 = UnSpecified Height"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_HEIGHT_3"
+ Value = "0"
+ Help = "Specifies the Height of the System Enclosure in 'U's.\1U = 1.75 inches = 4.445cm\0 = UnSpecified Height"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_HEIGHT_4"
+ Value = "0"
+ Help = "Specifies the Height of the System Enclosure in 'U's.\1U = 1.75 inches = 4.445cm\0 = UnSpecified Height"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_HEIGHT_5"
+ Value = "0"
+ Help = "Specifies the Height of the System Enclosure in 'U's.\1U = 1.75 inches = 4.445cm\0 = UnSpecified Height"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NO_PWR_CORDS_1"
+ Value = "1"
+ Help = "Specifies the Number of Power Cords in the System.\0 = UnSpecified"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NO_PWR_CORDS_2"
+ Value = "1"
+ Help = "Specifies the Number of Power Cords in the System.\0 = UnSpecified"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NO_PWR_CORDS_3"
+ Value = "1"
+ Help = "Specifies the Number of Power Cords in the System.\0 = UnSpecified"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NO_PWR_CORDS_4"
+ Value = "1"
+ Help = "Specifies the Number of Power Cords in the System.\0 = UnSpecified"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "NO_PWR_CORDS_5"
+ Value = "1"
+ Help = "Specifies the Number of Power Cords in the System.\0 = UnSpecified"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "ELEMENT_COUNT_1"
+ Value = "0"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+End
+
+TOKEN
+ Name = "ELEMENT_COUNT_2"
+ Value = "0"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+End
+
+TOKEN
+ Name = "ELEMENT_COUNT_3"
+ Value = "0"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+End
+
+TOKEN
+ Name = "ELEMENT_COUNT_4"
+ Value = "0"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+End
+
+TOKEN
+ Name = "ELEMENT_COUNT_5"
+ Value = "0"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "0-255"
+End
+
+TOKEN
+ Name = "ELEMENT_LEN_1"
+ Value = "3"
+ Help = "Contained Element Record Length"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ELEMENT_LEN_2"
+ Value = "3"
+ Help = "Contained Element Record Length"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ELEMENT_LEN_3"
+ Value = "3"
+ Help = "Contained Element Record Length"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ELEMENT_LEN_4"
+ Value = "3"
+ Help = "Contained Element Record Length"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ELEMENT_LEN_5"
+ Value = "3"
+ Help = "Contained Element Record Length"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CONT_ELEMENT_1"
+ Value = "{0,0,0}"
+ Help = "Contained Elements: please specify (ELEMENT_COUNT_1 * ELEMENT_LEN_1) byte entries"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CONT_ELEMENT_2"
+ Value = "{0,0,0,0,0,0}"
+ Help = "Contained Elements: please specify (ELEMENT_COUNT_2 * ELEMENT_LEN_2) byte entries"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CONT_ELEMENT_3"
+ Value = "{0,0,0,0,0,0,0,0,0}"
+ Help = "Contained Elements: please specify (ELEMENT_COUNT_3 * ELEMENT_LEN_3) byte entries"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CONT_ELEMENT_4"
+ Value = "{0,0,0,0,0,0,0,0,0,0,0,0}"
+ Help = "Contained Elements: please specify (ELEMENT_COUNT_4 * ELEMENT_LEN_4) byte entries"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CONT_ELEMENT_5"
+ Value = "{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}"
+ Help = "Contained Elements: please specify (ELEMENT_COUNT_5 * ELEMENT_LEN_5) byte entries"
+ TokenType = Expression
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SKU_NUMBER_1"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SKU_NUMBER_2"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SKU_NUMBER_3"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SKU_NUMBER_4"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SYS_CHASSIS_SKU_NUMBER_5"
+ Value = "$(DEFAULT_STRING)"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 4 - PROCESSOR INFORMATION
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of a single
+# processor; a separate structure instance is provided for each system
+# processor socket/slot. For example, a system with an IntelDX2 processor
+# would have a single structure instance while a system with an IntelSX2
+# processor would have a structure to describe the main CPU and a second
+# structure to describe the 80487 co-processor.
+#
+# NOTE : One structure is provided for each processor instance in a system.
+# For example, a system that supports up to two processors includes two
+# Processor Information Structures - even if only one processor is
+# currently installed. Software that interprets the SMBIOS information
+# can count the Processor Information structures to determine the maximum
+# possible configuration of the system.
+#
+##############################################################################
+
+TOKEN
+ Name = "PROCESSOR_INFO"
+ Value = "1"
+ Help = "ON -> Processor Information (Type 4) structure will be present\OFF -> Processor Information (Type 4) structure will not be present\The number of CPU is defined in CPU.SDL as NCPU.\Total number of processors will be NCPU ( specified in CPU.SDL) \Currenty there is support for 4 Processors. \To support more processores modify in SMBDESC.DEF and SMBIOS.SDL"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE4_STRUCTURE"
+ Value = "$(PROCESSOR_INFO)"
+ Help = "Alternate token name for PROCESSOR_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NO_OF_PROCESSOR_SOCKETS"
+ Value = "1"
+ Help = "Specifies the Number of Physical Processors (Number of Processor Sockets) in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "1, 2, 3.........."
+End
+
+##############################################################################
+#
+# TYPE 5 - MEMORY CONTROLLER INFORMATION
+#
+##############################################################################
+#
+# NOTE : This structure, and its companion Memory Module Information
+# (Type 6), are OBSOLETE starting with version 2.1 of this specification;
+# The Physical Memory Array (Type 16) and Memory Device (Type 17)
+# structures, should be used instead to allow proper population of the
+# DMI 2.0 required groups. The information in this structure defines the
+# attributes of the system's memory controller(s) and the supported
+# attributes of any memory-modules present in the sockets controlled by
+# this controller.
+#
+##############################################################################
+
+TOKEN
+ Name = "MEM_CTRL_INFO"
+ Value = "0"
+ Help = "ON -> Memory Controller Information (Type 5) structure will be present\OFF -> Memory Controller Information (Type 5) structure will not be present.\The following information is needed only if MEMORY_CONTROLLER_INFO = Present. This structure (TYPE 5) is associated with MEMORY MODULE Structure(Type 6)\Handle information of Type 6 is defined in this structure."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE5_STRUCTURE"
+ Value = "$(MEM_CTRL_INFO)"
+ Help = "Alternate token name for MEM_CTRL_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MEM_CTRL_EDD"
+ Value = "06h"
+ Help = "Please enter the proper value as per the SMBIOS spec 2.3.1"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MEM_CTRL_INTRLV"
+ Value = "03h"
+ Help = "Please enter the proper value as per the SMBIOS spec 2.3.1"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MAX_MEM_MODULE_SIZE"
+ Value = "2048"
+ Help = "Specify size in terms of MB only!!!"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "Memory Controller ECC"
+ Help = "Following are the bit fiels according to SMBIOS 2.3.1"
+ TokenType = Integer
+End
+
+TOKEN
+ Name = "MCE_OTHER"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MCE_UNKNOWN"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MCE_NONE"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MCE_SINGLE_BIT_ECC"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MCE_DOUBLE_BIT_ECC"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MCE_ERROR_SCRUBBING"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "MEMORY CONTROLLER SUPPORTED SPEED"
+ Help = "Followin are the bit fields as per SMBIOS 2.3.1 topic 3.3.64"
+ TokenType = Integer
+End
+
+TOKEN
+ Name = "SS_OTHER "
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SS_UNKNOWN "
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SS_70NS"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SS_60NS"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "SS_50NS"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "MEMORY CONTROLLER SUPPORTED MEMORY TYPES"
+ Help = "Following are the supported memory types as per SMBIOS 2.3.1 topic 3.3.7.1"
+ TokenType = Integer
+End
+
+TOKEN
+ Name = "TYPE_OTHER"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_UNKNOWN"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_STANDARD"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_FAST_PAGE_MODE"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_EDO"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_PARITY"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_ECC"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_SIMM"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_DIMM"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_BURST_EDO"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE_SDRAM"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+
+TOKEN
+ Name = "MEMORY MODULE VOTAGE SUPPORT"
+ Help = "Following are bit fiels according to SMBIOS 2.3.1"
+ TokenType = Integer
+End
+
+TOKEN
+ Name = "MM_VOLTAGE_29V"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MM_VOLTAGE_33V"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "MM_VOLTAGE_5V"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 6 - MEMORY MODULE INFORMATION
+#
+##############################################################################
+#
+# NOTE : This structure, and its companion Memory Controller Information
+# (Type 5), are OBSOLETE starting with version 2.1 of this specification;
+# The Physical Memory Array (Type 16) and Memory Device (Type 17)
+# structures, should be used instead to allow proper population of the
+# DMI 2.0 required groups. One Memory Module Information structure is
+# included for each memory-module socket in the system. The information
+# in this structure describes the Speed, Type, Size and Error Status of
+# each system memory module. The supported attributes of each module are
+# described by the 'owning' Memory Controller Information Structure.
+#
+##############################################################################
+
+TOKEN
+ Name = "MEM_MODULE_INFO"
+ Value = "0"
+ Help = "ON -> Memory Module Information structure will be present\OFF -> Memory Module Information structure will not be present\Make sure to put proper Memory Module information under section 'Structure Type 6 : MEMORY MODULE INFORMATION' in file SMBDESC.DEF\Port 'get_mem_module_info' from NBSMBIOS.ASM"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE6_STRUCTURE"
+ Value = "$(MEM_MODULE_INFO)"
+ Help = "Alternate token name for MEM_MODULE_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 7 - CACHE INFORMATION
+#
+##############################################################################
+#
+# The information in this Structure defines the attributes of CPU Cache
+# device in the System. One structure is specified for each such device,
+# whether the device is internal to or external to the CPU module. Cache
+# modules can be associated with a Processor structure in one or two ways
+# depending on the SMBIOS version. CPU module will update the internal
+# cache structure as its updationg the processor structures.
+#
+##############################################################################
+
+TOKEN
+ Name = "NUMBER_OF_PROC_CACHE"
+ Value = "3"
+ Help = "Number of Processor Cache Present.\NOTE: DO NOT CHANGE THE VALUE."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Lock = Yes
+ Range = "1-8"
+End
+
+TOKEN
+ Name = "EXTERNAL_CACHE_INFORMATION"
+ Value = "0"
+ Help = "If you have external Cache define it in SMBDESC.DEF file and trun this flag ON\Make sure that functions 'ExternalCacheInit_FAR' from SMBPORT.ASM and \'CSPHk_get_ext_cache_info_FAR' from NBSMBIOS.ASM are properly ported."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE7_STRUCTURE"
+ Value = "$(EXTERNAL_CACHE_INFORMATION)"
+ Help = "Alternate token name for EXTERNAL_CACHE_INFORMATION"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 8 - PORT CONNECTOR INFORMATION
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of a system
+# port connector, e.g. parallel, serial, keyboard, or mouse ports. The
+# Port's type and Connector information are provided. One structure is
+# present for each port provided by the system.
+#
+##############################################################################
+
+TOKEN
+ Name = "PORT_CONNECTOR_INFO"
+ Value = "1"
+ Help = "Turn this flag Off for not generating the Type 8 structures"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE8_STRUCTURE"
+ Value = "$(PORT_CONNECTOR_INFO)"
+ Help = "Alternate token name for PORT_CONNECTOR_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_EXT_PORT_CONNECTORS"
+ Value = "8"
+ Help = "Number of External Port Connectors in the Sytem."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 20"
+End
+
+TOKEN
+ Name = "NUMBER_OF_INT_PORT_CONNECTORS"
+ Value = "16"
+ Help = "Number of Internal Port Connectors in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 20"
+End
+
+##############################################################################
+#
+# TYPE 9 - SYSTEM SLOTS
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of a system
+# slot. One structure is provided for each slot in the system.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_SLOT_INFO"
+ Value = "1"
+ Help = "ON -> System Slot Information structure will be present\OFF -> System Slot Information structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "TYPE9_STRUCTURE"
+ Value = "$(SYSTEM_SLOT_INFO)"
+ Help = "Alternate token name for SYSTEM_SLOT_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_SYSTEM_SLOTS"
+ Value = "5"
+ Help = "Identifies the number of system slots available on platform including the AGP slot.\"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "AGP_BRIDGE_BUS_DEV_FUNC_NO"
+ Value = "08H"
+ Help = "This variable contains the Bus#, dev#, func# of the AGP Bridge. A value of FFFF means no AGP Bridge present.\Bit 15-8 = Bus#\Bit7-3 = Device#\Bit2-0 = Function#"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 10 - ON BOARD DEVICES INFORMATION
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of devices that
+# are onboard (soldered onto) a system element, usually the baseboard. In
+# general, an entry in this table implies that the BIOS has some level of
+# control over the enabling of the associated device for use by the system.
+#
+##############################################################################
+
+TOKEN
+ Name = "ONBOARD_DEVICE_INFO"
+ Value = "1"
+ Help = "ON -> Onboard Device Information structure will be present\OFF -> OnBoard Device Information structure will not be present\The following information is needed only if ONBOARD_DEVICE_INFO = Present\Syntax: ONBOARD_DEVICE_X DEFINE <Enabled or Disabled, Onboard Device Type, Descrition String>\ Onboard device status -> Describes the status(enabled/disabled) of on board device\ On board device Type -> Video, Audio, SCSI etc... for more detail search for On-board device Type equates in structure Type 10, refer SMB.EQU\ Description String -> Describes the on board device e.g.'Video', 'Audio' etc.."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE10_STRUCTURE"
+ Value = "$(ONBOARD_DEVICE_INFO)"
+ Help = "Alternate token name for ONBOARD_DEVICE_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_ONBOARD_DEVICES"
+ Value = "1"
+ Help = "Number of Onboard Devices Present in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 11 - OEM STRINGS
+#
+##############################################################################
+#
+# This structure contains free form strings defined by the OEM.
+#
+# Examples of this are: Part Numbers for Reference Documents for the sytem,
+# contact information for the manufacturer, etc.
+#
+##############################################################################
+
+TOKEN
+ Name = "OEM_STRING_INFO"
+ Value = "1"
+ Help = "ON -> OEM String Information structure will be present\OFF -> OEM String Information structure will not be present\Enter the related information in file SMBDESC.DEF"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE11_STRUCTURE"
+ Value = "$(OEM_STRING_INFO)"
+ Help = "Alternate token name for OEM_STRING_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_OEM_STRINGS"
+ Value = "1"
+ Help = "NUMBER OF OEM STRINGS\identifies the total number of OEM strings defined for this structure."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "1-32"
+End
+
+TOKEN
+ Name = "OEM_STRING_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_STRING_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_STRING_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_STRING_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_STRING_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_STRING_6"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "OEM_STRING_INFO" "=" "1"
+End
+
+##############################################################################
+#
+# TYPE 12 - SYSTEM CONFIGURATION OPTIONS
+#
+##############################################################################
+#
+# This structure contains information required to configure the Base
+# Board's Jumpers and Switches.
+#
+# Examples of this are:
+# JP2: 1-2 Cache Size is 256K, 2-3 Cache Size is 512K
+# SW1-1: Close to Disable On Board Video'
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_CONFIG_OPTION_INFO"
+ Value = "1"
+ Help = "ON -> System Configuration Strings Information structure will be present\OFF -> System Configuration Strings Information structure will not be present\Please port necessary structures from file SMBDESC.DEF"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE12_STRUCTURE"
+ Value = "$(SYSTEM_CONFIG_OPTION_INFO)"
+ Help = "Alternate token name for SYSTEM_CONFIG_OPTION_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_SYSTEM_CONFIG_STRINGS"
+ Value = "1"
+ Help = "NUMBER OF SYSTEM CONFIGURATION STRINGS\identifies the total number of strings defined for this structure."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "1-32"
+End
+
+TOKEN
+ Name = "SYSTEM_CONFIG_STRING_1"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM SYSTEM CONFIG STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "SYSTEM_CONFIG_OPTION_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "SYSTEM_CONFIG_STRING_2"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "SYSTEM_CONFIG_OPTION_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "SYSTEM_CONFIG_STRING_3"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "SYSTEM_CONFIG_OPTION_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "SYSTEM_CONFIG_STRING_4"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "SYSTEM_CONFIG_OPTION_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "SYSTEM_CONFIG_STRING_5"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the OEM STRING"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "SYSTEM_CONFIG_OPTION_INFO" "=" "1"
+End
+
+##############################################################################
+#
+# TYPE 13 - BIOS LANGUAGE INFORMATION
+#
+##############################################################################
+#
+# The information in this structure defines the installable language
+# attributes of the BIOS.
+#
+##############################################################################
+
+TOKEN
+ Name = "BIOS_LANGUAGE_INFO"
+ Value = "1"
+ Help = "ON -> Bios Language Information structure will be present\OFF -> Bios Language Information structure will not be present"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BIOS_LANGUAGE_FORMAT"
+ Value = "0"
+ Help = "Format of the Language Strings.\ OFF -> Strings use Long Format ON -> Strings use Abbreviated Fomat \US English <en|US|iso8859 - 1> <enUS>\French Canadian <fr|CA|iso8859-1> <frCA>\Japanese <ja|JP|unicode> <jaJP>\Espanol <es|ES|iso8859-1> <esES>\Dutch <de|DE|iso8859-1> <deDE>\Italian <it|IT|iso8859-1> <itIT>"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 14 - GROUP ASSOCIATION INFORMATION
+#
+##############################################################################
+#
+# Not supported by BIOS
+#
+##############################################################################
+
+##############################################################################
+#
+# TYPE 15 - SYSTEM EVENT LOG
+#
+##############################################################################
+#
+# The presence of this structure within the SMBIOS data returned for a
+# system indicates that the system supports an Event Log. An event Log is
+# a fixed-length area within a non-volatile storage element, starting with
+# a fixed-length (and vendor-specific) header record, followed by one or
+# more variable-length log records.
+#
+##############################################################################
+
+TOKEN
+ Name = "EVENT_LOG_INFO"
+ Value = "0"
+ Help = "ON -> Event-log Information structure will be present\OFF -> Event-log Information structure will not be present\"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE15_STRUCTURE"
+ Value = "$(EVENT_LOG_INFO)"
+ Help = "Alternate token name for EVENT_LOG_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NO_OF_SUPPORTED_EVENTS"
+ Value = "10h"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+End
+
+##############################################################################
+#
+# TYPE 16 - PHYSICAL MEMORY ARRAY
+#
+##############################################################################
+#
+# This structure describes a collection of memory devices that operate
+# together to form a memory address space.
+#
+##############################################################################
+
+TOKEN
+ Name = "TYPE16_STRUCTURE"
+ Value = "1"
+ Help = "ON -> Physical Memory Array Information structure will be present\OFF -> Physical Memory Array Information structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FLASH_MEMORY_ARRAY_INFO"
+ Value = "0"
+ Help = "ON -> Flash Memory Array Information (Type 16,17,19,20) structures will be present.\OFF -> Flash Memory Array Information (Type 16,17,19,20) structures will not be present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NO_OF_PHYSICAL_MEMORY_ARRAY"
+ Value = "1"
+ Help = "Specifies the Total number of Physical Arrays in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "1 - 5"
+End
+
+TOKEN
+ Name = "A1_MEMORY_SOCKETS"
+ Value = "4"
+ Help = "Number of Memory Modules/Slots in the first Physical Memory Array\Attention: If the number of memory sockets are more than the device entries in porting file SMBDESC.DEF (e.g. 32 devices by default as in A1_DEVICE_32) then the device entry list needs to be extended to accomodate the number of memory slots requuired"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "A2_MEMORY_SOCKETS"
+ Value = "0"
+ Help = "Number of Memory Modules/Slots in the second Physical Memory Array\Attention: If the number of memory sockets are more than the device entries in porting file SMBDESC.DEF (e.g. 32 devices by default as in A1_DEVICE_32) then the device entry list needs to be extended to accomodate the number of memory slots requuired"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Token = "NO_OF_PHYSICAL_MEMORY_ARRAY" ">" "1"
+End
+
+TOKEN
+ Name = "A3_MEMORY_SOCKETS"
+ Value = "0"
+ Help = "Number of Memory Modules/Slots in the third Physical Memory Array\Attention: If the number of memory sockets are more than the device entries in porting file SMBDESC.DEF (e.g. 32 devices by default as in A1_DEVICE_32) then the device entry list needs to be extended to accomodate the number of memory slots requuired"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Token = "NO_OF_PHYSICAL_MEMORY_ARRAY" ">" "2"
+End
+
+TOKEN
+ Name = "A4_MEMORY_SOCKETS"
+ Value = "0"
+ Help = "Number of Memory Modules/Slots in the fourth Physical Memory Array\Attention: If the number of memory sockets are more than the device entries in porting file SMBDESC.DEF (e.g. 32 devices by default as in A1_DEVICE_32) then the device entry list needs to be extended to accomodate the number of memory slots requuired"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Token = "NO_OF_PHYSICAL_MEMORY_ARRAY" ">" "3"
+End
+
+##############################################################################
+#
+# TYPE 17 - MEMORY DEVICE INFORMATION
+#
+##############################################################################
+#
+# This structure describes a single memory device that is a part of a
+# larger Physical Memory Array (Type 16).
+#
+# NOTE: If a system includes memory-device sockets, the SMBIOS
+# implementation includes a Memory Device structure instance for each
+# slot whether or not the socket is currently populated.
+#
+##############################################################################
+
+##############################################################################
+#
+# TYPE 18 - 32-BIT MEMORY ERROR INFORMATION
+#
+##############################################################################
+#
+# This structure identifies the specifics of an error that might be
+# detected within a Physical Memory Array.
+#
+##############################################################################
+
+TOKEN
+ Name = "MEMORY_ERROR_INFO"
+ Value = "0"
+ Help = "ON -> Memory Error Information (Type 18) structures will be present.\OFF -> Memory Error Information (Type 18) structures will not be present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MEMORY_ERROR_TYPE"
+ Value = "02h"
+ Help = "The type of error that is associated with the current status reported for the Memory Array or Device.\01h - Other\02h - Unknown\03h - OK\04h - Bad Read\05h - Parity Error\06h - Single-Bit Error\07h - Double-Bit Error\08h - Multi-Bit Error\09h - Nibble Error\0Ah - CheckSum Error\0Bh - CRC Error\0Ch - Corrected Single-Bit Error\0Dh - Corrected Error\0Eh - UnCorrectable Error"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0h - 0Eh"
+End
+
+TOKEN
+ Name = "ERROR_GRANULARITY"
+ Value = "02h"
+ Help = "Specifies the granularity, e.g. device vs. Partition, to which the error can be resolved.\01h - Other\02h - Unknown\03h - Device Level\04h - Memory Partition Level"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 04h"
+End
+
+TOKEN
+ Name = "ERROR_OPERATION"
+ Value = "02h"
+ Help = "Specifies the Memory Access Operation that caused the Error.\01h - Other\02h - Unknown\03h - Read\04h - Write\05h - Partial Write"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "1 - 5"
+End
+
+TOKEN
+ Name = "VENDOR_SYNDROME"
+ Value = "00000000h"
+ Help = "Specifies the Vendor-Specific ECC Syndrome or CRC Data associated with the erroneous Access.\If the value is Unknown, this field is 0000 0000h"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "MEMORY_ARRAY_ERROR_ADDRESS"
+ Value = "80000000h"
+ Help = "Specifies the 32-bit Pbysical Address of the Error Based on the Addressing of the Bus to which the Memory Array is connected.\If the address is Unknown, this field contains 8000 0000h"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "DEVICE_ERROR_ADDRESS"
+ Value = "80000000h"
+ Help = "Specifies the 32-bit Physical Address of the Error Relative to the Start of the Failing Memory Device, in Bytes.\If the address is Unknown, this field contains 8000 0000h"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "ERROR_RESOLUTION"
+ Value = "80000000h"
+ Help = "Specifies the range, in bytes, within which the Error can be determined, when an Error Address is given.\If the range is Unknown, this field contains 8000 0000h"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+##############################################################################
+#
+# TYPE 19 - MEMORY ARRAY MAPPED ADDRESS
+#
+##############################################################################
+#
+# This structure provides the Address mapping for a Physical Memory Array.
+# One structure is present for each contiguous address range described.
+#
+##############################################################################
+
+TOKEN
+ Name = "ARRAY_MAPPED_STARTING_ADDRESS"
+ Value = "00000000h"
+ Help = "Specifies the Physical Address, in KiloBytes, of a range of memory mapped to the specified Physical Memory Array."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "ARRAY_MAPPED_ENDING_ADDRESS"
+ Value = "00000000h"
+ Help = "Specifies the Physical Ending Address of the last KiloByte of a range of Addresses mapped to the specified Physical Memory Array."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "PARTITION_WIDTH"
+ Value = "00h"
+ Help = "Specifies the Number of Memory Devices that form a single row or Memory for the address partition defined by this structure."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 20 - MEMORY DEVICE MAPPED ADDRESS
+#
+##############################################################################
+#
+# This structure maps Memory Address space usually to a Device-Level
+# granularity. One structure is present for each contiguous address range
+# described.
+#
+# NOTE: A Memory Device Mapped Address structure is provided only if a
+# Memory Device has a mapped address - there is no provision within this
+# structure to map a zero-length address space.
+#
+##############################################################################
+
+TOKEN
+ Name = "MEMORY_DEVICE_INFO"
+ Value = "1"
+ Help = "ON -> Memory Device Mapped Address Information (Type 20) structures will be present.\OFF -> Memory Device Mapped Address Information (Type 20) structures will not be present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MEMORY_DEVICE_STARTING_ADDRESS"
+ Value = "00000000h"
+ Help = "Specifies the Physical Address, in KiloBytes, of a range of Memory Mapped to the referenced Memory Device."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "MEMORY_DEVICE_ENDING_ADDRESS"
+ Value = "00000000h"
+ Help = "Specifies the Physical Ending Address of the last KiloByte of a range of Addresses mapped to the referenced Memory Device."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0 - 0FFFFFFFFh"
+End
+
+TOKEN
+ Name = "NO_OF_DEVICES_IN_ROW"
+ Value = "01h"
+ Help = "Specifies the Number of Memory Devices that form a Row.\For example, if two 8-bit devices form a 16-bit row, this field's value will be 2 or if two 64-bit devices form a 128-bit row then also the field's value will be 2.\or if 1 64-bit device form a 64-bit row then the field's value will be 1."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "INTERLEAVE_DATA_DEPTH"
+ Value = "00h"
+ Help = "Specifies the maximum number of consecutive rows from the referenced Memory Device that are accessed in a single interleaved transfer.\If the device is not part of an interleave, the field contains 0; if the interleave configuration is Unknown, the value is 0FFh.\For example, if a device transfers two rows each time it is read, its Interleaved Data Depth is set to 2.\If that device is 2:1 interleaved and in Interleave Position 1, the rows mapped to that device are 1,2,5,6,9,10, etc."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 21 - BUILT-IN POINTING DEVICE
+#
+##############################################################################
+#
+# This Structure describes the attributes of the built-in pointing device
+# for the system. The presence of this structure does not imply that the
+# built-in pointing device is active for the system's use.
+#
+##############################################################################
+
+TOKEN
+ Name = "BUILTIN_POINTING_DEVICE_INFO"
+ Value = "0"
+ Help = "ON -> Built In Pointing Device Information (Type 21) structure will be present\OFF -> Built In Pointing Device Information (Type 21) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE21_STRUCTURE"
+ Value = "$(BUILTIN_POINTING_DEVICE_INFO)"
+ Help = "Alternate token name for BUILTIN_POINTING_DEVICE_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NO_OF_POINTING_DEVICE"
+ Value = "01h"
+ Help = "Specifies the number of Pointing Device."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "01h - 05h"
+End
+
+##############################################################################
+#
+# TYPE 22 - PORTABLE BATTERY
+#
+##############################################################################
+#
+# This Structure describes the attributes of the Portable Battery(s) for
+# the System. The Structure contains the static attributes for the group.
+# Each structure describes a single battery pack's attributes.
+#
+##############################################################################
+
+TOKEN
+ Name = "PORTABLE_BATTERY_INFO"
+ Value = "0"
+ Help = "ON -> Portable Battery Information (Type 22) structure will be present\OFF -> Portable Battery Information (Type 22) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE22_STRUCTURE"
+ Value = "$(PORTABLE_BATTERY_INFO)"
+ Help = "Alternate token name for PORTABLE_BATTERY_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NO_OF_PORTABLE_BATTERY"
+ Value = "4"
+ Help = "Specifies the Total number of Portable Batteries in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+ Range = "1 - 5"
+End
+
+TOKEN
+ Name = "PORT_BAT_LOCATION_1"
+ Value = "Location of the battery"
+ Help = "Specifies the Battery Location"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_LOCATION_2"
+ Value = "Location of the battery"
+ Help = "Specifies the Battery Location"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_LOCATION_3"
+ Value = "Location of the battery"
+ Help = "Specifies the Battery Location"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_LOCATION_4"
+ Value = "Location of the battery"
+ Help = "Specifies the Battery Location"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_LOCATION_5"
+ Value = "Location of the battery"
+ Help = "Specifies the Battery Location"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURER_1"
+ Value = "Battery Manufacturer"
+ Help = "Specifies the Battery Manufacturer"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURER_2"
+ Value = "Battery Manufacturer"
+ Help = "Specifies the Battery Manufacturer"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURER_3"
+ Value = "Battery Manufacturer"
+ Help = "Specifies the Battery Manufacturer"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURER_4"
+ Value = "Battery Manufacturer"
+ Help = "Specifies the Battery Manufacturer"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURER_5"
+ Value = "Battery Manufacturer"
+ Help = "Specifies the Battery Manufacturer"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURE_DATE_1"
+ Value = "01/01/2012"
+ Help = "Specifies the Battery Manufacturer Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURE_DATE_2"
+ Value = "01/01/2012"
+ Help = "Specifies the Battery Manufacturer Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURE_DATE_3"
+ Value = "01/01/2012"
+ Help = "Specifies the Battery Manufacturer Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURE_DATE_4"
+ Value = "01/01/2012"
+ Help = "Specifies the Battery Manufacturer Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_MANUFACTURE_DATE_5"
+ Value = "01/01/2012"
+ Help = "Specifies the Battery Manufacturer Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SERIAL_NUMBER_1"
+ Value = "Serial Number"
+ Help = "Specifies the Battery Serial Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SERIAL_NUMBER_2"
+ Value = "Serial Number"
+ Help = "Specifies the Battery Serial Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SERIAL_NUMBER_3"
+ Value = "Serial Number"
+ Help = "Specifies the Battery Serial Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SERIAL_NUMBER_4"
+ Value = "Serial Number"
+ Help = "Specifies the Battery Serial Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SERIAL_NUMBER_5"
+ Value = "Serial Number"
+ Help = "Specifies the Battery Serial Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_DEVICE_NAME_1"
+ Value = "Battery Name"
+ Help = "Specifies the Battery Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_DEVICE_NAME_2"
+ Value = "Battery Name"
+ Help = "Specifies the Battery Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_DEVICE_NAME_3"
+ Value = "Battery Name"
+ Help = "Specifies the Battery Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_DEVICE_NAME_4"
+ Value = "Battery Name"
+ Help = "Specifies the Battery Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_DEVICE_NAME_5"
+ Value = "Battery Name"
+ Help = "Specifies the Battery Name"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DEVICE_CHEMISTRY_1"
+ Value = "04h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DEVICE_CHEMISTRY_2"
+ Value = "04h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DEVICE_CHEMISTRY_3"
+ Value = "04h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DEVICE_CHEMISTRY_4"
+ Value = "04h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DEVICE_CHEMISTRY_5"
+ Value = "04h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_1"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_2"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_3"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_4"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_5"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_VOLTAGE_1"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_VOLTAGE_2"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_VOLTAGE_3"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_VOLTAGE_4"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_VOLTAGE_5"
+ Value = "00h"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_VER_NO_1"
+ Value = "SBDS Version Number"
+ Help = "Smart Battery Data Specification Version Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_VER_NO_2"
+ Value = "SBDS Version Number"
+ Help = "Smart Battery Data Specification Version Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_VER_NO_3"
+ Value = "SBDS Version Number"
+ Help = "Smart Battery Data Specification Version Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_VER_NO_4"
+ Value = "SBDS Version Number"
+ Help = "Smart Battery Data Specification Version Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_VER_NO_5"
+ Value = "SBDS Version Number"
+ Help = "Smart Battery Data Specification Version Number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "MAX_ERROR_IN_BAT_DATA_1"
+ Value = "0FFh"
+ Help = "Maximum Error (as percentage in the range 0-100)"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "MAX_ERROR_IN_BAT_DATA_2"
+ Value = "0FFh"
+ Help = "Maximum Error (as percentage in the range 0-100)"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "MAX_ERROR_IN_BAT_DATA_3"
+ Value = "0FFh"
+ Help = "Maximum Error (as percentage in the range 0-100)"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "MAX_ERROR_IN_BAT_DATA_4"
+ Value = "0FFh"
+ Help = "Maximum Error (as percentage in the range 0-100)"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "MAX_ERROR_IN_BAT_DATA_5"
+ Value = "0FFh"
+ Help = "Maximum Error (as percentage in the range 0-100)"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_SERIAL_NO_1"
+ Value = "1234h"
+ Help = "16-bit value - Identifies battery's serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_SERIAL_NO_2"
+ Value = "1234h"
+ Help = "16-bit value - Identifies battery's serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_SERIAL_NO_3"
+ Value = "1234h"
+ Help = "16-bit value - Identifies battery's serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_SERIAL_NO_4"
+ Value = "1234h"
+ Help = "16-bit value - Identifies battery's serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_SERIAL_NO_5"
+ Value = "1234h"
+ Help = "16-bit value - Identifies battery's serial number"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_MAN_DATE_1"
+ Value = "2821h"
+ Help = "Cell Pack Manufacture Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_MAN_DATE_2"
+ Value = "2821h"
+ Help = "Cell Pack Manufacture Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_MAN_DATE_3"
+ Value = "2821h"
+ Help = "Cell Pack Manufacture Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_MAN_DATE_4"
+ Value = "2821h"
+ Help = "Cell Pack Manufacture Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_MAN_DATE_5"
+ Value = "2821h"
+ Help = "Cell Pack Manufacture Date"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_DEV_CHEM_1"
+ Value = "SBDS Device Chemistry"
+ Help = "Battery Chemistry"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_DEV_CHEM_2"
+ Value = "SBDS Device Chemistry"
+ Help = "Battery Chemistry"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_DEV_CHEM_3"
+ Value = "SBDS Device Chemistry"
+ Help = "Battery Chemistry"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_DEV_CHEM_4"
+ Value = "SBDS Device Chemistry"
+ Help = "Battery Chemistry"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "PORT_BAT_SBDS_DEV_CHEM_5"
+ Value = "SBDS Device Chemistry"
+ Help = "Battery Chemistry"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_MULTIPLIER_1"
+ Value = "01h"
+ Help = "Multiplication Factor of the Design Capacity"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_MULTIPLIER_2"
+ Value = "01h"
+ Help = "Multiplication Factor of the Design Capacity"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_MULTIPLIER_3"
+ Value = "01h"
+ Help = "Multiplication Factor of the Design Capacity"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_MULTIPLIER_4"
+ Value = "01h"
+ Help = "Multiplication Factor of the Design Capacity"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "DESIGN_CAPACITY_MULTIPLIER_5"
+ Value = "01h"
+ Help = "Multiplication Factor of the Design Capacity"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_SPECIFIC_1"
+ Value = "12345678h"
+ Help = "OEM or BIOS Vendor-specific Information"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_SPECIFIC_2"
+ Value = "12345678h"
+ Help = "OEM or BIOS Vendor-specific Information"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_SPECIFIC_3"
+ Value = "12345678h"
+ Help = "OEM or BIOS Vendor-specific Information"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_SPECIFIC_4"
+ Value = "12345678h"
+ Help = "OEM or BIOS Vendor-specific Information"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+TOKEN
+ Name = "OEM_SPECIFIC_5"
+ Value = "12345678h"
+ Help = "OEM or BIOS Vendor-specific Information"
+ TokenType = Expression
+ TargetEQU = Yes
+ Token = "PORTABLE_BATTERY_INFO" "=" "1"
+End
+
+##############################################################################
+#
+# TYPE 23 - SYSTEM RESET
+#
+##############################################################################
+#
+# This structure describes whether Automatic System Reset functions
+# enabled (Status). If the system has a watchdog Timer and the timer is
+# not reset (Timer Reset) before the Interval elapses, an automatic system
+# reset will occur. The system will re-boot according to the Boot Option.
+# This function may repeat until the Limit is reached, at which time the
+# system will re-boot according to the Boot Option at Limit.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_RESET_INFO"
+ Value = "0"
+ Help = "ON -> System Reset Information (Type 23) structure will be present\OFF -> System Reset Information (Type 23) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE23_STRUCTURE"
+ Value = "$(SYSTEM_RESET_INFO)"
+ Help = "Alternate token name for SYSTEM_RESET_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 24 - HARDWARE SECURITY
+#
+##############################################################################
+#
+# This structure describes the system-wide Hardware Security Settings.
+#
+##############################################################################
+
+TOKEN
+ Name = "HARDWARE_SECURITY_INFO"
+ Value = "0"
+ Help = "ON -> Hardware Security Information (Type 24) structure will be present\OFF -> Hardware Security Information (Type 24) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE24_STRUCTURE"
+ Value = "$(HARDWARE_SECURITY_INFO)"
+ Help = "Alternate token name for HARDWARE_SECURITY_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "HARDWARE_SECURITY_SETTINGS"
+ Value = "00h"
+ Help = "Specifies the Password and reset status for the System.\Bits 7:6 Power-on Password Status\Bits 5:4 Keyboard Password Status\Bits 3:2 Administrator Password Status\Bits 1:0 Front Panel Reset Status\ 00b - Disabled\ 01b - Enabled\ 10b - Not Implemented\ 11b - Unknown"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "Bit Field"
+End
+
+##############################################################################
+#
+# TYPE 25 - SYSTEM POWER CONTROLS
+#
+##############################################################################
+#
+# This structure describes the attributes for controlling the main power
+# supply to the system. Software that interprets this structure uses the
+# month, day, hour, minute and second values to determine the number of
+# seconds untill the next power-on of the system. The presence of this
+# structure implies that a timed power-on facility is available for the
+# system.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_POWER_CONTROLS_INFO"
+ Value = "0"
+ Help = "ON -> System Power Controls Information (Type 25) structure will be present\OFF -> System Power Controls Information (Type 25) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE25_STRUCTURE"
+ Value = "$(SYSTEM_POWER_CONTROLS_INFO)"
+ Help = "Alternate token name for SYSTEM_POWER_CONTROLS_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 26 - VOLTAGE PROBE
+#
+##############################################################################
+#
+# This describes the attributes for a Voltage Probe in the system. Each
+# structure describes a single Voltage Probe.
+#
+##############################################################################
+
+TOKEN
+ Name = "VOLTAGE_PROBE_INFO"
+ Value = "0"
+ Help = "ON -> Voltage Probe Information (Type 26) structure will be present\OFF -> Voltage Probe Information (Type 26) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 27 - COOLING DEVICE
+#
+##############################################################################
+#
+# This structure describes the attributes for a cooling device in the
+# system. Each structure describes a single cooling device.
+#
+##############################################################################
+
+TOKEN
+ Name = "COOLING_DEVICE_INFO"
+ Value = "0"
+ Help = "ON -> Cooling Device Information (Type 27) structure will be present\OFF -> Cooling Device Information (Type 27) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_COOLING_DEVICE"
+ Value = "1"
+ Help = "Identifies the number of Cooling Devices."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 28 - TEMPERATURE PROBE
+#
+##############################################################################
+#
+# The Structure describes the attributes for a temperature probe in the
+# system. Each Structure describes a single Temperature Probe.
+#
+##############################################################################
+
+TOKEN
+ Name = "TEMPERATURE_PROBE_INFO"
+ Value = "0"
+ Help = "ON -> Temperature Probe Information (Type 28) structure will be present\OFF -> Temprature Probe Information (Type 28) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 29 - ELECTRICAL CURRENT PROBE
+#
+##############################################################################
+#
+# This Structure describes the attributes for an Electrical Current Probe
+# in the system. Each structure describes a single Electrical Current
+# Probe.
+#
+##############################################################################
+
+TOKEN
+ Name = "ELECTRICAL_PROBE_INFO"
+ Value = "0"
+ Help = "ON -> Electrical Probe Information (Type 29) structure will be present\OFF -> Electrical Probe Information (Type 29) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 30 - OUT OF BAND REMOTE ACCESS
+#
+##############################################################################
+#
+# This structure describes the attributes and policy settings of a
+# hardware facility that may be used to gain remote access to a hardware
+# system when the operating system is not available due to power-down
+# status, hardware failures, or boot failures.
+#
+##############################################################################
+
+TOKEN
+ Name = "OUT_OF_BAND_REMOTE_ACCESS_INFO"
+ Value = "0"
+ Help = "ON -> OUT-OF-BAND Remote Access Information (Type 30) structure will be present\OFF -> OUT-OF-BAND Remote Access Information (Type 30) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE30_STRUCTURE"
+ Value = "$(OUT_OF_BAND_REMOTE_ACCESS_INFO)"
+ Help = "Alternate token name for OUT_OF_BAND_REMOTE_ACCESS_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "OBRA_MANUFACTURER_NAME"
+ Value = "$(DEFAULT_STRING)"
+ Help = "The string that contains the manufacturer of the Out-Of-Band Access facility"
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "OBRA_CONNECTIONS"
+ Value = "0"
+ Help = "Identifies the current Remote-Access connections:\Bits 7:2 - Reserved for future definition by this specification, set to all zeros.\Bit 1 - Outbound Connection enabled. Identifies whether (1) or not (0) the facility is allowed to initiate outbound connections to contact an alert management facility when critical conditions occur.\Bit 0 - Inbound Connection enabled. Identifies whether (1) or not (0) the facility is allowed to initiate outbound connections to receive incomming connections for the purpose of remote\ operations or problem management."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "Bit Field"
+End
+
+##############################################################################
+#
+# TYPE 31 - BOOT INTEGRITY SERVICES (BIS) ENTRY POINT
+#
+##############################################################################
+#
+# This structure (Type 31) is reserved for use by the Boot Integrity
+# Services (BIS).\Refer to the Boot Integrity Services API Specification
+# for content details.
+#
+##############################################################################
+
+TOKEN
+ Name = "BIS_INFO"
+ Value = "0"
+ Help = "ON -> BIS Information structure will be present\OFF -> BIS Information structure will not be present\"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE31_STRUCTURE"
+ Value = "$(BIS_INFO)"
+ Help = "Alternate token name for BIS_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "CHECKSUM"
+ Value = "00H"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BIS_ENTRY_POINT_REAL_MODE"
+ Value = "0FFFFFFFFh"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "BIS_ENTRY_POINT_FLAT_MODE"
+ Value = "0FFFFFFFFh"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 32 - SYSTEM BOOT INFORMATION
+#
+##############################################################################
+#
+# The Client system firmware, e.g. BIOS, communicates the System Boot
+# Status to the client's Pre-boot Execution Environment (PXE) boot image
+# or OS-present management application via this structure. When used in
+# the PXE environment, for example, this code identifies the reason the
+# PXE was initiated and can be used by boot-image software to further
+# automate an enterprise's PXE sessions. For example, an enterprise could
+# choose to automatically download a hardware-diagnostic image to a client
+# whose reason code indicated either a firmware or operating system
+# detected hardware failure.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_BOOT_INFO"
+ Value = "1"
+ Help = "ON -> System Boot Information (Type 32) structure will be present\OFF -> System Boot Information (Type 32) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "TYPE32_STRUCTURE"
+ Value = "$(SYSTEM_BOOT_INFO)"
+ Help = "Alternate token name for SYSTEM_BOOT_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BOOT_STATUS"
+ Value = "0"
+ Help = "Value Description\0 - No Errors Detected\1 - No Bootable Media\2 - The 'normal' operating system failed to load\3 - Firmware detected hardware failure, including 'unknown' failure types.\4 - Operating system detected hardware failure. For ACPI OS's, the system firmware might set this reason code when the OS reports a boot failure via interfaces defined in the Simple Boot Flag Specification.\5 - User-requested boot, usually via a keystroke\6 - System security violation\7 - Previously requested image. This reason code allows coordination between OS-Present software and the OS-absent environment.\ For example, an OS-present application might enable (via a platform-specific interface) the system to boot to the PXE and request a specific boot-image.\8 - A system watchdog timer expired, causing the system to reboot.\9 - 127 - Reserved for future assignment via this specification.\128 - 191 - Vendor/OEM-specific implementations.\ The Vendor/OEM identifier is the 'Manufacturer' string found in the System Information Structure.\192 - 255 - Product-specific implementations.\ The Productidentifier is formed by the concatenation of the 'Manufacturer' and 'Product Name' strings found in the System Information Structure"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "0-255"
+End
+
+##############################################################################
+#
+# TYPE 33 - 64-BIT MEMORY ERROR INFORMATION
+#
+##############################################################################
+#
+# The structure describes an error within a Physical Memory Array, when
+# the error address is above 4G (0xFFFFFFFF).
+#
+##############################################################################
+
+TOKEN
+ Name = "SIXTY_FOURBIT_MEMORY_ERROR_INFO"
+ Value = "0"
+ Help = "ON -> 64 Bit Memory Error Information (Type 33) structure will be present\OFF -> 64 Bit Memory Error Information (Type 33) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE33_STRUCTURE"
+ Value = "$(SIXTY_FOURBIT_MEMORY_ERROR_INFO)"
+ Help = "Alternate token name for SIXTY_FOURBIT_MEMORY_ERROR_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 34 - MANAGEMENT DEVICE
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of a Management
+# Device. A Management Device might control one or more fans or voltage,
+# current, or temperature probes as defined by one or more Management
+# Device Component Structures (Type 35)
+#
+##############################################################################
+
+TOKEN
+ Name = "MANAGEMENT_DEVICE_INFO"
+ Value = "0"
+ Help = "ON -> Management Device Information (Type 34) structure will be present\OFF -> Management Device Information (Type 34) structure will not be present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE34_STRUCTURE"
+ Value = "$(MANAGEMENT_DEVICE_INFO)"
+ Help = "Alternate token name for MANAGEMENT_DEVICE_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_MANAGEMENT_DEVICES"
+ Value = "1"
+ Help = "Number of Management Devices in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 35 - MANAGEMENT DEVICE COMPONENT
+#
+##############################################################################
+#
+# This Structure associates a Cooling Device or Environmental Probe with
+# structures that define the controlling hardware device and (optionally)
+# the component's thresholds.
+#
+##############################################################################
+
+TOKEN
+ Name = "MGMT_DEV_COMPONENT_DESCRIPTION"
+ Value = "$(DEFAULT_STRING)"
+ Help = "Specifies the additional descriptive information about the component."
+ TokenType = Expression
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 36 - MANAGEMENT DEVICE THRESHOLD DATA
+#
+##############################################################################
+#
+# The information in this structure defines threshold information for a
+# component (probe or cooling unit) contained within a Management Device.
+#
+# For each threshold field present in the structure:
+# 1 - The threshold units (millivolts, milliamps, 1/10th degrees C,
+# or RPMs) are as defined by the associated probe or cooling unit
+# component structure.
+# 2 - If the value is unavailable, the field is set to 0x8000.
+#
+##############################################################################
+
+##############################################################################
+#
+# TYPE 37 - MEMORY CHANNEL
+#
+##############################################################################
+#
+# The information in this structure provides the correlation between a
+# Memory Channel and its associated Memory Devices. Each device presents
+# one or more loads to the channel; the sum of all device loads cannot
+# exceed the channel's defined maximum.
+#
+##############################################################################
+
+TOKEN
+ Name = "MEMORY_CHANNEL_INFO"
+ Value = "0"
+ Help = "ON -> Memory Channel Information (Type 37) will be Present.\OFF -> Memory Channel Information (Type 37) will not be Present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE37_STRUCTURE"
+ Value = "$(MEMORY_CHANNEL_INFO)"
+ Help = "Alternate token name for MEMORY_CHANNEL_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_MEMORY_CHANNELS"
+ Value = "1"
+ Help = "Number of Memory Channels Present in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 38 - IPMI DEVICE INFORMATION
+#
+##############################################################################
+#
+# The information in this structure defines the attributes of an
+# Intelligent Platform Management Interface (IPMI) Baseboard Management
+# Controller (BMC).
+#
+# Refer to the documents available at:
+# http://developer.intel.com/design/servers/ipmi/spec.htm
+# for full documentation of IPMI.
+#
+##############################################################################
+
+TOKEN
+ Name = "IPMI_DEVICE_INFO"
+ Value = "0"
+ Help = "ON ->IPMI Device Information structure will be present\OFF -> IPMI Device Information structure will not be present\"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE38_STRUCTURE"
+ Value = "$(IPMI_DEVICE_INFO)"
+ Help = "Alternate token name for IPMI_DEVICE_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "IPMI_INTERFACE_TYPE"
+ Value = "0"
+ Help = "Baseboard Management Controller (BMC) interface type.\00h - Unknown\01h - KCS : Keyboard Controller Style\02h - SMIC : Server Management Interface Chip\03h - BT : Block Transfer\04h to 0FFh - Reserved for future assignment by this specification."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "00 - 0FFh"
+End
+
+TOKEN
+ Name = "IPMI_SPECIFICATION_REVISION"
+ Value = "15h"
+ Help = "Identifies the IPMI Specification Revision, in BCD format, to which the BMC was designed.\Bits 7:4 hold the most significant digit of the revision, while bits 3:0 hold the least significant bits.\eg. a value of 10h indicates revision 1.0"
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "00 - 99"
+End
+
+TOKEN
+ Name = "I2C_SLAVE_ADDRESS"
+ Value = "00h"
+ Help = "The Slave Address on the I2C bus of this BMC."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "00h - 0FFh"
+End
+
+TOKEN
+ Name = "NV_STORAGE_DEVICE_ADDRESS"
+ Value = "0FFh"
+ Help = "Bus ID of the NV Storage Device. If no storage device exists for this BMC, the field is set to 0FFh."
+ TokenType = Integer
+ TargetEQU = Yes
+ Range = "00h - 0FFh"
+End
+
+TOKEN
+ Name = "BASE_ADDR_MOD_INTR_INFO"
+ Value = "00h"
+ Help = "Base Address Modifier.\Bits 7:6 Register spacing\ 00 - Interface registers are not on successive byte boundaries\ 01 - Interface registers are on 32-bit boundaries\ 10 - Interface registers are on 16-byte boundaries\Bit 4 - LS-bit for addresses\ 0 - Address bit 0 = 0\ 1 - Address bit 0 = 1\Bit 3 - Interrupt Info\ 0 - Interrupt info not specified\ 1 - Interrupt info specified\Bit 1 - Interrupt Polarity\ 0 - Active low\ 1 - Active high\Bit 0 - Interrupt Trigger Mode\ 0 - Edge\ 1 - Level"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "INTERRUPT_NUMBER"
+ Value = "00h"
+ Help = "Interrupt number for IPMI System Interface\00 = unspecified/unsupported"
+ TokenType = Integer
+ TargetEQU = Yes
+End
+
+##############################################################################
+#
+# TYPE 39 - SYSTEM POWER SUPPLY
+#
+##############################################################################
+#
+# This structure identifies attributes of a System Power Supply. One
+# instance of this record is present for each possible Power Supply in a
+# System.
+#
+##############################################################################
+
+TOKEN
+ Name = "SYSTEM_POWER_SUPPLY_INFO"
+ Value = "0"
+ Help = "Type 39 - System Power Supply\OFF -> System Power Supply will not be Present\ON -> System Power Supply will be Present"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE39_STRUCTURE"
+ Value = "$(SYSTEM_POWER_SUPPLY_INFO)"
+ Help = "Alternate token name for SYSTEM_POWER_SUPPLY_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_POWER_SUPPLY"
+ Value = "1"
+ Help = "Number of Power Supplies Present in the System."
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 40 - ADDITIONAL INFORMATION
+#
+##############################################################################
+#
+# This structure is intended to provide additional information for
+# handling unspecified enumerated values and interim field updates in
+# another structure.
+#
+##############################################################################
+
+TOKEN
+ Name = "ADDITIONAL_INFO"
+ Value = "0"
+ Help = "ON -> Additional Information (Type 40) will be Present.\OFF -> Additional Information (Type 40) will not be Present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE40_STRUCTURE"
+ Value = "$(ADDITIONAL_INFO)"
+ Help = "Alternate token name for ADDITIONAL_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ADDITIONAL_INFO_COUNT"
+ Value = "3"
+ Help = "Number of additional information entries"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 41 - ONBOARD DEVICES EXTENDED INFORMATION
+#
+##############################################################################
+#
+# This structure defines the attributes of devices that are onboard.
+#
+##############################################################################
+
+TOKEN
+ Name = "ONBOARD_DEVICE_EXTENDED_INFO"
+ Value = "1"
+ Help = "ON -> Onboard Devices Extended Information (Type 41) will be Present.\OFF -> Onboard Devices Extended Information (Type 41) will not be Present."
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE41_STRUCTURE"
+ Value = "$(ONBOARD_DEVICE_EXTENDED_INFO)"
+ Help = "Alternate token name for ONBOARD_DEVICE_EXTENDED_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ONBOARD_DEVICE_EXT_COUNT"
+ Value = "3"
+ Help = "Number of Onboard Devices"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 129 - INTEL_ASF
+#
+##############################################################################
+#
+# This structure is for Intel ASF support
+#
+##############################################################################
+
+TOKEN
+ Name = "INTEL_ASF"
+ Value = "0"
+ Help = "Type 129 - Intel ASF Support"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TYPE129_STRUCTURE"
+ Value = "$(INTEL_ASF)"
+ Help = "Alternate token name for INTEL_ASF"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 240 - OEM IO GPNV
+#
+##############################################################################
+#
+# This structure is for OEM defined IO structure
+#
+##############################################################################
+
+TOKEN
+ Name = "OEM_IO_GPNV_STRUC_INFO"
+ Value = "0"
+ Help = "Example of OEM defined structures"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE240_STRUCTURE"
+ Value = "$(OEM_IO_GPNV_STRUC_INFO)"
+ Help = "Alternate token name for OEM_IO_GPNV_STRUC_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+##############################################################################
+#
+# TYPE 241 - OEM Memory GPNV
+#
+##############################################################################
+#
+# This structure is for OEM Memory GPNV structure
+#
+##############################################################################
+
+TOKEN
+ Name = "OEM_MEMORY_GPNV_STRUC_INFO"
+ Value = "0"
+ Help = "Example of OEM defined structures"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "TYPE241_STRUCTURE"
+ Value = "$(OEM_MEMORY_GPNV_STRUC_INFO)"
+ Help = "Alternate token name for OEM_MEMORY_GPNV_STRUC_INFO"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "INC_ISA"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "INC_PCI"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+TOKEN
+ Name = "INC_PNP"
+ Value = "0"
+ TokenType = Boolean
+ TargetEQU = Yes
+End
+
+PATH
+ Name = "SMBIOSDATA_DIR"
+End
+
+MODULE
+ Help = "Includes SMBiosStaticData.cif to Project"
+ File = "SMBiosStaticData.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SMBiosStaticData.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "SMBOBJS"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SMBiosStaticData.obj"
+ Parent = "SMBOBJS"
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticDataEnd.asm b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticDataEnd.asm
new file mode 100644
index 0000000..6700391
--- /dev/null
+++ b/Board/EM/SMBIOS/SMBiosStaticData/SmbiosStaticDataEnd.asm
@@ -0,0 +1,81 @@
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticDataEnd.asm 4 6/02/09 3:57p Davidd $
+;
+; $Revision: 4 $
+;
+; $Date: 6/02/09 3:57p $
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosStaticData/SmbiosStaticDataEnd.asm $
+;
+; 4 6/02/09 3:57p Davidd
+; Updated AMI headers (EIP 22180)
+;
+; 3 3/29/07 4:53p Davidd
+; Changed the year in the AMI banner and adjust indentation to coding
+; standard.
+;
+; 1 4/29/05 2:15p Davidd
+; Initial checkin.
+;
+;****************************************************************************
+
+;----------------------------------------------------------------------------
+
+ INCLUDE token.equ
+ INCLUDE smbhdr.equ
+ INCLUDE smbmacro.aid
+ INCLUDE smbstruc.def
+ INCLUDE smb.equ
+ INCLUDE smbdata.mac
+ INCLUDE smbdesc.def
+
+;----------------------------------------------------------------------------
+
+SMBIOS_DSEG SEGMENT BYTE PUBLIC 'DATA'
+ ASSUME cs: SMBIOS_DSEG
+.586p
+
+;----------------------------------------------------------------------------
+
+;----------------------------------------------------------------------------
+; END Of SMBIOS DATA STRUCTURE
+;----------------------------------------------------------------------------
+
+ handle = 0 ; Dummy handle
+ handle = CreateEndOfTable(handle)
+
+ db MKF_EXTRA_RESERVED_BYTES dup (0FFh) ; Extra Space
+
+SMBIOS_DSEG ENDS ; End of Segment
+END ; End of File
+;----------------------------------------------------------------------------
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
diff --git a/Board/EM/SMBIOS/SmbiosBoard.c b/Board/EM/SMBIOS/SmbiosBoard.c
new file mode 100644
index 0000000..85befa5
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosBoard.c
@@ -0,0 +1,1790 @@
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
+//****************************************************************************
+// $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosBoard.c 29 5/07/14 10:33a Davidd $
+//
+// $Revision: 29 $
+//
+// $Date: 5/07/14 10:33a $
+//****************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosBoard.c $
+//
+// 29 5/07/14 10:33a Davidd
+// [TAG] EIP157418
+// [Category] Improvement
+// [Description] Removal of temporary bus assignment or sample code from
+// SmbiosBoard.c template
+// [Files] SmbiosBoard.c
+//
+// 28 11/15/13 4:31p Davidd
+// [TAG] EIP143321
+// [Category] Improvement
+// [Description] Perform "CppCheck" on Smbios module for
+// '4.6.5.1_SMBIOS_36' release
+// [Files] SmbiosBoard.c
+// Smbios.c
+// SmbiosDMIEdit.c
+// SmbiosDMIEditFunc.c
+// SmbiosNvramFunc.c
+//
+// 27 5/23/13 2:36p Davidd
+// [TAG] EIP104836
+// [Category] New Feature
+// [Description] DMIEdit support edit type 4
+// [Files] SmbiosBoard.c
+// SmbiosDMIEditBoard.sdl
+// Smbios.c
+// SmbiosDMIEditFunc.c
+// Smbios.h
+// SmbiosDynamicData.h
+//
+// 26 5/04/11 3:33p Davidd
+// [TAG] EIP57144
+// [Category] NEW FEATURE
+// [Description] Allow SMBIOS Type 39 to be modified using DMIEdit
+// [Files] SmbiosBoard.c
+// Smbios.h
+// SmbiosDynamicData.h
+// Smbios.c
+// SmbiosDmieditFunc.c
+// SmbiosNvramFunc.c
+//
+// 25 4/05/11 11:38a Davidd
+// [TAG] EIP55656
+// [Category] Improvement
+// [Description] Provide generic support in SMBIOS module to include
+// build time EC version
+// [Files] SmbiosBoard.c
+//
+// 24 2/09/11 10:57a Davidd
+// [TAG] EIP52505
+// [Category] Improvement
+// [Description] Dynamically update SMBIOS Type24 (Hardware Security)
+// according to Administrator/User password setup question.
+// [Files] SmbiosBoard.c
+//
+// 23 11/22/10 12:36p Davidd
+// [TAG] EIP44236
+// [Category] BUG FIX
+// [Severity] Normal
+// [Symptom] SMBIOS type 4 Processor Version is incorrect
+// [RootCause] Type 4 Version string is not resized as updated.
+// [Solution] Added code to replace the Version strings as updated.
+// Same
+// also applied to Manufacturer string.
+// [Files]
+// Smbios.c
+// SmbiosBoard.c
+//
+// 22 11/15/10 2:18p Davidd
+// [TAG] EIP46936
+// [Category] Improvement
+// [Description] Generic Smbios module should have the support to
+// disable SMBIOS memory update
+// [Files]
+// Smbios.c
+// Smbios.sdl
+// SmbiosBoard.c
+// SmbiosDynamicData.h
+//
+// 21 11/01/10 12:36p Davidd
+// [TAG] EIP41560
+// [Category] Improvement
+// [Description] DMIEDIT modified values are not preserved in reboot
+// [Files]
+// Smbios.c
+// Smbios.sdl
+// SmbiosBoard.c
+// SmbiosBoard.mak
+//
+// 20 6/02/09 3:43p Davidd
+// Updated AMI and function headers (EIP 22180)
+//
+// 19 5/19/09 11:01a Davidd
+// Changes added to improve memory type 17 porting (EIP 22241).
+//
+// 18 12/30/08 3:11p Davidd
+// Fixed the hanging problem when only SMBIOS binary component is present
+// (ref. EIP 18370)
+//
+// 17 11/14/08 4:39p Davidd
+// - Added OemUpdate protocol. OEM can add code to update any structure
+// here. This function will be called after all structures have been
+// updated with DMI or dynamic data.
+//
+// 16 10/27/08 12:52p Davidd
+// - Code added for memory SPD data access.
+// - Added Type 41 support (SMBIOS v2.6)
+//
+// 15 2/22/08 10:19a Davidd
+// Simplified the way the number of memory slots for each physical memory
+// array are defined.
+//
+// 14 2/13/08 12:41p Davidd
+// Added a close comment missing in CreateBatteryDataForSMBios().
+//
+// 13 2/06/08 3:58p Davidd
+// Added NO_OF_PORTABLE_BATTERY field to SmbiosBoardProtocol to hold the
+// number of batteries in the system.
+//
+// 12 12/17/07 12:09p Davidd
+// Added PORTABLE_BATTERY_INFO to EFI_SMBIOS_BOARD_PROTOCOL.
+// Removed entries intended as reminder of porting is needed. This causes
+// BQA Module Delete/Insertion test to fail.
+//
+// 11 11/28/07 10:56a Davidd
+// Changes added to dynamically update the Processor Information Type 4
+// Voltage field.
+//
+// 10 11/21/07 12:11p Davidd
+//
+// 9 11/21/07 12:04p Davidd
+// Added function CreateBatteryDataForSMBios to support Portable Battery
+// Data structure type 22.
+//
+// 8 6/05/07 4:03p Michaela
+// Added porting comment for CreateCPUDataForSMBios() to clarify
+// usage for backward compatibility only
+//
+// 7 3/29/07 3:23p Davidd
+// Provide sample template code for both Intel and AMD platforms. User to
+// uncomment appropriate blocks to use. Sample template code might need
+// additional changes depending on platform.
+//
+// 6 3/21/07 4:35p Michaela
+// minor modification to CreateCPUDataForSMBios to meet
+// coding standards, add support for AMD and add comments.
+//
+// 5 12/15/06 1:13p Davidd
+// Reformatted to coding standard.
+//
+// 1 5/24/06 11:59a Fasihm
+// Initial check-in for the Santa Rosa Project. (Matanzas CRB) with
+// Crestline + ICH8M + Merom Processor.
+//
+// 3 3/15/06 5:50p Fasihm
+// Code modified to get the CPU data by making call to the CPU protocol.
+// Added some SDL token values into the SmbiosBoardProtocol.
+//
+// 4 3/03/06 5:32p Davidd
+// Code modified to get the CPU data by making call to the CPU protocol.
+//
+// 3 7/27/05 1:23p Davidd
+// Added some SDL token values into the SmbiosBoardProtocol.
+//
+// 2 7/20/05 11:17a Davidd
+// Commented out sample code. Sample code is for reference only.
+//
+// 1 7/18/05 5:57p Davidd
+// File added. This file is used to port the CPU, System Slot, and
+// On-Board Devices dynamic information.
+//
+//****************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: SmbiosBoard.C
+//
+// Description: This file contains code for OEM related code for SMBIOS
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+//----------------------------------------------------------------------------
+// Includes
+
+#include <Token.h>
+#include <EFI.h>
+#include <AmiDxeLib.h>
+#include <CacheSubClass.h>
+#include <Protocol\AmiCpuInfo.h>
+#include <Protocol\PciIO.h>
+#include <Protocol\PciRootBridgeIo.h>
+#include <Protocol\SmbiosDynamicData.h>
+#include <AMICSPLIBInc.h>
+#include <Protocol\SMBUS.h>
+#include <Protocol\Smbios.h>
+
+#define PCI_CFG_ADDRESS(bus,dev,func,reg) \
+ ((UINT64)((((UINTN)bus) << 24) + (((UINTN)dev) << 16) + (((UINTN)func) << 8) + ((UINTN)reg)))& 0x00000000ffffffff
+
+extern EFI_BOOT_SERVICES *pBS;
+
+UINT8 SmbusCmdReg;
+EFI_GUID gEfiSmbiosProtocolGuid = EFI_SMBIOS_PROTOCOL_GUID;
+EFI_SMBIOS_PROTOCOL *gSmbiosProtocol;
+EFI_SMBUS_HC_PROTOCOL *gSMBus = NULL;
+
+EFI_GUID gEfiSmbiosBoardProtocolGuid = EFI_SMBIOS_BOARD_PROTOCOL_GUID;
+
+EFI_SMBIOS_BOARD_PROTOCOL SmbiosBoardProtocol = {BASE_BOARD_INFO,
+ SYS_CHASSIS_INFO,
+ PROCESSOR_DMIEDIT_SUPPORT,
+ OEM_STRING_INFO,
+ SYSTEM_CONFIG_OPTION_INFO,
+ MEMORY_ERROR_INFO,
+ ONBOARD_DEVICE_INFO,
+ PORTABLE_BATTERY_INFO,
+ ADDITIONAL_INFO,
+ ONBOARD_DEVICE_EXTENDED_INFO,
+ SYSTEM_POWER_SUPPLY_INFO,
+ NO_OF_PROCESSOR_SOCKETS,
+ NUMBER_OF_SYSTEM_SLOTS,
+ NUMBER_OF_ONBOARD_DEVICES,
+ NO_OF_PHYSICAL_MEMORY_ARRAY,
+ NO_OF_PORTABLE_BATTERY,
+ ONBOARD_DEVICE_EXT_COUNT,
+ CreateBaseBoardDataForSMBios,
+ CreateChassisDataForSMBios,
+ CreateCPUDataForSMBios,
+ CreateSlotDataForSMBios,
+ CreateOnBoardDevDataForSMBios,
+ CreateBatteryDataForSMBios,
+ CreateOnBoardDevExtInfoForSMBios,
+ EnableSmbusController,
+ RestoreSmbusController,
+ GetSpdByte,
+ OemUpdate,
+ A1_MEMORY_SOCKETS,
+#if NO_OF_PHYSICAL_MEMORY_ARRAY >= 2
+ A2_MEMORY_SOCKETS,
+#endif
+#if NO_OF_PHYSICAL_MEMORY_ARRAY >= 3
+ A3_MEMORY_SOCKETS,
+#endif
+#if NO_OF_PHYSICAL_MEMORY_ARRAY == 4
+ A4_MEMORY_SOCKETS,
+#endif
+ };
+
+typedef VOID (SMBIOS_OEM_UPDATE) (VOID);
+extern SMBIOS_OEM_UPDATE SMBIOS_OEM_UPDATE_LIST EndOfSmbiosOemUpdateList;
+SMBIOS_OEM_UPDATE* SmbiosOemUpdate[] = {SMBIOS_OEM_UPDATE_LIST NULL};
+
+/*
+//----------------------------------------------------------------------------
+// ==================================================================
+// ==================================================================
+// ==================================================================
+// === ===
+// === End of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+// === platform. Uncomment this block to use. ===
+// === ===
+// === Might need changes for other platforms. ===
+// === ===
+// ==================================================================
+// ==================================================================
+// ==================================================================
+//----------------------------------------------------------------------------
+*/
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: OemUpdate
+//
+// Description: The purpose of this function is to allow OEM to update the
+// SMBIOS table as needed. OEM can use the EFI_SMBIOS_PROTOCOL
+// to read, add, delete, and write to the SMBIOS table.
+//
+// Input: None
+//
+// Output: None
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+OemUpdate (VOID)
+{
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === The following sample code DOES NOT serve any purposes. ===
+ // === It is included to illustrate the use of the SMBIOS ===
+ // === protocols only. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ EFI_STATUS Status;
+ UINT8 *Buffer;
+ UINT16 BSize;
+ UINT16 Handle;
+
+ Status = pBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, &gSmbiosProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ // Read CPU structure
+ Status = gSmbiosProtocol->SmbiosReadStrucByType(4, 1, &Buffer, &BSize);
+
+ if (!EFI_ERROR(Status)) {
+ // Update previously read CPU structure and write it back, overwriting old data
+ Handle = ((SMBIOS_STRUCTURE_HEADER*)Buffer)->Handle;
+ ((SMBIOS_PROCESSOR_INFO*)Buffer)->MaxSpeed = 0x1234;
+ gSmbiosProtocol->SmbiosWriteStructure(Handle, Buffer, BSize);
+
+ // Add structure with specific handle = 0x60
+ Handle = 0x60;
+ gSmbiosProtocol->SmbiosAddStrucByHandle(Handle, Buffer, BSize);
+
+ // Add structure with next available handle number
+ gSmbiosProtocol->SmbiosAddStructure(Buffer, BSize);
+
+ // Delete structure with handle = 3
+ gSmbiosProtocol->SmbiosDeleteStructure(3);
+
+ // Get available free handle, then add structure with that handle
+ Handle = gSmbiosProtocol->SmbiosGetFreeHandle();
+ if (Handle != -1) {
+ gSmbiosProtocol->SmbiosAddStrucByHandle(Handle, Buffer, BSize);
+ }
+
+ // Free memory allocated by the earlier gSmbiosProtocol->SmbiosReadStrucByType call
+ pBS->FreePool(Buffer);
+ }
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of sample code ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+//----------------------------------------------------------------------------
+*/
+
+//===========================================================================
+// EC Version (Type 0 Offset 0x16-0x17) dynamic update
+//
+// This code requires EC major & minor versions to be available in
+// ECRev1 & ECRev2 NVRAM variables respectively
+//===========================================================================
+#if (defined(DYNAMIC_UPDATE_TYPE0_EC_VERSION) && (DYNAMIC_UPDATE_TYPE0_EC_VERSION == 1))
+{
+ EFI_STATUS Status;
+ EFI_GUID gEfiGlobalVariableGuid = EFI_GLOBAL_VARIABLE;
+ UINT8 EcMajorVersion;
+ UINT8 EcMinorVersion;
+ UINTN Size = sizeof(EcMajorVersion);
+ UINT8 Type0Data[sizeof(SMBIOS_BIOS_INFO)];
+ UINT16 Type0DataSize = sizeof(SMBIOS_BIOS_INFO);
+ UINT8 *Type0DataPtr = &Type0Data[0];
+
+ // Get EC version from ECRev1 & ECRev2 variables
+ Status = pRS->GetVariable( L"ECRev1", \
+ &gEfiGlobalVariableGuid, \
+ NULL, \
+ &Size, \
+ &EcMajorVersion );
+ if (EFI_ERROR(Status)) goto exitEcVersionUpdate;
+
+ Status = pRS->GetVariable( L"ECRev2", \
+ &gEfiGlobalVariableGuid, \
+ NULL, \
+ &Size, \
+ &EcMinorVersion );
+ if (EFI_ERROR(Status)) goto exitEcVersionUpdate;
+
+ Status = pBS->LocateProtocol(
+ &gEfiSmbiosProtocolGuid,
+ NULL,
+ &gSmbiosProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ if (Status == EFI_SUCCESS) {
+ // Read Smbios Type 0 structure, update EC version and write it back
+ Status = gSmbiosProtocol->SmbiosReadStrucByType(
+ 0,
+ 1,
+ &Type0DataPtr,
+ &Type0DataSize);
+ ASSERT_EFI_ERROR(Status);
+
+ ((SMBIOS_BIOS_INFO*)Type0DataPtr)->ECFirmwareMajorRelease = EcMajorVersion;
+ ((SMBIOS_BIOS_INFO*)Type0DataPtr)->ECFirmwareMinorRelease = EcMinorVersion;
+
+ if (Status == EFI_SUCCESS) {
+ Status = gSmbiosProtocol->SmbiosWriteStructure(
+ ((SMBIOS_BIOS_INFO*)Type0DataPtr)->StructureType.Handle,
+ Type0DataPtr,
+ Type0DataSize);
+ ASSERT_EFI_ERROR(Status);
+ }
+ }
+
+exitEcVersionUpdate:
+ Status = EFI_SUCCESS; // Dummy - To avoid build error in some cases
+}
+#endif
+//===========================================================================
+// EC Version (Type 0 Offset 0x16-0x17) dynamic update End
+//===========================================================================
+
+//===========================================================================
+// ***** DO NOT REMOVE THIS BLOCK *****
+//
+// Hardware Security (Type 24) dynamic update Start
+//
+// Update Type 24 Administrator and Power-on Password Status based on
+// Setup settings
+//===========================================================================
+#if (defined(TSE_BUILD) && (HARDWARE_SECURITY_INFO == 1)) // Token indicating AMI TSE is used
+{
+#include <Setup.h>
+
+#define AMITSESETUP_GUID \
+ { 0xc811fa38, 0x42c8, 0x4579, 0xa9, 0xbb, 0x60, 0xe9, 0x4e, 0xdd, 0xfb, 0x34 }
+
+ EFI_STATUS Status;
+ EFI_GUID AmiTseSetupGuid = AMITSESETUP_GUID;
+ AMITSESETUP AmiTseData;
+ UINTN VariableSize = sizeof(AMITSESETUP);
+ UINTN TsePasswordLength = SETUP_PASSWORD_LENGTH * sizeof(CHAR16);
+ CHAR16 *TestPassWord;
+ UINT8 HwdSecSettings = 0;
+ UINT8 *Type24Data;
+ UINT16 Type24Size;
+
+ Status = pRS->GetVariable ( L"AMITSESetup", \
+ &AmiTseSetupGuid, \
+ NULL, \
+ &VariableSize, \
+ &AmiTseData );
+
+ if (!EFI_ERROR(Status)) {
+ Status = pBS->AllocatePool(EfiRuntimeServicesData, TsePasswordLength, &TestPassWord);
+ if (Status == EFI_SUCCESS) {
+ MemSet(TestPassWord, TsePasswordLength, 0);
+
+ if (MemCmp(AmiTseData.UserPassword, TestPassWord, TsePasswordLength) != 0) {
+ HwdSecSettings |= BIT6; // Power-on Password
+ }
+ if (MemCmp(AmiTseData.AdminPassword, TestPassWord, TsePasswordLength) != 0) {
+ HwdSecSettings |= BIT2; // Administrator Password
+ }
+
+ Status = pBS->LocateProtocol(
+ &gEfiSmbiosProtocolGuid,
+ NULL,
+ &gSmbiosProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ if (Status == EFI_SUCCESS) {
+ Status = gSmbiosProtocol->SmbiosReadStrucByType(
+ 24,
+ 1,
+ &Type24Data,
+ &Type24Size);
+
+ ASSERT_EFI_ERROR(Status);
+
+ if (Status == EFI_SUCCESS) {
+ ((SMBIOS_HARDWARE_SECURITY_INFO*)Type24Data)->HardwareSecSettings &= 0x33; // Clear Admin & Power-on pwd
+ ((SMBIOS_HARDWARE_SECURITY_INFO*)Type24Data)->HardwareSecSettings |= HwdSecSettings;
+ Status = gSmbiosProtocol->SmbiosWriteStructure(
+ ((SMBIOS_HARDWARE_SECURITY_INFO*)Type24Data)->StructureType.Handle,
+ Type24Data,
+ Type24Size);
+ ASSERT_EFI_ERROR(Status);
+
+ pBS->FreePool(Type24Data);
+ }
+ }
+
+ pBS->FreePool(TestPassWord);
+ }
+ }
+}
+#endif
+//===========================================================================
+// Hardware Security (Type 24) dynamic update End
+//===========================================================================
+
+//===========================================================================
+// ***** DO NOT REMOVE THIS BLOCK *****
+// ***** Calling OEM Update eLinks *****
+//
+// OEM Update eLinks Block Start
+//===========================================================================
+ {
+ UINT8 i;
+
+ for (i = 0; SmbiosOemUpdate[i] != NULL; i++) {
+ SmbiosOemUpdate[i]();
+ }
+ }
+//===========================================================================
+// OEM Update eLinks Block End
+//===========================================================================
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: EnableSmbusController
+//
+// Description: This function saves the current setting of the Smbus
+// Controller CMD register and then enables it so that SPD data
+// can be accessed.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+EnableSmbusController (VOID)
+{
+ EFI_GUID EfiSMBusProtocolGuid = EFI_SMBUS_HC_PROTOCOL_GUID;
+
+ // Enables the SMBus controller command register if needed.
+
+ return pBS->LocateProtocol( &EfiSMBusProtocolGuid, NULL, &gSMBus );
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: RestoreSmbusController
+//
+// Description: This function restores the Smbus Controller CMD register
+// to the previously saved setting.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+RestoreSmbusController (VOID)
+{
+ EFI_STATUS Status = EFI_UNSUPPORTED;
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: GetSpdByte
+//
+// Description: This function reads a byte from the system memory SPD
+//
+// Input: IN EFI_SMBUS_DEVICE_ADDRESS SpdAddr
+// IN UINT8 Offset
+// IN OUT UINT8 *Data
+//
+// Output: EFI_STATUS
+// UINT8 *Data
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+GetSpdByte (
+ IN EFI_SMBUS_DEVICE_ADDRESS SpdAddr,
+ IN UINT8 Offset,
+ IN OUT UINT8 *Data
+)
+{
+ UINTN Length = 1;
+
+ if (gSMBus == NULL) return EFI_UNSUPPORTED;
+
+ return gSMBus->Execute( gSMBus,
+ SpdAddr,
+ Offset,
+ EfiSmbusReadByte,
+ FALSE,
+ &Length,
+ Data );
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateSlotDataForSMBios
+//
+// Description: This function gathers the System Slot status information and
+// saves them in a variable named "SmbiosSlotsVar". This variable
+// with the slot information is needed by the SMBIOS module to
+// create the REQUIRED "Type 9" structure
+//
+// Input: None
+//
+// Output: EFI_STATUS
+// Variable named "SmbiosSlotsVar" with system slot information
+//
+// Note: Refer to SYSTEM_SLOT_DYNAMIC_DATA in SmbiosDynamicData.h for
+// structure information.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateSlotDataForSMBios (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_SLOT_TYPE9
+/*
+//----------------------------------------------------------------------------
+// PORTING REQUIRED - PORTING REQUIRED - PORTING REQUIRED
+//----------------------------------------------------------------------------
+//
+// Create a SYSTEM_SLOT_DYNAMIC_DATA structure and fill it with system slots
+// information - bus number for the slot and its current usage status.
+// Return the slot structure information in a variable named "SmbiosSlotsVar"
+//
+*/
+#endif // UPDATE_SLOT_TYPE9
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: FillStringBufferWithSpaces
+//
+// Description: This function fills the input buffer with spaces. The number
+// of spaces to be filled is specified in the input BufferSize
+//
+// Input: IN UINT8 *BufferPtr
+// IN UINT8 BufferSize
+//
+// Output: Buffer pointed by BufferPtr is filled with spaces
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+FillStringBufferWithSpaces (
+ IN UINT8 *BufferPtr,
+ IN UINT8 BufferSize
+)
+{
+ UINT8 i;
+
+ for (i = 0; i < (BufferSize - 1); i++) {
+ *BufferPtr = 0x20;
+ BufferPtr++;
+ }
+ *BufferPtr = 0;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateBaseBoardDataForSMBios
+//
+// Description: This function provides system chassis information. SMBIOS
+// Core uses these information to dynamically update SMBIOS
+// Chassis Type 2.
+//
+// Input: None
+//
+// Output: Creates variable named "SmbiosBaseBoardVar" with Chassis information
+//
+// Note: Refer to BASE_BOARD_DATA in SmbiosDynamicData.h for structure
+// information.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateBaseBoardDataForSMBios (
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_BASEBOARD_TYPE2
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE ===
+ // === ===
+ // === Might need changes for specific platform ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ BASE_BOARD_DATA BaseBoardInfo;
+ UINTN VarSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+
+ char* BoardID_Index[] = {
+ "Board Name 1", // 0x00
+ "Board Name ", // 0x01
+ "Board Name ", // 0x02
+ };
+
+ char* BoardManufacturerName = "XYZ Corporation";
+
+ Status = pBS->LocateProtocol(
+ &gPlatformInfoProtocolGuid,
+ NULL,
+ &gPlatformInfoProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ Status = pBS->AllocatePool(
+ EfiBootServicesData,
+ strlen(BoardManufacturerName),
+ &BaseBoardInfo.BoardManufacturer);
+
+ strcpy(BaseBoardInfo.BoardManufacturer, BoardManufacturerName);
+
+ Status = pBS->AllocatePool(
+ EfiBootServicesData,
+ strlen(BoardID_Index[gPlatformInfoProtocol->BoardId]),
+ &BaseBoardInfo.BoardName);
+
+ strcpy(BaseBoardInfo.BoardName, BoardID_Index[gPlatformInfoProtocol->BoardId]);
+
+ VarSize = sizeof(BASE_BOARD_DATA);
+
+ Status = pRS->SetVariable(
+ SmbiosBaseBoardVar,
+ &EfiSmbiosDynamicDataGuid,
+ Attributes,
+ VarSize,
+ &BaseBoardInfo);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_BASEBOARD_TYPE2
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateChassisDataForSMBios
+//
+// Description: This function provides system chassis information. SMBIOS
+// Core uses these information to dynamically update SMBIOS
+// Chassis Type 3.
+//
+// Input: None
+//
+// Output: Creates variable named "SmbiosChassisVar" with Chassis information
+//
+// Note: Refer to CHASSIS_DATA in SmbiosDynamicData.h for structure
+// information.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateChassisDataForSMBios (
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_SYSTEM_CHASSIS_TYPE3
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE ===
+ // === ===
+ // === Might need changes for specific platform ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ CHASSIS_DATA ChassisInfo;
+ UINTN VarSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+
+ Status = pBS->LocateProtocol(
+ &gPlatformInfoProtocolGuid,
+ NULL,
+ &gPlatformInfoProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ switch (gPlatformInfoProtocol->PlatformFlavor) {
+ case FlavorMobile:
+ ChassisInfo.Type = 0x09; // EfiMiscChassisTypeLapTop
+ break;
+ case FlavorDesktop:
+ ChassisInfo.Type = 0x03; // EfiMiscChassisTypeDeskTop
+ break;
+ case FlavorUpServer:
+ ChassisInfo.Type = 0x11; // EfiMiscChassisTypeMainServerChassis
+ break;
+ default:
+ ChassisInfo.Type = 0x02; // EfiMiscChassisTypeUnknown;
+ }
+
+ VarSize = sizeof(CHASSIS_DATA);
+ Status = pRS->SetVariable(
+ SmbiosChassisVar,
+ &EfiSmbiosDynamicDataGuid,
+ Attributes,
+ VarSize,
+ &ChassisInfo);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_SYSTEM_CHASSIS_TYPE3
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateCPUDataForSMBios
+//
+// Description: This function gathers the System Processor information and
+// saves them in a variable named "SmbiosCpuVar". This variable
+// with the CPU information is needed by the SMBIOS module to
+// create the "Type 4, 7" structure.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+// Variable named "SmbiosCpuVar" with System CPU information
+//
+// Note: Refer to CPU_DYNAMIC_DATA in SmbiosDynamicData.h for
+// structure information.
+//
+// ******************** PORTING NOTE ********************
+// By default, this function only returns EFI_SUCCESS and should
+// only be ported if the CPU module does not install the
+// SMBIOS_CPU_INFO_PROTOCOL.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateCPUDataForSMBios (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_CPU_TYPE4
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ EFI_GUID gAmiCpuInfoProtocolGuid = AMI_CPU_INFO_PROTOCOL_GUID;
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ UINTN NumCores = 1;
+ UINTN NumHts = 1;
+ UINTN i;
+ UINTN j;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ UINT32 L1Cache;
+ UINT32 L2Cache;
+ UINT32 L3Cache;
+ AMI_CPU_INFO *GetCpuInfo = NULL;
+ AMI_CPU_INFO_PROTOCOL *AmiCpuInfo;
+ CPU_DYNAMIC_DATA CpuInfo;
+ CACHE_DESCRIPTOR_INFO *CacheDescInfo;
+ UINT8 CacheTypeTable[] = {4, 3, 1, 5};
+ UINT8 AssociativityTable[] = {6, 1, 4, 1, 5, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 8};
+
+ Status = pBS->LocateProtocol (&gAmiCpuInfoProtocolGuid, NULL, &AmiCpuInfo);
+ if (EFI_ERROR(Status)) return Status;
+
+ CpuInfo.NumberCPU = NO_OF_PROCESSOR_SOCKETS;
+
+ for(i = 0; i < NO_OF_PROCESSOR_SOCKETS; ++i) {
+ Status = AmiCpuInfo->GetCpuInfo(AmiCpuInfo, (UINTN)i*NumCores*NumHts, &GetCpuInfo);
+ if (Status) {
+ // No data available from CPU module
+ CpuInfo.CpuData[i].CpuData.Status = 0;
+ CpuInfo.CpuData[i].CpuData.CurrentSpeed = 0;
+ // Hardcode MaxSpeed to 4GHz (assumed system max speed)
+ CpuInfo.CpuData[i].CpuData.MaxSpeed = 0x0FA0;
+ CpuInfo.CpuData[i].CpuData.ExtClockFreq = CpuInfo.CpuData[0].CpuData.ExtClockFreq;
+ CpuInfo.CpuData[i].CpuData.ProcessorID_1 = 0;
+ CpuInfo.CpuData[i].CpuData.ProcessorID_2 = 0;
+ CpuInfo.CpuData[i].CpuData.Voltage = BIT01; // Assume 3.3V
+ CpuInfo.CpuData[i].CpuData.Upgrade = CpuInfo.CpuData[0].CpuData.Upgrade;
+ CpuInfo.CpuData[i].CpuData.Family = CpuInfo.CpuData[0].CpuData.Family;
+ MemCpy(CpuInfo.CpuData[i].CpuData.Manufacturer, CpuInfo.CpuData[0].CpuData.Manufacturer, 18);
+ MemCpy(CpuInfo.CpuData[i].CpuData.Version, CpuInfo.CpuData[0].CpuData.Version, 48);
+ continue;
+ }
+
+ NumCores = GetCpuInfo->NumCores;
+ NumHts = GetCpuInfo->NumHts;
+ CacheDescInfo = GetCpuInfo->CacheInfo;
+
+ L1Cache = 0;
+ L2Cache = 0;
+ L3Cache = 0;
+ CpuInfo.CpuData[i].L1Cache.SystemCacheType = 0xFF;
+ CpuInfo.CpuData[i].L2Cache.SystemCacheType = 0xFF;
+ CpuInfo.CpuData[i].L3Cache.SystemCacheType = 0xFF;
+ for(j = 0; CacheDescInfo[j].Desc; ++j) { // End of descriptors, Desc = 0.
+ switch(GetCpuInfo->CacheInfo[j].Level) {
+ case 1:
+ L1Cache = CacheDescInfo[j].Size;
+ if (CpuInfo.CpuData[i].L1Cache.SystemCacheType == 0xFF) {
+ CpuInfo.CpuData[i].L1Cache.SystemCacheType = CacheTypeTable[CacheDescInfo[j].Type];
+ }
+ else {
+ CpuInfo.CpuData[i].L1Cache.SystemCacheType = 0x05;
+ }
+ CpuInfo.CpuData[i].L1Cache.Associativity = AssociativityTable[CacheDescInfo[j].Associativity];
+ break;
+ case 2:
+ L2Cache = CacheDescInfo[j].Size;
+ if (CpuInfo.CpuData[i].L2Cache.SystemCacheType == 0xFF) {
+ CpuInfo.CpuData[i].L2Cache.SystemCacheType = CacheTypeTable[CacheDescInfo[j].Type];
+ }
+ else {
+ CpuInfo.CpuData[i].L2Cache.SystemCacheType = 0x05;
+ }
+ CpuInfo.CpuData[i].L2Cache.Associativity = AssociativityTable[CacheDescInfo[j].Associativity];
+ break;
+ case 3:
+ L3Cache = CacheDescInfo[j].Size;
+ if (CpuInfo.CpuData[i].L3Cache.SystemCacheType == 0xFF) {
+ CpuInfo.CpuData[i].L3Cache.SystemCacheType = CacheTypeTable[CacheDescInfo[j].Type];
+ }
+ else {
+ CpuInfo.CpuData[i].L3Cache.SystemCacheType = 0x05;
+ }
+ CpuInfo.CpuData[i].L3Cache.Associativity = AssociativityTable[CacheDescInfo[j].Associativity];
+ break;
+ }
+ }
+
+ CpuInfo.CpuData[i].CpuData.CurrentSpeed = (UINT16)(GetCpuInfo->IntendedFreq);
+ CpuInfo.CpuData[i].CpuData.MaxSpeed = 3800; // Value from Intel Tiano BIOS
+ CpuInfo.CpuData[i].CpuData.ExtClockFreq = (UINT16)(GetCpuInfo->FSBFreq);
+ CpuInfo.CpuData[i].CpuData.ProcessorID_1 = (UINT32)(GetCpuInfo->Version);
+ CpuInfo.CpuData[i].CpuData.ProcessorID_2 = (UINT32)(GetCpuInfo->Features);
+
+ // From CPU module: GetCpuInfo->Voltage = Volt * 10000
+ // From SMBIOS spec, this field should be set to CPU voltage * 10
+ // Therefore this field should be set to GetCpuInfo->Voltage / 1000
+ CpuInfo.CpuData[i].CpuData.Voltage = (UINT8)(GetCpuInfo->Voltage / 1000);
+ CpuInfo.CpuData[i].CpuData.Status = 0x41;
+ CpuInfo.CpuData[i].CpuData.Upgrade = 1;
+ CpuInfo.CpuData[i].CpuData.Family = 0xBF; // Intel(R) Core(TM) 2 Duo processor
+
+ CpuInfo.CpuData[i].CpuData.CoreCount = GetCpuInfo->NumCores;
+ CpuInfo.CpuData[i].CpuData.CoreEnabled = 1;
+ CpuInfo.CpuData[i].CpuData.ThreadCount = GetCpuInfo->NumHts;
+ CpuInfo.CpuData[i].CpuData.Family2 = 0xBF;
+
+ if(i == 0) {
+ FillStringBufferWithSpaces(CpuInfo.CpuData[i].CpuData.Version, sizeof(CpuInfo.CpuData[i].CpuData.Version));
+ MemCpy(CpuInfo.CpuData[i].CpuData.Version, GetCpuInfo->BrandString, sizeof(CpuInfo.CpuData[i].CpuData.Version) - 1);
+ FillStringBufferWithSpaces(CpuInfo.CpuData[i].CpuData.Manufacturer, sizeof(CpuInfo.CpuData[i].CpuData.Manufacturer));
+ MemCpy(CpuInfo.CpuData[i].CpuData.Manufacturer, "Intel", 6);
+ }
+ else {
+ MemCpy(CpuInfo.CpuData[i].CpuData.Manufacturer, CpuInfo.CpuData[0].CpuData.Manufacturer, sizeof(CpuInfo.CpuData[0].CpuData.Manufacturer));
+ MemCpy(CpuInfo.CpuData[i].CpuData.Version, CpuInfo.CpuData[0].CpuData.Version, sizeof(CpuInfo.CpuData[0].CpuData.Version));
+ }
+ CpuInfo.CpuData[i].L1Cache.CacheConfig = 0x180;
+ CpuInfo.CpuData[i].L1Cache.MaxCacheSize = L1Cache; // CacheL1
+ CpuInfo.CpuData[i].L1Cache.InstalledSize = L1Cache;
+ CpuInfo.CpuData[i].L1Cache.SupportSRAM = 0x01;
+ CpuInfo.CpuData[i].L1Cache.CurrentSRAM = 0x01;
+ CpuInfo.CpuData[i].L1Cache.CacheSpeed = 0;
+ CpuInfo.CpuData[i].L1Cache.ErrorCorrectionType = 0x03;
+
+ CpuInfo.CpuData[i].L2Cache.CacheConfig = 0x281;
+ CpuInfo.CpuData[i].L2Cache.MaxCacheSize = L2Cache; // CacheL2
+ CpuInfo.CpuData[i].L2Cache.InstalledSize = L2Cache;
+ CpuInfo.CpuData[i].L2Cache.SupportSRAM = 0x01;
+ CpuInfo.CpuData[i].L2Cache.CurrentSRAM = 0x01;
+ CpuInfo.CpuData[i].L2Cache.CacheSpeed = 0;
+ CpuInfo.CpuData[i].L2Cache.ErrorCorrectionType = 0x03;
+
+ CpuInfo.CpuData[i].L3Cache.CacheConfig = 0x302;
+ CpuInfo.CpuData[i].L3Cache.MaxCacheSize = L3Cache; // CacheL3
+ CpuInfo.CpuData[i].L3Cache.InstalledSize = L3Cache;
+ CpuInfo.CpuData[i].L3Cache.SupportSRAM = 0x01;
+ CpuInfo.CpuData[i].L3Cache.CurrentSRAM = 0x01;
+ CpuInfo.CpuData[i].L3Cache.CacheSpeed = 0;
+ CpuInfo.CpuData[i].L3Cache.ErrorCorrectionType = 0x03;
+ }
+ Status = pRS->SetVariable(
+ SmbiosCpuVar,
+ &EfiSmbiosDynamicDataGuid,
+ Attributes,
+ sizeof(CPU_DYNAMIC_DATA),
+ &CpuInfo);
+ ASSERT_EFI_ERROR(Status);
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE for AMD Warthog ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID gAmiCpuInfoProtocolGuid = AMI_CPU_INFO_PROTOCOL_GUID;
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ UINT8 AmiType, AmiAssoc, AmiCurLevel;
+ UINT16 AmiCurSize, L1CacheSize, L2CacheSize, L3CacheSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ UINTN NumHts = 1, CurNode=0, CurCPU=0, NumCores = 1, CurCacheIndex;
+ AMI_CPU_INFO *AmiCpuInfo = NULL;
+ AMI_CPU_INFO_PROTOCOL *AmiCpuInfoProtocol;
+ CPU_DYNAMIC_DATA CpuInfo;
+ CACHE_DESCRIPTOR_INFO *AmiCacheDesc;
+ CPU_DATA *CurCpuData, *Cpu0Data;
+ CACHE_DATA *CurL1Cache, *CurL2Cache, *CurL3Cache;
+
+ // ==================================================================
+ // The mapping between AMI_CPU_INFO.CACHE_DESCRIPTOR_INFO.Type
+ // and CPU_DYNAMIC_DATA.SINGLE_CPU_DATA.CACHE_DATA.SystemCacheType
+ // should not require a translation table as the cache type is
+ // encoded the same for both structures:
+ //
+ // CACHE_DESCRIPTOR_INFO.Type <-> CACHE_DATA.SystemCacheType
+ // (Other) 1 <-> 1
+ // (Unknown) 2 <-> 2
+ // (Instruction) 3 <-> 3
+ // (Data) 4 <-> 4
+ // (Unified) 5 <-> 5
+ //
+ // ==================================================================
+ // The mapping between AMI_CPU_INFO.CACHE_DESCRIPTOR_INFO.Associativity
+ // and CPU_DYNAMIC_DATA.SINGLE_CPU_DATA.CACHE_DATA.Associativity
+ // should not require a translation table as the cache associativity
+ // is encoded the same for both structures:
+ //
+ // CACHE_DESCRIPTOR_INFO.Associativity <-> CACHE_DATA.Associativity
+ // (Other) 1 <-> 1
+ // (Unknown) 2 <-> 2
+ // (Direct) 3 <-> 3
+ // (2-way Set) 4 <-> 4
+ // (4-way Set) 5 <-> 5
+ // (Fully) 6 <-> 6
+ // (8-way Set) 7 <-> 7
+ // (16-way Set) 8 <-> 8
+ //
+ // ==================================================================
+ // Fill Processor Information Table (Type 4) and associated Cache
+ // Information structures.
+ //
+ // Notes: A SINGLE_CPU_DATA structure is created for each
+ // slot/socket such that only one structure is created for
+ // a multi-core processor. This implies the assumption
+ // that all cores on a processor have identical
+ // configuration.
+ //
+ // ==================================================================
+ Status = pBS->LocateProtocol (
+ &gAmiCpuInfoProtocolGuid,
+ NULL,
+ &AmiCpuInfoProtocol);
+ if (EFI_ERROR(Status))
+ return Status;
+
+ Status = AmiCpuInfoProtocol->GetCpuInfo(
+ AmiCpuInfoProtocol,
+ 0,
+ &AmiCpuInfo);
+ if (EFI_ERROR(Status))
+ return Status;
+
+ CpuInfo.NumberCPU = NO_OF_PROCESSOR_SOCKETS;
+ Cpu0Data = &(CpuInfo.CpuData[0].CpuData);
+
+ // For each Core0 on each slot/node, create a
+ // CPU information table.
+ for(CurNode=0, CurCPU=0;
+ CurNode < NO_OF_PROCESSOR_SOCKETS;
+ CurNode++, CurCPU = AmiCpuInfo->NumCores*CurNode )
+ {
+ Status = AmiCpuInfoProtocol->GetCpuInfo(
+ AmiCpuInfoProtocol,
+ CurCPU,
+ &AmiCpuInfo);
+
+ // some pointers to make code easier to read/type
+ CurCpuData = &(CpuInfo.CpuData[CurNode].CpuData);
+ CurL1Cache = &(CpuInfo.CpuData[CurNode].L1Cache);
+ CurL2Cache = &(CpuInfo.CpuData[CurNode].L2Cache);
+ CurL3Cache = &(CpuInfo.CpuData[CurNode].L3Cache);
+
+ // if an AMI_CPU_INFO structure does not exist for this Socket
+ // then fill with default data and attempt to get next
+ // socket information.
+ if (Status) {
+ CurCpuData->Status = 0;
+ CurCpuData->CurrentSpeed = 0;
+ CurCpuData->MaxSpeed = 0x0FA0;
+ CurCpuData->ExtClockFreq = Cpu0Data->ExtClockFreq;
+ CurCpuData->ProcessorID_1 = 0;
+ CurCpuData->ProcessorID_2 = 0;
+ CurCpuData->Status = 0;
+ CurCpuData->Upgrade = Cpu0Data->Upgrade;
+ CurCpuData->Family = Cpu0Data->Family;
+ MemCpy(CurCpuData->Manufacturer, Cpu0Data->Manufacturer, 18);
+ MemCpy(CurCpuData->Version, Cpu0Data->Version, 48);
+ continue;
+ }
+
+ NumCores = AmiCpuInfo->NumCores;
+ NumHts = AmiCpuInfo->NumHts;
+ AmiCacheDesc = AmiCpuInfo->CacheInfo;
+ L1CacheSize = 0;
+ L2CacheSize = 0;
+ L3CacheSize = 0;
+
+ // if more than one L1, L2, or L3 cache exits,
+ // its type will be unified by default.
+ CurL1Cache->SystemCacheType = 0xFF;
+ CurL2Cache->SystemCacheType = 0xFF;
+ CurL3Cache->SystemCacheType = 0xFF;
+
+ // ==========================================================
+ // Fill Cache Information Table (Type 7) for this slot/node
+ // ==========================================================
+ for ( CurCacheIndex = 0;
+ AmiCacheDesc[CurCacheIndex].Desc; // Desc == 0 is last
+ ++CurCacheIndex )
+ {
+ AmiType = AmiCacheDesc[CurCacheIndex].Type;
+ AmiAssoc = AmiCacheDesc[CurCacheIndex].Associativity;
+ AmiCurLevel = AmiCacheDesc[CurCacheIndex].Level;
+ AmiCurSize = AmiCacheDesc[CurCacheIndex].Size;
+
+ switch ( AmiCurLevel )
+ {
+ case EFI_CACHE_L1:
+ L1CacheSize = AmiCurSize;
+ if (CurL1Cache->SystemCacheType == 0xFF)
+ CurL1Cache->SystemCacheType = AmiType;
+ else
+ CurL1Cache->SystemCacheType = 0x05;
+ CurL1Cache->Associativity = AmiAssoc;
+ break;
+ case EFI_CACHE_L2:
+ L2CacheSize = AmiCurSize;
+ if (CurL2Cache->SystemCacheType == 0xFF)
+ CurL2Cache->SystemCacheType = AmiType;
+ else
+ CurL2Cache->SystemCacheType = 0x05;
+ CurL2Cache->Associativity = AmiAssoc;
+ break;
+ case EFI_CACHE_L3:
+ L3CacheSize = AmiCurSize;
+ if (CurL3Cache->SystemCacheType == 0xFF)
+ CurL3Cache->SystemCacheType = AmiType;
+ else
+ CurL3Cache->SystemCacheType = 0x05;
+ CurL3Cache->Associativity = AmiAssoc;
+ break;
+ } // switch
+ } // for
+
+ CurCpuData->CurrentSpeed = (UINT16)(AmiCpuInfo->ActualFreq);
+#if AMD_SYSTEM_BOARD == 1
+ CurCpuData->MaxSpeed = (UINT16)(AmiCpuInfo->MaxFreq);
+#endif
+ CurCpuData->ExtClockFreq = (UINT16)(AmiCpuInfo->FSBFreq);
+ CurCpuData->ProcessorID_1 = (UINT32)(AmiCpuInfo->Version);
+ CurCpuData->ProcessorID_2 = (UINT32)(AmiCpuInfo->Features);
+ CurCpuData->Status = 0x41; // Socket popuated
+ // and CPU enabled
+ CurCpuData->Upgrade = SMBIOS_PROCESSOR_UPGRADE; // CPU.sdl tokens
+ CurCpuData->Family = SMBIOS_PROCESSOR_FAMILY;
+ if(CurNode == 0) {
+ FillStringBufferWithSpaces(
+ CurCpuData->Version,
+ sizeof(CurCpuData->Version));
+ MemCpy(
+ CurCpuData->Version,
+ AmiCpuInfo->BrandString,
+ sizeof(CurCpuData->Version) - 1);
+ FillStringBufferWithSpaces(
+ CurCpuData->Manufacturer,
+ sizeof(CurCpuData->Manufacturer));
+ MemCpy(
+ CurCpuData->Manufacturer,
+ AmiCpuInfo->BrandString,
+ 5);
+ }
+ else {
+ MemCpy(
+ CurCpuData->Manufacturer,
+ Cpu0Data->Manufacturer,
+ sizeof(Cpu0Data->Manufacturer));
+ MemCpy(
+ CurCpuData->Version,
+ Cpu0Data->Version,
+ sizeof(Cpu0Data->Version));
+ }
+ CurL1Cache->CacheConfig = 0x180;
+ CurL1Cache->MaxCacheSize = L1CacheSize; // CacheL1
+ CurL1Cache->InstalledSize = L1CacheSize;
+ CurL1Cache->SupportSRAM = 0x01;
+ CurL1Cache->CurrentSRAM = 0x01;
+ CurL1Cache->CacheSpeed = 0;
+ CurL1Cache->ErrorCorrectionType = 0x03;
+
+ CurL2Cache->CacheConfig = 0x281;
+ CurL2Cache->MaxCacheSize = L2CacheSize; // CacheL2
+ CurL2Cache->InstalledSize = L2CacheSize;
+ CurL2Cache->SupportSRAM = 0x01;
+ CurL2Cache->CurrentSRAM = 0x01;
+ CurL2Cache->CacheSpeed = 0;
+ CurL2Cache->ErrorCorrectionType = 0x03;
+
+ CurL3Cache->CacheConfig = 0x302;
+ CurL3Cache->MaxCacheSize = L3CacheSize; // CacheL3
+ CurL3Cache->InstalledSize = L3CacheSize;
+ CurL3Cache->SupportSRAM = 0x01;
+ CurL3Cache->CurrentSRAM = 0x01;
+ CurL3Cache->CacheSpeed = 0;
+ CurL3Cache->ErrorCorrectionType = 0x03;
+ } // for
+
+ Status = pRS->SetVariable( SmbiosCpuVar,
+ &EfiSmbiosDynamicDataGuid,
+ Attributes,
+ sizeof(CPU_DYNAMIC_DATA),
+ &CpuInfo );
+ ASSERT_EFI_ERROR(Status);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE for AMD Warthog ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_CPU_TYPE4
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** OPTIONAL *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateOnBoardDevDataForSMBios
+//
+// Description: This function gathers the Onboard Device status information and
+// saves them in a variable named "SmbiosOnBoardVar". This variable
+// with the OnBoard Device information is needed by the SMBIOS
+// module to create the "Type 10" structure.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+// Variable named "SmbiosOnBoardVar" with on-board device information
+//
+// Note: Refer to ONBOARD_DEV_DYNAMIC_DATA in SmbiosDynamicData.h for
+// structure information.
+//
+// Set device status to 0 if disabled.
+// Set device status to 0x80 if enabled.
+// Ex: In sample code
+// OnBoardDevInfo.OnBoardDev[0] = 0; // Disabled
+// OnBoardDevInfo.OnBoardDev[0] = 0x80; // Enabled
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateOnBoardDevDataForSMBios (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_ONBOARD_DEV_TYPE10
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ UINTN VarSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ ONBOARD_DEV_DYNAMIC_DATA OnBoardDevInfo;
+ UINT64 PciAddress;
+ UINT8 Value8;
+ EFI_GUID gEfiPciRootBridgeIoProtocolGuid = EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *gPciRootBridgeIo;
+
+ Status = pBS->LocateProtocol(
+ &gEfiPciRootBridgeIoProtocolGuid,
+ NULL,
+ &gPciRootBridgeIo);
+ ASSERT_EFI_ERROR(Status);
+
+ // Onboard Video
+ PciAddress = PCI_CFG_ADDRESS (0, 0, 0, MCH_REG_GGC);
+ gPciRootBridgeIo->Pci.Read (
+ gPciRootBridgeIo,
+ EfiPciWidthUint8,
+ PciAddress,
+ 1,
+ &Value8);
+ if (Value8 & BIT01) {
+ OnBoardDevInfo.OnBoardDev[0] = 0; // Disabled
+ }
+ else {
+ OnBoardDevInfo.OnBoardDev[0] = 0x80; // Enabled
+ }
+
+ // Onboard LAN
+ Value8 = *(UINT8*)(SB_RCBA + R_RCBA_BUC);
+ if (Value8 & B_LAN_DISABLE) {
+ OnBoardDevInfo.OnBoardDev[1] = 0; // Disabled
+ }
+ else {
+ OnBoardDevInfo.OnBoardDev[1] = 0x80; // Enabled
+ }
+
+ // Onboard 1394 - Use GPIO49 0/1 = Enabled/Disabled
+ Value8 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2 + 2);
+ if (Value8 & BIT01) {
+ OnBoardDevInfo.OnBoardDev[2] = 0; // Disabled
+ }
+ else {
+ OnBoardDevInfo.OnBoardDev[2] = 0x80; // Enabled
+ }
+
+ VarSize = sizeof(ONBOARD_DEV_DYNAMIC_DATA);
+ Status = pRS->SetVariable(SmbiosOnBoardVar, &EfiSmbiosDynamicDataGuid,
+ Attributes, VarSize, &OnBoardDevInfo);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_ONBOARD_DEV_TYPE10
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** OPTIONAL *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateOnBoardDevExtInfoForSMBios
+//
+// Description: This function gathers the Onboard Device status information
+// and saves them in a variable named "SmbiosOnBoardExtVar".
+// This variable with the OnBoard Device Extended information
+// is needed by the SMBIOS module to create the "Type 41"
+// structure.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+// Variable named "SmbiosOnBoardExtVar" with on-board device
+// information.
+//
+// Note: Refer to ONBOARD_DEV_EXT_DYNAMIC_DATA in SmbiosDynamicData.h for
+// structure information.
+//
+// Set device status to 0 if disabled.
+// Set device status to 0x80 if enabled.
+// Ex: In sample code
+// OnBoardDevInfo.OnBoardDev[0] = 0; // Disabled
+// OnBoardDevInfo.OnBoardDev[0] = 0x80; // Enabled
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateOnBoardDevExtInfoForSMBios (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_DEVICE_EXT_TYPE41
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ UINTN VarSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ ONBOARD_DEV_EXT_DYNAMIC_DATA OnBoardDevExtInfo;
+ UINT64 PciAddress;
+ UINT8 Value8;
+ EFI_GUID gEfiPciRootBridgeIoProtocolGuid = EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *gPciRootBridgeIo;
+
+ Status = pBS->LocateProtocol(
+ &gEfiPciRootBridgeIoProtocolGuid,
+ NULL,
+ &gPciRootBridgeIo);
+ ASSERT_EFI_ERROR(Status);
+
+ // Onboard Video
+ PciAddress = PCI_CFG_ADDRESS (0, 0, 0, MCH_REG_GGC);
+ gPciRootBridgeIo->Pci.Read (
+ gPciRootBridgeIo,
+ EfiPciWidthUint8,
+ PciAddress,
+ 1,
+ &Value8);
+ if (Value8 & BIT01) {
+ OnBoardDevExtInfo.OnBoardDev[0] = 0; // Disabled
+ }
+ else {
+ OnBoardDevExtInfo.OnBoardDev[0] = 0x80; // Enabled
+ }
+
+ OnBoardDevExtInfo.BusNumber[0] = 0;
+
+ // Onboard LAN
+ Value8 = *(UINT8*)(SB_RCBA + R_RCBA_BUC);
+ if (Value8 & B_LAN_DISABLE) {
+ OnBoardDevExtInfo.OnBoardDev[1] = 0; // Disabled
+ }
+ else {
+ OnBoardDevExtInfo.OnBoardDev[1] = 0x80; // Enabled
+ }
+
+ OnBoardDevExtInfo.BusNumber[1] = 0;
+
+ // Onboard 1394 - Use GPIO49 0/1 = Enabled/Disabled
+ Value8 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2 + 2);
+ if (Value8 & BIT01) {
+ OnBoardDevExtInfo.OnBoardDev[2] = 0; // Disabled
+ }
+ else {
+ OnBoardDevExtInfo.OnBoardDev[2] = 0x80; // Enabled
+ }
+
+ PciAddress = PCI_CFG_ADDRESS (0, 0x1C, 2, 0x19);
+ gPciRootBridgeIo->Pci.Read (
+ gPciRootBridgeIo,
+ EfiPciWidthUint8,
+ PciAddress,
+ 1,
+ &Value8);
+
+ OnBoardDevExtInfo.BusNumber[2] = Value8;
+
+ VarSize = sizeof(ONBOARD_DEV_EXT_DYNAMIC_DATA);
+ Status = pRS->SetVariable(SmbiosOnBoardExtVar, &EfiSmbiosDynamicDataGuid,
+ Attributes, VarSize, &OnBoardDevExtInfo);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of SAMPLE TEMPLATE CODE for Intel Weybridge CRB ===
+ // === platform. Uncomment this block to use. ===
+ // === ===
+ // === Might need changes for other platforms. ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_DEVICE_EXT_TYPE41
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: CreateBatteryDataForSMBios
+//
+// Description: This function provides system battery information. SMBIOS
+// Core uses these information to dynamically update SMBIOS
+// Portable Battery Data structure Type 22.
+//
+// Input: None
+//
+// Output: EFI_STATUS
+// Variable named "SmbiosBatteryVar" with Battery information
+//
+// Note: Refer to BATTERY_DYNAMIC_DATA in SmbiosDynamicData.h for
+// structure information.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+CreateBatteryDataForSMBios (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if UPDATE_BATTERY_TYPE22
+/*
+//----------------------------------------------------------------------------
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === Start of dummy code ===
+ // === ===
+ // === PORTING IS NEEDED FOR INDIVIDUAL PLATFORM !!! ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+
+ EFI_GUID EfiSmbiosDynamicDataGuid = EFI_SMBIOS_DYNAMIC_DATA_GUID;
+ BATTERY_DYNAMIC_DATA BatteryInfo;
+ UINTN VarSize;
+ UINT32 Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ UINT8 DeviceName1[] = "BATT 1";
+ UINT8 DeviceName2[] = "Another Battery Name";
+ UINT8 SbdsVersion1[] = "01.12.912";
+ UINT8 SbdsVersion2[] = "00.01";
+
+ BatteryInfo.BatteryDynamicData[0].DesignCapacity = 1;
+ BatteryInfo.BatteryDynamicData[0].DesignVoltage = 5000;
+ BatteryInfo.BatteryDynamicData[0].SbdsSerialNumber = 0x1111;
+ BatteryInfo.BatteryDynamicData[0].SbdsManufacturedDate = 0x2841;
+ BatteryInfo.BatteryDynamicData[0].DesignCapacityMult = 1000;
+ // When copying strings, MAKE SURE THE ZERO TERMINATOR
+ // for the string is included
+ MemCpy (BatteryInfo.BatteryDynamicData[0].DeviceName, DeviceName1, sizeof(DeviceName1));
+ MemCpy (BatteryInfo.BatteryDynamicData[0].SbdsVersion, SbdsVersion1, sizeof(SbdsVersion1));
+ BatteryInfo.BatteryDynamicData[0].Valid = TRUE;
+
+ BatteryInfo.BatteryDynamicData[1].DesignCapacity = 1;
+ BatteryInfo.BatteryDynamicData[1].DesignVoltage = 9000;
+ BatteryInfo.BatteryDynamicData[1].SbdsSerialNumber = 0x4444;
+ BatteryInfo.BatteryDynamicData[1].SbdsManufacturedDate = 0x1814;
+ BatteryInfo.BatteryDynamicData[1].DesignCapacityMult = 500;
+ // When copying strings, MAKE SURE THE ZERO TERMINATOR
+ // for the string is included
+ MemCpy (BatteryInfo.BatteryDynamicData[1].DeviceName, DeviceName2, sizeof(DeviceName2));
+ MemCpy (BatteryInfo.BatteryDynamicData[1].SbdsVersion, SbdsVersion2, sizeof(SbdsVersion2));
+ BatteryInfo.BatteryDynamicData[1].Valid = FALSE;
+
+ BatteryInfo.BatteryDynamicData[2].DesignCapacity = 1;
+ BatteryInfo.BatteryDynamicData[2].DesignVoltage = 3000;
+ BatteryInfo.BatteryDynamicData[2].SbdsSerialNumber = 0x7777;
+ BatteryInfo.BatteryDynamicData[2].SbdsManufacturedDate = 0x0814;
+ BatteryInfo.BatteryDynamicData[2].DesignCapacityMult = 200;
+ // When copying strings, MAKE SURE THE ZERO TERMINATOR
+ // for the string is included
+ MemCpy (BatteryInfo.BatteryDynamicData[2].DeviceName, DeviceName2, sizeof(DeviceName2));
+ MemCpy (BatteryInfo.BatteryDynamicData[2].SbdsVersion, SbdsVersion2, sizeof(SbdsVersion2));
+ BatteryInfo.BatteryDynamicData[2].Valid = FALSE;
+
+ BatteryInfo.BatteryDynamicData[3].DesignCapacity = 1;
+ BatteryInfo.BatteryDynamicData[3].DesignVoltage = 1000;
+ BatteryInfo.BatteryDynamicData[3].SbdsSerialNumber = 0x9999;
+ BatteryInfo.BatteryDynamicData[3].SbdsManufacturedDate = 0x5814;
+ BatteryInfo.BatteryDynamicData[3].DesignCapacityMult = 700;
+ // When copying strings, MAKE SURE THE ZERO TERMINATOR
+ // for the string is included
+ MemCpy (BatteryInfo.BatteryDynamicData[3].DeviceName, DeviceName2, sizeof(DeviceName2));
+ MemCpy (BatteryInfo.BatteryDynamicData[3].SbdsVersion, SbdsVersion2, sizeof(SbdsVersion2));
+ BatteryInfo.BatteryDynamicData[3].Valid = TRUE;
+
+ VarSize = sizeof(BATTERY_DYNAMIC_DATA);
+ Status = pRS->SetVariable(SmbiosBatteryVar,
+ &EfiSmbiosDynamicDataGuid,
+ Attributes,
+ VarSize,
+ &BatteryInfo);
+
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+ // === ===
+ // === End of dummy code ===
+ // === ===
+ // ==================================================================
+ // ==================================================================
+ // ==================================================================
+//----------------------------------------------------------------------------
+*/
+#endif // UPDATE_BATTERY_TYPE22
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMIBiosBoardDriverEntryPoint
+//
+// Description: SMBIOS Board driver entry point
+//
+// Input: IN EFI_HANDLE ImageHandle,
+// IN EFI_SYSTEM_TABLE *SystemTable
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+SMIBiosBoardDriverEntryPoint(
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+
+ InitAmiLib(ImageHandle, SystemTable);
+
+ Status = pBS->InstallProtocolInterface(&ImageHandle,
+ &gEfiSmbiosBoardProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &SmbiosBoardProtocol);
+ return Status;
+}
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit32.obj b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit32.obj
new file mode 100644
index 0000000..227a2cb
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit32.obj
Binary files differ
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit64.obj b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit64.obj
new file mode 100644
index 0000000..dc15171
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEdit64.obj
Binary files differ
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c
new file mode 100644
index 0000000..0aff388
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c
@@ -0,0 +1,204 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+//**********************************************************************
+// $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c 8 4/06/10 3:26p Davidd $
+//
+// $Revision: 8 $
+//
+// $Date: 4/06/10 3:26p $
+//*****************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c $
+//
+// 8 4/06/10 3:26p Davidd
+// Added code to enable shadow ram write by calling the newly added
+// generic OemRuntimeShadowRamWrite function from CSP Lib.
+//
+// 7 6/02/09 4:51p Davidd
+// Updated AMI headers (EIP 22180)
+//
+// 6 10/27/08 1:04p Davidd
+//
+// 5 9/26/08 11:02a Davidd
+// Provided sample code to enable / disable E000 and F000 shadow for Intel
+// chipset.
+//
+// 4 11/19/07 11:47a Robert
+//
+// 3 12/15/06 5:37p Davidd
+// Code cleanup and reformatted to coding standard.
+//
+// 2 11/02/06 10:09a Fasihm
+// Updated the code from Assembly to C, so as to compile and build in the
+// x64 BIOS build environment.
+//
+// 1 5/24/06 11:59a Fasihm
+// Initial check-in for the Santa Rosa Project. (Matanzas CRB) with
+// Crestline + ICH8M + Merom Processor.
+//
+// 1 8/16/05 11:04a Mirk
+//
+// 1 8/10/05 11:31a Davidd
+// Initial checkin. To be used with SMBIOS Core ALPHA_01.04.
+//
+// 1 8/10/05 11:18a Davidd
+// New SmbiosDMIEditBoard component.
+//
+//*****************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: SmbiosDMIEditBoard.C
+//
+// Description: This file contains code for OEM related code for DMIEdit
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+//----------------------------------------------------------------------------
+// Includes
+
+#include <Token.h>
+#include <EFI.h>
+#include <AmiDxeLib.h>
+#include <AmiCspLib.h>
+
+extern
+VOID OemRuntimeShadowRamWrite(
+ IN BOOLEAN Enable
+);
+
+// //
+// // Sample code for Weybridge CRB. Needs to be changed for other platforms.
+// //
+//UINT8 Reg90Byte; // 0F000 PAM Reg
+//#if ((defined(ITK_SUPPORT) && (ITK_SUPPORT != 0)) || SMBIOS_TABLE_LOCATION)
+//UINT8 Reg95Byte; // 0E000-0E400 PAM Reg
+//UINT8 Reg96Byte; // 0E8000-0EC00 PAM Reg
+//#endif
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: EnableShadowWrite
+//
+// Description: This function enables write to F000 shadow,
+// and E000 shadow if ITK_SUPPORT token
+// or SMBIOS_TABLE_LOCATION token is set.
+//
+// Input: None
+//
+// Output: None
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+EnableShadowWrite (VOID)
+{
+ OemRuntimeShadowRamWrite(TRUE); // Call this generic function
+ // if CSP Library in project is
+ // 4.6.4.0_CSPLibrary_013 or later
+
+// //
+// //
+// // Sample code for Weybridge CRB. Needs to be changed for other platforms.
+// //
+
+// UINT8 bValue;
+
+// // 0F000 shadow
+// IoWrite32(0x0CF8, 0x80000090);
+// Reg90Byte = bValue = IoRead8(0x0CFC);
+// bValue |= 0x30;
+// IoWrite8(0x0CFC, bValue);
+
+//#if ((defined(ITK_SUPPORT) && (ITK_SUPPORT != 0)) || SMBIOS_TABLE_LOCATION)
+// // 0E000-0E400 shadow
+// IoWrite32(0x0CF8, 0x80000095);
+// Reg95Byte = bValue = IoRead8(0x0CFD);
+// bValue |= 0x33;
+// IoWrite8(0x0CFD, bValue);
+
+// // 0E800-0EC00 shadow
+// IoWrite32(0x0CF8, 0x80000096);
+// Reg96Byte = bValue = IoRead8(0x0CFE);
+// bValue |= 0x33;
+// IoWrite8(0x0CFE, bValue);
+//#endif
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// ***** PORTING REQUIRED *****
+// (if SMBIOS module is part of the project)
+//----------------------------------------------------------------------------
+// Procedure: DisableShadowWrite
+//
+// Description: This function makes F000 shadow read only,
+// and E000 shadow read only if ITK_SUPPORT token
+// or SMBIOS_TABLE_LOCATION token is set.
+//
+// Input: None
+//
+// Output: None
+//
+// Note:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+DisableShadowWrite (VOID)
+{
+ OemRuntimeShadowRamWrite(FALSE); // Call this generic function
+ // if CSP Library in project is
+ // 4.6.4.0_CSPLibrary_013 or later
+
+// //
+// // Sample code for Weybridge CRB. Needs to be changed for other platforms.
+// //
+
+// // 0F000 shadow
+// IoWrite32(0x0CF8, 0x80000090);
+// IoWrite8(0x0CFC, Reg90Byte);
+
+//#if ((defined(ITK_SUPPORT) && (ITK_SUPPORT != 0)) || SMBIOS_TABLE_LOCATION)
+// // 0E000-0E400 shadow
+// IoWrite32(0x0CF8, 0x80000095);
+// IoWrite8(0x0CFD, Reg95Byte);
+
+// // 0E800-0EC00 shadow
+// IoWrite32(0x0CF8, 0x80000096);
+// IoWrite8(0x0CFE, Reg96Byte);
+//#endif
+}
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c32 b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c32
new file mode 100644
index 0000000..e3dbcef
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c32
@@ -0,0 +1,13 @@
+<component>
+ name = "SmbiosDMIEditBoard"
+ category = ModulePart
+ LocalRoot = "Board\EM\SMBIOS\SmbiosDMIEdit"
+ RefName = "SmbiosDMIEditBoard"
+[files]
+"SmbiosDMIEditBoard.sdl"
+"SmbiosDMIEditBoard.mak"
+"SmbiosDMIEditBoard.dxs"
+"SmbiosDMIEditBoard.c"
+"SmbiosDMIEdit32.obj"
+"SmbiosDMIEditFunc32.obj"
+<endComponent>
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c64 b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c64
new file mode 100644
index 0000000..245ea5f
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.c64
@@ -0,0 +1,13 @@
+<component>
+ name = "SmbiosDMIEditBoard"
+ category = ModulePart
+ LocalRoot = "Board\EM\SMBIOS\SmbiosDMIEdit"
+ RefName = "SmbiosDMIEditBoard"
+[files]
+"SmbiosDMIEditBoard.sdl"
+"SmbiosDMIEditBoard.mak"
+"SmbiosDMIEditBoard.dxs"
+"SmbiosDMIEditBoard.c"
+"SmbiosDMIEdit64.obj"
+"SmbiosDMIEditFunc64.obj"
+<endComponent>
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.cif b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.cif
new file mode 100644
index 0000000..9d44520
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.cif
@@ -0,0 +1,17 @@
+<component>
+ name = "SmbiosDMIEditBoard"
+ category = ModulePart
+ LocalRoot = "Board\EM\SMBIOS\SmbiosDMIEdit"
+ RefName = "SmbiosDMIEditBoard"
+[files]
+"SmbiosDMIEditBoard.sdl"
+"SmbiosDMIEditBoard.mak"
+"SmbiosDMIEditBoard.dxs"
+"SmbiosDMIEditBoard.c"
+"SmbiosDMIEdit32.obj"
+"SmbiosDMIEdit64.obj"
+"SmbiosDMIEditFunc32.obj"
+"SmbiosDMIEditFunc64.obj"
+"SmbiosDMIEditBoard.c32"
+"SmbiosDMIEditBoard.c64"
+<endComponent>
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs
new file mode 100644
index 0000000..4c0b432
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs
@@ -0,0 +1,82 @@
+//**********************************************************************//
+//**********************************************************************//
+//** **//
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **//
+//** **//
+//** All Rights Reserved. **//
+//** **//
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+//** **//
+//** Phone: (770)-246-8600 **//
+//** **//
+//**********************************************************************//
+//**********************************************************************//
+//**********************************************************************//
+// $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs 4 6/28/12 8:14p Davidd $
+//
+// $Revision: 4 $
+//
+// $Date: 6/28/12 8:14p $
+//**********************************************************************//
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.dxs $
+//
+// 4 6/28/12 8:14p Davidd
+// Select SMM_BASE_PROTOCOL_GUID depending on PI_SPECIFICATION_VERSION
+//
+// 3 6/02/09 4:50p Davidd
+// Updated AMI headers (EIP 22180)
+//
+// 2 3/29/07 5:27p Davidd
+// Changed the year in the AMI banner and adjust indentation to coding
+// standard.
+//
+// 1 8/10/05 11:31a Davidd
+// Initial checkin. To be used with SMBIOS Core ALPHA_01.04.
+//
+// 1 8/10/05 11:18a Davidd
+// New SmbiosDMIEditBoard component.
+//
+//**********************************************************************//
+
+#include <token.h>
+
+#include <Protocol\SmbiosGetFlashDataProtocol.h>
+#if PI_SPECIFICATION_VERSION < 0x0001000A
+#include <Protocol\SmmBase.h>
+#else
+#include <Protocol\SmmBase2.h>
+#endif
+#include <Protocol\LoadedImage.h>
+#include <Protocol\DevicePath.h>
+#include <Protocol\SmmSwDispatch.h>
+#include <Protocol\SmiFlash.h>
+
+DEPENDENCY_START
+#if !defined(SMBIOS_DMIEDIT_DATA_LOC) || SMBIOS_DMIEDIT_DATA_LOC != 2
+ EFI_SMBIOS_FLASH_DATA_PROTOCOL_GUID AND
+ EFI_SMI_FLASH_GUID AND
+#endif
+#if PI_SPECIFICATION_VERSION < 0x0001000A
+ EFI_SMM_BASE_PROTOCOL_GUID AND
+#else
+ EFI_SMM_BASE2_PROTOCOL_GUID AND
+#endif
+ EFI_SMM_SW_DISPATCH_PROTOCOL_GUID AND
+ EFI_SMBIOS_PROTOCOL_GUID
+DEPENDENCY_END
+
+//**********************************************************************//
+//**********************************************************************//
+//** **//
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **//
+//** **//
+//** All Rights Reserved. **//
+//** **//
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+//** **//
+//** Phone: (770)-246-8600 **//
+//** **//
+//**********************************************************************//
+//**********************************************************************//
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak
new file mode 100644
index 0000000..0ef990f
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak
@@ -0,0 +1,98 @@
+#************************************************************************
+#************************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#************************************************************************
+#************************************************************************
+
+#************************************************************************
+# $Header: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak 7 4/08/16 12:59p Davidd $
+#
+# $Revision: 7 $
+#
+# $Date: 4/08/16 12:59p $
+#************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Modules/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.mak $
+#
+# 7 4/08/16 12:59p Davidd
+# [TAG] EIP231162
+# [Category] New Feature
+# [Description] Merge Aptio V Smbios -09 changes for Aptio 4
+# 4.6.5.5_SMBIOS_40 release
+# [Files] SmbiosGetFlashData32.ffs
+# SmbiosGetFlashData64.ffs
+# Smbios32.ffs
+# Smbios64.ffs
+# SmbiosDmiEditBoard.mak
+# SmbiosDmiEdit32.obj
+# SmbiosDmiEdit64.obj
+# SmbiosDmiEditFunc32.obj
+# SmbiosDmiEditFunc64.obj
+#
+# 6 4/20/10 12:53p Davidd
+#
+# 5 6/02/09 4:49p Davidd
+# Updated AMI headers (EIP 22180)
+#
+# 4 12/30/08 3:17p Davidd
+# Changes added for x32 and x64 binary support.
+#
+# 3 3/29/07 5:18p Davidd
+# Changed the year in the AMI banner.
+#
+# 2 12/02/05 11:47a Felixp
+#
+# 1 8/10/05 11:31a Davidd
+# Initial checkin. To be used with SMBIOS Core ALPHA_01.04.
+#
+# 1 8/10/05 11:18a Davidd
+# New SmbiosDMIEditBoard component.
+#
+#************************************************************************
+
+!IF !DEFINED(SMBIOS_CORE_SRC_SUPPORT) || "$(SMBIOS_CORE_SRC_SUPPORT)" == "0"
+
+all : SMBIOS_DMIEDIT_BOARD_SUPPORT
+
+SMBIOS_DMIEDIT_BOARD_SUPPORT : $(BUILD_DIR)\SmbiosDMIEditBoard.mak SmbiosDMIEditBoardBin
+
+!IF "$(x64_BUILD)"=="1"
+$(BUILD_DIR)\SmbiosDMIEditBoard.mak : $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).cif $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).c64 $(CIF2MAK_DEFAULTS)
+!ELSE
+$(BUILD_DIR)\SmbiosDMIEditBoard.mak : $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).cif $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(SMBIOS_DMIEDIT_BOARD_DIR)\$(@B).c32 $(CIF2MAK_DEFAULTS)
+!ENDIF
+
+SmbiosDMIEditBoardBin : $(AMIDXELIB) $(AMICSPLib) $(BUILD_DIR)\AmiBufferValidationLib.lib
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\SmbiosDMIEditBoard.mak all\
+ GUID=AF382531-52E6-4cc4-B247-DB8E320CBBA3 \
+ ENTRY_POINT=SmbiosDmiEditSupportInstall \
+ TYPE=BS_DRIVER \
+ COMPRESS=1\
+
+!ENDIF
+
+#************************************************************************
+#************************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#************************************************************************
+#************************************************************************
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.sdl b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.sdl
new file mode 100644
index 0000000..4a04839
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditBoard.sdl
@@ -0,0 +1,50 @@
+TOKEN
+ Name = "SmbiosDMIEditBoard_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable AMI DMIEdit Board for SMBIOS support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Lock = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "SMBIOS_CORE_SRC_STATUS"
+ Value = "0"
+ Help = "Smbios Core Source is disabled"
+ TokenType = Boolean
+End
+
+TOKEN
+ Name = "SMBIOS_CORE_SRC_STATUS"
+ Value = "1"
+ Help = "Smbios Core Source is enabled"
+ TokenType = Boolean
+ Token = "SMBIOS_CORE_SRC_SUPPORT" "=" "1"
+End
+
+TOKEN
+ Name = "PROCESSOR_DMIEDIT_SUPPORT"
+ Value = "1"
+ Help = "ON -> Type 4 Serial Number, Asset Tag, Part Number update via DmiEdit is supported\OFF -> Type 4 Serial Number, Asset Tag, Part Number update via DmiEdit is not supported"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+PATH
+ Name = "SMBIOS_DMIEDIT_BOARD_DIR"
+End
+
+MODULE
+ Help = "Includes SmbiosDMIEditBoard.mak to Project"
+ File = "SmbiosDMIEditBoard.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SmbiosDMIEditBoard.ffs"
+ Parent = "FV_MAIN"
+ Token = "SMBIOS_CORE_SRC_STATUS" "=" "0"
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc32.obj b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc32.obj
new file mode 100644
index 0000000..19328cb
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc32.obj
Binary files differ
diff --git a/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc64.obj b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc64.obj
new file mode 100644
index 0000000..e1890de
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosDMIEdit/SmbiosDMIEditFunc64.obj
Binary files differ
diff --git a/Board/EM/SMBIOS/SmbiosGetFlashData32.ffs b/Board/EM/SMBIOS/SmbiosGetFlashData32.ffs
new file mode 100644
index 0000000..876f3f5
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosGetFlashData32.ffs
Binary files differ
diff --git a/Board/EM/SMBIOS/SmbiosGetFlashData64.ffs b/Board/EM/SMBIOS/SmbiosGetFlashData64.ffs
new file mode 100644
index 0000000..83517b1
--- /dev/null
+++ b/Board/EM/SMBIOS/SmbiosGetFlashData64.ffs
Binary files differ
diff --git a/Board/EM/SMBIOS/Smbrun.asm b/Board/EM/SMBIOS/Smbrun.asm
new file mode 100644
index 0000000..17ec967
--- /dev/null
+++ b/Board/EM/SMBIOS/Smbrun.asm
@@ -0,0 +1,890 @@
+ TITLE SMBRUN.ASM -- SMBIOS RUNTIME PnP FUNCTIONS 5Xh
+
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************
+
+;****************************************************************************
+; $Header: /Alaska/BIN/Modules/SMBIOS/Smbrun.asm 6 6/02/09 3:49p Davidd $
+;
+; $Revision: 6 $
+;
+; $Date: 6/02/09 3:49p $
+;
+;****************************************************************************
+; Revision History
+; ----------------
+; $Log: /Alaska/BIN/Modules/SMBIOS/Smbrun.asm $
+;
+; 6 6/02/09 3:49p Davidd
+; Updated AMI headers and code clean up (EIP 22180)
+;
+; 5 5/19/09 10:53a Davidd
+; Changes done for PnP 54 function support (EIP 19358).
+;
+; 4 1/22/08 4:17p Olegi
+; Modifications for 16-bit PM calls.
+;
+; 2 12/31/07 12:53p Olegi
+; Modifications for 16-bit protected mode interface.
+;
+; 1 12/26/07 5:08p Olegi
+; File moved from Board to Core component.
+;
+; 3 9/06/07 4:23p Vyacheslava
+; Added support for GPNV PnP functions: 55h, 56h, 57h
+; The main procedures are in SMIGPNV module
+;
+; 1 9/06/07 3:31p Vyacheslava
+; Added support for PnP functions: 55h, 56h, 57h
+;
+; 2 8/09/07 4:10p Olegi
+; Support for functions 53 and 54.
+;
+; 1 8/03/07 4:50p Olegi
+; SMBIOS PnP 16-bit functions - initial check-in; functions 50h, 51h and
+; 52h are implemented.
+;
+;****************************************************************************
+
+.586p
+
+;<AMI_FHDR_START>
+;---------------------------------------------------------------------------
+;
+; Name: Smbrun.asm
+;
+; Description: SMBIOS runtime PnP functions 5Xh
+;
+;---------------------------------------------------------------------------
+;<AMI_FHDR_END>
+
+INCLUDE Token.equ
+
+OEM16_CSEG SEGMENT PARA PUBLIC 'CODE' USE16
+ ASSUME cs:OEM16_CSEG, ds:OEM16_CSEG
+
+;------------------------------------------------------------------------------
+; Run Time Function Return Codes (from Core8's RT.EQU)
+;------------------------------------------------------------------------------
+RT_NO_ERROR equ 00h
+RT_INVALID_FUNC equ 81h
+RT_NVR_READ_ERROR equ 82h
+RT_CMOS_READ_ERROR equ 82h
+RT_PCI_BAD_VENDOR_ID equ 83h
+RT_PCI_DEV_NOT_FOUND equ 86h
+RT_PCI_BAD_REG_ADD equ 87h
+RT_PCI_SET_FAILED equ 88h
+RT_PCI_BUF_TOO_SMALL equ 89h
+
+RT_PNP_UNSUPPORTED equ 82h
+RT_PNP_INVALID_NODE equ 83h
+RT_PNP_BAD_PARAMETER equ 84h
+RT_PNP_SET_FAILED equ 85h
+RT_PNP_USE_ESCD equ 8Dh
+
+RT_ESCD_READ_ERROR equ 55h
+RT_ESCD_INVALID equ 56h
+
+RT_DMI_SUCCESS equ 00h
+RT_DMI_UNKNOWN_FUNCTION equ 81h
+RT_DMI_FUNCTION_NOT_SUPPORTED equ 82h
+RT_DMI_INVALID_HANDLE equ 83h
+RT_DMI_BAD_PARAMETER equ 84h
+RT_DMI_INVALID_SUBFUNCTION equ 85h
+RT_DMI_NO_CHANGE equ 86h
+ RT_DMI_NO_EVENTS_PENDING equ 86h
+RT_DMI_ADD_STRUCTURE_FAILED equ 87h
+ ; 88h-8Ch..not defined
+RT_DMI_READ_ONLY equ 8Dh
+ ; 8Eh-8Fh..not defined
+RT_DMI_LOCK_NOT_SUPPORTED equ 90h
+RT_DMI_CURENTLY_LOCKED equ 91h
+RT_DMI_INVALID_LOCK equ 92h
+
+SMBIOS_PNP_FUNC50_DMIEDIT_STRUC struc
+ dataIgnoredByDmiFn50 DB 24 DUP (?)
+ dDmiBiosRevision DD ? ; BYTE
+ dDmiNumStructures DD ? ; WORD
+ dDmiStructureSize DD ? ; WORD
+ dDmiStorageBase DD ? ; DWORD
+ dDmiStorageSize DD ? ; WORD
+SMBIOS_PNP_FUNC50_DMIEDIT_STRUC ends
+
+SMBIOS_PNP_FUNC51_DMIEDIT_STRUC struc
+ wFunction DW ? ; 51h
+ dStructure DD ? ; UINT16*
+ dDmiStructureBuffer DD ? ; UINT32*
+ wDmiSelector DW ?
+ dBiosSelector DW ?
+SMBIOS_PNP_FUNC51_DMIEDIT_STRUC ends
+
+DMIHDR_STRUC STRUCT
+ bType BYTE ?
+ bLength BYTE ?
+ wHandle WORD ?
+DMIHDR_STRUC ENDS
+
+;----------------------------------------------------------------------------
+; STRUCTURE OF DATA BUFFER IN SMBIOS FUNCTION 53H
+;----------------------------------------------------------------------------
+SMBIOSFun53BufferSTRUC STRUC
+ bChangeStatus BYTE ?
+ bChangeType BYTE ?
+ wChangeHandle WORD ?
+ bChangeReserved BYTE 12 DUP (?)
+SMBIOSFun53BufferSTRUC ENDS
+
+;----------------------------------------------------------------------------
+; EQUATES USED IN SMBIOS FUNCTION 53H
+;----------------------------------------------------------------------------
+; equates used in SMBIOS Change Status
+SMBIOS_NO_CHANGE EQU 00h ; 00h..SMBIOS No Change
+SMBIOS_OTHER_CHANGE EQU 01h ; 01h..SMBIOS Other Change
+SMBIOS_UNKNOWN_CHANGE EQU 02h ; 02h..SMBIOS Unknown Change
+SMBIOS_SINGLE_STRUCTURE_AFFECTED EQU 03h ; 03h..SMBIOS Single Structure Affected
+SMBIOS_MULTIPLE_STRUCTURE_AFFECTED EQU 04h ; 04h..SMBIOS Multiple Structure Affected
+
+; equates used in SMBIOS Change Type
+SMBIOS_ONE_MORE_STRUCTURE_CHANGED EQU 00000001b ; Bit-0 = 1, One/More Structure was changed
+SMBIOS_ONE_MORE_STRUCTURE_ADDED EQU 00000010b ; Bit-1 = 1, One/More Structure was added
+ ; Bit7-2.....Reserved
+
+;<AMI_FHDR_START>
+;---------------------------------------------------------------------------
+;
+; Name: SmbiosPnpFunctions
+;
+; Description: SMBIOS PnP functions 50..57
+;
+; Output: None
+;
+;---------------------------------------------------------------------------
+;<AMI_FHDR_END>
+
+SmbiosPnpFunctions PROC FAR PUBLIC
+ pushf
+ push fs
+ push bx
+ push dx
+ push si
+ push bp
+
+ call $+3 ; Push curent IP
+ pop si ; Get current IP in SI
+ sub si, $
+ inc si
+
+ mov bx, 0FF4Ch
+ mov bx, cs:[bx] ; OFFSET RUN_CSEG:Legacy16Data
+ mov bx, cs:[bx+8] ; OFFSET RUN_CSEG:smiflash_table
+ mov dx, WORD PTR cs:[bx+12] ; SMI port IO address
+
+ mov bx, [ebp+00h] ; get the function number
+ sub bx, 50h
+ mov ax, RT_INVALID_FUNC ; Return code for unknown func
+
+;-IF NOT MKF_SMBIOS_DATA_STRUCTURES_BELOW_TOM
+ cmp bx, (smbios_func_table_end - smbios_func_table_start) / 2
+ jae SHORT srfe_00 ; invalid function
+
+ add si, OFFSET cs:smbios_func_table_start
+ shl bx, 1
+ add si, bx
+ call si ; Call proper PnP function
+
+srfe_00:
+ pop bp
+ pop si
+ pop dx
+ pop bx
+ pop fs
+ popf
+
+rt_pnp_exit:
+ pop bx
+ popf
+ pop ebp
+ ret
+
+SmbiosPnpFunctions ENDP
+
+;----------------------------------------------------------------------------
+; SMBIOS_FUNC_TABLE (SHORT is the key word needed to assure 2 bytes per jmp)
+;----------------------------------------------------------------------------
+smbios_func_table_start LABEL BYTE
+ jmp SHORT func_50
+ jmp SHORT func_51
+ jmp SHORT func_52
+ jmp SHORT func_53
+ jmp SHORT func_54
+ jmp SHORT func_55
+ jmp SHORT func_56
+ jmp SHORT func_57
+smbios_func_table_end LABEL BYTE
+
+func_50: jmp rt_get_smbios_info
+func_51: jmp rt_get_smbios_struc
+func_52: jmp rt_set_smbios_struc
+func_53: jmp rt_get_smbios_struc_change_info
+func_54: jmp rt_smbios_control
+func_55: jmp rt_smbios_get_gpnv
+func_56: jmp rt_smbios_read_gpnv
+func_57: jmp rt_smbios_write_gpnv
+
+;<AMI_FHDR_START>
+;---------------------------------------------------------------------------
+;
+; Name: rt_generate_sw_smi
+;
+; Description: Generate SW SMI
+;
+; Input: AL = PnP function number
+; DX = SMI Port
+;
+; Output: None
+;
+;---------------------------------------------------------------------------
+;<AMI_FHDR_END>
+rt_generate_sw_smi PROC NEAR
+ out dx, al
+ movzx bx, al
+ ret
+rt_generate_sw_smi ENDP
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_50h
+; Procedure: RT_GET_SMBIOS_INFO
+;
+; Description: This function returns information about the SMBIOS extensions
+; such as the number of structures present and the size of the
+; largest one. This function is presently called only during RUNTIME.
+;
+; Input: [EBP+00] = Function number (50h)
+; [EBP+02] = BYTE FAR *DmiBiosVersion
+; [EBP+06] = WORD FAR *NumStructures
+; [EBP+0A] = WORD FAR *StructureSize
+; [EBP+0E] = DWORD FAR *DMIStorageBase
+; [EBP+12] = WORD FAR *DMIStorageSize
+; [EBP+16] = WORD BiosSelector
+; DX = SMI IO port address
+;
+; Output: AX = Zero if successful
+; non-zero return code if non successful
+; [EBP+02] = BYTE FAR *DmiBiosVersion filled in with the version
+; of the DMI BIOS spec that this code supports.
+; [EBP+06] = WORD FAR *NumStructures filled with total number of
+; DMI structures that are present in the system.
+; [EBP+0A] = WORD FAR *StructureSize filled with the size in
+; bytes of the largest DMI structure.
+; [EBP+0E] = DWORD FAR *DMIStorageBase filled with the absolute
+; 32Bit address of any memory-mapped structure
+; [EBP+12] = WORD FAR *DMIStorageSize filled with the buffer
+; size needed in Func 52h/54h.
+;
+; Modified: Nothing
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_get_smbios_info PROC NEAR
+
+ push ebx
+ push eax
+ push si
+ push edi
+ push ds
+
+ ; EBX = SS<<4+SP-sizeof(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC)
+ mov ebx, 0
+ mov bx, ss
+ shl ebx, 4
+ movzx edi, sp
+ sub di, size SMBIOS_PNP_FUNC50_DMIEDIT_STRUC
+ add ebx, edi
+
+ mov sp, di
+
+ mov al, 50h
+ call rt_generate_sw_smi
+
+ lds si, DWORD PTR [ebp+02h]
+ mov eax, ss:(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC PTR [di]).dDmiBiosRevision
+ mov BYTE PTR [si], al
+
+ lds si, DWORD PTR [ebp+06h]
+ mov eax, ss:(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC PTR [di]).dDmiNumStructures
+ mov WORD PTR [si], ax
+
+ lds si, DWORD PTR [ebp+0Ah]
+ mov eax, ss:(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC PTR [di]).dDmiStructureSize
+ mov WORD PTR [si], ax
+
+ lds si, DWORD PTR [ebp+0Eh]
+ mov eax, ss:(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC PTR [di]).dDmiStorageBase
+ mov DWORD PTR [si], eax
+
+ lds si, DWORD PTR [ebp+12h]
+ mov eax, ss:(SMBIOS_PNP_FUNC50_DMIEDIT_STRUC PTR [di]).dDmiStorageSize
+ mov WORD PTR [si], ax
+
+ add sp, size SMBIOS_PNP_FUNC50_DMIEDIT_STRUC
+ pop ds
+ pop edi
+ pop si
+ pop eax
+ mov ax, bx
+ pop ebx
+
+ ret
+
+rt_get_smbios_info ENDP
+
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_51h
+; Procedure: RT_GET_SMBIOS_STRUC
+;
+; Description: This function copies one DMI structure into the buffer
+; provided by the caller. The caller's DMI structure number is
+; then updated with next DMI structure number (or FFFF if no
+; more DMI structures are present).
+;
+; Input: [EBP+00] = Function number (51h)
+; [EBP+02] = WORD FAR *StructureNum
+; [EBP+06] = WORD FAR *DmiStructureBuffer
+; [EBP+0A] = WORD DmiSelector
+; [EBP+0C] = WORD BiosSelector
+; DX = SMI IO port address
+;
+; Output: AX = Zero if success, non-zero return code if non successful
+; [EBP+02] = WORD FAR *StructureNum updated to contain the next DMI
+; structure number or FFFF if no more structures exist
+; [EBP+06] = WORD FAR *DmiStructureBuffer pointer to buffer that is
+; filled in with the requested DMI structure.
+;
+; Modified: AX
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_get_smbios_struc PROC NEAR
+ push ebx
+ push eax
+;
+; convert *StructureNum and *DmiStructureBuffer from SEG:OFS format
+; to 32-bit addresses
+;
+ push [ebp+2] ; UINT16 *StructureNum
+ push [ebp+4]
+ push [ebp+6] ; UINT8 *DmiStructureBuffer
+ push [ebp+8]
+
+ mov eax, 0
+
+; prepare EBX with 32-bit addresses of *StructureNum and *DmiStructureBuffer
+ mov ebx, 0
+ mov bx, [ebp+4]
+ shl ebx, 4
+ mov ax, [ebp+2]
+ add ebx, eax
+ mov [ebp+2], ebx
+
+ mov ebx, 0
+ mov bx, [ebp+8]
+ shl ebx, 4
+ mov ax, [ebp+6]
+ add ebx, eax
+ mov [ebp+6], ebx
+
+; prepare EBX with 32-bit address out of DS:EBP
+ mov ebx, 0
+ mov bx, ss
+ shl ebx, 4
+ add ebx, ebp
+ mov al, 51h
+ call rt_generate_sw_smi
+
+ pop [ebp+8]
+ pop [ebp+6]
+ pop [ebp+4]
+ pop [ebp+2]
+
+ pop eax
+ mov ax, bx
+ pop ebx
+
+ ret
+
+rt_get_smbios_struc ENDP
+
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_52h
+; Procedure: RT_SET_SMBIOS_STRUC
+;
+; Description: This function sets the SMBIOS structure identified by the
+; type and possibly handle, found in the SMBIOS structure
+; header in the given buffer.
+;
+; Input: [EBP+00] = Function number (52h)
+; [EBP+02] = WORD FAR *DmiDataBuffer
+; [EBP+06] = WORD FAR *DmiWorkBuffer
+; [EBP+0A] = WORD Control
+; [EBP+0C] = WORD DmiSelector
+; [EBP+0E] = WORD BiosSelector
+;
+; Output: AX = Zero if successful
+; non-zero return code if unsuccessful
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_set_smbios_struc PROC NEAR
+ push ebx
+ push eax
+ push si
+ push di
+ push ds
+
+ lds di, DWORD PTR [ebp+02h] ; DS:SI = ptr to given data buffer
+
+ push [ebp+2]
+
+ mov eax, 0
+ mov ebx, 0
+ mov bx, [ebp+4]
+ shl ebx, 4
+ mov ax, [ebp+2]
+ add ebx, eax
+ mov [ebp+2], ebx
+
+; prepare EBX with 32-bit address out of DS:EBP
+ mov ebx, 0
+ mov bx, ss
+ shl ebx, 4
+ add ebx, ebp
+ mov al, 52h
+ call rt_generate_sw_smi
+
+ pop [ebp+2]
+
+; Update smbios_change_status
+
+ ; Get the offset of SMBIOS_CHANGE_STRUC data
+ call get_smbios_change_struc
+
+ call SMB_cs_read_x_write_ram
+
+ mov cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_status, SMBIOS_SINGLE_STRUCTURE_AFFECTED
+ mov cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_type, SMBIOS_ONE_MORE_STRUCTURE_CHANGED
+ mov ax, ds:WORD PTR (DMIHDR_STRUC PTR [di]).wHandle; AX = handle# of structure being changed
+ mov cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_handle, ax ; changed handle
+
+ call SMB_cs_read_ram_write_rom
+
+ pop ds
+ pop di
+ pop si
+ pop eax
+ mov ax, bx
+ pop ebx
+ ret
+rt_set_smbios_struc ENDP
+
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_53h
+; Procedure: RT_GET_SMBIOS_STRUC_CHANGE_INFO
+;
+; Description: This function returns the information about what type of
+; SMBIOS structure-change occurred.
+;
+; Input: [EBP+00] = Function number (53h)
+; [EBP+02] = WORD FAR *DmiChangeStructure
+; [EBP+06] = WORD DmiSelector
+; [EBP+08] = WORD BiosSelector
+;
+; Output: AX = Zero if successful
+; Non-zero return code if unsuccessful
+;
+; Modified: Nothing
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_get_smbios_struc_change_info PROC NEAR
+
+ push es
+ push ds
+ push gs
+ push fs
+
+ mov gs, WORD PTR [ebp+08h] ; GS = BIOS Selector
+ mov fs, WORD PTR [ebp+06h] ; FS = GPNV Selector
+
+ call SMB_cs_read_x_write_ram
+
+ push si
+ push di
+
+ les di, DWORD PTR [ebp+02h] ; ES:DI = ptr to DMI Change Structure buffer
+
+; Get the offset of SMBIOS_CHANGE_STRUC data
+ call get_smbios_change_struc
+
+ xor ax, ax
+ xchg ah, cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_status; AH = SMBIOS Change Status
+ xchg al, cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_type; AL = SMBIOS Change Type
+ mov es:BYTE PTR (SMBIOSFun53BufferSTRUC PTR [di]).bChangeStatus, ah
+ mov es:BYTE PTR (SMBIOSFun53BufferSTRUC PTR [di]).bChangeType, al
+ push ax
+ cmp ah, SMBIOS_MULTIPLE_STRUCTURE_AFFECTED
+ mov ax, 0000h ; DO NOT USE xor ax, ax !!!!!!!!!!!!!!!!
+ ; Flags has the information of prev CMP
+ xchg ax, cs:(SMBIOS_CHANGE_STRUC PTR [si]).smbios_change_handle; AX = handle# of changed structure
+ jnz SHORT rgssci_00 ; single structure affected
+ xor ax, ax ; make handle# 00 for multiple structures change
+
+rgssci_00:
+ mov es:WORD PTR (SMBIOSFun53BufferSTRUC PTR [di]).wChangeHandle, ax
+ pop ax
+ pop si
+ pop di
+
+ call SMB_cs_read_ram_write_rom
+
+ cmp ah, SMBIOS_NO_CHANGE ; any change in status ?
+ mov ax, RT_DMI_SUCCESS ; successful
+ jnz SHORT rgssci_01 ; change in status
+ mov ax, RT_DMI_NO_CHANGE ; no change in status, return with error code
+
+rgssci_01:
+ pop fs
+ pop gs
+ pop ds
+ pop es
+ ret
+
+rt_get_smbios_struc_change_info ENDP
+
+SMBIOS_CHANGE_STRUC STRUCT
+ smbios_change_handle DW ?
+ smbios_change_status DB ?
+ smbios_change_type DB ?
+SMBIOS_CHANGE_STRUC ENDS
+
+get_smbios_change_struc:
+ pushf
+ cli
+ call l_01 ; stores IP
+ mov si, sp
+ mov si, ss:[si-2]
+ popf ; restore IF
+ add si, 11 ; cs:si points to smbios_change_handle
+l_01:
+ ret
+smbios_change_handle DW ?
+smbios_change_status DB ?
+smbios_change_type DB ?
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMB_cs_read_x_write_ram
+;
+; Description: This function makes the code segment Write Only.
+;
+; Input: None
+;
+; Notes: This function needs to ported or modified accordingly.
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+SMB_cs_read_x_write_ram PROC NEAR PUBLIC
+ push eax
+ push dx
+ mov dx, 0CF8h
+ mov eax, 80000094h
+ out dx, eax
+ mov dx, 0CFCh
+ in eax, dx
+ or eax, 00020000h ; 0/0/0/96/Bit1, enable E8000 for writing
+ out dx, eax
+ pop dx
+ pop eax
+ ret
+SMB_cs_read_x_write_ram ENDP
+
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMB_cs_read_ram_write_rom
+;
+; Description: This function makes the code segment Read Only.
+;
+; Input: None
+;
+; Notes: This function needs to ported or modified accordingly.
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+SMB_cs_read_ram_write_rom PROC NEAR PUBLIC
+ push eax
+ push dx
+ mov dx, 0CF8h
+ mov eax, 80000094h
+ out dx, eax
+ mov dx, 0CFCh
+ in eax, dx
+ and eax, 0FFFDFFFFh ; 0/0/0/96/Bit1, make E8000 read-only
+ out dx, eax
+ pop dx
+ pop eax
+ ret
+SMB_cs_read_ram_write_rom ENDP
+
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_54h
+; Procedure: RT_SMBIOS_CONTROL
+;
+; Description: This function returns the information about what type of
+; SMBIOS structure-change occurred.
+;
+; Input: [EBP+00] = Function number (54h)
+; [EBP+02] = WORD SubFunction - Defines the specific control operation
+; [EBP+04] = VOID FAR *Data - Input/output data buffer, SubFunction specific
+; [EBP+08] = BYTE Control - Conditions for setting the structure
+; [EBP+09] = WORD DmiSelector - SMBIOS data read/write selector
+; [EBP+11] = WORD BiosSelector- PnP BIOS readable/writeable selector
+;
+; Output: AX = Zero if successful
+; Non-zero return code if unsuccessful
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_smbios_control PROC NEAR
+; Do the porting here as needed
+;- mov ax, RT_PNP_UNSUPPORTED ;Return code for unsupported func
+; (debx+03062009)>
+ mov al, 30h ; SmiGpnv
+ call rt_generate_sw_smi
+; <(debx+03062009)
+ ret
+
+rt_smbios_control ENDP
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_55h
+;
+; Description: Required for GPNV support. This function returns information
+; about a General Purpose NonVolatile (GPNV) area. The Handle
+; argument is a pointer to a number that identifies which GPNV's
+; information is requested, a value of 0 accesses the first
+; (or only) area.
+;
+; Input: [EBP+00] DW PnP BIOS Function 55h
+; [EBP+02] DW *Handle - Identifies which GPNV to access
+; [EBP+06] DW *MinGPNVRWSize - Minimum buffer size in bytes for GPNV access
+; [EBP+0A] DW *GPNVSize - Size allocated for GPNV within the R/W Block
+; [EBP+0E] DD *NVStorageBase - 32-bit physical base address for...
+; ... mem. mapped nonvolatile storage media
+; [EBP+12] DW BiosSelector - PnP BIOS readable/writable selector
+;
+; Output: If successful - DMI_SUCCESS If an Error (Bit 7 set) or a
+; Warning occurred the Error Code will be returned in AX, the
+; FLAGS and all other registers will be preserved
+;
+; Notes: On return:
+;
+; *Handle is updated either with the handle of the next GPNV
+; area or, if there are no more areas, 0FFFFh. GPNV handles
+; are assigned sequentially by the system, from 0 to the total
+; number of areas (minus 1).
+;
+; *MinGPNVRW Size is updated with the minimum size, in bytes,
+; of any buffer used to access this GPNV area. For a Flash
+; based GPNV area, this would be the size of the Flash block
+; containing the actual GPNV.
+;
+; *GPNVSize is updated with the size, in bytes, of this GPNV
+; area (which is less than or equal to the MinGPNVRWSize value).
+;
+; *NVStorageBase is updated with the paragraph-aligned, 32-bit
+; absolute physical base address of this GPNV. If non-zero,
+; this value allows the caller to construct a 16-bit data
+; segment descriptor with a limit of MinGPNVRWSize and
+; read/write access. If the value is 0, protected-mode mapping
+; is not required for this GPNV.
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_smbios_get_gpnv PROC NEAR PUBLIC
+ mov al, 30h ; SmiGpnv
+ call rt_generate_sw_smi
+ ret
+rt_smbios_get_gpnv ENDP
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_56h
+;
+; Description: Required for GPNV support. This function is used to read an
+; entire GPNV area into the buffer specified by GPNVBuffer. It
+; is the responsibility of the caller to ensure that GPNVBuffer
+; is large enough to store the entire GPNV storage block - this
+; buffer must be at least the MinGPNVRWSize returned by Function
+; 55h - Get GPNV Information. The Handle argument identifies the
+; specific GPNV to be read. On a successful read of a GPNV area,
+; that GPNV area will be placed in the GPNVBuffer beginning at
+; offset 0. The protected-mode selector GPNVSelector has base
+; equal to NVStorageBase and limit of at least MinGPNVRWSize -
+; so long as the NVStorageBase value returned from Function 55h
+; was non-zero.
+;
+; Input: [EBP+00] DW PnP BIOS Function 56h
+; [EBP+02] DW Handle - Identifies which GPNV is to be read
+; [EBP+04] DW *GPNVBuffer - Address of buffer in which to return GPNV
+; [EBP+08] DW *GPNVLock - Lock value
+; [EBP+0C] DW GPNVSelector - Selector for GPNV Storage
+; [EBP+0E] DW BiosSelector - PnP BIOS readable/writable selector
+;
+; Output: If the GPNV lock is supported and the lock set request succeeds,
+; the caller's GPNVLock is set to the value of the current lock
+; and the function returns DMI_SUCCESS.
+;
+; Notes: If the GPNV request fails, one of the following values is
+; returned:
+; - DMI_LOCK_NOT_SUPPORTED
+; - DMI_INVALID_LOCK
+; - DMI_CURRENTLY_LOCKED
+;
+; For return status codes DMI_SUCCESS, DMI_LOCK_NOT_SUPPORTED
+; and DMI_CURRENTLY_LOCKED, the GPNV Read function returns the
+; current contents of the GPNV associated with Handle as the
+; first GPNVSize bytes within GPNVBuffer, starting at offset 0.
+; If a lock request fails with DMI_CURRENTLY_LOCKED status,
+; the caller's GPNVLock will be set to the value of the current
+; lock.
+; Passing a GPNVLock value of -1 to the GPNV Read causes the
+; GPNVLock value to be ignored - in this case the underlying
+; logic makes no attempt to store a lock value for comparison
+; with lock values passed into GPNV Write. Any value provided
+; for GPNVLock besides -1 is accepted as a valid value for a
+; lock request.
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_smbios_read_gpnv PROC NEAR PUBLIC
+ mov al, 30h ; SmiGpnv
+ call rt_generate_sw_smi
+ ret
+rt_smbios_read_gpnv ENDP
+
+;<AMI_PHDR_START>
+;----------------------------------------------------------------------------
+;
+; Procedure: SMBIOS_Func_57h
+;
+; Description: Required for GPNV support. This function is used to write an
+; entire GPNV from the GPNVBuffer into the nonvolatile storage
+; area. The Handle argument identifies the specific GPNV to be
+; written. The protectedmode selector GPNVSelector has base equal
+; to NVStorageBase and limit of at least MinGPNVRWSize - so long
+; as the NVStorageBase value returned from Get GPNV Information
+; was non-zero. The caller should first call Read GPNV Data
+; (with a lock) to get the current area contents, modify the
+; data, and pass it into this function - this ensures that the
+; GPNVBuffer which is written contains a complete definition for
+; the entire GPNV area. If the BIOS uses some form of block erase
+; device, the caller must also allocate enough buffer space for
+; the BIOS to store all data from the part during the reprogramming
+; operation, not just the data of interest.
+; The data to be written to the GPNV selected by Handle must
+; reside as the first GPNVSize bytes of the GPNVBuffer.
+; Note: The remaining (MinGPNVRWSize-GPNVSize) bytes of the
+; GPNVBuffer area are used as a scratch-area by the BIOS call
+; in processing the write request; the contents of that area of
+; the buffer are destroyed by this function call.
+; The GPNVLock provides a mechanism for cooperative use of the
+; GPNV, and is set during a GPNV Read (Function 56h). If the
+; input GPNVLock value is -1 the caller requests a forced write
+; to the GPNV area, ignoring any outstanding GPNVLock. If the
+; caller is not doing a forced write, the value passed in GPNVLock
+; to the GPNV Write must be the same value as that (set and)
+; returned by a previous GPNV Read (Function 56h).
+;
+; Input: [EBP+00] - PnP BIOS Function 57h
+; [EBP+02] - Handle - Identifies which GPNV is to be written
+; [EBP+04] - *GPNVBuffer - Address of buffer containing complete GPNV to write
+; [EBP+08] - GPNVLock - Lock value
+; [EBP+0A] - GPNVSelector - Selector for GPNV Storage
+; [EBP+0C] - BiosSelector - PnP BIOS readable/writable selector
+;
+; Output: The GPNV Write function returns a value of DMI_ LOCK_NOT_SUPPORTED
+; when a GPNVLock value other than -1 is specified and locking is
+; not supported. A return status of DMI_ CURRENTLY_LOCKED indicates
+; that the call has failed due to an outstanding lock on the GPNV
+; area which does not match the caller's GPNVLock value. Any
+; outstanding GPNVLock value (which was set by a previous Error!
+; Reference source not found.) gets cleared on a successful
+; write of the GPNV.
+; Notes:
+;
+;----------------------------------------------------------------------------
+;<AMI_PHDR_END>
+
+rt_smbios_write_gpnv PROC NEAR PUBLIC
+ mov al, 30h ; SmiGpnv
+ call rt_generate_sw_smi
+ ret
+rt_smbios_write_gpnv ENDP
+
+
+OEM16_CSEG ENDS
+
+END
+;----------------------------------------------------------------------------
+;****************************************************************************
+;****************************************************************************
+;** **
+;** (C)Copyright 1985-2009, American Megatrends, Inc. **
+;** **
+;** All Rights Reserved. **
+;** **
+;** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+;** **
+;** Phone: (770)-246-8600 **
+;** **
+;****************************************************************************
+;****************************************************************************