123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /** @file
- Routines supporting partition discovery and
- logical device reading
- Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include "FatLitePeim.h"
- /**
- This function finds Eltorito partitions. Main algorithm
- is ported from DXE partition driver.
- @param[in] PrivateData The global memory map
- @param[in] ParentBlockDevNo The parent block device
- @retval TRUE New partitions are detected and logical block devices
- are added to block device array
- @retval FALSE No new partitions are added
- **/
- BOOLEAN
- FatFindEltoritoPartitions (
- IN PEI_FAT_PRIVATE_DATA *PrivateData,
- IN UINTN ParentBlockDevNo
- );
- /**
- This function finds Mbr partitions. Main algorithm
- is ported from DXE partition driver.
- @param[in] PrivateData The global memory map
- @param[in] ParentBlockDevNo The parent block device
- @retval TRUE New partitions are detected and logical block devices
- are added to block device array
- @retval FALSE No new partitions are added
- **/
- BOOLEAN
- FatFindMbrPartitions (
- IN PEI_FAT_PRIVATE_DATA *PrivateData,
- IN UINTN ParentBlockDevNo
- );
- /**
- This function is used for finding GPT partition on block device.
- As follow UEFI spec we should check protective MBR first and then
- try to check both primary/backup GPT structures.
- @param[in] PrivateData The global memory map
- @param[in] ParentBlockDevNo The parent block device
- @retval TRUE New partitions are detected and logical block devices
- are added to block device array
- @retval FALSE No new partitions are added
- **/
- BOOLEAN
- FatFindGptPartitions (
- IN PEI_FAT_PRIVATE_DATA *PrivateData,
- IN UINTN ParentBlockDevNo
- );
- /**
- This function finds partitions (logical devices) in physical block devices.
- @param PrivateData Global memory map for accessing global variables.
- **/
- VOID
- FatFindPartitions (
- IN PEI_FAT_PRIVATE_DATA *PrivateData
- )
- {
- BOOLEAN Found;
- UINTN Index;
- do {
- Found = FALSE;
- for (Index = 0; Index < PrivateData->BlockDeviceCount; Index++) {
- if (!PrivateData->BlockDevice[Index].PartitionChecked) {
- if (FatFindGptPartitions (PrivateData, Index)) {
- Found = TRUE;
- continue;
- }
- if (FatFindMbrPartitions (PrivateData, Index)) {
- Found = TRUE;
- continue;
- }
- if (FatFindEltoritoPartitions (PrivateData, Index)) {
- Found = TRUE;
- continue;
- }
- }
- }
- } while (Found && PrivateData->BlockDeviceCount <= PEI_FAT_MAX_BLOCK_DEVICE);
- }
|