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(, <%nBB>) vFF = @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nBB>) vBT = @CATSTR(%sTemp) sMN TEXTEQU @CATSTR(, <%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, ) NE 0 nMN = 0 ELSE nMN = strnum strnum = strnum + 1 ENDIF sPR TEXTEQU @CATSTR(, <%nBB>) IF @INSTR(1, %sPR, ) NE 0 nPR = 0 ELSE nPR = strnum strnum = strnum + 1 ENDIF sVE TEXTEQU @CATSTR(, <%nBB>) IF @INSTR(1, %sVE, ) NE 0 nVE = 0 ELSE nVE = strnum strnum = strnum + 1 ENDIF sSN TEXTEQU @CATSTR(, <%nBB>) IF @INSTR(1, %sSN, ) NE 0 nSN = 0 ELSE nSN = strnum strnum = strnum + 1 ENDIF sAT TEXTEQU @CATSTR(, <%nBB>) IF @INSTR(1, %sAT, ) NE 0 nAT = 0 ELSE nAT = strnum strnum = strnum + 1 ENDIF sLC TEXTEQU @CATSTR(, <%nBB>) IF @INSTR(1, %sLC, ) 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(, <%nSC>) IF @INSTR(1, %sTemp, ) NE 0 MFG = 0 ELSE MFG = strnum strnum = strnum + 1 sMfg TEXTEQU @CATSTR(%sTemp) ENDIF sTemp TEXTEQU @CATSTR(, <%nSC>) vCl TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xCt TEXTEQU @CATSTR(%sTemp) xCt TEXTEQU xCt OR vCl sTemp TEXTEQU @CATSTR(, <%nSC>) IF @INSTR(1, %sTemp, ) NE 0 VER = 0 ELSE VER = strnum strnum = strnum + 1 sVer TEXTEQU @CATSTR(%sTemp) ENDIF sTemp TEXTEQU @CATSTR(, <%nSC>) IF @INSTR(1, %sTemp, ) NE 0 SN = 0 ELSE SN = strnum strnum = strnum + 1 sSn TEXTEQU @CATSTR(%sTemp) ENDIF sTemp TEXTEQU @CATSTR(, <%nSC>) IF @INSTR(1, %sTemp, ) NE 0 ATN = 0 ELSE ATN = strnum strnum = strnum + 1 sAtn TEXTEQU @CATSTR(%sTemp) ENDIF sTemp TEXTEQU @CATSTR(, <%nSC>) xCbs TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xPss TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xTs TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xSs TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xOem TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xSysHt TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xNoPwrCords TEXTEQU @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xNoContEle = @CATSTR(%sTemp) sTemp TEXTEQU @CATSTR(, <%nSC>) xContEleRcrdLen = @CATSTR(%sTemp) xContElement TEXTEQU @CATSTR(, <%nSC>) xContElement TEXTEQU @CATSTR(%xContElement) sTemp TEXTEQU @CATSTR(, <%nSC>) IF @INSTR(1, %sTemp, ) 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(, <%rC>) xPT TEXTEQU @CATSTR(, <%rC>) xPF TEXTEQU @CATSTR(, <%rC>) xSv TEXTEQU @CATSTR(, <%rC>) xSs TEXTEQU @CATSTR(, <%rC>) xSu TEXTEQU @CATSTR(, <%rC>) xPS TEXTEQU @CATSTR(, <%rC>) xPA TEXTEQU @CATSTR(, <%rC>) xPP TEXTEQU @CATSTR(, <%rC>) xPF2 TEXTEQU @CATSTR(, <%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(, <%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(, <%rC>) @MEMORY_TYPE %xS WORD xMs xS TEXTEQU @CATSTR(, <%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(, <%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(, <%rC>) @CACHE_INFO %xS xS TEXTEQU @CATSTR(, <%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 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 @CACHE_INFO %xS xS TEXTEQU @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(, <%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(, <%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(, <%rC>) xS2 TEXTEQU @CATSTR(, <%rC>) xS TEXTEQU @CATSTR(, <%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(, <%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(, <%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(, <%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(, <%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(, <%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(, <%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(, <%AC>) xMs = @CATSTR(%xA, <_MEMORY_SOCKETS>) PHY_MEM_ARRAY_STRUC {\ {16, length, xHandle}, @CATSTR(,<%AC>), @CATSTR(,<%AC>), @CATSTR(,<%AC>), @CATSTR(,<%AC>), HArrayError, xMs, @CATSTR(,<%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(, <%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 (, <%ILoopCount>) xCt = @CATSTR (, <%ILoopCount>, <_TYPE>) xMl = @CATSTR (, <%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(,<%PointDevCntr>), @CATSTR(,<%PointDevCntr>), @CATSTR(,<%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(,<%BC>) xDC = @CATSTR(,<%BC>) xDV = @CATSTR(,<%BC>) xME = @CATSTR(,<%BC>) xSSN = @CATSTR(,<%BC>) xSMD = @CATSTR(,<%BC>) xDCM = @CATSTR(,<%BC>) xOS = @CATSTR(,<%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(,<%BC>) SCAN_PUT_STR @CATSTR(,<%BC>) SCAN_PUT_STR @CATSTR(,<%BC>) SCAN_PUT_STR @CATSTR(,<%BC>) SCAN_PUT_STR @CATSTR(,<%BC>) SCAN_PUT_STR @CATSTR(,<%BC>) SCAN_PUT_STR @CATSTR(,<%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(, <%rCMdi>) mT TEXTEQU @CATSTR(, <%rCMdi>) mA TEXTEQU @CATSTR(, <%rCMdi>) mAt TEXTEQU @CATSTR(, <%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(, <%rCMdi>) REPEAT xV xHandle = xHandle + 1 cH = xHandle length = sizeof VOLTAGE_PROBE_STRUC xN = 1 xS TEXTEQU @CATSTR(, <%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(, <%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(, <%rCMdi>) REPEAT xT xHandle = xHandle + 1 Tphndl = xHandle cH = xHandle length = sizeof TEMPERATURE_PROBE_STRUC xN = 1 xS TEXTEQU @CATSTR(, <%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(, <%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(, <%rCMdi>, <_>, <%rCTpi>) REPEAT xCc xHandle = xHandle + 1 cH = xHandle length = sizeof COOLING_DEVICE_STRUC xN = 1 xS TEXTEQU @CATSTR(, <%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(, <%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(, <%rCMdi>) REPEAT xE xHandle = xHandle + 1 cH = xHandle length = sizeof ELECTRICAL_CURRENT_PROBE_STRUC xN = 1 xS TEXTEQU @CATSTR(,<%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(,<%rCEdi>) eutnc TEXTEQU @CATSTR(,<%rCEdi>) eltc TEXTEQU @CATSTR(,<%rCEdi>) eutc TEXTEQU @CATSTR(,<%rCEdi>) eltnr TEXTEQU @CATSTR(,<%rCEdi>) eutnr TEXTEQU @CATSTR(,<%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(, <%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(, <%vPS>) v1 = @SUBSTR(%s1, 1, 1) IF v1 EQ 1 s1 TEXTEQU @CATSTR(, <%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(, <%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(, <%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(, <%vPS>) sLo TEXTEQU @CATSTR(, <%vPS>) sDN TEXTEQU @CATSTR(, <%vPS>) sMa TEXTEQU @CATSTR(, <%vPS>) sSN TEXTEQU @CATSTR(, <%vPS>) sAT TEXTEQU @CATSTR(, <%vPS>) sPN TEXTEQU @CATSTR(, <%vPS>) sRL TEXTEQU @CATSTR(, <%vPS>) vMP = @CATSTR(, <%vPS>) vPC TEXTEQU @CATSTR(, <%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(, <%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(, <%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 ** ;** ** ;**************************************************************************** ;****************************************************************************