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