/** @file
Routines supporting partition discovery and
logical device reading
Copyright (c) 2017 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PARTITION_LIB_H_
#define _PARTITION_LIB_H_
#include
#define PART_INFO_SIGNATURE SIGNATURE_32 ('P', 'A', 'R', 'T')
#define PART_MAX_BLOCK_SIZE 8192
#define PART_MAX_BLOCK_DEVICE 64
typedef enum {
EnumPartTypeUnknown = 0,
EnumPartTypeMbr,
EnumPartTypeGpt,
EnumPartTypeMax
} PARTITION_TYPE;
//
// The block device
//
typedef struct {
UINT64 StartBlock;
UINT64 LastBlock;
} LOGICAL_BLOCK_DEVICE;
typedef struct {
UINT32 Signature;
BOOLEAN PartitionChecked;
UINT32 PartitionType;
UINT32 HarewareDevice;
UINT32 BlockDeviceCount;
UINT64 BlockData[PART_MAX_BLOCK_SIZE / 8];
LOGICAL_BLOCK_DEVICE BlockDevice[PART_MAX_BLOCK_DEVICE];
DEVICE_BLOCK_INFO BlockInfo;
} PART_BLOCK_DEVICE;
/**
Get logical partition information
This function will fill in logical partition information.
@param[in] SwPart Software partition index.
@param[in] PartHandle Partition handle.
@param[in,out] LogicBlkDev Pointer of the logic block device LOGICAL_BLOCK_DEVICE
structure to receive block start and end information.
@retval EFI_SUCCESS The logic partition information was filled successfully.
@retval EFI_INVALID_PARAMETER Invalid parameters.
**/
EFI_STATUS
EFIAPI
GetLogicalPartitionInfo (
IN UINT32 SwPart,
IN EFI_HANDLE PartHandle,
IN OUT LOGICAL_BLOCK_DEVICE *LogicBlkDev
);
/**
Find partitions from OS boot medium
This function will check hardware partition for MBR, GPT or NONE parition.
@param[in] HwDevice The hardware device index.
@param[out] PartHandle The pointer to return parition handle
@retval EFI_SUCCESS The partition was found successfully.
@retval EFI_NOT_FOUND No partition was found.
@retval EFI_DEVICE_ERROR Error occured for device access.
@retval EFI_INVALID_PARAMETER Invalid parameters.
@retval EFI_OUT_OF_RESOURCES Insufficant memory resource pool.
**/
EFI_STATUS
EFIAPI
FindPartitions (
IN UINT32 HwDevice,
OUT EFI_HANDLE *PartHandle
);
/**
Clean-up allocated memory/etc. used for partitions
@param[in] PartHandle The partition handle to clean-up
@retval none
**/
VOID
EFIAPI
ClosePartitions (
IN EFI_HANDLE PartHandle
);
/**
Get detected partition type
@param[in] PartHandle The partition handle to clean-up
@retval Partition type enum
**/
PARTITION_TYPE
EFIAPI
GetPartitionType (
IN EFI_HANDLE PartHandle
);
/**
Get HW part no of the detected partition
@param[in] PartHandle The partition handle to clean-up
@param[in] HwPartNo HW part no.
@retval EFI_SUCCESS Found SW part no.
@retval EFI_INVALID_PARAMETER Invalid PartHandle
**/
EFI_STATUS
EFIAPI
GetPartitionCurrentPartNo (
IN EFI_HANDLE PartHandle,
OUT UINT32 *HwPartNo
);
#endif