1 // Copyright 2017 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 #include <stdint.h> 8 9 #include <efi/system-table.h> 10 #include <efi/protocol/graphics-output.h> 11 12 #define PAGE_SIZE (4096) 13 #define PAGE_MASK (PAGE_SIZE - 1) 14 15 #define BYTES_TO_PAGES(n) (((n) + PAGE_MASK) / PAGE_SIZE) 16 17 // Ensure there are some pages preceding the 18 // Ramdisk so that the kernel start code can 19 // use them to prepend bootdata items if desired. 20 #define FRONT_PAGES (8) 21 #define FRONT_BYTES (PAGE_SIZE * FRONT_PAGES) 22 23 #define CMDLINE_MAX PAGE_SIZE 24 25 int boot_kernel(efi_handle img, efi_system_table* sys, 26 void* image, size_t sz, 27 void* ramdisk, size_t rsz); 28 29 uint64_t find_acpi_root(efi_handle img, efi_system_table* sys); 30 uint64_t find_smbios(efi_handle img, efi_system_table* sys); 31 32 uint32_t get_zx_pixel_format(efi_graphics_output_protocol* gop); 33 34 int boot_deprecated(efi_handle img, efi_system_table* sys, 35 void* image, size_t sz, 36 void* ramdisk, size_t rsz, 37 void* cmdline, size_t csz); 38 39 int zedboot(efi_handle img, efi_system_table* sys, 40 void* image, size_t sz); 41 42 #define IMAGE_INVALID 0 43 #define IMAGE_EMPTY 1 44 #define IMAGE_KERNEL 2 45 #define IMAGE_RAMDISK 3 46 #define IMAGE_COMBO 4 47 48 49 unsigned identify_image(void* image, size_t sz); 50 51 // sz may be just one block or sector 52 // if the header looks like a kernel image, return expected size 53 // otherwise returns 0 54 size_t image_getsize(void* imageheader, size_t sz); 55 56 57 void* image_load_from_disk(efi_handle img, efi_system_table* sys, size_t* sz); 58 59 60 // Where to start the kernel from 61 extern size_t kernel_zone_size; 62 extern efi_physical_addr kernel_zone_base; 63