OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Partition.h
Go to the documentation of this file.
1
13#ifndef _PARTITION_H_
14#define _PARTITION_H_
15
16#include <Uefi.h>
17#include <Protocol/BlockIo.h>
18#include <Protocol/BlockIo2.h>
19#include <Guid/Gpt.h>
20#include <Protocol/ComponentName.h>
21#include <Protocol/DevicePath.h>
22#include <Protocol/DriverBinding.h>
23#include <Protocol/DiskIo.h>
24#include <Protocol/DiskIo2.h>
25#include <Protocol/PartitionInfo.h>
27#include <Library/DebugLib.h>
28#include <Library/UefiDriverEntryPoint.h>
29#include <Library/BaseLib.h>
30#include <Library/UefiLib.h>
31#include <Library/BaseMemoryLib.h>
32#include <Library/MemoryAllocationLib.h>
33#include <Library/UefiBootServicesTableLib.h>
34#include <Library/DevicePathLib.h>
35
37#include <IndustryStandard/Mbr.h>
38#include <IndustryStandard/ElTorito.h>
39#include <IndustryStandard/Udf.h>
40
41//
42// Partition private data
43//
44#define PARTITION_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'a', 'r', 't')
45typedef struct {
46 UINT64 Signature;
47
48 EFI_HANDLE Handle;
49 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
50 EFI_BLOCK_IO_PROTOCOL BlockIo;
51 EFI_BLOCK_IO2_PROTOCOL BlockIo2;
52 EFI_BLOCK_IO_MEDIA Media;
53 EFI_BLOCK_IO_MEDIA Media2;// For BlockIO2
54 EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
55
56 EFI_DISK_IO_PROTOCOL *DiskIo;
57 EFI_DISK_IO2_PROTOCOL *DiskIo2;
58 EFI_BLOCK_IO_PROTOCOL *ParentBlockIo;
59 EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2;
60 UINT64 Start;
61 UINT64 End;
62 UINT32 BlockSize;
63 BOOLEAN InStop;
64
65 EFI_GUID TypeGuid;
66
69
70typedef struct {
71 EFI_DISK_IO2_TOKEN DiskIo2Token;
72 EFI_BLOCK_IO2_TOKEN *BlockIo2Token;
74
75#define PARTITION_DEVICE_FROM_BLOCK_IO_THIS(a) CR (a, PARTITION_PRIVATE_DATA, BlockIo, PARTITION_PRIVATE_DATA_SIGNATURE)
76#define PARTITION_DEVICE_FROM_BLOCK_IO2_THIS(a) CR (a, PARTITION_PRIVATE_DATA, BlockIo2, PARTITION_PRIVATE_DATA_SIGNATURE)
77
78//
79// Global Variables
80//
81extern EFI_DRIVER_BINDING_PROTOCOL gPartitionDriverBinding;
82extern EFI_COMPONENT_NAME_PROTOCOL gPartitionComponentName;
83extern EFI_COMPONENT_NAME2_PROTOCOL gPartitionComponentName2;
84
85//
86// Extract INT32 from char array
87//
88#define UNPACK_INT32(a) (INT32)( (((UINT8 *) a)[0] << 0) | \
89 (((UINT8 *) a)[1] << 8) | \
90 (((UINT8 *) a)[2] << 16) | \
91 (((UINT8 *) a)[3] << 24) )
92
93//
94// Extract UINT32 from char array
95//
96#define UNPACK_UINT32(a) (UINT32)( (((UINT8 *) a)[0] << 0) | \
97 (((UINT8 *) a)[1] << 8) | \
98 (((UINT8 *) a)[2] << 16) | \
99 (((UINT8 *) a)[3] << 24) )
100
101//
102// GPT Partition Entry Status
103//
104typedef struct {
105 BOOLEAN OutOfRange;
106 BOOLEAN Overlap;
107 BOOLEAN OsSpecific;
109
110//
111// Function Prototypes
112//
113
128EFI_STATUS
129EFIAPI
131 IN EFI_DRIVER_BINDING_PROTOCOL *This,
132 IN EFI_HANDLE ControllerHandle,
133 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
134 );
135
151EFI_STATUS
152EFIAPI
154 IN EFI_DRIVER_BINDING_PROTOCOL *This,
155 IN EFI_HANDLE ControllerHandle,
156 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
157 );
158
173EFI_STATUS
174EFIAPI
176 IN EFI_DRIVER_BINDING_PROTOCOL *This,
177 IN EFI_HANDLE ControllerHandle,
178 IN UINTN NumberOfChildren,
179 IN EFI_HANDLE *ChildHandleBuffer
180 );
181
182//
183// EFI Component Name Functions
184//
185
225EFI_STATUS
226EFIAPI
228 IN EFI_COMPONENT_NAME_PROTOCOL *This,
229 IN CHAR8 *Language,
230 OUT CHAR16 **DriverName
231 );
232
301EFI_STATUS
302EFIAPI
304 IN EFI_COMPONENT_NAME_PROTOCOL *This,
305 IN EFI_HANDLE ControllerHandle,
306 IN EFI_HANDLE ChildHandle OPTIONAL,
307 IN CHAR8 *Language,
308 OUT CHAR16 **ControllerName
309 );
310
334EFI_STATUS
336 IN EFI_DRIVER_BINDING_PROTOCOL *This,
337 IN EFI_HANDLE ParentHandle,
338 IN EFI_DISK_IO_PROTOCOL *ParentDiskIo,
339 IN EFI_DISK_IO2_PROTOCOL *ParentDiskIo2,
340 IN EFI_BLOCK_IO_PROTOCOL *ParentBlockIo,
341 IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2,
342 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
343 IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode,
344 IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo,
345 IN APPLE_PARTITION_INFO_PROTOCOL *ApplePartitionInfo,
346 IN EFI_LBA Start,
347 IN EFI_LBA End,
348 IN UINT32 BlockSize,
349 IN EFI_GUID *TypeGuid
350 );
351
361BOOLEAN
363 IN EFI_HANDLE ControllerHandle
364 );
365
383EFI_STATUS
385 IN EFI_DRIVER_BINDING_PROTOCOL *This,
386 IN EFI_HANDLE Handle,
387 IN EFI_DISK_IO_PROTOCOL *DiskIo,
388 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
389 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
390 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
391 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
392 );
393
411EFI_STATUS
413 IN EFI_DRIVER_BINDING_PROTOCOL *This,
414 IN EFI_HANDLE Handle,
415 IN EFI_DISK_IO_PROTOCOL *DiskIo,
416 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
417 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
418 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
419 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
420 );
421
439EFI_STATUS
441 IN EFI_DRIVER_BINDING_PROTOCOL *This,
442 IN EFI_HANDLE Handle,
443 IN EFI_DISK_IO_PROTOCOL *DiskIo,
444 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
445 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
446 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
447 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
448 );
449
466EFI_STATUS
468 IN EFI_DRIVER_BINDING_PROTOCOL *This,
469 IN EFI_HANDLE Handle,
470 IN EFI_DISK_IO_PROTOCOL *DiskIo,
471 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
472 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
473 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
474 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
475 );
476
494EFI_STATUS
496 IN EFI_DRIVER_BINDING_PROTOCOL *This,
497 IN EFI_HANDLE Handle,
498 IN EFI_DISK_IO_PROTOCOL *DiskIo,
499 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
500 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
501 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
502 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
503 );
504
505typedef
506EFI_STATUS
508 IN EFI_DRIVER_BINDING_PROTOCOL *This,
509 IN EFI_HANDLE Handle,
510 IN EFI_DISK_IO_PROTOCOL *DiskIo,
511 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
512 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
513 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
514 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
515 );
516
517#endif
UINT16 BlockSize
Definition Apm.h:32
UINT64 Start
EFI_DEVICE_PATH_PROTOCOL End
APPLE_EVENT_HANDLE Handle
Definition OcTypingLib.h:45
EFI_COMPONENT_NAME_PROTOCOL gPartitionComponentName
EFI_STATUS PartitionInstallAppleChildHandles(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition Apm.c:29
EFI_STATUS EFIAPI PartitionDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
Definition Partition.c:400
EFI_STATUS EFIAPI PartitionComponentNameGetDriverName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
EFI_COMPONENT_NAME2_PROTOCOL gPartitionComponentName2
EFI_DRIVER_BINDING_PROTOCOL gPartitionDriverBinding
Definition Partition.c:18
EFI_STATUS EFIAPI PartitionDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
Definition Partition.c:71
BOOLEAN HasChildren(IN EFI_HANDLE ControllerHandle)
Definition Partition.c:1367
EFI_STATUS EFIAPI PartitionDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
Definition Partition.c:195
EFI_STATUS(* PARTITION_DETECT_ROUTINE)(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition Partition.h:507
EFI_STATUS PartitionInstallChildHandle(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ParentHandle, IN EFI_DISK_IO_PROTOCOL *ParentDiskIo, IN EFI_DISK_IO2_PROTOCOL *ParentDiskIo2, IN EFI_BLOCK_IO_PROTOCOL *ParentBlockIo, IN EFI_BLOCK_IO2_PROTOCOL *ParentBlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath, IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode, IN EFI_PARTITION_INFO_PROTOCOL *PartitionInfo, IN APPLE_PARTITION_INFO_PROTOCOL *ApplePartitionInfo, IN EFI_LBA Start, IN EFI_LBA End, IN UINT32 BlockSize, IN EFI_GUID *TypeGuid)
Definition Partition.c:1140
EFI_STATUS PartitionInstallMbrChildHandles(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition Mbr.c:118
EFI_STATUS PartitionInstallUdfChildHandles(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition Udf.c:738
EFI_STATUS PartitionInstallGptChildHandles(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition Gpt.c:186
EFI_STATUS EFIAPI PartitionComponentNameGetControllerName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
EFI_STATUS PartitionInstallElToritoChildHandles(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Handle, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_DISK_IO2_PROTOCOL *DiskIo2, IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
Definition ElTorito.c:30
EFI_BLOCK_IO2_TOKEN * BlockIo2Token
Definition Partition.h:72
EFI_DISK_IO2_TOKEN DiskIo2Token
Definition Partition.h:71
EFI_BLOCK_IO_MEDIA Media2
Definition Partition.h:53
APPLE_PARTITION_INFO_PROTOCOL ApplePartitionInfo
Definition Partition.h:67
EFI_BLOCK_IO_PROTOCOL * ParentBlockIo
Definition Partition.h:58
EFI_BLOCK_IO_PROTOCOL BlockIo
Definition Partition.h:50
EFI_DISK_IO2_PROTOCOL * DiskIo2
Definition Partition.h:57
EFI_BLOCK_IO_MEDIA Media
Definition Partition.h:52
EFI_DISK_IO_PROTOCOL * DiskIo
Definition Partition.h:56
EFI_PARTITION_INFO_PROTOCOL PartitionInfo
Definition Partition.h:54
EFI_DEVICE_PATH_PROTOCOL * DevicePath
Definition Partition.h:49
EFI_BLOCK_IO2_PROTOCOL BlockIo2
Definition Partition.h:51
EFI_BLOCK_IO2_PROTOCOL * ParentBlockIo2
Definition Partition.h:59