Specifications

120
The CSM16 should use LowPmmMemory and LowPmmMemorySizeInBytes
fields for the low memory that can be used for PMM.
HiPmmMemory
Starting address of the high memory block.
HiPmmMemorySizeInBytes
Length of high memory block.
ReverseThunkCallSegment
The segment of the reverse thunk call code.
ReverseThunkCallOffset
The offset of the reverse thunk call code.
Number820Entries
The number of E820 entries copied to the Compatibility16 BIOS.
OsMemoryAbove1Mb
The amount of usable memory above 1 MB, e.g., E820 type 1 memory.
ThunkStart
The start of thunk code in main memory. Memory cannot be used by BIOS or PMM.
ThunkSizeInBytes
The size of the thunk code.
LowPmmMemory
Starting address of memory under 1 MB.
LowPmmMemorySizeInBytes
Length of low Memory block.
The address of the ReverseThunkCall code is provided in
case the Compatibility16 code needs to invoke a Compatibility16
function. It is not used to return from this function or any other
traditional BIOS interface function. These functions simply do a far
return.
CSM16 must handle cases where the PMM pointers are NULL.
That indicates that PMM is not supported for that range. If both
pointers are NULL then PMM is not supported. This covers cases
where no add-in cards are supported and/or memory given to EFI.
CSM16 must initialize the PMM regions to zero prior to usage by
OPROMS. CSM16 should not assume the CSM32 has zeroed out the
regions.
CSM16 must monitor for EBDA size increase after OPROM is
initialized and adjust PMM below 1MB, if required.
Status Codes Returned
EFI_SUCCESS 0x0000