30 IN EFI_DRIVER_BINDING_PROTOCOL *This,
32 IN EFI_DISK_IO_PROTOCOL *DiskIo,
33 IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
34 IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
35 IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
36 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
53 HARDDRIVE_DEVICE_PATH HdDev;
54 EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
60 if (BlockIo->Media == NULL) {
67 if (BlockIo->Media->LogicalPartition) {
68 return EFI_INVALID_PARAMETER;
74 Apm = AllocatePool (BlockIo->Media->BlockSize);
76 return EFI_OUT_OF_RESOURCES;
79 ApmStatus = EFI_NOT_FOUND;
84 Status = BlockIo->ReadBlocks (
86 BlockIo->Media->MediaId,
88 BlockIo->Media->BlockSize,
91 if (EFI_ERROR (Status)) {
101 return EFI_NOT_FOUND;
104 BlockSize = SwapBytes16 (Apm->BlockSize);
111 if (ApmEntry == NULL) {
113 return EFI_OUT_OF_RESOURCES;
119 Status = DiskIo->ReadDisk (
121 BlockIo->Media->MediaId,
126 if (EFI_ERROR (Status)) {
155 Status = DiskIo->ReadDisk (
157 BlockIo->Media->MediaId,
163 if ( EFI_ERROR (Status)
173 || (SwapBytes32 (ApmEntry->PartitionSize) == 0))
182 BlockIo->Media->BlockSize,
186 if (Remainder != 0) {
195 BlockIo->Media->BlockSize,
199 if (Remainder != 0) {
203 EndingLBA = StartingLBA +
LBASize - 1;
205 if (EndingLBA > BlockIo->Media->LastBlock) {
209 ZeroMem (&HdDev,
sizeof (HdDev));
210 HdDev.Header.Type = MEDIA_DEVICE_PATH;
211 HdDev.Header.SubType = MEDIA_HARDDRIVE_DP;
212 SetDevicePathNodeLength (&HdDev.Header, sizeof (HdDev));
214 HdDev.PartitionNumber = (UINT32)Index + 1;
216 HdDev.PartitionStart = StartingLBA;
219 DEBUG ((EFI_D_INFO,
" Index : %d\n", Index));
220 DEBUG ((EFI_D_INFO,
" Start LBA : %x\n", HdDev.PartitionStart));
221 DEBUG ((EFI_D_INFO,
" End LBA: %x\n", EndingLBA));
222 DEBUG ((EFI_D_INFO,
" Partition size: %x\n", HdDev.PartitionSize));
226 ZeroMem (&PartitionInfo,
sizeof (EFI_PARTITION_INFO_PROTOCOL));
227 PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
228 PartitionInfo.Type = PARTITION_TYPE_OTHER;
233 ApplePartitionInfo.
MBRType = HdDev.MBRType;
247 (EFI_DEVICE_PATH_PROTOCOL *)&HdDev,
252 BlockIo->Media->BlockSize,
256 if (!EFI_ERROR (Status)) {
257 ApmStatus = EFI_SUCCESS;
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)
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)