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 preceeding 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
25int boot_kernel(efi_handle img, efi_system_table* sys,
26                void* image, size_t sz,
27                void* ramdisk, size_t rsz);
28
29uint64_t find_acpi_root(efi_handle img, efi_system_table* sys);
30uint64_t find_smbios(efi_handle img, efi_system_table* sys);
31
32uint32_t get_zx_pixel_format(efi_graphics_output_protocol* gop);
33
34int 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
39int 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
49unsigned 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
54size_t image_getsize(void* imageheader, size_t sz);
55
56
57void* image_load_from_disk(efi_handle img, efi_system_table* sys, size_t* sz);
58
59
60// Where to start the kernel from
61extern size_t kernel_zone_size;
62extern efi_physical_addr kernel_zone_base;
63