American Megatrends, Inc.

Core

Copyright

Release Notes

Boot options

© American Megatrends, Inc.


Boot Options in Aptio

UEFI Boot Options

The boot options and their order are defined using NVRAM variable based mechanism described in the Chapter 3 of the UEFI specification.
Each boot option entry resides in a Boot#### NVRAM variable where the #### is replaced by a unique option number in printable hexadecimal representation using the digits 0–9, and the upper case versions of the characters A–F (0000–FFFF). The #### must always be four digits, so small numbers must use leading zeros. The load options are then logically ordered by an array of option numbers listed in the desired order, which resides in BootOrder NVRAM variable. Each Boot#### variable is a byte packed structure with the following format:

    typedef struct{
    UINT32 Attributes;
    UINT16 FilePathListLength;
//	CHAR16 Description[];
//	EFI_DEVICE_PATH_PROTOCOL FilePathList[];
//	UINT8 OptionalData[];
} EFI_LOAD_OPTION;
  • Attributes - The attributes for this load option entry. See Chapter 3 of the UEFI specification for details.
  • FilePathListLength - Length in bytes of the FilePathList. OptionalData starts at offset
    sizeof(UINT32) + sizeof(UINT16) + StrSize(Description)+ FilePathListLength
    of the EFI_LOAD_OPTION descriptor.
  • Description - The user readable description for the load option. This field ends with a Null Unicode character.
  • FilePathList - A packed array of UEFI device paths. The first element of the array is a device path that describes the device and location of the Image for this load option. The FilePathList[0] is specific to the device type. Other device paths may optionally exist in the FilePathList, but their usage is OSV specific. Each element in the array is variable length, and ends at the device path end structure. Because the size of Description is arbitrary, this data structure is not guaranteed to be aligned on a natural boundary. This data structure may have to be copied to an aligned natural boundary before it is used.
  • OptionalData - The remaining bytes in the load option descriptor are a binary data buffer that is passed to the loaded image. If the field is zero bytes long, a NULL pointer is passed to the loaded image. The number of bytes in OptionalData can be computed by subtracting the starting offset of OptionalData from total size in bytes of the EFI_LOAD_OPTION.

Legacy Boot Options

Legacy Boot Option is a special UEFI boot option. Just like any other UEFI boot option it is stored in the Boot#### NVRAM variable in format of the EFI_LOAD_OPTION structure. UEFI boot option is identified as legacy by the BBS device path stored in the EFI_LOAD_OPTION.
Legacy Boot Option is an indicator of a legacy boot path. It does not define which legacy device to boot from. Legacy Boot Option instructs boot manager to transfer control to the legacy boot subsystem for further processing. The actual legacy device to boot from is selected from the list of legacy devices by the legacy boot subsystem. The position of the legacy boot option within BootOrder list is used by the legacy boot subsystem to select corresponding entry from the legacy device list.
Legacy device list is maintained by the CSM module. GetBbsInfo function of the LegacyBios protocol published by the CSM module returns list of legacy devices (BBS list) as an array of BBS_TABLE structures. Format of the BBS_TABLE structure as well as LegacyBios protocol are defined in the CSM specification. In Aptio, Legacy BIOS protocol and BBS_TABLE structure are defined in LegacyBios.h. BBS_TABLE structure has a BootPriority filed, which defines priority of the legacy boot device during boot process. The highest priority is zero. The priority field is initialized by the legacy boot subsystem of the boot manager. In addition to the Boot#### and BootOrder variables mentioned above, legacy boot subsystem uses LegacyDevOrder variable to store order of legacy devices.
LegacyDevOrder variable a sequence of structures of the following format:

typedef struct{
    UINT32      DeviceType;
    UINT16      Length;
    //UINT16    Order[];
}LEGACY_ORDER_ENTRY;
  • DeviceType – Type of devices (BBS group) that are present in the Order list. DeviceType is the same as the BBS table device type. CSM specification defines the following device types (LegacyBios.h)

#define    BBS_FLOPPY        0x01
#define    BBS_HARDDISK      0x02
#define    BBS_CDROM         0x03
#define    BBS_PCMCIA        0x04
#define    BBS_USB           0x05
#define    BBS_EMBED_NETWORK 0x06
#define    BBS_BEV_DEVICE    0x80
#define    BBS_UNKNOWN       0xff
  • Length – Specifies the amount of space in bytes occupied by Length field and Order array. The number of entries in the Order array can be calculated as: Length/sizeof(UINT16) - 1
  • Order – Specifies the boot order for this group of legacy devices. This is a list of BBS table indexes.
Each legacy device group contained in LegacyDevOrder list should have a corresponding Boot#### variable. The ordering of these legacy Boot#### variables in the BootOrder list should match the order in which the corresponding LEGACY_ORDER_ENTRY structures are grouped within LegacyDevOrder list.

Initialization of legacy boot priorities

Initialization of the legacy boot priorities is a two step process. First BDS adjusts LegacyDevOrder list in accordance with the available legacy devices and later on, TSE initializes legacy device priorities in the BBS table in accordance with the LegacyDevOrder list.
LegacyDevOrder maintenance is performed by the BDS (InitBbs routine in Bds.c) using the following initialization sequence:
  1. BDS calls GetBbsInfo routine of the LegacyBios protocol to get list of available legacy devices. At this point all entries in the BBS table are unprioritized.
  2. BDS marks all BBS table entries referenced by the LegacyDevOrder list.
  3. If LegacyDevOrder entry does not exist in BBS table, the entry is deleted. If this is the last entry for a device type (Length field of the LEGACY_ORDER_ENTRY structure is 2), the LEGACY_ORDER_ENTRY structure is deleted, corresponding Boot#### variable and its index in the BootOrder list are also deleted.
  4. If BBS table contains entries not mentioned in the LegacyDevOrder variable, they are added at the end of the LEGACY_ORDER_ENTRY structure of the matching device type. If matching LEGACY_ORDER_ENTRY structure did not exist, it is created at the end of the LegacyDevOrder list along with the corresponding Boot#### variable, index of which is added at the end of the BootOrder list.
The default order of BBS group is defined by the default boot options created in the CreateDefaultBootOptions routine from BdsBoard.c. The routine uses DefaultBootOrder array to provide default ordered of the legacy boot options.
Once system initialization is completed, BDS transfers control to TSE, which initializes legacy device priorities in the BBS table in accordance with the LegacyDevOrder list and calls CSM module to perform the actual system boot.
It is possible to change boot priorities using Aptio Setup. TSE ensures that LegacyDevOrder, Boot###, and BootOrder variables are changes in a consistent manner according to the user selection.

© American Megatrends Inc.


Version 4.6.5.0 - 03/25/2011

New features
 Bug fixes
 Upgrade from Core 4.6.4.1

Requires upgrade of:

Module Reason for the upgrade Minimal label required

May require upgrade of:

Module Reason for the upgrade Upgrade required if... Minimal label required

New features

Bug fixes

Upgrade from Core 4.6.4.1

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade other modules based on upgrade requirements.


IDEBUS TEST REPORT

IdeBus driver has been validated under following test cases and conditions for Core Label (INT)4.6.5.1.
Platforms Tested:
Piketon - Project Label (INT)4.6.5_DH55HC_13
Test Case:
  • ATA/ATAPI device detection in SETUP - PASS.
  • OS environment Tested on:
    OS | Test Case
    Installation | Boot to OS
    Win7(EFI aware) | PASS | PASS
    Win Vista(32 bit) | PASS | PASS


PS2CTL TEST REPORT

Ps2Ctl driver has been validated under following test cases and conditions for Core Label (INT)4.6.5.1.
Platforms Tested:
Piketon - Project Label (INT)4.6.5_DH55HC_13
Test Case:
  • PS2 Keyboard and mouse gets detected and works properly in Setup and Shell - PASS.
  • PS2 Keyboard and mouse works properly during installation of OS - PASS.
  • No Yellow bang in device manager when Ps2 Keyboard and/or Ps2 mouse not connected to the system - PASS.
OS environment Tested on:
Device | OS | Test Case
During Installation | No Yellow Bang in Device Manager
PS2 Keyboard | Win7(EFI aware) | PASS | PASS
Win Vista(32 bit) | PASS | PASS
PS2 Mouse | Win7(EFI aware) | PASS | PASS
Win Vista(32 bit) | PASS | PASS


Aptio Core Release Notes

AMIBIOS Component Release Notes

Component Information

Component Name: Aptio Core
Component Type: eCore
Source Control Label: 4.6.5.4
Source Control Location (Binaries): Alaska:$/Alaska/BIN/Core;
Source Control Location (Sources): Alaska:$/Alaska/Source/Core;

Core 4.6.5.4 | Core 4.6.5.3 | Core 4.6.5.2
Core 4.6.5.1 | Core 4.6.5.0 | Core 4.6.4.1 | Core 4.6.4.0 | Core 4.6.3.7
Core 4.6.3.6 | Core 4.6.3.5 | Core 4.6.3.4 | Core 4.6.3.3 | Core 4.6.3.2
Core 4.6.3.1 | Core 4.6.3 | Core 4.6.2 | Core 4.6.1 | Core 4.6.0
Core 4.5.3 | Core 4.5.2 | Core 4.5.1 | Core 4.5.0 | Core 4.0.0

Component Description

The core consists of the following basic sub-components:
  • Build
  • Include
  • Library
  • Core_Pei
  • Core_Dxe
  • Runtime
  • Idebus
  • Recovery
  • IA32Core
  • x64Core
  • PciBus
  • AmiBoardInfo
  • PlatformToDriver
  • EBC
The following components are also released in conjunction with Core:
  • Core Source - Alaska:$/Alaska/Source/Core

Ami Build Tools

  • Labeled 4.5.5_TOOLS_39 or later

Third Party Build Tools

  • Windows Driver Kit version 7.1.0(Build 7600.16385.1) for Core version 4.6.4.0 or newer
    Windows Server 2003 SP1 DDK(Build 3790.1830) for Core version 4.6.3.7 or older.
    The WDK can be downloaded from the Microsoft web site.
    To build in 64-bit mode, the following environment variables must be set in VeB under the menu option Tools\Options on the "Env Variables" tab:
    • CCX86DIR=<32-bit compiler directory>
    • CCX64DIR=<64-bit compiler directory>
    If WDK is installed to the default installation location, the following VeB settings (Tools\Options menu option) must be used:
    Tools Directories tab:
    • <Aptio Tools>
    • C:\WinDDK\7600.16385.1\bin\x86
    • C:\WinDDK\7600.16385.1\bin\x86\x86
    Env Variables tab:
    • CCX86DIR=C:\WinDDK\7600.16385.1\bin\x86\x86
    • CCX64DIR=C:\WinDDK\7600.16385.1\bin\x86\amd64

Version 4.6.5.4 - 10/10/2012

New features
 Bug fixes
 Changes in Core components
 Upgrade from Core 4.6.5.3

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | Bug fixes in UefiVfrCompiler, New signing map for secure flash | 4.5.5_TOOLS_39
Board | New logic of publishing DXE firmware volumes | 4.6.5.4_Board_31
CsmOptOut | New control flow option ROM execution sequence | 4.6.5.4_Csm_OptOut_04
TSE | Windows 8 support | 4.6.2_TSE_2_15_1231

May require upgrade/install of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
FtRecovery | Improved logic of Reflash mechanism | Fault-tolerant recovery support is required | 4.6.5.4_FtRecovery_01

New features

  • Proportional font support.
    • Proportional font support added. Allows third-party applications and drivers to enhance user experience by displaying information using different fonts.
  • Windows 8 requirements support.
    • Windows8-style firmware update. Creates uniform user experience for all Windows updates
    • Input device connection on fast boot. Connection of input devices on fast boot path is postponed until user actually presses the key, improving boot time
    • Native resolution support. Enhances user experience by preventing multiple monitor mode switching and preserving boot logo across boot to OS
    • Security2 protocol support. Allows to verify firmware drivers signatures on secure boot path
    • Boot from USB class device. System recognizes boot options with device path node of USB_DEVICE_CLASS_DEVICE_PATH
  • New recovery media support.
    • NTFS-formatted media. Allows loading recovery file from NTFS-formatted media.
    • Ext3/4-formatted media. Allows loading recovery file from Ext3/4-formatted media.
    • Capsule media. Allows retrieving recovery capsule from memory region described in capsule mailbox.
  • Build process updates.
    • Added support for long eLink chains in FFS lists for firmware volumes
    • Added support for ASL_FLAGS token to pass different flags to ASL compiler
    • Removed FV_SIGNED attribute for NVRAM firmware volume
  • Minor improvements.
    • Improved memory manager to preserve E820 table consistency
    • Added new device path nodes support in DevicePathToText and DevicePathFromText protocols
    • Added Hash services protocol routine
    • Modified Reflash logic to reduce flash update time when updated by small (4K) blocks
    • Added infrastructure to register setup control callbacks at runtime, for runtime-generated IFR
    • Added boot option device path validation to prevent system deadlock when boot option is corrupted
    • Various changes for ACPI 5.0 support
    • Added ServiceBinding protocol header file
    • Modified graphics console OutputString function to output whole string instead of symbol-by-symbol output
    • Added possibility to configure what code to use on BOOT_ON_FLASH_UPDATE boot path (either current BIOS or new one from update file)
    • Added NON_FW_BOOT_OPTION_HIDE functionality (hide boot option if media is absent, restore it once media is reconnected)
    • Allow several boot options belong to the same boot device
    • Additional improvements reflected in Core components release notes.

Bug fixes

  • BootOptions.h - Added starting zeroes to AMI_BOOT_OPTION_SIGNATURE macro to prevent "Option data" confusion for third-party boot options.
  • Multiple files - Replaced EfiGlobalVariableGuid with AmiGlobalVariableGuid for firmware-specific variables as per UEFI 2.3.1 specification requirement
  • FFS.h - moved "#include EFI.h" statement outside of "pragma pack" compiler directive
  • StatusCodes.h - Preserve backward-compatibility for status codes macros definitions.
  • Multiple .sd files - Added MANUFACTURING flag to setup controls
  • UefiHii.h - Fixed bug in EFI_NUM_LOCK _MODIFIER macro
  • NVRAMDXE.c - The variable defaults are missing at runtime when NvramSmi module is used.
  • Eltorito.c - If the CD has ElTorito and ISO9660 partitions, the block size will be the ISO9660 block size, but the ElTorito partition needs the HDD block size.
  • Stdlib.c - Some error codes don't display correctly in debug messages.
  • HiiString.c - Strings in new language added at runtime are not exporting.
  • Consplit.c - Execute shell script with file redirection crashes the system.
  • GenericSio.c - System hangs when executing "reconnect -r" from shell.
  • EfiLib.c - Incorrect 64-bit multiplication for FPDT ACPI table
  • GC.c - Incorrect cursor position after SetMode call
  • BootOptions.c - Incorrect boot option name in setup for IPv4 / IPv6 boot options
  • In.c - Function SetState was not broadcasted to third party drivers
  • UsFontpack.c - Size of default font package was incorrect
  • Additional bug fixes reflected in Core components release notes.

Changes in Core components

  • IdeBus Component
  • PS/2 Component
  • PCI bus Component
  • FileSystem Component

Upgrade from Core 4.6.5.3

  • Upgrade Core module.
    NOTE: Due to the fact that new module parts have been added to the Core component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • Add Core sources.
    NOTE: Starting from this label matching label of Core sources module is MANDATORY.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.5.3 - 12/20/2011

New features
 Bug fixes
 Changes in Core components
 Upgrade from Core 4.6.5.1

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | New output format for PCI IRQ | 4.5.5_TOOLS_38
Board | Improved handling of ROM layout publishing | 4.6.5.2_Board_30
FastBoot | New control flow of consoles connection on fast boot path | 4.6.5.2_Fast_Boot_12

May require upgrade/install of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
FtRecovery | Fault-tolerant recovery support | Fault-tolerant recovery support is required | 4.6.5.2_FtRecovery_00
CsmOptOut | CSM enable/disable control support | CSM enable/disable control support is required | 4.6.5.2_Csm_OptOut_00

New features

  • Fault-tolerant recovery support.
    • Fault-tolerant recovery support added. Prevents system deadlock when unexpected power shutdown occured during recovery or flash update process.
      NOTE: FtRecovery module and CSP library label 4.6.4.0_CSPLibrary_021 or higher is required.
  • CSM enable/disable control support.
    • CSM enable/disable control support is added. Allows to enable or disable CSM support in project via Setup. Enables/disables system boot to UEFI or Legacy devices depending on Setup values. Supports sequence control of OptionROM execution (UEFI only, Legacy only, UEFI first, Legacy first etc.) for Video, Mass Storage and Network cards
      NOTE: CsmOptOut module and CSM module label 4.6.5.2_CSM.7.68_78 or higher are required to enable this feature.
  • Build process updates.
    • New SDL output format for porting PCI IRQ routing information
    • Support of setting debug parameters when DEBUG_MODE is off
    • Added dependency of targets, that create intermediate file directories
    • Added support for generation of assembly listing files
  • Minor improvements.
    • Improved memory manager to prevent memory map change on S4 wake path
    • Added new device path nodes support in DevicePathToText and DevicePathFromText protocols
    • Added MemCpu32 routine
    • Added StrcmpNoCase routine for case-insensitive string comparison
    • Added support to enable/disable reporting of the console errors
    • Added eLinks to Reflash driver for similarity in behavior with SMI flash update
    • Modified search algorithm in NVRAM driver to improve performance
    • Multiple modifications of Core drivers to use UEFI 2.3.1 specification protocols
    • Additional improvements reflected in Core components release notes.

Bug fixes

  • In.c - Multiple keyboard layout used wrong key map for altered keys.
  • HiiFont.c - Incorrect handling of line-break symbols
  • Partition.c - Memory leak in Stop function, modified input parameters validity check sequence
  • HiiString.c - Language name comparison should be case-insensitive.
  • AmiDxeLib.h - Bug in BootScript macros definition for different PI specification
  • Additional bug fixes reflected in Core components release notes.

Changes in Core components

  • IdeBus Component
  • PS/2 Component
  • PCI bus Component
  • AMI Board info Component

Upgrade from Core 4.6.5.1

  • Upgrade Core module.
    NOTE: Due to the fact that new module parts have been added to the Core component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • Add Core sources.
    NOTE: Starting from this label matching label of Core sources module is MANDATORY.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.5.2 - 12/17/2011

This label was mistakenly marked as public, though it was internal label that didn't passed QA control. Please don't use it

Version 4.6.5.1 - 06/30/2011

New features
 Bug fixes
 Changes in Core components
 Upgrade from Core 4.6.5.0

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | Replaced third party tool to build apriori files with FwBuild | 4.5.5_TOOLS_36
ACPI | PI Specification version 1.2 support | 4.6.4.0_ACPI_44
Serial Redirection | UEFI Specification version 2.3.1 support | 4.6.3_Terminal_47

May require upgrade/install of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
Secure Boot Pkg | Secure boot support | Secure boot support is required | 4.6.5.1_SECUREBOOT_WIN8_000
Secure Flash Pkg | Secure recovery/flash update support | Secure recovery/flash update support is required | 4.6.5.1_SECMOD_0000
CryptoPkg | Crypto API used by secure boot and secure flash update | Secure boot or recovery/flash update support is required | 4.6.5.1_CRYPTOAPI_0000

New features

  • PI Specification version 1.2 support.
    • New values for SDL token PI_SPECIFICATION_VERSION is added.
      Set this token to value 0x0005B to build project with PI specification version 0.91 support.
      Set this token to value 0x10000 to build project with PI specification version 1.0 support.
      Set this token to value 0x1000A to build project with PI specification version 1.1 support.
      Set this token to value 0x10014 to build project with PI specification version 1.1 support.
    • Certain changes in other modules required to enable PI 1.2 support in the project. Please refer to AMI_Aptio_4.6.5.1_Core_Upgrade_Guide document for details.
  • UEFI Specification version 2.3.1 support.
    • New values for SDL token EFI_SPECIFICATION_VERSION is added.
      Set this token to value 0x2000A to build project with UEFI specification version 2.1 support.
      Set this token to value 0x20014 to build project with UEFI specification version 2.2 support.
      Set this token to value 0x2001E to build project with UEFI specification version 2.3 support.
      Set this token to value 0x2001F to build project with UEFI specification version 2.3.1 support.
      NOTE: UEFI specification versions 2.0 and earlier are no longer supported.
    • Certain changes in other modules required to enable UEFI 2.3.1 support in the project. Please refer to AMI_Aptio_4.6.5.1_Core_Upgrade_Guide document for details.
  • Secure boot support.
    • Secure boot support is added. Fully compliant with UEFI 2.3.1 specification and Windows logo requirements
      NOTE: Secure boot package and Crypto package are required to enable this feature.
  • Secure recovery/flash update support.
    • Secure recovery/flash update support is added. Both recovery flash update and capsule flash update are supported. Package includes tools for signing images and keys generation
      NOTE: Secure flash package and Crypto package are required to enable this feature.
  • Build process updates.
    • PEI_APRIORI & DXE_APRIORI list generation made via FwBuild tool
    • TODAY and NOW became configurable via SDL token override mechanism.
  • Minor improvements.
    • EBC driver EFI file and build component provided instead of FFS file for easy changing between versions.
    • Added Platform-to-Driver confuguration framework.
    • DUAL_INSTANCE_LIBRARIES_BUILD_DIR macro added for libraries that need to be built both in PEI and DXE mode
    • File Runtime.c: FindDescriptor : upated to ignore boot time memory map descriptors SetVirtualAddressMap : updated to skip virtual address change callbacks that reside in the boot time memory.
    • Added support for EDKII shell (revision 11675 from TianoCore.org), which expects protocols DevicePathToText and DevicePathFromText to be present.
    • Added library function to dynamically modify ASL Package objects
    • Added support of 1 GB page table size in 64-bit mode
    • Additional improvements reflected in Core components release notes.

Bug fixes

  • DxeIpl.c - Used wrong Firmvare Volume on recovery boot path in Framework mode (PI_SPECIFICATION_VERSION = 0x0005B).
  • DxeIpl.c - Used uninitialized variable on S4 resume path
  • ElTorito.c - CD is not recognized by file system driver because of wrong block size.
  • HiiAccessConfig.c - If GetVariable function returns error attribute variable is undefined.
  • HiiConfig.c - Functions BlockToConfig and ConfigToBlog return error when passed Config string doesn't have standard header
  • HiiFont.c - Bug in calculating X coordinate when drawing multiline image
  • BootOptions.c - Bug fix in FindLegacyDeviceGroupByBbsIndex to prevent premature matching of a BBS index to the Type of the next group in the LegacyDevOrder structure
  • PeiMain.c - Bug fix calling AmiInitParts before ProcessLoadHob to reinitialize PeiCore private data after memory is available
  • Image.c - Bug fix move compressed image for execution from ROM to memory
  • Additional bug fixes reflected in Core components release notes.

Changes in Core components

  • IdeBus Component
  • PS/2 Component
  • PCI bus Component
  • File system Component

Upgrade from Core 4.6.5.0

  • Upgrade Core module.
    NOTE: Due to the fact that new module parts have been added to the Core component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • Add Core sources.
    NOTE: Starting from this label matching label of Core sources module is MANDATORY.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.5.0 - 03/25/2011

New features
 Bug fixes
 Changes in Core components
 Upgrade from Core 4.6.4.1

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | PI Specification version 1.1 support. | 4.5.5_TOOLS_35
Board | Flexible ROM layout support. | 4.6.5.0_Board_27

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
ACPI | PI Specification version 1.1 support | PI specification 1.0 or 1.1 support is required | 4.6.4.0_ACPI_43
SMM | PI Specification version 1.1 support | PI specification 1.1 support is required | 4.6.3_SMM_43
CPU | PI Specification version 1.1 support | PI specification 1.0 or 1.1 support is required | 4.6.3_INTEL_Nehalem_38 for Intel i3, i5 and i7 processors

New features

  • PI Specification version 1.1 support.
    • New SDL token PI_SPECIFICATION_VERSION is added. Set this token to value 0x0005B to build project with PI specification version 0.91 support. Set this token to value 0x10000 to build project with PI specification version 1.0 support. Set this token to value 0x1000A to build project with PI specification version 1.1 support.
    • Certain changes in other modules required to enable PI 1.1 support in the project. Please refer to Aptio Core upgrade guide for details.
  • Flexible ROM layout support.
    • New infrastructure is added to allow customization of ROM layout. Users can add their own firmware volumes of different type using special "Firmware Volume Descriptor" format. New firmware volume attributes supported to control when this FV should be published (early, after memory discovery, before DXE etc.) Custom descriptor needs to be added to ROM_IMAGE eLink
    • Certain restrictions apply to combination of firmware volume attributes. Please refer to Aptio Core upgrade guide for details.
  • Nested Firmware Volume support.
    • Added support for nested firmware volume. Files that constitute nested FV are combined together into one FFS file, which is added to the parent FV. Such organization reduces ROM size and enhances processing speed. Default nested FV implementation added. To add user's FFS file to the nested firmware volume simply add its name to the FV_MAIN_NESTED eLink.
    • Nested firmware volume can be published only after memory is discovered. Please refer to Aptio Core upgrade guide for details.
  • Build process updates.
    • PEI_APRIORI list support is added.
    • CIF2MAK_DEFAULTS and BUILD_RULES became configurable via eLink append/override mechanism.
    • Added ASL-Expander tool to support #ifdef/#endif statements in ASL code.
  • Minor improvements.
    • Recovery - added mechanism to override recovery capsule file name. To do so replace AmiGetFileName eLink with custom function to return recovery capsule name and size.
    • BDS - function ConnectConsoles, which is used on fast boot path modified to allow eLink/SDL token based configurability. Depending on token values certain types of input consoles (like USB keyboard) may be not initialized on fast boot path. Works with FastBoot module label 4.6.4.0_Fast_Boot_10 or later
    • Partition - added code to restore GPT partition from backup if it's corrupted.
    • x64 library - MemCpy function modified to use 64-bit registers.
    • Nvram - replaced Flash access library with Flash protocol.
    • Console splitter - keyboard absence is not reported on fast boot path. This provision was added for the case when USB keyboard is present in the system, but intentionally not initialized on fast boot path for performance reasons.
    • UefiHii - added implementation of ExportConfig function of HiiDatabase protocol.
    • AmiDxeLib - function FindDeviceName now ignores names returned by DiskIo consumer driver. Most of the time this will be file system driver, that will return name like "FAT16" or "FAT32" which is not of much value.
    • Additional improvements reflected in Core components release notes.

Bug fixes

  • UefiHii - function ExtractConfig of HiiConfigAccess protocol returns incorrect pointer value if failed.
  • UefiHii - function ExtractConfig of HiiConfigAccess protocol fails if ConfigRequest string doesn't contain OFFSET/WIDTH block.
  • UefiHii - function RouteConfig of HiiConfigAccess protocol doesn't preserve NVRAM variable attributes.
  • Nvram - fixed unpredictable behavior, when flash is not memory mapped during write cycle.
  • Additional bug fixes reflected in Core components release notes.

Changes in Core components

  • IdeBus Component
  • PS/2 Component
  • Floppy Component
  • PCI bus Component
  • File system Component

Upgrade from Core 4.6.4.1

  • Upgrade Core module.
    NOTE: Due to the fact that new module parts have been added to the Core component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • Add Core sources.
    NOTE: Starting from this label matching label of Core sources module is MANDATORY.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.4.1 - 11/18/2010

New features
 Bug fixes
 Upgrade from Core 4.6.4.0

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | Improved support of the Multi-Root systems. | 4.5.5_TOOLS_34
AHCI | PIdeBus.h updates. | 4.6.3_AhciSrc_016
HddSecurity | PIdeBus.h updates. | 4.6.3_HddSecurity_015
HddSmart | PIdeBus.h updates. | 4.6.3_HddSmart_006
StatusCode | Runtime Status Codes Support | 4.6.3_StatusCode_17
TSE | New Language Definitions | 4.6.2_TSE_2_10_1208

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
Board | Setup Customization Support | setup data structure or layout of the setup pages has to be customized on a project level | 4.6.4.0_Board_26
Board | Flat boot list support | project is using flat boot list | 4.6.4.0_Board_26
Tools | Setup Customization Support | setup data structure or layout of the setup pages has to be customized on a project level | 4.5.5_Tools_34
ACPI | Runtime Trace Messages Support | trace messages are used in ACPI compliant OS | 4.6.4.0_ACPI_41
CSM | Runtime Trace Messages Support | trace messages are used in non-ACPI compliant OS | 4.6.3.1_CSM.7.64_72

New features

NOTE: Starting from this Core version, the UEF 2.1 support is enabled by default.
The support was by default disabled in previous Core versions.
To disable UEF 2.1 support, the EFI_SPECIFICATION_VERSION SDL token has to be set to 0x20000.
The Core Binaries are built in UEFI 2.1 mode. The projects without Core Sources must be used in UEFI 2.1 mode. Refer to UEF 2.1 support section below for additional details regarding transition of the project to UEFI 2.1.
  • Build Process Updates
    • New SDL token USE_CC_RESPONSE_FILE is added. When this token is enabled, all C-compiler(CC) options are passed via the response file. The token should be enabled when the length of the CC command line exceeds the maximum supported limit. The token is disabled by default.
    • New SDL token USE_CP_RESPONSE_FILE is added. When this option is enabled, all C-preprocessor(CP) options are passed via the response file. The token should be enabled when the length of the CP command line exceeds maximum supported limit. The token is disabled by default.
    • LIBEXE SDL token is updated to support building of IA-32 projects with WDK.
    • Build process defined macros PEI_BUILD and DXE_BUILD are added. The macros can be used in the in the source code that used in PEI and DXE to implemented phase specific behavior.
    • Targets of types GUID_LIBRARY and PEI_GUID_LIBRARY are updated to reduce length of the command line.
    • Support for Setup Defaults in FV_MAIN is added.
    • Setup Customization Support.
    • New build type RESOURCES is added to rules.mak. The type is used to build only HII resources of the component.
    • CIF2MAK_DEFAULTS macro is updated. '/lproject.lfo' switch is added. The switch is required to support file overrides using VeB "Set private to Flavor" feature.
    • Support for override of the module name string that is included into the FFS file user interface section is added(EIP 43254).
      The string can be overridden using UI_NAME macro.
    • The default value of EFI_SPECIFICATION_VERSION SDL token is changed to 0x2000A.
    • The build script that generates firmware volume description files (Build\FV_xxx.inf) is updated to support longer file lists(EIP 46043).
    • EDK_INCLUDES macro override is removed from Core.mak(EIP 46935).
    • New Rules.mak parameter MY_SDBS is added. It can be used to extend list of module's SDB files. The list of module's SDB files is a concatenation of the list of SDB files generated from module's UNI files and MY_SDB files. The MY_SDB macro has to be in the format -db <sdb-file>. For example, "MY_SDBS=-db $(BUILD_DIR)\S1.sdb -db $(BUILD_DIR)\S1.sdb"
    • Files modified: Core.sdl, Rules.mak, Core.mak, Ffs.mak, Foundation.mak, Ffs.mak, Fv.mak
  • Setup Customization Support.
    NOTE: This section is not intending to provide a comprehensive description of the Setup Customization Framework. It only describes modifications of the Core files performed as a part of the Setup Customization Framework implementation. The Setup Customization Framework is described in the AMI_Aptio_4.x_Setup_Customization_Guide_NDA document.
    NOTE: This feature requires upgrade of the Tool and Board modules.
    • New SDL token SETUP_DATA_LAYOUT_OVERRIDE_SUPPORT is added. The token enables/disables support of the setup data (SETUP_DATA) structure override. When this token is disabled (default), the SETUP_DATA definition is generated by the build process based on the content of the project .sd files(the only option supported by the older versions of Core). When this token is enabled, the SETUP_DATA definition is provided by the external header defined by the SETUP_DATA_LAYOUT_OVERRIDE_HEADER SDL token.
      The Core.mak commands that generate $(BUILD_DIR)\SetupDefinitions.h are updated accordingly.
      NOTE: Setup Data Layout Override is supported only in UEFI 2.1 mode.
      Enabling SETUP_DATA_LAYOUT_OVERRIDE_SUPPORT in UEFI 2.0 mode causes a build error.
    • The Core.mak is updated to generate new header file Build\ControlDefinitions.h. The file contains list of project VFR controls published by the project .sd files.
    • The Core.mak is updated to include optional project specific header defined by the PROJECT_SETUP_HEADER SDL token into $(BUILD_DIR)\SetupDefinitions.h.
    • Setup.h is updated in accordance with the updated build process.
    • Files modified: Core.sdl, Core.mak, Setup.h
  • Setup Defaults in FV_MAIN
    • Description: The setup defaults are typically stored in the NVRAM. In addition to that, it is now possible to store a copy of setup defaults in one of the DXE firmware volumes (the default location is FV_MAIN). The support of FV_MAIN defaults is controlled by the SETUP_DEFAULTS_IN_FV_MAIN SDL token and is by default enabled.
    • Files modified: Core.sdl, Core.mak, NvramDxe.c
  • New Boot Options Maintenance Infrastructure.
    NOTE: This section is not intending to provide a comprehensive description of the New Boot Options Maintenance Infrastructure. It only describes modifications of the Core files performed as a part of the New Boot Options Maintenance Infrastructure implementation. The New Boot Options Maintenance Infrastructure is described in the AMI_Aptio_4.x_Boot_Options_Maintenance_Infrastructure_Porting_Guide_NDA document.
    NOTE: The flat boot list (a.k.a. FlexBoot) can only be used with the new version of the Board component.
    To enable flat boot list set GROUP_BOOT_OPTIONS_BY_TAG Core SDL token to "Off" and FLEXBOOT CSM SDL token to "On".
    • The old boot option maintenance code (InitEfiBootOptions and InitBbs functions in Bds.c) is replaced with the new implementation (UpdateBootOptionVariables function in BootOptions.c). See AMI_Aptio_4.x_Boot_Options_Maintenance_Infrastructure_Porting_Guide_NDA document for additional details.
    • Files modified: CORE_DXE.cif, CORE_DXE.sdl, CORE_DXE.mak, BdsBoard.c, CORE_DXESrc.cif, CORE_DXESrc.mak, Bds.c
    • Files added: BootOptions.h, BootOptions.c
    • Files deleted: BootOrder.h, BootOrderBoard.c, BootOrderGeneric.c
  • eLinks based implementation of BdsEntry(EIP 39464).
    • Implementation of the BdsEntry function is changed. The BdsEntry is now a dispatching function that calls a collection of functions formed by the BDS_CONTROL_FLOW eLink.
    • Files modified: Bds.c, BdsBoard.c, CORE_DXE.mak, CORE_DXE.sdl
  • LZMA Compression Support (EIP 39458)
    • Support of the LZMA Compression algorithm is added. The support is enabled/disabled using LZMA_SUPPORT SDL token.
    • Files modified: Core.sdl, AmiLib.h, Ffs.h, AmiLib.cif, Tokens.c, Ffs.mak, AmiPeiInit.c, BdsBoard.c, CORE_DXE.sdl
    • File added: LzmaDecode.c
  • Runtime Status Codes Support(EIP 29307 and EIP 39752)
    • AMI DXE library (AmiDxeLib) is updated to handle runtime and SMM instances of the status code protocol.
      NOTE: Runtime drivers that are using DXE library status code services at runtime must use InitAmiRuntimeLib function instead of InitAmiLib to initialize the library.
      NOTE: SMM drivers that are using DXE library status code services at runtime must use InitSmmHandler or InitSmmHandlerEx functions during their initialization.
      NOTE: Runtime Status Code Support requires new label of the Status Code module.
      NOTE: The SMM instance of the status code protocol supports only runtime status code handlers. To use DXE status code instance from SMM set USE_DXE_STATUS_CODE_INSTANCE_IN_SMM SDL token to "On".
      This is not safe (calls outside of SMM) and should only be done for debug purposes. The token is by default set to "On" in debug mode and to "Off" in release mode. The USE_DXE_STATUS_CODE_INSTANCE_IN_SMM SDL token is only available with Core sources.
    • New SDL token RUNTIME_TRACE_SUPPORT is added to the StatusCode module. When the token is enabled, trace API keeps working after handing off control to OS.
      NOTE: In order to keep using serial port in the OS present environment, the serial port has to be hidden from the OS.
      To use serial port debug messages in ACPI aware OS, ACPI module has to be upgraded.
      To use serial port debug messages in non-ACPI aware OS, CSM module has to be upgraded.
    • The Super I/O driver (GenericSio.c) is updated to hide serial port from OS when runtime trace support is enabled.
    • Files modified: EfiLib.c, GenericSio.c, Tokens.c, Runtime.c, AmiDxeLib.h
  • IDE Sub-Component Updates.
    NOTE: This version of the IDE component require upgrade of the AHCI, HddSecurity, and HddSmart modules.
    • PIdeBus.h protocol header is updated with the additional SMART-related definitions(EIP 31559).
    • Support for the HDD with sector size more than 512bytes(EIP 30719).
      • Files modified: IdeBus.c, Ata.c, IdeBusMaster.c
    • The 'IdeBus Sources' module part SDL tokens are moved to 'IdeBus' module part(EIP 37748).
      • New IdebusBoard module part is added.
      • Files modified: PIdeBus.h, IdeBus.sdl, Ata.c, Atapi.c, idebus.c, IdeBus.h, IdebuscomponentName.c, IdeBusmaster.c IdeBusSrc.mak IdebusSrc.sdl IdeHpa.c, IdePowerManagement.c
      • Files added: IdeBusBoard.cif, IdeBusBoard.c, IdeBusBoard.h, IdeBusBoardProtocol.cif
    • HDD_PASSWORD structure updated(EIP 43299).
      • HDD_PASSWORD structure is updated with PCI Bus, Device, Function numbers of the IDE controller. The information is used by IdeSecurity module.
      • File modified: PideBus.h
    • IDE SMART checks are moved to a later stage, when IDE device is fully configured(EIP 42817).
      • File modified: IdeBus.c
  • AmiBoardInfo Updates
    • Improved support of the Multi-Root systems. New AmiBoadInfo infrastructure used by the PCI bus driver.
      NOTE: This feature requires upgrade of the Tool module
      NOTE: If the module part is updated independently, it is necessary to delete Core\EM\BoardInfo\PciBoard.asm from the disk.
    • Files modified: AmiBodsInfo.cif, AmiBodsInfo.sdl, AmiBodsInfo.c, AmiBodsInfo.h
    • File deleted: PciBoard.asm
    • File added: PciBoard.c
  • PCI Sub-Component Updates.
    This Core version includes version 4640_PCIBUSBIN_24_0 of the PCI sub-component. Refer to PciBus.chm and Aptio 4.x PCI Porting Guide for additional details.
    • Improved support of the Multi-Root systems. PCI Root Bridge Driver uses information generated by VeB and some tokens from PciBus.sdl to automatically produce MULTY ROOT infrastructure.
      PCI Bus driver uses new AmiBoadInfo infrastructure.
      NOTE: This feature requires upgrade of the Tool module
    • New Incompatibility Type Support: icBad64BitBar - Device has a bar that is 64-bit capable, but the card does not function properly when it is allocated with an address above 4G.
    • Improved logic to select matching PCI Bus Xlat table entry.
    • Introduced a New CSP Hook to overwrite global ASPM Settings.
    • The PCI Express Features initialization algorithm has been improved based on customers suggestions.
    • Generic Support of the PCI Express Base Specification ver. 2.1 was added.
    • PCI Setup Screen was changed to separate PCI Express 1.1 and 2.1 (Generation 2) features.
    • This label contains ARI Forwarding support code.
      NOTE: no actual testing has been performed since at the time of this label ARI hardware was not available.
    • A generic Hot-Plug support was improved in this label.
    • The PCI setup page is updated. The default ASPM state is changed to disable.
    • The PCI setup text improvements (EIP 38222).
    • New PCI_BUS_SKIP_BRG_RECURSIVELY SDL token is added. This token is used to disable enumeration of all devices behind the bridge, if the bridge is set to be skipped during enumeration.
      NOTE: This feature is only available with Core Sources.
    • Improvements in the Maximum Payload programming.
    • Link Training Defaults are changed to safer settings.
    • Max Read Request Size in AUTO mode is changed to spec. default(512 bytes).
    • BrdGetPciSetupData Function improvement(PciPort.c): Link Training retry and Timeout moved in #if PCI_EXPRESS_SUPPORT scope.
    • Improvements in enumeration of PCI-E devices(PcieDoubleCheckCard routine is added to support cards that slowly respond on CFG transactions).
    • Workaround for the non-compliant OpROMs is added.
  • NVRAM Updates
    • NVRAM Reset Policy is updated.
      • The NVRAM content is no longer reset if defaults are not available.
      • The defaults are restores from FV_MAIN is they disappeared from the NVRAM.
      • File modified: NvramDxe.c
    • EnumerateStore function is updated to skip incomplete NVAR records (if any) at the end of the NVRAM data area.
      • File modified: NvramDxe.c
    • Runtime Garbage Collection Support(EIP 39460).
      • NVRAM is organized as a collection of records. Whenever new variables is created or existing variable is updated, new record is created at the end of the NVRAM. When variable is deleted, corresponding NVRAM record is marked as invalid. Once NVRAM area is full or when corruption is detected, garbage collection operation is preformed. During garbage collection deleted and corrupted records are removed from the NVRAM image.
        In the older versions of the NVRAM driver, garbage collection was only performed during the boot time. Starting from this Core label, NVRAM driver can perform garbage collection at runtime (in OS present environment). The Runtime Garbage Collection support is controlled by the NVRAM_RT_GARBAGE_COLLECTION_SUPPORT SDL token and is by default disabled.
        NOTE: Garbage Collection procedure includes flash part erase and programming operations, which, depending on the flash part, can take up to several seconds. Some operating systems are sensitive to the amounts of time that system spends executing the firmware code such as SMI handlers and UEFI runtime code.
        NOTE: When Runtime Garbage Collection Support is enabled the firmware allocates runtime memory buffer of size NVRAM_SIZE*3.
      • Files modified: NvramDxe.c, Tokens.c, Runtime.sdl
    • Support of the authenticated update of the NVRAM variables(EIP 39462 and EIP 40356).
      • The variable authentication during NVRAM writes is performed for variable with the EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute set as described in UEFI specification version 2.1 and above.
        NOTE: The actual authentication (digital signature verification) is performed by the Security Component module, which is not part of Core. The Security Component must be in the project in order to use variable authentication.
      • Files modified: NvramDxe.c, Nvram.h, NvramRead.c, Protocol.cif, Include.cif
      • File added: AmiDigitalSignature.h, Hash.h, ImageAuthentication.h, WinCertificate.h
    • BeginCriticalSection/EndCriticalSection update (EIP 40257).
      • BeginCriticalSection/EndCriticalSection are updated to enable/disable interrupts using PIC interrupt mask registers (ports 0x21 and oxa1) instead of just setting the CPU interrupt flag (CLI/STI).
      • File modified: NvramDxe.c
    • "next" field corruption detection (EIP 45053).
      • Description: One of the types of failures that can happen during NVRAM variable update was not detected.
        The undetected failure type is: failed update of the "next" field of the NVRAM record.
      • File modified: NvramDxe.c
  • PS/2 Updates
    • PrintKey/SysRq key, Menu Key, Left Logo and Right Logo Key support is added(EIP 38212).
    • Improvement in the handling of the continuously pressed key(EIP 34615).
    • Added FreePool call in UnRegisterKeyNotify function.
    • File modified: Ps2Kbd.c
  • Console Splitter Updates
    • SimplePointer Splitter Support.
      • Console Splitter driver is extended with the SimplePointer protocol splitter. The protocol is installed on the pST->ConIn handle.
      • Files Modified: ConSplit.c, ConSplit.h, In.c
    • DXE_NO_CON_OUT and DXE_NO_CON_IN error reporting
      • Additional checks for DXE_NO_CON_OUT and DXE_NO_CON_IN errors are added. The errors are now reported when no console devices with device path available.
      • File Modified: ConSplit.c
    • Early pST->ConOut initialization(EIP 43535)
      • The pST->ConOut pointer used to be initialized once all ConOut device are connected. The Console Splitter driver is updated to initialize ConOut-related fields of the systems table early (in the entry point) to workaround bugs in some of the UEFI OpROM drivers that are using pST->ConOut without NULL checking.
      • File Modified: ConSplit.c
  • Recovery Updates
    • Recovery X64 library is removed
      • Description: Recovery X64 library is removed. It is not needed.
      • Files modified: Recovery.cif, Recovery.sdl, RecoverySrc.sdl
      • File deleted: Recoveryx64.lib
    • New porting hooks are added
      • Description: Three porting hooks are added to support customization of the Recovery module. New porting hooks can be used to implemented the following functionality:
        • Return custom Recovery Image name for a ISO9660 device (CD-ROM).
        • Return custom Recovery Image name for a FAT device.
        • Perform custom verification procedure on the loaded Recovery Image.
      • Files modified: Recovery.cif, Recovery.sdl, Recovery.mak, Recovery.c, Recovery.lib, FsRecovery.c
      • Files added: RecoveryCsp.h
    • Improved Recovery Image Firmware Volume detection
      • The code that detects Firmware Volumes in the recovery image and publishes them is updated to use information from the ROM Layout HOB.
      • File Modified: Recovery.c
    • Extensibility of the Reflash component(EIP 36355)
      • The Reflash component is updated to be extensible with external eModules. The eModules can contribute content for the Recovery setup page, and provide callback function that will be periodically called once BIOS update is completed.
        The external eModules can be used to implement update of non-standard firmware components. For example, update of the non-shared EC firmware.
      • Files modified: Reflash.sdl, Reflash.mak, Reflash.h, Reflash.c, Reflash.vfr
  • New Language Definitions
    • Language identifiers for more languages are added.
      NOTE: This feature requires upgrade of the TSE module.
    • Files modified: Language.mak, Vfr.uni.
  • AmiIa32Lib and AmiX64Lib restructuring(EIP 28269)
    • The file structure of the AmiIa32Lib and AmiX64Lib has changed. The assembler functions are either moved to a .c file (for AmiIa32Lib) or to a separate .asm files (one function per file).
      This reduces firmware footprint. Assembler translator does not generate COMDAT data structures that are used by the linker to remove unused functions. As a result, the linker cannot optimize out unreferenced function. It can only optimize out unreferenced .obj files.
    • Files modified: AmiIa32Lib.cif, IA32CLib.c
    • Files added: EnableLongMode.asm, EnableMachineCheck.asm checkpoint.asm, CPULib_CpuID.asm, CPULib_DisableInterrupt.asm, CPULib_EnableInterrupt.asm, CPULib_GetInterruptState.asm, CPULIB_GetPageTable.asm, CPULib_LoadGdt.asm, CPULib_LoadIdt.asm, CPULib_LockByteDec.asm, CPULib_LockByteInc.asm, CPULib_Pause.asm, CPULib_SaveGdt.asm, CPULib_SaveIdt.asm, DisableCacheInCR0.asm, EnableCacheInCR0.asm, EnableMachineCheck.asm, GetCpuTimer.asm, GetCsSegment.asm, GetPowerOfTwo64.asm, HltCpu.asm, IoRead16.asm, IoRead32.asm, IoRead64.asm, IoRead8.asm, IoWrite16.asm, IoWrite32.asm, IoWrite64.asm, IoWrite8.asm, MemCpy.asm, MemRead32.asm, MemReadWrite32.asm, MemSet.asm, ReadCr3.asm, ReadMsr.asm, ReadRtdsc.asm, WaitForever.asm, WaitForSemaphore.asm, WaitUntilZero32.asm, WaitUntilZero8.asm, WriteCr3.asm, WriteMsr.asm
    • Files removed: IA32AsmLib.asm, x64AsmLib.asm
  • New version of the EBC Interpreter
    • The binaries of the EFI Byte Code (EBC) interpreted are upgraded to the version released as a part of Edk-Dev-Snapshot-20100527 package.
    • Files modified: Ebc.ffs, EbcX64.ffs
  • Core clean up(EIP 43249)
    • The Core source files are updated to remove upper ASCII characters (above 128) from the comment blocks. The characters caused build errors with Japanese version of Microsoft compiler.
    • Files modified: Ata.c, Atapi.c, IdeBusMaster.c, IdePowerManagement.c, IdeHpa.c, IdeBusComponentName.c, PeiHobLib.h, Handle.c, DxeCore.h, IdeBus.h, LoadedImage.h, PciBus.c
  • Minor Improvements
    • Hob.h, StatusCodes.h: Comments clean up
    • Protocol.cif, AbsPointerProtocol.h(new file): UEFI Absolute Pointer Protocol header is added.
    • CORE_DXE.sdl, BdsBoard.c, AmiDxeInit.c, DxeProtocolNotify.c: INSTALL_DUMMY_SECURITY_PROTOCOL SDL token is created. When the token is enabled, Core installs dummy instance of the security architectural protocol.
      When the token is disabled, the instance of the Security protocol must be installed by one of the project drivers.
    • DxeProtocolNotify.c: Format of the debug message about missing architectural protocol is updated to comply with the Aptio library requirements.
    • BdsBoard.c: Improvement in CreateLegacyBootOption function (EIP 38132): Protection against BootOrder buffer overrun is added.
    • Bds.c: Improvement in ConnectDevicePath function(EIP 38132): Null pointer check is added for the input parameter.
    • ElTorito.c, Mbr.c, Gpt.c: Support for the HDD with sector size more than 512bytes in the partition driver(EIP 30719).
    • HiiDatabase.c: The DeleteSimpleFonts call is removed(EIP 35698).
    • UefiHiiUtils.c: LoadResources is updated to properly publish the packages when NumberOfCallbacks is zero.
    • Core.sdl: The UART_INPUT_CLOCK SDL token is created. The token is used by the StatusCode, Terminal, and Legacy Serial Redirection modules(EIP 37332).
    • StatusCodes.h: Keyboard buffer full error code is added (AMI_P_KEYBOARD_EC_BUFFER_FULL).
    • AmiStusCode.h: Additional keyboard errors are added.
    • CacheSubClass.h: EFI_CACHE_ASSOCIATIVITY_DATA enumeration is extended with 32, 48, and 64 way values.
    • Image.c: Progress code is reported before starting the driver(EIP 39618).
    • AmiPeiInit.c, Tiano.h: minor modifications to properly define PEI_REPORT_STATUS_CODE_CODE macro(EIP 39618).
    • Flash.h: The prototype of the FlashInit function is added. The function is implemented by the Flash module.
    • AmiDxeInit.c: Initialization of the library TheImageHandle variable is added.
    • AmiHobs.h: AMI_SMBIOS_MEMORY_INFO_HOB is added. The HOB is created by PEIM that installs the memory to pass memory configuration information to SMBIOS DXE driver. (EIP 33629).
    • HiiConfig.c, HiiPrivate.h: Implementation of the GetAltCfg() function of EFI_HII_CONFIG_ROUTING_PROTOCOL is added.
    • CORE_DXESrc.sdl: The default value of the CURSOR_BLINK_ENABLE SDL token is changed to zero.
    • DxeIpl.c: Debug message with DXE Core address is moved to after the installation of the END of PEI PPI.
    • UefiHiiUtils.c, HiiConfig.c: Implementation of the SetBrowserData function is added.
    • x64Core.sdl: Additional macro EFIX64 is added to the GLOBAL_DEFINES_x64 SDL token.
    • EfiDebug.h: #ifndef added around definitions of the ASSERT and ASSERT_EFI_ERROR macros(EIP 46933).
    • PeiDebug.h: #ifndef added around definitions of the PEI_ASSERT and ASSERT_PEI_ERROR macros(EIP 46931).
    • PeiLib.c, AmiPeiLib.sdl: MAX_PEI_PERF_LOG_ENTRIES constant is replaced with SDL token(EIP 44635).
    • AmiLib.h: MMIO_ORX, MMIO_ANDX, MMIO_ANDORX macros are added(EIP 46932).
    • DevicePath.h: MSG_SATA_DP constant is added.
    • AmiDxeLib.h: Declarations of EfiAtRuntime and EfiGoneVirtual functions are added.
    • TimeAndReset.c: Support for reset type override is added.

Bug fixes

  • PCI Sub-Component Bug Fixes.
    This Core version includes version 4640_PCIBUSBIN_24_0 of the PCI sub-component. Refer to PciBus.chm and Aptio 4.x PCI Porting Guide for additional details.
    • Build error when SRIOV token is ON is fixed; InitDevCahain() function is updated.
    • Bug in DoubleCheckOpRom() when OpROM is a Single Image ROM is fixed.
    • Fixed UEFI Option ROM Size miscalculation.
    • Fixed WDK Build Issue(EIP 40554).
    • Miscellaneous bugs detected by the Klockwork static code analysis tool(EIP 38289).
    • Fixed condition to disable device using 64-bit resource threshold.
    • Bug fixes in the Maximum PayLoad Programming.
    • Fixed issue with low level PciCfgXX() access functions when ExtendedRgister is used.
  • Potential UEFI OS Problems
    • EfiLib.c: pRS pointer has been used in AmiLibGoVirtual function after the virtualization.
    • EfiLib.c: AmiLibGoVirtual function is updated not to use pRS. It is unsafe because pRS pointer may have already been converted to the virtual address by the library consumer. Use the internal library copy instead.
    • Runtime.c: pST was used in SetVirtualAddressMap function after it has been virtualized in the AmiLibGoVirtual.
    • TimeAndReset.c: RTC driver is updated to use InitAmiRuntimeLib function. The is safer that direct use of pRS->ConvertPointer since by the time driver's virtual address change callback is invoked, pRS may have already been virtualized.
  • NVRAM Bug Fixes
    • UEFI Windows crash when FAULT_TOLERANT_NVRAM_UPDATE is enabled.
      • Symptoms: When FAULT_TOLERANT_NVRAM_UPDATE is enabled, UEFI Windows crashes with blue screen 1E during start up.
      • File modified: NvramDxe.c
      • Details: The VarStoreInfo.BackupAddress was not virtualized during virtual mode transition.
    • Bug fix in the NvramInitialize function.
      • NvResetConfiguration has been called with the wrong argument. This caused problems when fault tolerant NVRAM update was enabled.
      • File modified: NvramDxe.c
    • Occasional NVRAM checksum verification failure(EIP 42324)
      • Symptoms: When NVRAM record checksum was enabled (NVRAM_RECORD_CHECKSUM_SUPPORT is on), the checksum validation was failing when NVRAM contained deleted records, which triggered unnecessary garbage collection.
      • File modified: NvramRead.c
    • QueryVariableInfo Bug Fix
      • Symptoms: QueryVariableInfo runtime service was always reporting MaximumVariableSize of 8 bytes.
      • File modified: NvramDxe.c
  • FileSystem Driver Bug Fixes
    • Miscellaneous bugs detected by the Klockwork static code analysis tool(EIP 38291).
      • There was no error return if file handle is null in function ProcessOpenFileHandle().
      • There was no error return if short name is null in function GenUniqueShortName().
      • Files modified: Open.c, DirectoryHandler.c
    • Long file name display problem (EIP 39171).
      • Symptoms: In some cases, the long form of a file name was not displayed in a directory listing, only the short name.
      • Files modified: FileSystem.h, FileFatHandler.c, Open.c
      • Details: FetchLongName() in Open.c did not handle the case where a long name was spilt over 2 clusters. The function modified to handle the case. The prototype in the header file had to be changed, and the invocation of the function in FileFatHandler.c had to be changed.
      Removable media detection problem(EIP 47788).
    • Symptoms: The "map -r" Shell command didn't detect removable media such as floppy or CD if the media had been removed and than inserted back.
    • File modified: FileSystem.c
  • IdeBux Bug Fixes
    • P-ATA to S-ATA converter problem(EIP 38384).
      • Symptoms: Systems were hanging with the P-ATA to S-ATA transfer card.
      • File modified: IdeBus.c
      • Details: Checked the Device Configuration Overlay feature set supported status before sending the DEV_CONFIG_FREEZE_LOCK.
    • SECURITY_ERASE_UNIT command problem(EIP 44713).
      • Symptoms: SECURITY_ERASE_UNIT command was not working.
      • File modified: Ata.c
      • Details: Security Erase unit command timeout value was wrong, which caused timeout error.
        Timeout value is updated. The new value comes from word 89 of the Identify command buffer.
    • E-SATA card problem(EIP 45266).
      • Symptoms: Systems with certain E-SATA cards were hanging at checkpoint 0xAE
      • Details: ReturnMsbbit function returned incorrect values for devices that didn't support UDMA.
      • File modified: Ata.c
  • PS/2 Bug Fixes
    • Build Problem(EIP 40838).
      • Symptoms: KBC.C build failed in DetectPS2Keyboard() when DETECT_PS2_KEYBOARD=0 & PS2MOUSE_SUPPORT=0
      • Files modified: Efismplpp.c, Kbc.c, Kbc.h, Mouse.c PS2ctl.cif, Ps2ctl.sdl, Ps2Kbd.c, Ps2Mouse.h
      • File deleted: Automation.h
      • Details:
        1. Added Detect_PS2_Mouse sdl token and modified the code.
        2. INSTALL_KEYBOARD_MOUSE_ALWAYS sdl token added.
          1 - Install the Keyboard- SimpleTextIn, Mouse - SimplePointer Always,
          0 - Install the Keyboard- SimpleTextIn, Mouse - SimplePointer only if the device is present at the time of detection.
          This is for Ps2Keyboard Hot plug support in EFI.
        3. Code clean up in mouse.c EfiSmplpp.c ,ps2mouse.h
        4. Unused file Automation.h is removed.
    • Pause/Break key problem(EIP 40818).
      • Symptoms: Pause/Break function key has no function in logo screen.
      • File modified: HotKey.c
      • Details: Pause key doesn't have valid Ps2 SCAN code. ProcesshotKey function will get 0 as input for Pause key and it tries to execute the invalid function, which causes an exception.
    • iSCSI OPROM Hot Key(EIP 41862).
      • Symptoms: If plug PS/2 KB only, Can't use hot key to enter iSCSI OPROM .The CheckIssueLEDCmd routine causes PS2 keyboard not to work.
      • File modified: Kbc.c
      • Details: Send Data immediately after sending LED command "ED".
    • DEL Key Detection(EIP 34615).
      • Symptoms: Pressing DEL key continuously, intermittently, or sticking does not enter setup.
      • File modified: Ps2Kbd.c
    • Shift Key issues in RegsiterkeyNotify function(EIP 38211).
      • File modified: Ps2Kbd.c
      • Details: ShiftKeyState and KeyToggleState verified for RegisterKeyNotify callback function.
    • Added FreePool call in UnRegisterKeyNotify function.
      • File modified: Ps2Kbd.c
    • Delay during boot(EIP 40515).
      • Symptoms: If PS/2 KBD isn't present, KBC returns 0xFE when send 0xED command, that hangs the system for 5 to 10 Sec
      • File modified: Kbc.c
      • Details: If command output is 0xFE (Resent) , tried for 3 times and gets out.
    • Keyboard problems in DOS(EIP 40711).
      • Symptoms: Keyboard sometimes does not work in DOS if KBD is being pressed haphazardly during boot.
      • File modified: Ps2Kbd.c
      • Details: If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • ROM holes update
    • Symptoms: The AFU reported verification error during update of the FFS-based ROM hole that is the first FFS file in the firmware volume(FV).
    • File modified: Flash.c, Reflash.c
    • Details: The FV signature was not restored.
      The flash driver logic that destroys and restores the FV signature during the FV update didn't cover the partial update case. The Flash driver is updated to restore the signature during partial FV updates.
      For details regarding handling of the FV signature during flash updates see Detection of the failed firmware updates section below.
  • Minor Bug Fixes
    • AcpiRes.c: Bug fix in LibGetDsdt function. The function did not work properly when only ACPI 1.1 support was enabled(EIP 35563).
    • Bds.c: The lower case in the hexadecimal numbers that are part of the boot variable names (BootXXXX) is converted to upper case(EIP 35562).
    • Gc.c: Bug fix in the Driver Biding Start function: drawing of the cursor when window position is undefined.
    • EfiLib.c: Bug fix in TimerStart function.
    • HiiDatabase.c: Bug fix in the AddPackage function. The package update notification has been called before adding the package to the database. As a result, the package has not been visible in the callback function(EIP 39692).
    • HiiAccessConfig.c: Bug fix in RouteConfig. The RouteConfig function of the EFI_HII_CONFIG_ACCESS_PROTOCOL didn't validate PATH porting of the routing data
    • UefiHiiUtils.c: Minor bug fix in LoadSystemFont function(don't call FreePool if font section has not been read).
    • HiiConfig.c, HiiPrivate.h: Bug fix in the implementation of the ExportConfig function of the HII Config Routing Protocol(EIP 46880).
    • Core.mak: $(BUILD_DIR)\Tokens.c.h target is updated to make sure the file is re-built when Token.h changes.

Upgrade from Core 4.6.4.0

  • Upgrade Core module.
    NOTE: Due to the fact that new module parts have been added to the Core component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.4.0 - 02/24/2010

New features
 Bug fixes
 Upgrade from Core 4.6.3.7

Requires upgrade of:

Module Reason for the upgrade Minimal label required
Tools
  • UEFI 2.1 Support
  • PE32-based .bin Files Support
  • A Priori File Support
  • String Override Support
  • CORE_COMBINED_VERSION token is added
 4.5.5_Tools_30

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
Board | UEFI 2.1 Support | UEFI 2.1 support is needed | 4.6.4.0_Board_24
TSE | UEFI 2.1 Support | UEFI 2.1 support is needed | 4.6.2_TSE_2_01_1203_beta
Components with Setup Screens | UEFI 2.1 Support | UEFI 2.1 support is needed | Component specific
Board | Improvements in the Setup Callback Mechanism | Improvements in the setup callback mechanism are needed | 4.6.4.0_Board_24

New features

  • UEFI 2.1 Support.
    NOTE: The UEF 2.1 support is disabled by default.
    To enable UEFI 2.1, the EFI_SPECIFICATION_VERSION SDL token has to be set to 0x2000A.
    UEFI 2.1 Support requires porting. Refer to UEFI 2.1 Porting Guide for details.
    UEFI 2.1 support requires new versions of the Board, TSE, and Tools modules. New versions of other modules, especially those with the setup screens, may also be required.
    The format of the DEFAULT_LANGUAGE and SUPPORTED_LANGUAGES SDL Board tokens has changed. If the tokens are cloned in your project, they have to be manually updated as described in the UEFI 2.1 Porting Guide.
    The DEFAULT_LANGUAGE SDL token is no longer dumped into the Token.h file. It only goes to the Token.mak file. To access DEFAULT_LANGUAGE from the C code, use /D C compiler switch or DefaultLanguageCode AmiDxeLib variable.
    NOTE: UEFI 2.1 support is only available with Core Sources. In this version of the Core Binaries are generated in UEFI 2.0 mode.
    • Protocol and Header files are updated.
      • New UEFI 2.1 Protocols are added: HiiConfigRouting.h, HiiConfigAccess.h, HiiDatabase.h, HiiFont.h, HiiString.h, FormBrowser2.h, LoadFile2.h, LoadedImageDevicePath.h, HiiPackageList.h
      • New UEFI 2.1 header UefiHii.h is added.
      • New HII Utilities Protocol is added. The protocol abstracts differences between UEFI and Framework HII standards: HiiUtilities.h
      • Framework HII Header Files are updated to generate build errors in UEFI 2.1 configurations(EFI_SPECIFICATION_VERSION>0x20000) ExtHii.h, FormCallBack.h, HII.h, HIIDB.h
      • Content of SetupInit.h is removed. The SetupInit protocol is no longer supported. The LoadResources library function should be used instead.
      • AmiKeycode.h is updated to support Framework and UEFI 2.1 HII configurations (appropriate headers are selected based on EFI_SPECIFICATION_VERSION value)
      • Setup.h is updated to support Framework and UEFI 2.1 HII configurations. Macros with definitions of the standard varstores are added.
      • AmiDxeLib.h is updated to support Framework and UEFI 2.1 HII configurations. New HII-related functions are added(the functions support both Framework and UEFI HII).
      • Efi.h: UEFI 2.1 specific definitions are added.
      • Other files modified: Protocol.cif, Include.cif
    • AMI DXE Library is updated
      • Library files are update to support Framework and UEFI 2.1 HII (based on EFI_SPECIFICATION_VERSION value).
      • GetDefaultLang function is no longer supported
      • New HII-related functions are added.
        • HiiLibGetString
        • HiiLibSetString
        • HiiLibPublishPackages
        • HiiLibGetBrowserData (Only supported on top of the UEFI 2.1 HII. The Framework HII implementation returns EFI_UNSUPPORTED).
        • HiiLibSetBrowserData (Not supported in this Core version. The support will be added in the next Core version. The function will only be supported on top of the UEFI 2.1 HII. The Framework HII implementation will return EFI_UNSUPPORTED).
      • Implementation of the LoadStrings and LoadResources functions is changed.
      • Implementation of GetImageName and GetControllerName functions in UEFI 2.1 mode is extended to use ComponentName protocol if ComponentName2 protocol is not available.
      • Files modified: EfiLib.c, AmiDxeLib.h
    • Build infrastructure is updated
      • Tools, switches, and other build parameters are selected based on value of EFI_SPECIFICATION_VERSION
      • New infrastructure for switching between old (ISO 639-2) and new (RFC 4646) language formats.
      • Files modified: Core.cif, Core.mak, Core.sdl, Rules.mak
      • File added: Languages.mak
    • CORE_DXE Sources Sub-Component Updates
      • Framework HII module part is created.
        • Files added: FrameworkHii.cif, FrameworkHii.sdl, FrameworkHiiUtils.c
        • File moved: HiiDb.c is moved from Core\CORE_DXE to Core\CORE_DXE\Framework
      • UEFI HII module part is created
        • Files added: UefiHii.cif, UefiHii.sdl, HiiConfig.c, HiiDatabase.c, HiiFont.c, HiiPrivate.h, HiiString.c, Hii.chm, UefiHiiUtils.c, HiAccessConfig.c
      • Files updated to support Framework and UEFI 2.1 HII: Gc.c, Bds.c, BdsBoard.c, Out.c, PciBus.sd.
      • ReFlash component is updated to support Framework and UEFI 2.1 HII: ReFlash.c, ReFlash.dxs, ReFlash.h, ReFlash.vfr
      • NVRAM driver is updated to support new EFI_VARIABLE_HARDWARE_ERROR_RECORD attribute.
      • Other files modified: CORE_DXESrc.cif, CORE_DXE.sdl, CORE_DXESrc.mak, Tokens.c, Core.mak
    • CORE_DXE is updated to include support for UEFI 2.1 features.
  • New version of CORE_PEI and CORE_DXE
    • CORE_PEI and CORE_DXE components are updated based on EDK development snapshot Edk-Dev-Snapshot-20090928.
    • CORE_PEI Files modified: Dispatcher.c, Hob.c, Image.c, MemoryServices.c, PeiCore.h, PeiMain.c
    • CORE_DXE Files modified: DebugImageInfo.c, DebugImageInfo.h, DebugMask.c, Dispatcher.c, DriverSupport.c, DxeCore.h, DxeMain.c, DxeProtocolNotify.c, event.c, FwVol.c, FwVolAttrib.c, FwVolBlock.c, FwVolBlock.h, FwVolDriver.h, FwVolRead.c, FwVolWrite.c, gcd.c, Image.c, Image.h, ImageFile.c, InstallConfigurationTable.c, Library.c, Library.h, Page.c, pool.c, tpl.c, linkedlist.c, LinkedList.h, CORE_DXE.mak
    • Other Files modified: PeCoffLoader.c, PeCoffLoader.h, EfiImage.h, Foundation.cif, IA32\SwitchCoreStacks.asm, x64\ProcessorAsms.Asm, x64\EfiJump.h, x64\Processor.c, IPF\IpfCpuCore.s, Include.cif
    • Files added: GenericVariable.h, TcgTpm.h, TcgService.h
    • Files removed: GlobalVariable.h
  • NVRAM Updates
    • Support for UEFI 2.1 variable attribute EFI_VARIABLE_HARDWARE_ERROR_RECORD is added (available only when UEFI 2.1 support is enabled).
    • NVRAM record corruption check is added to IndexFindVariable and IndexUpdateVariable functions.
    • Code to validate NVRAM header fields used by the NVRAM driver is added. If problem is found, the header fields are updated with the correct values.
    • PEI and DXE implementations of GetNextVariableName are updated to return variables that are present only in the default storages(EIP 26085).
    • The eLink based hooks are added to override and/or compliment standard behavior of NVRAM functions.(EIP 33263)
      NOTE: This feature is only available with Core Sources.
      The following hooks are added:
      NVRAM Function | eLink Name
      DXE GetVariable | GetVariableHook
      DXE GetNextVariableName | GetNextVariableNameHook
      DXE SetVariable | SetVariableHook
      PEI GetVariable | PeiGetVariableHook
      PEI GetNextVariableName | PeiGetNextVariableNameHook
      The hook eLink has to contain function name followed by a comma( for example: "MyGetVarHook,"). The hooks are processed in accordance with the following set of rules.
      • All functions in the list created by the hook eLink are called at the beginning of the corresponding NVRAM function.
      • The hook function interface(list of parameters and return value) matches interface of the original NVRAM function.
      • If hook function returns EFI_UNSUPPORTED, the processing of the hook list continues.
      • Once all the hook functions are processed or if the list of the hook functions is empty the processing goes to the standard implementation of the NVRAM function.
      • If the hook function returns any value other than EFI_UNSUPPORTED, the processing is stopped and hook result is returned as a result of the NVRAM function.
    • Files modified: Nvram.h, NvramRead.c, NvramPei.c, NvramDxe.c, Nvram.sdl
  • PCI Sub-Component Updates.
    This Core version includes version 4636_PCIBUSBIN_23_0_TEST of the PCI sub-component. Refer to PciBus.chm and Aptio 4.x PCI Porting Guide for details.
    This Core version also includes the following additional updates:
    • PCI-E 2.1 Type Declarations are added.
      • The reserved fields in structures that represent PCI-E registers are updated in accordnace with PCI-E 2.1 Specification.
      • New header is created (PciE21.h). The header contains PCI-E 2.0/2.1-specific types and constants.
      • Files modified: Include.cif, PciE.h, PciBus.c
      • File added: PciE21.h
      NOTE: This Core version only includes PCI-E 2.0/2.1 headers. The actual PCI-E 2.0/2.1 support will be provided by the future versions of the PCI component.
    • PciBusSrc.mak: Dependency from token.h is added.
    • PciBus.c:
      • PCI Option ROM parsing code is updated to better handle non-compliant Option ROM images.
      • FindBridgeXlatEntry: Null pointer check is added (EIP 34506).
      • SetIdeDevMode: Cleanup (EIP 34506).
      • EnumerateBus: Out of resources check is added (EIP 34506).
      • CreateRootResDsc and ApplyAcpiResources: Debug message is added.
    • PciBus.sd: Hide bus padding control when PCI_FIXED_BUS_ASSIGNMENT is enabled.
  • IDE Sub-Component Updates
    • Runtime Acoustic Level Configurability(EIP 11835).
      • Acoustic management code is updated to set acoustic level in accordance with runtime policy expressed in terms of new IDE_SETUP_PROTOCOL protocol.
        NOTE: This feature require South Bridge support and is only available with Core Sources.
      • File modified: IdeBus.c
    • IDE Power Management Code Improvement(EIP 22135).
      • IDLE_CMD is used instead of STANDBY_CMD if standby time is zero to avoid spinning HDD up and down.
      • File modified: IdePowerManagement.c
    • Support of the Device Initiated Power Management (DipM) for SATA devices is added(EIP 30041).
      • Files modified: PIdeBus.h, PAhciBus.h, IdeBus.c
  • Build Process Updates
    • A Priori File Support.
      Support for generation of the a priori file is added. The list of FFS files that should be added to the DXE a priori list is specified as a part of FV descriptor using DXE_APRIORI_FILE_LIST parameter.
      For example:

            FV_MAIN_DESCRIPTOR=FV(\
                NAME=FV_MAIN, ADDRESS=$(FV_MAIN_BASE),\
                SIZE=$(FV_MAIN_BLOCKS)*$(FLASH_BLOCK_SIZE),\
                FILE_LIST=$(FV_MAIN), ATTR=ROM_AREA_FV_PEI+ROM_AREA_FV_DXE,\
                DXE_APRIORI_FILE_LIST=$(BUILD_DIR)\RUNTIME.FFS\
            )

      NOTE: This feature requires new version of the Tools module.
    • PE32-based .bin Files Support.
      New build type BINARY is added. The type is used to generate FFS files containing raw binary data. The binary file is created from the PE32/PE32+ file by stripping the headers.
      NOTE: This feature requires new version of the Tools module.
    • Version FFS section support is added to Ffs.mak. The section is generated if VERSION and/or VERSIONSTRING macros are defined.
      VERSION - build number to be inserted into the version section
      VERSIONSTRING - version string to be inserted into the version section.
    • String Override Support(EIP 32696).
      Rules.mak is updated to run .uni file processing utility (StrGather) with the special -override flag. The flag instructs the utility to use last instance of the string, if more than one instance is available.
      NOTE: This feature requires new version of the Tools module.
      CORE_DXE and ReFlash components are updated to expose BDS_SDBS and REFLASH_SDBS eLinks. The eLinks can be used to register .sdb files with custom definitions of the Core strings.
      Files modified: Rules.mak, Core_Dxe.mak, Core_Dxe.sdl, ReFlash.mak, ReFlash.sdl
    • CORE_COMBINED_VERSION SDL token is added. The token value is an aggregation of all core version tokens into a single integer.
      CORE_COMBINED_VERSION = (CORE_MAJOR_VERSION)<<16)+CORE_MINOR_VERSION*100+CORE_REVISION*10+CORE_BUILD_NUMBER
      NOTE: This feature requires new version of the Tools module.
    • Build process is updated to build .efi files as DLL(used to be .exe; however, some compilers strip relocation table from .exe files).
    • New SDL token USE_LINKER_RESPONSE_FILE is added.
      When this token is enabled, all linked options are passed via the response file. The token should be enabled when the length of the linker command line exceeds the maximum supported limit. The token is disabled by default.
    • Script that generates Build\Timestamp.h is updated to include integer constants for the date/time components.
    • Core.mak is updated to print target name and supported version of the UEFI specification at the end of the build process.
    • Core.mak is updated to print standard message about successful build completion for a single component builds(EIP 32658).
    • Font file target $(BUILD_DIR)\Font.ffs is replaced with pseudo-target FontFfs to always recreate the file.
    • Build.mak is updated to use ParseVeB tool. The tool generates project.ldl and project.lfo files.
    • Files modified: Core.sdl, Rules.mak, Build.mak, Ffs.mak, Core.mak, Fv.mak
  • Improvements in the Setup Callback Mechanism.
    NOTE: This feature requires new versions of the Board module.
    • The definition of the type of the Setup Callback Handling function, registered using ITEM_CALLBACK eLink, is added to Setup.h. The type name is SETUP_ITEM_CALLBACK_HANDLER. It is a replacement of the internal type UPDATE_ITEM that used to be defined in Setup.c(Setup module part of the Board component).
    • The return type of the Setup Callback Handling function is changed from VOID to EFI_STATUS. The status only matters for UEFI 2.1 Configurations. If UEFI 2.1 callback handler returns any status other than EFI_UNSUPPORTED, processing of the callback handler list defined by the SetupItemCallbacks eLink is terminated and control is returned back to the HII browser.
    • The declaration of the GetCallbackParameters function is added. The function is defined in Setup.c (Setup module part of the Board component). The function provides access to all callback parameters received from the HII browser.
    • File Modified: Setup.h
  • Minor Improvements
    • In.c: SetState function is updated to process all the physical devices despite the errors returned by some of them.
    • GenericSio.c: Debug message with the value of remaining device path passed into the Start function is added.
    • GenericSio.c: Improved error reporting in the Start function.
    • BdsBoad.c: Minor improvement of the CreateDefaultBootOptions function. Compiler dependent code is removed(EIP 28577).
    • EfiLib.c: ReadImage function is updated. Temporary buffer was not released(EIP 28575).
    • CORE_DXESrc.sdl, CORE_DXESrc.mak, Page.c: MM_LEGACY_RESERVE_MEM constant in Page.c is converted to SDL token.
      The token can be used to fine tune DXE memory manager. DXE memory manager will try to keep memory in the range 0 - MM_LEGACY_RESERVE_MEM unallocated. The memory in the range may still get allocated if the addresses in the range are specifically requested by the AllocatePages calls, or if there is not enough free memory outside of the region to satisfy the request.
      NOTE: The MM_LEGACY_RESERVE_MEM SDL token is only available with Core Sources.
    • Efi.h: GUID_VARIABLE_DECLARATION macro declaration is updated to fix linker warnings
    • CORE_PEI\Image.c, DxeIpl.c, AmiDxeInit.c: Buffer overflow protection is added (calls to Sprintf replaced with Sprintf_s).
    • AmiLib.h, IA32CLib.c, x64AsmLib.asm: IoRead64 and IoWrite64 functions are added(EIP 27821).
    • CpuIo.c: support for 64-bit I/O operations is added(EIP 27821).
    • PciCfg.c: support for 64-bit operations is added(EIP 27821).
    • FloppyCtrl.c: small delay during DMA initialization is added to resolve hanging of some systems(EIP 21981).
    • EfiLib.c, PeiLib.c, Tokens.c, Core.sdl: Trace level support(EIP 25291).
      Implementation of Trace and PeiTrace functions is updated to suppress Trace message if message Level defined by the first parameter is disabled using TRACE_LEVEL_MASK SDL token. The value of the TRACE_LEVEL_MASK is a bitwise OR of trace levels defined in AmiLib.h. The default value is TRACE_ALWAYS, which enables all trace messages.
      NOTE: TRACE_LEVEL_MASK has no effect if trace messages are disabled.
    • AcpiSupport.h: Definition of EFI_ACPI_TABLE_VERSION_4_0 is added.
    • IA32CLib.c: InitLongModeExt function is added.
    • Recovery.c, Recovery.h, FsRecovery.c, SerialRecovery.c: sAmiRomFile renamed to RecoveryFileName; FlashSize renamed to RecoveryImageSize.
    • AmiHobs.h: AMI_RESET_TYPE_HOB is added.
    • Reflash.c, Reflash.h, Reflash.vfr, Reflash.uni, Reflash.sdl: Support of the EC firmware update during recovery is added. The support is optional and is disabled by default.
    • Open.c, Info.c: EFI_FILE protocol functions are updated to validate file handle before using it(EIP 32474 and EIP 32983).
    • GC.c: The code is updated to detect suitable graphic mode for the text mode 0 if graphic mode specified by the GC_MODE_LIST SDL token is not supported(EIP 29311).
    • PS2Ctl.sdl: The value of the MAX_HOTKEYS SDL token is increased from 10 to 20.
    • HotKey.c: Ctrl+Alt+Del handler is updated to also accept Ctrl+Alt+Del+Shift combination(EIP 33327).
    • Acpi20.h: facp_flags2 macro removed in Core 4.6.3.6 is restored for compatibility with the older versions of the ACPI module.
    • ConSplit.c, In.c: Code is updated to initialize NumLock, CapsLock, and ScrollLock indicators of the ConIn device being connected in accordance with the current global state maintained by the console splitter (EIP 27917).
    • ConSplit.c: The code is modified to update MasterMode.MaxMode value if one of the underlying simple text output protocol instances does not support Mode 2 or higher (EIP 34632).
    • SimpleFileSystem.h: Comments and formatting changes.
    • Bds.c: Code that sets ConOutDev variable is removed. It is not needed. The variable is set by the ConSplitter driver.
    • Bds.c, BdsBoard.c, Setup.h:
      • Fast Boot related code is removed from BDS. It is now part of the stand alone FastBoot eModule.
      • Cleanup. Hard-coded constants are replaced with macros(EIP 31633).
    • Gpt.c, Mbr.c, GenericSio.c: Minor improvements. Unneeded NULL checks are removed(EIP 31633).
    • Partition.c: Check for invalid child handle is added to the DriverBindingStop function(EIP 31633).
    • Setup.h, Core.mak: Auto-generated file Build\AutoId.h is included in Setup.h
    • Recovery.c: Code that updates FV HOB once Recovery image is loaded is modified to be more flexible. Old implementation supported only one DXE FV (FV_MAIN) and required porting for projects with non standard ROM layout.
    • AcpiRes.h, AcpiRes.c: HideAslMethodFromOs function is added(EIP 35099).
      The function replaces leading '_' in the method name with 'X'.
    • AcpiRes.c: Formatting changes.
    • AmiDxeInit.c: Updated to use CORE_COMBINED_VERSION SDL token.

Bug fixes

  • PCI Sub-Component Bug Fixes
    This Core version includes version 4636_PCIBUSBIN_23_0_TEST of the PCI sub-component. Refer to PciBus.chm for details.
    This Core version also includes the following additional bug fixes in PciBus.c:
    • Bug fix in the handling of the IRQ routing tables with unused entries.
    • Bug fix in handling of the root bridge resources in ApplyAcpiResources.
  • Minor Bug Fixes
    • GenericSio.c: Check for a NULL pointer is added to the ApplyDmaRes function.
    • GenericSio.c: Bug fix in ApplyIrqRes function. IRQ sharing didn't work due to the bug introduced in Core 4.6.3.7 (EIP 32086).
    • ElTorito.c: Check for a block I/O device error is added in ElToritoCreateChildHandle function.
    • Bds.c: Check for a NULL pointer is added to the CreateLegacyBootOption function(EIP 28577).
    • Gcd.c: Assert during the execution of SetMemorySpaceAttributes on certain platforms is fixed(EIP 27737).
    • NvramRead.c: Bug fix in the NVRAM Record Checksum implementation(EIP 30751).
    • VolFatHandler.c(FAT file system driver): Bug fix in the code that calculates amount of available free space(EIP 32115).
    • HiiDb.c, HiiDb.h, ExtHii.h:
      • The Setup was hanging during rendering of the pages with large number of controls due to overflow of the length field in some of the internal HII structures. The size of the Length field is increased from UINT16 to UINTN.
      • Potential NULL pointer use in the NewFontPack function and inconsistency in VarStore management are fixed.
    • FsRecovery.c: The bug in calculation of byte offset of the beginning of a file on a FAT volume is fixed. The old code could not handle a file starting offset above 4GB (EIP 33174).
    • IdeRecovery.c: Bug fix in Ata_ReadSectors function. The function did not properly handle large read requests (EIP 33174).
    • Ps2Kbd.c: The Scroll Lock indicator was mistakenly turned on, when "Ctrl+Break" was pressed (EIP 34317).
    • TimeAndReset.c: Bug fix in EfiSetTime function. The time zone variable was created with the wrong size.
    • Recovery.c: Bug fix in UnknownType function. The bug caused occasional hanging, when recovery image was not found.
    • CoreSectionExtraction.c: Bug fix in CreateChildNode function(EIP 35252).
      The function did not handle absence of the decompression protocol.

Upgrade from Core 4.6.3.7

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.
    NOTE: Due to the fact that new module parts have been added to the Core Sources component, it is not enough to perform simple Component Update procedure.
    Remove old label of the component and then add new label of the component.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.3.7 - 08/31/2009

New features
 Bug fixes
 Upgrade from Core 4.6.3.6

Requires upgrade of:

None of the modules outside Core/Core Sources need to be upgraded.

New features

  • NVRAM Record Checksum Support(EIP 23825)
    • Description: NVRAM driver is updated to optionally include checksum in every NVRAM record.
      • Benefits: adds protection against random data corruptions.
      • Drawbacks: slightly increases processing time and NVRAM usage.
      NOTE: The checksum is not required to protect against power failure during NVRAM operations. The NVRAM driver includes other mechanisms to provide the protection.
      The feature is disabled by default and can be enabled using NVRAM_RECORD_CHECKSUM_SUPPORT SDL token.
    • Files modified: Nvram.h, NvramRead.h, NvramDxe.c, Runtime.sdl, Tokens.c
  • Minor Improvements
    • PeiMain.c, AmiPeiInit.c: PEI Core entry point (PeiCore) is updated. Support for recovery from DXE Core loading failure is added.
      If DXE IPL detects that the DXE Core cannot be loaded due to flash corruption or another failure, it can set the boot mode to recovery and install the recovery mode PPI. However, recovery will not start because the recovery PEIMs have not been dispatched (they have a dependency on the recovery mode PPI). Since there is no API to re-start dispatcher, all DXE IPL can do is to report the error and return control back to the PEI Core, which in the old implementation just had an ASSERT. The new code tries to recover by calling dispatcher and DXE IPL again.
    • CORE_PEI\FwVol: Assert on invalid FFS file header checksum in PeiFfsFindNextFileEx function is removed to enable a more sophisticated FV corruption handling outside of the Core.
    • AmiPeiInit.c: More generic FindFv PPI implementation. Old implementation was assuming that boot FV is described by the first FV HOB.
    • Recovery.c, ReFlash.c(EIP 25329): Recovery module is updated to pass recovery image location via special GUIDed HOB. Old implementation was relying on Firmware Volume (FV) handle and required porting for projects with non standard FV management policy. For example, old implementation was not capable of handling PEI only FV (FV, which is only used in PEI, not exposed to the DXE dispatcher, and has no handle).
    • Kbc.c: DXE_KEYBOARD_ENABLE/DXE_KEYBOARD_DISABLE progress codes are no longer reported. There were too many events of these types, which degraded system performance and increased memory usage (every progress code is logged into the data hub, which is in-memory structure).
    • AcpiRes.h, AcpiRes.c: New function UpdateAslNameOfDevice is added.
    • Fv.mak: Support for OPTIMIZE_SIZE and TOP_DOWN_ALLOCATION FV flags is added(refer to FwBuild User Guide for flags documentation).
    • Pci.h: SD Card Class/Subclass definitions are added.
    • SimpleTextIn.h, SimpleTextInEx.h, AmiKeyCode.h: define GUID_VARIABLE_DECLARATION macro only if it has not been already defined.
    • PciHostBridge.c, PciHostBridge.c: ImageHandle field is added to Host Bridge and Root Bridge structures(passed to GCD resource allocation functions).
    • PciHostBridge.c: Debug message with version of the PCI driver is added.
    • Core.mak: Generate PeiSym.lst only if PEI Debugger is enabled.
    • Core.sdl: CORE_BUILD_NUMBER is increased (from 6 to 7).
    • PciBus.sdl: PCI Bus Driver Revision increased (from 0 to 1).
  • UEFI 2.1 Support. Work in Progress.
    NOTE: This section lists partially implemented feature. UEFI 2.1 support is a work in progress. UEFI 2.1 specific code is disabled in this Core version. Full support of UEFI 2.1 will be provided by the future Core versions.
    All the changes listed in this section are backward compatible.
    • AmiDxeLib.h, EfiLib.c: LanguageCodesEqual function is added. The function compares language codes in the format appropriate for the supported version of UEFI specification (defined by EFI_SPECIFICATION_VERSION SDL token).
    • EfiLib.c: Library functions that deal with Component Name Protocol are updated to support both ComponentName and ComponentName2 protocols
    • ComponentName.h: definition of the ComponentName2 protocol is added
    • EFI.h: EFI_INVALID_LANGUAGE error code is added.
    • DiskIo.c, ConSplit.c, Gc.c, Partition.c, Ps2Main.c, Ps2Ctl\Names.c, GenericSio.c, PciBus.c, FloppyCtrl.c, FloppyCtrl\Names.c, IdeBus.c, IdeBusComponentName.c, FileSystem.c, FileSystemComponentName.c, FileSystem.h: Component Name protocol implementation is updated to support both ComponentName and ComponentName2 protocols (based on value of the EFI_SPECIFICATION_VERSION SDL token).
    • UnicodeCollation.h, UnicodeCollation.c, FileSystem.c : support for both UnicodeCollation and UnicodeCollation2 protocols (based on value of the EFI_SPECIFICATION_VERSION SDL token) is added.

Bug fixes

  • Memory corruption during DXE Core initialization
    • Symptoms: Some systems were hanging during DXE Core initialization (checkpoint 0x60)
    • Files modified: AmiDxeInit.c, DxeMain.c
    • Details: The corruption was caused by the HOBs created in AmiDxeInit1 function. The HOB creation moved to an earlier point (before HOB data is used by CoreInitializeMemoryServices).
  • BDS Bug Fix
    • Symptoms: Systems with several boot devices where occasionally hanging towards the end of the BDS phase.
    • File modified: Bds.c
    • Details: Bug fix in BuildBootOptionName function. The function was mistakenly freeing memory allocated by other drivers.
  • Debug message buffer overflow(EIP 24453).
    • Symptoms: Systems were hanging during processing of the long debug messages(longer than 256 bytes in PEI and 1K in DXE).
    • Files modified: StdLibC.c, Debug.c, PeiLib.c, EfiLib.c, AmiLib.h, AmiPeiInit.c
    • Details: The problem was caused by buffer overflow in debug message functions Trace and PeiTrace. Protection against buffer overflow is added. Calls to Sprintf replaced with Sprintf_s(protected against buffer overflow). Code is updated to trim long debug messages. Maximum DXE debug message size is increased to 2K.
  • NVRAM Bug Fix
    • Symptoms: Systems were occasionally hanging during first boot after flashing, when SetVariable call from SMM was followed by the GetVariable call from outside of SMM.
    • Files modified: NvramDxe.c
    • Details: VarIndex data structure is updated to use index of the varstore in the VarStoreInfo.NvramInfo array instead of pointer to the varstore descriptor(NVRAM_STORE_INFO structure). Pointers cannot be used because VarIndex data is used by both SMM and non-SMM NVRAM services, which have independent copies of VarStoreInfo global variable.
  • Recovery Bug Fix(EIP 24689)
    • Symptoms: Firmware recovery from mass storage devices did not work (recovery image loading was failing).
    • File modified: FsRecovery.c
    • Details: The bug was caused by the implementation of the wildcard support during matching of the recovery image file name introduced in Core 4.6.3.6.
  • Bootup NumLock State(EIP 21757)
    • Symptoms: When "Bootup NumLock State" is set to "Off" in setup, the NumLock stays "On" during the system boot. It is turned off only during hand off to a legacy OS.
    • Files modified: In.c, Ps2Kbd.c
  • Flash Driver Bug Fixes
    • AFUDOS hanging
      • Symptoms: AFUDOS was occasionally hanging in debug mode.
      • Details: Debug message function Trace, which uses boot time services was used at runtime.
    • Flash update failure
      • Symptoms: Erase, Write, and Update functions of the Flash Protocol did not work without prior call to DeviceWriteEnable protocol function.
      • Details: Calls to DeviceWriteEnable were failing due to a busy critical section. Code is updated to use non-blocking internal write enable function.
    • DeviceWriteDisable problem
      • Symptoms: DeviceWriteDisable did not work properly.
      • Details: Protocol interface structure was populated with the wrong function pointer.
    • File modified: Flash.c
  • Minor bug fixes
    • EfiLib.c: Bug fix in LibAllocCspResource function(EIP 24323). Function did not work properly for I/O only resource tables.
    • Pci.uni: Formatting and spelling corrections(EIP 24069).
    • PciBus.c: On systems with hot-plug support, bus padding did not work properly when "PCI Buses Padding" setup option was set to 1(EIP 19106).
    • GenericSio.c: Bug fix in IRQ allocation logic. When non-AUTO IRQ allocation method was used, the same IRQ was sometimes assigned to more than one device.

Upgrade from Core 4.6.3.6

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.

Version 4.6.3.6 - 07/10/2009

New features
 Bug fixes
 Upgrade from Core 4.6.3.5

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
NB | PCI Updates | Chipset specific
Tools | Infrastructure to simplify ROM layout customization | 4.5.5_Tools_28
Board
  • Infrastructure to simplify ROM layout customization
  • NVRAM Content Validation
  • Detection of the failed firmware updates
 4.6.3.6_Board_22
SB | Time and Reset Runtime Services | Chipset specific

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
USB | Pause key support | Pause key support on USB keyboard is required | 4.06.03_USB_08.08.05
FsIso9660 | IS9660 driver did not recognize CD created with Windows Explorer | FsIso9660 driver is in the project | 4.6.3.6_FsIso9660_02
ACPI | PCI Express Hot Plug support | BIOS controlled PCI Express Hot Plug support is required | 4.6.3.3_ACPI_31
Chipset components | PCI Express Hot Plug support | BIOS controlled PCI Express Hot Plug support is required | Chipset specific
SmiFlash | Detection of the failed AFU firmware updates | Detection of the AFU firmware update failures is required | 4.6.3.6_SMIFLASH_12

New features

  • Pause key support(EIP 19547)
    • Description: The pause key support is enabled/disabled with PAUSEKEY_SUPPORT SDL token. ReadKeyStroke function of the Simple Text Input protocol and ReadKeyStrokeEx function of the Simple Text Input Ex protocol are updated to detect pause key and wait for another key to be pressed before returning control.
      NOTE: For this feature to work on USB keyboard, USB module must be upgraded to version 4.06.03_USB_08.08.05 or newer.
      NOTE: This features is only available with Core Sources.
    • Files modified: ConSplitter.sdl, In.c, Ps2Kbd.c
  • PCI Updates(Refer to PciBus.chm, PciBucSrc.chm, and Aptio 4.x PCI Porting Guide for additional details).
    NOTE: This features requires upgrade of the NB module.
    Refer to "Update Instructions" section of PCI Release Notes in PciBus.chm for NB upgrade instructions.
    • Handling of PCI and ACPI platform specific information generated at build time by VeB and other tools is abstracted into new AMI Board Info protocol, which is implemented as a separate driver (new Core module part). PCI bus driver is updated accordingly.
    • BIOS controlled PCI Express Hot Plug support is added.
      PCI Root Bridge Driver produces Root Hot-Plug Controller Initialization Protocol. The protocol implementation uses data structures generated by VeB, and SDL tokens from PciBus.sdl. Chipset specific aspects of the implementation can be customized via provided porting hooks.
      NOTE: The feature is only supported when AMI_ROOT_BRIDGE_SUPPORT SDL token is set to "on"
      NOTE: This feature requires upgrade of ACPI module to version 4.6.3.3_ACPI_31 or newer
      NOTE: This feature requires chipset specific porting.
    • Generic support for PERR#, SERR# and VGA Palette Snoop settings is added.
    • Porting hooks to overwrite default handling of the EfiPciIoAttributeOperationSet operation of the PCI I/O Attributes function are added.
    • Generic support and setup question on how to handle resource requests above 4G is added.
    • Setup Form to configure Hot-Plug settings is added.
    • Files modified: PciBus.cif, PciBus.sdl, PciBus.mak, PciBus.sd, PciBus.uni, PciRootBridge.dxs, , PciPort.c, PciSetup.h, PciBusSrc.lib, PciBusSrcx64.lib, PciIncludes.cif, PciBus.h, PciHostBridge.h, PciBoard.h, PciBusSrc.sdl, PciBusSrc.mak, PciBus.c, PciHostBridge.c, Protocol.cif, Core.cif
    • Files deleted: PciBoard.asm, PciBusSrcRb.lib, PciBusSrcRbx64.lib, PciBoard.h
    • Files added: PciPort.h, PciBusSrc.chm, AmiBoardInfo.h, AmiBoardInfoIncludes.cif, AmiBoardInfo.cif, AmiBoardInfo.sdl, AmiBoardInfo.mak, AmiBoardInfo.c, PciBoard.asm, AmiBoardInfo.dxs
    • File moved: PciBus.chm moved from PCI Sources to PCI binary component
  • IDE Bus Driver Updates
    • HDD password support in RAID mode is added(EIP 20421).
      • Files modified: PIdesBus.h, IdeBuc.c
    • Timeout for the security erase command is implemented(EIP 20630).
      • Timeout value is defined by the word 89 in the data buffer returned by the identify command.
      • File modified: Ata.c, IdeBus.h
    • Reporting of the Optical Disk Drive (ODD) Type is added(EIP 21548).
      • ODD Type information is saved in the ATAPI device structure(Idebusinterface->AtapiDevice).
      • File modified: PIdeBus.h, IdeBus.h, IdeBus.c, Atapi.c
  • Support for alternative font data packaging(EIP 18489).
    • Description: Build process is updated to provide framework that can be used to overwrite default packaging of the font data.
      Two new SDL tokens are created:
      "LANGUAGE_FONT_LIST" - Space separated list of language identifiers. The fonts for these languages will be included into the ROM image.
      "STRING_PACK_POST_PROCESS_COMMAND" - The token defines command used in rules.mak to perform additional processing of module's HII string pack ($(BUILD_DIR)$(NAME)Str.hpk) after standard processing (performed by StrGather utility) is completed.
    • Files modified: Core.mak, Core.sdl, Rules.mak
  • Infrastructure to simplify ROM layout customization(EIP 18426).
    • Description: Build process and source code that deals with ROM layout is updated in order to simplify ROM layout customization.
      NOTE: This feature requires upgrade of the AMI Tools to version 4.5.5_Tools_28 or newer
      NOTE: This feature requires upgrade of the Board module to version 4.6.3.6_Board_22 or newer
      • The ROM layout is now defined by the ROM_IMAGE eLink defined in Core.sdl. Individual modules can contribute entries to the ROM_IMAGE list. Every entry starts with ROM object type (FV, FILE, or HOLE) followed by comma separated list of ROM object parameters enclosed into parenthesis:
        <Type>( <Param1>=<Value1>, <Param2>=<Value2>, … <ParamN>=<ValueN>)
      • The default ROM layout defined by Core.sdl and Core.mak is the same as in previous Core versions.
      • Core.mak contains logic to parse ROM_IMAGE eLink (Target: $(BUILD_DIR)\RomLayout.ini).
      • Core.mak generates two batch files Build\GenRomLayout.bat and Build\GenFvDesc.bat. The files process ROM_IMAGE list and generate two output files:
        1. Build\RomLayout.ini - ROM layout description file used by FwBuild to build FV and final ROM image.
        2. Build\RomLayout.c - ROM layout table used by the BIOS components interested in ROM layout.
      • The type of the RomLayout structure and accompanying declarations are in Include\RomLayout.h
      • Format of eLink that describes list of firmware volume files is extended to support additional attributes. The new additional attributes are optional. The following syntax constructs are supported:
        <FFS-file-name> location:<address> - specifies absolute address of the FFS file within FV. Address must be within parent FV address range.
    • Files modified: Core.mak, Core.sdl, Fv.mak, Include.cif, AmiHobs.h, DxeIpl.c
    • Files added: RomLayout.h
  • SMM version of Runtime Services is implemented(EIP 14800)
    • Description: Runtime driver is updated to install SMM version of the runtime services table.
      Several other runtime drivers (NVRAM driver, Reset, and RTS drivers) are updated to populate SMM runtime table with the pointers to SMM implementation of the runtime services.
      The InitSmmHandler library function is updated to initialize pRS with the address of the SMM runtime table.
      Any SMI Handler that uses InitSmmHandler function for initialization, and accesses runtime services via pRS global variable will automatically be redirected to the SMM implementation of runtime services.
    • Files modified: AmiDxeLib.h, Runtime.sdl, Runtime.mak, EfiLib.c, Runtime.c, NvramRead.c, NvramDxe.c
  • NVRAM Content Validation (EIP 19921)
    • Description: NVRAM driver has been updated to ensure validity of the NVRAM content.
      NOTE: This feature requires upgrade of the Board module to version 4.6.3.6_Board_22 or newer.
      The following improvements have been made:
      • NVRAM driver checks compatibility of the NVRAM content with the firmware code. The compatibility check is performed in PEI and DXE using external hooks IsNvramDataCompatible and DxeIsNvramDataCompatible defined in the Board component (OemPort.c). If compatibility check fails, NVRAM content is considered invalid.
      • NVRAM driver verifies validity of the FV signature. If signature check fails, NVRAM content is considered invalid.
      • If invalid NVRAM content is detected in PEI, NVRAM content is disabled (Variable PPI Functions return EFI_NOT_FOUND).
      • If invalid NVRAM content is detected in DXE, NVRAM content is reset to defaults. The defaults are loaded from the FFS file with a predefined name(GUID) located in one of the available firmware volumes.
    • Files modified: NvramPei.c, NvramDxe.c
  • Switch to disable built-in MonotonicCounter driver
    • Description: New NVRAM_MONOTONIC_COUNTER_SUPPORT SDL token is created. The token can be used to disable Core NVRAM-based implementation of the monotonic counter architectural protocol and to use stand alone monotonic counter driver instead.
    • Files modified: NvramDxe.c, Runtime.sdl, Tokens.c
  • Flash driver
    • Description: New Flash protocol is implemented. Protocol is intended to replace low level calls to the Flash Library during firmware updates and other flash update operations. The flash driver (Flash.c) installs two instances of the Flash Protocol with different GUID:
      FLASH_PROTOCOL_GUID - for consumption outside of SMM
      FLASH_SMM_PROTOCOL_GUID - for consumption by SMM code
    • Flash driver supports detection of the failed firmware updates using the following logic. Before firmware volume update is started, flash driver corrupts FV signature. After successful update, the signature is restored.
      After reset, FV signature is validated by the PEI code (ReportFv.c) prior to exposing FV to the PEI dispatcher. If signature is invalid, recovery is initiated.
      NOTE: This feature requires upgrade of the Board module to version 4.6.3.6_Board_22 or newer.
      NOTE: For this feature to work during firmware update with AFU utility, SmiFlash module must be upgraded to version 4.6.3.6_SMIFLASH_12 or newer.
    • Recovery flash update driver (ReFlah) is updated to use FlashProtocol instead of Flash library functions.
    • Files modified: Protocol.cif, Runtime.sdl, ReFlash.dxs, ReFlash.c, RuntimeSrc.cif
    • Files added: FlashProtocol.h, Flash.c
  • Time and Reset Runtime Services.
    • Description: Implementation of Real Time Clock and Reset architectural protocols are now provided as a part of Runtime driver.
      • Real Time Clock protocol implementation is based on legacy PC/AT RTC chip and can be disabled using RTC_RUNTIME_SERVICES_SUPPORT SDL token.
      • Reset function is implemented using chipset specific function SBLib_ResetSystem published by SB component via CspLib.
        Reset protocol implementation can be disabled using RESET_RUNTIME_SERVICES_SUPPORT SDL token
      • Both RTC and Reset implementations publish separate copies of the runtime services for consumption by SMM code.
      NOTE: This features requires upgrade of the SB module to disable instances of RTC and Reset protocols published by SBRUN driver.
      NOTE: To keep using your current implementation of the RTC and/or Reset protocol disable core implementation using RTC_RUNTIME_SERVICES_SUPPORT and/or RESET_RUNTIME_SERVICES_SUPPORT SDL tokens.
    • Files modified: Runtime.sdl, RuntimeSrc.cif, RuntimeSrc.sdl
    • Files added: TimeAndReset.c
  • Recovery Module Updates
    • El Torito CD Recovery Support is added(EIP 21169).
    • The block I/O PPI implementation is streamlined. The code is restructured to eliminate redundant functions and SDL tokens. SDL Tokens changes:
      FAT_DEVICES_RECOVERY_SUPPORT renamed to FAT_RECOVERY_SUPPORT
      CDROM_RECOVERY_SUPPORT renamed to CD_RECOVERY_SUPPORT
      RECOVERY_DEVICE_ORDER: Three separate device types "FAT, CDROM, PARTITIONED_FAT" are combined into a single "BLOCK" deivice type that represents all block I/O PPI based devices.
    • More flexible recovery image file name and size matching(EIP 18484)
      • Syntax of RECOVERY_ROM SDL token is extended to support one or more file masks.
        The value of RECOVERY_ROM SDL token is a comma separated list of file masks. For example:
        "$(AMI_ROM), *.xyz, OEM???.bin"
      • New SDL tokens RECOVERY_IMAGE_SIZE is defined. The tokens defines recovery image size. Default value is FLASH_SIZE (size of the standard ROM image).
      • Serial recovery: multiple serial ports support(EIP 21100).
        Serial port base address in not discovered using low level PPI (used to be hard coded to 0x3f8)
    • Files modified: FsRecovery.c, Recovery.sdl, Recovery.c, SerialRecovery.c, RecoveryPpi.cif
    • File added: SerialDevice.h
  • Preview of the New Boot Option Maintenance Infrastructure
    NOTE: This features, is still under development. It is disabled by default and included in this Core version for review, testing and evaluation purposes. Implementation details may change in the future Core releases.
    • By default old boot option maintenance code is used. To enable new infrastructure change value of NEW_BDS_BOOT_OPTION_MAINTENANCE_INFRASTRUCTURE macro is Bds.c to 1.
    • File modified: Bds.c, CORE_DXESrc.cif
    • Files added: BootOrder.h, BootOrderBoard.c, BootOrderGeneric.c
  • Function Headers and Comments.
    • Description: Function headers, file headers, and code comments have been updated in majority of the Core files.
      No actual code changes
    • Files modified: Runtime.mak, RuntimeSrc.mak, Runtime.c, CpuIoDxe.c, TimeAndReset.c, Flash.c, FloppyCtrl.h, FloppyCtrl.c, Names.c, FileSystem.h, Open.c, FileSystem.c, FileFatHandler.c, Info.c, DirectoryHandler.c, VolFatHandler.c, MediaAccess.c, FileSystemComponentName.c, IdeRecovery.c, ps2kbd.c, ps2main.c, ps2ctl.h, kbc.h, kbc.c, ps2mouse.h, mouse.c, automaton.h, efismplpp.c, Names.c, hotkey.c, ConSplit.c, ConSplit.h, Out.c, In.c, IdeBus.mak, PDiskInfo.h, IdeBusSrc.mak, IdeBus.h, IdeBus.c, Ata.c, Atapi.c, IdeBusMaster.c, IdePowerManagement.c, IdeHPA.c, IDEBusComponentName.c, Recovery.mak, Recovery.c, Recovery.h, FsRecovery.c, RecoverySrc.mak, SerialRecovery.c ReFlash.mak, ReFlash.vfr, ReFlash.c, ReFlash.uni, ReFlash.h, CpuIo.c, PciCfg.c, DataHub.c, UnicodeCollation.c, DiskIo.c, ElTorito.c, ElTorito.h, Gpt.c, Gpt.h, Mbr.c, Mbr.h, Partition.c, Partition.h, NvramRead.c, NvramPei.c, NvramDxe.c, Ia32Clib.c, Is32AsmLib.asm, x64Clib.c, x64AsmLib.asm, PELoader.c, Decompress.c, Memory.c, Debug.c, StdLibC.c, Misc.c, IO.c, PeiLib.c, EfiDBE.c, EfiLib.c, AcpiRes.c, Print.c, DxeIpl.c
    • New file added: AmiLib.chm
  • Minor improvements
    • CORE_PEISrc.mak, CORE_DXESrc.mak: CORE_PEI and CORE_DXE binaries are no longer compiled with optimization enabled in debug mode. They inherit global optimization settings.
    • AmiDxeInit.c(EIP 18486): Some of the interfaces consumed by DXE Core are packaged into GUID extension HOBs for compatibility with EDK.
      Code clean up.
    • AmiPeiInit.c, AmiDxeInit.c : Creation of CPU HOB moved from AmiPeiInit.c to AmiDxeInit.c.
    • EfiLib.c(EIP 21319): GetControllerName function is updated to search for controller name using handlers of all ancestors of the given controller (used to be just immediate parent).
    • Acpi20.h: Removed unused macro for FACP Feature Flags
    • AmiDxeLib.h, EfLib.c: New function InitAmiRuntimeLib is added. The function can be used by Runtime drivers to initialize library (the function calls InitAmiLib) and register callbacks on exit boot services and virtual address change events.
    • Flash.h: Declaration of FlashRead function is added.
    • PeiMain.c: "DXE IPL Entry" debug message is updated to print address of the DxeIpl.Entry function.
    • AmiLib.h: Bit definitions (BITXX macros) are enclosed in #ifdef's to avoid potential double definitions.
    • Vfr.uni: Definition of Italian language is added.
    • AcpiRes.h, LoadedImage.h, Efi.h, Hob.h: Clean up.
    • Core.sdl(EIP 22740): Definitoins of core version tokens are updated to include them in tokens.mak.
    • Core.mak: Token.h is added to the list of dependencies of target Tokens.c.
    • Bds.uni: updated to include VFR.uni, which contains standard language definitions
    • Bds.c: ConnectDefaultConOut function updated.
      • AGP support is removed
      • On-board device detection logic is improved (EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE attribute is used).
    • GC.c: Internal implementation of the driver has changed (No interface changes. All changes are backward compatible.)
      • Code reorganized to prepare for future UEFI 2.1 HII support
      • GTSE porting hooks added
      • Code clean up

Bug fixes

  • Build process bug fixes
    • Problem with target specific builds (build.bat target=X).
      • Description: The target specific build didn't work for modules that use Setup.h, without prior full build.
      • Files modified: Core.mak, Build.mak
      • Symptoms: Build failed with "SetupDefinitions.h not found" error.
      • Details: Core make files are updated to add target that generates SetupDefinitions.h into the list of dependents of the top level target being built (original code only did it for target "all").
    • Dual mode libraries (libraries with PEI and DXE instances) INIT_LIST problem.
      • Description: Compilation of the dual mode libraries (libraries that used in PEI and DXE) with INIT_LIST in x64 mode (x64_SUPPORT=1) was failing.
      • File modified: Rules.mak
      • Symptoms: Build failed with "Don't know how to build Build\IA32\Token.h" error.
      • Details: $(BUILD_DIR)\Token.h replaced with $(BUILD_ROOT)\Token.h
  • IDE Bus driver bug fixes
    • ASSERT during boot to UEFI OS
      • Description: Systems with AHCI driver were hanging in debug mode during boot to UEFI OS.
      • File modified: IdeBus.c
      • Symptoms: The system was hanging on assert statement in IdeBusExitBootServices function in IdeBus.c.
      • Details: The assert statement is removed. The assert verified existence of IDE Bus Init protocol, which does not exist if drives are managed by AHCI driver.
    • Verification of the IDE Controller data(EIP 21195).
      • Description: IDE Bus driver is updated to check status and validity of the returned data during communication with IDE controller via the IDE Controller protocol.
      • File modified: IdeBus.c
    • Disconnect IDE controller problem
      • Symptoms: Disconnection of the IDE bus driver in debug mode, was hanging the system.
      • Details: IdeBusStop function is updated. IdeBlockIoDev pointer had wrong address, which caused assert within FreePool.
      • File modified: IdeBus.c
  • Partition driver bug fixes
    • IS9660 driver did not recognize CD created with Windows Explorer(EIP 19052)
      • Description: IS9660 driver did not recognize CD burned with Windows Explorer.
        NOTE: If you project includes FsIso9660 driver, it must be upgraded to version 4.6.3.6_FsIso9660_02 or newer.
      • File modified: ElTorito.c
    • UEFI Linux partition(EIP 20879)
      • Description: GPT partitions created by UEFI Linux installation were not recognized by Aptio partition driver.
      • File modified: Gpt.c
  • NVRAM bug fixes
    • BBS Pop Up menu problem(EIP 20442)
      • Symptoms: USB mass storage device is sometimes missing from the BBS popup menu when F12 is pressed continuously on USB keyboard.
      • File modified: NvramDxe.c
      • Details: the problem was caused by the fact that timer interrupt handler was running with SMI disabled. BeginCriticalSection/EndCriticalSection updated to enable SMI's before interrupts.
        The change provides support for interrupt handlers depending upon processing performed by the SMI handler
    • NVRAM update on projects without Core Sources(EIP 19816).
      • Symptoms: SetVariable call failed to update NVRAM on some projects without Core Sources
      • Files modified: Nvram.mak, CORE_PEI.mak, Runtime.mak
      • Details: Runtime.lib binary (that contains SetVariable implementation) included chipset and flash part specific code.
        The build process is updated to keep hardware specific code outside of precompiled Core binaries.
    • NVRAM DXE crash when defaults are reset on first boot(EIP 20149).
      • Symptoms: If TRUE was returned by IsResetConfig() on the first boot after a fresh flash, system was hanging in the NVRAM DXE driver.
      • File modified: NvramDxe.c
    • Compilation errors when NV_CACHE_SUPPORT is zero.
      • File modified: NvramDxe.c
    • Minor bug fix in DxeSetVariable parameters validation.
      • File modified: NvramDxe.c
  • PCI bug fixes(Refer to PciBus.chm, and PciBucSrc.chm)
    • Minor issues related to the handling of entries of the PCI IRQ table.
    • Potential issue when optimizing resources(EIP 21366).
      Extra BAR Length value could overflow if initial ebar->Length is totally used by other resource requests.
    • Potential Memory corruption issue when assigning Ext->XlatEntry->BusRun for bridges not having corresponded XlatTbl Entry.
    • Issue with Multi Root support and incorrect bus allocation for the secondary Root(s) if they have advanced (more than 1) bus structure.
    • Issue in AssignBridgeResources() function. When there were no bars to program function was returning ERROR Status.
    • Miscellaneous minor bug fixes and code cleanup.
  • IDE/SATA recovery(EIP 17580).
    • Description: Recovery from SATA/IDE devices failed in systems with IDE/SATA controllers outside SB.
    • File modified: IdeRecovery.c
    • Details: IDE Recovery code used to enumerate devices in the entry point, which excluded from enumeration IDE controllers managed by PEIM started after Recovery PEIM.
      The code is updated to perform enumeration right before reading the recovery image.
  • Floppy ReadOnly flag(EIP 14848).
    • Description: BlockIo->Media->ReadOnly flag was not properly updated for legacy Floppy drives.
    • File modified: FloppyCtrl.c
  • Minor bug fixes
    • UnicodeCollation.c: Invalid return type in the StriColl function declaration.
    • In.c, Ps2Kbd.c(EIP 19039): SCT failure in ReadKeystrokeEx function. The function is updated to validate KeyData parameter.
    • Kbc.c(EIP 19880): PS2 and USB keyboard didn't work during legacy OpROM execution when both DETECT_PS2_KEYBOARD and KBC_BASIC_ASSURANCE_TEST were set to zero.
    • StdLibC.c: Bug fix in Strcpy and Wcscpy functions. The functions were returning pointer to the next character after the terminator of the destination string. The code is updated to return pointer to the beginning of the destination string.
    • Bds.c: Bug fix in BuildBootOptionName function.
    • CoreSectionExtraction.c(EIP 20370): ReadSection function of the FV protocol didn't work for GUID defined sections (always returned EFI_NOT_FOUND).
    • HiiDb.c: Hii->RemovePack(HiiRemovePack) bug fix. Function is updated to reset global pointers that might be pointing to the data within the pack being removed.
    • ConSplit.c, Out.c(EIP 21415): pST->ConOut->Mode->CursorVisible flag was in certain cases not in synch with the underlying physical ConOut devices.
    • Ps2Kbd.c(EIP 22611): Shift Key Status was getting set when DELL key was pressed frequently.
    • EfiLib.c(EIP 15195): Bug fix in LibAllocCspResources function. The function was clearing RT attributes in certain cases.
    • Bds.c(EIP 23027): Update NVRAM instance of LegacyDevOrder variable when it's modified by the AdjustLegacyDevOrder function.

Upgrade from Core 4.6.3.5

  • Upgrade Core module.
    NOTE: Due to the fact that new module part AmiBoardInfo has been added to the Core, it is not enough to perform simple Component Update procedure.
    Remove old label of the Core component and then add new label of the Core component.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade other modules based on upgrade requirements.

Version 4.6.3.5 - 01/20/2009

New features
 Bug fixes
 Upgrade from Core 4.6.3.4

Requires upgrade of:

None of the modules outside Core/Core Sources need to be upgraded.

New features

  • PCI Updates
    • Internal structure of the PCI component has changed.
      Common routines used by both PCI bus driver and PCI Host Bridge driver that used to be linked with both binaries are now abstracted into a protocol installed by the PCI host bridge driver and consumed by the PCI bus driver.
      The changes are internal to the PCI component and do not affect external interfaces of the PCI bus and PCI host bridge drivers.
    • Files modified: PciBus.cif, PciBus.sdl, PciBus.mak, PciBusSrc.Lib, PciBusSrcx64.lib, PciHostBridge.h, PciBusEx.h, PciBoard.h, PciBus.chm, PciBusSrc.mak, PciHostBridge.c, PciBus.c
    • Files added: PciBusSrcRb.lib, PciBusSrcRbx64.lib
  • Super I/O Updates
    • Additional initialization hook for the Super I/O devices is added (SIO_INIT_STEP enumeration is extended with an additional isAfterBootScript value). The hook is invoked once all SIO registers are added to the boot script.
    • Files modified: GenericSio.h, GenericSio.c
  • Build Process Updates
    • Support for "Step out" operation in the debugger.
      x64 debuggers implement "Step out" operation using exception directory within PE32+ image. In previous versions of the Core exception directory was stripped out by the build process to reduce PE32 image size. Current version of the code preserves exception directory when generation of debug information is enabled (DEBUG_INFO token is set to "on").
    • C preprocessor copyright message is suppressed.
    • File modified: Rules.mak
  • ISO 9660 FileSystem support
    • CD-ROM handling code in the partition driver is updated to create additional logical instance of the Bock I/O protocol based on primary volume descriptor of the CR-ROM. The instance is used by the ISO 9660 file systems driver (separate eModule. Not part of the Core) to implement file system protocol.
      The new partition driver functionality is only enabled when ISO 9660 file systems driver ($/Source/Modules/FsIso9660) is included into the project.
    • Files modified: ElTorito.c, ElTorito.h, BdsBoard.c
  • Interface of the hooks that detect NVRAM operational mode is extended(EIP 18483).
    • NVRAM driver uses platform hooks(IsMfgMode, IsResetConfigMode, IsDefaultConfigMode) to detect, which set of configuration values are to be used. In some cases the mode is detected based on value of the NVRAM variable.
      Interface of the hook functions is extended. New parameter is added. Pointer to EFI_PEI_READ_ONLY_VARIABLE2_PPI PPI is passed to the hook functions. The pointer can be used to read and enumerate existing NVRAM variables.
    • File modified: NvramPei.c
  • 'TSE Binary' module part is removed from the Core.
    • TSE Binary is removed from the Core to facilitate usage of multiple flavors of TSE.
    • File modified: Core.cif
  • Minor Improvements
    • Efi.h: Some of the level 4 compiler warnings are disabled.
    • PeiCore.h: Maximum supported number of PPI descriptors (MAX_PPI_DESCRIPTORS constant) is increased from 64 to 128.
    • EfiLib.h, DataHub.c, UnicodeCollation.c, EfiSmplpp.c: minor changes to match constants returned from the functions with the actual returned type (NULL instead of 0 for pointers; TRUE/FALSE instead of 1/0 for Booleans; EFI_SUCCESS instead of 0 for EFI_STATUS).
    • Bds.c: BDS updated to signal beginning of the driver connection cycle by installing a protocol.
    • SM Bus Protocol and PPI headers are updated. Common code moved into newly created header file.
      • Files modified: Protocol\SmBus.h, Ppi\SmBus.h, Include.cif
      • File added: Include\SmBus.h
    • AmiHobs.h: SMBUS HOB is added. The HOB is used to pass ARP map from SMBUS PEIM to SMBUS DXE driver.

Bug fixes

  • Priority of the UEFI boot options
    • Symptoms: Priority of the UEFI boot option referring to USB key with MBR partition was reset during every boot.
      (The option was always reset to be the last boot option, no matter what was the setup settings during previous boot).
    • File modified: Mbr.c
    • Details: Bug fix in MbrCreateChildHandle routine of the partition driver. Unused part of the signature (12 bytes) in hard driver device path was not initialized.
  • NVRAM bug fixes
    • False NVRAM corruption detection on systems with NVRAM larger than 64KB during creation or update of the large variables.
    • Bug fix in IsClean routine.
    • Bug fix in CreateVariable routine(invalid handling of the GUID index overflow).
    • Bug fix in EnumerateStore routine(invalid detection of the last GUID index used).
    • Improved handling of the variables with default values.
      • When variable is deleted, return EFI_WRITE_PROTECTED instead of EFI_NOT_FOUND if only default value (which cannot be deleted) exists.
      • When volatile variable is created, return EFI_INVALID_PARAMETER if default value exists (If default value exists, the variable is non volatile. Attributes for existing variable cannot be changed).
    • Files modified: NvramRead.c, NvramDxe.c
  • Kernel panic during installation of the UEFI Fedora 10 Linux
    • Symptoms: Kernel panic during early steps of the installation of UEFI Fedora 10 Linux with the following message:
      'BUG: unable to handle kernel paging request at <address>'
    • Files modified: AmiLib.h, PeLoader.c, Runtime.c
    • Details: Bug fix in the code that changes the addresses of the runtime components of the UEFI firmware to the new virtual addresses.
  • PCI bug fixes
    • 'connect -r' shell command never returned control(EIP 15523).
    • Start function of the Driver Binding protocol installed by the PCI bus driver was returning EFI_SUCCESS instead of EFI_ALREADY_STARTED when all PCI devices are started.
    • File modified: PciBus.c
  • UEFI 2.1 SCT SimpleTextInputEx Conformance tests failures(EIP 17578).
    • Symptoms: Failure of the conformance tests for the RegisterKeyNotify, SetState, and UnregisterKeyNotify functions of the SimpleTextInputEx protocol.
    • Files modified: In.c, Ps2Kbd.c
  • Problems during video card switching(EIP 17217).
    • Symptoms: Some systems were hanging after replacement of the video card.
    • Files modified: Bds.c, ConSplit.c
  • Invalid PIO mode problem(EIP 17885).
    • Details: IDE Bus driver used PIO mode returned by the IDE controller driver without validation. There was no protection against bugs in the controller driver. IDE Bus driver updated to ensure valid mode is returned.
    • File modified: IdeBus.c
  • Bus master interrupt status
    • Symptoms: Some systems with HDD and CD-ROM connected were hanging during legacy boot to CD-ROM.
    • Details: Bus master interrupt status was not properly cleared during bus master ATAPI read/write operations, which blocked further interrupts generation.
      The code is updated to properly clear the bus master interrupt status.
    • File modified: IdeBusMaster.c
  • Headless systems hanging(EIP 18165).
    • Symptoms: Systems with no console output devices were hanging towards the end of the boot process (prior to OS handoff).
    • Details: Some of the global variables used by console splitter implementation of Simple Text Output protocol were initialized once first physical console output device is detected, which was never happening on a headless system.
      The console splitter is updated to properly initialize the globals when no actual console output devices are available.
    • File modified: ConSplit.c
  • Order of legacy devices within BBS group is reset when configuration changes(EIP 16566).
    • Symptoms: Order of legacy devices within BBS group was sometimes reset when bootable devices were added (enabled) or removed (disabled).
      Here is one of the ways to reproduce the problem:
      1. Make sure the following bootable devices are plugged into the system:
        • Bootable network device (onboard or offboard)
        • USB flash drive emulated as hard drive
        • IDE or SATA hard drive
      2. Boot to setup.
      3. Enable PXE boot using "Lunch PXE OpRom" option on the "Advanced" page.
      4. Save the settings, reboot the system, and enter the setup.
      5. On the "Boot" page, update "Hard Driver BBS Priorities" to set USB drive as a first boot device.
      6. Disable PXE boot using "Lunch PXE OpRom" option on the "Advanced" page.
      7. Save the settings, reboot the system, and enter the setup.
      8. Enter "Hard Driver BBS Priorities" menu on the "Boot" page. USB drive priority has been reset( it is no longer the first boot device).
    • Details: BDS used index within BBS table to match saved priorities with available boot devices. (See Boot options section for more details regarding boot options storage format). However, when list of boot devices changes, BBS index may also change. For example, when network boot is enabled, boot option for a network device is inserted into the BBS table prior to the USB drive boot option. As a result, index of the USB drive boot option increases by one and matching against saved boor priority fails.
      BDS code is updated to save more information about legacy boot devices. For every legacy boot device BDS saves checksum of the device name into the NVRAM (along with device index). When index matching fails, BDS uses saved checksum to find updated BBS index of the boot option.
    • File modified: Bds.c
  • Minor bug fixes
    • Reflash.c: Buffer size is initialized before call to GetVariable
    • Partition.c: Bug fix in the DriverBindingStop function. The stop function was unconditionally closing disk I/O protocol. The protocol should only be closed when no child devices exist.

Upgrade from Core 4.6.3.4

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.

Version 4.6.3.4 - 11/03/2008

New features
 Bug fixes
 Upgrade from Core 4.6.3.3

Requires upgrade of:

None of the modules outside Core/Core Sources need to be upgraded

New features

  • BDS Updates
    • UEFI Boot Options (EIP 15523).
      BDS updated to create and maintain boot options for UEFI OS installations from removable mass storage devices (FileSystem protocol based) and network devices (LoadFile protocol based).
    • Code to recreate deleted boot option for the built-in Shell is added (EIP 15524).
    • Processing of the DriverOrder list is added.
    • Files modified: Bds.c, BdsBoard.c, Bds.uni.
  • Minor Improvements
    • PciBus.c: Added possibility to use ROM BAR as incompatible PCI BAR.
    • PciHostBridge.c: Handling of the AdjustMmioOverlap North Bridge hook is updated to be compatible with Cores prior to 4.6.3.3 (EIP 17068).
    • AcpiRes.c, AcpiSupport.h: Support for EFI_ACPI_TABLE_VERSION_3_0 is added (LibGetDsdt function is updated).
    • PciBus.sd: Manufacturing defaults are defined for the setup questions.
    • CpuIoDxe.c: Support for usage of the protocol at runtime is added.
    • Core.mak, Rules.mak: Some of the build process warnings are eliminated.
    • Core.mak: Current debug mode is printed at the end of the build process.
    • TSE updated to version 1.26.1117.

Bug fixes

  • Blue screen during UEFI Vista SP1 installation (EIP 16990).
    • Symptoms: UEFI Vista SP1 installation was crashing with STOP error 0x0000001E towards the end of the installation (after system was restarted by the installer to complete the installation).
    • File modified: NvramDxe.c
    • Details: Bug fix in IndexUpdateVariable routine.
  • Hang at checkpoint 0xB2 on some systems(EIP 16990).
    • Symptoms: Some systems were hanging during CsmVideo driver startup (checkpoint 0xB2).
    • File modified: PciBus.c
  • Hang on systems without ACPI support during Super I/O initialization (EIP 16394).
    • Symptoms: ACPI component removal caused infinite loop in GenericSio.c when keyboard and mouse were on the same logical device.
    • File modified: GenericSio.c
  • NVRAM is not reset during BIOS Recovery (EIP 15931).
    • Symptoms: NVRAM was never reset during BIOS Recovery. Even when 'Reset NVRAM' setup option was enabled.
    • File modified: ReFlash.vfr
    • Details: The bug was caused by the wrong varstore passed into the callback routine.
      Form layout has been changed to make default varstore active when goto statement is reached.
  • Bug fixes in the Driver Binding Stop functions of some of the Core components.
    • Files modified: GenericSio.c, PciBus.c

Upgrade from Core 4.6.3.3

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.

Version 4.6.3.3 - 10/10/2008

New features
 Bug fixes
 Upgrade from Core 4.6.3.2

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
ACPI | Performance measurement infrastructure is added | 4.6.3.3_ACPI_25
Board | Support for a boot with minimal configuration is added | 4.6.3.3_Board_20
NB | PCI infrastructure updates | chipset specific
SB | NVRAM updates | chipset specific

New features

  • Performance measurement infrastructure is added
    • Description: Performance infrastructure allows to measure amount of time taken by individual modules as well as the overall boot process time.
      Performance measurements for PEI and DXE can be enabled using PEI_PERFORMANCE and DXE_PERFORMANCE SDL tokens. Once performance measurements are enabled, Core automatically logs time taken by entry points and start routines of the individual drivers. To measure individual code fragments the following macros can be used:
      In PEI:

        PEI_PERF_START(PeiServices, Token, FileHeader, Value)
        PEI_PERF_END(PeiServices, Token, FileHeader, Value)
      Where:
      PeiServices is a Pointer to the PEI Core Services table
      Token is a Pointer to Token Name ASCII String. Some predefined tokens are available in AmiLib.h
      FileHeader is a Pointer to the file header. Can be NULL.
      Value is a Time override value. The Value is typically 0.
      For example:

        PEI_PERF_START(PeiServices,S3RESUME_TOK,NULL,0);
        //.... S3 Resume code ....
        PEI_PERF_END(PeiServices,S3RESUME_TOK,NULL,0);
      In DXE:

        PERF_START(handle, token, host, ticker)
        PERF_END(handle, token, host, ticker)
      Where:
      Handle is a Handle to measure. Can be NULL.
      Token is a Token Name ASCII String. Some predefined tokens are available in AmiLib.h
      Host is a Host Name ASCII String. Can be NULL.
      Ticker is a Time override value. The Ticker is typically 0.
      For example:

        PERF_START(0, BDS_TOK, NULL, 0);
        //.... BDS code ....
        PERF_END(0, BDS_TOK, NULL, 0);
      Performance data is published into the runtime buffer prior to the boot to OS. The address of the buffer is saved into the PerfDataMemAddr NVRAM variable. If DEBUG_INFO switch is turned on, performance data will contain module name extracted from the debug information. Otherwise, performance data will contain module GUID.
      NOTE: This features requires upgrade of the ACPI module
      NOTE: This features is only available with Core Sources
    • Files modified: Protocol.cif, Foundation.cif, EfiPerf.h, PeiLib.h, CORE_DXESrc.cif, CORE_PEISrc.cif, AmiHobs.h, EfiLib.c, AmiDxeLib.h, Bds.c, BdsBoard.c, AmiVfr.h, Core.sdl, AmiPeiLib.h, PeiLib.c, AmiLib.h, DxeIpl.c, NvramPei.c, CoreSrc.sdl
    • Files added: Protocol/Performance.h, DxePerf.c, PeiPerf.c
    • File deleted: Core/Protocol/Performance.h
  • Support for a boot with minimal configuration is added.
    • Description: During boot with minimal configuration only console and boot devices are started.
      NOTE: Boot with minimal configuration is only supported for UEFI boot options. System will always boot with full configuration during boot to legacy OS.
      Boot with minimal configuration boot path is selected when IsFastBoot routine in BdsBoard.c returns TRUE. Default implementation of the IsFastBoot routine returns TRUE when at least one of the following conditions is satisfied:
      • Current boot mode is BOOT_WITH_MINIMAL_CONFIGURATION
      • Current boot mode is BOOT_ON_S4_RESUME
      • "Fast Boot" option is enabled in Setup
      NOTE: This features requires upgrade of the Board module
    • Files modified: Bds.c, BdsBoard.c
  • PCI infrastructure updates
    NOTE: This features requires upgrade of the NB module.
    Refer to section Core 4.6.3.3 North Bridge Update Instructions for more information.
    • PCI infrastructure has been updated to fully utilize PCI structures generated by the VeB PCI wizard.
    • Multiple host bridge porting using VeB PCI wizard.
    • Fixed Bus Allocation Support.
      Forces PCI Bus driver to program P2P bridges in accordance with bus numbers defined at build time using VeB PCI Wizard.
      Use PCI_FIXED_BUS_ASSIGNMENT SDL token to enable/disable the feature.
    • Single Root I/O Virtualization Support is added
      Use SRIOV_SUPPORT SDL token to enable/disable the feature.
    • Full bus range scanning support.
      Forces PCI Bus driver to scan ALL PCI buses in the bus range reported by the Root Bridge driver. When this feature is disabled, PCI bus driver will only scan consecutive PCI Buses spawn by the Root Bridge.
      Use PCI_SCAN_FULL_BUS_RANGE SDL token to enable/disable the feature.
    • Added support for UEFI 2.1 PCI requirements.
    • Added PCI_BUS_DEBUG_MESSAGES token to disable PCI Bus Driver Debug Messages.
    • Removed dependency from SETUP_DATA fields layout.
    • Support for S3 Video Repost.
    • PCI_4K_RESOURCE_ALIGNMENT SDL token.
      Forces PCI Bus driver to allocate at least 4K resource buffer for each resource request.
    • PCI Bus Driver Version is added to the PCI Setup Screen
    • Setup Option that controls priority of the OpROM types (UEFI/legacy) is added
    • Files modified: AcpiRes.c, PciE.h, PciIo.h, PciRootBridgeIo.h, PciBus.cif, PciBus.sdl, PciBus.mak, PciBus.sd, PciBus.uni, PciBusSetup.c, PciPort.c, PciBusIncludes.cif, PciBus.h, PciHostBridge.h, PciBusSrc.sdl, PciBus.c, PciHostBridge.c, PciBusSrc.mak
    • PCI Comliance test workarounds are added
    • Files added: PciSetup.h, PciBoard.asm, PciBusEx.h, PciBoard.h
  • NVRAM updates
    • Fault tolerant NVRAM garbage collection support is added.
      Use FAULT_TOLERANT_NVRAM_UPDATE SDL token to enable/disable (disabled by default).
      NOTE: This features requires upgrade of the Board module.
      NOTE: This features requires porting:
      Fault tolerant update requires reserved flash area of size NVRAM_SIZE used for back up during NVRAM garbage collection.
      The address of the area is defined by NVRAM_BACKUP_ADDRESS SDL token defined in Board.sdl.
      Size and Base addresses of other firmware volumes may need to be adjusted to free up space for the NVRAM back up area.
      Default ROM layout expects NVRAM back up area immediately below the main NVRAM area.
      For projects with the customized ROM layout Core.mak has to be updated.
    • Top level NVRAM function updated to be reentrance-safe.
      NOTE: This features requires upgrade of the SB module.
      Refer to section Core 4.6.3.3 South Bridge Update Instructions for more information.
    • Improved recovery from the flash programming failures and corruptions within NVRAM area.
    • More reliable non-fault tolerant garbage collection.
    • Preserve GUID within NVRAM variable record during garbage collection(EIP 15069)
    • Files modified: Nvram.h, NvramRead.c, NvramPei.c, NvramDxe.c, Nvram.mak, Tokens.c, Core.sdl, Core.mak
  • TSE updated to version 1.25.1116
  • IDE bus driver updates
    • In case of IDE device or IDE controller failure, DXE_IDE_DEVICE_FAILURE error is reported
    • AHCI_COMPATIBLE_MODE SDL token is added. The token can be used when AHCI support is required in OS and not required is BIOS. When this token is enabled, IDE driver works with devices that report PCI subclass 6 (SATA controller). When this token is disabled, IDE driver ignores such devices.
      NOTE: This features is only available with Core Sources
    • Improved debug messages
    • Files modified: AmiStatusCodes.h, IdeBus.c, IdeBusSrc.sdl
  • PS2 driver updates
    • Extended keys support is added(EIP 13630).
    • GetMouseData Function updated to reset the mouse in case the received packet is wrong. The failure was observed in TSE.
    • Implemented the Register/Unregister key notification functions of the SimpletextinEx protocol.
    • Files modified: Ps2Kbd.c, Mouse.c
  • IDE Recovery update
    • IDE Recovery code updated to support multiple IDE controllers.
    • File modified: IdeRecovery.c
  • Generic Super I/O driver update
    • Added support for Super I/O devices that do not need switching to the configuration mode in order to be programmed. For such devices EnterCfgMode and ExitCfgMode fields of the SPIO_LIST_ITEM structure can be NULL.
    • File modified: GenericSio.c
  • Console Splitter updates
    • Implemented the Register/Unregister key notification functions of the SimpletextinEx protocol.
    • Initialization of the StdErr and StandardErrorHandle system table fields is added.
    • Files modified: In.c, ConSplit.c
  • Support for the following compilers is added
    • Visual Studio 2008 (VC9) and Visual Studio 2008 Service Pack 1 (VC9SP1)
      VeB Tools Settings for the default installation path
      • Tools->Options->Tools Directories
        • C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
        • C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
        • C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
      • Tools->Options->Env Variables
        • CCX86DIR=C:\"Program Files"\"Microsoft Visual Studio 9.0"\VC\bin
        • CCX64DIR=C:\"Program Files"\"Microsoft Visual Studio 9.0"\VC\bin\x86_amd64
    • Windows Driver Kits (WDK 6001.18001)
      VeB Tools Settings for the default installation path
      • Tools->Options->Tools Directories
        • C:\WinDDK\6001.18001\bin\x86
        • C:\WinDDK\6001.18001\bin\x86\x86
      • Tools->Options->Env Variables
        • CCX86DIR=C:\WinDDK\6001.18001\bin\x86\x86
        • CCX64DIR=C:\WinDDK\6001.18001\bin\x86\amd64
    • Files modified: Rules.mak, x64Core.sdl
  • Minor Improvements
    • CORE_DXE.sdl: Graphic console color definitions are updated(EIP 15373)
    • AmiStatusCodes.h, StatusCodes.h: Status Codes for NB2 initialization are added (EIP 15573)
      NB2 - Supplemental NB (typically handles integrated graphics) employed on some systems where main NB (typically includes memory controller) is built into the CPU.
    • Core.mak: Delete ROM image at the beginning of the build process
    • Core.mak: Dependency list for $(BUILD_DIR)\SetupDefinitions.h target is created (the file used to be built during every build)

Bug fixes

  • Bug fix in FillPageTable library routine
    • Symptoms: Systems with x64 firmware and more than 4GB of memory were resetting during transition to DXE.
    • File modified: Memory.c
  • Minor build process bug fixes
    • Rules.mak: Rules.mak based build of the components with .efi file did not work(build process was stopping with the error).
    • Rules.mak: Component VFR files were compiled when HAS_RESOURCES was set to zero
    • Core.mak: AFTER_ROM target was not in the list of dependents of the target all
  • Bug fix in DPCut library routine
    • Symptoms: Assert in DPCut when parameter is end of device path node
    • File modified: EfiLib.c
  • Bug fixes in the PS/2 driver
    • Keypad central key was reported as '5' even when NumLock was off
    • Bug fix in KbdReset function(EIP 8330).
    • File modified: Ps2Kbd.c
  • NVRAM bug fixes
    • Occasional hanging at runtime
      • Symptoms: System was occasionally hanging during SetVariable call at runtime
      • Details: The system was hanging because of the bug introduced in the previous Core label. NvCompact routine that is intended for boot time use was called at runtime.
    • Some temporary buffers were not freed
    • File modified: NvramDxe.c
  • IDE bus driver bug fixes
    • Invalid error code (EFI_DEVICE_ERROR instead of EFI_NO_MEDIA) was returned for removable devices with no media(EIP 15310)
    • Delay during during media access on certain CD/DVD drives (EIP 15043)
    • Files modified: Atapi.c, IdeBusMaster.c
  • Bug fix in the Filesystem driver
    • Bug fix in the Open routine of the EFI_FILE protocol
    • File modified: Open.c
  • PCI Bus Driver Bug Fixes
    • Bug fix in the Attribute function
    • If device decodes only PFMMIO, Bridge MMIO Base and Limit register was initialized with 0 making it decode space 0…0x10000.
    • OptimizeBridgeResources function was not working correctly in some rare cases.
    • File modified: PciBus.c
  • Bug fix in HiiExtGetFormLabels() function.
    • File modified: HiiDb.c
  • BDS bug fixes
    • Support for systems with no console devices.
      If no console input or output devices are available, system table is populated with the fake ConIn/ConOut handles and protocol interface pointers. This prevents potential failures caused by the NULL pointers in the system table.
    • Early Console device initialization during the first boot(EIP 13459).
      During the very first boot after the firmware update, console devices were initialized towards the end of the boot.
      The logic has been updated to initialize default console devices at the beginning of the BDS connection cycle.
    • Serial Redirection could not be enabled, if it was disabled by default(EIP 15565)
    • File modified: Bds.c
  • Truncation of the User Access level warning during BIOS recovery(EIP 13077)
    • During BIOS Recovery the warning about flash update being disabled due to the user access level was truncated.
    • Files modified: Reflash.vfr, Reflash.uni
  • CORE_DXE bug fix
    • Symptoms: Hanging early in DXE phase on some systems
    • File modified: CORE_DXE\Image.c

Upgrade from Core 4.6.3.2

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade NB component in accordance with Core 4.6.3.3 North Bridge Update Instructions.
  • Upgrade SB component in accordance with Core 4.6.3.3 South Bridge Update Instructions.
  • Upgrade other modules based on upgrade requirements

Core 4.6.3.3 North Bridge Update Instructions

  • Add the following routine to NbPciCsp.c:

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
//
// Procedure:   HbCspMapRootBrgToHost
//
// Description:	Chipset specific function that returns Host Bridge Number for
//              the corresponded Root Bridge.
//
// Input:
//  IN PCI_BUS_XLAT_HDR*  RootBrgXlatHdr - Root Bridge XLAT table entry
//
// Output:
//      UINTN - Number of the Host Bridge that root bridge identified by RootBrgXlatHdr belongs to.
//
// Note:
//  THIS FUNCTION MUST BE PORTED FOR MULTI-HOST SYSTEMS
//
//  HOST bridge handle supports:
//    - ResourceAllocation Protocol (REQUIRED);
//    - RootHotplugControllerInitialization Protocol (OPTIONAL);
//    - PciPlatform Protocol (OPTIONAL).
//  ROOT bridge handle supports:
//    -PciRootBridgeIo Protocol (REQUIRED).
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
UINTN HbCspMapRootBrgToHost(IN PCI_BUS_XLAT_HDR *RootBrgXlatHdr){
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//

//Usually even server chipsets use only one PCI HOST abstraction
//but if  chipset has more than one HOST we have to specify
//which ROOT from PciBusXlat table belongs to which HOST.
    return 0;

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
}
  • Add the following function declaration to NbCspLib.h:

//-----------------------------------------------------------------------
//Chipset function that returns Host Bridge Number for the corresponding Root Bridge
UINTN HbCspMapRootBrgToHost(PCI_BUS_XLAT_HDR *RootBrgXlatHdr);

Core 4.6.3.3 South Bridge Update Instructions

  • Add the following routine templates to SbGeneric.c and port them

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Procedure:	SbLib_GetSmiState
//
// Description:	This function returns SMI state
//
// Input:		None
//
// Output:		TRUE - SMI enabled, FALSE - SMI disabled
//
// Note:        This function must work at runtime. Do not use boot time services/protocols
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
BOOLEAN SbLib_GetSmiState(VOID)
{
#if SMM_SUPPORT
#error Oops! You forgot to port me!
/** Porting required
    UINT32  SmiCtl = IoRead32 (PM_BASE_ADDRESS + 0x30) ;
    return (SmiCtl & BIT00)!=0;
**/
#else
    return FALSE;
#endif
}

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Procedure:	SbLib_SmiDisable
//
// Description:	This function disables SMI
//
// Input:		None
//
// Output:		None
//
// Note:        This function must work at runtime. Do not use boot time services/protocols
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
VOID SbLib_SmiDisable(VOID)
{
#if SMM_SUPPORT
#error Oops! You forgot to port me!
/** Porting required
    UINT32  SmiCtl = IoRead32 (PM_BASE_ADDRESS + 0x30) ;
//----------------------------------
    SmiCtl &= (~BIT01); //Mask OFF EOS bit
    IoWrite32 ( PM_BASE_ADDRESS + 0x30, SmiCtl & (~BIT00));
**/
#endif
}

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Procedure:	SbLib_SmiEnable
//
// Description:	This function enables SMI
//
// Input:		None
//
// Output:		None
//
// Note:        This function must work at runtime. Do not use boot time services/protocols
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
VOID SbLib_SmiEnable(VOID)
{
#if SMM_SUPPORT
#error Oops! You forgot to port me!
/** Porting required
    UINT32  SmiCtl = IoRead32 (PM_BASE_ADDRESS + 0x30) ;
//----------------------------------
    SmiCtl &= (~BIT01); //Mask OFF EOS bit
    IoWrite32 ( PM_BASE_ADDRESS + 0x30, SmiCtl | BIT00);
**/
#endif
}
  • Add the following function declaration to SbCspLib.h:

BOOLEAN SbLib_GetSmiState(VOID);
VOID SbLib_SmiDisable(VOID);
VOID SbLib_SmiEnable(VOID);

Version 4.6.3.2 - 4/22/2008

New features
 Bug fixes
 Upgrade from Core 4.6.3.1

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
SB | New IDE Controller Protocol | Chipset specific

New features

  • IDE Bus driver changes
    • New IDE Controller Protocol
      Protocol used for communication between IDE Bus Driver and IDE Controller Driver has changed.
      New protocol EFI_IDE_CONTROLLER_INIT_PROTOCOL is defined in IdeControllerInit.h.
      NOTE: This feature requires upgrade of the SB module (IDE Controller Driver in SbIde.c).
      It is not necessary to upgrade SB in the Intel mobile chipset based projects.
      If new SB module is not available, it is possible to revert to the old protocol by setting INTEL_IDE_PROTOCOL SDL token to zero (only supported with Core Sources).
      NOTE: INTEL_IDE_PROTOCOL SDL token and support of the old protocol will be removed in the future Core labels.
    • IDE Bus driver has been restructured. IDE Security support and SMART support are no longer part of the Core IDE component. They are separated into independent modules with the following locations:
      IDE Feature | Source Safe Location
      IDE Security | $/Alaska/SOURCE/Modules/HddSecurity
      SMART | $/Alaska/SOURCE/Modules/HddSmart
    • Files modified: IdeBus.cif, IdeBus.sdl, IdeBus.mak, PIdeBus.cif, PIdeBus.h, IdeBusSrc.cif, IdeBusSrc.sdl, IdeBus.h, IdeBus.c, IDEBusComponentName.c, Protocol.cif
    • File added: PAhciBus.h
    • File moved: PIdeBus.h moved from PIdeBus component to Protocol component
    • Files deleted: IDESMM.ffs, IDESMMx64.ffs, IdePort.c, IdeBus.uni, IdeBus.sd, IdeSMART.c, IdeSecurityServices.c
    • Module part deleted: IDESMM
  • Additional Status Codes Added
    • Core files updated to report progress/error codes
    • Files modified: AmiStatusCodes.h, StatusCodes.h, DxeMain.c, DxeProtocolNotify.c, AmiDxeInit.c, GenericSio.c, PciBus.c, NvramDxe.c, ReFlash.c, Recovery.c, IdeBus.c, Ata.c, Atapi.c, DxeIpl.c, Ps2Kbd.c, Kbc.c, Mouse.c
  • Build process changes
    • Support for VS2008 compiler/link is added
    • File modified: Build.mak
  • PS2 Controller driver changes
    • Improved Key State Reporting
    • Files modified: PS2Ctl.sdl, ps2kbd.c, ps2ctl.h, kbc.h, kbc.c, mouse.c, hotkey.c
  • Library changes
    • The following new routines have been added
      Routine | Description
      GetPowerOfTwo64 | Returns the value of the highest bit set in a 64-bit value
      ReadCr3 | Reads CR3 CPU register
      WriteCr3 | Writes to CR3 CPU register
      GetPageTableNumPages | Returns amount of memory in pages required for paging tables.
      FillPageTable | Fills page table
    • Files modified: AmiLib.h, Memory.c, IA32CLib.c, IA32AsmLib.asm, x64AsmLib.asm
  • TSE upgraded to version 1.24.1115
    • Added set cursor functionality for Post Management Protocol
    • Added Page Up and Page Down functionality for Post Management Protocol
    • Added GetCurPos as a mirror to SetCurPos.
    • Shift TAB now steps backward through the TSE date and time fields if TSE_USE_AMI_EFI_KEYCODE_PROTOCOL is ON.
    • Hpktool 1.17.1014.
    • Status/Error codes added.
  • Minor Changes in the following files:
    GenericSio.c, SimpleTextInEx.h, PciBusSrc.cif(PciBus.chm added), Setup.h

Bug fixes

  • TSE bug fixes
    • Fixed issues with variable scroll bar size
    • Numeric controls repaint their default values when defaults are loaded.
    • RESET_REQUIRED now works for all control types.
    • Stray Char issue and Scroll bar issues resolved.
    • Message Box size issue resolved.
    • Fix in Add/Delete boot option. No delete for legacy boot option.
    • Fix in password length verification logic.
    • Fix in Numeric control to hold 3 digit data when the data size is 1 byte.
  • ConIn Splitter fix
    • Symptoms: ReadKey occasionally returned wrong keys when multiple ConIn protocols (SimpleTexIn, SimpleTextInEx, AmiKeyCode) were used.
    • File modified: In.c
    • Details: CSReadEfiKey routine updated
  • PCI Resource Allocation fix (EIP 13074)
    • File modified: PciBus.c
    • Details: OptimizeBridgeResources routine updated
  • Bug fix in the NVRAM corruption recovery logic
    • Symptoms: NVRAM corruption was not properly detected
    • File modified NvramDxe.c

Upgrade from Core 4.6.3.1

  • Upgrade Core module.
    NOTE: Due to the fact that IDE protocol have been moved to a different module part, it is not enough to perform simple Component Update procedure.
    Remove old label of the Core component and then add new label of the Core component.
  • If your project contains Core Sources module, upgrade it.
    NOTE: Due to the fact that IDESMM modules part has been deleted, it is not enough to perform simple Component Update procedure.
    Remove old label of the Core Sources component and then add new label of the Core Sources component.
  • Upgrade other modules based on upgrade requirements

Version 4.6.3.1 - 3/4/2008

New features
 Bug fixes
 Upgrade from Core 4.6.3

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Board
  • Default NumLock state
  • Server Management Component Support
  • Core Build Number
 4.6.3.1_Board_19
CSM | Default NumLock state | 4.6.3.1_CSM.7.44_57

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if... | Minimal label required
USB | Build errors when CSM is removed | CSM-free ROM is required | 4.06.03_USB_08.07.15
SMM | Build errors when CSM is removed | CSM-free ROM is required | 4.6.0_SMM_26
CPU | Upgrade of the SMM module requires upgrade of the CPU module | CSM-free ROM is required | CPU label compatible with 4.6.0_SMM_26

New features

  • IDE Security improvements
    • More options are added to update the Master password revision
    • Support for a fixed HDD Master Password (determined during build time) is added.
    • Files modified: AmiStatusCodes.h, IdeBusSrc.sdl, IdeSecurityServices.c
  • Server Management Component Support
    • Description: Several minor changes have been done in order to support functionality of the Server Management component
      NOTE: For complete support of the Server Management component Board module upgrade is required.
    • Files modified: AmiStatusCodes.h, Bds.c
  • Flash update with User access level
    • Description: Recovery module is updated to disable flash update option during boot with the USER access level
    • Files modified: ReFlash.vfr, ReFlash.uni
  • Default NumLock state
    • Description: Setup control is added to set default NumLock state.
      NOTE: This feature requires upgrade of the Board and CSM modules
    • Files modified: Setup.h, ConSplit.c, In.c
  • Super I/O Device Detection
    • Description: Super I/O driver updated to probe devices before accessing them.
    • File modified: GenericSio.c
  • Core Build Number
    • Description: Core version is extended with core build number (CORE_BUILD_NUMBER SDL token). Build number is used to track bug fix Core versions.
      NOTE: This feature requires upgrade of the Board module
    • Files modified: Core.sdl, AmiDxeInit.c
  • Minor Improvements
    • Smm.h: IDT, GDT, and CR4 fields are added into EFI_SMI_CPU_STATE structure
    • Formatting changes(no code change) in the following files:
      HiiDb.c, Partition.cif, ElTorito.c, ElTorito.h, Gpt.c, Gpt.h, Mbr.c, Mbr.h, Partition.c, Partition.h
    • DevicePath.h: SATA_DEVICE_PATH_LENGTH macro added

Bug fixes

  • NVRAM bug fixes
    • Symptoms:
      • GetVariable/SetVariable crashed or returned EFI_NOT_FOUND after legacy boot event or in between calls to ExitBootServices and SetVartualAddressMap
      • During the first boot or boot with default configuration, updated value of the variable did not show up until system reset (GetVariable was returning old value)
      • In case of NVRAM corruption, NVRAM area was not automatically cleaned up
      • NvCompact did not properly handle first parameter being NULL
    • File modified: NvramPei.c, NvramDxe.c
  • DataHub record filtering.
    • Symptoms: Record filtering did not work (no records were returned) when FilterClass had more than one data class
    • File modified: DataHub.c
    • Details: The code was treating FilterClass parameter passed into RegisterFilterDriver routine as a specific class value. However, data hub specification defines this parameter as a bit map of requested data classes.
  • Bug fix in ConvertPointer routine.
    • File modified: Runtime.c
    • Details: FindDescriptor routine is updated.
  • Build errors when CSM is removed (EIP 10661).
    • Symptoms: Firmware did not build without CSM module
    • File modified: Bds.c, BdsBoard.c, PciBus.c, GenericSio.c
    • Details: Unconditional CSM dependencies have been removed from the Core files.
      NOTE: To remove CSM dependencies from the whole project USB and SMM (requires compatible CPU module label) modules have to be upgraded.
      Other modules may still have CSM dependencies.
  • PCI bus enumeration and resource allocation bug fixes
    • Symptoms:
      • The system was hanging if EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM allocation attribute was set for a root bridge. (This attribute is set, when the PCI root bridge does not support separate windows for nonprefetchable and prefetchable memory).
      • The resources were not properly assigned for certain PCI configurations.
      • RemainingDevicePath passed into the start routine was not properly handled for P2P bridges.
    • File modified: PciBus.c, PciBus.h, PciHostBridge.c, PciBus.sdl
    • Details: Bug fix in CalculateBrgResources, OprimizeBrgResources, and ApplyCrdPadding functions.
  • c:\UsbBotPeim_INIT_LIST.obj created during build process
    • Symptoms: When projects with UsbRecovery module were built UsbBotPeim_INIT_LIST.obj object file was created in the root of the disk instead of the project build directory.
    • File modified: Rules.mak
    • Details: DEST_DIR macro was used, which is not defined for a complex modules like UsbRecovery
  • Bug fix in Console splitter
    • Symptoms: Extended Simple Text In protocol published by console splitter did not work properly
    • File modified: In.c

Upgrade from Core 4.6.3

  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade other modules based on upgrade requirements

Version 4.6.3 - 10/26/2007

New features
 Bug fixes
 Upgrade from Core 4.6.2

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
Tools | Bug fixes in several tools. | 4.5.5_Tools_23

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if...
NB, SB | PCI-E ASPM Latency calculation | ASPM support is required
StatusCode, USB | Beep Enable/Disable SDL token | support for beep enable/disable switch is required

New features

  • SimpleTextInEx protocol support.
    • Description:
      SimpleTextInEx is a new extended version of console input protocol defined by UEFI 2.1 specification.
      In addition to SimpleTextInEx protocol Aptio also provides AmiKeyCode protocol. This protocol is an extended version of SimpleTextInEx that provides additional low level information about the key pressed.
    • Files modified: Protocol.cif, SimpleTextIn.h, SimpleTextInEx.h, ConSplit.c, ConSplit.h, In.c, Ps2Kbd.c, kbc.c, Ps2Ctl.h, Kbc.h
    • New files: AmiKeyCode.h
  • IDE Security support.
    • Description: IDE Security support provides ability to password protect any of the hard drives attached to the system.
    • Files modified: IdeSecurityServices.c, IdeBus.c, IdeBus.h, IdeBus.mak, IdeBus.cif, IdeBusSrc.sdl, IdeBus.sdl
    • New Files: IdePort.c, IdeBus.sd, IdeBus.uni
  • TSE Improvements. TSE Version: 1.23.1109
    • IDE security code moved to binary module (TSE sources are no longer required for IDE Security Support)
    • Support for EFI key password is added
    • Support for key modifiers is added
    • Support for CreatePopUp function of the Form Browser protocol is added.
  • PciBus improvements.
    • Intel recommendations of calculating EP Acceptable ASPM Latency have been implemented.
      NOTE: This feature relies on chipset specific SDL tokens published by NB and/or SB modules. Refer to section New Chipset Specific ASPM SDL tokens for a list of required tokens.
    • Workaround for non-PCI compliant devices(that report invalid size in 'PCIR' structure) has been added.
    • Files modified: PciBus.c, PciBus.h, PciBus.mak, PciBus.sdl
    • New files: PciPort.c
  • Graphic Console improvements.
    • Graphic Console driver is updated to support different graphical resolutions (used to be only 800 by 600)
    • SDL tokens are added in CORE_DXE.sdl to customize list of text modes
    • SDL tokens are added in CORE_DXE.sdl to customize color values(EIP: 9854)
    • File modified: GC.c, BdsBoard.c, CORE_DXE.sdl
  • Beep Enable/Disable SDL token.
    • SDL token BEEP_ENABLE is created to enable/disable all beep sounds produced by the firmware NOTE: Core just exposes the SDL token. The actual beeps are generated by other modules such as StatusCode and USB. These module have to be upgraded to support BEEP_ENABLE token.
    • Files modified: Core.sdl
  • Support for Boot Block update during recovery.
    • Recovery Flash Update module extended to support Boot Block update. Boot block update can be enabled or disabled using SDL token. In addition to that there is an SDL token that enables/disables checkbox on the recovery setup page that user can use to enable or disable boot block update.
    • Files modified: ReFlash.sdl, ReFlash.vfr, ReFlash.c, ReFlash.uni, ReFlash.h
  • Build process improvement. Support for FFS file alignment added
    • New build flag FFS_ALIGNMENT is added. The flag can be used to align FFS file data. The value of FFS_ALIGNMENT flag is used to initialize alignment attributes in the FFS file header. The following table defines supported FFS_ALIGNMENT values and corresponding file data alignment.
      FFS_ALIGNMENT | Data Alignment
      0 or not specified | no alignment requirements
      1 | 16
      2 | 128
      3 | 512
      4 | 1K
      5 | 4K
      6 | 32K
      7 | 64K
    • Files modified: ffs.mak, rules.mak
  • PEI Library improvement. FindFfsFileByName routine added.
    • New routine FindFfsFileByName added to PEI library. The routine searches for FFS file with specified type and name in all available firmware volumes.
    • Files modified: PeiLib.c, AmiPeiLib.h

Bug fixes

  • Build error when floppy controller is disabled.
    • Symptoms: Unresolved external symbols _FloppyCtrlEntryPoint build error in x64 mode, when FLOPPY_CTRL_SUPPORT SDL token is set to off.
    • Files modified: CORE_DXE.sdl
    • Details: eLink "FloppyCtrlEntryPoint," updated with dependency from FLOPPY_CTRL_SUPPORT SDL token
  • Build error in Windows 2000.
    • Symptoms: Build process stops with error during build of AMITSE module.
    • Files modified: AmiTse.mak
    • Details: The problem was caused by the difference in behavior of the del command in Windows 2000 and Windows XP. In Windows 2000 deletion of the file that does not exist returns error code 1, whereas in Windows XP error code 0 is returned.
  • Firmware hangs during NVRAM update with AFU(EIP issue 10518).
    • Symptoms: When AFU was used with label 4.5.3_SMIFLASH_06 of the SmiFlash module, firmware was occasionally hanging after NVRAM update. Preserve password feature of the SmiFlash module did not work.
    • Files modified: NvramDxe.c
    • Details: Bug fix in DxeNvramInit routine. NVRAM area descriptor was not properly reinitialized once NVRAM update is detected.
  • No boot devices in setup in NVRAM Simulation mode(EIP issue 10480).
    • Symptoms: No EFI Variables were available in NVRAM Simulation mode.
    • Files modified: NvramDxe.c
    • Details: NVRAM initialization routine is updated to properly handle simulation.
  • System with no bootable devices hangs after Setup.
    • Symptoms: System with no bootable devices attached and no built-in Shell became unusable after entering setup and saving the values. After reset system was hanging at AMITSE entry point.
    • Files modified: Bds.c
    • Details: BootOrder variable did not match LegacyDevOrder variable.
  • PciBus bug fixes.
    • Symptoms:
      • Resource allocation algorithm did not properly align resources for certain PCI configurations.
      • Bug fixes in ASPM logic.
    • Files modified: PciBus.c, PciBus.h
  • Bug fix in DListInsert library routine.
    • Files modified: EfiLib.c
    • Details: DListInsert implementation did not update Size field of the DLIST structure.
  • Portion of the Small Logo are on the screen after boot to Shell.
    • Symptoms: After boot to Shell big part of the small AMI logo stayed on the screen. It was only happening when two conditions were met: serial redirection was turned off and plug in card with the option ROM was connected to the system.
    • Files modified: ConSplit.c
    • Details: Console Splitter was updated to fix the issue.
  • System hang in SCT during Simple Text Output protocol testing
    • Symptoms: System was hanging in SCT during Simple Text Output protocol testing when "Enable Screen Output" SCT option was enabled.
    • Files modified: Out.c
    • Details: Console Splitter was updated to fix the issue.
  • Minor bug fix in GenericSio.c
    • Files modified: GenericSio.c
    • Details: Minor bug fix in AmiSioSupported routine.
  • Build errors with VC8 compilers
    • Symptoms: Aptio code did not compile with VC8 tools
    • Files modified: x64\ProcessorAsms.Asm, Tpl.c, Event.c, PciBus.c, PciHostBridge.c
    • Details: VC8 warnings and errors have been fixed.
  • TSE Bug fixes.
    • UGA Draw build error is fixed
    • Hanging when no boot options exist is fixed
  • Built-in EFI Shell boot option in recovery mode
    • Symptoms: Built-in EFI Shell boot option did not work in recovery mode
    • Files modified: Bds.c, BdsBoard.c
    • Details: EFI shell device path pointed to the in-flash firmware volume. However, in case of recovery shell is located in the in-memory firmware volume(recovery volume).
      Shell loading code is updated. It is now location independent.

Upgrade from Core 4.6.2

  • Download new version of Tools (label 4.5.5_Tools_23)
  • Upgrade Core module.
  • If your project contains Core Sources module, upgrade it.
  • If ASPM support is required, add New Chipset Specific ASPM SDL tokens.
  • If your project requires support for boot without beeps, upgrade StatusCode and USB modules.

New Chipset Specific ASPM SDL tokens

  • North Bridge tokens (replace "..." with the proper value):

TOKEN
    Name  = "NB_DMI_ASPM_SUPPORT"
    Value  = "..."
    Help  = "ASPM type supported by NB DMI Link as defined by chipset specification(DMI LINK CAP Register)\Supported values:\0 - ASPM is disabled; 1 - L0s Supported; 2 - invalid value; 3 - L0s and L1 Supported.\"
    TokenType = Integer
    TargetH = Yes
    Range  = "0, 1, 3"
End

TOKEN
    Name  = "NB_DMI_L0_EXIT_LATENCY"
    Value  = "..."
    Help  = "NB DMI Link L0s Exit Latency as defined by chipset specification (DMI LINK CAP Register). \Supported values:\0= 64ns or less; 1=64ns..128ns; 2=128ns..265ns; 3=256ns..512ns; 4=512ns..1ms; 5=1us..2us; 6=2us..4us; 7=4us or more;"
    TokenType = Integer
    TargetH = Yes
    Range  = "0..7"
End

TOKEN
    Name  = "NB_DMI_L1_EXIT_LATENCY"
    Value  = "..."
    Help  = "NB DMI Link L1 Exit Latency as defined by chipset specification (DMI LINK CAP Register).\Supported Values:\0= 1us or less; 1=1us..2us; 2=2us..4us; 3=4us..8us; 4=8us..16us; 5=16us..32us; 6=32us..64us; 7=64us or more;"
    TokenType = Integer
    TargetH = Yes
    Range  = "0..7"
End
  • South Bridge tokens (replace "..." with the proper value):

TOKEN
    Name  = "SB_DMI_ASPM_SUPPORT"
    Value  = "..."
    Help  = "ASPM type supported by SB DMI Link as defined by chipset specification(DMI LINK CAP Register)\Supported values:\0 - ASPM is disabled; 1 - L0s Supported; 2 - invalid value; 3 - L0s and L1 Supported.\"
    TokenType = Integer
    TargetH = Yes
    Range  = "0, 1, 3"
End

TOKEN
    Name  = "SB_DMI_L0_EXIT_LATENCY"
    Value  = "2"
    Help  = "SB DMI Link L0s Exit Latency as defined by chipset specification (DMI LINK CAP Register). \Supported values:\0= 64ns or less; 1=64ns..128ns; 2=128ns..265ns; 3=256ns..512ns; 4=512ns..1ms; 5=1us..2us; 6=2us..4us; 7=4us or more;"
    TokenType = Integer
    TargetH = Yes
    Range  = "0..7"
End

TOKEN
    Name  = "SB_DMI_L1_EXIT_LATENCY"
    Value  = "..."
    Help  = "SB DMI Link L1 Exit Latency as defined by chipset specification (DMI LINK CAP Register).\Supported Values:\0= 1us or less; 1=1us..2us; 2=2us..4us; 3=4us..8us; 4=8us..16us; 5=16us..32us; 6=32us..64us; 7=64us or more;"
    TokenType = Integer
    TargetH = Yes
    Range  = "0..7"
End

TOKEN
    Name  = "SB_INTERNAL_DELAY"
    Value  = "..."
    Help  = "SB Internal Delay as defined by chipset specification.\Supported Values:\0= 64ns or less; 1=64ns..128ns; 2=128ns..265ns; 3=256ns..512ns; 4=512ns..1ms; 5=1ms..2ms; 6=2ms..4ms; 7=4ms or more;"
    TokenType = Integer
    TargetH = Yes
    Range  = "0..7"
End

Version 4.6.2 - 09/05/2007

New features
 Bug fixes
 Upgrade from Core 4.6.1

Requires upgrade of:

Module | Reason for the upgrade | Minimal label required
ACPI
  • Boot Block size optimization. S3-related code removed.
  • UEFI 2.1 ACPI Table Protocol support added.
 4.6.2_ACPI_23
CSM | GetOptRom() function is extended with support for embedded(onboard) ROMs. | 4.5.3_CSM.6.37_51
USB | Upgrade of the CSM module requires upgrade of the USB module. | 4.05.03_USB_08.07.11
StatusCode | More Status Codes added. | 4.6.2_StatusCode_10
Board
  • Support for boot with alternative configurations is added.
  • NVRAM reset option is added.
  • TSE improvements.
 4.6.2_BOARD_16
Tools | TSE improvements. | 4.5.5_Tools_22

May require upgrade of:

Module | Reason for the upgrade | Upgrade required if...
CPU | Bug fix. Systemg hangs with more than 4GB of memory. | Project uses Intel CPU module (P4 or PB) and requires support of more than 4GB of memory.
NB | Bug fix. Systemg hangs with more than 4GB of memory. | Projects requires support of more than 4GB of memory and resource HOB for memory above 4GB is not created.
CPU | AmiHobs.h updates. | Projects uses AMD CPU module.

New features

  • Improvements of the debugging infrastructure
    • More flexible debug settings.
      Older cores used to have a predefined list of debug modes defined by DEBUG_MODE token. In this Core version, predefined debug modes are replaced with the set of switches that can be used to adjust individual debugging parameters.
      DEBUG_MODE token is preserved. However, it is no longer enumeration of the available debug modes. It is now used as a master flag that enables or disables all debugging capabilities (the only valid values are 0 and 1).
      Other aspects of the debugging process can now be fine tuned using the following set of new SDL switches:
      • OPTIMIZATION - controls compiler and linker optimization.
        When DEBUG_MODE is set to off, this switch is ignored and optimization is enabled.
      • DEBUG_INFO - controls generation of the debugging information that is used by Debuggers to provide source level debugging capability. When DEBUG_MODE is set to off, this switch is ignored and generation of the debugging information is disabled.
      • DEBUG_CODE - enables/disables compilation of the debugging code such as debugging messages, assert statements, and any code enclosed into
        #ifdef EFI_DEBUG ... #endif.
        When DEBUG_MODE is set to off, this switch is ignored and debugging code is disabled.
      The following table provides a mapping from the old DEBUG_MODE into new debugging switches.
      Old Debug mode | Description | OPTIMIZATION | DEBUG_INFO | DEBUG_CODE
      0 | No debugging(release mode) | 1 | 0 | 0
      1 | Full debugging | 0 | 1 | 1
      2 | Debug code only | 1 | 0 | 1
    • Support for independent debug settings for PEI modules is added.
      New SDL switch INDEPENDENT_PEI_DEBUG_SETTINGS is created.
      When DEBUG_MODE is off, this switch is ignored and all debugging capabilities are disabled.
      When DEBUG_MODE is on, this switch enables/disables independent set of debugging options for PEI modules.
      When this switch is set to on, debug setting for PEI modules are defined by PEI_OPTIMIZATION, PEI_DEBUG_INFO, and PEI_DEBUG_CODE SDL tokens,
      otherwise master debug setting defined by OPTIMIZATION, DEBUG_INFO, and DEBUG_CODE tokens are used.
    • Selective debugging capability added.
      Selective debugging allows to build group of modules with debug settings different from the settings defined by master debug switches and PEI debug switches.
      Selective debugging is enabled/disabled using SELECTIVE_DEBUGGING_SUPPORT SDL switch.
      When DEBUG_MODE is off, this switch is ignored and all debugging capabilities are disabled.
      Debugging settings for the selective debugging are defined by SELECTIVE_OPTIMIZATION, SELECTIVE_DEBUG_INFO, and SELECTIVE_DEBUG_CODE SDL tokens.
      Group of modules for the selective debugging is defined by the SELECTIVE_DEBUGGING eLink.
      To enable selective debugging for a particular module, add eLink with the module name as a child of SELECTIVE_DEBUGGING eLink. Module name is usually matches with the FFS file name. For example, create eLink SBPEI to enable selective debugging for SBPEI.ffs. However, there are several exceptions from the rule. For example, modules that can be distributed in binary format. If both source and binary are present in the project, selective debugging must be enabled for the source module. For example PCI bus source module has name PciBusSrc. By default module name is equal to the component RefName defined in the .cif file. Module name can be overwritten in the component make file.
    • Files modified: Core.sdl, Core.mak, Rules.mak, x64Rules.mak, AmiLib.h, PELoader.c, EfiLib.c
  • UEFI 2.1 ACPI Table Protocol support is added.
    • Description: ACPI Table is a new protocol defined in version 2.1 of the UEFI specification. Functionally of this protocol is very similar to the existing ACPI_SUPPORT protocol. ACPI_SUPPORT protocol is preserved for backward compatibility.
      NOTE: This feature requires upgrade of the ACPI module
    • Files modified: AcpiSupport.h
  • Boot Block size optimization. S3-related code removed.
    • Description: boot script related code removed from the boot block because it is not required during recovery boot path.
    • Implementation: Boot script files moved from PEI Core and DXE Core into ACPI module.
      NOTE: This feature requires upgrade of the ACPI module
    • Files modified: CORE_PEI.sdl, CORE_DXE.sdl, CORE_PEISrc.cif, CORE_DXESrc.cif, CORE_DXESrc.mak
  • More Status Codes added.
    • Description: List of reported status codes is significantly extended.
      AmiStatusCodes.h defines list of available status codes.
      In order to report progress/error codes in PEI include AmiPeiLib.h and use
      PEI_PROGRESS_CODE(PeiServices, _code_)
      and
      PEI_ERROR_CODE(PeiServices, _code_, _severity_)
      macros.
      In order to report progress/error codes in DXE include AmiDxeLib.h and use
      PROGRESS_CODE(_code_)
      and
      ERROR_CODE(_code_, _severity_)
      macros.
      _code_ is one of the codes listed in AmiStatusCodes.h
      _severity_ is one of: EFI_ERROR_MINOR, EFI_ERROR_MAJOR, EFI_ERROR_UNRECOVERED, EFI_ERROR_UNCONTAINED.
      Core files have been modified to report these new StatusCodes.
      Future labels of generic modules such as CSM, ACPI, will provide support for the new StatusCodes as well.
      Chipset porting engineers should upgrade their chipset modules to report the following status codes:
      CPU: PEI_CAR_CPU_INIT, PEI_CPU_INIT, PEI_CPU_CACHE_INIT, PEI_CPU_BSP_SELECT, PEI_CPU_AP_INIT, PEI_CPU_SMM_INIT, DXE_CPU_INIT
      NB: PEI_CAR_NB_INIT, DXE_NB_INIT, DXE_NB_SMM_INIT
      SB: PEI_CAR_SB_INIT, DXE_SBRUN_INIT, DXE_SB_INIT, DXE_SB_SMM_INIT, DXE_SB_DEVICES_INIT, DXE_RESET_SYSTEM
      NOTE: This feature requires upgrade of the StatusCode module
    • Files modified:
      New Status Code Definitions: AmiStatusCodes.h, StatusCodes.h
      Status Codes Reporting: Recovery.c, Runtime.c, MemoryServices.c, AmiPeiInit.c, DxeMain.c, Bds.c, NvramDxe.c, PciBus.c, PciHostBridge.c, ConSplit.c
  • NVRAM Implementation Improvements
    • Description: NVRAM code has been significantly changed to introduce the following improvements:
      • The code is chaned to always use the same amount of memory. Previous implementation allocated memory as needed, which caused occasional S4 problems. Plus S4 resume never worked during the very first boot after the firmware update.
      • Support for NVRAM defaults added.
        NVRAM image with the default values for the Setup variables is now generated by the build process. The image is generated by the HpkTool (included into AMITSE module part). In addition to standard Setup defaults it is also possible to generate manufacturing defaults. Support for the manufacturing defaults is disabled by default and can be enabled using MANUFACTURING_MODE_SUPPORT SDL token.
      • Support for boot with alternative configurations is added.
        Decision to switch to the alternative configuration (alternative set of values for NVRAM variables) is based on flag returned by the porting routine in OemPort.c. During boot with alternative configurations GetVariable service returns alternative values for the setup-related variables. Two alternative configurations are supported:
        • Boot with manufacturing settings(activated when IsMfgMode routine in OemPort.c returns TRUE). If variable does not have an alternative value for the manufacturing mode, current value is returned.
        • Boot with default settings(activated when IsDefaultConfigMode routine in OemPort.c returns TRUE). If default value for the variable is not available, EFI_NOT_FOUND is returned.
        NOTE: This feature requires upgrade of the Board module
        NOTE: The porting hooks described in this section are called very early, prior to execution of SBPEI and NBPEI modules. The implementation of the porting routines should not rely on any chipset-specific initialization (f.i. GP I/O initialization) performed by these modules.
      • NVRAM reset option is added.
        If porting routine IsResetConfigMode in OemPort.c returns TRUE in PEI phase, NVRAM content will be reset during initialization of the DXE NVRAM driver. During reset operation all setup-related variables are reset to their default values. All other variables are deleted.
        NOTE: This feature requires upgrade of the Board module
        NOTE: The porting hook described in this section is called very early, prior to execution of SBPEI and NBPEI modules. The implementation of the IsResetConfigMode routine should not rely on any chipset-specific initialization (f.i. GP I/O initialization) performed by these modules.
      • Detection of NVRAM update added.
        NVRAM implementation detects if NVRAM has been updated since the last NVRAM call. This provides ability to use variables services before and after firmware update.
        NOTE: NVRAM detection is not supported if in the new BIOS image NVRAM address and/or size is different from the current values.
      • Overall code clean up and simplification.
      • Core Sources are no longer required in order to use NV_SIMULATION option.
      • Platform Initialization Specification (PI) version 1.0 support.
        Support for a PI 1.0 compliant variable PPI is added. Old PPI is still preserved in this label for backward compatibility. New library routines PeiGetVariable and PeiGetNextVariableName are created in order to hide the differences between two PPIs. It is recommended to update existing code to use new library routines. Support of the old PPI may be dropped in the future versions of Core.
      • NVRAM is now packaged as a raw FFS file embedded into the standard FV (used to be non-standard FV with raw NVRAM image).
    • Validation: New NVRAM code has been validated using SCT and EFI version of Windows Server 2008
    • Files modified: Core.sdl, Core.mak, AmiPeiLib.h, PeiLib.c, ReadOnlyVariable.h, , Token.c, HpkTool.exe, AMITSE.mak, Setup.ini, NVRAM.sdl, NVRAM.mak, NVRAM.h, NVRAMRead.c, NVRAMPEI.c, NVRAMDXE.c
  • TSE improvements (see also TSE bug fixes)
    • Description: AMITSE version 1.23.1108
      • Support for multiple groups in Legacy device order is added
      • Added support for vfr compiler 1.88
      • Improved IDE security support
      • Support for generation of NVRAM image with Setup defaults
      • Added eLink-based hooks for Logo, Password management, Control Keys and Boot process customizations
      • AMIPostMgr protocol is extended with new routines (DisplayPostMessageEx, DisplayQuietBootMessage, DisplayMsgBox) that can be used to display different kinds of POST messages.
      • Added support for Legacy device name based on device path.
      • Added multi line support for ordered list.
      • Ordered list control is changed to correct invalid value in variables only on refresh of a page and not during initialization.
      • Added multi line support for subtitle and static text controls
      • Added Vareq support
      • Added support for dynamically parsing pages updated with UpdateForm
      NOTE: New version of AMITSE requires upgrade of the Board and Tools modules For more details regarding TSE features refer to Aptio TSE Porting Guide
    • Files Modified: Setup.h, Protocol.cif, AMIPostMgr.h(the file is moved from Core/em/AMITSE into Include/Protocol), AMITSE.cif, AMITSE.mak, AMITSE.sdl, AmiTSEStr.uni, commonoem.c, FakeTokens.c, MiniSetupLocal.lib, MiniSetupLocalx64.lib, setup.ini, CORE_DXESrc.mak, Bds.c
    • New Files: EfiOemBadging.h, AMIVfr.h, BootFlow.c, BootFlow.h, CommonOem.h, HookList.c, KeyMon.c, KeyMon.h, OemkeyHook.c
  • PCI component improvements.
    • Description:
      • PCI resource allocation algorithm has been improved to minimize amount of consumed address space.
      • PCI Configuration space access routines improved to split wide access operations into a series of smaller width operations if PCI root bridge does not support original width.
      • Added support for disabling VGA attributes for devices behind multiple bridges.
      • Added additional debug messages during installation of PCI I/O interfaces.
      • GetOptRom() function is extended with support for embedded(onboard) ROMs. The routine will discover embedded ROM and populate PciIo.OptionRom field.
        NOTE: This feature requires upgrade of the CSM and USB modules
      • AMI Debugger-related code is updated to enable Debugger in non-debug mode.
        NOTE: This feature will only work when project includes Core Sources; otherwise debug mode must be enabled in order to support AMI Debugger
      • NumBytes Field in PCI_ROOT_BRIDGE_MAPPING changed to NumPages, which better reflects field usage(it should be a page count because allocation requires alignment).
      • Minor change in PciBus.mak. Exlude PciBusSetup.c from the list of files compiled during PciBus and PciRootBridge build.
    • Files modified: PciBus.c, PciBus.h, PciHostBridge.h, PciBus.mak
  • Work in Progress
    NOTE: This section lists partially implemented features. Full support for these features will be provided by the future Core versions.
    • SimpleTextInEx protocol support.
      • Description:
        SimpleTextInEx is a new expended version of console input protocol defined by UEFI 2.1 specification.
        This Core version provides protocol definition header and SimpleTextInEx support for PS2 keyboard.
      • Files modified: Protocol.cif, Ps2Kbd.c, Ps2Ctl.h, Kbc.h
      • New files: SimpleTextInEx.h
    • IDE Security support.
      • Description: IDE Security support provides ability to password protect any of hard drives attached to the system.
      • Files modified: PIdeBus.h, IdeBusSrc.sdl, IdeBus.h, IdeBus.c, IdeSecurityServices.c, IdeSmm.sdl, IdeSmm.h,IdeSmm.c, IdeBus.sdl
    • TE Image Support
      • Description: TE (Tiano Executable) is an alternative to a traditional PE32/PE32+ image format. TE format is defined in PEI specification. PE32/PE32+ image has several headers with various information. Only small portion of this information is actually used by firmware code. TE image is created from the PE image by stripping out all PE headers and adding small TE header. which only contain information required to load and execute the image. TE image is about 400 bytes smaller then PE image.
      • Files modified: PELoader.c, FFS.mak, Rules.mak
  • Minor Improvements.
    • Core.sdl. FLOPPY_CTRL_SUPPORT and KBC_SUPPORT tokens updated. Dependencies from SIO_SUPPORT and ACPI_IA_BOOT_MODE tokens are added to disable Floppy and Keyboard controllers support on legacy free systems.
    • CORE_DXE.sdl. PS2CtlEntryPoint eLink updated. Dependency from PS2Ctl_SUPPORT token added.
    • GenericSio.h, GenericSio.c. Changes to support SIO Setup Data Override. Useful if SIO uses non-standard Setup Screens and Data Storage.
    • GenericSio.h, GenericSio.c. Support for SIO devices, which do not consume resources is added. Definition of SIO_RESOURCE_FLAG has changed. New SIO_NO_RES flag is created (value 0x80), which means that device does not use resources and just needs to be enabled.
    • ArchProtocol.cif, Foundation.cif Security.h header file that defines Security architectural protocol is moved from the Foundation to the ArchProtocol component.
    • IA32CLib.c, IA32AsmLib.asm: InitLongMode and EnableLongMode library routines are extended to support invocation of the x64 routine with 2 parameters
    • IdeBus.c: UpdateBaseAddress routine. In AHCI and RAID mode, PI register is ignored because controller is always in Native mode.
    • FloppyCtrl.sdl: Master flag dependency changed from SIO_SUPPORT to FLOPPY_CTRL_SUPPORT
    • Tiano.h: EFI_BREAKPOINT macro definition is changed not to use inline assembler
    • The following files have been cleaned up and/or reformatted to comply with AMI coding standards:
      No code has been changed: Decompress.c, UnicodeCollation.c, DiskIo.c, all files of the Partition component (partition.cif, partition.h , Eltorito.c, ElTorito.h, gpt.c, GPT.h, mbr.c, mbr.h, partition.c),
    • AmiLib.h: Bit definitions added
    • PCI.h: Definitions for standard PCI configuration space registers added
    • BootScript.h: Updated typecasts in macros where UINTN is needed.
    • AmiDxeLib.h, EfiLib.c (DXE library improvements):
      • GetBootMode routine is added. The routine can be used by DXE/EFI modules to get current boot mode.
      • TheImageHandle global variable is added. The variable is initialized in the InitAmiLib routine with the current image handle.
    • Recovery.sdl: Priority of recovery devices updated. Serial recovery moved to the end of the priority list.
    • Ps2Ctl.sdl: PS2MOUSE_SUPPORT and PS2KBD_SUPPORT tokens updated with dependency from PS2Ctl_SUPPORT.
    • Core.mak: Build process improvement. Two pseudo-targets AFTER_FV and AFTER_ROM are added. These targets can be used to add custom build steps towards the end of the build process.
      AFTER_FV - Use this target to execute your custom build steps after the firmware volumes are built and before the final ROM image is created.
      AFTER_ROM - Use this target to execute your custom build steps after the final ROM image is created.
      For example, to hook up custom target X to be executed at the end of the build process add
      AFTER_ROM : X
      or
      AFTER_FV : X
      into a make file, which defines target X.
    • PPI/SmBus.h: The file is modified to include EFI_PEI_SMBUS2_PPI GUID and structures as defined in Platform Initialization Specification version 1.0.
      Old EFI_PEI_SMBUS_PPI PPI is preserved for backward compatibility.
      NOTE: The core only provides PPI header file. The actual PPI implementation is part of the South Bridge module.
    • Core.mak: Support for ROM image size different from the flash device size.
      If ROM_IMAGE_SIZE SDL is defined it will be used as a ROM image file size, otherwise FLASH_SIZE token is used.
    • CORE_PEI/Image.c: Support for execution of the PEIMs from the firmware volumes in memory is added.
    • AmiHobs.h:
      • CPU specific definitions moved into a separate header file CpuHobs.h provided by the CPU module.
      • Additional CPU feature flags are added.
      NOTE: This feature requires upgrade of CPU module for projects based on AMD CPU module.
    • AmiLib.h: GetDebugDirectory routine declarations removed (it's a private routine used only by PELoader).
    • DataHub.c: LogData routine is updated. Code that initializes RecordSize field of the data hub record header is updated to include header size (the header size was excluded in the previous Core versions).
      DataHub specification is vague regarding the RecordSize field. It defines RecordSize as "Size of the data in the record in bytes". It's not clear if it should include or exclude the header size. In EDK DataHub implementation RecordSize includes the header. Aptio implementation is updated to comply with EDK implementation.

Bug fixes

  • EFI Longhorn S4 resume failure.
    • Symptoms: EFI Longhorn crashed during S4 resume with error screen prior to the call of ExitBootServices.
    • Tested with: Windows Server “Longhorn Beta 3 v6001-16510-070417-1740 for X64
    • Files modified: Page.c, Imem.h
    • Details:
      EFI Longhorn requires runtime memory consistency across S4 boot cycles. It means that runtime memory usage has to be exactly the same during regular boot and S4 resume boot. However, during S4 resume OS loader makes a lot of small memory allocations, which makes memory map much longer. This causes memory manager to allocate additional memory to store list of memory descriptors. The EDK code allocated runtime memory for that. The code changed to use boot time memory instead. The memory is only used during boot process so there is no need to use runtime memory.
      The fix has been taken from the EDK version Edk-Dev-Snapshot-20070803.
  • EFI Longhorn Server stop error 1E.
    • Symptoms: EFI Longhorn crashed during boot/installation with stop error (blue screen) 1E shortly after transitioning to ACPI mode
    • Tested with: Windows Server “Longhorn Beta 3 v6001-16510-070417-1740 for X64
    • Files modified: EfiLib.c
    • Details:
      Error in LibAllocCspResource routine. Routine ignored runtime attribute. As a result NVRAM flash area did not have virtual address mapping. The system crashed when NVRAM routines tried to access NVRAM area.
  • GetNextVariableName looping during runtime
    • Symptoms: GetNextVariable did not return EFI_NOT_FOUND when called with the Name/GUID of the last variable in OS-preset environment if the very first operation after OS boot was update of the existing NV variable.
    • Files modified: NvramRead.c
  • SCT hang during ComponentName protocol test
    • Symptoms: System hangs during test of the GetControllerName routine of the ComponentName protocol
    • Tested with: UEFI SCT Release Final Draft. Released on 04/28/2007
    • Files modified: IdeBusComponentName.c
    • Details:
      IdeBusCtlGetControllerName routine is updated to check if child controller handle is valid.
  • Uninitialized variable in FileSystem dirver
    • Files modified: VolFatHandler.c
    • Details: Uninitialized varaible FreeClusters in UpdateFreeSpace is initialized.
  • HII bug fixes
    • Symptoms: RemovePack and UpdateForm routines of the HII protocol did not work properly
    • Files modified: HIIDB.c
  • Ctrl+Alt+Del issue
    • Symptoms: Right Ctrl and Alt keys were "sticking" and causing reset when Ctrl-Alt-Del pressed sequentially rather than all at once.
    • Files modified: ps2kbd.c
  • Junk at the top and bottom of the screen in quiet mode with the 800 by 600 logo
    • Symptoms: In quiet mode with 800 by 600 logo once user entered setup or booted to shell, few lines from the logo remained at the top and bottom of the screen.
    • Details: The console splitter is updated to clear the screen when switching from graphics screen to text screen without mode switching
    • Files modified: Out.c
  • TSE Bug fixes (see also TSE improvements)
    • Fixed loss of focus when a control that is focused is either suppressed or grayed out
    • Fixed String control cant be activated
    • Fixed text controls not updating after language change
    • Bug fix in re-parsing forms with sub forms that changed during run time.
  • GenericSio.c. Changes to fix build issues when ACPI_SUPPORT is disabled.
  • System hangs with more than 4GB of memory.
    • Symptoms: When more than 4GB of memory installed system was hanging at checkpoint 0x60
    • Files modified: Page.c
      NOTE: For a complete support of more than 4GB of memory NB and/or CPU modules may need to be upgraded. Make sure your NB module creates Resource HOB for the memory above 4GB. Make sure your CPU module caches memory above 4GB (CPU must be upgraded in projects that use Intel CPU module).
    • Details:
      The problem was caused by the fact that memory above 4GB was used by DXE memory manager as a regular memory, which means it was allocated when drivers called AllocatePool or AllocatePages. Memory above 4GB cannot be used becausein IA-32 mode it is beyond processor address space and in x64 mode there are no virtual mapping tables for the memory above 4GB (the tables are not there due to performance reasons).
      Page.c was updated not to allocate memory above 4GB.
  • CAR base address was not properly detected on AMD platforms.
    • Symptoms: AMI Debugger did not work on AMD platforms.
      NOTE: In order to make AMI Debugger workable on AMD platform upgrade of chipset/CPU modules may be requires. Check with the chipset team for details.
    • Files modified: MemoryServices.c
    • Details:
      The original method used by PEI Core to calculate CAR top and bottom addresses assumed that CAR base address is aligned on CAR size boundary, which is not always the case. The algorithm has been changed to make it more flexible. The new calculation methods makes the following two assumptions:
      • CAR address and size are at least 1K aligned.
      • Not more than 1K of Stack is used by SEC phase.
      NOTE: New PI 1.0 spec provides a better solution. It expands SEC to PI hand off structure to explicitly pass CAR address. This fix will no longer be needed once PI support is added.
  • Loaded Image PPI bug fix.
    • Symptoms: ImageSize field of the Loaded Image PPI was not properly initialized for the modules executed from ROM.
    • Files modified: CORE_PEI/Image.c
  • Allocation of the FirmwareVendor field of the EFI_SYSTEM_TABLE.
    • Symptoms: FirmwareVendor field of the EFI_SYSTEM_TABLE was initialized with a pointer to boot time memory. However, this is a runtime field.
    • Files modified: AmiDxeInit.c. File updated to allocate runtime memory for the field.
    • Symptoms: Floppy boot option was not available is Setup, when project was built without Core Sources in x64 mode.
    • Files modified: FloppyCtrl.sdl, CORE_DXE.sdl
    • Details: FloppyCtrlEntryPoint eLink is moved from FloppyCtrl.sdl to CORE_DXE.sdl.

Upgrade from Core 4.6.1

  • Upgrade Core module.
    NOTE: Due to the fact that this Core label contains addition module part(TSEIncludes.cif), it is not enough to perform simple Component Update procedure.
    Remove old label of the Core component and then add new label of the Core component.
  • If your project contains Core Sources module, upgrade it.
  • Upgrade other modules based on upgrade requirements
After completion of the upgrade steps above, the project should be usable with the Core 4.6.2.
The following are additional recommended steps that has to be performed for a better integration with the new Core.
  • Modify chipset modules to add new status codes as defined in the Status Codes section.
  • Modify chipset PEIMS to replace explicit calls to READ_ONLY_VARIABLE_PPI with PeiGetVariable/PeiGetNextVariableName routines as described in the NVRAM Implementation Improvements section.

Version 4.6.1 - 4/20/2007

New features
 Known Issues
 Upgrade from Core 4.6.0

New features

  1. New Status Code Infrastructure.
    Requires new label of the StatusCode module (4.6.1_StatusCode_09).
    New StatusCode reporting macros added to library. The macros are to be used with status codes defined in AmiStatusCodes.h to report progress/error codes.
  2. PCI component improvements
    • Added support for multiple chipset resource tables (used to be only one table in NB module)
    • Added Chipset specific call to set RB Attributes
    Files modified: PciHostBridge.c, PciHostBridge.h
  3. Library improvements
    • LibAllocCspResource routine added.
      LibAllocateCspResource replaces AllocCspResource. AllocCspResource preserved for backward compatibility.
    • LibGetDsdt routine added
    Files modified: AmiDxeLib.h, EfiLib.c
  4. SCT bug fix. Disk I/O & Block I/O failure for CDROM device without media
    Files modified:
    • IdeBus.c: initialize block size by default with CDROM_BLOCK_SIZE for ATAPI devices
    • DiskIo.c: correct handling of media not present in ReadDiskIo
  5. Several files have been reformatted to comply with AMI coding standards
    Files modified: IdeBus.c, ps2kbd.c

Known Issues

  1. Installation of EFI version of Longhorn Server fails with stop error 1E

Upgrade From 4.6.0

  1. Update Core
  2. Update Status Code module (4.6.1_StatusCode_09)
  3. Update NB: Add dummy RbCspIoPciAttributes routine into NbPciCSP.c:

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
//
// Procedure:   RbCspIoPciAttributes
//
// Description:	Chipset Specific function to do PCI RB Attributes releated
//              programming.
//
// Input:
//  IN PCI_ROOT_BRG_DATA*                      Root Bridge private structure
//  IN PCI_ROOT_BRIDGE_MAPPING*                Mapping Info Structure this function must free.
//
// Output: EFI_STATUS
//      EFI_SUCCESS             - Successful.
//      EFI_INVALID_PARAMETER
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
EFI_STATUS RbCspIoPciAttributes(PCI_ROOT_BRG_DATA *RbData,
                                IN     UINT64	Attributes,
                                IN OUT UINT64	*ResourceBase OPTIONAL,
                                IN OUT UINT64	*ResourceLength OPTIONAL)
{

    EFI_STATUS 	Status=EFI_SUCCESS;
    return Status;
}
  4. Update NB: Add RbCspIoPciAttributes routine declaration into NbCspLib.h:

//-----------------------------------------------------------------------
//Chipset Specific function to Sets attributes for a resource range
//on a PCI root bridge.
EFI_STATUS RbCspIoPciAttributes(PCI_ROOT_BRG_DATA *RbData,
                                IN     UINT64	Attributes,
                                IN OUT UINT64	*ResourceBase OPTIONAL,
                                IN OUT UINT64	*ResourceLength OPTIONAL);
  5. Update NB: Update NbPciCSP.c. If you get error regarding unresolved extern symbol _gDxeSvcTbl change the code not to use gDxeSvcTbl. It it typically used in HbCspAdjustMemoryMmioOverlap routine. Update it as follows:
    1. Declare local variable: DXE_SERVICES *gDxeSvcTbl;
    2. Initialize it using the following call: LibGetDxeSvcTbl(&gDxeSvcTbl);
    3. Remove ASSERT(gDxeSvcTbl);
  6. Remove the following extern declaration from NbCspLib.h:
    extern DXE_SERVICES		*gDxeSvcTbl;
  7. Split gNbCspResTable into two tables. North Bridge table (gNbCspResTable) and South Bridge table (gSbCspResTable).
  8. Move gNbCspResTable table and gNbCspResCount variable from NbPciCSP.c to NBDXE.c. Add code into NBDXE entry point to reserve resources declared in the gNbCspResTable (make sure InitAmiLib is called prior to this call):

//Reserve NB resources. All None Existant Memory Space Must be converted to MMIO now
Status=LibAllocCspResource( gNbCspResTable, gNbCspResCount, ImageHandle, NULL);
  9. Create gSbCspResTable table and gSbCspResCount variable in SBDXE.c. Add code into SBDXE entry point to reserve resources declared in the gSbCspResTable(make sure InitAmiLib is called prior to this call):

//Reserve SB resources. All None Existant Memory Space Must be converted to MMIO now
Status=LibAllocCspResource( gSbCspResTable, gSbCspResCount, ImageHandle, NULL);

Version 4.6.0 - 4/18/2007

NOTE: Upgrade to this Core version from version 4.5.3 requires update of the following modules:
  • NB
  • CPU
  • ACPI
  • SMM
  • Board
  • Tools
Previous released version
  • 4.5.0
This version accumulates all the changes introduced since 4.5.0 and adds the following additional changes.
  1. BCP friendly EFI language variables initialization (information is extracted from HII packs).
  2. Separate PCI component created:
    • Component combines generic portion of PciRootBridge component and PCI bus driver. PciRootBridge driver is no longer required in the NB component.
    • Component introduces setup screen with PCI settings.
  3. Bug 7434 - When a (1) PATA and (1) SATA drive is connected to the SUT, and the IDE configuration is set to default: SATA-1st, PATA-2nd (Non-combined, Native). Then the SUT ignores and does not detect the secondary PATA drive or PATA CD-ROM.
  4. Bug 7419 - Overnight reboot test failed. The SUT reported 7590 reboot cycles on 03/27/07, but upon finding the system the next day, the machine was unable to pass POST and the ROM needed to be reflashed

Errata & Known Issues

  1. SCT test failed. 6 out of 6164 tests failed. The SCT report has been uploaded to the QA server. 4 errors were runtime services tests. SCT x64 version was run off of a SATA HDD
    • Runtime Services Test\Time Services Test 5.2.2.4.30 0 0 D3835A5C-B4BE-4F6C-ABF0-295252371406 FAIL - RT.SetWakeupTime - SetWakeupTime() disables the wakeup time with Enable is FALSE at EFI_TPL_APPLICATION.
    • Runtime Services Test\Time Services Test 5.2.2.4.32 0 0 FFAA1029-16AE-4D5C-BA74-8680F4BA9CD0 FAIL - RT.SetWakeupTime - SetWakeupTime() disables the wakeup time with Enable is FALSE at EFI_TPL_APPLICATION.
    • Runtime Services Test\Time Services Test 5.2.2.4.31 0 0 EB8730EC-578D-41B1-A2BE-4A9FF603DB22 FAIL - RT.SetWakeupTime - SetWakeupTime() disables the wakeup time with Enable is FALSE at EFI_TPL_CALLBACK.
    • Runtime Services Test\Time Services Test 5.2.2.4.33 0 0 8A70609A-AB54-475E-8DF2-C3F91158C4A8 FAIL - RT.SetWakeupTime - SetWakeupTime() disables the wakeup time with Enable is FALSE at EFI_TPL_CALLBACK.
    • Driver Model Test\Component Name Protocol Test 5.20.1.1.1 11 0 DE687A18-0BBD-4396-8509-498FF23234F1 FAIL - System hang in Driver Model Test\Component Name Protocol Test - GetControllerName_Conf 0x00010000
    • Bootable Image Support Test\Disk IO Protocol Test 5.7.4.1.4 1 0 B0D7A6E7-49F1-40D5-A929-1AD5D42770BF FAIL - EFI_DISK_IO_PROTOCOL.ReadDisk - ReadDisk() returns EFI_NO_MEDIA with no media present in the device

Version Beta-4.5.3 - 1/4/07

NOTE: Upgrade to this Core version requires update of the following modules:
  • Board
  • Flash (replace with Flash_Combined)
  • SmiFlash
  • CSM

  1. EFI Vista related bug fixes
  2. EFI Option ROM related bug fixes
  3. Improved UEFI 2.0 support: Graphics Output Protocol Support added
  4. 100 by 31 text mode support added
  5. Support for VC8 compiler added
  6. Support for DDK compiler added
  7. Support for reproducible binaries added

Version Beta-4.5.2 - 10/27/06

  1. Flash component upgraded to support switch to a virtual address space. Not backward compatible. (New function added)
  2. Bug fixes to support EFI OS in NVRAM and Runtime modules
  3. IDE driver updated to enable interrupts in the Exit Boot Services event handler (required by EFI Vista)
  4. Checkpoints on ExitBootServices and SetVirtualAddressMap added
  5. EIP issue 8522 fixed (Projects did not work without Core Sources)

Version Alpha-4.5.1 - 10/13/06

ALPHA version. Only basic testing has been performed.
  1. x64 Support
  2. Basic UEFI2.0 Support
    • UEFI2.0 infrastructure
    • CreateEventExt
    • QueryVariableInfo
    • Device Path Utilities Protocol
  3. Multilanguage Support

Version 4.5.0 - 9/06/06

Major Release
This Core 4.5.0 introduces several non-backward compatible changes.
Upgrade of the project to this Core version requires upgrade of most of the other project components
  1. Improved EDK support
    • EDK PeiMain and DxeMain modules Foundation (PEI&DXE Cores) updated to EDK 03.16.06
    • Headers with standard definitions updated to improve EDK compatibility.
  2. PCI Bus implementation has changed. Non-backward compatible.
    Requires update of pcirootbridge component (pcirootbridge is part of the nb component).
    New Features:
    • Support for EFI Framework PCI Host Bridge Resource Allocation Protocol added
    • Support for EFI Framework PCI Platform Protocol added*
    • Support for EFI Framework Hot Plug PCI Initialization Protocol added*
    • Generic PCI Express support added
    • Generic PCI-X(X2) support added
    • Generic HOT PLUG support added*
    • Additional debug messages added
    (*) - Only PCI Bus support added. Additional Chipset/Board support needed for the feature to be functional.
  3. Super I/O implementation has changed. Non-backward compatible.
    Require upgrade of Super I/O, ACPI and Serial Redirection modules.
    See AMI_SuperIO_Porting_Guide.doc for details.
    New Features:
    • Support for multiple Super I/O devices added
    • Super I/O Setup page added (Generic infrastructure. Porting is required).
    • ASL resource synchronization (PRS extracted from AML code)
    • Additional debug messages added
  4. Non-backward compatible change in EFI.h: Device Path Length changed from UINT16 to UINT8[2]. To fix compilation errors:
    • Direct references to ->Length must be replaced with NODE_LENGTH / SET_NODE_LENGTH macros (see EfiLib.c for examples).
    • Initialization of all variables of type EFI_DEVICE_PATH_PROTOCOL must be updated to add extra initializer and/or extra curly brackets
  5. ACPI headers changed to support ACPI 3.0. Non-backward compatible.
    • Requires global replacing of ACPI_HDR_20 with ACPI_HDR
  6. Compiler auto-detection (build process automatically detects compiler version and uses appropriate build flags).
    • VC6 or VC71 components are no longer needed and should be removed from the project.
    • "Build all" command for the project should be changed from "build all" to "build rebuild"
  7. New MY_INCLUDES macro is supported. It can be used instead of "CFLAGS=$( CFLAGS) /I1\2\3" to specify list of include directories
  8. Recovery Improvements:
    • IDE recovery support added
    • FAT32 support added
    • More generic calculation of the FV_MAIN offset within recovery BIOS image
    • Support for retries added (if recovery image not found, retry RECOVERY_SCAN_RETRIES times)

Known Issues

  • None

Version 4.00.00 - 01/09/06

  • First Release of Aptio4.

Known Issues

  • None


Release Notes - NDA Required

Component Information:
Component Title: AMI Board Information Driver
Component Reference Name: AmiBoardInfo
Component Type: ModulePart
Release Date: 2011-12-16
Source Control Label: 4651_AMI_BOARD_2.1.0
Source Control Location: SS: $/Alaska/BIN/Core/Modules/BoardInfo;

Dependencies
EFI Architecture Protocols
Non-Compiled BIN and LIB File(s) within this Component:
NONE
Component Description:
This SubComponent is a part of Aptio Core. It groups together AMI SDL AUTOGENERATED OUTPUT data used for Platform porting and provides it to all possible consumers of this information in a form of AMI_BOARD_INFO_PROTOCOL.
Filename | Description
AmiBoardInfo.cif | AmiBoardInfo Component Information File
AmiBoardInfo.c | AmiBoardInfo Driver Code
AmiBoardInfo.chm | Component CHM Help File
AmiBoardInfo.dxs | AmiBoardInfo dependency File
AmiBoardInfo.mak | Component MAKE file.
AmiBoardInfo.sdl | Component SDL file
PciBoard.c | File that groups AMI SDL generated OUTPUT Data

ModulePart Name: AmiBoardInfoIncludes
ModulePart Description: Allows locate AmiBoardInfo.h file in <\Include\Protocol> Folder.
Filename | Description
AmiBoardInfoIncludes.cif | SubComponent for Component Common Include files
AmiBoardInfo.h | AMI Board Info Protocol Definition.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_38, Dated: 2011-12-16
Visual eBios: RSS.VeB 5.72.0217, Dated: 2011-12-16
Compiler Tool(s): Microsoft Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
Added Nested FFS section to have BCP tool ipdate IRQ Routing info.
General Bug Fixes and EIP Addressed in this Label:
N/A
Files Changed for General Bug Fixes and EIP Addressed in this Label:
N/A
EIP Addressed
EIP #64425: New AMISDL output format for PCI IRQ
Known Limitations and Erratas in this label:
N/A
Remaining Issues:
N/A
Unit Testing:
Core Release procedure
Validation Testing:
Core Release procedure
Release History:
N/A

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: AMI Board Information Driver
Component Reference Name: AmiBoardInfo
Component Type: ModulePart
Release Date: 2011-12-16
Source Control Label: 4651_AMI_BOARD_2.1.0
Source Control Location: SS: $/Alaska/BIN/Core/Modules/BoardInfo;

Dependencies
EFI Architecture Protocols
Non-Compiled BIN and LIB File(s) within this Component:
NONE
Component Description:
This SubComponent is a part of Aptio Core. It groups together AMI SDL AUTOGENERATED OUTPUT data used for Platform porting and provides it to all possible consumers of this information in a form of AMI_BOARD_INFO_PROTOCOL.
Filename | Description
AmiBoardInfo.cif | AmiBoardInfo Component Information File
AmiBoardInfo.c | AmiBoardInfo Driver Code
AmiBoardInfo.chm | Component CHM Help File
AmiBoardInfo.dxs | AmiBoardInfo dependency File
AmiBoardInfo.mak | Component MAKE file.
AmiBoardInfo.sdl | Component SDL file
PciBoard.c | File that groups AMI SDL generated OUTPUT Data

ModulePart Name: AmiBoardInfoIncludes
ModulePart Description: Allows locate AmiBoardInfo.h file in <\Include\Protocol> Folder.
Filename | Description
AmiBoardInfoIncludes.cif | SubComponent for Component Common Include files
AmiBoardInfo.h | AMI Board Info Protocol Definition.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_38, Dated: 2011-12-16
Visual eBios: RSS.VeB 5.72.0217, Dated: 2011-12-16
Compiler Tool(s): Microsoft Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
Added Nested FFS section to have BCP tool ipdate IRQ Routing info.
General Bug Fixes and EIP Addressed in this Label:
N/A
Files Changed for General Bug Fixes and EIP Addressed in this Label:
N/A
EIP Addressed
EIP #64425: New AMISDL output format for PCI IRQ
Known Limitations and Erratas in this label:
N/A
Remaining Issues:
N/A
Unit Testing:
Core Release procedure
Validation Testing:
Core Release procedure
Release History:
N/A

© American Megatrends Inc.=======================-->


Release Notes - NDA Required

Component Information:
Component Title: FileSystem
Component Reference Name: FileSystem
Component Type: ModulePart
Release Date: 2011-03-29
Source Control Label: 4.6.5.0
Source Control Location: SS: Alaska;$/Alaska/Source/Core//Modules/FileSystem;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
This component supports reading and writing of storage media formatted with the FAT file system.
The FileSystem module contains the following files:

Filename | Description
Main Component | Root\Core\em\FileSystem
FileSystem.cif | Component information file for the ModulePart
FileSystem.mak | Make file becomes part of the BIOS build process
FileSystem.sdl | Contains BIOS build parameters of FileSystem driver.
FileSystem.h
 Headers, Definitions, Macros and Function Prototypes are defined in this File.
FileSystem.c | Installs the FileSystem driver protocol.
Open.c Handles the opening of volumes, the root directories of volumes, and individual files.
FileFatHandler.c | Handles file reading and writing.
Info.c | Handles translation of data between FAT standards and EFI_FILE_INFO.
DirectoryHandler.c
 Handles FAT directory structures.
VolFatHandler.c | Handles file allocation for open volumes.
MediaAccess.c | Handles media access via the Disk IO Protocol, and handles data caching.
FileSystemComponentName.c | File contains functions related to Component name producer of the FileSystem driver.

BIOS Parameters:
Parameter Name | Type | Description
FILESYSTEM_SUPPORT | Boolean | Switch to Enable/Disable FileSystem support.
DIRECTORTY_ENTRIES_CACHED | Integer | Indicate the number of Directory entries \that can be cached.
FAT_CACHE_SIZE | Integer | Specifiy the File Allocation Table cache size for each volume.
DIR_CACHE_SIZE | Integer | Specify the Directory Cache size for each volume.
AMI Build Tools:
Tools Label: 4.5.5_Tools_34, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
  • Improvement :EIP 28607
    Details : System was hanging for some time if Floppy Media removed while writing in meda in progress. EFI_TPL_CALLBACK priority level raised during media related calls.
    FilesModified: DiskIo.c, Info.c, MediaAccess.c, Open.c
  • Bug Fix: EIP 38291
    Symptoms: USB key is not returning file list as expected.
    Details:ReadFIleHandle was not resetting pointers when a directory read returned an error.
    Files Modified: Open.c
  • Bug Fix: EIP 49934
    Symptoms: The new EDKII shell was not displaying filesystem devices properly.
    Details: Root directory file name was "\", with a size of one. Shell expected a null name for the root directory.
    Files Modified: Open.c
  • Bug Fix: EIP 51705
    Symptoms: If the volume label is the same name as a directory or file, the directory or file cannot be accessed. Also, a new directory cannot be created with the same name as the volume.
    Details: The functions FindMatchingFH() and FindMatchingDirEntry() did not check for ATTR_VOLUME_ID.
    Files Modified: Open.c
  • Bug Fix: EIP 51754
    Symptoms: The shell "mv" command makes directories disappear.
    Details: Directories were not removed from cache when deleted.
    Files Modified: Info.c
  • Bug Fix: EIP 52430
    Symptoms: When a directory is moved, the long name of the old directory is not deleted.
    Details: Only the short name component was being deleted in SetFileInfo().
    Files Modified: Info.c
  • Bug Fix: EIP 54399
    Symptoms: SCT 2.3 fails Bootable Image Support Test\Simple File System Protocol.
    Details: Did not check for matching name when attempting to change file name.
    Files Modified: Info.c
Files changed for EIP fixes:
  • Core/EM/FileSystem/DiskIo.c (EIP 28607)
  • Core/EM/FileSystem/Info.c (EIP 28607, EIP 51754, EIP 52430, EIP 54399)
  • Core/EM/FileSystem/MediaAccess.c (EIP 28607)
  • Core/EM/FileSystem/Open.c (EIP 28607, EIP 38291, EIP 49934, EIP 51705)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

PS2Keyboard:

  1. Connect PS2 keyboard into PS2 connector.
  2. Boot the system.
  3. Keyboard gets detected and works properly in Setup and Shell.
PS2Mouse:

  1. Connect PS2 Mouse into PS2 connector.
  2. Boot the system.
  3. Mouse gets detected and works properly in Setup and Shell.
Release History:
4.6.5.0

  • Improvement: EIP 28607
    Details : System was hanging for some time if Floppy Media removed while writing in meda in progress. EFI_TPL_CALLBACK priority level raised during media related calls.
    FilesModified: DiskIo.c, Info.c, MediaAccess.c, Open.c.
  • Bug Fix: EIP 38291
    Symptoms: USB key is not returning file list as expected.
    Details:ReadFIleHandle was not resetting pointers when a directory read returned an error.
    Files Modified: Open.c
  • Bug Fix: EIP 49934
    Symptoms: The new EDKII shell was not displaying filesystem devices properly.
    Details: Root directory file name was "\", with a size of one. Shell expected a null name for the root directory.
    Files Modified: Open.c
  • Bug Fix: EIP 51705
    Symptoms: If the volume label is the same name as a directory or file, the directory or file cannot be accessed. Also, a new directory cannot be created with the same name as the volume.
    Details: The functions FindMatchingFH() and FindMatchingDirEntry() did not check for ATTR_VOLUME_ID.
    Files Modified: Open.c
  • Bug Fix: EIP 51754
    Symptoms: The shell "mv" command makes directories disappear.
    Details: Directories were not removed from cache when deleted.
    Files Modified: Info.c
  • Bug Fix: EIP 52430
    Symptoms: When a directory is moved, the long name of the old directory is not deleted.
    Details: Only the short name component was being deleted in SetFileInfo().
    Files Modified: Info.c
  • Bug Fix: EIP 54399
    Symptoms: SCT 2.3 fails Bootable Image Support Test\Simple File System Protocol.
    Details: Did not check for matching name when attempting to change file name.
    Files Modified: Info.c
4.6.4.1

  • Initial release with CHM added.


Release Notes - NDA Required

Component Information:
Component Title: FileSystem
Component Reference Name: FileSystem
Component Type: ModulePart
Release Date: 2011-05-05
Source Control Label: 4.6.5.1
Source Control Location: SS: Alaska;$/Alaska/Source/Core//Modules/FileSystem;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
This component supports reading and writing of storage media formatted with the FAT file system.
The FileSystem module contains the following files:

Filename | Description
Main Component | Root\Core\em\FileSystem
FileSystem.cif | Component information file for the ModulePart
FileSystem.mak | Make file becomes part of the BIOS build process
FileSystem.sdl | Contains BIOS build parameters of FileSystem driver.
FileSystem.h
 Headers, Definitions, Macros and Function Prototypes are defined in this File.
FileSystem.c | Installs the FileSystem driver protocol.
Open.c Handles the opening of volumes, the root directories of volumes, and individual files.
FileFatHandler.c | Handles file reading and writing.
Info.c | Handles translation of data between FAT standards and EFI_FILE_INFO.
DirectoryHandler.c
 Handles FAT directory structures.
VolFatHandler.c | Handles file allocation for open volumes.
MediaAccess.c | Handles media access via the Disk IO Protocol, and handles data caching.
FileSystemComponentName.c | File contains functions related to Component name producer of the FileSystem driver.

BIOS Parameters:
Parameter Name | Type | Description
FILESYSTEM_SUPPORT | Boolean | Switch to Enable/Disable FileSystem support.
DIRECTORTY_ENTRIES_CACHED | Integer | Indicate the number of Directory entries \that can be cached.
FAT_CACHE_SIZE | Integer | Specifiy the File Allocation Table cache size for each volume.
DIR_CACHE_SIZE | Integer | Specify the Directory Cache size for each volume.
AMI Build Tools:
Tools Label: 4.5.5_Tools_34, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
  • Bug Fix: EIP 58999
    Symtoms: Could not launch Shell from USB Filesystem device in Debug mode with latest Filesystem driver. An exception was generated.
    Details: The fix for EIP 28607 was using a fixed TPL value. The affected functions were modified to check for the higher of the fixed value and the current high level and use that.
    FilesModified: Info.c, MediaAccess.c, Open.c, FileSystem.h.
Files changed for EIP fixes:
  • Core/EM/FileSystem/FileSystem.h (EIP 58999)
  • Core/EM/FileSystem/Info.c (EIP 58999)
  • Core/EM/FileSystem/MediaAccess.c (EIP 58999)
  • Core/EM/FileSystem/Open.c (EIP 58999)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

Execute this SCT 2.3 test: Bootable Image Support Test \ Simple File System Protocol Test.
Perform reads and writes on several different FAT formatted media.
Release History:
4.6.5.1

  • Bug Fix: EIP 58999
    Symtoms: Could not launch Shell from USB Filesystem device in Debug mode with latest Filesystem driver. An exception was generated.
    Details: The fix for EIP 28607 was using a fixed TPL value. The affected functions were modified to check for the higher of the fixed value and the current high level and use that.
    FilesModified: Info.c, MediaAccess.c, Open.c, FileSystem.h.
4.6.5.0

  • Improvement: EIP 28607
    Details : System was hanging for some time if Floppy Media removed while writing in meda in progress. EFI_TPL_CALLBACK priority level raised during media related calls.
    FilesModified: DiskIo.c, Info.c, MediaAccess.c, Open.c.
  • Bug Fix: EIP 38291
    Symptoms: USB key is not returning file list as expected.
    Details:ReadFIleHandle was not resetting pointers when a directory read returned an error.
    Files Modified: Open.c
  • Bug Fix: EIP 49934
    Symptoms: The new EDKII shell was not displaying filesystem devices properly.
    Details: Root directory file name was "\", with a size of one. Shell expected a null name for the root directory.
    Files Modified: Open.c
  • Bug Fix: EIP 51705
    Symptoms: If the volume label is the same name as a directory or file, the directory or file cannot be accessed. Also, a new directory cannot be created with the same name as the volume.
    Details: The functions FindMatchingFH() and FindMatchingDirEntry() did not check for ATTR_VOLUME_ID.
    Files Modified: Open.c
  • Bug Fix: EIP 51754
    Symptoms: The shell "mv" command makes directories disappear.
    Details: Directories were not removed from cache when deleted.
    Files Modified: Info.c
  • Bug Fix: EIP 52430
    Symptoms: When a directory is moved, the long name of the old directory is not deleted.
    Details: Only the short name component was being deleted in SetFileInfo().
    Files Modified: Info.c
  • Bug Fix: EIP 54399
    Symptoms: SCT 2.3 fails Bootable Image Support Test\Simple File System Protocol.
    Details: Did not check for matching name when attempting to change file name.
    Files Modified: Info.c
4.6.4.1

  • Initial release with CHM added.


Release Notes - NDA Required

Component Information:
Component Title: FileSystem
Component Reference Name: FileSystem
Component Type: ModulePart
Release Date: 2012-05-21
Source Control Label: 4.6.5.4
Source Control Location: SS: Alaska;$/Alaska/Source/Core/Modules/FileSystem;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
This component supports reading and writing of storage media formatted with the FAT file system.
The FileSystem module contains the following files:

Filename | Description
Main Component | Root\Core\em\FileSystem
FileSystem.cif | Component information file for the ModulePart
FileSystem.mak | Make file becomes part of the BIOS build process
FileSystem.sdl | Contains BIOS build parameters of FileSystem driver.
FileSystem.h
 Headers, Definitions, Macros and Function Prototypes are defined in this File.
FileSystem.c | Installs the FileSystem driver protocol.
Open.c Handles the opening of volumes, the root directories of volumes, and individual files.
FileFatHandler.c | Handles file reading and writing.
Info.c | Handles translation of data between FAT standards and EFI_FILE_INFO.
DirectoryHandler.c
 Handles FAT directory structures.
VolFatHandler.c | Handles file allocation for open volumes.
MediaAccess.c | Handles media access via the Disk IO Protocol, and handles data caching.
FileSystemComponentName.c | File contains functions related to Component name producer of the FileSystem driver.

BIOS Parameters:
Parameter Name | Type | Description
FILESYSTEM_SUPPORT | Boolean | Switch to Enable/Disable FileSystem support.
DIRECTORTY_ENTRIES_CACHED | Integer | Indicate the number of Directory entries \that can be cached.
FAT_CACHE_SIZE | Integer | Specifiy the File Allocation Table cache size for each volume.
DIR_CACHE_SIZE | Integer | Specify the Directory Cache size for each volume.
AMI Build Tools:
Tools Label: 4.5.5_Tools_34, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
  • Bug Fix: EIP 87352
    Symtoms: FAT Direcotry Opean/Creation Issue.
    Details: If a directory open was attempted with EFI_FILE_MODE_CREATE set, check for existing directory was not done.
    FilesModified: Open.c.
Files changed for EIP fixes:
  • Core/EM/FileSystem/Open.c (EIP 58999)

Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

Execute this SCT 2.3 test: Bootable Image Support Test \ Simple File System Protocol Test.
Perform reads and writes on several different FAT formatted media.
Release History:
4.6.5.4

  • Bug Fix: EIP 87352
    Symtoms: FAT Direcotry Opean/Creation Issue.
    Details: If a directory open was attempted with EFI_FILE_MODE_CREATE set, check for existing directory was not done.
    FilesModified: Open.c.
4.6.5.3

  • No change

4.6.5.2

  • Bug Fix: EIP 75631
    Symtoms: If an application name includes a path, it won't run.
    Details: In the function ProcessOpenFileHandle(), the driver attempts to replace "\" in the path with a zero, but the code was one off, and the character past the "\" was being replaced.
    FilesModified: Open.c.
4.6.5.1

  • Bug Fix: EIP 58999
    Symtoms: Could not launch Shell from USB Filesystem device in Debug mode with latest Filesystem driver. An exception was generated.
    Details: The fix for EIP 28607 was using a fixed TPL value. The affected functions were modified to check for the higher of the fixed value and the current high level and use that.
    FilesModified: Info.c, MediaAccess.c, Open.c, FileSystem.h.
4.6.5.0

  • Improvement: EIP 28607
    Details : System was hanging for some time if Floppy Media removed while writing in meda in progress. EFI_TPL_CALLBACK priority level raised during media related calls.
    FilesModified: DiskIo.c, Info.c, MediaAccess.c, Open.c.
  • Bug Fix: EIP 38291
    Symptoms: USB key is not returning file list as expected.
    Details:ReadFIleHandle was not resetting pointers when a directory read returned an error.
    Files Modified: Open.c
  • Bug Fix: EIP 49934
    Symptoms: The new EDKII shell was not displaying filesystem devices properly.
    Details: Root directory file name was "\", with a size of one. Shell expected a null name for the root directory.
    Files Modified: Open.c
  • Bug Fix: EIP 51705
    Symptoms: If the volume label is the same name as a directory or file, the directory or file cannot be accessed. Also, a new directory cannot be created with the same name as the volume.
    Details: The functions FindMatchingFH() and FindMatchingDirEntry() did not check for ATTR_VOLUME_ID.
    Files Modified: Open.c
  • Bug Fix: EIP 51754
    Symptoms: The shell "mv" command makes directories disappear.
    Details: Directories were not removed from cache when deleted.
    Files Modified: Info.c
  • Bug Fix: EIP 52430
    Symptoms: When a directory is moved, the long name of the old directory is not deleted.
    Details: Only the short name component was being deleted in SetFileInfo().
    Files Modified: Info.c
  • Bug Fix: EIP 54399
    Symptoms: SCT 2.3 fails Bootable Image Support Test\Simple File System Protocol.
    Details: Did not check for matching name when attempting to change file name.
    Files Modified: Info.c
4.6.4.1

  • Initial release with CHM added.


Project Release Notes

Aptio FloppyCtrl Module Release Notes

Module Information:

Module location on Sourcesafe: SS: Alaska;$/Alaska/SOURCE/Core/CORE_DXE/FloppyCtrl;
Label: (INT)4.6.5.0_5
Date: 03/24/2011
Description: This module initializes the floppy controller and produces block IO protocol for floppy read and write access.

Section 1: New features added in this label:

  • None

Section 2: Bug Fixes:

  • None

Section 3: EIP addressed in this label:

  • None

Section 4: Files changed for EIP fixes:

  • None

Section 5: Known issues and limitations in this label:

  • None

Section 6: Remaining EIP Issues:

  • None

Testing:

  • None

Release History

  • (INT)4.6.5.0_5
    • First label which includes a CHM file.


Release Notes - NDA Required

Component Information:
Component Title: IdeBus
Component Reference Name: IdeBus
Component Type: ModulePart
Release Date: 2011-03-28
Source Control Label: 4.6.5.0
Source Control Location: SS: Alaska;$/Alaska/SOURCE/Core/Modules/IdeBus;
Component Description:
The IdeBus Module can be added to a EFI BIOS to support ATA/ATAPI device Detection and Enumeration.

The following files are included in IdeBus Source module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBusSrc.cif | Component information file for the eModule
IdeBusSrc.mak | Make file becomes part of the BIOS build process
IdeBusSrc.sdl | Contains BIOS build parameters
Ata.c | File that has Ata Controller services Related Functions and Routines
Atapi.c | File that has Atapi Controller services Related Functions and Routines
IdeBus.c | File that has Idebus Related Functions and Routines which Inits, Detects and Enumerates the Drives Connected to the Bus
IdeBus.h | File that has Headers, Definitions, Macros and Function Prototypes
IdeBusMaster.c | File that has IdeBusMaster services Related Functions and Routines
IdePowerManagement.c | File that has Related Functions and Routines to support Powermanagement
IdeHPA.c | File that has Related Functions and Routines to support HostProtectionArea
IDEBusComponentName.c | File related to Component Name Protocol Member Functions for IDE Bus
IdeBus has IdeBus Bin added to the Core Module. The following files are included in IdeBus Bin module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBus.cif | Component information file for the eModule
IdeBus.mak | Make file becomes part of the BIOS build process
IdeBus.sdl | Contains BIOS build parameters
IdeBusSrc.lib | Lib File that has library functions to be used in 32bit Build
IdeBusSrcx64.lib | Lib File that has library functions to be used in 64bit Build
IDEBusProtocol ModulePart | Root\Include\Protocol\IDEBusProtocol - Contains the header file that defines Disk information Protocol and related structures.
PIDEBus.cif | Component information file for the ModulePart
PDiskInfo.h | File that contains EFI_DISK_INFO_PROTOCOL and related definitions.
IDEBusBoard ModulePart | Root\Board\em\IdeBusBoard - Install and Initialize PLATFORM_IDE_PROTOCOL.
IdeBusBoard.cif | Component information file for the ModulePart
IdeBusBoard.c | Installs PlatformIdeProtocol Interface and Initializes it.
IDEBusBoardProtocol ModulePart | Root\Include\Protocol\IdeBusBoardProtocol - Contains the header file that defines Platform Ide Protocol and related structures.
IdeBusBoardProtocol.cif | Component information file for the ModulePart
IdeBusBoard.h | File that contains PLATFORM_IDE_PROTOCOL and related definitions.
BIOS Parameters:
IdeBusSource Parameters:
Parameter Name | Type | Description
IdeBusSrc_SUPPORT | Boolean | Switch to enable IdeBusSrc support in Project
IdeBus Bin Module Parameters:
Parameter Name | Type | Description
IdeBus_SUPPORT | Boolean | Switch to enable IdeBus support in Project
MASTER_SLAVE_ENUMERATION | Boolean | Switch to detect drive enumeration order
IDEBUSMASTER_SUPPORT | Boolean | Switch to enable ATA and ATAPI Bus master support
ATAPI_BUSMASTER_SUPPORT | Boolean | Switch to Enable/Disable ATAPI Bus master support
ACOUSTIC_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Acoustic Management support
IDE_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Power Management support
STANDBY_TIMEOUT | Integer | Standby Timeout value in MINUTE
ADVANCED_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Advanced Power Management support
ADVANCED_POWER_MANAGEMENT_LEVEL | Integer | Advanced Power Management Level value
POWERUP_IN_STANDBY_SUPPORT | Boolean | Switch to Enable Disable device spin up support
POWERUP_IN_STANDBY_MODE | Boolean | Switch to Enable Disable device spin-up
IDE_POWER_MANAGEMENT_INTERFACE_SUPPORT | Boolean | Switch to Install IDE power Management Interface
HOST_PROTECTED_AREA_SUPPORT | Boolean | Switch to Enable/Disable HOST Protected Area Interface
IDE_HP_SUPPORT | Boolean | Switch to Enable/Disable IDE Hot Plug support
AHCI_COMPATIBLE_MODE | Boolean | Switch to Enable/Disable AHCI Compatible mode
AMI Build Tools:
Aptio Tools Label: 4.5.5_Tools_34, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:

  • EIP : 41445
    Category - NEW FEATURE
    Description - Created SataPioDataOut and AtaPioDataOut protocol function that can accept additional input parameters.
    Files Modified - AhciBus.h, AhciBus.c, AhciController.c, Ata.c, IdeBus.c, IdeBus.h, IdeBusMaster.c,PAhciBus.h, PIdeBus.h
Files changed for EIP fixes:
  • Root\Core\eM\IdeBus\IdeBus.c (EIP #41445)
  • Root\Core\eM\IdeBus\IdeBus.h (EIP #41445)
  • Root\Core\eM\IdeBus\IdeBusMaster.c (EIP #41445)
  • Root\Core\eM\IdeBus\Ata.c (EIP #41445)
  • Root\Include\Protocol\PIdeBus.h (EIP #41445))
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:
IDE Hard Drive :

  1. Connect Hard Drive into IDE connector.
  2. Install and boot to OS.
  • Boot the system and Check hard drive is detected in Setup.
  • In Setup, make sure proper string of hard drive is displayed.
  • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
SATA Hard Drive :

  1. Connect Hard Drive into SATA connector.
  2. Enter into setup and configure the Hard drive as IDE mode
  • Boot the system, enter into Setup. In Chipset tab, there is a setup question "South Bridge Configuration".
  • Enter into it. There is one more sub setup question "SATA Configuration".
  • Enter into it. There is one more sub setup question "SATA Mode Selection" in that choose "IDE".
  • Save the setup and reset the system.
  • Install and boot to OS.
    • Boot the system and Check hard drive is detected in Setup.
    • In Setup, make sure proper string of hard drive is displayed in the corresponding SATA port.
    • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
    Release History:
    4.6.5.0

    IdeBusSource Changes:

    • EIP : 41445
      [Category] - NEW FEATURE
      [Description] - Created SataPioDataOut and AtaPioDataOut protocol function that can accept additional input parameters.
      [Files Modified] - AhciBus.h, AhciBus.c, AhciController.c, Ata.c, IdeBus.c, IdeBus.h, IdeBusMaster.c,PAhciBus.h, PIdeBus.h
    4.6.4.1

    IdeBusBin Changes:

    • New Feature : EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : IdeBus.sdl, IdeBusBoard ModulePart added.
    IdeBusSource Changes:

    • New Feature : EIP 30719
      Description : Support for the HDD with sector size more than 512bytes.
      FilesModified : Ata.c, IdeBus.c, IdeBusMaster.c
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Checked the Device Configuration Overlay feature set supported status before sending the DEV_CONFIG_FREEZE_LOCK.
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Feature and Sector Count values are reversed in the invocation of IdeNonDataCommand to set DEV_CONFIG_FREEZE_LOCK. Fixed Feature and Sector Count values.
    • New Feature: EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : All
    • Test Report:
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Enabled.
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Disabled.
      - Tested Ata,Atapi device detection in X64 and X32 build.
      - Installed and booted to EFI OS
      - Installed and Booted to Legacy OS.
      - Tested Platform: Sandybridge, Calpella, GreenCity
    4.6.4.0
    • EIP 11835
      Runtime Acoustic Level Configurability.
    • EIP 22135
      IDE Power Management Code Improvement.
    • EIP 30041
      Support of the Device Initiated Power Management (DipM) for SATA devices is added.
    4.6.3_IdeBusSrc_004

    • EIP:20630
      • If the Erase command timeout value is 0 or 255, wait for the Erase command completion without timeout value
    • EIP:21548
      • Odd Type information Saved in Atapi Device Structure.
    • Coding Standard and File header updated.


Release Notes - NDA Required

Component Information:
Component Title: IdeBus
Component Reference Name: IdeBus
Component Type: ModulePart
Release Date: 2011-05-02
Source Control Label: Binaries - 4.6.5.1; Sources - 4.6.5.1
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/IdeBus;4.6.5.1
Sources Source Control Location: SS:ALASKA;$/Alaska/Source/Core/Modules/IdeBus;4.6.5.1

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The IdeBus Module can be added to a EFI BIOS to support ATA/ATAPI device Detection and Enumeration.

The following files are included in IdeBus Source module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBusSrc.cif | Component information file for the eModule
IdeBusSrc.mak | Make file becomes part of the BIOS build process
IdeBusSrc.sdl | Contains BIOS build parameters
Ata.c | File that has Ata Controller services Related Functions and Routines
Atapi.c | File that has Atapi Controller services Related Functions and Routines
IdeBus.c | File that has Idebus Related Functions and Routines which Inits, Detects and Enumerates the Drives Connected to the Bus
IdeBus.h | File that has Headers, Definitions, Macros and Function Prototypes
IdeBusMaster.c | File that has IdeBusMaster services Related Functions and Routines
IdePowerManagement.c | File that has Related Functions and Routines to support Powermanagement
IdeHPA.c | File that has Related Functions and Routines to support HostProtectionArea
IDEBusComponentName.c | File related to Component Name Protocol Member Functions for IDE Bus
IdeBusSrc.chm | CHM file for the IdeBusSrc module part
IdeBus has IdeBus Bin added to the Core Module. The following files are included in IdeBus Bin module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBus.cif | Component information file for the eModule
IdeBus.mak | Make file becomes part of the BIOS build process
IdeBus.sdl | Contains BIOS build parameters
IdeBus.chm | CHM file for the IdeBus module part
IDEBusProtocol ModulePart | Root\Include\Protocol\IDEBusProtocol - Contains the header file that defines Disk information Protocol and related structures.
PIDEBus.cif | Component information file for the ModulePart
PDiskInfo.h | File that contains EFI_DISK_INFO_PROTOCOL and related definitions.
IDEBusBoard ModulePart | Root\Board\em\IdeBusBoard - Install and Initialize PLATFORM_IDE_PROTOCOL.
IdeBusBoard.cif | Component information file for the ModulePart
IdeBusBoard.c | Installs PlatformIdeProtocol Interface and Initializes it.
IDEBusBoardProtocol ModulePart | Root\Include\Protocol\IdeBusBoardProtocol - Contains the header file that defines Platform Ide Protocol and related structures.
IdeBusBoardProtocol.cif | Component information file for the ModulePart
IdeBusBoard.h | File that contains PLATFORM_IDE_PROTOCOL and related definitions.
BIOS Parameters:
IdeBusSource Parameters:
Parameter Name | Type | Description
IdeBusSrc_SUPPORT | Boolean | Switch to enable IdeBusSrc support in Project
IdeBus Bin Module Parameters:
Parameter Name | Type | Description
IdeBus_SUPPORT | Boolean | Switch to enable IdeBus support in Project
MASTER_SLAVE_ENUMERATION | Boolean | Switch to detect drive enumeration order
IDEBUSMASTER_SUPPORT | Boolean | Switch to enable ATA and ATAPI Bus master support
ATAPI_BUSMASTER_SUPPORT | Boolean | Switch to Enable/Disable ATAPI Bus master support
ACOUSTIC_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Acoustic Management support
IDE_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Power Management support
STANDBY_TIMEOUT | Integer | Standby Timeout value in MINUTE
ADVANCED_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Advanced Power Management support
ADVANCED_POWER_MANAGEMENT_LEVEL | Integer | Advanced Power Management Level value
POWERUP_IN_STANDBY_SUPPORT | Boolean | Switch to Enable Disable device spin up support
POWERUP_IN_STANDBY_MODE | Boolean | Switch to Enable Disable device spin-up
IDE_POWER_MANAGEMENT_INTERFACE_SUPPORT | Boolean | Switch to Install IDE power Management Interface
HOST_PROTECTED_AREA_SUPPORT | Boolean | Switch to Enable/Disable HOST Protected Area Interface
IDE_HP_SUPPORT | Boolean | Switch to Enable/Disable IDE Hot Plug support
AHCI_COMPATIBLE_MODE | Boolean | Switch to Enable/Disable AHCI Compatible mode
AMI Build Tools:
Aptio Tools Label: 4.5.5_Tools_35, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
IdeBusSource Changes:

  • EIP : 53710
    [Category] - NEW FEATURE
    [Description] - ATAPI ODD loading type information added into ATAPI device structure
    [Files Modified] - Atapi.c, Idebus.c, IdeBus.h
  • EIP : 58703
    [Category] - IMPROVEMENT
    [Description] - Implement correct behavior when RemainingDevicePath passed to Supported() function consist only of end node, as described in UEFI specification Version 2.3.1, page 10.1 EFI_DRIVER_BINDING_PROTOCOL.Supported() and Start()
    [Files Modified] - Idebus.c
  • EIP : 58686
    [Category] - IMPROVEMENT
    [Description] - Update implementation of EFI_BLOCK_IO_PROTOCOL as described in UEFI specification Version 2.3.1, page 12.8
    [Files Modified] - Idebus.c, Atapi.c, BlockIo.h
Files changed for EIP fixes:
  • Root\Core\eM\IdeBus\IdeBus.c (EIP #53710, #58703, #58686)
  • Root\Core\eM\IdeBus\IdeBus.h (EIP #53710)
  • Root\Core\eM\IdeBus\Atapi.c (EIP #53710, #58686)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:
IDE Hard Drive :

  1. Connect Hard Drive into IDE connector.
  2. Install and boot to OS.
  • Boot the system and Check hard drive is detected in Setup.
  • In Setup, make sure proper string of hard drive is displayed.
  • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
SATA Hard Drive :

  1. Connect Hard Drive into SATA connector.
  2. Enter into setup and configure the Hard drive as IDE mode
  • Boot the system, enter into Setup. In Chipset tab, there is a setup question "South Bridge Configuration".
  • Enter into it. There is one more sub setup question "SATA Configuration".
  • Enter into it. There is one more sub setup question "SATA Mode Selection" in that choose "IDE".
  • Save the setup and reset the system.
  • Install and boot to OS.
    • Boot the system and Check hard drive is detected in Setup.
    • In Setup, make sure proper string of hard drive is displayed in the corresponding SATA port.
    • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
    Test Report
    IdeBus driver Test Report
    Release History:
    4.6.5.1

    IdeBusSource Changes:

    • EIP : 53710
      [Category] - NEW FEATURE
      [Description] - ATAPI ODD loading type information added into ATAPI device structure
      [Files Modified] - Atapi.c, Idebus.c, IdeBus.h
    • EIP : 58703
      [Category] - IMPROVEMENT
      [Description] - Implement correct behavior when RemainingDevicePath passed to Supported() function consist only of end node, as described in UEFI specification Version 2.3.1, page 10.1 EFI_DRIVER_BINDING_PROTOCOL.Supported() and Start()
      [Files Modified] - Idebus.c
    • EIP : 58686
      [Category] - IMPROVEMENT
      [Description] - Update implementation of EFI_BLOCK_IO_PROTOCOL as described in UEFI specification Version 2.3.1, page 12.8
      [Files Modified] - Idebus.c, Atapi.c, BlockIo.h
    4.6.5.0

    IdeBusSource Changes:

    • EIP : 41445
      [Category] - NEW FEATURE
      [Description] - Created SataPioDataOut and AtaPioDataOut protocol function that can accept additional input parameters.
      [Files Modified] - AhciBus.h, AhciBus.c, AhciController.c, Ata.c, IdeBus.c, IdeBus.h, IdeBusMaster.c,PAhciBus.h, PIdeBus.h
    4.6.4.1

    IdeBusBin Changes:

    • New Feature : EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : IdeBus.sdl, IdeBusBoard ModulePart added.
    IdeBusSource Changes:

    • New Feature : EIP 30719
      Description : Support for the HDD with sector size more than 512bytes.
      FilesModified : Ata.c, IdeBus.c, IdeBusMaster.c
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Checked the Device Configuration Overlay feature set supported status before sending the DEV_CONFIG_FREEZE_LOCK.
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Feature and Sector Count values are reversed in the invocation of IdeNonDataCommand to set DEV_CONFIG_FREEZE_LOCK. Fixed Feature and Sector Count values.
    • New Feature: EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : All
    • Test Report:
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Enabled.
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Disabled.
      - Tested Ata,Atapi device detection in X64 and X32 build.
      - Installed and booted to EFI OS
      - Installed and Booted to Legacy OS.
      - Tested Platform: Sandybridge, Calpella, GreenCity
    4.6.4.0
    • EIP 11835
      Runtime Acoustic Level Configurability.
    • EIP 22135
      IDE Power Management Code Improvement.
    • EIP 30041
      Support of the Device Initiated Power Management (DipM) for SATA devices is added.
    4.6.3_IdeBusSrc_004

    • EIP:20630
      • If the Erase command timeout value is 0 or 255, wait for the Erase command completion without timeout value
    • EIP:21548
      • Odd Type information Saved in Atapi Device Structure.
    • Coding Standard and File header updated.


Release Notes - NDA Required

Component Information:
Component Title: IdeBus
Component Reference Name: IdeBus
Component Type: ModulePart
Release Date: 2011-12-07
Source Control Label: Binaries - 4.6.5.2; Sources - 4.6.5.2
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/IdeBus;4.6.5.2
Sources Source Control Location: SS:ALASKA;$/Alaska/Source/Core/Modules/IdeBus;4.6.5.2

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The IdeBus Module can be added to a EFI BIOS to support ATA/ATAPI device Detection and Enumeration.

The following files are included in IdeBus Source module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBusSrc.cif | Component information file for the eModule
IdeBusSrc.mak | Make file becomes part of the BIOS build process
IdeBusSrc.sdl | Contains BIOS build parameters
Ata.c | File that has Ata Controller services Related Functions and Routines
Atapi.c | File that has Atapi Controller services Related Functions and Routines
IdeBus.c | File that has Idebus Related Functions and Routines which Inits, Detects and Enumerates the Drives Connected to the Bus
IdeBus.h | File that has Headers, Definitions, Macros and Function Prototypes
IdeBusMaster.c | File that has IdeBusMaster services Related Functions and Routines
IdePowerManagement.c | File that has Related Functions and Routines to support Powermanagement
IdeHPA.c | File that has Related Functions and Routines to support HostProtectionArea
IDEBusComponentName.c | File related to Component Name Protocol Member Functions for IDE Bus
IdeBusSrc.chm | CHM file for the IdeBusSrc module part
IdeBus has IdeBus Bin added to the Core Module. The following files are included in IdeBus Bin module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBus.cif | Component information file for the eModule
IdeBus.mak | Make file becomes part of the BIOS build process
IdeBus.sdl | Contains BIOS build parameters
IdeBus.chm | CHM file for the IdeBus module part
IDEBusProtocol ModulePart | Root\Include\Protocol\IDEBusProtocol - Contains the header file that defines Disk information Protocol and related structures.
PIDEBus.cif | Component information file for the ModulePart
PDiskInfo.h | File that contains EFI_DISK_INFO_PROTOCOL and related definitions.
IDEBusBoard ModulePart | Root\Board\em\IdeBusBoard - Install and Initialize PLATFORM_IDE_PROTOCOL.
IdeBusBoard.cif | Component information file for the ModulePart
IdeBusBoard.c | Installs PlatformIdeProtocol Interface and Initializes it.
IDEBusBoardProtocol ModulePart | Root\Include\Protocol\IdeBusBoardProtocol - Contains the header file that defines Platform Ide Protocol and related structures.
IdeBusBoardProtocol.cif | Component information file for the ModulePart
IdeBusBoard.h | File that contains PLATFORM_IDE_PROTOCOL and related definitions.
BIOS Parameters:
IdeBusSource Parameters:
Parameter Name | Type | Description
IdeBusSrc_SUPPORT | Boolean | Switch to enable IdeBusSrc support in Project
IdeBus Bin Module Parameters:
Parameter Name | Type | Description
IdeBus_SUPPORT | Boolean | Switch to enable IdeBus support in Project
MASTER_SLAVE_ENUMERATION | Boolean | Switch to detect drive enumeration order
IDEBUSMASTER_SUPPORT | Boolean | Switch to enable ATA and ATAPI Bus master support
ATAPI_BUSMASTER_SUPPORT | Boolean | Switch to Enable/Disable ATAPI Bus master support
ACOUSTIC_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Acoustic Management support
IDE_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Power Management support
STANDBY_TIMEOUT | Integer | Standby Timeout value in MINUTE
ADVANCED_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Advanced Power Management support
ADVANCED_POWER_MANAGEMENT_LEVEL | Integer | Advanced Power Management Level value
POWERUP_IN_STANDBY_SUPPORT | Boolean | Switch to Enable Disable device spin up support
POWERUP_IN_STANDBY_MODE | Boolean | Switch to Enable Disable device spin-up
IDE_POWER_MANAGEMENT_INTERFACE_SUPPORT | Boolean | Switch to Install IDE power Management Interface
HOST_PROTECTED_AREA_SUPPORT | Boolean | Switch to Enable/Disable HOST Protected Area Interface
IDE_HP_SUPPORT | Boolean | Switch to Enable/Disable IDE Hot Plug support
AHCI_COMPATIBLE_MODE | Boolean | Switch to Enable/Disable AHCI Compatible mode
AMI Build Tools:
Aptio Tools Label: 4.5.5_Tools_35, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
IdeBusSource Changes:

  • EIP#66476 - IAtaPioDataOut fails for data write commands.

EIP addressed in this label:
IdeBusSource Changes:

  • EIP#77142 - Added the function 'IdeNonDataCommandExp' in the 'IDE_BUS_PROTOCOL' and removed the existing function 'IdeNonDataCommand' for supporting the upper 24bits of LBA.

  • EIP#55207 - Ide Bus Drive Component Name does not remove trailing spaces from drive name.

  • EIP#60503 - IAdded proper comment in InitAcousticSupport() function header.

  • EIP#62912 - Opal Security Definitions Should be Moved to PIDEBUS.h from StorageSecurityProtocol.h.

  • EIP#73260 - IDE Driver Follow the UEFI Driver Model as per the UEFI Spec. and STOP function was Verified.

  • EIP#73035 - Status used on line 2561, conditionally not set. Initilized to EFI_SUCCESS to avoid Junk values.

  • EIP#66476 - AtaPioDataOut fails for data write commands.

  • EIP#69295 - The Timeout values used by IDE and AHCI drivers are made as SDL tokens, so that the timeout values can be varied.

  • EIP#73941 - BufferSize is 0 , ReadBlock function should return EFI_SUCCESS without actual reading.

  • EIP#74607 - IoAlign values is 0 or 1 means that the buffer can be placed anywhere in memory. Otherwise, IoAlign must be a power of 2, and the requirement is that the start address of a buffer must be evenly divisible by 2 to the power of IoAlign with no remainder.

IdeBusBIN Changes:

  • EIP#56530 - EFI_IDE_CONTROLLER_INIT_PROTOCOL and EFI_DISK_INFO_PROTOCOL are used accordingly to the PI 1.2 spec.

  • EIP#69295 - The Timeout values used by IDE and AHCI drivers are made as SDL tokens, so that the timeout values can be varied.
Files changed for EIP fixes:
IdeBusSource Changes:

  • Root\Core\eM\IdeBus\IdeBus.c (EIP #55207, #60503, #62912, #73260, #73035, #69295, #77142)
  • Root\Core\eM\IdeBus\IdeBus.h (EIP #69295, #77142)
  • Root\Core\eM\IdeBus\Atapi.c (EIP #69295, #74607)
  • Root\Core\eM\IdeBus\Ata.c (EIP #66476, #69295, #73941, #74607, #77142)
  • Root\Core\eM\IdeBus\IdeBusMaster.c (EIP #69295)
IdeBusBIN Changes:

  • Root\Include\Protocol\PDiskInfo.h (EIP #56530 )
  • Root\Board\EM\IdeBusBoard\IdeBusBoard.c (EIP #69295)
  • Root\Include\Protocol\IdeBusBoard.h(EIP #69295)
  • Root\Include\Protocol\PIdeBus.h(EIP #77142)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:
IDE Hard Drive :

  1. Connect Hard Drive into IDE connector.
  2. Install and boot to OS.
  • Boot the system and Check hard drive is detected in Setup.
  • In Setup, make sure proper string of hard drive is displayed.
  • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
SATA Hard Drive :

  1. Connect Hard Drive into SATA connector.
  2. Enter into setup and configure the Hard drive as IDE mode
  • Boot the system, enter into Setup. In Chipset tab, there is a setup question "South Bridge Configuration".
  • Enter into it. There is one more sub setup question "SATA Configuration".
  • Enter into it. There is one more sub setup question "SATA Mode Selection" in that choose "IDE".
  • Save the setup and reset the system.
  • Install and boot to OS.
    • Boot the system and Check hard drive is detected in Setup.
    • In Setup, make sure proper string of hard drive is displayed in the corresponding SATA port.
    • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.

    Release History:
    4.6.5.2

    IdeBusSource Changes:

    • [TAG] - EIP77142
      [Category] - Improvement
      [Description] - Added the function 'IdeNonDataCommandExp' in the 'IDE_BUS_PROTOCOL' and removed the existing function 'IdeNonDataCommand' for supporting the upper 24bits of LBA.
      [Files] - IdeBus.c,Idebus.h,Ata.c,PIdeBus.h

    • [TAG] - EIP55207
      [Category] - Improvement
      [Description] - Ide Bus Drive Component Name does not remove trailing spaces from drive name
      [Files] - IdeBus.c

    • [TAG] - EIP60503
      [Description] - Added proper comment in InitAcousticSupport() function header
      [Files] - IdeBus.c

    • [TAG] - EIP62912
      [Category] - Improvement
      [Description] - Opal Security Definitions Should be Moved to PIDEBUS.h from StorageSecurityProtocol.h
      StorageSecurityProtocol.h included in OPAL security driver module will give build error when disabled without sdl token
      #if OpalSecurity_SUPPORT properly placed in Ahcibus and IdeBus drivers. But Bus driver should not depend on any tokens.
      For this reason need to move OPAL_SEC_INIT_PROTOCOL_GUID in Pidebus.h
      [Files] - IdeBus.c,Pidebus.h,OpalSecurity.cif,OpalSecurity.h,IdeOpalSec.c,AhciOpalSec.c

    • [TAG] - EIP73260
      [Category] - Improvement
      [Description] - IDE Driver Follow the UEFI Driver Model as per the UEFI Spec. and STOP function was Verified.
      [Files] - IdeBus.c

    • [TAG] - EIP73035
      [Category] - Improvement
      [Description] - Status used on line 2561, conditionally not set. Initilized to EFI_SUCCESS to avoid Junk values.
      [Files] - Idebus.c

    • [TAG] - EIP66476
      [Category] - Bug Fix
      [Severity] - Normal
      [Symptom] - AtaPioDataOut fails for data write commands
      [RootCause] - TempBuffer pointer has been assigned for both data read and write commands.
      [Solution] - TempBuffer pointer has to be assigned only for data read commands.
      [Files] - Ata.c

    • [TAG] - EIP69295
      [Category] - Improvement
      [Description] - The Timeout values used by IDE and AHCI drivers are made as SDL tokens, so that the timeout values can be varied.
      [Files] - IdeBusBoard.c, CORE_DXE.sdl, AhciSmm.h, AhciBus.h, IDESMM.h, Ata.c, Atapi.c, IdeBus.c, IdeBus.h, IdeBusMaster.c, IdeBusBoard.h

    • [TAG] - EIP73941
      [Category] - Improvement
      [Description] - BufferSize is 0 , ReadBlock function should return EFI_SUCCESS without actual reading.
      [Files] - Ata.c

    • [TAG] - EIP74607
      [Category] - Improvement
      [Description] - IoAlign values is 0 or 1 means that the buffer can be placed anywhere in memory. Otherwise, IoAlign must be a power of 2, and the requirement is that the start address of a buffer must be evenly divisible by 2 to the power of IoAlign with no remainder.
      [Files] - Ata.c, Atapi.c

    IdeBusBin Changes:

    • [TAG] - EIP56530
      [Category] - Improvement
      [Description] - EFI_IDE_CONTROLLER_INIT_PROTOCOL and EFI_DISK_INFO_PROTOCOL are used accordingly to the PI 1.2 spec
      [Files] - AhciBus.c, IdeControllerInit.h, PDiskInfo.h

    • [TAG] - EIP69295
      [Category] - Improvement
      [Description] - The Timeout values used by IDE and AHCI drivers are made as SDL tokens, so that the timeout values can be varied.
      [Files] - IdeBusBoard.c, CORE_DXE.sdl, AhciSmm.h, AhciBus.h, IDESMM.h, Ata.c, Atapi.c, IdeBus.c, IdeBus.h, IdeBusMaster.c, IdeBusBoard.h

    4.6.5.1

    IdeBusSource Changes:

    • EIP : 53710
      [Category] - NEW FEATURE
      [Description] - ATAPI ODD loading type information added into ATAPI device structure
      [Files Modified] - Atapi.c, Idebus.c, IdeBus.h
    • EIP : 58703
      [Category] - IMPROVEMENT
      [Description] - Implement correct behavior when RemainingDevicePath passed to Supported() function consist only of end node, as described in UEFI specification Version 2.3.1, page 10.1 EFI_DRIVER_BINDING_PROTOCOL.Supported() and Start()
      [Files Modified] - Idebus.c
    • EIP : 58686
      [Category] - IMPROVEMENT
      [Description] - Update implementation of EFI_BLOCK_IO_PROTOCOL as described in UEFI specification Version 2.3.1, page 12.8
      [Files Modified] - Idebus.c, Atapi.c, BlockIo.h
    4.6.5.0

    IdeBusSource Changes:

    • EIP : 41445
      [Category] - NEW FEATURE
      [Description] - Created SataPioDataOut and AtaPioDataOut protocol function that can accept additional input parameters.
      [Files Modified] - AhciBus.h, AhciBus.c, AhciController.c, Ata.c, IdeBus.c, IdeBus.h, IdeBusMaster.c,PAhciBus.h, PIdeBus.h
    4.6.4.1

    IdeBusBin Changes:

    • New Feature : EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : IdeBus.sdl, IdeBusBoard ModulePart added.
    IdeBusSource Changes:

    • New Feature : EIP 30719
      Description : Support for the HDD with sector size more than 512bytes.
      FilesModified : Ata.c, IdeBus.c, IdeBusMaster.c
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Checked the Device Configuration Overlay feature set supported status before sending the DEV_CONFIG_FREEZE_LOCK.
    • Bug Fix: EIP 38384
      Symptoms : Sytem will get halt with the P-ATA to S-ATA transfer card on APTIO 4.6.4.
      FilesModified : IdeBus.c
      Details : Feature and Sector Count values are reversed in the invocation of IdeNonDataCommand to set DEV_CONFIG_FREEZE_LOCK. Fixed Feature and Sector Count values.
    • New Feature: EIP 37748
      Description : Move all the IDEBus Source driver SDL token into IdeBus Bin Driver.
      FilesModified : All
    • Test Report:
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Enabled.
      - Tested Ata,Atapi device detection in EFI_IDE_PROTOCOL Disabled.
      - Tested Ata,Atapi device detection in X64 and X32 build.
      - Installed and booted to EFI OS
      - Installed and Booted to Legacy OS.
      - Tested Platform: Sandybridge, Calpella, GreenCity
    4.6.4.0
    • EIP 11835
      Runtime Acoustic Level Configurability.
    • EIP 22135
      IDE Power Management Code Improvement.
    • EIP 30041
      Support of the Device Initiated Power Management (DipM) for SATA devices is added.
    4.6.3_IdeBusSrc_004

    • EIP:20630
      • If the Erase command timeout value is 0 or 255, wait for the Erase command completion without timeout value
    • EIP:21548
      • Odd Type information Saved in Atapi Device Structure.
    • Coding Standard and File header updated.


Release Notes - NDA Required

Component Information:
Component Title: IdeBus
Component Reference Name: IdeBus
Component Type: ModulePart
Release Date: 2012-09-03
Source Control Label: Binaries - 4.6.3_IdeBus_06; Sources - 4.6.3_IdeBus_06;
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/IdeBus;
Sources Source Control Location: SS:ALASKA;$/Alaska/Source/Core/Modules/IdeBus;
Dependencies
Component Dependencies
N0NE

File Dependencies
N0NE

Protocol Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The IdeBus Module can be added to a EFI BIOS to support ATA/ATAPI device Detection and Enumeration.

The following files are included in IdeBus Source module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBusSrc.cif | Component information file for the eModule
IdeBusSrc.mak | Make file becomes part of the BIOS build process
IdeBusSrc.sdl | Contains BIOS build parameters
Ata.c | File that has Ata Controller services Related Functions and Routines
Atapi.c | File that has Atapi Controller services Related Functions and Routines
IdeBus.c | File that has Idebus Related Functions and Routines which Inits, Detects and Enumerates the Drives Connected to the Bus
IdeBus.h | File that has Headers, Definitions, Macros and Function Prototypes
IdeBusMaster.c | File that has IdeBusMaster services Related Functions and Routines
IdePowerManagement.c | File that has Related Functions and Routines to support Powermanagement
IdeHPA.c | File that has Related Functions and Routines to support HostProtectionArea
IDEBusComponentName.c | File related to Component Name Protocol Member Functions for IDE Bus
IdeBusSrc.chm | CHM file for the IdeBusSrc module part
IdeBus has IdeBus Bin added to the Core Module. The following files are included in IdeBus Bin module:
Filename | Description
Main Component | Root\Core\em\IdeBus
IdeBus.cif | Component information file for the eModule
IdeBus.mak | Make file becomes part of the BIOS build process
IdeBus.sdl | Contains BIOS build parameters
IdeBus.chm | CHM file for the IdeBus module part
IDEBusProtocol ModulePart | Root\Include\Protocol\IDEBusProtocol - Contains the header file that defines Disk information Protocol and related structures.
PIDEBus.cif | Component information file for the ModulePart
PDiskInfo.h | File that contains EFI_DISK_INFO_PROTOCOL and related definitions.
IDEBusBoard ModulePart | Root\Board\em\IdeBusBoard - Install and Initialize PLATFORM_IDE_PROTOCOL.
IdeBusBoard.cif | Component information file for the ModulePart
IdeBusBoard.c | Installs PlatformIdeProtocol Interface and Initializes it.
IDEBusBoardProtocol ModulePart | Root\Include\Protocol\IdeBusBoardProtocol - Contains the header file that defines Platform Ide Protocol and related structures.
IdeBusBoardProtocol.cif | Component information file for the ModulePart
IdeBusBoard.h | File that contains PLATFORM_IDE_PROTOCOL and related definitions.
BIOS Parameters:
IdeBusSource Parameters:
Parameter Name | Type | Description
IdeBusSrc_SUPPORT | Boolean | Switch to enable IdeBusSrc support in Project
IdeBus Bin Module Parameters:
Parameter Name | Type | Description
IdeBus_SUPPORT | Boolean | Switch to enable IdeBus support in Project
MASTER_SLAVE_ENUMERATION | Boolean | Switch to detect drive enumeration order
IDEBUSMASTER_SUPPORT | Boolean | Switch to enable ATA and ATAPI Bus master support
ATAPI_BUSMASTER_SUPPORT | Boolean | Switch to Enable/Disable ATAPI Bus master support
ACOUSTIC_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Acoustic Management support
IDE_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Power Management support
STANDBY_TIMEOUT | Integer | Standby Timeout value in MINUTE
ADVANCED_POWER_MANAGEMENT_SUPPORT | Boolean | Switch to Enable/Disable Advanced Power Management support
ADVANCED_POWER_MANAGEMENT_LEVEL | Integer | Advanced Power Management Level value
POWERUP_IN_STANDBY_SUPPORT | Boolean | Switch to Enable Disable device spin up support
POWERUP_IN_STANDBY_MODE | Boolean | Switch to Enable Disable device spin-up
IDE_POWER_MANAGEMENT_INTERFACE_SUPPORT | Boolean | Switch to Install IDE power Management Interface
HOST_PROTECTED_AREA_SUPPORT | Boolean | Switch to Enable/Disable HOST Protected Area Interface
IDE_HP_SUPPORT | Boolean | Switch to Enable/Disable IDE Hot Plug support
AHCI_COMPATIBLE_MODE | Boolean | Switch to Enable/Disable AHCI Compatible mode
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_39, Dated: 2012-01-04
Visual eBios: RSS.5.72.0220, Dated: 2012-01-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
EIP#88683 - EFI_ATA_PASS_THRU_PROTOCOL Support for Aptio IDE
EIP#97048 - ATAPI PassThru Support using EFI_EXT_SCSI_PASS_THRU_PROTOCOL.
General Bug Fixes and EIP Addressed in this Label:
IdeBusSource Changes:

EIP Addressed
EIP#88683 - EFI_ATA_PASS_THRU_PROTOCOL Support for Aptio IDE
EIP#97048 - ATAPI PassThru Support using EFI_EXT_SCSI_PASS_THRU_PROTOCOL.
EIP#92381 - A slip of pen in function IdeBusStart.
EIP#97113 - AtaPassThru - Module Enhancement.
Files Changed for General Bug Fixes and EIP Addressed in this Label:
IdeBusSource Changes:

EIP Addressed
Root\Core\eM\IdeBus\IdeBus.c (EIP #88683, #92381, #97113, #97048)
Root\Core\eM\IdeBus\IdeBus.h (EIP #88683)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
IDE Hard Drive :

  1. Connect Hard Drive into IDE connector.
  2. Install and boot to OS.
  • Boot the system and Check hard drive is detected in Setup.
  • In Setup, make sure proper string of hard drive is displayed.
  • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.
SATA Hard Drive :

  1. Connect Hard Drive into SATA connector.
  2. Enter into setup and configure the Hard drive as IDE mode
  • Boot the system, enter into Setup. In Chipset tab, there is a setup question "South Bridge Configuration".
  • Enter into it. There is one more sub setup question "SATA Configuration".
  • Enter into it. There is one more sub setup question "SATA Mode Selection" in that choose "IDE".
  • Save the setup and reset the system.
  • Install and boot to OS.
    • Boot the system and Check hard drive is detected in Setup.
    • In Setup, make sure proper string of hard drive is displayed in the corresponding SATA port.
    • Install Linux, Windows XP, Vista, and 7. After installation boot to all OS.


eModule Release Notes

AMIBIOS Component Release Notes

Component Information:
Component Name: PCIBus
Component Type: eModulePart
Release Date: 08/16/2010
Source Control Label: Binaries - 4640_PCIBUSBIN_24_0; Sources - 4640_PCIBUSSRC_24_0;
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core\Modules/PciBus;4640_PCIBUSBIN_24_0
Sources Source Control Location: SS:ALASKA;$/Alaska/BIN/Core\Modules/PciBus;4640_PCIBUSSRC_24_0
Component Description:
Pci Bus Sources Subcomponent (Part of "Core Sources" component)
Filename | Description
PciBusSrc.sdl | "PciBusSources" Module's SDL tokens file (modified by VeB)
PciBusSrc.mak | PCI Bus Sources Module MAK file (builds Module and all it's components)
PciBus.c | Main PCI Bus Driver file. It has Pci Bus Driver entry point and PciIo Protocol implementation.
PciHostBridge.c | Pci Root Bridge Driver file. Has Implementation of PciRootBridgeIo Protocol.
DeviceIo.c | Implementation of DeviceIo Protocol for compatibility sake. This protocol does not supported by UEFI anymore.
PCI Bus Subcomponent (Part of Core component)
Filename | Description
PciBus.sdl | "PciBus" Module SDL tokens file (modified by VeB)
PciBus.mak | "PciBus" Module MAK file (builds Module and all it's components)
PciBus.sd | "PciBus" Module Setup Definitions (SD) file (Provides PciBus Driver Setup Screen)
PciBus.uni | "PciBus" Module Setup Strings used by SD file.
PciBusSetup.c | "PciBus" Module Strings override routines to dynamically change Setup options.
PciPort.c | "PciBus" Driver porting file.
PciSetup.h | "PciBus" Driver Setup types definitions. Separates board specific setup data from Generic Pci Bus Driver code.
PciBoard.asm | Assembly Language file which includes all VeB auto-generated files.
PciBusSrc.lib | 32bit version of PciBus Library used to build final Driver Image.
PciBusSrcx64.lib | 64bit version of PciBus Library used to build final Driver Image.
PciPort.h | Definition file of available Porting Functions.
PciRootBridge.dxs | Dependency expression file for PCI Root Bridge Driver..
PciBusIncludes Subcomponent (Part of PCI Bus Component)
Filename | Description
PciBus.h | "PciBus" Driver private types and data definitions
PciHostbridge.h | "PciRootBridge" Driver private types and data definitions
PciBusEx.h | PCI Bus Extended Protocol interface declarations and data types
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_34, Dated: 2010-10-06
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): WinDDK 7600.16385.1; DDK 3790.1830
General Information About this Label:
4650_PCIBUS_24_0
  • NewFeatures:
    • EIP48290:
    Added PCI_AMI_COMBINE_MEM_PMEM32 token that tells to map 32 bit sized PF MMIO BARs trough NON PF MMIO Bridge registers.
    Files: PciBus.c; PciBus.sdl;
    EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
  • Improvements
    • EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
    EIP45278:
    Changed default resource allocation algorithm to work more efficiently.
    Files: PciBus.c; PciHostBridge.c
    EIP49743:
    Workaround for devices which having Link Retrain bit "sticky".
    Files: PciBus.c
    EIP50097:
    Fixed issue when with PCI_FIXED_BUS_ASSIGNMENT==1 system was ASSERTING. Reason was that with complicated PCI structure next bridge XLAT entry that used to determine Subordinate bus #, selected incorrectly.
    Files: PciBus.c
    Removed Setup Option "Selectable DeEmphasis" since it is HwInit Bit.
  • Bug Fixes
    • EIP49743
    Incorrect initialization complicated PCI infrastructure wrong condition to breake {do while loop}.
    Files: PciBus.c
    EIP49743
    In the PcieCalcLatency(), the do-while loop condition have issue in this.
    It may be a condition when while loop in function PcieCalcLatency(), will never break.
    Files: PciBus.c
    Fixed bug in PcieCalcLatency() function. It was not calculating L1 latency correctly.
    Revision History:
    4640_PCIBUS_24_0
    Features and Bug Fixes:
    PciHostBridge.c
  • Updated CreateRootBusData to call HbCspDoesRootBrgExist to determine whether to updated the BusXlat table for the particular host device.
  • Updated ClaimMmioResources to use MMIO resources as-is if AllocType is set to EfiGcdAllocateAddress. For this chipset, each root bridge is programmed with base and limit values for 32bit and 64bit MMIO. The root bridge will only decode addresses within these ranges. For this reason, the Base and Limit values passed to the PCI Bus driver should be used as-is and not modified.
    • PciBus.c
  • EIP 41687: The PciBus.c had workaround code for patching bad PCI or PCIe device list. Bad Pci list only could not cover device reource that requested more than one MMIO resources.
  • New Incompatibility Type Sypport: icBad64BitBar - Device has a bar that is 64bit capable, but the card does not function properly when it is allocated with an address above 4G.
  • Freeing all Memory when exiting with ERROR from EnumerateBus() function.
  • Fixed UEFI Option ROM Size miscalculation.
  • EIP 40554: Fixed WDK Build Issue.
  • EIP 38289: Minor fix for Klocwork Issues II.
  • Improved logic to select matching PCI Bus Xlat table entry.
  • Fixed condition to disable device using 64 bit resource threshold.
  • Fixed bug in DoubleCheckOpRom() when OpROM is a Single Image ROM.
  • Fixed build error with SRIOV token ON.
    • MPL Programming:
  • Bug fix in PcieProgramPayloadUp() function, canged order when recording calculated PayLoad.
  • It use to recursive call was made after reduced value of MPL was recorded. It was preventing function to program MPL correctly.
  • Fixed InitDevCahain() function Logic.
  • Fixed issue with PCIe Switches and MPL programming UP.
  • Fixed Possible issue with incorrect MPL Programming.
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • PciPort.c; PciPort.h
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • 4640_PCIBUS_24_0_TEST
    1. This Label is ONLY compatible with Core 4.6.4.0!
    2. This PCI Bus Driver Label also requires separately labeled Core.AmiBoardInfo Component and ACPI Module Label 32 or later.
    3. This label uses new, "C" style output of the AMI SDL. It is required update VeB and AMI SDL tool to version 5.68.0116 or Higher .
    4. In this label has competely redesigned an Algorithm used to initialize PCI Express Features including customers suggestions.
    5. Generic Support of PCI Express Base Specification ver. 2.1 was added.
    6. PCI Setup Screen was changed to separate PCI Express 1.1 Features and 2.1 (Generation 2).
    7. Label theoretically support ARI Forwarding... BUT No testing has been done since there are no ARI Hardware available yet.
    8. A generic Hot-Plug support also was improved in this label.
    9. PCI Root Bridge Driver uses information generated by VeB and some tokens from PciBus.sdl automatically produces MULTY ROOT infrastructure.
    10.When updating make sure you have followed update instructuins from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    11.New Chipset template will have all needed parts referenced in NEW ACPI ROOT Resource Allocation.
    Update Instructions
    1. Make sure your project has CORE 4640.
    2. Update AmiBoardInfo Sub Component with 4640_AMI_BOARD_0100.
    3. Get PCI Bus Driver Module From SS Label 4640_PCIBUSBIN_240_TEST.
    4 If your project has Sources: Get PCI Bus Driver Module From SS Label 4640_PCIBUSSRC_240_TEST.
    5. Verify that you have followed update instructuins from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    6. Enjoy!
    4636_PCIBUS_23_0_TEST
    New Features and Bug Fixes
    PciBus.c
    1. P2P Bridge Spec. v1.1 requires to set INT Line Register to 0xFF. PCI spec 3.0 require to set it to 0xFF - means not connected for x86 architecture. Values of 0..0x0F indicating IRQ0..15 values 0x10..0xFE reserved.
    2. Fixed (~0LU) statement to (0ULL). This is correct statement for 64 bit Value.
    3. Component Name protocol implementation is updated to support both Component Name and ComponentName2 protocols (based on value of the EFI_SPECIFICATION_VERSION SDL token).
    4. Fixed: EIP 19106 If 1 Bus set to be padded in Setup, PCI Bus driver still creates 1 BUS for this bridge instead of 2.
    5. Moved DisableBridgeDecoding() call before Disable device decoding since it could decode 0-4K of IO and 0-1M of Memory.
    6. Fixed conditions in ApplyAcpiResources() where function assumes validity of Resource Range. In case of Fixed Resource Allocation Resource window allocated by custom unction might be bigger than actual hardware resource request.
    7. Fixed EIP 26787. If P2P Bridge has Expansion ROM BAR, value that has to go there was programmed as Secondary Interface Forward Range.
    PciHostBridge.c
    1. Added Print out Message in DEBUG_MODE with PCI BUS Driver Version.
    2. Added Initialization of ImageHandle field in Host Bridge and Root Bridge Structures. (New PciHostBridge.h required).
    3. Generic support for multiple root bridges resources reporting to ACPI DSDT Root Bridge Object (EIP 23548 Support MMIO allocation above 4GB, if devices are capable).
    PciPort.c and PciPort.h
    1. Added infrastructure to ELINKs as porting Functions delivered from Platform and Chipset files. Now you can port PCI Bus driver without modifying Core files
    PciHostBridge.h
    1. Added definitions to support changes for EIP 23548 (Support MMIO allocation above 4GB).
    PciBus.sdl
    1. PCI Bus Driver Version Changes.
    2. Added Parenting eLinks "OEM_SKIP_PCI_DEVICE"; "OEM_PROGRAM_PCI_DEVICE"; "OEM_PCI_ATTRIBUTES". To implement PCI Bus Driver hooks invocation w/o modifying Generic Files.
    PciBus.mak Changes
    1. Added Definitions for OEM_PCI_PROGRAM_DEVICE_CALLBACK_LIST; OEM_PCI_SKIP_DEVICE_CALLBACK_LIST and OEM_PCI_DEVICE_ATTRIBUTES_LIST to support adding porting hooks trough eLinks.
    Update Instructions
    Get PCI Bus Driver Module From SS. If your Project has CORE Earlier than 4.6.3.6, You need to upgrade to Core 4.6.3.6. first. Please follow instructions listed in here in "Revision History" Section or CORE CHM.
    PCI Bus Driver Version 2.3.0 Assumes that following modules are present in the Project.
    1. AmiBoardInfo eModule Part (Part Of Core BIN Starting from "SS: Alaska;$/Alaska/BIN/Core\Modules/BoardInfo;4.6.3.6" )
    2. ACPI Module Label 32. Upgrade from earlier Module Possible by following Steps below:
    a)Get updated OSCM.ASL from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    b)Get New file RbRes.asl from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    c)Get Updated AMLUPD.ASL (Some place holders no longer needed)
    d)Make sure each implementation of ROOT PCI Object in ASL Like "PCI0" "PCI1"(usually it is Nb.asl and Nb2.asl) must include following:

        include("Core\\Em\\ACPI\\RbRes.ASL")
        include("Core\\Em\\ACPI\\OSCM.ASL")
    e)Make sure to comment out all related to ROOT BRIDGE _CRS Method Objects from OEM_DSDT.ASL.
    f)If your project uses multiple ROOT BRIDGEs and predefined resource splitting. Use following code as reference for implementation of Resource Allocating routine

    //-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                    PCI_ROOT_BRG_DATA *RootBrgData,
                                    UINTN RootBrgIndex)
{
    EFI_STATUS					Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here

    UINTN						i;
    ASLR_QWORD_ASD				*res;
    UINT64						a=0;
    UINT64						AddressLimit=0;
    DXE_SERVICES				*dxe;
    EFI_IOH_UDS_PROTOCOL  		*mIohUds; //Platform/Chipset Sapecifik interface provoding information about resource Split between Multiple ROOTs.
    EFI_GUID 					gEfiIohUdsProtocolGuid = EFI_IOH_UDS_PROTOCOL_GUID;

    // ported for two IOHs

  // koti : TO_DO : further improvement on resources based on setup options, if one IOH requires more than other and
    // Checking for error conditions on not to assign a more than qpi decode range.
    if (RootBrgIndex > (NUMBER_IOH_SOCKETS-1)) return Status;
    Status = pBS->LocateProtocol(
                            &gEfiIohUdsProtocolGuid,
                            NULL,
                            &mIohUds);
    ASSERT_EFI_ERROR (Status);
    if (EFI_ERROR(Status))
        return Status;

    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    //Feel out needed structures.
    if(RootBrgData->AcpiRbRes[raIo].Min==0){ //do it only ones
        RootBrgData->AcpiRbRes[raIo].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
        RootBrgData->AcpiRbRes[raIo].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
        RootBrgData->AcpiRbRes[raIo].Len=RootBrgData->AcpiRbRes[raIo].Max-RootBrgData->AcpiRbRes[raIo].Min+1;
        RootBrgData->AcpiRbRes[raIo].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit+1;
        RootBrgData->AcpiRbRes[raIo].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio32].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
        RootBrgData->AcpiRbRes[raMmio32].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
        RootBrgData->AcpiRbRes[raMmio32].Len=RootBrgData->AcpiRbRes[raMmio32].Max-RootBrgData->AcpiRbRes[raMmio32].Min+1;
        RootBrgData->AcpiRbRes[raMmio32].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit+1;
        RootBrgData->AcpiRbRes[raMmio32].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio64].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
        RootBrgData->AcpiRbRes[raMmio64].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
        RootBrgData->AcpiRbRes[raMmio64].Len=RootBrgData->AcpiRbRes[raMmio64].Max-RootBrgData->AcpiRbRes[raMmio64].Min+1;
        RootBrgData->AcpiRbRes[raMmio64].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit+1;
        RootBrgData->AcpiRbRes[raMmio64].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;
    }

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) {
            TRACE((-1, "PciRB: #%X BUS _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX\n",
                        RootBrgIndex,res->_MIN,res->_MAX,res->_LEN, res->_GRA));
            continue;
        }
        // update io and memory values from qpi rc output.
        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){

        //
        //Set Resource starting address for IO based on which RB it is.
        // Update Root Bridge with UDS resource information
        //
            RootBrgData->AcpiRbRes[raIo].Gra=res->_MAX;
            a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
            AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
            AddressLimit = AddressLimit + 1; // make power of 2
            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, a, AddressLimit));

            TRACE((-1, "PciRB: #%X IO ",RootBrgIndex));
            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRB: IO Allocation Failed: _LEN=%lX; _GRA=l%X.\n",res->_LEN, res->_MAX));
                ASSERT_EFI_ERROR(Status);
                return Status;
            }
        }
        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){
            //First root or Second one????
            if(res->_GRA==32){
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO32",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio32].Gra=res->_MAX;
            } else {
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO64",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio64].Gra=res->_MAX;
            }

            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: _GRA=%lX; Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, res->_GRA, a, AddressLimit));

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                TRACE((-1,"P"));
                Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    TRACE((-1,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN = AddressLimit;
//		TRACE((-1,"PciRB: #%X Resources: Type=%X; TFlags=%X; GCD asssigned address _MIN=%lX; _MAX=%lX; _GRA=%lX; _LEN=%lX.\n",
//        RootBrgIndex, res->Type, res->TFlags.TFLAGS,res->_MIN, res->_MAX, res->_GRA, res->_LEN ));
        TRACE((-1, ": _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX; _GRA=0x%lX\n",
        res->_MIN,res->_MAX,res->_LEN, res->_GRA ));

        //No need to change this and lose Granularity Value... will preserve it.
        //res->_MAX=res->_MIN+res->_LEN-1;
    }

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    g)If you are using Standard(Single Root Project) or you want to use dynamic (default) resource allocation Algorithm, have HbCspAllocateResources() function return EFI_UNSUPPORTED. If so, default resource allocation algorithm will be used.
    h)Replace function UpdateAml() at ACPICore.c with following code:

//
//----------------------------------------------------------------------------
//  Procedure:   UpdateAml
//
//  Description:
//  This function updates AML objects with values provided in ACPI_AML_UPD_INFO
//  structure
//
//  Input:
//  IN ACPI_AML_UPD_INFO *AmlUpdInfo - pointer to ACPI_AML_UPD_INFO structure
//
//  Output:
//  EFI_SUCCESS - AML objects updated successfully
//  EFI_ERROR - some error occured during update process
//
//----------------------------------------------------------------------------
//

EFI_STATUS UpdateAml(ACPI_AML_UPD_INFO	*AmlUpdInfo)
{
    UINTN			i;
    ACPI_HDR 	*Dsdt;
    EFI_STATUS		Status = 0;

//-------------------------

    for(i = 0; i < 2; i++){
        if (i) Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt1Addr;
        else Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt2Addr;
        if (Dsdt){
            //Update TOPM Object
            Status = UpdateAslNameObject(Dsdt, "TOPM", AmlUpdInfo->TopOfMemory);
            ASSERT_EFI_ERROR (Status)
            if (EFI_ERROR(Status)) return Status;

            //Update ROMS Object
            //Status = UpdateNameObject(Dsdt, AML_NAME_ROMS, AmlUpdInfo->RomStart);
            //ASSERT_EFI_ERROR(Status)
            //if(EFI_ERROR(Status)) return Status;
//TODO: IOST and SSx Objects update
            //Update IOST Object
            Status = UpdateAslNameObject(Dsdt, "IOST", (UINT64)AmlUpdInfo->SioDevStatusVar.DEV_STATUS);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS4", (UINT64)AmlUpdInfo->SS4);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS3", (UINT64)AmlUpdInfo->SS3);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS2", (UINT64)AmlUpdInfo->SS2);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS1", (UINT64)AmlUpdInfo->SS1);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Dsdt->Checksum = 0;
            Dsdt->Checksum = ChsumTbl((UINT8*)Dsdt, Dsdt->Length);
        }
    }
    return Status;
}
    i) Comment out function CollectPciAmlUpdInfo(ACPI_AML_UPD_INFO *AmlUpdInfo).
    j) Comment call to function CollectPciAmlUpdInfo() from CollectAmlUpdInfo() function. This functionality moved into PciHostBridge.c:

//	Status=CollectPciAmlUpdInfo(Aui);
//	ASSERT_EFI_ERROR(Status);
    4633_PCIBUS_2_2:
    Fixes:
    1. Fixed minor issues, related to PCI IRQ entries usage and update.
    2. Potential issue when optimizing resources EIP 21366. Extra BAR Length value could overflow if initial eBar->Length totally used by other resource requests.
    3. Fixed potential Memory corruption issue when assigning Ext->XlatEntry->BusRun for bridges not having corresponded XlatTbl Entry.
    4. Fixed issue with Multi Root support and incorrect bus allocation for the secondary Root(s) if they have advanced (more than 1) bus structure.
    5. Fixed issue in AssignBridgeResources() function when there are no bars to program function was returning ERROR Status.
    6. Other Minor bug fixes and code cleanup.
    New Features in Release:
    1. Separated from PCI Bus Driver all PCI Bus related auto generated output files.
    2. Made PciBus and PCI Root Bridge Driver use New "AMI Board Info" Protocol.
    3. Added Generic Support for PERR#, SERR# and VGA Palette Snoop settings.
    4. Added PCI Porting Hooks to overwrite setting Device Attributes.
    5. Added Generic Support and Setup Question on how to handle resource requests Above 4G.
    6. Added "Semi-Automatic" Support for PCI Express Hot-Plug controlled by the BIOS. Supported only if AMI_ROOT_BRIDGE_SUPPORT token set to ON. will work only with Recent CHIPSET Template and ACPI label higher than 30.
    7. Added Setup Form to configure Hot-Plug settings.
    Files Changed In this Label.
    Removed: PciBoard.asm; PciBoard.h; PciBusSrcRbx64; PciBusSrcRb
    Added: PciPort.h; PciBusSrc.chm
    PciBus.c:
    1. Changed name and initialization of mMaxBusLen global variable to mMaxBusScan.
    2. Added Debug messages when updating IRQ routing table.
    3. Added Dump of PIC and APIC IRQ Routing Tables dump at the end of enumeration.
    4. Added fix in OptimizeBrgResource() function
    5. Changes related to removing PciBoard.h and usage of <Protocol\AmiBoardInfo.h>
    PciBus.h:
    1. PCI_DEV_INFO added new fields and Data types.
    PciHostridge.c
    1. Changes related to production of Root HP Controller Initialization Protocol.
    2. Changes related to removing PciBoard.h and PciBoard.asm from Root Bridge driver.
    PciPort.h; PciPort.c:
    1.Added new porting hooks prototypes and implementations
    PciBus.mak;PciBusSrc.mak:
    1. Changes related to removing/adding files to/from component.
    PciBus.sdl;PciBusSrc.sdl:
    1. Changes related to the new features implementation. Some eLinks was removed since they don't needed anymore.
    PciBusSetup.h; PciBus.sd; PciBus.uni:
    1. Changes related to the new features implementation.
    Update Instructions.
    1. Upgrade PciBus Component.
    2. If your project contains "Core Sources" module, upgrade PciBus sources component.
    3. Two additional parameters have been added to HbCspMapRootBrgToHost function in NbPciCsp.c (Function HbCspMapRootBrgToHost was introduced in PCI Bus Driver Label 21). On most of the projects current definition of the function can simply be replaced with the one below. Multi-host projects may require additional porting.

//<AMI_PHDR_START>/----------------------------------------------------------------------------
//
// Procedure:   HbCspMapRootBrgToHost
//
// Description:	Chipset specific function that returns Host Bridge Number for
//              the corresponded Root Bridge.
//
// Input:
//  IN PCI_BUS_XLAT_HDR*  RootBrgXlatHdr - Root Bridge XLAT table entry
//
// Output:
//      UINTN - Number of the Host Bridge that root bridge identified by RootBrgXlatHdr belongs to.
//
// Note:
//  THIS FUNCTION MUST BE PORTED FOR MULTI-HOST SYSTEMS
//
//  HOST bridge handle supports:
//    - ResourceAllocation Protocol (REQUIRED);
//    - RootHotplugControllerInitialization Protocol (OPTIONAL);
//    - PciPlatform Protocol (OPTIONAL).
//  ROOT bridge handle supports:
//    -PciRootBridgeIo Protocol (REQUIRED).
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
UINTN HbCspMapRootBrgToHost(IN PCI_BUS_XLAT_HDR *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr)
{
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//

//Usually even server chipsets use only one PCI HOST abstraction
//but if  chipset has more than one HOST we have to specify
//which ROOT from PciBusXlat table belongs to which HOST.

    //Check if we need to update/change Allocation Attributes Passed to this function...
    //Here we have ability to override Automaticaly generated Attributes based on
    //SDL tokens COMBINE_MEM_PMEM and ABOVE_4G_PCI_DECODE
    //bits currently defined for Allocation Attributes is:
    //  EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM
    //  EFI_PCI_HOST_BRIDGE_MEM64_DECODE
    //Usually nothing needs to be done sor SINGLE HOST-SINGLE-ROOT systems
    //NOTE: this function could be called more than one time for each HOST
    // if you updating AllocationAttr only last data will be valid.
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT allocation attributes.
    // Add code only if you need to overwrite it.

    //if i.e. second root does not support PF_MMIO
    //if(RootBrgXlatHdr->BusBuild == 0x80 ) *AllocationAttr &= ~(EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM);
    //else *RbSuportedAttr = ....;

    //Check that in VeB PCI Wizard this Root creates bus 0
    //This is usualy a compatibility bus
    //Set the Compatibility bus Attributes it must decode Legacy resources
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT Supported ROOT BRIDGE Attributes.
    // Add code only if you need to overwrite it.

    //if(RootBrgXlatHdr->BusBuild==0) *RbSuportedAttr=
    //(EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
    //EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
    //EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
    //EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO);
    //else *RbSuportedAttr=0;

    //Returning Host Number for Root Bridge corresponded to the Root
    //ported as RootBrgXlatHdr->BusBuild from BusXLat Table
    //for single SINGLEHOST-SINGLE-ROOT system this value always 0
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // If your system MULTY-HOST/MULTY-ROOTs system
    //you need to add code here to correctly map each ROOT referenced in VeB wizard
    //to it's corresponded host

    return 0;

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
}
    4. Add the following definition of the new function HbCspAllocateResources to NbPciCsp.c.

//-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here
/*
    UINTN				i;
    ASLR_QWORD_ASD		*res;
    UINT64				a=0;
    DXE_SERVICES		*dxe;
//------------------------------------
    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) continue;

        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){
            //First root or Second one????
            //Set Resource starting address for IO based on which RB it is.
            if(RootBrgIndex==0) a= 0xB000;
            else a=0xc000;

            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: IO Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }
        }

        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){

            //None PF memeory Will Have TypeSpecific Flag Different.

            //First root or Second one????
            if(res->_GRA==32){
                if(RootBrgIndex==0 ) a= 0xB0000000; //Set Resource starting address for IO
                else a=0xC0000000;
            } else {
                if(RootBrgIndex==0 ) a= 0x800000000; //Set Resource starting address for IO
                else a=0x1000000000;
            }

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    PCI_TRACE((TRACE_DXE_CHIPSET,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN=a;
        res->_MAX=res->_MIN+res->_LEN-1;
    }
*/

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    5. Remove definitions of the following four variables from NbPciCsp.c (the variables are no longer needed).
      •
UINTN	gRbCountTbl[NB_NUMBER_OF_HOST_BRG]={
    1, 	//Number of root bridges produced by Host #0
        //Number of root bridges produced by Host #1
        //Number of root bridges produced by Host #2
        //Number of root bridges produced by Host #3
};

      •
UINT64 gHbAllocAttribTbl[NB_NUMBER_OF_HOST_BRG]={
// Changed next line to 0 because screen would go blank early
// during EFI Vista installation
//	EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM,	//Allocation Attributes of Host #0
    0,	//Allocation Attributes of Host #0
        //Allocation Attributes of Host #1
        //Allocation Attributes of Host #2
        //Allocation Attributes of Host #3
        // And so on
};

      •
ASLR_QWORD_ASD	gRbBusesTbl[]={
//for Root 0 at Host 0
    {0x8A, 0x2B,ASLRV_SPC_TYPE_BUS, 0,0,  	0x1, 	0x00, 	0xFF, 	0, 		0x100 }//Bus
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any
};

      •
UINT64	gRbSupportsTbl[]={
//for Root 0 at Host 0
    (EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
     EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
     EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
     EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO),
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any

// and so on...
};
    6. Update implementation of function HbCspStartBusEnumeration in NbPciCsp.c. Older versions of PCI host bridge driver expected this function to create ACPI resource descriptor that defines available range of buses. It is no longer necessary. The information about available bus range is derived from the data generated by VeB PCI routing wizard. The function implementation must be replaced with the following code:

EFI_STATUS HbCspStartBusEnumeration(
        PCI_HOST_BRG_DATA *HostBrgData,PCI_ROOT_BRG_DATA *RootBrgData,UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_SUCCESS;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!
//!!!!!NO NEED IMPLEMENTING THIS FUNCTION AMYMORE.
//IT MAY BE IMPLEMENTED IF YOU NEED TO OWERWRITE INITIAL BUILD TIME BUS ASSIGNMENT.
//USE RootBrgData->RbRes[i] of type ASLR_QWORD_ASD with Type field ==ASLRV_SPC_TYPE_BUS

//Any Additional Variables goes here

//------------------------------------

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    7. Update declaration of HbCspMapRootBrgToHost function in NbCspLib.h:

UINTN HbCspMapRootBrgToHost(PCI_BUS_XLAT_HDR    *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr);
    8. Add the following declaration of HbCspAllocateResources function to NbCspLib.h:

EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex);
    NOTE #1: Sub Component is compatible with Core 4.6.3.6 or later.
    NOTE #2: To use PciBus Subcomponent of version 2.2.0 with the older versions of CORE, you need to add "AmiBoardInfo" MODULEPART from Core 4.6.3.6 to your project and update "Protocol" module part to get AmiBoardInfo.h header.
    NOTNOTE #3: If You updating to PciBus Driver v2.2.0 to have Generic PCIExpress Hot-Plug Support, you will need ACPI Label higher than 30 and most recent CHIPSET template. See AMI_Aptio_4.x_PCI_Porting_Guide_NDA_rev_03 on SHAREPORTAL for instructions how to port project for Hot Plug Support.
    4633_PCIBUS_21_2:
    Fixes:
    1. Fixed PCI Express MaxPayload and ReadRequest Size calculation algorithm. EIP #17947.
    2. Potential issue with name collision in PciHostBridge.c and PciBus.c. Renamed some global variables used.
    3. Added changes to support /W4 build switch.
    4. Added fix to break the PCI Express Extended Capability header access if read returns 0xFFFF. EIP #19144.
    New Features:
    Added "PciPortSkipThisDevice()" to handle PCI Devices which not suppose to be "Touched" during enumeration Process. EIP #8874
    4633_PCIBUS_21_1: Minor bug fixes label
    Fixes:
    1. Fixed "Connect -r" issue EIP #17740..
    2. Fixed Start function of the PCI Bus Driver. It use to return EFI_SUCCESS even
    when all devices were STARTTED. Now it returning EFI_ALREADY_STARTED. This will
    help save some time when CORE attempts to start ALREADY STARTED devices since
    Start() function returned SUCCESS.
    New Features:
    2. None.
    4633_PCIBUS_21: First independent label of the subcomponent.
    Fixes:
    1. Fixed SRIOV support.
    2. Added changes to pass PCI SIG Compliance test.
    3. Changes in PciBusEx Protocol. Some functions there moved to AMI Board Info Interface
    4. Fixed Stop() function in DriverBinding Protocol of the PCI Bus Driver.
    5. Removed EFI_DEADLOOP() used for debugging in PciBus.c and PciHostBridge.c
    New Features:
    1. PCI Root Bridge Driver Installs AMI Board Information Protocol now. It groups together all.
    2. Added Definitions for AMI Board Information Protocol.
    3. Corresponded changes in Make files since PCI RootBridge Driver has to start to install AMI_BOARD_INFO Protocol even when AMI_ROOT_BRIDGE_SUPPORT token is OFF.
    4. Introduced changes to Extended PCI Bus Protocol interface
    5. Added New PciBusSrcRb.Lib and PciBusSrcRbx64.lib build with AMI_ROOT_BRIDGE_SUPPORT set to OFF. Helps to reduce size of the PCI Module when using non-AMI RootBridge driver.


eModule Release Notes

AMIBIOS Component Release Notes

Component Information:
Component Name: PCIBus
Component Type: eModulePart
Release Date: 06/30/2011
Source Control Label: Binaries - Core 4651_PCIBUSBIN_25_1; Sources - 4651_PCIBUSSRC_25_1
;
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core\Modules/PciBus;4651
Sources Source Control Location: SS:ALASKA;$/Alaska/BIN/Core\Modules/PciBus;4651
Component Description:
Pci Bus Sources Subcomponent (Part of "Core Sources" component)
Filename | Description
PciBusSrc.sdl | "PciBusSources" Module's SDL tokens file (modified by VeB)
PciBusSrc.mak | PCI Bus Sources Module MAK file (builds Module and all it's components)
PciBus.c | Main PCI Bus Driver file. It has Pci Bus Driver entry point and PciIo Protocol implementation.
PciHostBridge.c | Pci Root Bridge Driver file. Has Implementation of PciRootBridgeIo Protocol.
DeviceIo.c | Implementation of DeviceIo Protocol for compatibility sake. This protocol does not supported by UEFI anymore.
PCI Bus Subcomponent (Part of Core component)
Filename | Description
PciBus.sdl | "PciBus" Module SDL tokens file (modified by VeB)
PciBus.mak | "PciBus" Module MAK file (builds Module and all it's components)
PciBus.sd | "PciBus" Module Setup Definitions (SD) file (Provides PciBus Driver Setup Screen)
PciBus.uni | "PciBus" Module Setup Strings used by SD file.
PciBusSetup.c | "PciBus" Module Strings override routines to dynamically change Setup options.
PciPort.c | "PciBus" Driver porting file.
PciSetup.h | "PciBus" Driver Setup types definitions. Separates board specific setup data from Generic Pci Bus Driver code.
PciBoard.asm | Assembly Language file which includes all VeB auto-generated files.
PciBusSrc.lib | 32bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciBusSrcx64.lib | 64bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciPort.h | Definition file of available Porting Functions.
PciRootBridge.dxs | Dependency expression file for PCI Root Bridge Driver..
PciBusIncludes Subcomponent (Part of PCI Bus Component)
Filename | Description
PciBus.h | "PciBus" Driver private types and data definitions
PciHostbridge.h | "PciRootBridge" Driver private types and data definitions
PciBusEx.h | PCI Bus Extended Protocol interface declarations and data types
PCIe30.h | PCI Express Specification version definitions.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_34, Dated: 2010-10-06
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): WinDDK 7600.16385.1; DDK 3790.1830
General Information About this Label:
  • NewFeatures
    • Genericaly supported token PCI_DEV_REVERSE_SCAN_ORDER. If set to ON Pci Bus Driver will scan devices on PCI Bus in reverce order (from 31 to 0 default is from 0 to 31).
    Added LinkSpeed trace when link reset or retrain called.
    EIP 57664
    Aptio PI 1.2; UEFI 2.3.1 Support Extended PCI bus driver functionality
    Files: DevicePath.h; LoadFile2.h; PciBus.h; PciBus.c.
    EIP 58702
    Aptio PI 1.2; UEFI 2.3.1 Support Changes in Bus Drivers protocols (PCI bus driver)
    Files: PciBus.c
    EIP 53475
    PCI Express support issue fixed
    Files: PciBus.c
    EIP 54911
    Reconnect -r issue fixed.
    Files: PciBus.c
    EIP 61311
    PCI Express controllers may not be correctly initialized, because of missing delays, while resetting the link. Added delay code and tokens PCI_T_RST and PCI_T_RST_RECOVERY.
    Files: PciBus.c
    EIP 63430
    Replace use of PciIo->MemRead with MemCpy() for Option ROMs.
    Files: PciBus.c
    EIP 61101
    The secondary bus reset in the link retraining code causes downstream PLX bridges to disappear. Added BridgeRestoreBuses() function.
    Files: PciBus.c
  • Bug Fixes
    • Minor bug fixes not related to any eip EIP. Code cleanup.
    Fixed bug in PcieRetrainLink function it was not doing other attempts to retrain link because of missing else statement.
    EIP 54911
    Calling Stop function was causing ASSERT. Caused by Incorrect setting of the attributes and handling Stop function for Device of Type tRootBridge.
    Files: PciBus.c
    EIP 54911
    Calling Stop function was causing ASSERT. Caused by Incorrect setting of the attributes and handling Stop function for Device of Type tRootBridge.
    Files: PciBus.c
    EIP 61310
    Unable to enter OpROM on Adaptec 1430 card. OpROM executes, attached drives will boot but pressing Ctrl A to enter utility hangs system. Considered DID==0 as a valid option meaning all devices.
    Files: PciBus.c
    EIP 60123
    Resource padding is not functional for PCIe hot-plug. Caused by In hot plug function was missed changes in BusXlat. Fixed AmiBoardInfo driver to correctly update HP slot info.
    Files: PciHostBridge.c; PciBoard.c; AmiBoardInfo.c.
  • Update Instructions
  • This release id part of Core 4651. Follow Core 4651 update instructions.
  • For Out of Resources condition handling get 4650_PCI_BRD_RES_01A component from $/Alaska/BIN/Modules/Template/PciPlatformResources/
  • See PCI Porting Guide on AMI Share Portal for more details and coding examples. Updated Porting Guide corresponding current label also attached to EIP 55759
    • Revision History:

  • 4650_PCIBUSBIN_25_0:
  • NewFeatures
    • EIP 38174
    Generic support to handle PCI OUT OF RESOURDCES conditions
    Files: PciBus.c; PciHostBridge.c;
    EIP 53475
    Generic PCI Express 3.0 support.
    Files: PciBus.c; PciBus.uni; PciBus.sd
  • Bug Fixes
    • Minor bug fixes not related to any eip EIP. Code cleanup.
  • Update Instructions
  • Remove old PciBUs Module (Sources and Binaries)
  • Download new 4650_PCIBUSSRC_25_0; 4650_PCIBUSBIN_25_0
  • Update following Core Files: AcpiRes.c(checkin #36 or up); AcpiRes.h(#16); Setup.h(#36)
  • Check EIP 57650. If EIP is closed get latest TSE Binaries, if not use attaced to that EIP bootflow.c and booflow.h.
  • For Out of Resources condition handling get 4650_PCI_BRD_RES_01A component from $/Alaska/BIN/Modules/Template/PciPlatformResources/
  • See PCI Porting Guide on AMI Share Portal for more details and coding examples. Updated Porting Guide corresponding current label also attached to EIP 55759
    • 4650_PCIBUS_24_0
  • NewFeatures:
    • EIP48290:
    Added PCI_AMI_COMBINE_MEM_PMEM32 token that tells to map 32 bit sized PF MMIO BARs trough NON PF MMIO Bridge registers.
    Files: PciBus.c; PciBus.sdl;
    EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
  • Improvements
    • EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
    EIP45278:
    Changed default resource allocation algorithm to work more efficiently.
    Files: PciBus.c; PciHostBridge.c
    EIP49743:
    Workaround for devices which having Link Retrain bit "sticky".
    Files: PciBus.c
    EIP50097:
    Fixed issue when with PCI_FIXED_BUS_ASSIGNMENT==1 system was ASSERTING. Reason was that with complicated PCI structure next bridge XLAT entry that used to determine Subordinate bus #, selected incorrectly.
    Files: PciBus.c
    Removed Setup Option "Selectable DeEmphasis" since it is HwInit Bit.
  • Bug Fixes
    • EIP49743
    Incorrect initialization complicated PCI infrastructure wrong condition to breake {do while loop}.
    Files: PciBus.c
    EIP49743
    In the PcieCalcLatency(), the do-while loop condition have issue in this.
    It may be a condition when while loop in function PcieCalcLatency(), will never break.
    Files: PciBus.c
    Fixed bug in PcieCalcLatency() function. It was not calculating L1 latency correctly.
    4640_PCIBUS_24_0
    Features and Bug Fixes:
    PciHostBridge.c
  • Updated CreateRootBusData to call HbCspDoesRootBrgExist to determine whether to updated the BusXlat table for the particular host device.
  • Updated ClaimMmioResources to use MMIO resources as-is if AllocType is set to EfiGcdAllocateAddress. For this chipset, each root bridge is programmed with base and limit values for 32bit and 64bit MMIO. The root bridge will only decode addresses within these ranges. For this reason, the Base and Limit values passed to the PCI Bus driver should be used as-is and not modified.
    • PciBus.c
  • EIP 41687: The PciBus.c had workaround code for patching bad PCI or PCIe device list. Bad Pci list only could not cover device reource that requested more than one MMIO resources.
  • New Incompatibility Type Sypport: icBad64BitBar - Device has a bar that is 64bit capable, but the card does not function properly when it is allocated with an address above 4G.
  • Freeing all Memory when exiting with ERROR from EnumerateBus() function.
  • Fixed UEFI Option ROM Size miscalculation.
  • EIP 40554: Fixed WDK Build Issue.
  • EIP 38289: Minor fix for Klocwork Issues II.
  • Improved logic to select matching PCI Bus Xlat table entry.
  • Fixed condition to disable device using 64 bit resource threshold.
  • Fixed bug in DoubleCheckOpRom() when OpROM is a Single Image ROM.
  • Fixed build error with SRIOV token ON.
    • MPL Programming:
  • Bug fix in PcieProgramPayloadUp() function, canged order when recording calculated PayLoad.
  • It use to recursive call was made after reduced value of MPL was recorded. It was preventing function to program MPL correctly.
  • Fixed InitDevCahain() function Logic.
  • Fixed issue with PCIe Switches and MPL programming UP.
  • Fixed Possible issue with incorrect MPL Programming.
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • PciPort.c; PciPort.h
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • 4640_PCIBUS_24_0_TEST
    1. This Label is ONLY compatible with Core 4.6.4.0!
    2. This PCI Bus Driver Label also requires separately labeled Core.AmiBoardInfo Component and ACPI Module Label 32 or later.
    3. This label uses new, "C" style output of the AMI SDL. It is required update VeB and AMI SDL tool to version 5.68.0116 or Higher .
    4. In this label has competely redesigned an Algorithm used to initialize PCI Express Features including customers suggestions.
    5. Generic Support of PCI Express Base Specification ver. 2.1 was added.
    6. PCI Setup Screen was changed to separate PCI Express 1.1 Features and 2.1 (Generation 2).
    7. Label theoretically support ARI Forwarding... BUT No testing has been done since there are no ARI Hardware available yet.
    8. A generic Hot-Plug support also was improved in this label.
    9. PCI Root Bridge Driver uses information generated by VeB and some tokens from PciBus.sdl automatically produces MULTY ROOT infrastructure.
    10.When updating make sure you have followed update instructions from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    11.New Chipset template will have all needed parts referenced in NEW ACPI ROOT Resource Allocation.
    Update Instructions
    1. Make sure your project has CORE 4640.
    2. Update AmiBoardInfo Sub Component with 4640_AMI_BOARD_0100.
    3. Get PCI Bus Driver Module From SS Label 4640_PCIBUSBIN_240_TEST.
    4 If your project has Sources: Get PCI Bus Driver Module From SS Label 4640_PCIBUSSRC_240_TEST.
    5. Verify that you have followed update instructuins from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    6. Enjoy!
    4636_PCIBUS_23_0_TEST
    New Features and Bug Fixes
    PciBus.c
    1. P2P Bridge Spec. v1.1 requires to set INT Line Register to 0xFF. PCI spec 3.0 require to set it to 0xFF - means not connected for x86 architecture. Values of 0..0x0F indicating IRQ0..15 values 0x10..0xFE reserved.
    2. Fixed (~0LU) statement to (0ULL). This is correct statement for 64 bit Value.
    3. Component Name protocol implementation is updated to support both Component Name and ComponentName2 protocols (based on value of the EFI_SPECIFICATION_VERSION SDL token).
    4. Fixed: EIP 19106 If 1 Bus set to be padded in Setup, PCI Bus driver still creates 1 BUS for this bridge instead of 2.
    5. Moved DisableBridgeDecoding() call before Disable device decoding since it could decode 0-4K of IO and 0-1M of Memory.
    6. Fixed conditions in ApplyAcpiResources() where function assumes validity of Resource Range. In case of Fixed Resource Allocation Resource window allocated by custom unction might be bigger than actual hardware resource request.
    7. Fixed EIP 26787. If P2P Bridge has Expansion ROM BAR, value that has to go there was programmed as Secondary Interface Forward Range.
    PciHostBridge.c
    1. Added Print out Message in DEBUG_MODE with PCI BUS Driver Version.
    2. Added Initialization of ImageHandle field in Host Bridge and Root Bridge Structures. (New PciHostBridge.h required).
    3. Generic support for multiple root bridges resources reporting to ACPI DSDT Root Bridge Object (EIP 23548 Support MMIO allocation above 4GB, if devices are capable).
    PciPort.c and PciPort.h
    1. Added infrastructure to ELINKs as porting Functions delivered from Platform and Chipset files. Now you can port PCI Bus driver without modifying Core files
    PciHostBridge.h
    1. Added definitions to support changes for EIP 23548 (Support MMIO allocation above 4GB).
    PciBus.sdl
    1. PCI Bus Driver Version Changes.
    2. Added Parenting eLinks "OEM_SKIP_PCI_DEVICE"; "OEM_PROGRAM_PCI_DEVICE"; "OEM_PCI_ATTRIBUTES". To implement PCI Bus Driver hooks invocation w/o modifying Generic Files.
    PciBus.mak Changes
    1. Added Definitions for OEM_PCI_PROGRAM_DEVICE_CALLBACK_LIST; OEM_PCI_SKIP_DEVICE_CALLBACK_LIST and OEM_PCI_DEVICE_ATTRIBUTES_LIST to support adding porting hooks trough eLinks.
    Update Instructions
    Get PCI Bus Driver Module From SS. If your Project has CORE Earlier than 4.6.3.6, You need to upgrade to Core 4.6.3.6. first. Please follow instructions listed in here in "Revision History" Section or CORE CHM.
    PCI Bus Driver Version 2.3.0 Assumes that following modules are present in the Project.
    1. AmiBoardInfo eModule Part (Part Of Core BIN Starting from "SS: Alaska;$/Alaska/BIN/Core\Modules/BoardInfo;4.6.3.6" )
    2. ACPI Module Label 32. Upgrade from earlier Module Possible by following Steps below:
    a)Get updated OSCM.ASL from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    b)Get New file RbRes.asl from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    c)Get Updated AMLUPD.ASL (Some place holders no longer needed)
    d)Make sure each implementation of ROOT PCI Object in ASL Like "PCI0" "PCI1"(usually it is Nb.asl and Nb2.asl) must include following:

        include("Core\\Em\\ACPI\\RbRes.ASL")
        include("Core\\Em\\ACPI\\OSCM.ASL")
    e)Make sure to comment out all related to ROOT BRIDGE _CRS Method Objects from OEM_DSDT.ASL.
    f)If your project uses multiple ROOT BRIDGEs and predefined resource splitting. Use following code as reference for implementation of Resource Allocating routine

    //-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                    PCI_ROOT_BRG_DATA *RootBrgData,
                                    UINTN RootBrgIndex)
{
    EFI_STATUS					Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here

    UINTN						i;
    ASLR_QWORD_ASD				*res;
    UINT64						a=0;
    UINT64						AddressLimit=0;
    DXE_SERVICES				*dxe;
    EFI_IOH_UDS_PROTOCOL  		*mIohUds; //Platform/Chipset Sapecifik interface provoding information about resource Split between Multiple ROOTs.
    EFI_GUID 					gEfiIohUdsProtocolGuid = EFI_IOH_UDS_PROTOCOL_GUID;

    // ported for two IOHs

  // koti : TO_DO : further improvement on resources based on setup options, if one IOH requires more than other and
    // Checking for error conditions on not to assign a more than qpi decode range.
    if (RootBrgIndex > (NUMBER_IOH_SOCKETS-1)) return Status;
    Status = pBS->LocateProtocol(
                            &gEfiIohUdsProtocolGuid,
                            NULL,
                            &mIohUds);
    ASSERT_EFI_ERROR (Status);
    if (EFI_ERROR(Status))
        return Status;

    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    //Feel out needed structures.
    if(RootBrgData->AcpiRbRes[raIo].Min==0){ //do it only ones
        RootBrgData->AcpiRbRes[raIo].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
        RootBrgData->AcpiRbRes[raIo].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
        RootBrgData->AcpiRbRes[raIo].Len=RootBrgData->AcpiRbRes[raIo].Max-RootBrgData->AcpiRbRes[raIo].Min+1;
        RootBrgData->AcpiRbRes[raIo].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit+1;
        RootBrgData->AcpiRbRes[raIo].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio32].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
        RootBrgData->AcpiRbRes[raMmio32].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
        RootBrgData->AcpiRbRes[raMmio32].Len=RootBrgData->AcpiRbRes[raMmio32].Max-RootBrgData->AcpiRbRes[raMmio32].Min+1;
        RootBrgData->AcpiRbRes[raMmio32].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit+1;
        RootBrgData->AcpiRbRes[raMmio32].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio64].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
        RootBrgData->AcpiRbRes[raMmio64].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
        RootBrgData->AcpiRbRes[raMmio64].Len=RootBrgData->AcpiRbRes[raMmio64].Max-RootBrgData->AcpiRbRes[raMmio64].Min+1;
        RootBrgData->AcpiRbRes[raMmio64].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit+1;
        RootBrgData->AcpiRbRes[raMmio64].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;
    }

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) {
            TRACE((-1, "PciRB: #%X BUS _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX\n",
                        RootBrgIndex,res->_MIN,res->_MAX,res->_LEN, res->_GRA));
            continue;
        }
        // update io and memory values from qpi rc output.
        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){

        //
        //Set Resource starting address for IO based on which RB it is.
        // Update Root Bridge with UDS resource information
        //
            RootBrgData->AcpiRbRes[raIo].Gra=res->_MAX;
            a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
            AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
            AddressLimit = AddressLimit + 1; // make power of 2
            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, a, AddressLimit));

            TRACE((-1, "PciRB: #%X IO ",RootBrgIndex));
            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRB: IO Allocation Failed: _LEN=%lX; _GRA=l%X.\n",res->_LEN, res->_MAX));
                ASSERT_EFI_ERROR(Status);
                return Status;
            }
        }
        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){
            //First root or Second one????
            if(res->_GRA==32){
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO32",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio32].Gra=res->_MAX;
            } else {
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO64",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio64].Gra=res->_MAX;
            }

            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: _GRA=%lX; Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, res->_GRA, a, AddressLimit));

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                TRACE((-1,"P"));
                Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    TRACE((-1,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN = AddressLimit;
//		TRACE((-1,"PciRB: #%X Resources: Type=%X; TFlags=%X; GCD asssigned address _MIN=%lX; _MAX=%lX; _GRA=%lX; _LEN=%lX.\n",
//        RootBrgIndex, res->Type, res->TFlags.TFLAGS,res->_MIN, res->_MAX, res->_GRA, res->_LEN ));
        TRACE((-1, ": _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX; _GRA=0x%lX\n",
        res->_MIN,res->_MAX,res->_LEN, res->_GRA ));

        //No need to change this and lose Granularity Value... will preserve it.
        //res->_MAX=res->_MIN+res->_LEN-1;
    }

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    g)If you are using Standard(Single Root Project) or you want to use dynamic (default) resource allocation Algorithm, have HbCspAllocateResources() function return EFI_UNSUPPORTED. If so, default resource allocation algorithm will be used.
    h)Replace function UpdateAml() at ACPICore.c with following code:

//
//----------------------------------------------------------------------------
//  Procedure:   UpdateAml
//
//  Description:
//  This function updates AML objects with values provided in ACPI_AML_UPD_INFO
//  structure
//
//  Input:
//  IN ACPI_AML_UPD_INFO *AmlUpdInfo - pointer to ACPI_AML_UPD_INFO structure
//
//  Output:
//  EFI_SUCCESS - AML objects updated successfully
//  EFI_ERROR - some error occured during update process
//
//----------------------------------------------------------------------------
//

EFI_STATUS UpdateAml(ACPI_AML_UPD_INFO	*AmlUpdInfo)
{
    UINTN			i;
    ACPI_HDR 	*Dsdt;
    EFI_STATUS		Status = 0;

//-------------------------

    for(i = 0; i < 2; i++){
        if (i) Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt1Addr;
        else Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt2Addr;
        if (Dsdt){
            //Update TOPM Object
            Status = UpdateAslNameObject(Dsdt, "TOPM", AmlUpdInfo->TopOfMemory);
            ASSERT_EFI_ERROR (Status)
            if (EFI_ERROR(Status)) return Status;

            //Update ROMS Object
            //Status = UpdateNameObject(Dsdt, AML_NAME_ROMS, AmlUpdInfo->RomStart);
            //ASSERT_EFI_ERROR(Status)
            //if(EFI_ERROR(Status)) return Status;
//TODO: IOST and SSx Objects update
            //Update IOST Object
            Status = UpdateAslNameObject(Dsdt, "IOST", (UINT64)AmlUpdInfo->SioDevStatusVar.DEV_STATUS);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS4", (UINT64)AmlUpdInfo->SS4);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS3", (UINT64)AmlUpdInfo->SS3);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS2", (UINT64)AmlUpdInfo->SS2);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS1", (UINT64)AmlUpdInfo->SS1);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Dsdt->Checksum = 0;
            Dsdt->Checksum = ChsumTbl((UINT8*)Dsdt, Dsdt->Length);
        }
    }
    return Status;
}
    i) Comment out function CollectPciAmlUpdInfo(ACPI_AML_UPD_INFO *AmlUpdInfo).
    j) Comment call to function CollectPciAmlUpdInfo() from CollectAmlUpdInfo() function. This functionality moved into PciHostBridge.c:

//	Status=CollectPciAmlUpdInfo(Aui);
//	ASSERT_EFI_ERROR(Status);
    4633_PCIBUS_2_2:
    Fixes:
    1. Fixed minor issues, related to PCI IRQ entries usage and update.
    2. Potential issue when optimizing resources EIP 21366. Extra BAR Length value could overflow if initial eBar->Length totally used by other resource requests.
    3. Fixed potential Memory corruption issue when assigning Ext->XlatEntry->BusRun for bridges not having corresponded XlatTbl Entry.
    4. Fixed issue with Multi Root support and incorrect bus allocation for the secondary Root(s) if they have advanced (more than 1) bus structure.
    5. Fixed issue in AssignBridgeResources() function when there are no bars to program function was returning ERROR Status.
    6. Other Minor bug fixes and code cleanup.
    New Features in Release:
    1. Separated from PCI Bus Driver all PCI Bus related auto generated output files.
    2. Made PciBus and PCI Root Bridge Driver use New "AMI Board Info" Protocol.
    3. Added Generic Support for PERR#, SERR# and VGA Palette Snoop settings.
    4. Added PCI Porting Hooks to overwrite setting Device Attributes.
    5. Added Generic Support and Setup Question on how to handle resource requests Above 4G.
    6. Added "Semi-Automatic" Support for PCI Express Hot-Plug controlled by the BIOS. Supported only if AMI_ROOT_BRIDGE_SUPPORT token set to ON. will work only with Recent CHIPSET Template and ACPI label higher than 30.
    7. Added Setup Form to configure Hot-Plug settings.
    Files Changed In this Label.
    Removed: PciBoard.asm; PciBoard.h; PciBusSrcRbx64; PciBusSrcRb
    Added: PciPort.h; PciBusSrc.chm
    PciBus.c:
    1. Changed name and initialization of mMaxBusLen global variable to mMaxBusScan.
    2. Added Debug messages when updating IRQ routing table.
    3. Added Dump of PIC and APIC IRQ Routing Tables dump at the end of enumeration.
    4. Added fix in OptimizeBrgResource() function
    5. Changes related to removing PciBoard.h and usage of <Protocol\AmiBoardInfo.h>
    PciBus.h:
    1. PCI_DEV_INFO added new fields and Data types.
    PciHostridge.c
    1. Changes related to production of Root HP Controller Initialization Protocol.
    2. Changes related to removing PciBoard.h and PciBoard.asm from Root Bridge driver.
    PciPort.h; PciPort.c:
    1.Added new porting hooks prototypes and implementations
    PciBus.mak;PciBusSrc.mak:
    1. Changes related to removing/adding files to/from component.
    PciBus.sdl;PciBusSrc.sdl:
    1. Changes related to the new features implementation. Some eLinks was removed since they don't needed anymore.
    PciBusSetup.h; PciBus.sd; PciBus.uni:
    1. Changes related to the new features implementation.
    Update Instructions.
    1. Upgrade PciBus Component.
    2. If your project contains "Core Sources" module, upgrade PciBus sources component.
    3. Two additional parameters have been added to HbCspMapRootBrgToHost function in NbPciCsp.c (Function HbCspMapRootBrgToHost was introduced in PCI Bus Driver Label 21). On most of the projects current definition of the function can simply be replaced with the one below. Multi-host projects may require additional porting.

//<AMI_PHDR_START>/----------------------------------------------------------------------------
//
// Procedure:   HbCspMapRootBrgToHost
//
// Description:	Chipset specific function that returns Host Bridge Number for
//              the corresponded Root Bridge.
//
// Input:
//  IN PCI_BUS_XLAT_HDR*  RootBrgXlatHdr - Root Bridge XLAT table entry
//
// Output:
//      UINTN - Number of the Host Bridge that root bridge identified by RootBrgXlatHdr belongs to.
//
// Note:
//  THIS FUNCTION MUST BE PORTED FOR MULTI-HOST SYSTEMS
//
//  HOST bridge handle supports:
//    - ResourceAllocation Protocol (REQUIRED);
//    - RootHotplugControllerInitialization Protocol (OPTIONAL);
//    - PciPlatform Protocol (OPTIONAL).
//  ROOT bridge handle supports:
//    -PciRootBridgeIo Protocol (REQUIRED).
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
UINTN HbCspMapRootBrgToHost(IN PCI_BUS_XLAT_HDR *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr)
{
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//

//Usually even server chipsets use only one PCI HOST abstraction
//but if  chipset has more than one HOST we have to specify
//which ROOT from PciBusXlat table belongs to which HOST.

    //Check if we need to update/change Allocation Attributes Passed to this function...
    //Here we have ability to override Automaticaly generated Attributes based on
    //SDL tokens COMBINE_MEM_PMEM and ABOVE_4G_PCI_DECODE
    //bits currently defined for Allocation Attributes is:
    //  EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM
    //  EFI_PCI_HOST_BRIDGE_MEM64_DECODE
    //Usually nothing needs to be done sor SINGLE HOST-SINGLE-ROOT systems
    //NOTE: this function could be called more than one time for each HOST
    // if you updating AllocationAttr only last data will be valid.
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT allocation attributes.
    // Add code only if you need to overwrite it.

    //if i.e. second root does not support PF_MMIO
    //if(RootBrgXlatHdr->BusBuild == 0x80 ) *AllocationAttr &= ~(EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM);
    //else *RbSuportedAttr = ....;

    //Check that in VeB PCI Wizard this Root creates bus 0
    //This is usualy a compatibility bus
    //Set the Compatibility bus Attributes it must decode Legacy resources
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT Supported ROOT BRIDGE Attributes.
    // Add code only if you need to overwrite it.

    //if(RootBrgXlatHdr->BusBuild==0) *RbSuportedAttr=
    //(EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
    //EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
    //EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
    //EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO);
    //else *RbSuportedAttr=0;

    //Returning Host Number for Root Bridge corresponded to the Root
    //ported as RootBrgXlatHdr->BusBuild from BusXLat Table
    //for single SINGLEHOST-SINGLE-ROOT system this value always 0
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // If your system MULTY-HOST/MULTY-ROOTs system
    //you need to add code here to correctly map each ROOT referenced in VeB wizard
    //to it's corresponded host

    return 0;

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
}
    4. Add the following definition of the new function HbCspAllocateResources to NbPciCsp.c.

//-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here
/*
    UINTN				i;
    ASLR_QWORD_ASD		*res;
    UINT64				a=0;
    DXE_SERVICES		*dxe;
//------------------------------------
    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) continue;

        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){
            //First root or Second one????
            //Set Resource starting address for IO based on which RB it is.
            if(RootBrgIndex==0) a= 0xB000;
            else a=0xc000;

            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: IO Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }
        }

        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){

            //None PF memeory Will Have TypeSpecific Flag Different.

            //First root or Second one????
            if(res->_GRA==32){
                if(RootBrgIndex==0 ) a= 0xB0000000; //Set Resource starting address for IO
                else a=0xC0000000;
            } else {
                if(RootBrgIndex==0 ) a= 0x800000000; //Set Resource starting address for IO
                else a=0x1000000000;
            }

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    PCI_TRACE((TRACE_DXE_CHIPSET,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN=a;
        res->_MAX=res->_MIN+res->_LEN-1;
    }
*/

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    5. Remove definitions of the following four variables from NbPciCsp.c (the variables are no longer needed).
      •
UINTN	gRbCountTbl[NB_NUMBER_OF_HOST_BRG]={
    1, 	//Number of root bridges produced by Host #0
        //Number of root bridges produced by Host #1
        //Number of root bridges produced by Host #2
        //Number of root bridges produced by Host #3
};

      •
UINT64 gHbAllocAttribTbl[NB_NUMBER_OF_HOST_BRG]={
// Changed next line to 0 because screen would go blank early
// during EFI Vista installation
//	EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM,	//Allocation Attributes of Host #0
    0,	//Allocation Attributes of Host #0
        //Allocation Attributes of Host #1
        //Allocation Attributes of Host #2
        //Allocation Attributes of Host #3
        // And so on
};

      •
ASLR_QWORD_ASD	gRbBusesTbl[]={
//for Root 0 at Host 0
    {0x8A, 0x2B,ASLRV_SPC_TYPE_BUS, 0,0,  	0x1, 	0x00, 	0xFF, 	0, 		0x100 }//Bus
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any
};

      •
UINT64	gRbSupportsTbl[]={
//for Root 0 at Host 0
    (EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
     EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
     EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
     EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO),
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any

// and so on...
};
    6. Update implementation of function HbCspStartBusEnumeration in NbPciCsp.c. Older versions of PCI host bridge driver expected this function to create ACPI resource descriptor that defines available range of buses. It is no longer necessary. The information about available bus range is derived from the data generated by VeB PCI routing wizard. The function implementation must be replaced with the following code:

EFI_STATUS HbCspStartBusEnumeration(
        PCI_HOST_BRG_DATA *HostBrgData,PCI_ROOT_BRG_DATA *RootBrgData,UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_SUCCESS;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!
//!!!!!NO NEED IMPLEMENTING THIS FUNCTION AMYMORE.
//IT MAY BE IMPLEMENTED IF YOU NEED TO OWERWRITE INITIAL BUILD TIME BUS ASSIGNMENT.
//USE RootBrgData->RbRes[i] of type ASLR_QWORD_ASD with Type field ==ASLRV_SPC_TYPE_BUS

//Any Additional Variables goes here

//------------------------------------

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    7. Update declaration of HbCspMapRootBrgToHost function in NbCspLib.h:

UINTN HbCspMapRootBrgToHost(PCI_BUS_XLAT_HDR    *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr);
    8. Add the following declaration of HbCspAllocateResources function to NbCspLib.h:

EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex);
    NOTE #1: Sub Component is compatible with Core 4.6.3.6 or later.
    NOTE #2: To use PciBus Subcomponent of version 2.2.0 with the older versions of CORE, you need to add "AmiBoardInfo" MODULEPART from Core 4.6.3.6 to your project and update "Protocol" module part to get AmiBoardInfo.h header.
    NOTNOTE #3: If You updating to PciBus Driver v2.2.0 to have Generic PCIExpress Hot-Plug Support, you will need ACPI Label higher than 30 and most recent CHIPSET template. See AMI_Aptio_4.x_PCI_Porting_Guide_NDA_rev_03 on SHAREPORTAL for instructions how to port project for Hot Plug Support.
    4633_PCIBUS_21_2:
    Fixes:
    1. Fixed PCI Express MaxPayload and ReadRequest Size calculation algorithm. EIP #17947.
    2. Potential issue with name collision in PciHostBridge.c and PciBus.c. Renamed some global variables used.
    3. Added changes to support /W4 build switch.
    4. Added fix to break the PCI Express Extended Capability header access if read returns 0xFFFF. EIP #19144.
    New Features:
    Added "PciPortSkipThisDevice()" to handle PCI Devices which not suppose to be "Touched" during enumeration Process. EIP #8874
    4633_PCIBUS_21_1: Minor bug fixes label
    Fixes:
    1. Fixed "Connect -r" issue EIP #17740..
    2. Fixed Start function of the PCI Bus Driver. It use to return EFI_SUCCESS even
    when all devices were STARTTED. Now it returning EFI_ALREADY_STARTED. This will
    help save some time when CORE attempts to start ALREADY STARTED devices since
    Start() function returned SUCCESS.
    New Features:
    2. None.
    4633_PCIBUS_21: First independent label of the subcomponent.
    Fixes:
    1. Fixed SRIOV support.
    2. Added changes to pass PCI SIG Compliance test.
    3. Changes in PciBusEx Protocol. Some functions there moved to AMI Board Info Interface
    4. Fixed Stop() function in DriverBinding Protocol of the PCI Bus Driver.
    5. Removed EFI_DEADLOOP() used for debugging in PciBus.c and PciHostBridge.c
    New Features:
    1. PCI Root Bridge Driver Installs AMI Board Information Protocol now. It groups together all.
    2. Added Definitions for AMI Board Information Protocol.
    3. Corresponded changes in Make files since PCI RootBridge Driver has to start to install AMI_BOARD_INFO Protocol even when AMI_ROOT_BRIDGE_SUPPORT token is OFF.
    4. Introduced changes to Extended PCI Bus Protocol interface
    5. Added New PciBusSrcRb.Lib and PciBusSrcRbx64.lib build with AMI_ROOT_BRIDGE_SUPPORT set to OFF. Helps to reduce size of the PCI Module when using non-AMI RootBridge driver.


eModule Release Notes

AMIBIOS Component Release Notes

Component Information:
Component Name: PCIBus
Component Type: eModulePart
Release Date: 2011/12/16
Source Control Label: Binaries - Core 4652_PCIBUSBIN_25_2; Sources - 4652_PCIBUSSRC_25_2;
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/PciBus;4652
Sources Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/PciBus;4652
Component Description:
Pci Bus Sources Subcomponent (Part of "Core Sources" component)
Filename | Description
PciBusSrc.sdl | "PciBusSources" Module's SDL tokens file (modified by VeB)
PciBusSrc.mak | PCI Bus Sources Module MAK file (builds Module and all it's components)
PciBus.c | Main PCI Bus Driver file. It has Pci Bus Driver entry point and PciIo Protocol implementation.
PciHostBridge.c | Pci Root Bridge Driver file. Has Implementation of PciRootBridgeIo Protocol.
DeviceIo.c | Implementation of DeviceIo Protocol for compatibility sake. This protocol does not supported by UEFI anymore.
PCI Bus Subcomponent (Part of Core component)
Filename | Description
PciBus.sdl | "PciBus" Module SDL tokens file (modified by VeB)
PciBus.mak | "PciBus" Module MAK file (builds Module and all it's components)
PciBus.sd | "PciBus" Module Setup Definitions (SD) file (Provides PciBus Driver Setup Screen)
PciBus.uni | "PciBus" Module Setup Strings used by SD file.
PciBusSetup.c | "PciBus" Module Strings override routines to dynamically change Setup options.
PciPort.c | "PciBus" Driver porting file.
PciSetup.h | "PciBus" Driver Setup types definitions. Separates board specific setup data from Generic Pci Bus Driver code.
PciBoard.asm | Assembly Language file which includes all VeB auto-generated files.
PciBusSrc.lib | 32bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciBusSrcx64.lib | 64bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciPort.h | Definition file of available Porting Functions.
PciRootBridge.dxs | Dependency expression file for PCI Root Bridge Driver..
PciBusIncludes Subcomponent (Part of PCI Bus Component)
Filename | Description
PciBus.h | "PciBus" Driver private types and data definitions
PciHostbridge.h | "PciRootBridge" Driver private types and data definitions
PciBusEx.h | PCI Bus Extended Protocol interface declarations and data types
PCIe30.h | PCI Express Specification version definitions.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_38, Dated: 2011-12-20
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): WinDDK 7600.16385.1; DDK 3790.1830
General Information About this Label:
  • NewFeatures
    • EIP 71380
    Core support for CSM opt-out feature
    Files: PciBus.c; PciPort.c; PciBus.sd; PciBus.uni; PciSetup.h;
    EIP 54911
    Reconnect -r issue fixed for cards with OFF board option ROMs.
    Files: PciBus.c
    EIP 54911
    Added changes for module to be compliant with UEFI specification v 2.3.1.
    Files: PciBus.c
    Added some MORE debug messages.
    Added IO 3C0-3DF reservation release when Legacy VGA attributes set
    Fixed build issue when PCI_EXPRESS_GEN2_SUPPORT token set to OFF.
  • Bug Fixes
    • Minor bug fixes not related to any eip EIP. Code cleanup.
    Fixed bug in PcieRetrainLink function it was not doing other attempts to retrain link because of missing else statement.
    Fixed potential bug in PcieSetSlotProperties() routine. It was using uninitialized RCI_ADDRESS var this may cause system HUNG .
    Changed size of access to the ROM BAR register in GetOpRom() from 1 byte to 4 - some cards could hang the system if 1 byte is used.
    According to AMD GOP Driver GetBarAttributes() must return _GRA field set as a bar type NOT A RESOURCE TYPE
    EIP 72803: Incorrect Max Payload setting
    RootCause: The issue was that recorded MPL value was updated before PcieProgramPayloadUp() function was invoked. In that function we check condition again since it was needed to maintain loop exit. But control newer enter the loop since conditions were not met at that point for reason stated above.
    Solution: Move code that updates recorded MPL with a new value after call to PcieProgramPayloadUp().
    Files: PciBus.c
    EIP 71694: Option ROM is corrupted when copied from device on Rosecity Core 4.6.5.1.
    RootCause: MemCopy routine was updated to use 64 bit access but PCI BAR. Copy can not handle this.
    Solution: Introduced MemCpy32 routine to handle fast copy 4 byte at a time
    Files: PciBus.c
    EIP 66216: Hotplug resource padding not working for ROOT bridges other than 0.
    RootCause: Hot plug slots was incorrectly associated always with the RootBridge #0.
    Solution: Changed algorithm to beter distinguish between Root Bridges. Added debug messagers to monitor HPC_LOCATION_DATA.
    Files: PciBus.c; PciHostBridge.c.
  • Update Instructions
  • This release id part of Core 4652. Follow Core 4652 update instructions.
  • For Out of Resources condition handling get 4650_PCI_BRD_RES_01A component from $/Alaska/BIN/Modules/Template/PciPlatformResources/
  • See PCI Porting Guide on AMI Share Portal for more details and coding examples. Updated Porting Guide corresponding current label also attached to EIP 55759
    • Revision History:
  • Core 4651_PCIBUSBIN_25_1:
  • NewFeatures
    • Genericaly supported token PCI_DEV_REVERSE_SCAN_ORDER. If set to ON Pci Bus Driver will scan devices on PCI Bus in reverce order (from 31 to 0 default is from 0 to 31).
    Added LinkSpeed trace when link reset or retrain called.
    EIP 57664
    Aptio PI 1.2; UEFI 2.3.1 Support Extended PCI bus driver functionality
    Files: DevicePath.h; LoadFile2.h; PciBus.h; PciBus.c.
    EIP 58702
    Aptio PI 1.2; UEFI 2.3.1 Support Changes in Bus Drivers protocols (PCI bus driver)
    Files: PciBus.c
    EIP 53475
    PCI Express support issue fixed
    Files: PciBus.c
    EIP 54911
    Reconnect -r issue fixed.
    Files: PciBus.c
    EIP 61311
    PCI Express controllers may not be correctly initialized, because of missing delays, while resetting the link. Added delay code and tokens PCI_T_RST and PCI_T_RST_RECOVERY.
    Files: PciBus.c
    EIP 63430
    Replace use of PciIo->MemRead with MemCpy() for Option ROMs.
    Files: PciBus.c
    EIP 61101
    The secondary bus reset in the link retraining code causes downstream PLX bridges to disappear. Added BridgeRestoreBuses() function.
    Files: PciBus.c
  • Bug Fixes
    • Minor bug fixes not related to any eip EIP. Code cleanup.
    Fixed bug in PcieRetrainLink function it was not doing other attempts to retrain link because of missing else statement.
    EIP 54911
    Calling Stop function was causing ASSERT. Caused by Incorrect setting of the attributes and handling Stop function for Device of Type tRootBridge.
    Files: PciBus.c
    EIP 54911
    Calling Stop function was causing ASSERT. Caused by Incorrect setting of the attributes and handling Stop function for Device of Type tRootBridge.
    Files: PciBus.c
    EIP 61310
    Unable to enter OpROM on Adaptec 1430 card. OpROM executes, attached drives will boot but pressing Ctrl A to enter utility hangs system. Considered DID==0 as a valid option meaning all devices.
    Files: PciBus.c
    EIP 60123
    Resource padding is not functional for PCIe hot-plug. Caused by In hot plug function was missed changes in BusXlat. Fixed AmiBoardInfo driver to correctly update HP slot info.
    Files: PciHostBridge.c; PciBoard.c; AmiBoardInfo.c.
  • Update Instructions
  • This release id part of Core 4651. Follow Core 4651 update instructions.
  • For Out of Resources condition handling get 4650_PCI_BRD_RES_01A component from $/Alaska/BIN/Modules/Template/PciPlatformResources/
  • See PCI Porting Guide on AMI Share Portal for more details and coding examples. Updated Porting Guide corresponding current label also attached to EIP 55759
    • 4650_PCIBUSBIN_25_0:
  • NewFeatures
    • EIP 38174
    Generic support to handle PCI OUT OF RESOURDCES conditions
    Files: PciBus.c; PciHostBridge.c;
    EIP 53475
    Generic PCI Express 3.0 support.
    Files: PciBus.c; PciBus.uni; PciBus.sd
  • Bug Fixes
    • Minor bug fixes not related to any eip EIP. Code cleanup.
  • Update Instructions
  • Remove old PciBUs Module (Sources and Binaries)
  • Download new 4650_PCIBUSSRC_25_0; 4650_PCIBUSBIN_25_0
  • Update following Core Files: AcpiRes.c(checkin #36 or up); AcpiRes.h(#16); Setup.h(#36)
  • Check EIP 57650. If EIP is closed get latest TSE Binaries, if not use attaced to that EIP bootflow.c and booflow.h.
  • For Out of Resources condition handling get 4650_PCI_BRD_RES_01A component from $/Alaska/BIN/Modules/Template/PciPlatformResources/
  • See PCI Porting Guide on AMI Share Portal for more details and coding examples. Updated Porting Guide corresponding current label also attached to EIP 55759
    • 4650_PCIBUS_24_0
  • NewFeatures:
    • EIP48290:
    Added PCI_AMI_COMBINE_MEM_PMEM32 token that tells to map 32 bit sized PF MMIO BARs trough NON PF MMIO Bridge registers.
    Files: PciBus.c; PciBus.sdl;
    EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
  • Improvements
    • EIP43879:
    Added PciPortOemGetOptRom() OEM Hook to override content of the PCI Device Option ROM.
    Files: PciBus.c; PciPort.c; PciPort.h; PciBus.mak; PciBus.sdl
    EIP45278:
    Changed default resource allocation algorithm to work more efficiently.
    Files: PciBus.c; PciHostBridge.c
    EIP49743:
    Workaround for devices which having Link Retrain bit "sticky".
    Files: PciBus.c
    EIP50097:
    Fixed issue when with PCI_FIXED_BUS_ASSIGNMENT==1 system was ASSERTING. Reason was that with complicated PCI structure next bridge XLAT entry that used to determine Subordinate bus #, selected incorrectly.
    Files: PciBus.c
    Removed Setup Option "Selectable DeEmphasis" since it is HwInit Bit.
  • Bug Fixes
    • EIP49743
    Incorrect initialization complicated PCI infrastructure wrong condition to breake {do while loop}.
    Files: PciBus.c
    EIP49743
    In the PcieCalcLatency(), the do-while loop condition have issue in this.
    It may be a condition when while loop in function PcieCalcLatency(), will never break.
    Files: PciBus.c
    Fixed bug in PcieCalcLatency() function. It was not calculating L1 latency correctly.
    4640_PCIBUS_24_0
    Features and Bug Fixes:
    PciHostBridge.c
  • Updated CreateRootBusData to call HbCspDoesRootBrgExist to determine whether to updated the BusXlat table for the particular host device.
  • Updated ClaimMmioResources to use MMIO resources as-is if AllocType is set to EfiGcdAllocateAddress. For this chipset, each root bridge is programmed with base and limit values for 32bit and 64bit MMIO. The root bridge will only decode addresses within these ranges. For this reason, the Base and Limit values passed to the PCI Bus driver should be used as-is and not modified.
    • PciBus.c
  • EIP 41687: The PciBus.c had workaround code for patching bad PCI or PCIe device list. Bad Pci list only could not cover device reource that requested more than one MMIO resources.
  • New Incompatibility Type Sypport: icBad64BitBar - Device has a bar that is 64bit capable, but the card does not function properly when it is allocated with an address above 4G.
  • Freeing all Memory when exiting with ERROR from EnumerateBus() function.
  • Fixed UEFI Option ROM Size miscalculation.
  • EIP 40554: Fixed WDK Build Issue.
  • EIP 38289: Minor fix for Klocwork Issues II.
  • Improved logic to select matching PCI Bus Xlat table entry.
  • Fixed condition to disable device using 64 bit resource threshold.
  • Fixed bug in DoubleCheckOpRom() when OpROM is a Single Image ROM.
  • Fixed build error with SRIOV token ON.
    • MPL Programming:
  • Bug fix in PcieProgramPayloadUp() function, canged order when recording calculated PayLoad.
  • It use to recursive call was made after reduced value of MPL was recorded. It was preventing function to program MPL correctly.
  • Fixed InitDevCahain() function Logic.
  • Fixed issue with PCIe Switches and MPL programming UP.
  • Fixed Possible issue with incorrect MPL Programming.
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • PciPort.c; PciPort.h
  • Introduced a New Csp Hook to overwrite global ASPM Settings.
    • 4640_PCIBUS_24_0_TEST
    1. This Label is ONLY compatible with Core 4.6.4.0!
    2. This PCI Bus Driver Label also requires separately labeled Core.AmiBoardInfo Component and ACPI Module Label 32 or later.
    3. This label uses new, "C" style output of the AMI SDL. It is required update VeB and AMI SDL tool to version 5.68.0116 or Higher .
    4. In this label has competely redesigned an Algorithm used to initialize PCI Express Features including customers suggestions.
    5. Generic Support of PCI Express Base Specification ver. 2.1 was added.
    6. PCI Setup Screen was changed to separate PCI Express 1.1 Features and 2.1 (Generation 2).
    7. Label theoretically support ARI Forwarding... BUT No testing has been done since there are no ARI Hardware available yet.
    8. A generic Hot-Plug support also was improved in this label.
    9. PCI Root Bridge Driver uses information generated by VeB and some tokens from PciBus.sdl automatically produces MULTY ROOT infrastructure.
    10.When updating make sure you have followed update instructions from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    11.New Chipset template will have all needed parts referenced in NEW ACPI ROOT Resource Allocation.
    Update Instructions
    1. Make sure your project has CORE 4640.
    2. Update AmiBoardInfo Sub Component with 4640_AMI_BOARD_0100.
    3. Get PCI Bus Driver Module From SS Label 4640_PCIBUSBIN_240_TEST.
    4 If your project has Sources: Get PCI Bus Driver Module From SS Label 4640_PCIBUSSRC_240_TEST.
    5. Verify that you have followed update instructuins from 4636_PCIBUS_23_0_TEST in project's Chipset files.
    6. Enjoy!
    4636_PCIBUS_23_0_TEST
    New Features and Bug Fixes
    PciBus.c
    1. P2P Bridge Spec. v1.1 requires to set INT Line Register to 0xFF. PCI spec 3.0 require to set it to 0xFF - means not connected for x86 architecture. Values of 0..0x0F indicating IRQ0..15 values 0x10..0xFE reserved.
    2. Fixed (~0LU) statement to (0ULL). This is correct statement for 64 bit Value.
    3. Component Name protocol implementation is updated to support both Component Name and ComponentName2 protocols (based on value of the EFI_SPECIFICATION_VERSION SDL token).
    4. Fixed: EIP 19106 If 1 Bus set to be padded in Setup, PCI Bus driver still creates 1 BUS for this bridge instead of 2.
    5. Moved DisableBridgeDecoding() call before Disable device decoding since it could decode 0-4K of IO and 0-1M of Memory.
    6. Fixed conditions in ApplyAcpiResources() where function assumes validity of Resource Range. In case of Fixed Resource Allocation Resource window allocated by custom unction might be bigger than actual hardware resource request.
    7. Fixed EIP 26787. If P2P Bridge has Expansion ROM BAR, value that has to go there was programmed as Secondary Interface Forward Range.
    PciHostBridge.c
    1. Added Print out Message in DEBUG_MODE with PCI BUS Driver Version.
    2. Added Initialization of ImageHandle field in Host Bridge and Root Bridge Structures. (New PciHostBridge.h required).
    3. Generic support for multiple root bridges resources reporting to ACPI DSDT Root Bridge Object (EIP 23548 Support MMIO allocation above 4GB, if devices are capable).
    PciPort.c and PciPort.h
    1. Added infrastructure to ELINKs as porting Functions delivered from Platform and Chipset files. Now you can port PCI Bus driver without modifying Core files
    PciHostBridge.h
    1. Added definitions to support changes for EIP 23548 (Support MMIO allocation above 4GB).
    PciBus.sdl
    1. PCI Bus Driver Version Changes.
    2. Added Parenting eLinks "OEM_SKIP_PCI_DEVICE"; "OEM_PROGRAM_PCI_DEVICE"; "OEM_PCI_ATTRIBUTES". To implement PCI Bus Driver hooks invocation w/o modifying Generic Files.
    PciBus.mak Changes
    1. Added Definitions for OEM_PCI_PROGRAM_DEVICE_CALLBACK_LIST; OEM_PCI_SKIP_DEVICE_CALLBACK_LIST and OEM_PCI_DEVICE_ATTRIBUTES_LIST to support adding porting hooks trough eLinks.
    Update Instructions
    Get PCI Bus Driver Module From SS. If your Project has CORE Earlier than 4.6.3.6, You need to upgrade to Core 4.6.3.6. first. Please follow instructions listed in here in "Revision History" Section or CORE CHM.
    PCI Bus Driver Version 2.3.0 Assumes that following modules are present in the Project.
    1. AmiBoardInfo eModule Part (Part Of Core BIN Starting from "SS: Alaska;$/Alaska/BIN/Core\Modules/BoardInfo;4.6.3.6" )
    2. ACPI Module Label 32. Upgrade from earlier Module Possible by following Steps below:
    a)Get updated OSCM.ASL from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    b)Get New file RbRes.asl from ACPI 32 (it must be included from each ROOT BRIDGE Device Scope)
    c)Get Updated AMLUPD.ASL (Some place holders no longer needed)
    d)Make sure each implementation of ROOT PCI Object in ASL Like "PCI0" "PCI1"(usually it is Nb.asl and Nb2.asl) must include following:

        include("Core\\Em\\ACPI\\RbRes.ASL")
        include("Core\\Em\\ACPI\\OSCM.ASL")
    e)Make sure to comment out all related to ROOT BRIDGE _CRS Method Objects from OEM_DSDT.ASL.
    f)If your project uses multiple ROOT BRIDGEs and predefined resource splitting. Use following code as reference for implementation of Resource Allocating routine

    //-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                    PCI_ROOT_BRG_DATA *RootBrgData,
                                    UINTN RootBrgIndex)
{
    EFI_STATUS					Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here

    UINTN						i;
    ASLR_QWORD_ASD				*res;
    UINT64						a=0;
    UINT64						AddressLimit=0;
    DXE_SERVICES				*dxe;
    EFI_IOH_UDS_PROTOCOL  		*mIohUds; //Platform/Chipset Sapecifik interface provoding information about resource Split between Multiple ROOTs.
    EFI_GUID 					gEfiIohUdsProtocolGuid = EFI_IOH_UDS_PROTOCOL_GUID;

    // ported for two IOHs

  // koti : TO_DO : further improvement on resources based on setup options, if one IOH requires more than other and
    // Checking for error conditions on not to assign a more than qpi decode range.
    if (RootBrgIndex > (NUMBER_IOH_SOCKETS-1)) return Status;
    Status = pBS->LocateProtocol(
                            &gEfiIohUdsProtocolGuid,
                            NULL,
                            &mIohUds);
    ASSERT_EFI_ERROR (Status);
    if (EFI_ERROR(Status))
        return Status;

    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    //Feel out needed structures.
    if(RootBrgData->AcpiRbRes[raIo].Min==0){ //do it only ones
        RootBrgData->AcpiRbRes[raIo].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
        RootBrgData->AcpiRbRes[raIo].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
        RootBrgData->AcpiRbRes[raIo].Len=RootBrgData->AcpiRbRes[raIo].Max-RootBrgData->AcpiRbRes[raIo].Min+1;
        RootBrgData->AcpiRbRes[raIo].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit+1;
        RootBrgData->AcpiRbRes[raIo].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio32].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
        RootBrgData->AcpiRbRes[raMmio32].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
        RootBrgData->AcpiRbRes[raMmio32].Len=RootBrgData->AcpiRbRes[raMmio32].Max-RootBrgData->AcpiRbRes[raMmio32].Min+1;
        RootBrgData->AcpiRbRes[raMmio32].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit+1;
        RootBrgData->AcpiRbRes[raMmio32].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;

        RootBrgData->AcpiRbRes[raMmio64].Min=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
        RootBrgData->AcpiRbRes[raMmio64].Max=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
        RootBrgData->AcpiRbRes[raMmio64].Len=RootBrgData->AcpiRbRes[raMmio64].Max-RootBrgData->AcpiRbRes[raMmio64].Min+1;
        RootBrgData->AcpiRbRes[raMmio64].AddrUsed=mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit+1;
        RootBrgData->AcpiRbRes[raMmio64].AllocType=EfiGcdAllocateMaxAddressSearchTopDown;
    }

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) {
            TRACE((-1, "PciRB: #%X BUS _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX\n",
                        RootBrgIndex,res->_MIN,res->_MAX,res->_LEN, res->_GRA));
            continue;
        }
        // update io and memory values from qpi rc output.
        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){

        //
        //Set Resource starting address for IO based on which RB it is.
        // Update Root Bridge with UDS resource information
        //
            RootBrgData->AcpiRbRes[raIo].Gra=res->_MAX;
            a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoBase;
            AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceIoLimit;
            AddressLimit = AddressLimit + 1; // make power of 2
            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, a, AddressLimit));

            TRACE((-1, "PciRB: #%X IO ",RootBrgIndex));
            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRB: IO Allocation Failed: _LEN=%lX; _GRA=l%X.\n",res->_LEN, res->_MAX));
                ASSERT_EFI_ERROR(Status);
                return Status;
            }
        }
        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){
            //First root or Second one????
            if(res->_GRA==32){
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem32Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO32",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio32].Gra=res->_MAX;
            } else {
                a = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Base;
                AddressLimit = mIohUds->IohUdsPtr->PlatformData.IOH_resource[RootBrgIndex].PciResourceMem64Limit;
                AddressLimit = AddressLimit + 1; // make power of 2
                TRACE((-1, "PciRB: #%X MMIO64",RootBrgIndex));
                RootBrgData->AcpiRbRes[raMmio64].Gra=res->_MAX;
            }

            TRACE((-1,"PciRB: #%X Resources Type=%X; routed by QPI: _GRA=%lX; Address base = %lX; AddressLimit=%lX; \n",
            RootBrgIndex, res->Type, res->_GRA, a, AddressLimit));

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchTopDown,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &AddressLimit,
                            RootBrgData->ImageHandle,
                            RootBrgData->RbHandle);
            if(EFI_ERROR(Status)) {
                TRACE((-1,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                TRACE((-1,"P"));
                Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    TRACE((-1,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(AddressLimit,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN = AddressLimit;
//		TRACE((-1,"PciRB: #%X Resources: Type=%X; TFlags=%X; GCD asssigned address _MIN=%lX; _MAX=%lX; _GRA=%lX; _LEN=%lX.\n",
//        RootBrgIndex, res->Type, res->TFlags.TFLAGS,res->_MIN, res->_MAX, res->_GRA, res->_LEN ));
        TRACE((-1, ": _MIN=0x%lX; _MAX=0x%lX; _LEN=0x%lX; _GRA=0x%lX\n",
        res->_MIN,res->_MAX,res->_LEN, res->_GRA ));

        //No need to change this and lose Granularity Value... will preserve it.
        //res->_MAX=res->_MIN+res->_LEN-1;
    }

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    g)If you are using Standard(Single Root Project) or you want to use dynamic (default) resource allocation Algorithm, have HbCspAllocateResources() function return EFI_UNSUPPORTED. If so, default resource allocation algorithm will be used.
    h)Replace function UpdateAml() at ACPICore.c with following code:

//
//----------------------------------------------------------------------------
//  Procedure:   UpdateAml
//
//  Description:
//  This function updates AML objects with values provided in ACPI_AML_UPD_INFO
//  structure
//
//  Input:
//  IN ACPI_AML_UPD_INFO *AmlUpdInfo - pointer to ACPI_AML_UPD_INFO structure
//
//  Output:
//  EFI_SUCCESS - AML objects updated successfully
//  EFI_ERROR - some error occured during update process
//
//----------------------------------------------------------------------------
//

EFI_STATUS UpdateAml(ACPI_AML_UPD_INFO	*AmlUpdInfo)
{
    UINTN			i;
    ACPI_HDR 	*Dsdt;
    EFI_STATUS		Status = 0;

//-------------------------

    for(i = 0; i < 2; i++){
        if (i) Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt1Addr;
        else Dsdt = (ACPI_HDR*)AmlUpdInfo->Dsdt2Addr;
        if (Dsdt){
            //Update TOPM Object
            Status = UpdateAslNameObject(Dsdt, "TOPM", AmlUpdInfo->TopOfMemory);
            ASSERT_EFI_ERROR (Status)
            if (EFI_ERROR(Status)) return Status;

            //Update ROMS Object
            //Status = UpdateNameObject(Dsdt, AML_NAME_ROMS, AmlUpdInfo->RomStart);
            //ASSERT_EFI_ERROR(Status)
            //if(EFI_ERROR(Status)) return Status;
//TODO: IOST and SSx Objects update
            //Update IOST Object
            Status = UpdateAslNameObject(Dsdt, "IOST", (UINT64)AmlUpdInfo->SioDevStatusVar.DEV_STATUS);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS4", (UINT64)AmlUpdInfo->SS4);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Status = UpdateAslNameObject(Dsdt, "SS3", (UINT64)AmlUpdInfo->SS3);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS2", (UINT64)AmlUpdInfo->SS2);
            ASSERT_EFI_ERROR(Status)

            if(EFI_ERROR(Status)) return Status;
            Status = UpdateAslNameObject(Dsdt, "SS1", (UINT64)AmlUpdInfo->SS1);
            ASSERT_EFI_ERROR(Status)
            if(EFI_ERROR(Status)) return Status;

            Dsdt->Checksum = 0;
            Dsdt->Checksum = ChsumTbl((UINT8*)Dsdt, Dsdt->Length);
        }
    }
    return Status;
}
    i) Comment out function CollectPciAmlUpdInfo(ACPI_AML_UPD_INFO *AmlUpdInfo).
    j) Comment call to function CollectPciAmlUpdInfo() from CollectAmlUpdInfo() function. This functionality moved into PciHostBridge.c:

//	Status=CollectPciAmlUpdInfo(Aui);
//	ASSERT_EFI_ERROR(Status);
    4633_PCIBUS_2_2:
    Fixes:
    1. Fixed minor issues, related to PCI IRQ entries usage and update.
    2. Potential issue when optimizing resources EIP 21366. Extra BAR Length value could overflow if initial eBar->Length totally used by other resource requests.
    3. Fixed potential Memory corruption issue when assigning Ext->XlatEntry->BusRun for bridges not having corresponded XlatTbl Entry.
    4. Fixed issue with Multi Root support and incorrect bus allocation for the secondary Root(s) if they have advanced (more than 1) bus structure.
    5. Fixed issue in AssignBridgeResources() function when there are no bars to program function was returning ERROR Status.
    6. Other Minor bug fixes and code cleanup.
    New Features in Release:
    1. Separated from PCI Bus Driver all PCI Bus related auto generated output files.
    2. Made PciBus and PCI Root Bridge Driver use New "AMI Board Info" Protocol.
    3. Added Generic Support for PERR#, SERR# and VGA Palette Snoop settings.
    4. Added PCI Porting Hooks to overwrite setting Device Attributes.
    5. Added Generic Support and Setup Question on how to handle resource requests Above 4G.
    6. Added "Semi-Automatic" Support for PCI Express Hot-Plug controlled by the BIOS. Supported only if AMI_ROOT_BRIDGE_SUPPORT token set to ON. will work only with Recent CHIPSET Template and ACPI label higher than 30.
    7. Added Setup Form to configure Hot-Plug settings.
    Files Changed In this Label.
    Removed: PciBoard.asm; PciBoard.h; PciBusSrcRbx64; PciBusSrcRb
    Added: PciPort.h; PciBusSrc.chm
    PciBus.c:
    1. Changed name and initialization of mMaxBusLen global variable to mMaxBusScan.
    2. Added Debug messages when updating IRQ routing table.
    3. Added Dump of PIC and APIC IRQ Routing Tables dump at the end of enumeration.
    4. Added fix in OptimizeBrgResource() function
    5. Changes related to removing PciBoard.h and usage of <Protocol\AmiBoardInfo.h>
    PciBus.h:
    1. PCI_DEV_INFO added new fields and Data types.
    PciHostridge.c
    1. Changes related to production of Root HP Controller Initialization Protocol.
    2. Changes related to removing PciBoard.h and PciBoard.asm from Root Bridge driver.
    PciPort.h; PciPort.c:
    1.Added new porting hooks prototypes and implementations
    PciBus.mak;PciBusSrc.mak:
    1. Changes related to removing/adding files to/from component.
    PciBus.sdl;PciBusSrc.sdl:
    1. Changes related to the new features implementation. Some eLinks was removed since they don't needed anymore.
    PciBusSetup.h; PciBus.sd; PciBus.uni:
    1. Changes related to the new features implementation.
    Update Instructions.
    1. Upgrade PciBus Component.
    2. If your project contains "Core Sources" module, upgrade PciBus sources component.
    3. Two additional parameters have been added to HbCspMapRootBrgToHost function in NbPciCsp.c (Function HbCspMapRootBrgToHost was introduced in PCI Bus Driver Label 21). On most of the projects current definition of the function can simply be replaced with the one below. Multi-host projects may require additional porting.

//<AMI_PHDR_START>/----------------------------------------------------------------------------
//
// Procedure:   HbCspMapRootBrgToHost
//
// Description:	Chipset specific function that returns Host Bridge Number for
//              the corresponded Root Bridge.
//
// Input:
//  IN PCI_BUS_XLAT_HDR*  RootBrgXlatHdr - Root Bridge XLAT table entry
//
// Output:
//      UINTN - Number of the Host Bridge that root bridge identified by RootBrgXlatHdr belongs to.
//
// Note:
//  THIS FUNCTION MUST BE PORTED FOR MULTI-HOST SYSTEMS
//
//  HOST bridge handle supports:
//    - ResourceAllocation Protocol (REQUIRED);
//    - RootHotplugControllerInitialization Protocol (OPTIONAL);
//    - PciPlatform Protocol (OPTIONAL).
//  ROOT bridge handle supports:
//    -PciRootBridgeIo Protocol (REQUIRED).
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
UINTN HbCspMapRootBrgToHost(IN PCI_BUS_XLAT_HDR *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr)
{
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//

//Usually even server chipsets use only one PCI HOST abstraction
//but if  chipset has more than one HOST we have to specify
//which ROOT from PciBusXlat table belongs to which HOST.

    //Check if we need to update/change Allocation Attributes Passed to this function...
    //Here we have ability to override Automaticaly generated Attributes based on
    //SDL tokens COMBINE_MEM_PMEM and ABOVE_4G_PCI_DECODE
    //bits currently defined for Allocation Attributes is:
    //  EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM
    //  EFI_PCI_HOST_BRIDGE_MEM64_DECODE
    //Usually nothing needs to be done sor SINGLE HOST-SINGLE-ROOT systems
    //NOTE: this function could be called more than one time for each HOST
    // if you updating AllocationAttr only last data will be valid.
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT allocation attributes.
    // Add code only if you need to overwrite it.

    //if i.e. second root does not support PF_MMIO
    //if(RootBrgXlatHdr->BusBuild == 0x80 ) *AllocationAttr &= ~(EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM);
    //else *RbSuportedAttr = ....;

    //Check that in VeB PCI Wizard this Root creates bus 0
    //This is usualy a compatibility bus
    //Set the Compatibility bus Attributes it must decode Legacy resources
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // PCI HostBridge Driver sets DEFAULT Supported ROOT BRIDGE Attributes.
    // Add code only if you need to overwrite it.

    //if(RootBrgXlatHdr->BusBuild==0) *RbSuportedAttr=
    //(EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
    //EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
    //EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
    //EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO);
    //else *RbSuportedAttr=0;

    //Returning Host Number for Root Bridge corresponded to the Root
    //ported as RootBrgXlatHdr->BusBuild from BusXLat Table
    //for single SINGLEHOST-SINGLE-ROOT system this value always 0
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // If your system MULTY-HOST/MULTY-ROOTs system
    //you need to add code here to correctly map each ROOT referenced in VeB wizard
    //to it's corresponded host

    return 0;

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
}
    4. Add the following definition of the new function HbCspAllocateResources to NbPciCsp.c.

//-----------------------------------------------------------------------
//CSP Function invoked in PCI Host Bridge Driver when time to ask GCD
//for resources. You can overwrite a default algorithm used to allocate
//resources for the Root Bridge.
EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_UNSUPPORTED;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//Any Additional Variables goes here
/*
    UINTN				i;
    ASLR_QWORD_ASD		*res;
    UINT64				a=0;
    DXE_SERVICES		*dxe;
//------------------------------------
    Status=LibGetDxeSvcTbl(&dxe);
    if(EFI_ERROR(Status)) return Status;

    for(i=0; iResCount; i++){
        res=RootBrgData->RbRes[i];
        if(res->Type==ASLRV_SPC_TYPE_BUS) continue;

        //Allocate IO
        if(res->Type==ASLRV_SPC_TYPE_IO){
            //First root or Second one????
            //Set Resource starting address for IO based on which RB it is.
            if(RootBrgIndex==0) a= 0xB000;
            else a=0xc000;

            //Use prefered method to allocate resources for
            Status=dxe->AllocateIoSpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdIoTypeIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: IO Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }
        }

        //Allocate MMIO
        else if( res->Type==ASLRV_SPC_TYPE_MEM){

            //None PF memeory Will Have TypeSpecific Flag Different.

            //First root or Second one????
            if(res->_GRA==32){
                if(RootBrgIndex==0 ) a= 0xB0000000; //Set Resource starting address for IO
                else a=0xC0000000;
            } else {
                if(RootBrgIndex==0 ) a= 0x800000000; //Set Resource starting address for IO
                else a=0x1000000000;
            }

            Status=dxe->AllocateMemorySpace(EfiGcdAllocateMaxAddressSearchBottomUp,
                            EfiGcdMemoryTypeMemoryMappedIo,
                            AlignFromGra((UINTN)res->_MAX),
                            res->_LEN,
                            &a,
                            RootBrgData->RbHandle, NULL);
            if(EFI_ERROR(Status)) {
                PCI_TRACE((TRACE_PCI,"PciRootBrg: Memory Allocation Failed: Length: %lX\n",res->_LEN));
                return Status;
            }

            //Set this region as WT cache if it is PREFETCHABLE
            if(res->TFlags.MEM_FLAGS._MEM!=ASLRV_MEM_UC)
            {
                Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_WT);
                //if attempt to set WT attributes has filed, let's try UC
                if(EFI_ERROR(Status))
                {
                    PCI_TRACE((TRACE_DXE_CHIPSET,"PciHostBridge: Setting of WT attributes for prefetchable memory has failed(%r). UC is used.\n",Status));
                    Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
                }
            }
            else Status=dxe->SetMemorySpaceAttributes(a,res->_LEN,EFI_MEMORY_UC);
            ASSERT_EFI_ERROR(Status);
            if(EFI_ERROR(Status)) return Status;

        }
        res->_MIN=a;
        res->_MAX=res->_MIN+res->_LEN-1;
    }
*/

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    5. Remove definitions of the following four variables from NbPciCsp.c (the variables are no longer needed).
      •
UINTN	gRbCountTbl[NB_NUMBER_OF_HOST_BRG]={
    1, 	//Number of root bridges produced by Host #0
        //Number of root bridges produced by Host #1
        //Number of root bridges produced by Host #2
        //Number of root bridges produced by Host #3
};

      •
UINT64 gHbAllocAttribTbl[NB_NUMBER_OF_HOST_BRG]={
// Changed next line to 0 because screen would go blank early
// during EFI Vista installation
//	EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM,	//Allocation Attributes of Host #0
    0,	//Allocation Attributes of Host #0
        //Allocation Attributes of Host #1
        //Allocation Attributes of Host #2
        //Allocation Attributes of Host #3
        // And so on
};

      •
ASLR_QWORD_ASD	gRbBusesTbl[]={
//for Root 0 at Host 0
    {0x8A, 0x2B,ASLRV_SPC_TYPE_BUS, 0,0,  	0x1, 	0x00, 	0xFF, 	0, 		0x100 }//Bus
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any
};

      •
UINT64	gRbSupportsTbl[]={
//for Root 0 at Host 0
    (EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |	EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO| \
     EFI_PCI_ATTRIBUTE_ISA_IO | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO  | \
     EFI_PCI_ATTRIBUTE_VGA_MEMORY | EFI_PCI_ATTRIBUTE_VGA_IO | \
     EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO),
//for Root 1 at Host 0 if any

//for Root 0 at Host 1 if any

// and so on...
};
    6. Update implementation of function HbCspStartBusEnumeration in NbPciCsp.c. Older versions of PCI host bridge driver expected this function to create ACPI resource descriptor that defines available range of buses. It is no longer necessary. The information about available bus range is derived from the data generated by VeB PCI routing wizard. The function implementation must be replaced with the following code:

EFI_STATUS HbCspStartBusEnumeration(
        PCI_HOST_BRG_DATA *HostBrgData,PCI_ROOT_BRG_DATA *RootBrgData,UINTN RootBrgIndex)
{
    EFI_STATUS	Status=EFI_SUCCESS;
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!!!!!!ATTENTION!!!!!
//!!!!!NO NEED IMPLEMENTING THIS FUNCTION AMYMORE.
//IT MAY BE IMPLEMENTED IF YOU NEED TO OWERWRITE INITIAL BUILD TIME BUS ASSIGNMENT.
//USE RootBrgData->RbRes[i] of type ASLR_QWORD_ASD with Type field ==ASLRV_SPC_TYPE_BUS

//Any Additional Variables goes here

//------------------------------------

//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
//PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING////PORTING//
    return Status;
}
    7. Update declaration of HbCspMapRootBrgToHost function in NbCspLib.h:

UINTN HbCspMapRootBrgToHost(PCI_BUS_XLAT_HDR    *RootBrgXlatHdr,
                            UINT64              *AllocationAttr,
                            UINT64              *RbSuportedAttr);
    8. Add the following declaration of HbCspAllocateResources function to NbCspLib.h:

EFI_STATUS HbCspAllocateResources( PCI_HOST_BRG_DATA *HostBrgData,
                                PCI_ROOT_BRG_DATA *RootBrgData,
                                UINTN RootBrgIndex);
    NOTE #1: Sub Component is compatible with Core 4.6.3.6 or later.
    NOTE #2: To use PciBus Subcomponent of version 2.2.0 with the older versions of CORE, you need to add "AmiBoardInfo" MODULEPART from Core 4.6.3.6 to your project and update "Protocol" module part to get AmiBoardInfo.h header.
    NOTNOTE #3: If You updating to PciBus Driver v2.2.0 to have Generic PCIExpress Hot-Plug Support, you will need ACPI Label higher than 30 and most recent CHIPSET template. See AMI_Aptio_4.x_PCI_Porting_Guide_NDA_rev_03 on SHAREPORTAL for instructions how to port project for Hot Plug Support.
    4633_PCIBUS_21_2:
    Fixes:
    1. Fixed PCI Express MaxPayload and ReadRequest Size calculation algorithm. EIP #17947.
    2. Potential issue with name collision in PciHostBridge.c and PciBus.c. Renamed some global variables used.
    3. Added changes to support /W4 build switch.
    4. Added fix to break the PCI Express Extended Capability header access if read returns 0xFFFF. EIP #19144.
    New Features:
    Added "PciPortSkipThisDevice()" to handle PCI Devices which not suppose to be "Touched" during enumeration Process. EIP #8874
    4633_PCIBUS_21_1: Minor bug fixes label
    Fixes:
    1. Fixed "Connect -r" issue EIP #17740..
    2. Fixed Start function of the PCI Bus Driver. It use to return EFI_SUCCESS even
    when all devices were STARTTED. Now it returning EFI_ALREADY_STARTED. This will
    help save some time when CORE attempts to start ALREADY STARTED devices since
    Start() function returned SUCCESS.
    New Features:
    2. None.
    4633_PCIBUS_21: First independent label of the subcomponent.
    Fixes:
    1. Fixed SRIOV support.
    2. Added changes to pass PCI SIG Compliance test.
    3. Changes in PciBusEx Protocol. Some functions there moved to AMI Board Info Interface
    4. Fixed Stop() function in DriverBinding Protocol of the PCI Bus Driver.
    5. Removed EFI_DEADLOOP() used for debugging in PciBus.c and PciHostBridge.c
    New Features:
    1. PCI Root Bridge Driver Installs AMI Board Information Protocol now. It groups together all.
    2. Added Definitions for AMI Board Information Protocol.
    3. Corresponded changes in Make files since PCI RootBridge Driver has to start to install AMI_BOARD_INFO Protocol even when AMI_ROOT_BRIDGE_SUPPORT token is OFF.
    4. Introduced changes to Extended PCI Bus Protocol interface
    5. Added New PciBusSrcRb.Lib and PciBusSrcRbx64.lib build with AMI_ROOT_BRIDGE_SUPPORT set to OFF. Helps to reduce size of the PCI Module when using non-AMI RootBridge driver.


eModule Release Notes

AMIBIOS Component Release Notes

Component Information:
Component Name: PCIBus
Component Type: eModulePart
Release Date: 2012/10/10
Source Control Label: No separate label, Core 4.6.5.4 label used
Binary Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/PciBus
Sources Source Control Location: SS:ALASKA;$/Alaska/BIN/Core/Modules/PciBus
Component Description:
Pci Bus Sources Subcomponent (Part of "Core Sources" component)
Filename | Description
PciBusSrc.sdl | "PciBusSources" Module's SDL tokens file (modified by VeB)
PciBusSrc.mak | PCI Bus Sources Module MAK file (builds Module and all it's components)
PciBus.c | Main PCI Bus Driver file. It has Pci Bus Driver entry point and PciIo Protocol implementation.
PciHostBridge.c | Pci Root Bridge Driver file. Has Implementation of PciRootBridgeIo Protocol.
DeviceIo.c | Implementation of DeviceIo Protocol for compatibility sake. This protocol does not supported by UEFI anymore.
PCI Bus Subcomponent (Part of Core component)
Filename | Description
PciBus.sdl | "PciBus" Module SDL tokens file (modified by VeB)
PciBus.mak | "PciBus" Module MAK file (builds Module and all it's components)
PciBus.sd | "PciBus" Module Setup Definitions (SD) file (Provides PciBus Driver Setup Screen)
PciBus.uni | "PciBus" Module Setup Strings used by SD file.
PciBusSetup.c | "PciBus" Module Strings override routines to dynamically change Setup options.
PciPort.c | "PciBus" Driver porting file.
PciSetup.h | "PciBus" Driver Setup types definitions. Separates board specific setup data from Generic Pci Bus Driver code.
PciBoard.asm | Assembly Language file which includes all VeB auto-generated files.
PciBusSrc.lib | 32bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciBusSrcx64.lib | 64bit version of PciBus Library used to build final Driver Image (removed in v2.5.0 and up).
PciPort.h | Definition file of available Porting Functions.
PciRootBridge.dxs | Dependency expression file for PCI Root Bridge Driver..
PciBusIncludes Subcomponent (Part of PCI Bus Component)
Filename | Description
PciBus.h | "PciBus" Driver private types and data definitions
PciHostbridge.h | "PciRootBridge" Driver private types and data definitions
PciBusEx.h | PCI Bus Extended Protocol interface declarations and data types
PCIe30.h | PCI Express Specification version definitions.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_39, Dated: 2012-04-04
Visual eBios: RSS.5.73.0239, Dated: 2012-06-21
Compiler Tool(s): WinDDK 7600.16385.1; DDK 3790.1830
New features added in this label:
Create valid PCI device handle before processing OpROM of the device (EIP 88259)
Porting hook to enable/disable OpROM execution uses PCI device handle instead of PCI class/subclass values (EIP 86097)
Preserve PCI DEV/LNK/SLT control register on S3 resume path (EIP 93341)
PCI root bridge should access MMIO space above 4GB (EIP 90378)
Uninstall PCI_ROOT_BRIDGE_IO_PROTOCOL from unexisting handle (EIP 92897)
Added token to set PCIe capabilities (EIP 100249)
General Bug Fixes:
Fixed SCT reported error in PCI bus support test (EIP 87005)
Fixed Windows yellow marks for PCIe slots (EIP 84986)
Fixed failed call to SetAttributes function (EIP 93141)
Fixed bug that prevents I350 Powerville LOM UEFI driver from loading (EIP 99393)
EIP addressed in this label:
87005
88259
84986
86097
93141
93341
90378
92897
99393
100249
Files changed:
PciBus.c
PciHostBridge.c
PciBus.sd
PciBus.uni
PciPort.c
PciSetup.h
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:
N/A
Validation Testing:
N/A

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: PS2CTL
Component Reference Name: PS2CTL
Component Type: ModulePart
Release Date: 2011-03-28
Source Control Label: 4.6.5.0
Source Control Location: SS: Alaska;$/Alaska/Source/Core/CORE_DXE/PS2CTL;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The PS2CTL Module can be added to a EFI BIOS to support PS2 Keyboard and PS2 Mouse. This driver supports PS/2 keyboard and/or PS/2 mouse depending on the switches in SDL tokens. Based on the switches enabled it will
  1. detect PS2 keyboard and install EFI_SIMPLE_TEXT_INPUT_PROTOCOL
  2. detect PS2 mouse and install EFI_SIMPLE_POINTER_PROTOCOL
PS2CTL module contains the following files:

Filename | Description
Main Component | Root\Core\em\PS2CTL
PS2Ctl.cif | Component information file for the ModulePart
PS2Ctl.mak | Make file becomes part of the BIOS build process
PS2Ctl.sdl | Contains BIOS build parameters of PS/2 Controller driver.
ps2kbd.c | File contains PS/2 keyboard support routines.
ps2main.c | File contains main routines to suppport PS/2 keyboard and PS/2 mouse depending on the switches in SDL tokens.
ps2ctl.c | File contains the definitions of PS/2 Controller driver.
kbc.h | File contains the definitions of Keyboard Controller.
kbc.c | File contains PS/2 Controller I/O support functions.
ps2mouse.h | File contains the definitions for PS/2 mouse support routines.
mouse.c | File contains PS/2 mouse I/O support functions.
efismplpp.c | File contains functions related to PS/2 mouse implementation of simple pointer protocol.
Names.c | File contains functions related to Component name producer of PS/2 Controller driver.
hotkey.c | File contains PS/2 keyboard hotkeys support routines.

BIOS Parameters:
Parameter Name | Type | Description
PS2MOUSE_SUPPORT | Boolean | Switch to Enable/Disable PS2 Mouse support.
PS2KBD_SUPPORT | Boolean | Switch to Enable/Disable PS2 Keyboard support.
KBC_AUTODETECT_PORTS Boolean Auto detection of KB/MS using AMI KB-5. This switch will enable/disable the connector swap
of Keyboard and PS2 Mouse i.e. keyboard can be connected to PS2 Mouse connector
and vice-versa.
BLOCK_KBC_PIN_22_23_BIT Boolean Switch to block or unblock KBC lines P22 and P23.
If unblocked - KBC will be able to change lines P22 and P23 from high to low and back
using D1 command.
If blocked - KBC will not be able to change the state of P22 and P23 lines."
LEDS_AT_STARTUP Integer Keyboard LEDs after startup:
Bit0: ScrlLock is on/off;
Bit1: NumLock is on/off;
Bit2: CapsLock is on/off.
MAX_HOTKEYS | Integer | Number of hot keys.
INIT_DEFAULT_HOTKEYS | Boolean | Initialize default hot keys (perform system soft reset on Ctrl+Alt+Del combination).
KBC_BASIC_ASSURANCE_TEST Boolean Switch to to set the condition to Perform KBC Basic Assurance Test.
1 - Perform KBC Basic Assurance Test.
0 - Do not peform KBC Basic Assurance Test.
DETECT_PS2_KEYBOARD Boolean Switch to Enable/Disable PS2 Keyboard detection before installing SimpleTextIn Protocol.
1 - Perform PS2 Keyboard Detection.
0 - Do not perform PS2 Keyboard Detection.
DETECT_PS2_MOUSE Boolean Switch to Enable/Disable PS2 Mouse detection before installing AbsPointer Protocol.
1 - Perform PS2 Mouse Detection.
0 - Do not perform PS2 Mouse Detection.
INSTALL_KEYBOARD_MOUSE_ALWAYS Boolean Switch to set the condition to install SimpleTextIn and AbsPointer protocols.
1 - Install the above mentioned protocols Always.
0 - Install the above mentioned protocols only if the device is present at the time of detection.
RETURN_CURRENT_KEY_STATE Boolean 0 - return key shift and toggle states captured during a keypress.
1 - return current shift and toggle state.
AMI Build Tools:
Tools Label: 4.5.5_Tools_34, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
  • Enhancement :EIP 18488
    Symptoms : PS2CTL: Need hooks for port swap, Keyboard mouse detect.
    FilesModified : ps2ctl.sdl
    Details : Support may be needed for kbc controller or SIO with different support from AMI KB-5.
    NOTE: Implementation of this change requires changes to CORE_DXE.sdl and BdsBoard.c.
  • Improvement : EIP 35306
    Details : Report the Ps2 Controller and Device Error Codes.
    FilesModified : AmiStatuscodes.h, Kbc.c, Kbc.h,Ps2ctl.sdl, ps2kbd.c, ps2main.c ,Statuscode.h
  • Bug Fix :EIP 47011
    Symptoms: DTM IO Tests fail due to presence of PS/2 devices that are not ready - no PS/2 devices attached during test.
    Details :Updated the SIO device status based on the device presence.
    Files Modified : Kbc.c , Kbc.h, Mouse.c
  • Bug Fix :EIP 45947
    Symptoms : Build Error on disabling INIT_DEFAULT_HOTKEYS SDL Token.
    Details : KEY_ASSOCIATION structure variable declared based on INIT_DEFAULT_HOTKEYS SDL Token
    Files Modified : hotkey.c
Files changed for EIP fixes:
  • Core/EM/PS2CTL/PS2Ctl.sdl(EIP#18488, EIP#35306)
  • Core/EM/PS2CTL/hotkey.c (EIP#45947)
  • Core/EM/PS2CTL/Kbc.c(EIP#47011, EIP#35306)
  • Core/EM/PS2CTL/Kbc.h(EIP#47011, EIP#35306)
  • Core/EM/PS2CTL/mouse.c (EIP#47011)
  • Core/EM/PS2CTL/ps2kbd.c (EIP#35306)
  • Core/EM/PS2CTL/ps2main.c(EIP#35306)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

PS2Keyboard:

  1. Connect PS2 keyboard into PS2 connector.
  2. Boot the system.
  3. Keyboard gets detected and works properly in Setup and Shell.
PS2Mouse:

  1. Connect PS2 Mouse into PS2 connector.
  2. Boot the system.
  3. Mouse gets detected and works properly in Setup and Shell.
Release History:
4.6.5.0

  • Enhancement :EIP 18488
    Symptoms : PS2CTL: Need hooks for port swap, Keyboard mouse detect.
    FilesModified : ps2ctl.sdl
    Details : Support may be needed for kbc controller or SIO with different support from AMI KB-5.
    NOTE: Implementation of this change requires changes to CORE_DXE.sdl and BdsBoard.c.
  • Improvement : EIP 35306
    Details : Report the Ps2 Controller and Device Error Codes.
    FilesModified : AmiStatuscodes.h, Kbc.c, Kbc.h,Ps2ctl.sdl, ps2kbd.c, ps2main.c ,Statuscode.h
  • Bug Fix :EIP 47011
    Symptoms: DTM IO Tests fail due to presence of PS/2 devices that are not ready - no PS/2 devices attached during test.
    Details :Updated the SIO device status based on the device presence.
    Files Modified : Kbc.c , Kbc.h, Mouse.c
  • Bug Fix :EIP 45947
    Symptoms : Build Error on disabling INIT_DEFAULT_HOTKEYS SDL Token.
    Details : KEY_ASSOCIATION structure variable declared based on INIT_DEFAULT_HOTKEYS SDL Token
    Files Modified : hotkey.c
  • Fixed bug with ellow exclamation mark in Windows, when PS2 keyboard is absent
    Files Modified : kbc.c
4.6.4.1

  • Bug Fix: EIP 40838
    Symptoms : KBC.C build failed in DetectPS2Keyboard() if DETECT_PS2_KEYBOARD=0 & PS2MOUSE_SUPPORT=0
    FilesModified : Efismplpp.c, Kbc.c, Kbc.h, Mouse.c PS2ctl.cif, Ps2ctl.sdl, Ps2Kbd.c, Ps2Mouse.h
    Details :
    1. Added Detect_PS2_Mouse sdl token and modified the code.
    2. INSTALL_KEYBOARD_MOUSE_ALWAYS sdl token added.

      3. 1 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer Always.
      0 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer only if the device is present at the time of detection.
    3. Code clean up in mouse.c EfiSmplpp.c ,ps2mouse.h
    4. Unused file automaton.h removed.
  • Bug Fix: EIP 40818
    Symptoms : Pause/Break function key has no function in logo screen
    FilesModified : HotKey.c
    Details : Pause key doesn't have valid Ps2 SCAN code. ProcesshotKey function will get 0 as input for Pause key and it tries to execute the invalid function.So getting exception.
  • Bug Fix: EIP 34615
    Symptoms : Pressing DEL key continously intermittently or sticking does not enter setup.
    FilesModified : Ps2Kbd.c.c
  • New Feature: EIP 38212
    Symptoms : PrintKey/SysRq key, Menu Key, Left Logo and Right Logo Key support added in Ps2 Keyboard driver
    FilesModified : Ps2Kbd.c
  • Bug Fix: EIP 38211
    Symptoms : Shift Key issues in RegsiterkeyNotify function.
    FilesModified : Ps2Kbd.c
    Details : ShiftKeyState and KeyToggleState verified for RegisterKeyNotify callback function
  • Bug Fix:
    FilesModified : Ps2Kbd.c
    Details : Added FreePool call in UnRegisterKeyNotify function.
  • Bug Fix: EIP 40515
    Symptoms : If PS/2 KBD isn't present, KBC returns oxFE when send 0xED command, that makes system to hang for 5 to 10 Sec
    FilesModified : Kbc.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Bug Fix: EIP 40711
    Symptoms : Keyboard sometimes does not work in DOS if KBD is being pressed hapazardly during post
    FilesModified : Ps2Kbd.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Test Report:
    - Tested Ps2 Keyboard in Post, AMITSE Setup and Shell
    - Tested Ps2keyboard and Ps2 Mouse in DOS.


Release Notes - NDA Required

Component Information:
Component Title: PS2CTL
Component Reference Name: PS2CTL
Component Type: ModulePart
Release Date: 2011-05-02
Source Control Label: 4.6.5.1
Source Control Location: SS: Alaska;$/Alaska/Source/Core/CORE_DXE/PS2CTL;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The PS2CTL Module can be added to a EFI BIOS to support PS2 Keyboard and PS2 Mouse. This driver supports PS/2 keyboard and/or PS/2 mouse depending on the switches in SDL tokens. Based on the switches enabled it will
  1. detect PS2 keyboard and install EFI_SIMPLE_TEXT_INPUT_PROTOCOL
  2. detect PS2 mouse and install EFI_SIMPLE_POINTER_PROTOCOL
PS2CTL module contains the following files:

Filename | Description
Main Component | Root\Core\em\PS2CTL
PS2Ctl.cif | Component information file for the ModulePart
PS2Ctl.sdl | Contains BIOS build parameters of PS/2 Controller driver.
ps2kbd.c | File contains PS/2 keyboard support routines.
ps2main.c | File contains main routines to suppport PS/2 keyboard and PS/2 mouse depending on the switches in SDL tokens.
ps2ctl.h | File contains the definitions of PS/2 Controller driver.
kbc.h | File contains the definitions of Keyboard Controller.
kbc.c | File contains PS/2 Controller I/O support functions.
ps2mouse.h | File contains the definitions for PS/2 mouse support routines.
mouse.c | File contains PS/2 mouse I/O support functions.
efismplpp.c | File contains functions related to PS/2 mouse implementation of simple pointer protocol.
Names.c | File contains functions related to Component name producer of PS/2 Controller driver.
hotkey.c | File contains PS/2 keyboard hotkeys support routines.
Ps2Ctl.chm | CHM file for the module part.

BIOS Parameters:
Parameter Name | Type | Description
PS2MOUSE_SUPPORT | Boolean | Switch to Enable/Disable PS2 Mouse support.
PS2KBD_SUPPORT | Boolean | Switch to Enable/Disable PS2 Keyboard support.
KBC_AUTODETECT_PORTS Boolean Auto detection of KB/MS using AMI KB-5. This switch will enable/disable the connector swap
of Keyboard and PS2 Mouse i.e. keyboard can be connected to PS2 Mouse connector
and vice-versa.
BLOCK_KBC_PIN_22_23_BIT Boolean Switch to block or unblock KBC lines P22 and P23.
If unblocked - KBC will be able to change lines P22 and P23 from high to low and back
using D1 command.
If blocked - KBC will not be able to change the state of P22 and P23 lines."
LEDS_AT_STARTUP Integer Keyboard LEDs after startup:
Bit0: ScrlLock is on/off;
Bit1: NumLock is on/off;
Bit2: CapsLock is on/off.
MAX_HOTKEYS | Integer | Number of hot keys.
INIT_DEFAULT_HOTKEYS | Boolean | Initialize default hot keys (perform system soft reset on Ctrl+Alt+Del combination).
KBC_BASIC_ASSURANCE_TEST Boolean Switch to to set the condition to Perform KBC Basic Assurance Test.
1 - Perform KBC Basic Assurance Test.
0 - Do not peform KBC Basic Assurance Test.
DETECT_PS2_KEYBOARD Boolean Switch to Enable/Disable PS2 Keyboard detection before installing SimpleTextIn Protocol.
1 - Perform PS2 Keyboard Detection.
0 - Do not perform PS2 Keyboard Detection.
DETECT_PS2_MOUSE Boolean Switch to Enable/Disable PS2 Mouse detection before installing AbsPointer Protocol.
1 - Perform PS2 Mouse Detection.
0 - Do not perform PS2 Mouse Detection.
INSTALL_KEYBOARD_MOUSE_ALWAYS Boolean Switch to set the condition to install SimpleTextIn and AbsPointer protocols.
1 - Install the above mentioned protocols Always.
0 - Install the above mentioned protocols only if the device is present at the time of detection.
RETURN_CURRENT_KEY_STATE Boolean 0 - return key shift and toggle states captured during a keypress.
1 - return current shift and toggle state.
AMI Build Tools:
Tools Label: 4.5.5_Tools_35, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes:
None
EIP addressed in this label:
  • EIP 49407
    [Category] - IMPROVEMENT
    [Description] - Move the Ps2 driver SDL tokens from Core Source to Core Bin,So that we don't need to add Core source for changing the Ps2 driver SDL tokens.
    [Files] - Ps2Ctl.sdl, ps2kbd.c, ps2main.c, ps2ctl.h, kbc.c, mouse.c, hotkey.c, CORE_DXE.sdl, Tokens.c
Files changed for EIP fixes:
  • Core/EM/PS2CTL/PS2Ctl.sdl (EIP #49407)
  • Core/EM/PS2CTL/ps2kbd.c (EIP #49407)
  • Core/EM/PS2CTL/ps2main.c (EIP #49407)
  • Core/EM/PS2CTL/ps2ctl.h (EIP #49407)
  • Core/EM/PS2CTL/hotkey.c (EIP #49407)
  • Core/EM/PS2CTL/Kbc.c (EIP #49407)
  • Core/EM/PS2CTL/mouse.c (EIP #49407)
  • Core/CORE_DXE/CORE_DXE.sdl (EIP #49407)
  • Library/Tokens.c (EIP #49407)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

PS2Keyboard:

  1. Connect PS2 keyboard into PS2 connector.
  2. Boot the system.
  3. Keyboard gets detected and works properly in Setup and Shell.
PS2Mouse:

  1. Connect PS2 Mouse into PS2 connector.
  2. Boot the system.
  3. Mouse gets detected and works properly in Setup and Shell.
Test Report
Ps2Ctl driver Test Report
Release History:
4.6.5.1

  • EIP 49407
    [Category] - IMPROVEMENT
    [Description] - Move the Ps2 driver SDL tokens from Core Source to Core Bin,So that we don't need to add Core source for changing the Ps2 driver SDL tokens.
    [Files] - Ps2Ctl.sdl, ps2kbd.c, ps2main.c, ps2ctl.h, kbc.c, mouse.c, hotkey.c, CORE_DXE.sdl, Tokens.c
4.6.5.0

  • Enhancement :EIP 18488
    Symptoms : PS2CTL: Need hooks for port swap, Keyboard mouse detect.
    FilesModified : ps2ctl.sdl
    Details : Support may be needed for kbc controller or SIO with different support from AMI KB-5.
    NOTE: Implementation of this change requires changes to CORE_DXE.sdl and BdsBoard.c.
  • Improvement : EIP 35306
    Details : Report the Ps2 Controller and Device Error Codes.
    FilesModified : AmiStatuscodes.h, Kbc.c, Kbc.h,Ps2ctl.sdl, ps2kbd.c, ps2main.c ,Statuscode.h
  • Bug Fix :EIP 47011
    Symptoms: DTM IO Tests fail due to presence of PS/2 devices that are not ready - no PS/2 devices attached during test.
    Details :Updated the SIO device status based on the device presence.
    Files Modified : Kbc.c , Kbc.h, Mouse.c
  • Bug Fix :EIP 45947
    Symptoms : Build Error on disabling INIT_DEFAULT_HOTKEYS SDL Token.
    Details : KEY_ASSOCIATION structure variable declared based on INIT_DEFAULT_HOTKEYS SDL Token
    Files Modified : hotkey.c
  • Fixed bug with ellow exclamation mark in Windows, when PS2 keyboard is absent
    Files Modified : kbc.c
4.6.4.1

  • Bug Fix: EIP 40838
    Symptoms : KBC.C build failed in DetectPS2Keyboard() if DETECT_PS2_KEYBOARD=0 & PS2MOUSE_SUPPORT=0
    FilesModified : Efismplpp.c, Kbc.c, Kbc.h, Mouse.c PS2ctl.cif, Ps2ctl.sdl, Ps2Kbd.c, Ps2Mouse.h
    Details :
    1. Added Detect_PS2_Mouse sdl token and modified the code.
    2. INSTALL_KEYBOARD_MOUSE_ALWAYS sdl token added.

      3. 1 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer Always.
      0 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer only if the device is present at the time of detection.
    3. Code clean up in mouse.c EfiSmplpp.c ,ps2mouse.h
    4. Unused file automaton.h removed.
  • Bug Fix: EIP 40818
    Symptoms : Pause/Break function key has no function in logo screen
    FilesModified : HotKey.c
    Details : Pause key doesn't have valid Ps2 SCAN code. ProcesshotKey function will get 0 as input for Pause key and it tries to execute the invalid function.So getting exception.
  • Bug Fix: EIP 34615
    Symptoms : Pressing DEL key continously intermittently or sticking does not enter setup.
    FilesModified : Ps2Kbd.c.c
  • New Feature: EIP 38212
    Symptoms : PrintKey/SysRq key, Menu Key, Left Logo and Right Logo Key support added in Ps2 Keyboard driver
    FilesModified : Ps2Kbd.c
  • Bug Fix: EIP 38211
    Symptoms : Shift Key issues in RegsiterkeyNotify function.
    FilesModified : Ps2Kbd.c
    Details : ShiftKeyState and KeyToggleState verified for RegisterKeyNotify callback function
  • Bug Fix:
    FilesModified : Ps2Kbd.c
    Details : Added FreePool call in UnRegisterKeyNotify function.
  • Bug Fix: EIP 40515
    Symptoms : If PS/2 KBD isn't present, KBC returns oxFE when send 0xED command, that makes system to hang for 5 to 10 Sec
    FilesModified : Kbc.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Bug Fix: EIP 40711
    Symptoms : Keyboard sometimes does not work in DOS if KBD is being pressed hapazardly during post
    FilesModified : Ps2Kbd.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Test Report:
    - Tested Ps2 Keyboard in Post, AMITSE Setup and Shell
    - Tested Ps2keyboard and Ps2 Mouse in DOS.


Release Notes - NDA Required

Component Information:
Component Title: PS2CTL
Component Reference Name: PS2CTL
Component Type: ModulePart
Release Date: 2011-11-07
Source Control Label: 4.6.5.2
Source Control Location: SS: Alaska;$/Alaska/Source/Core/CORE_DXE/PS2CTL;

Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The PS2CTL Module can be added to a EFI BIOS to support PS2 Keyboard and PS2 Mouse. This driver supports PS/2 keyboard and/or PS/2 mouse depending on the switches in SDL tokens. Based on the switches enabled it will
  1. detect PS2 keyboard and install EFI_SIMPLE_TEXT_INPUT_PROTOCOL
  2. detect PS2 mouse and install EFI_SIMPLE_POINTER_PROTOCOL
PS2CTL module contains the following files:

Filename | Description
Main Component | Root\Core\em\PS2CTL
PS2Ctl.cif | Component information file for the ModulePart
PS2Ctl.sdl | Contains BIOS build parameters of PS/2 Controller driver.
ps2kbd.c | File contains PS/2 keyboard support routines.
ps2main.c | File contains main routines to suppport PS/2 keyboard and PS/2 mouse depending on the switches in SDL tokens.
ps2ctl.h | File contains the definitions of PS/2 Controller driver.
kbc.h | File contains the definitions of Keyboard Controller.
kbc.c | File contains PS/2 Controller I/O support functions.
ps2mouse.h | File contains the definitions for PS/2 mouse support routines.
mouse.c | File contains PS/2 mouse I/O support functions.
efismplpp.c | File contains functions related to PS/2 mouse implementation of simple pointer protocol.
Names.c | File contains functions related to Component name producer of PS/2 Controller driver.
hotkey.c | File contains PS/2 keyboard hotkeys support routines.
Ps2Ctl.chm | CHM file for the module part.

BIOS Parameters:
Parameter Name | Type | Description
PS2MOUSE_SUPPORT | Boolean | Switch to Enable/Disable PS2 Mouse support.
PS2KBD_SUPPORT | Boolean | Switch to Enable/Disable PS2 Keyboard support.
KBC_AUTODETECT_PORTS Boolean Auto detection of KB/MS using AMI KB-5. This switch will enable/disable the connector swap
of Keyboard and PS2 Mouse i.e. keyboard can be connected to PS2 Mouse connector
and vice-versa.
BLOCK_KBC_PIN_22_23_BIT Boolean Switch to block or unblock KBC lines P22 and P23.
If unblocked - KBC will be able to change lines P22 and P23 from high to low and back
using D1 command.
If blocked - KBC will not be able to change the state of P22 and P23 lines."
LEDS_AT_STARTUP Integer Keyboard LEDs after startup:
Bit0: ScrlLock is on/off;
Bit1: NumLock is on/off;
Bit2: CapsLock is on/off.
MAX_HOTKEYS | Integer | Number of hot keys.
INIT_DEFAULT_HOTKEYS | Boolean | Initialize default hot keys (perform system soft reset on Ctrl+Alt+Del combination).
KBC_BASIC_ASSURANCE_TEST Boolean Switch to to set the condition to Perform KBC Basic Assurance Test.
1 - Perform KBC Basic Assurance Test.
0 - Do not peform KBC Basic Assurance Test.
DETECT_PS2_KEYBOARD Boolean Switch to Enable/Disable PS2 Keyboard detection before installing SimpleTextIn Protocol.
1 - Perform PS2 Keyboard Detection.
0 - Do not perform PS2 Keyboard Detection.
DETECT_PS2_MOUSE Boolean Switch to Enable/Disable PS2 Mouse detection before installing AbsPointer Protocol.
1 - Perform PS2 Mouse Detection.
0 - Do not perform PS2 Mouse Detection.
INSTALL_KEYBOARD_MOUSE_ALWAYS Boolean Switch to set the condition to install SimpleTextIn and AbsPointer protocols.
1 - Install the above mentioned protocols Always.
0 - Install the above mentioned protocols only if the device is present at the time of detection.
RETURN_CURRENT_KEY_STATE Boolean 0 - return key shift and toggle states captured during a keypress.
1 - return current shift and toggle state.
AMI Build Tools:
Tools Label: 4.5.5_Tools_35, Dated: 2010-10-04
Visual eBios: RSS.5.70.0171, Dated: 2010-10-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
  • EIP#63054 - 0000790: Add warning to ReadKeyStrokeEx for partial key press.

General Bug Fixes:
  • EIP#58974 - Yellow exclamation mark in Windows when PS2 KB/MS are not present.

  • EIP#63310 - MouseGetState() does not differentiate between driver busy and no state change between GetState calls.

EIP addressed in this label:
  • EIP#58974 - Yellow exclamation mark in Windows when PS2 KB/MS are not present.

  • EIP#73263 - YPS2Ctl Driver Follow the UEFI Driver Model as per the UEFI Spec.

  • EIP#63054 - 0000790: Add warning to ReadKeyStrokeEx for partial key press.

  • EIP#66198 - Added Mouse Wheel support in PS2 and USB drivers.

  • EIP#63310 - MouseGetState() does not differentiate between driver busy and no state change between GetState calls.

Files changed for EIP fixes:
  • Core/EM/PS2CTL/ps2kbd.c (EIP #63054)
  • Core/EM/PS2CTL/ps2main.c (EIP #58974, #73263)
  • Core/EM/PS2CTL/kbc.h (EIP #58974, #63054)
  • Core/EM/PS2CTL/kbc.c (EIP #58974)
  • Core/EM/PS2CTL/ps2mouse.h (EIP #66198)
  • Core/EM/PS2CTL/mouse.c (EIP #66198, #63310)
  • Core/EM/PS2CTL/efismplpp.c (EIP #73263)
Known issues and limitations in this label:
None
Remaining Issues:
None
Unit Testing:

PS2Keyboard:

  1. Connect PS2 keyboard into PS2 connector.
  2. Boot the system.
  3. Keyboard gets detected and works properly in Setup and Shell.
PS2Mouse:

  1. Connect PS2 Mouse into PS2 connector.
  2. Boot the system.
  3. Mouse gets detected and works properly in Setup and Shell.
Release History:
4.6.5.2

  • [TAG] - EIP 58974
    [Category]- BUG FIX
    [Severity]- Minor
    [Symptom] - Yellow exclamation mark in Windows when PS2 KB/MS are not present.
    [RootCause]- ACPI name space variable reports that PS2 device present
    [Solution] - Updated the SIO device status based on the device present after BDS.
    [Files] - Kbc.c, Kbc.h , Ps2main.c

  • [TAG] - EIP73263
    [Category] - Improvement
    [Description] - PS2Ctl Driver Follow the UEFI Driver Model as per the UEFI Spec.
    [Files] - ps2main.c, efismplpp.c

  • [TAG] - EIP63054
    [Category] - New Feature
    [Description] - 0000790: Add warning to ReadKeyStrokeEx for partial key press
    [Files] - KeyboardCommonDefinitions.h, In.c, Kbc.h, Ps2Kbd.c, Efiusbkb.c, efiusbkb.h

  • [TAG] - EIP66198
    [Category] - Improvement
    [Description] - Added Mouse Wheel support in PS2 and USB drivers.
    [Files] - usbdef.h, usbms.c, efiusbms.c, ps2mouse.h, mouse.c

  • [TAG] - EIP63310
    [Category] - Bug Fix
    [Severity] - Normal
    [Symptom] - MouseGetState() does not differentiate between driver busy and no state change between GetState calls.
    [RootCause] - MouseGetState() return status codes does not follow UEFI specification.
    [Solution] - MouseGetState() return status codes has been updated as per UEFI specification.
    [Files] - mouse.c

4.6.5.1

  • EIP 49407
    [Category] - IMPROVEMENT
    [Description] - Move the Ps2 driver SDL tokens from Core Source to Core Bin,So that we don't need to add Core source for changing the Ps2 driver SDL tokens.
    [Files] - Ps2Ctl.sdl, ps2kbd.c, ps2main.c, ps2ctl.h, kbc.c, mouse.c, hotkey.c, CORE_DXE.sdl, Tokens.c
4.6.5.0

  • Enhancement :EIP 18488
    Symptoms : PS2CTL: Need hooks for port swap, Keyboard mouse detect.
    FilesModified : ps2ctl.sdl
    Details : Support may be needed for kbc controller or SIO with different support from AMI KB-5.
    NOTE: Implementation of this change requires changes to CORE_DXE.sdl and BdsBoard.c.
  • Improvement : EIP 35306
    Details : Report the Ps2 Controller and Device Error Codes.
    FilesModified : AmiStatuscodes.h, Kbc.c, Kbc.h,Ps2ctl.sdl, ps2kbd.c, ps2main.c ,Statuscode.h
  • Bug Fix :EIP 47011
    Symptoms: DTM IO Tests fail due to presence of PS/2 devices that are not ready - no PS/2 devices attached during test.
    Details :Updated the SIO device status based on the device presence.
    Files Modified : Kbc.c , Kbc.h, Mouse.c
  • Bug Fix :EIP 45947
    Symptoms : Build Error on disabling INIT_DEFAULT_HOTKEYS SDL Token.
    Details : KEY_ASSOCIATION structure variable declared based on INIT_DEFAULT_HOTKEYS SDL Token
    Files Modified : hotkey.c
  • Fixed bug with ellow exclamation mark in Windows, when PS2 keyboard is absent
    Files Modified : kbc.c
4.6.4.1

  • Bug Fix: EIP 40838
    Symptoms : KBC.C build failed in DetectPS2Keyboard() if DETECT_PS2_KEYBOARD=0 & PS2MOUSE_SUPPORT=0
    FilesModified : Efismplpp.c, Kbc.c, Kbc.h, Mouse.c PS2ctl.cif, Ps2ctl.sdl, Ps2Kbd.c, Ps2Mouse.h
    Details :
    1. Added Detect_PS2_Mouse sdl token and modified the code.
    2. INSTALL_KEYBOARD_MOUSE_ALWAYS sdl token added.

      3. 1 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer Always.
      0 - Install the Keyboard- SimpleTextIn, Mouse - AbsPointer only if the device is present at the time of detection.
    3. Code clean up in mouse.c EfiSmplpp.c ,ps2mouse.h
    4. Unused file automaton.h removed.
  • Bug Fix: EIP 40818
    Symptoms : Pause/Break function key has no function in logo screen
    FilesModified : HotKey.c
    Details : Pause key doesn't have valid Ps2 SCAN code. ProcesshotKey function will get 0 as input for Pause key and it tries to execute the invalid function.So getting exception.
  • Bug Fix: EIP 34615
    Symptoms : Pressing DEL key continously intermittently or sticking does not enter setup.
    FilesModified : Ps2Kbd.c.c
  • New Feature: EIP 38212
    Symptoms : PrintKey/SysRq key, Menu Key, Left Logo and Right Logo Key support added in Ps2 Keyboard driver
    FilesModified : Ps2Kbd.c
  • Bug Fix: EIP 38211
    Symptoms : Shift Key issues in RegsiterkeyNotify function.
    FilesModified : Ps2Kbd.c
    Details : ShiftKeyState and KeyToggleState verified for RegisterKeyNotify callback function
  • Bug Fix:
    FilesModified : Ps2Kbd.c
    Details : Added FreePool call in UnRegisterKeyNotify function.
  • Bug Fix: EIP 40515
    Symptoms : If PS/2 KBD isn't present, KBC returns oxFE when send 0xED command, that makes system to hang for 5 to 10 Sec
    FilesModified : Kbc.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Bug Fix: EIP 40711
    Symptoms : Keyboard sometimes does not work in DOS if KBD is being pressed hapazardly during post
    FilesModified : Ps2Kbd.c
    Details : If command output is 0xFE (Resent) , tried for 3 times and gets out.
  • Test Report:
    - Tested Ps2 Keyboard in Post, AMITSE Setup and Shell
    - Tested Ps2keyboard and Ps2 Mouse in DOS.


Release Notes - NDA Required

Component Information:
Component Title: PS2CTL
Component Reference Name: PS2CTL
Component Type: ModulePart
Release Date: 2012-07-19
Source Control Label: 4.6.5_PS2CTL_002
Source Control Location: SS: Alaska;$/Alaska/Source/Core/CORE_DXE/PS2CTL;
Dependencies
Component Dependencies
N0NE

File Dependencies
ONE
Dependent File Name with Extension: Tokens.c
Dependent Source Control Location: SS: Alaska;$/Alaska/BIN/Core/Library/Tokens.c;
Dependent Source Control Label: 20
TWO
Dependent File Name with Extension: CORE_DXE.sdl
Dependent Source Control Location: SS: Alaska;$//Alaska/BIN/Core/CORE_DXE/CORE_DXE.mak;
Dependent Source Control Label: 53

Protocol Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
The PS2CTL Module can be added to a EFI BIOS to support PS2 Keyboard and PS2 Mouse. This driver supports PS/2 keyboard and/or PS/2 mouse depending on the switches in SDL tokens. Based on the switches enabled it will
  1. detect PS2 keyboard and install EFI_SIMPLE_TEXT_INPUT_PROTOCOL
  2. detect PS2 mouse and install EFI_SIMPLE_POINTER_PROTOCOL
PS2CTL module contains the following files:

Filename | Description
Main Component | Root\Core\em\PS2CTL
PS2Ctl.cif | Component information file for the ModulePart
PS2Ctl.sdl | Contains BIOS build parameters of PS/2 Controller driver.
ps2kbd.c | File contains PS/2 keyboard support routines.
ps2main.c | File contains main routines to suppport PS/2 keyboard and PS/2 mouse depending on the switches in SDL tokens.
ps2ctl.h | File contains the definitions of PS/2 Controller driver.
kbc.h | File contains the definitions of Keyboard Controller.
kbc.c | File contains PS/2 Controller I/O support functions.
ps2mouse.h | File contains the definitions for PS/2 mouse support routines.
mouse.c | File contains PS/2 mouse I/O support functions.
efismplpp.c | File contains functions related to PS/2 mouse implementation of simple pointer protocol.
Names.c | File contains functions related to Component name producer of PS/2 Controller driver.
hotkey.c | File contains PS/2 keyboard hotkeys support routines.
Ps2Ctl.chm | CHM file for the module part.

BIOS Parameters:
Parameter Name | Type | Description
PS2MOUSE_SUPPORT | Boolean | Switch to Enable/Disable PS2 Mouse support.
PS2KBD_SUPPORT | Boolean | Switch to Enable/Disable PS2 Keyboard support.
KBC_AUTODETECT_PORTS Boolean Auto detection of KB/MS using AMI KB-5. This switch will enable/disable the connector swap
of Keyboard and PS2 Mouse i.e. keyboard can be connected to PS2 Mouse connector
and vice-versa.
BLOCK_KBC_PIN_22_23_BIT Boolean Switch to block or unblock KBC lines P22 and P23.
If unblocked - KBC will be able to change lines P22 and P23 from high to low and back
using D1 command.
If blocked - KBC will not be able to change the state of P22 and P23 lines."
LEDS_AT_STARTUP Integer Keyboard LEDs after startup:
Bit0: ScrlLock is on/off;
Bit1: NumLock is on/off;
Bit2: CapsLock is on/off.
MAX_HOTKEYS | Integer | Number of hot keys.
INIT_DEFAULT_HOTKEYS | Boolean | Initialize default hot keys (perform system soft reset on Ctrl+Alt+Del combination).
KBC_BASIC_ASSURANCE_TEST Boolean Switch to to set the condition to Perform KBC Basic Assurance Test.
1 - Perform KBC Basic Assurance Test.
0 - Do not peform KBC Basic Assurance Test.
DETECT_PS2_KEYBOARD Boolean Switch to Enable/Disable PS2 Keyboard detection before installing SimpleTextIn Protocol.
1 - Perform PS2 Keyboard Detection.
0 - Do not perform PS2 Keyboard Detection.
DETECT_PS2_MOUSE Boolean Switch to Enable/Disable PS2 Mouse detection before installing AbsPointer Protocol.
1 - Perform PS2 Mouse Detection.
0 - Do not perform PS2 Mouse Detection.
INSTALL_KEYBOARD_MOUSE_ALWAYS Boolean Switch to set the condition to install SimpleTextIn and AbsPointer protocols.
1 - Install the above mentioned protocols Always.
0 - Install the above mentioned protocols only if the device is present at the time of detection.
RETURN_CURRENT_KEY_STATE Boolean 0 - return key shift and toggle states captured during a keypress.
1 - return current shift and toggle state.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_39, Dated: 2012-01-04
Visual eBios: RSS.5.72.0220, Dated: 2012-01-04
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
None
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
EIP#94186 - side effect after adding the solution of can not catch F8 key event on Keyboard - PS2 KB generic implement (EIP6986)

EIP Addressed
EIP#57005 - Need to clear Struck Keys in StartKeyboard() & KbdReset() for some kinds of Notebook KBC. Implemented this feature based on CLEAR_PENDING_KEYS_IN_PS2 token.
EIP#94186 - side effect after adding the solution of can not catch F8 key event on Keyboard - PS2 KB generic implement (EIP6986)
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Core/EM/PS2CTL/ps2kbd.c (EIP #57005, #94186)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE

© American Megatrends Inc.


Function by File Name

AMIBIOS Function Reference

By File Name

The following is a list of the source files.
For a list in alphabetical order, see In Alphabetical Order.

Built on 15:17:36 10/10/12


Functions in Alphabetical Order

AMIBIOS Function Reference

In Alphabetical Order

The following topics provide a list in alphabetical order.
For a list by file name, see By File Name.

Built on 15:17:36 10/10/12


AMIBIOS Function Reference

General Information

Built on 15:17:36 10/10/12


Copyright

American Megatrends, Inc.
5555 Oakbrook Parkway
Suite 200
Norcross, GA 30093 (USA)

Copyright (c) 1999-2011 American Megatrends, Inc. All Rights Reserved.

This publication contains proprietary information, which is protected by copyright. No part of this publication may be reproduced, transcribed, stored in a retrieval system, translated into any language or computer language, or transmitted in any form whatsoever without the prior written consent of the publisher, American Megatrends, Inc.

American Megatrends, Inc. retains the right to update, change, modify this publication at any time, without notice.

For Additional Information

Call American Megatrends BIOS Sales Department at 1-800-828-9264 for additional information.

Limitations of Liability

In no event shall American Megatrends be held liable for any loss, expenses, or damages of any kind whatsoever, whether direct, indirect, incidental, or consequential, arising from the design or use of this product or the support materials provided with the product.

Limited Warranty

No warranties are made, either expressed or implied, with regard to the contents of this work, its merchantability, or fitness for a particular use. American Megatrends assumes no responsibility for errors and omissions or for the uses made of the material contained herein or reader decisions based on such use.

Trademark and Copyright Acknowledgments

All product names used in this publication are for identification purposes only and are trademarks of their respective Companies.