diff options
Diffstat (limited to 'ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h')
-rw-r--r-- | ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h b/ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h new file mode 100644 index 0000000..c366d0b --- /dev/null +++ b/ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h @@ -0,0 +1,440 @@ +/** @file + Include for AMT Bios Extentions Loader + +@copyright + Copyright (c) 2004 - 2012 Intel Corporation. All rights + reserved This software and associated documentation (if any) + is furnished under a license and may only be used or copied in + accordance with the terms of the license. Except as permitted + by such license, no part of this software or documentation may + be reproduced, stored in a retrieval system, or transmitted in + any form or by any means without the express written consent + of Intel Corporation. + + This file contains an 'Intel Peripheral Driver' and uniquely + identified as "Intel Reference Module" and is + licensed for Intel CPUs and chipsets under the terms of your + license agreement with Intel or your vendor. This file may + be modified by the user, subject to additional terms of the + license agreement +**/ +#ifndef _AMT_PTBX_H_ +#define _AMT_PTBX_H_ + +#include "Acpi1_0.h" +#include "Acpi2_0.h" +#include "Acpi3_0.h" +#include "MeAccess.h" +#include "Inventory.h" +#include "AmtLib.h" +#include "UsbProvision.h" +#include "Pci22.h" +#include "AmtPlatformPolicy.h" + +#include EFI_PROTOCOL_CONSUMER (FirmwareVolume) +#include EFI_PROTOCOL_CONSUMER (AcpiSupport) +#include EFI_PROTOCOL_CONSUMER (DiskInfo) +#include EFI_PROTOCOL_CONSUMER (BlockIO) +#include EFI_PROTOCOL_CONSUMER (DevicePath) +#include EFI_PROTOCOL_CONSUMER (IdeControllerInit) +#include EFI_PROTOCOL_CONSUMER (AlertStandardFormat) +#include EFI_PROTOCOL_CONSUMER (ActiveManagement) +#include EFI_PROTOCOL_CONSUMER (Heci) +#include EFI_PROTOCOL_CONSUMER (Smbus) +#include EFI_PROTOCOL_CONSUMER (SimpleFileSystem) +#include EFI_PROTOCOL_CONSUMER (Wdt) +#include EFI_PROTOCOL_CONSUMER (MebxProtocol) + +#include EFI_GUID_DEFINITION (Smbios) +#include EFI_GUID_DEFINITION (AcpiTableStorage) +#include EFI_GUID_DEFINITION (Acpi) +#include EFI_GUID_DEFINITION (Hob) +#include EFI_GUID_DEFINITION (MeBiosExtensionSetup) +#include EFI_PROTOCOL_DEFINITION (AmtPlatformPolicy) +#include EFI_PROTOCOL_DEFINITION (MeplatformPolicy) +#include EFI_PROTOCOL_DEFINITION (AmtReadyToBoot) + +#define MEBX_RET_ACTION_CONTINUE_TO_BOOT 0x01 +#define MEBX_RET_ACTION_RESET 0x04 +#define MEBX_RET_CODE_MASK 0x07 + +#define MEBX_RET_ACTION_GLOBAL_RESET 0x01 + +#define FW_IMAGE_TYPE_1_5MB 3 +#define FW_IMAGE_TYPE_5MB 4 + +#define MEBX_USER_ENTERED_RESPONSE 0x0002 +#define MEBX_RA_SELECTION_MENU 0x0004 +#define MEBX_HIDE_UNCONFIGURE_CONF_PROMPT 0x0040 +#define MEBX_DEBUG_MSG 0x4000 +#define MEBX_UNCONFIGURE 0x8000 + +#define MEBX_STF_PCI_DEV_TABLE 0x0001 +#define MEBX_STF_MEDIA_DEV_TABLE 0x0002 + +#define MEBX_MEDIA_IN_ATA 0x0000 +#define MEBX_MEDIA_IN_ATAPI 0x0001 +#define MEBX_MEDIA_IN_SATA 0x0002 + +#define MEBX_MEDIA_DT_HDD 0x0000 +#define MEBX_MEDIA_DT_CDROM 0x0001 +#define MEBX_MEDIA_DT_DVD 0x0002 +#define MEBX_MEDIA_DT_FDD 0x0003 +#define MEBX_MEDIA_DT_MO 0x0004 + +// +// MEBX Software Class DXE Subclass Progress Code definitions. +// +#define EFI_SW_DXE_MEBX_OPROM_DONE (EFI_OEM_SPECIFIC | 0x00000000) +#define EFI_SW_DXE_MEBX_OTHER_UNSPECD (EFI_OEM_SPECIFIC | 0x00000009) +#define EFI_SW_DXE_MEBX_RESET_ACTION (EFI_OEM_SPECIFIC | 0x0000000a) + +#pragma pack(1) + +#define DEVICES_LIST_VERSION 0x0001 +#define AMT_DATA_VERSION 0x0101 +#define MEBX_SETUP_VERSION 0x9000 +#define MEBX_VERSION 0x9000 ///< for MEBx 9.0.0 or later +#define MEBX_SETUP_PLATFORM_MNT_DEFAULT MNT_OFF +#define MEBX_SETUP_SOL_IDER_DEFAULT 0 +#define PCI_DEVICE_MAX_NUM 256 +#define MEDIA_DEVICE_MAX_NUM 32 + +#define SMB_SIG 0x5F4D535F +#define RSDT_SIG 0x54445352 ///< RSDT (in reverse) +#define ASF_SIG 0x21465341 ///< ASF! (in reverse) +#define ONEMIN 60000000 +#define FIVEMIN 300000000 +#define TENMIN 600000000 + +#define INVOKE_MEBX_BIT 0x08 + +typedef enum _HWAI_FRU_TYPE_ +{ + HWAI_FRU_TYPE_NONE= 0, + HWAI_FRU_TYPE_PCI +} HWAI_FRU_TYPE; + +typedef struct { + UINT16 VersionInfo; + UINT8 DevCount; + UINT8 Reserved1[5]; +} AMT_FRU_DEVICES_HEADER; + +typedef struct { + UINT16 Vid; + UINT16 Did; + UINT16 Rid; + UINT16 SubSysVid; + UINT16 SubSysDid; + UINT32 ClassCode; + UINT16 BusDevFcn; +} MEBX_FRU_PCI_DEVICES; + +typedef struct { + AMT_FRU_DEVICES_HEADER PciDevicesHeader; + MEBX_FRU_PCI_DEVICES PciDevInfo[PCI_DEVICE_MAX_NUM]; +} AMT_PCI_FRU; + +typedef struct _PCI_DEV_INFO { + UINT16 VersionInfo; + UINT8 PciDevCount; + UINT8 Reserved[5]; +} PCI_DEV_INFO; + +typedef struct _HWAI_PCI_FRU_DATA_ { + UINT16 VendorID; + UINT16 DeviceID; + UINT16 RevID; + UINT16 SubsystemVendorID; + UINT16 SubsystemDeviceID; + UINT32 ClassCode; + UINT16 BusDevFunc; +} HWAI_PCI_DATA; + +typedef struct _HWAI_PCI_FRU_ENTRY { + UINT8 SmbiosType; + UINT8 Length; + UINT16 SmbiosHandle; + UINT32 FruType; + HWAI_PCI_DATA FruData; +} HWAI_PCI_FRU; + +typedef struct _HWAI_FRU_TABLE_HEADER { + UINT16 TableByteCount; + UINT16 StructureCount; + HWAI_PCI_FRU Data[1]; +} HWAI_FRU_TABLE; + +typedef struct _HWAI_MEDIA_DATA_ { + UINT16 Length; + UINT8 Interface; + UINT8 DevType; + UINT8 Manufacturer[40]; + UINT8 SerialNumber[20]; + UINT8 Version[8]; + UINT8 ModelNumber[40]; + UINT32 MaxMediaSizeLow; + UINT32 MaxMediaSizeHigh; + UINT16 Capabilities[3]; +} HWAI_MEDIA_DATA; + +typedef struct _HWAI_MEDIA_ENTRY { + UINT8 SmbiosType; + UINT8 Length; + UINT16 SmbiosHandle; + HWAI_MEDIA_DATA MediaData; +} HWAI_MEDIA_ENTRY; + +typedef struct _HWAI_MEDIA_DEVICE_TABLE_HEADER { + UINT16 TableByteCount; + UINT16 StructureCount; + HWAI_MEDIA_ENTRY Data[1]; +} HWAI_MEDIA_TABLE; + +typedef struct _MEDIA_DEV_INFO { + UINT16 VersionInfo; + UINT8 MediaDevCount; + UINT8 Reserved[5]; +} MEDIA_DEV_INFO; + +typedef struct { + UINT16 StructSize; + UINT8 Interface; + UINT8 DevType; + UINT8 Rsvd[40]; + UINT8 SerialNo[20]; + UINT8 VersionNo[8]; + UINT8 ModelNo[40]; + UINT64 MaxMediaSize; + UINT16 SupportedCmdSets[3]; +} MEBX_FRU_MEDIA_DEVICES; + +typedef struct { + AMT_FRU_DEVICES_HEADER MediaDevicesHeader; + MEBX_FRU_MEDIA_DEVICES MediaDevInfo[MEDIA_DEVICE_MAX_NUM]; +} AMT_MEDIA_FRU; + +typedef struct _COMMON_HEADER_ { + UINT8 Type; + UINT8 Length; + UINT16 Handle; +} SMBIOS_HEADER; + +typedef struct _SMBIOS_MAIN_ { + UINT32 Signature; + UINT8 EpChecksum; + UINT8 EpLength; + UINT8 MajorVersion; + UINT8 MinorVersion; + UINT16 MaxStruct_Size; + UINT8 EpRevision; + UINT8 RevInfo[5]; + UINT8 DmiSignature[5]; ///< _DMI_ + UINT8 IntChecksum; + UINT16 TableLength; + UINT32 TableAddress; + UINT16 StructureCnt; + UINT8 SmbBcdRevision; +} SMBIOS_ENTRY_POINT; + +typedef struct _SMBIOS_TABLE_TYPE_ONE { + SMBIOS_HEADER Header; + UINT8 ManufacturerStr; + UINT8 ProductNameStr; + UINT8 VersionStr; + UINT8 SerialNumberStr; + UINT8 Uuid[16]; + UINT8 WakeUp; +} SMBIOS_TABLE_TYPE_ONE; + +typedef struct _SMBIOS_TABLE_TYPE_THREE { + SMBIOS_HEADER Header; + UINT8 ManufacturerStr; + UINT8 Type; + UINT8 VersionStr; + UINT8 SerialNumberStr; + UINT8 AssetTagStr; + UINT8 BootState; + UINT8 PowerSupplyState; + UINT8 ThermalState; + UINT8 SecurityStatus; + UINT32 VendorInfo; +} SMBIOS_TABLE_TYPE_THREE; + +typedef struct _SMBIOS_TABLE_TYPE_FOUR { + SMBIOS_HEADER Header; + UINT8 SocketStr; + UINT8 Type; + UINT8 Family; + UINT8 Manufacturer; + UINT8 ProcId[8]; + UINT8 VersionStr; + UINT8 Voltage; + UINT16 ExternalClock; + UINT16 MaxSpeed; + UINT16 CurrentSpeed; + UINT8 Status; + UINT8 Upgrade; + UINT16 L1CacheHandle; + UINT16 L2CacheHandle; + UINT16 L3CacheHandle; +} SMBIOS_TABLE_TYPE_FOUR; + +typedef struct _SMBIOS_TABLE_TYPE_TWENTY_THREE { + SMBIOS_HEADER Header; + UINT8 Capabilities; + UINT16 ResetCount; + UINT16 ResetLimit; + UINT16 TimerInterval; + UINT16 Timeout; +} SMBIOS_TABLE_TYPE_TWENTY_THREE; + +typedef struct _ACPI_DESCRIPTOR_HEADER_ { + UINT32 Signature; + UINT32 Length; + UINT8 Revision; + UINT8 Checksum; + UINT8 OemId[6]; + UINT8 OemTableId[8]; + UINT32 OemRevision; + UINT8 CreatorId[4]; + UINT32 CreatorRev; +} ACPI_HEADER; + +typedef struct _MEBX_DEBUG_FLAGS_ { + UINT16 Port80 : 1; ///< Port 80h + UINT16 Rsvd : 15; ///< Reserved +} MEBX_DEBUG_FLAGS; + +typedef struct _MEBX_OEM_RESOLUTION_SETTINGS_ { + UINT16 MebxNonUiTextMode : 4; + UINT16 MebxUiTextMode : 4; + UINT16 MebxGraphicsMode : 4; + UINT16 Rsvd : 4; +} MEBX_OEM_RESOLUTION_SETTINGS; + +typedef struct { + UINT16 BpfVersion; + UINT8 CpuReplacementTimeout; + UINT8 Reserved[7]; + UINT8 ActiveRemoteAssistanceProcess; + UINT8 CiraTimeout; + UINT16 OemFlags; + MEBX_DEBUG_FLAGS MebxDebugFlags; + UINT32 MeBiosSyncDataPtr; + UINT32 UsbKeyDataStructurePtr; + MEBX_OEM_RESOLUTION_SETTINGS OemResolutionSettings; + UINT8 Reserved3[0x2E]; +} MEBX_BPF; + +typedef struct { + UINT16 VersionInfo; + UINT8 Reserved[2]; + UINT32 PtrSmbiosTable; + UINT32 PtrAcpiRsdt; + UINT16 SupportedTablesFlags; + UINT32 PciDevAssertInfoPtr; + UINT32 MediaDevAssetInfoPtr; +} AMT_DATA; + +typedef union { + UINT32 Data32; + UINT16 Data16[2]; + UINT8 Data8[4]; +} DATA32_UNION; + +#pragma pack() + +/** + Signal a event for Amt ready to boot. + + @param[in] None + + @retval EFI_SUCCESS Mebx launched or no controller +**/ +EFI_STATUS +EFIAPI +AmtReadyToBoot ( + VOID + ) +; + +/** + This routine is run at boot time. + 1) Initialize AMT library. + 2) Check if MEBx is required to be launched by user. + 3) Build and send asset tables to ME FW. + 4) Check USB provision. + 5) Hide unused AMT devices in prior to boot. + + @param[in] None. + + @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structure. + @retval EFI_NOT_FOUND 1.5M FW SKU detected - there is no MEBx on 1.5 FW SKU +**/ +EFI_STATUS +MebxNotifyEvent ( + VOID + ) +; + +/** + Check the status of Amt devices + + @param[in] MeBiosExtensionSetupData MEBx setting data +**/ +VOID +AmtDeviceConfigure ( + IN ME_BIOS_EXTENSION_SETUP *MeBiosExtensionSetupData + ) +; + +/** + Detect EFI MEBx support; Loading and execute. + + @param[in] MebxBiosParamsBuffer MebxBiosParams Flat pointer +**/ +EFI_STATUS +AdjustAndExecuteMebxImage ( + IN VOID *MebxBiosParamsBuffer + ) +; + +/** + Detect BIOS invoke reasons. + + @param[in] InvokeMebx Pointer to the Invoke MEBx flag + @param[in] MebxBiosParamsBuffer MebxBiosParams Flat pointer +**/ +VOID +CheckForBiosInvokeReason ( + IN UINT8 *InvokeMebx, + IN MEBX_BPF *MebxBiosParams + ) +; + +/** + Dump MEBx BIOS Params + + @param[in] MebxBiosParams - MEBx BIOS params +**/ +VOID +DxeMebxBiosParamsDebugDump ( + IN MEBX_BPF *MebxBiosParams + ) +; + +extern AMT_MEDIA_FRU mAmtMediaFru; +extern AMT_PCI_FRU mAmtPciFru; + +// +// USB Provisioning +// +extern VOID *mUsbProvData; +extern VOID *mUsbProvDataBackup; +extern UINTN mUsbProvDataSize; +extern BOOLEAN mUsbProvsionDone; +extern UINT8 mUsbKeyBus, mUsbKeyPort, mUsbKeyDevice, mUsbKeyFunction; + +#endif // _AMT_PTBX_H_ |