64 IN CONST EFI_HANDLE ImageHandle,
65 IN CONST EFI_SYSTEM_TABLE *SystemTable,
66 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
67 IN EFI_HANDLE DriverBindingHandle,
68 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
69 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL
70 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
71 IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL
72 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL
73 IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL
83 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
84 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
85 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL
86 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
87 IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL
88 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL
89 IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL
194 CONST UINT8 *FuzzData,
199 EXT4_PARTITION *Part;
201 EFI_FILE_PROTOCOL *This;
202 EFI_DISK_IO_PROTOCOL *DiskIo;
203 EFI_BLOCK_IO_PROTOCOL *BlockIo;
204 EFI_HANDLE DeviceHandle;
208 EFI_FILE_PROTOCOL *NewHandle;
224 DeviceHandle = (EFI_HANDLE)0xDEADBEAFULL;
229 FileName = AllocateZeroPool (BufferSize);
230 if (FileName == NULL) {
248 DiskIo = AllocateZeroPool (
sizeof (EFI_DISK_IO_PROTOCOL));
249 if (DiskIo == NULL) {
258 BlockIo = AllocateZeroPool (
sizeof (EFI_BLOCK_IO_PROTOCOL));
259 if (BlockIo == NULL) {
267 BlockIo->Media = AllocateZeroPool (
sizeof (EFI_BLOCK_IO_MEDIA));
268 if (BlockIo->Media == NULL) {
281 if (!Ext4SuperblockCheckMagic (DiskIo, BlockIo)) {
283 DEBUG ((DEBUG_WARN,
"[ext4] Superblock contains bad magic \n"));
289 Status = Ext4OpenPartition (DeviceHandle, DiskIo, NULL, BlockIo);
291 if (EFI_ERROR (Status)) {
292 DEBUG ((DEBUG_ERROR,
"[ext4] Error mounting: %r\n", Status));
294 FreePool (BlockIo->Media);
304 This = (EFI_FILE_PROTOCOL *)Part->Root;
310 Status = Ext4Open (This, &NewHandle, FileName,
mOpenFileModes[Index], 0);
311 if (Status == EFI_SUCCESS) {
315 Buffer = AllocateZeroPool (100);
322 Status = Ext4ReadFile (NewHandle, &BufferSize,
Buffer);
323 if (Status == EFI_BUFFER_TOO_SMALL) {
324 TmpBuffer = ReallocatePool (100, BufferSize,
Buffer);
325 if (TmpBuffer == NULL) {
335 Ext4ReadFile (NewHandle, &BufferSize,
Buffer);
338 Ext4WriteFile (NewHandle, &BufferSize,
Buffer);
345 if (Status == EFI_BUFFER_TOO_SMALL) {
346 Info = AllocateZeroPool (
Len);
358 if (Status == EFI_BUFFER_TOO_SMALL) {
359 Info = AllocateZeroPool (
Len);
371 if (Status == EFI_BUFFER_TOO_SMALL) {
372 Info = AllocateZeroPool (
Len);
387 Ext4GetPosition (NewHandle, &Position);
388 Ext4SetPosition (NewHandle, Position);
393 Position = (UINT64)-1;
394 Status = Ext4SetPosition (NewHandle, Position);
395 if (!EFI_ERROR (Status)) {
396 Buffer = AllocateZeroPool (100);
403 Status = Ext4ReadFile (NewHandle, &BufferSize,
Buffer);
404 if (Status == EFI_BUFFER_TOO_SMALL) {
405 TmpBuffer = ReallocatePool (100, BufferSize,
Buffer);
406 if (TmpBuffer == NULL) {
416 Ext4ReadFile (NewHandle, &BufferSize,
Buffer);
419 Ext4WriteFile (NewHandle, &BufferSize,
Buffer);
427 File = EXT4_FILE_FROM_THIS (NewHandle);
428 FileSize = EXT4_INODE_SIZE (File->Inode);
429 if (FileSize < (UINT64)-1 - 1) {
430 Position = FileSize + 1;
431 Status = Ext4SetPosition (NewHandle, Position);
432 if (!EFI_ERROR (Status)) {
433 Buffer = AllocateZeroPool (100);
440 Status = Ext4ReadFile (NewHandle, &BufferSize,
Buffer);
442 ASSERT (Status == EFI_DEVICE_ERROR);
447 Ext4Delete (NewHandle);
EFI_STATUS EFIAPI EfiLibInstallAllDriverProtocols2(IN CONST EFI_HANDLE ImageHandle, IN CONST EFI_SYSTEM_TABLE *SystemTable, IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, IN EFI_HANDLE DriverBindingHandle, IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL)