From: gikidy Date: Thu, 21 May 2009 06:11:39 +0000 (+0000) Subject: Synchronize code with specs. X-Git-Tag: edk2-stable201903~17905 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=470d0b274c7b3e791b664b306150147a4a10fdc8 Synchronize code with specs. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8367 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/IntelFrameworkPkg/Include/Framework/DataHubRecords.h b/IntelFrameworkPkg/Include/Framework/DataHubRecords.h index cfb664cf16..282237a780 100644 --- a/IntelFrameworkPkg/Include/Framework/DataHubRecords.h +++ b/IntelFrameworkPkg/Include/Framework/DataHubRecords.h @@ -137,38 +137,127 @@ typedef union _EFI_MISC_PORT_DEVICE_PATH { // #define EFI_STRING_TOKEN UINT16 -typedef struct { +/// +/// Each data record that is a member of some subclass starts with a standard +/// header of type EFI_SUBCLASS_TYPE1_HEADER. +/// This header is only a guideline and applicable only to a data +/// subclass that is producing SMBIOS data records. A subclass can start with a +/// different header if needed. +/// +typedef struct { + /// + /// The version of the specification to which a specific subclass data record adheres. + /// UINT32 Version; + /// + /// The size in bytes of this data class header. + /// UINT32 HeaderSize; + /// + /// The instance number of the subclass with the same ProducerName. This number is + /// applicable in cases where multiple subclass instances that were produced by the same + /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not + /// Applicable. All data consumer drivers should be able to handle all the possible values + /// of Instance, including Not Applicable and Reserved. + /// UINT16 Instance; + /// + /// The instance number of the RecordType for the same Instance. This number is + /// applicable in cases where multiple instances of the RecordType exist for a specific + /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. + /// All data consumer drivers should be able to handle all the possible values of + /// SubInstance, including Not Applicable and Reserved. + /// UINT16 SubInstance; + /// + /// The record number for the data record being specified. The numbering scheme and + /// definition is defined in the specific subclass specification. + /// UINT32 RecordType; } EFI_SUBCLASS_TYPE1_HEADER; +/// +/// This structure is used to link data records in the same subclasses. A data record is +/// defined as a link to another data record in the same subclass using this structure. +/// typedef struct { + /// + /// An EFI_GUID that identifies the component that produced this data record. Type + /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + /// EFI_GUID ProducerName; + /// + /// The instance number of the subclass with the same ProducerName. This number is + /// applicable in cases where multiple subclass instances that were produced by the same + /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not + /// Applicable. All data consumer drivers should be able to handle all the possible values + /// of Instance, including Not Applicable and Reserved. + /// UINT16 Instance; + /// The instance number of the RecordType for the same Instance. This number is + /// applicable in cases where multiple instances of the RecordType exist for a specific + /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. + /// All data consumer drivers should be able to handle all the possible values of + /// SubInstance, including Not Applicable and Reserved. UINT16 SubInstance; } EFI_INTER_LINK_DATA; // // EXP data // - +/// +/// This macro provides a calculation for base-10 representations. Value and Exponent are each +/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit +/// for the sign). +/// typedef struct { + /// + /// The INT16 number by which to multiply the base-10 representation. + /// UINT16 Value; + /// + /// The INT16 number by which to raise the base-10 calculation. + /// UINT16 Exponent; } EFI_EXP_BASE2_DATA; +/// +/// This macro provides a calculation for base-2 representations. Value and Exponent are each +/// INT16. It is 16 bits wide and is unsigned to mean nonnegative values. +/// typedef struct { + /// + /// The INT16 number by which to multiply the base-2 representation. + /// UINT16 Value; + /// + /// The INT16 number by which to raise the base-2 calculation. + /// UINT16 Exponent; } EFI_EXP_BASE10_DATA; typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA; typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA; typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA; + +/// +/// This data record refers to the list of frequencies that the processor core supports. The list of +/// supported frequencies is determined by the firmware based on hardware capabilities--for example, +/// it could be a common subset of all processors and the chipset. The unit of measurement of this data +/// record is in Hertz. For asynchronous processors, the content of this data record is zero. +/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means +/// that the processor/driver supports automatic frequency selection. +/// typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA; + +/// +/// This data record refers to the list of supported frequencies of the processor external bus. The list of +/// supported frequencies is determined by the firmware based on hardware capabilities--for example, +/// it could be a common subset of all processors and the chipset. The unit of measurement of this data +/// record is in Hertz. For asynchronous processors, the content of this data record is NULL. +/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means +/// that the processor/driver supports automatic frequency selection. +/// typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA; typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA; typedef STRING_REF EFI_PROCESSOR_VERSION_DATA; @@ -228,13 +317,35 @@ typedef struct { UINT32 ProcessorReserved4: 2; } EFI_PROCESSOR_FEATURE_FLAGS; +/// +/// This data record refers to the unique ID that identifies a set of processors. This data record is 16 +/// bytes in length. The data in this structure is processor specific and reserved values can be defined +/// for future use. The consumer of this data should not make any assumption and should use this data +/// with respect to the processor family defined in the Family record number. +/// typedef struct { + /// + /// Identifies the processor. + /// EFI_PROCESSOR_SIGNATURE Signature; + /// + /// Provides additional processor information. + /// EFI_PROCESSOR_MISC_INFO MiscInfo; + /// + /// Reserved for future use. + /// UINT32 Reserved; + /// + /// Provides additional processor information. + /// EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags; } EFI_PROCESSOR_ID_DATA; +/// +/// This data record refers to the general classification of the processor. This data record is 4 bytes in +/// length. +/// typedef enum { EfiProcessorOther = 1, EfiProcessorUnknown = 2, @@ -244,6 +355,10 @@ typedef enum { EfiVideoProcessor = 6 } EFI_PROCESSOR_TYPE_DATA; +/// +/// This data record refers to the family of the processor as defined by the DMTF. +/// This data record is 4 bytes in length. +/// typedef enum { EfiProcessorFamilyOther = 1, EfiProcessorFamilyUnknown = 2, @@ -281,9 +396,32 @@ typedef enum { EfiProcessorFamilyPowerPC603 = 0x22, EfiProcessorFamilyPowerPC603Plus = 0x23, EfiProcessorFamilyPowerPC604 = 0x24, + EfiProcessorFamilyPowerPC620 = 0x25, + EfiProcessorFamilyPowerPC704 = 0x26, + EfiProcessorFamilyPowerPC750 = 0x27, EfiProcessorFamilyAlpha2 = 0x30, + EfiProcessorFamilyAlpha21064 = 0x31, + EfiProcessorFamilyAlpha21066 = 0x32, + EfiProcessorFamilyAlpha21164 = 0x33, + EfiProcessorFamilyAlpha21164PC = 0x34, + EfiProcessorFamilyAlpha21164a = 0x35, + EfiProcessorFamilyAlpha21264 = 0x36, + EfiProcessorFamilyAlpha21364 = 0x37, EfiProcessorFamilyMips = 0x40, + EfiProcessorFamilyMIPSR4000 = 0x41, + EfiProcessorFamilyMIPSR4200 = 0x42, + EfiProcessorFamilyMIPSR4400 = 0x43, + EfiProcessorFamilyMIPSR4600 = 0x44, + EfiProcessorFamilyMIPSR10000 = 0x45, EfiProcessorFamilySparc = 0x50, + EfiProcessorFamilySuperSparc = 0x51, + EfiProcessorFamilymicroSparcII = 0x52, + EfiProcessorFamilymicroSparcIIep = 0x53, + EfiProcessorFamilyUltraSparc = 0x54, + EfiProcessorFamilyUltraSparcII = 0x55, + EfiProcessorFamilyUltraSparcIIi = 0x56, + EfiProcessorFamilyUltraSparcIII = 0x57, + EfiProcessorFamilyUltraSparcIIIi = 0x58, EfiProcessorFamily68040 = 0x60, EfiProcessorFamily68xxx = 0x61, EfiProcessorFamily68000 = 0x62, @@ -291,8 +429,19 @@ typedef enum { EfiProcessorFamily68020 = 0x64, EfiProcessorFamily68030 = 0x65, EfiProcessorFamilyHobbit = 0x70, + EfiProcessorFamilyCrusoeTM5000 = 0x78, + EfiProcessorFamilyCrusoeTM3000 = 0x79, EfiProcessorFamilyWeitek = 0x80, + EfiProcessorFamilyItanium = 0x82, + EfiProcessorFamilyAmdAthlon64 = 0x83, + EfiProcessorFamilyAmdOpteron = 0x84, EfiProcessorFamilyPARISC = 0x90, + EfiProcessorFamilyPaRisc8500 = 0x91, + EfiProcessorFamilyPaRisc8000 = 0x92, + EfiProcessorFamilyPaRisc7300LC = 0x93, + EfiProcessorFamilyPaRisc7200 = 0x94, + EfiProcessorFamilyPaRisc7100LC = 0x95, + EfiProcessorFamilyPaRisc7100 = 0x96, EfiProcessorFamilyV30 = 0xA0, EfiProcessorFamilyPentiumIIIXeon = 0xB0, EfiProcessorFamilyPentiumIIISpeedStep = 0xB1, @@ -313,9 +462,28 @@ typedef enum { EfiProcessorFamilyi960 = 0xFB } EFI_PROCESSOR_FAMILY_DATA; +/// +/// This data record refers to the core voltage of the processor being defined. The unit of measurement +/// of this data record is in volts. +/// typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA; + +/// +/// This data record refers to the base address of the APIC of the processor being defined. This data +/// record is a physical address location. +/// typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA; + +/// +/// This data record refers to the ID of the APIC of the processor being defined. This data record is a +/// 4-byte entry. +/// typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA; + +/// +/// This data record refers to the version number of the APIC of the processor being defined. This data +/// record is a 4-byte entry. +/// typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA; typedef enum { @@ -324,19 +492,32 @@ typedef enum { EfiProcessorIpfPalBMicrocode = 3 } EFI_PROCESSOR_MICROCODE_TYPE; +/// +/// This data record refers to the revision of the processor microcode that is loaded in the processor. +/// This data record is a 4-byte entry. +/// typedef struct { + /// + /// Identifies what type of microcode the data is. + /// EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType; + /// + /// Indicates the revision number of this microcode. + /// UINT32 ProcessorMicrocodeRevisionNumber; } EFI_PROCESSOR_MICROCODE_REVISION_DATA; -typedef struct { - UINT32 CpuStatus :3; - UINT32 Reserved1 :3; - UINT32 SocketPopulated :1; - UINT32 Reserved2 :1; - UINT32 ApicEnable :1; - UINT32 BootApplicationProcessor :1; - UINT32 Reserved3 :22; +/// +/// This data record refers to the status of the processor. +/// +typedef struct { + UINT32 CpuStatus :3; ///> Indicates the status of the processor. + UINT32 Reserved1 :3; ///> Reserved for future use. Should be set to zero. + UINT32 SocketPopulated :1; ///> Indicates if the processor is socketed or not. + UINT32 Reserved2 :1; ///> Reserved for future use. Should be set to zero. + UINT32 ApicEnable :1; ///> Indicates if the APIC is enabled or not. + UINT32 BootApplicationProcessor :1; ///> Indicates if this processor is the boot processor. + UINT32 Reserved3 :22;///> Reserved for future use. Should be set to zero. } EFI_PROCESSOR_STATUS_DATA; typedef enum { @@ -376,12 +557,20 @@ typedef enum { typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA; typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA; +/// +/// This data record refers to the health status of the processor. +/// typedef enum { EfiProcessorHealthy = 1, EfiProcessorPerfRestricted = 2, - EfiProcessorFuncRestricted = 3 + EfiProcessorFuncRestricted = 3 } EFI_PROCESSOR_HEALTH_STATUS; +/// +/// This data record refers to the package number of this processor. Multiple logical processors can +/// exist in a system and each logical processor can be correlated to the physical processor using this +/// record type. +/// typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA; typedef enum { @@ -572,12 +761,41 @@ typedef enum _EFI_MEMORY_REGION_TYPE { EfiMemoryRegionNvs = 0x04 } EFI_MEMORY_REGION_TYPE; +/// +/// This data record refers to the size of a memory region. The regions that are +/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions. +/// The unit of measurement of this data record is in bytes. +/// typedef struct { + /// + /// A zero-based value that indicates which processor(s) can access the memory region. + /// A value of 0xFFFF indicates the region is accessible by all processors. + /// UINT32 ProcessorNumber; + /// + /// A zero-based value that indicates the starting bus that can access the memory region. + /// UINT16 StartBusNumber; + /// + /// A zero-based value that indicates the ending bus that can access the memory region. + /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and + /// is global in scope. An example of the EndBusNumber not being 0xFF is a system + /// with two or more peer-to-host PCI bridges. + /// UINT16 EndBusNumber; + /// + /// The type of memory region from the operating system’s point of view. + /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS + /// command values. + /// EFI_MEMORY_REGION_TYPE MemoryRegionType; + /// + /// The size of the memory region in bytes. + /// EFI_EXP_BASE2_DATA MemorySize; + /// + /// The starting physical address of the memory region. + /// EFI_PHYSICAL_ADDRESS MemoryStartAddress; } EFI_MEMORY_SIZE_DATA; @@ -621,11 +839,40 @@ typedef enum _EFI_MEMORY_ERROR_CORRECTION { EfiMemoryErrorCorrectionCrc = 0x07 } EFI_MEMORY_ERROR_CORRECTION; -typedef struct { +/// +/// This data record refers to the physical memory array. This data record is a structure. +/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4: +/// - Table 3.3.17.1, Type 16, Offset 0x4 +/// - Table 3.3.17.2, Type 16, Offset 0x5 +/// - Table 3.3.17.3, Type 16, with the following offsets: +/// -- Offset 0x6 +/// -- Offset 0x7 +/// -- Offset 0xB +/// -- Offset 0xD +/// +typedef struct { + /// + /// The physical location of the memory array. + /// EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation; + /// + /// The memory array usage. + /// EFI_MEMORY_ARRAY_USE MemoryArrayUse; + /// + /// The primary error correction or detection supported by this memory array. + /// EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection; + /// + /// The maximum memory capacity size in kilobytes. If capacity is unknown, then + /// values of MaximumMemoryCapacity.Value = 0x00 and + /// MaximumMemoryCapacity.Exponent = 0x8000 are used. + /// EFI_EXP_BASE2_DATA MaximumMemoryCapacity; + /// + /// The number of memory slots or sockets that are available for memory devices + /// in this array. + /// UINT16 NumberMemoryDevices; } EFI_MEMORY_ARRAY_LOCATION_DATA; @@ -700,46 +947,156 @@ typedef enum { EfiMemoryStatePartial = 6 } EFI_MEMORY_STATE; +/// +/// This data record describes a memory device. This data record is a structure. +/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4. +/// typedef struct { + /// + /// A string that identifies the physically labeled socket or board position where the + /// memory device is located. + /// STRING_REF MemoryDeviceLocator; + /// + /// A string denoting the physically labeled bank where the memory device is located. + /// STRING_REF MemoryBankLocator; + /// + /// A string denoting the memory manufacturer. + /// STRING_REF MemoryManufacturer; + /// + /// A string denoting the serial number of the memory device. + /// STRING_REF MemorySerialNumber; + /// + /// The asset tag of the memory device. + /// STRING_REF MemoryAssetTag; + /// + /// A string denoting the part number of the memory device. + /// STRING_REF MemoryPartNumber; + /// + /// A link to a memory array structure set. + /// EFI_INTER_LINK_DATA MemoryArrayLink; + /// + /// A link to a memory array structure set. + /// EFI_INTER_LINK_DATA MemorySubArrayLink; + /// + /// The total width in bits of this memory device. If there are no error correcting bits, + /// then the total width equals the data width. If the width is unknown, then set the field + /// to 0xFFFF. + /// UINT16 MemoryTotalWidth; + /// + /// The data width in bits of the memory device. A data width of 0x00 and a total width + /// of 0x08 indicate that the device is used solely for error correction. + /// UINT16 MemoryDataWidth; + /// + /// The size in bytes of the memory device. A value of 0x00 denotes that no device is + /// installed, while a value of all Fs denotes that the size is not known. + /// EFI_EXP_BASE2_DATA MemoryDeviceSize; + /// + /// The form factor of the memory device. + /// EFI_MEMORY_FORM_FACTOR MemoryFormFactor; + /// + /// A memory device set that must be populated with all devices of the same type and + /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF + /// indicates that the attribute is unknown. Any other value denotes the set number. + /// UINT8 MemoryDeviceSet; + /// + /// The memory type in the socket. + /// EFI_MEMORY_ARRAY_TYPE MemoryType; + /// + /// The memory type details. + /// EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail; + /// + /// The memory speed in megahertz (MHz). A value of 0x00 denotes that + /// the speed is unknown. + /// EFI_EXP_BASE10_DATA MemorySpeed; + /// + /// The memory state. + /// EFI_MEMORY_STATE MemoryState; } EFI_MEMORY_ARRAY_LINK_DATA; #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004 +/// +/// This data record refers to a specified physical memory array associated with +/// a given memory range. +/// typedef struct { + /// + /// The starting physical address in bytes of memory mapped to a specified physical + /// memory array. + /// EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress; + /// + /// The last physical address in bytes of memory mapped to a specified physical memory + /// array. + /// EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress; + /// + /// See Physical Memory Array (Type 16) for physical memory array structures. + /// EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; + /// + /// The number of memory devices that form a single row of memory for the address + /// partition. + /// UINT16 MemoryArrayPartitionWidth; } EFI_MEMORY_ARRAY_START_ADDRESS_DATA; #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005 +/// +/// This data record refers to a physical memory device that is associated with +/// a given memory range. +/// typedef struct { + /// + /// The starting physical address that is associated with the device. + /// EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress; + /// + /// The ending physical address that is associated with the device. + /// EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress; + /// + /// A link to the memory device data structure. + /// EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink; + /// + /// A link to the memory array data structure. + /// EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; + /// + /// The position of the memory device in a row. A value of 0x00 is reserved and a value + /// of 0xFF indicates that the position is unknown. + /// UINT8 MemoryDevicePartitionRowPosition; + /// + /// The position of the device in an interleave. + /// UINT8 MemoryDeviceInterleavePosition; + /// + /// The maximum number of consecutive rows from the device that are accessed in a + /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved + /// and a value of 0xFF indicates that the interleave configuration is unknown. + /// UINT8 MemoryDeviceInterleaveDataDepth; } EFI_MEMORY_DEVICE_START_ADDRESS_DATA; @@ -757,17 +1114,53 @@ typedef enum _EFI_MEMORY_CHANNEL_TYPE { EfiMemoryChannelTypeSyncLink = 4 } EFI_MEMORY_CHANNEL_TYPE; -typedef struct { +/// +/// This data record refers the type of memory that is associated with the channel. This data record is a +/// structure. +/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4, +/// Table 3.3.38, Type 37, with the following offsets: +/// - Offset 0x4 +/// - Offset 0x5 +/// - Offset 0x6 +/// +typedef struct { + /// + /// The type of memory that is associated with the channel. + /// EFI_MEMORY_CHANNEL_TYPE MemoryChannelType; + /// + /// The maximum load that is supported by the channel. + /// UINT8 MemoryChannelMaximumLoad; + /// + /// The number of memory devices on this channel. + /// UINT8 MemoryChannelDeviceCount; } EFI_MEMORY_CHANNEL_TYPE_DATA; #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007 -typedef struct { +/// +/// This data record refers to the memory device that is associated with the memory channel. This data +/// record is a structure. +/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4, +/// Table 3.3.38, Type 37, with the following offsets: +/// - Offset 0x7 +/// - Offset 0x8 +/// +typedef struct { + /// + /// A number between one and MemoryChannelDeviceCount plus an arbitrary base. + /// UINT8 DeviceId; + /// + /// The Link of the associated memory device. See Memory Device (Type 17) for + /// memory devices. + /// EFI_INTER_LINK_DATA DeviceLink; + /// + /// The number of load units that this device consumes. + /// UINT8 MemoryChannelDeviceLoad; } EFI_MEMORY_CHANNEL_DEVICE_DATA; diff --git a/IntelFrameworkPkg/Include/Framework/PeiCis.h b/IntelFrameworkPkg/Include/Framework/PeiCis.h index bcaf54e9e9..ad03c04165 100644 --- a/IntelFrameworkPkg/Include/Framework/PeiCis.h +++ b/IntelFrameworkPkg/Include/Framework/PeiCis.h @@ -10,8 +10,8 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - @par Revision Reference: - Version 1.0. + @par Revision Reference: + PeiCis Version 0.91. **/ diff --git a/IntelFrameworkPkg/Include/Framework/SmmCis.h b/IntelFrameworkPkg/Include/Framework/SmmCis.h index c246b8366b..03d4c7547c 100644 --- a/IntelFrameworkPkg/Include/Framework/SmmCis.h +++ b/IntelFrameworkPkg/Include/Framework/SmmCis.h @@ -77,12 +77,22 @@ EFI_STATUS ); typedef struct { - EFI_SMM_CPU_IO Read; - EFI_SMM_CPU_IO Write; + EFI_SMM_CPU_IO Read; ///> This service provides the various modalities of memory and I/O read. + EFI_SMM_CPU_IO Write; ///> This service provides the various modalities of memory and I/O write. } EFI_SMM_IO_ACCESS; +/// +/// The EFI_SMM_CPU_IO_INTERFACE service provides the basic memory, I/O, and PCI +/// interfaces that are used to abstract accesses to devices. +/// struct _EFI_SMM_CPU_IO_INTERFACE { + /// + /// Allows reads and writes to memory-mapped I/O space. + /// EFI_SMM_IO_ACCESS Mem; + /// + /// Allows reads and writes to I/O space. + /// EFI_SMM_IO_ACCESS Io; }; @@ -176,13 +186,42 @@ EFI_STATUS IN OUT VOID *ProcArguments OPTIONAL ); +/// +/// The processor save-state information for IA-32 processors. This information is important in that the +/// SMM drivers may need to ascertain the state of the processor before invoking the SMI. +/// typedef struct { + /// + /// Reserved for future processors. As such, software should not attempt to interpret or + /// write to this region. + /// UINT8 Reserved1[248]; + /// + /// The location of the processor SMBASE, which is the location where the processor + /// will pass control upon receipt of an SMI. + /// UINT32 SMBASE; + /// + /// The revision of the SMM save state. This value is set by the processor. + /// UINT32 SMMRevId; + /// + /// The value of the I/O restart field. Allows for restarting an in-process I/O instruction. + /// UINT16 IORestart; + /// + /// Describes behavior that should be commenced in response to a halt instruction. + /// UINT16 AutoHALTRestart; + /// + /// Reserved for future processors. As such, software should not attempt to interpret or + /// write to this region. + /// UINT8 Reserved2[164]; + + // + // Registers in IA-32 processors. + // UINT32 ES; UINT32 CS; UINT32 SS; @@ -207,6 +246,11 @@ typedef struct { UINT32 CR0; } EFI_SMI_CPU_SAVE_STATE; +/// +/// The processor save-state information for the Itanium processor family. This information is +/// important in that the SMM drivers may need to ascertain the state of the processor before invoking +/// the PMI. This structure is mandatory and must be 512 byte aligned. +/// typedef struct { UINT64 reserved; UINT64 r1; @@ -317,11 +361,26 @@ typedef struct { } EFI_PMI_SYSTEM_CONTEXT; +/// +/// The processor save-state information for IA-32 and Itanium processors. This information is +/// important in that the SMM drivers may need to ascertain the state of the processor before invoking +/// the SMI or PMI. +/// typedef union { + /// + /// The processor save-state information for IA-32 processors. + /// EFI_SMI_CPU_SAVE_STATE Ia32SaveState; + /// + /// The processor save-state information for Itanium processors. + /// EFI_PMI_SYSTEM_CONTEXT ItaniumSaveState; } EFI_SMM_CPU_SAVE_STATE; +/// +/// The optional floating point save-state information for IA-32 processors. If the optional floating +/// point save is indicated for any handler, the following data structure must be preserved. +/// typedef struct { UINT16 Fcw; UINT16 Fsw; @@ -344,6 +403,10 @@ typedef struct { UINT8 Rsvd11[22*16]; } EFI_SMI_OPTIONAL_FPSAVE_STATE; +/// +/// The optional floating point save-state information for the Itanium processor family. If the optional +/// floating point save is indicated for any handler, then this data structure must be preserved. +/// typedef struct { UINT64 f2[2]; UINT64 f3[2]; @@ -377,8 +440,18 @@ typedef struct { UINT64 f31[2]; } EFI_PMI_OPTIONAL_FLOATING_POINT_CONTEXT; +/// +/// The processor save-state information for IA-32 and Itanium processors. If the optional floating +/// point save is indicated for any handler, then this data structure must be preserved. +/// typedef union { + /// + /// The optional floating point save-state information for IA-32 processors. + /// EFI_SMI_OPTIONAL_FPSAVE_STATE Ia32FpSave; + /// + /// The optional floating point save-state information for Itanium processors. + /// EFI_PMI_OPTIONAL_FLOATING_POINT_CONTEXT ItaniumFpSave; } EFI_SMM_FLOATING_POINT_SAVE_STATE; @@ -436,25 +509,58 @@ EFI_STATUS // System Management System Table (SMST) // struct _EFI_SMM_SYSTEM_TABLE { + /// + /// The table header for the System Management System Table (SMST). + /// EFI_TABLE_HEADER Hdr; + /// + /// A pointer to a NULL-terminated Unicode string containing the vendor name. It is + /// permissible for this pointer to be NULL. + /// CHAR16 *SmmFirmwareVendor; + /// + /// The particular revision of the firmware. + /// UINT32 SmmFirmwareRevision; + /// + /// Adds, updates, or removes a configuration table entry from the SMST. + /// EFI_SMM_INSTALL_CONFIGURATION_TABLE SmmInstallConfigurationTable; // // I/O Services // + /// + /// A GUID that designates the particular CPU I/O services. + /// EFI_GUID EfiSmmCpuIoGuid; + /// + /// Provides the basic memory and I/O interfaces that are used to abstract accesses to + /// devices. + /// EFI_SMM_CPU_IO_INTERFACE SmmIo; // // Runtime memory service // + /// + /// Allocates pool memory from SMRAM for IA-32 or runtime memory for the + /// Itanium processor family. + /// EFI_SMMCORE_ALLOCATE_POOL SmmAllocatePool; + /// + /// Returns pool memory to the system. + /// EFI_SMMCORE_FREE_POOL SmmFreePool; + /// + /// Allocates memory pages from the system. + /// EFI_SMMCORE_ALLOCATE_PAGES SmmAllocatePages; + /// + /// Frees memory pages for the system. + /// EFI_SMMCORE_FREE_PAGES SmmFreePages; // @@ -465,15 +571,44 @@ struct _EFI_SMM_SYSTEM_TABLE { // // CPU information records // + /// + /// A 1-relative number between 1 and the NumberOfCpus field. This field designates + /// which processor is executing the SMM infrastructure. This number also serves as an + /// index into the CpuSaveState and CpuOptionalFloatingPointState + /// fields. + /// UINTN CurrentlyExecutingCpu; + /// + /// The number of EFI Configuration Tables in the buffer + /// SmmConfigurationTable. + /// UINTN NumberOfCpus; + /// + /// A pointer to the EFI Configuration Tables. The number of entries in the table is + /// NumberOfTableEntries. + /// EFI_SMM_CPU_SAVE_STATE *CpuSaveState; + /// + /// A pointer to a catenation of the EFI_SMM_FLOATING_POINT_SAVE_STATE. + /// The size of this entire table is NumberOfCpus* size of the + /// EFI_SMM_FLOATING_POINT_SAVE_STATE. These fields are populated only if + /// there is at least one SMM driver that has registered for a callback with the + /// FloatingPointSave field in EFI_SMM_BASE_PROTOCOL.RegisterCallback() set to TRUE. + /// EFI_SMM_FLOATING_POINT_SAVE_STATE *CpuOptionalFloatingPointState; // // Extensibility table // + /// + /// The number of EFI Configuration Tables in the buffer + /// SmmConfigurationTable. + /// UINTN NumberOfTableEntries; + /// + /// A pointer to the EFI Configuration Tables. The number of entries in the table is + /// NumberOfTableEntries. + /// EFI_CONFIGURATION_TABLE *SmmConfigurationTable; }; diff --git a/IntelFrameworkPkg/Include/Guid/DataHubRecords.h b/IntelFrameworkPkg/Include/Guid/DataHubRecords.h index 1c8a1a527b..323acdb3c4 100644 --- a/IntelFrameworkPkg/Include/Guid/DataHubRecords.h +++ b/IntelFrameworkPkg/Include/Guid/DataHubRecords.h @@ -33,6 +33,10 @@ extern EFI_GUID gEfiProcessorSubClassGuid; extern EFI_GUID gEfiCacheSubClassGuid; +// +// The memory subclass belongs to the data class and is identified as the memory +// subclass by the GUID. +// #define EFI_MEMORY_SUBCLASS_GUID \ {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97} } diff --git a/IntelFrameworkPkg/Include/Guid/StatusCodeDataTypeId.h b/IntelFrameworkPkg/Include/Guid/StatusCodeDataTypeId.h index c608b218ff..d77c20c2d1 100644 --- a/IntelFrameworkPkg/Include/Guid/StatusCodeDataTypeId.h +++ b/IntelFrameworkPkg/Include/Guid/StatusCodeDataTypeId.h @@ -96,11 +96,24 @@ typedef struct { } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA; /// -/// Voltage Extended Error Data +/// This structure provides the voltage at the time of error. It also provides +/// the threshold value indicating the minimum or maximum voltage that is considered +/// an error. If the voltage is less then the threshold, the error indicates that the +/// voltage fell below the minimum acceptable value. If the voltage is greater then the threshold, +/// the error indicates that the voltage rose above the maximum acceptable value. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The voltage value at the time of the error. + /// EFI_EXP_BASE10_DATA Voltage; + /// + /// The voltage threshold. + /// EFI_EXP_BASE10_DATA Threshold; } EFI_COMPUTING_UNIT_VOLTAGE_ERROR_DATA; @@ -108,37 +121,78 @@ typedef struct { /// Microcode Update Extended Error Data /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The version of the microcode update from the header. + /// UINT32 Version; } EFI_COMPUTING_UNIT_MICROCODE_UPDATE_ERROR_DATA; /// /// Asynchronous Timer Extended Error Data +/// The timer limit provides the timeout value of the timer prior to expiration. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The number of seconds that the computing unit timer was configured to expire. + /// EFI_EXP_BASE10_DATA TimerLimit; } EFI_COMPUTING_UNIT_TIMER_EXPIRED_ERROR_DATA; /// /// Host Processor Mismatch Extended Error Data +/// This provides information to indicate which processors mismatch, and how they mismatch. The +/// status code contains the instance number of the processor that is in error. This structure's +/// Instance indicates the second processor that does not match. This differentiation allows the +/// consumer to determine which two processors do not match. The Attributes indicate what +/// mismatch is being reported. Because Attributes is a bit field, more than one mismatch can be +/// reported with one error code. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The unit number of the computing unit that does not match. + /// UINT32 Instance; + /// + /// The attributes describing the failure. + /// UINT16 Attributes; } EFI_HOST_PROCESSOR_MISMATCH_ERROR_DATA; /// /// Thermal Extended Error Data +/// This structure provides the temperature at the time of error. It also provides the threshold value +/// indicating the minimum temperature that is considered an error. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The thermal value at the time of the error. + /// EFI_EXP_BASE10_DATA Temperature; + /// + /// The thermal threshold. + /// EFI_EXP_BASE10_DATA Threshold; } EFI_COMPUTING_UNIT_THERMAL_ERROR_DATA; - +// +// Valid cache types +// typedef enum { EfiInitCacheDataOnly, EfiInitCacheInstrOnly, @@ -157,10 +211,24 @@ typedef struct { /// /// Processor Disabled Extended Error Data +/// This structure provides details as to why and how the computing unit was disabled. The causes +/// should cover the typical reasons a processor would be disabled. How the processor was disabled is +/// important because there are distinct differences between hardware and software disabling. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The reason for disabling the processor. + /// UINT32 Cause; + /// + /// TRUE if the processor is disabled via software means such as not listing it in the ACPI tables. + /// Such a processor will respond to Interprocessor Interrupts (IPIs). FALSE if the processor is hardware + /// disabled, which means it is invisible to software and will not respond to IPIs. + /// BOOLEAN SoftwareDisabled; } EFI_COMPUTING_UNIT_CPU_DISABLED_ERROR_DATA; @@ -174,45 +242,114 @@ typedef UINT8 EFI_MEMORY_ERROR_OPERATION; /// typedef UINT8 EFI_MEMORY_ERROR_GRANULARITY; +/// +/// This structure provides specific details about the memory error that was detected. It provides +/// enough information so that consumers can identify the exact failure and provides enough +/// information to enable corrective action if necessary. +/// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The error granularity type. + /// EFI_MEMORY_ERROR_GRANULARITY Granularity; + /// + /// The operation that resulted in the error being detected. + /// EFI_MEMORY_ERROR_OPERATION Operation; + /// + /// The error syndrome, vendor-specific ECC syndrome, or CRC data associated with + /// the error. If unknown, should be initialized to 0. + /// UINTN Syndrome; + /// + /// The physical address of the error. + /// EFI_PHYSICAL_ADDRESS Address; + /// + /// The range, in bytes, within which the error address can be determined. + /// UINTN Resolution; } EFI_MEMORY_EXTENDED_ERROR_DATA; +/// +/// This extended data provides some context that consumers can use to locate a DIMM within the +/// overall memory scheme. +/// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The memory array number. + /// UINT16 Array; + /// + /// The device number within that Array. + /// UINT16 Device; } EFI_STATUS_CODE_DIMM_NUMBER; /// /// Memory Module Mismatch Extended Error Data -/// +/// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The instance number of the memory module that does not match. + /// EFI_STATUS_CODE_DIMM_NUMBER Instance; } EFI_MEMORY_MODULE_MISMATCH_ERROR_DATA; /// /// Memory Range Extended Data +/// This extended data may be used to convey the specifics of a memory range. Ranges are specified +/// with a start address and a length. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The starting address of the memory range. + /// EFI_PHYSICAL_ADDRESS Start; + /// + /// The length in bytes of the memory range. + /// EFI_PHYSICAL_ADDRESS Length; } EFI_MEMORY_RANGE_EXTENDED_DATA; /// /// Extended Error Data for Assert +/// The data indicates the location of the assertion that failed in the source code. This information +/// includes the file name and line number that are necessary to find the failing assertion in source code. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The line number of the source file where the fault was generated. + /// UINT32 LineNumber; + /// + /// The size in bytes of FileName. + /// UINT32 FileNameSize; + /// + /// A pointer to a NULL-terminated ASCII or Unicode string that represents the file + /// name of the source file where the fault was generated. + /// EFI_STATUS_CODE_STRING_DATA *FileName; } EFI_DEBUG_ASSERT_DATA; @@ -225,25 +362,71 @@ typedef union { EFI_SYSTEM_CONTEXT_IPF SystemContextIpf; } EFI_STATUS_CODE_EXCEP_SYSTEM_CONTEXT; +/// +/// This extended data allows the processor context that is present at the time of the exception to be +/// reported with the exception. The format and contents of the context data varies depending on the +/// processor architecture. +/// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The system context. + /// EFI_STATUS_CODE_EXCEP_SYSTEM_CONTEXT Context; } EFI_STATUS_CODE_EXCEP_EXTENDED_DATA; +/// +/// This extended data records information about a Start() function call. Start() is a member of +/// the EFI 1.10 Driver Binding Protocol. +/// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The controller handle. + /// EFI_HANDLE ControllerHandle; + /// + /// The driver binding handle. + /// EFI_HANDLE DriverBindingHandle; + /// + /// The size of the RemainingDevicePath. It is zero if the Start() function is + /// called with RemainingDevicePath = NULL. + /// UINT16 DevicePathSize; + /// + /// Matches the RemainingDevicePath parameter being passed to the Start() + /// function. Note that this parameter is the variable-length device path and not a pointer + /// to the device path. + /// UINT8 *RemainingDevicePath; } EFI_STATUS_CODE_START_EXTENDED_DATA; /// /// Legacy Oprom extended data +/// The device handle and ROM image base can be used by consumers to determine which option +/// ROM failed. Due to the black-box nature of legacy option ROMs, the amount of information that +/// can be obtained may be limited. /// typedef struct { + /// + /// The data header identifying the data. + /// EFI_STATUS_CODE_DATA DataHeader; + /// + /// The handle corresponding to the device that this legacy option ROM is being invoked. + /// EFI_HANDLE DeviceHandle; + /// + /// The base address of the shadowed legacy ROM image. + /// May or may not point to the shadow RAM area. + /// EFI_PHYSICAL_ADDRESS RomImageBase; } EFI_LEGACY_OPROM_EXTENDED_DATA; diff --git a/IntelFrameworkPkg/Include/Ppi/FindFv.h b/IntelFrameworkPkg/Include/Ppi/FindFv.h index 2348273401..d7206d2b0a 100644 --- a/IntelFrameworkPkg/Include/Ppi/FindFv.h +++ b/IntelFrameworkPkg/Include/Ppi/FindFv.h @@ -48,10 +48,10 @@ typedef struct _EFI_PEI_FIND_FV_PPI EFI_PEI_FIND_FV_PPI; typedef EFI_STATUS (EFIAPI *EFI_PEI_FIND_FV_FINDFV)( - IN EFI_PEI_FIND_FV_PPI *This, - IN EFI_PEI_SERVICES **PeiServices, - UINT8 *FvNumber, - EFI_FIRMWARE_VOLUME_HEADER **FVAddress + IN EFI_PEI_FIND_FV_PPI *This, + IN EFI_PEI_SERVICES **PeiServices, + IN UINT8 *FvNumber, + IN OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress ); /** diff --git a/IntelFrameworkPkg/Include/Ppi/FvLoadFile.h b/IntelFrameworkPkg/Include/Ppi/FvLoadFile.h index eb9090da88..8a4b3173a0 100644 --- a/IntelFrameworkPkg/Include/Ppi/FvLoadFile.h +++ b/IntelFrameworkPkg/Include/Ppi/FvLoadFile.h @@ -45,7 +45,7 @@ typedef struct _EFI_PEI_FV_FILE_LOADER_PPI EFI_PEI_FV_FILE_LOADER_PPI; typedef EFI_STATUS (EFIAPI *EFI_PEI_FV_LOAD_FILE)( - IN EFI_PEI_FV_FILE_LOADER_PPI *This, + IN EFI_PEI_FV_FILE_LOADER_PPI *This, IN EFI_FFS_FILE_HEADER *FfsHeader, OUT EFI_PHYSICAL_ADDRESS *ImageAddress, OUT UINT64 *ImageSize, diff --git a/IntelFrameworkPkg/Include/Ppi/S3Resume.h b/IntelFrameworkPkg/Include/Ppi/S3Resume.h index 268bb5830c..0d0a4f7dc4 100644 --- a/IntelFrameworkPkg/Include/Ppi/S3Resume.h +++ b/IntelFrameworkPkg/Include/Ppi/S3Resume.h @@ -17,7 +17,7 @@ - The reserved memory range to be used for the S3 resume. Otherwise, the S3 resume boot path may fail. - Copyright (c) 2007, Intel Corporation + Copyright (c) 2007 - 2009, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -30,7 +30,7 @@ @par Revision Reference: This PPI is defined in Framework of EFI S3 Resume Boot Path spec. - Version 0.9 + Version 0.9. **/