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