jljusten [Wed, 7 Oct 2009 16:01:09 +0000 (16:01 +0000)]
OVMF: Align PE images in ROM, and strip relocations were possible.
Align the PE32/32+ images in the ROM for XIP (execute in place) images
to function properly following the change in r9327. Also, convert
pre-memory PEIM's to use the TE image format and strip-relocation
data from image. This saves a little space, and provides a sample
usage of TE images.
jljusten [Wed, 7 Oct 2009 16:01:06 +0000 (16:01 +0000)]
OVMF SEC: Modify to search sections of FFS file for PE32 image.
Previously the code would expect that the PE32 image was in the
first section of the FFS file. This might not be the case if the
PE32 section is forced to be aligned.
jljusten [Mon, 5 Oct 2009 17:59:53 +0000 (17:59 +0000)]
MdeModulePkg-UsbBusDxe: Add work around for slower USB hubs/devices
Increase the value of USB_GENERAL_DEVICE_REQUEST_TIMEOUT from
50 milliseconds to 100 milliseconds. This provides a work around
for slower USB hubs and devices.
mdkinney [Thu, 1 Oct 2009 23:49:36 +0000 (23:49 +0000)]
Update PEI Core LoadImage() service to always call LoadAndRelocatePeCoffImage() even for XIP PEIMs. This will guarantee that the PE/COFF Extra Action Lib will be called for all PE/COFF images, even XIP PEIMs.
mdkinney [Thu, 1 Oct 2009 23:44:00 +0000 (23:44 +0000)]
1) Update PE/COFF file alignment to 4KB to match 4KB section alignment.
2) Align uncompressed PEIMs and PEI Core on a 4K boundary to match the section alignment and file alignment of the PE/COFF images
Change RETURN_STATUS type to UINTN, thus EFI_STATUS is defined as UINTN to align with recent UEFI 2.3 spec update.
Impaction:
There should be no impact unless code has been written that tests a constant or variable of type EFI_STATUS to be less than 0, or tested it against a negative value. This most likely have not been done.
For the data region which will be touched by Pci Bus Master, we should allocate memory by PciIo.AllocateBuffer() but not AllocatePool() base library API. So the memory region can be used to map into Pci controller-specific address thru PciIo.Map().
OVMF: Add support for saving the NV variables to disk following each SetVariable call.
Note:
* This only works before ExitBootServices
* For OVMF, variables are only preserved on the disk if there
is a hard disk connected which has a writeable FAT file system.
The Ovmf/Library/EmuVariableFvbLib library will look for the
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent PCD to be set to
a non-zero value. If set, it is treated as an event handle, and
each write to the EmuVariableFvb will cause the event to be
signaled.
In this change, the OVMF platform BDS library sets up this event,
and sets the PCD so that after each write to the EMU Variable FVB,
the non-volatile variables will be saved out to the file system.
The end result is that NV variables that are written prior to the
ExitBootServices call should be preserved by storing them on the
disk.
OVMF: Convert from EmuVariableRuntimeDxe to VariableRuntimeDxe.
OVMF utilizes EmuVariableFvbRuntimeDxe to provide an emulated
variable firmware volume block device for non-volatile variables.
This allows the VariableRuntimeDxe and FaultTolerantWriteDxe
to function without a real non-volatile backing store.
This driver implements a firmware volume block protocol instance
which is stored in system memory.
The MdeModulePkg/Universal/Variable/RuntimeDxe and
MdeModulePkg/Universal/FaultTolerantWriteDxe drivers make use of
this FVB instance to provide variable services.
This driver links to a PlatformFvb library to allow for
platform specific processing to take place when data is written
to the FVB.
Allow the FaultTolerantWriteDxe addresses to be dynamic PCD's.
PcdFlashNvStorageFtwWorkingBase and PcdFlashNvStorageFtwSpareBase are
now updated each time an FVB instance is installed. This allows the
PCDs to be set at runtime at any time before the FVB is installed.
Update definition aligned to UEFI2.3
1. TapeIo TAPE_HEADER is rename to EFI_TAPE_HEADER
2. Add IN modifier for parameter Direction and Type of TapeIo.TapeSpace
3. HII package header EFI_HII_DEVICE_PATH_PACKAGE is renamed to EFI_HII_DEVICE_PATH_PACKAGE_HDR.
4. HII package header EFI_HII_FORM_PACKAGE is renamed to EFI_HII_FORM_PACKAGE_HDR.
1. Fix incorrect definition of UEFI_CONFIG_LANG and UEFI_CONFIG_LANG_2. They should be zero-terminated ascii string.
2. Rename EFI_IFR_EQ_ID_LIST to EFI_IFR_EQ_ID_VALUE_LIST
3. Add EFI_HII_PACKAGE_ANIMATIONS package type
Implement NvVarsFileLib to save and restore non-volatile variables using a file.
This library provides an interface where variables can be saved and restored
using a file in a file system accessible to the firmware. It is expected
that a platform BDS library will use this library. The platform BDS
implementation can decide which devices to connect and then to attempt to use
for saving and restoring NV variables.
1. updated "the Bus Driver that creates all of its child handles on the first call to Start()" not to create any child handle if RemainingDeviepath is the End of Device Path Node, per UEFI 2.3.
The others changes include:
a. Check RemainingDevicePath at beginning of Supported(), make sure it has been verified before Start() is called.
b. Check IO protocol firstly rather than EfiDevicePathProtocolGuid, reduce the times entering into Start() function because EfiDevicePathProtocolGuid existed on most of handle.
2. roll back serial drivers not to create child device, if the device speicifed by remainingdevicepath cannot find in the created devices list.
1. updated PCI/AGP Devices to check RemainingDevicePath in Supported() and Start() functions. The main changes are:
a. Add check validation of RemainingDevicePath in Supported()
b. In Star() function, if RemaingDevicePath is the End of Device Path Node, don't create child device and return EFI_SUCCESS.
2. fixed one device path issue in ScsiBus driver.
updated the Bus Driver that is able to create all or one of its child handles on each call to Start() not to create new child handle if RemainingDeviepath is the End of Device Path Node, per UEFI 2.3.
The others changes include:
1. Check RemainingDevicePath at beginning of Supported(), make sure it has been verified before Start() is called.
2. Check IO protocol firstly rather than EfiDevicePathProtocolGuid, reduce the times entering into Start() function because EfiDevicePathProtocolGuid existed on most of handle.
3. If no any child device is created on last time, and RemainingDevicePath is valid Uart Devcie path, go on creating child device handle based on this RemainingDevicePath.
1. Add new HII IFR opcode introduced in UEFI2.2 and UEFI2.3
They are EFI_IFR_FORM_MAP, EFI_IFR_READ, EFI_IFR_WRITE, EFI_IFR_GET, EFI_IFR_SET, EFI_IFR_MAP, EFI_IFR_SECURITY.
2. Add new data type introduced in UEFI2.2 and UEFI2.3
EFI_IFR_TYPE_ACTION, EFI_IFR_TYPE_UNDEFINED,
EFI_IFR_TYPE_BUFFER.
In various archs, Processor memory address may not be same with Pci memory address. For usb host controller, we should use pci memory address to initialize framelist register and all address field in QH/TD.
updated WinNtSerialIoDxe driver not to create new child handle if RemainingDeviepath is the End of Device Path Node, per UEFI 2.3.
The others changes include:
1. Check RemainingDevicePath at beginning of Supported(), make sure it has been verified before Start() is called.
2. Check efiWinNtIoProtocolGuid firstly rather than EfiDevicePathProtocolGuid, reduce the times entering into Start() function because EfiDevicePathProtocolGuid existed on most of handle.
3. If no any child device is created on last time, and RemainingDevicePath is valid Uart Devcie path, go on creating child device handle based on this RemainingDevicePath.
OVMF: Add support for more persistent NV variables which can survive a system reboot.
Make use of EMU Variable driver's PcdEmuVariableNvStoreReserved to allow
NV variables to persist a VM system reset. The contents of the NV variables
will still be lost when the VM is shut down, but they appear to persist
when the efi shell reset command is run. (Tested with QEMU 0.10.0.)
EMU Variable: Add support for pre-reserved NV variable store.
Add PcdEmuVariableNvStoreReserved which allows a platform to declare a
memory address for the EMU Variable driver to use for the NV variable
store. The EMU Variable driver will look to see if the contents of
this memory range appear to be a valid variable store, and if so
the EMU driver will use the variables.
If a platform can preserve a memory range across system resets, this
feature can allow the EMU Variable driver's NV variable store to be
preserved across a system reset.
In the default case this PCD will be set as a fixed PCD with a value
of 0. In this case this new feature should have minimal impact on
the EMU Variable driver. (Perhaps a slight increase in code size,
but no functional difference is expected.)