xref: /qemu/include/hw/loongarch/boot.h (revision 4216baa90da53f9c53d0a9de264450040423ede0)
1d771ca1cSSong Gao /* SPDX-License-Identifier: GPL-2.0-or-later */
2d771ca1cSSong Gao /*
3d771ca1cSSong Gao  * Definitions for LoongArch boot.
4d771ca1cSSong Gao  *
5d771ca1cSSong Gao  * Copyright (C) 2023 Loongson Technology Corporation Limited
6d771ca1cSSong Gao  */
7d771ca1cSSong Gao 
8d771ca1cSSong Gao #ifndef HW_LOONGARCH_BOOT_H
9d771ca1cSSong Gao #define HW_LOONGARCH_BOOT_H
10d771ca1cSSong Gao 
11*4216baa9SSong Gao /* UEFI 2.10 */
12*4216baa9SSong Gao #define EFI_SYSTEM_TABLE_SIGNATURE       0x5453595320494249
13*4216baa9SSong Gao #define EFI_2_100_SYSTEM_TABLE_REVISION  ((2<<16) | (100))
14*4216baa9SSong Gao #define EFI_SPECIFICATION_VERSION        EFI_SYSTEM_TABLE_REVISION
15*4216baa9SSong Gao #define EFI_SYSTEM_TABLE_REVISION        EFI_2_100_SYSTEM_TABLE_REVISION
16*4216baa9SSong Gao 
17*4216baa9SSong Gao #define FW_VERSION 0x1
18*4216baa9SSong Gao #define FW_PATCHLEVEL 0x0
19*4216baa9SSong Gao 
20*4216baa9SSong Gao typedef struct {
21*4216baa9SSong Gao     uint8_t b[16];
22*4216baa9SSong Gao } efi_guid_t QEMU_ALIGNED(8);
23*4216baa9SSong Gao 
24*4216baa9SSong Gao struct efi_config_table {
25*4216baa9SSong Gao     efi_guid_t guid;
26*4216baa9SSong Gao     uint64_t *ptr;
27*4216baa9SSong Gao     const char name[16];
28*4216baa9SSong Gao };
29*4216baa9SSong Gao 
30*4216baa9SSong Gao typedef struct {
31*4216baa9SSong Gao     uint64_t signature;
32*4216baa9SSong Gao     uint32_t revision;
33*4216baa9SSong Gao     uint32_t headersize;
34*4216baa9SSong Gao     uint32_t crc32;
35*4216baa9SSong Gao     uint32_t reserved;
36*4216baa9SSong Gao } efi_table_hdr_t;
37*4216baa9SSong Gao 
38*4216baa9SSong Gao struct efi_configuration_table {
39*4216baa9SSong Gao     efi_guid_t guid;
40*4216baa9SSong Gao     void *table;
41*4216baa9SSong Gao };
42*4216baa9SSong Gao 
43*4216baa9SSong Gao struct efi_system_table {
44*4216baa9SSong Gao     efi_table_hdr_t hdr;
45*4216baa9SSong Gao     uint64_t fw_vendor;        /* physical addr of CHAR16 vendor string */
46*4216baa9SSong Gao     uint32_t fw_revision;
47*4216baa9SSong Gao     uint64_t con_in_handle;
48*4216baa9SSong Gao     uint64_t *con_in;
49*4216baa9SSong Gao     uint64_t con_out_handle;
50*4216baa9SSong Gao     uint64_t *con_out;
51*4216baa9SSong Gao     uint64_t stderr_handle;
52*4216baa9SSong Gao     uint64_t stderr_placeholder;
53*4216baa9SSong Gao     uint64_t *runtime;
54*4216baa9SSong Gao     uint64_t *boottime;
55*4216baa9SSong Gao     uint64_t nr_tables;
56*4216baa9SSong Gao     struct efi_configuration_table *tables;
57*4216baa9SSong Gao };
58*4216baa9SSong Gao 
59d771ca1cSSong Gao struct loongarch_boot_info {
60d771ca1cSSong Gao     uint64_t ram_size;
61d771ca1cSSong Gao     const char *kernel_filename;
62d771ca1cSSong Gao     const char *kernel_cmdline;
63d771ca1cSSong Gao     const char *initrd_filename;
64d771ca1cSSong Gao     uint64_t a0, a1, a2;
65d771ca1cSSong Gao };
66d771ca1cSSong Gao 
67d771ca1cSSong Gao void loongarch_load_kernel(MachineState *ms, struct loongarch_boot_info *info);
68d771ca1cSSong Gao 
69d771ca1cSSong Gao #endif /* HW_LOONGARCH_BOOT_H */
70