Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 156854
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c
r85718 r99404 19 19 #pragma pack(1) 20 20 typedef struct { 21 MEMMAP_DEVICE_PATH 22 EFI_DEVICE_PATH_PROTOCOL 21 MEMMAP_DEVICE_PATH Node1; 22 EFI_DEVICE_PATH_PROTOCOL End; 23 23 } MEMORY_DEVICE_PATH; 24 24 #pragma pack() 25 25 26 STATIC CONST MEMORY_DEVICE_PATH MemoryDevicePathTemplate =26 STATIC CONST MEMORY_DEVICE_PATH MemoryDevicePathTemplate = 27 27 { 28 28 { … … 45 45 }; 46 46 47 48 47 /** 49 48 Start an EFI Application from a Device Path … … 60 59 EFI_STATUS 61 60 StartEfiApplication ( 62 IN EFI_HANDLE 63 IN EFI_DEVICE_PATH_PROTOCOL 64 IN UINTN 65 IN VOID *LoadOptions61 IN EFI_HANDLE ParentImageHandle, 62 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, 63 IN UINTN LoadOptionsSize, 64 IN VOID *LoadOptions 66 65 ) 67 66 { 68 EFI_STATUS 69 EFI_HANDLE 70 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;67 EFI_STATUS Status; 68 EFI_HANDLE ImageHandle; 69 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; 71 70 72 71 // Load the image from the device path with Boot Services function 73 Status = gBS->LoadImage (TRUE, ParentImageHandle, DevicePath, NULL, 0, 74 &ImageHandle); 72 Status = gBS->LoadImage ( 73 TRUE, 74 ParentImageHandle, 75 DevicePath, 76 NULL, 77 0, 78 &ImageHandle 79 ); 75 80 if (EFI_ERROR (Status)) { 76 81 // … … 83 88 gBS->UnloadImage (ImageHandle); 84 89 } 90 85 91 return Status; 86 92 } … … 88 94 // Passed LoadOptions to the EFI Application 89 95 if (LoadOptionsSize != 0) { 90 Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, 91 (VOID **) &LoadedImage); 96 Status = gBS->HandleProtocol ( 97 ImageHandle, 98 &gEfiLoadedImageProtocolGuid, 99 (VOID **)&LoadedImage 100 ); 92 101 if (EFI_ERROR (Status)) { 93 102 return Status; 94 103 } 95 104 96 LoadedImage->LoadOptionsSize 97 LoadedImage->LoadOptions 105 LoadedImage->LoadOptionsSize = LoadOptionsSize; 106 LoadedImage->LoadOptions = LoadOptions; 98 107 } 99 108 … … 110 119 EFI_STATUS 111 120 BootAndroidBootImg ( 112 IN UINTN 113 IN VOID 121 IN UINTN BufferSize, 122 IN VOID *Buffer 114 123 ) 115 124 { 116 EFI_STATUS 117 CHAR8 118 VOID 119 UINTN 120 VOID 121 UINTN 122 MEMORY_DEVICE_PATH 123 CHAR16 125 EFI_STATUS Status; 126 CHAR8 KernelArgs[ANDROID_BOOTIMG_KERNEL_ARGS_SIZE]; 127 VOID *Kernel; 128 UINTN KernelSize; 129 VOID *Ramdisk; 130 UINTN RamdiskSize; 131 MEMORY_DEVICE_PATH KernelDevicePath; 132 CHAR16 *LoadOptions, *NewLoadOptions; 124 133 125 134 Status = ParseAndroidBootImg ( 126 Buffer,127 &Kernel,128 &KernelSize,129 &Ramdisk,130 &RamdiskSize,131 KernelArgs132 );135 Buffer, 136 &Kernel, 137 &KernelSize, 138 &Ramdisk, 139 &RamdiskSize, 140 KernelArgs 141 ); 133 142 if (EFI_ERROR (Status)) { 134 143 return Status; … … 139 148 // Have to cast to UINTN before casting to EFI_PHYSICAL_ADDRESS in order to 140 149 // appease GCC. 141 KernelDevicePath.Node1.StartingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) 142 KernelDevicePath.Node1.EndingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) 150 KernelDevicePath.Node1.StartingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Kernel; 151 KernelDevicePath.Node1.EndingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Kernel + KernelSize; 143 152 144 153 // Initialize Linux command line … … 149 158 150 159 if (RamdiskSize != 0) { 151 NewLoadOptions = CatSPrint (LoadOptions, L" initrd=0x%x,0x%x", 152 (UINTN)Ramdisk, RamdiskSize); 160 NewLoadOptions = CatSPrint ( 161 LoadOptions, 162 L" initrd=0x%x,0x%x", 163 (UINTN)Ramdisk, 164 RamdiskSize 165 ); 153 166 FreePool (LoadOptions); 154 167 if (NewLoadOptions == NULL) { 155 168 return EFI_OUT_OF_RESOURCES; 156 169 } 170 157 171 LoadOptions = NewLoadOptions; 158 172 } 159 173 160 Status = StartEfiApplication (gImageHandle, 161 (EFI_DEVICE_PATH_PROTOCOL *) &KernelDevicePath, 174 Status = StartEfiApplication ( 175 gImageHandle, 176 (EFI_DEVICE_PATH_PROTOCOL *)&KernelDevicePath, 162 177 StrSize (LoadOptions), 163 LoadOptions); 178 LoadOptions 179 ); 164 180 if (EFI_ERROR (Status)) { 165 DEBUG (( EFI_D_ERROR, "Couldn't Boot Linux: %d\n", Status));181 DEBUG ((DEBUG_ERROR, "Couldn't Boot Linux: %d\n", Status)); 166 182 Status = EFI_DEVICE_ERROR; 167 183 goto FreeLoadOptions; … … 170 186 // If we got here we do a confused face because BootLinuxFdt returned, 171 187 // reporting success. 172 DEBUG (( EFI_D_ERROR, "WARNING: BdsBootLinuxFdt returned EFI_SUCCESS.\n"));188 DEBUG ((DEBUG_ERROR, "WARNING: BdsBootLinuxFdt returned EFI_SUCCESS.\n")); 173 189 return EFI_SUCCESS; 174 190
Note:
See TracChangeset
for help on using the changeset viewer.