@@ -86,71 +86,3 @@ EFI_STATUS uefi_read_file(EFI_FILE_HANDLE file_handle,
8686
8787 return status ;
8888}
89- 90- EFI_STATUS uefi_load_kernel_image (EFI_FILE_HANDLE volume ,
91- CHAR16 * filename ,
92- EFI_PHYSICAL_ADDRESS * kernel_entry_point )
93- {
94- EFI_STATUS status = EFI_SUCCESS ;
95- EFI_FILE_HANDLE file_handle ;
96- UINT64 file_size = 0 ;
97- UINT8 * buffer = NULL ;
98- 99- /* 1. Open the file. */
100- status = uefi_open_file (volume , filename , & file_handle );
101- if (EFI_ERROR (status ))
102- {
103- goto exit ;
104- }
105- 106- /* 2. Get kernel filesize. */
107- file_size = uefi_get_file_size (file_handle );
108- Print (L"Kernel file size: %d, page: %d\n" ,
109- file_size , EFI_SIZE_TO_PAGES (file_size ));
110- 111- /* 3. Allocate physical pages for kernel. */
112- status = uefi_call_wrapper (gBS -> AllocatePages , 4 ,
113- AllocateAddress , EfiLoaderCode ,
114- EFI_SIZE_TO_PAGES (file_size ),
115- kernel_entry_point );
116- if (EFI_ERROR (status ))
117- {
118- Print (L"Failed to allocate pages for kernel: %d\n" , status );
119- goto allocate_pages_failure ;
120- }
121- 122- /* 4. Allocate buffer to read kernel binary. */
123- buffer = AllocatePool (file_size );
124- 125- /* 5. Read the kernel binary to buffer. */
126- status = uefi_read_file (file_handle , buffer , file_size );
127- if (EFI_ERROR (status ))
128- {
129- Print (L"Failed to read kernel binary: %d\n" , status );
130- goto uefi_read_file_failure ;
131- }
132- 133- /* 6. Copy from the buffer to kernel memory. */
134- status = uefi_call_wrapper (gBS -> CopyMem , 3 ,
135- kernel_entry_point , buffer , file_size );
136- if (EFI_ERROR (status ))
137- {
138- Print (L"Failed to copy kernel binary: %d\n" , status );
139- goto copy_mem_failure ;
140- }
141- 142- /* 7. Close the file. */
143- goto exit_success ;
144- 145- copy_mem_failure :
146- uefi_read_file_failure :
147- uefi_call_wrapper (gBS -> FreePages , 2 , kernel_entry_point ,
148- EFI_SIZE_TO_PAGES (file_size ));
149- exit_success :
150- FreePool (buffer );
151- allocate_pages_failure :
152- close_file :
153- uefi_close_file (file_handle );
154- exit :
155- return status ;
156- }
0 commit comments