blob: b50f718b54fcc72f1728803a7ac44eaab72cfbac [file] [log] [blame] [view] [edit]
# Buffer Usage in GBL
This doc discusses how GBL (EFI bootloader) gets and uses buffers for various
functionalities.
## OS Load Buffer
GBL needs a sufficiently large and contiguous buffer for loading, fixing up and
assembling various OS images such as boot, init_boot, vendor_boot, dtb, dtbo,
misc etc. This buffer can either be from EFI memory allocation or memory space
reserved by the platform. At run time, GBL performs the following for
requesting an OS load buffer.
1. Via
[GBL_EFI_IMAGE_LOADING_PROTOCOL.GetBuffer()](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md#gbl_efi_image_loading_protocolgetbuffer)
If [GBL_EFI_IMAGE_LOADING_PROTOCOL](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md) is
implemented, GBL will make a call to
`GBL_EFI_IMAGE_LOADING_PROTOCOL.GetBuffer()` with input image type set to
[GBL_IMAGE_TYPE_OS_LOAD](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md#related-definitions-1)
and input size set to 0 (size determined by vendor). Vendor returns the size
and address of the reserved memory if available or instructs GBL to
allocates a specific amount of memory via EFI memory allocation.
2. Via EFI Memory Allocation
If [GBL_EFI_IMAGE_LOADING_PROTOCOL](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md) is
not implemented GBL allocates a 256MB size buffer via EFI memory allocation.
## Fastboot Download Buffer
When booting to fastboot mode, GBL requires a buffer for download. The buffer
is requested following the same process as the case of
[OS Load Buffer](#os-load-buffer):
1. Via
[GBL_EFI_IMAGE_LOADING_PROTOCOL.GetBuffer()](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md#gbl_efi_image_loading_protocolgetbuffer)
If [GBL_EFI_IMAGE_LOADING_PROTOCOL](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md) is
implemented, GBL will make a call to
`GBL_EFI_IMAGE_LOADING_PROTOCOL.GetBuffer()` with input image type set to
[GBL_IMAGE_TYPE_FASTBOOT](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md#related-definitions-1)
and input size set to 0 (size determined by vendor). Vendor returns the size
and address of the reserved memory if available or instructs GBL to
allocates a specific amount of memory via EFI memory allocation.
2. Via EFI Memory Allocation
If [GBL_EFI_IMAGE_LOADING_PROTOCOL](./GBL_EFI_IMAGE_LOADING_PROTOCOL.md) is
not implemented GBL allocates a 512MB size buffer via EFI memory allocation.
## AARCH64 Kernel Decopmression
GBL can detect and handle compressed kernel for aarch64. However, current
implementation requires allocating a separate piece of memory for storing
decompressed kernel temporarily. This buffer is allocated via EFI memory
allocation.
## AVB
The AVB (Android Verified Boot) implementation in GBL requires allocating
additional memory for constructing commandline argument strings and loading
vbmeta images from disk and any other vendor required partitions for
verification. The memory is allocated via EFI memory allocation.