5.3.11 GetMemoryMap()
UEFI drivers should not use this service because UEFI drivers should not depend
upon the physical memory map of the platform. The AllocatePool()
and
AllocatePages()
services allow a UEFI driver to allocate system memory. The
FreePool()
and FreePages()
services allow an UEFI driver to free previously
allocated memory.
If there are limitations on the memory areas that a specific device may use, then those limitations should be managed by a parent I/O abstraction that understands the details of the platform hardware.
For example, PCI device drivers should use the services of the PCI I/O Protocol to manage DMA buffers. The PCI I/O Protocol is produced by the PCI bus driver that uses the services if the PCI Root Bridge I/O Protocol to manage DMA buffers. The PCI Root Bridge I/O Protocol is chipset and platform specific, so the component that produces the PCI Root Bridge I/O Protocol understands what memory regions can be used for DMA operations. By pushing the responsibility into the chipset- and platform-specific components, the PCI device drivers and PCI bus drivers are easier to implement and are portable across a wide variety of platforms.
This service is typically used by a UEFI OS Loader to retrieve the memory map
just before the OS takes control of the platform by calling
ExitBootServices()
. It may also be used by UEFI applications, such as
diagnostics or debug utilities, to show how platform memory has been allocated.