#include <xen/device_tree.h>
#include <xen/libfdt/libfdt.h>
#include <asm/setup.h>
+#include <asm/smp.h>
void noreturn efi_xen_start(void *fdt_ptr, uint32_t fdt_size);
efi_bs->FreePool(memmap);
}
+static void __init efi_arch_halt(void)
+{
+ stop_cpu();
+}
+
static void __init efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image)
{
if ( (unsigned long)loaded_image->ImageBase & ((1 << 12) - 1) )
efi_bs->FreePages(ucode.addr, PFN_UP(ucode.size));
}
+static void __init efi_arch_halt(void)
+{
+ local_irq_disable();
+ for ( ; ; )
+ halt();
+}
+
static void __init efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image)
{
xen_phys_start = (UINTN)loaded_image->ImageBase;
PrintStr((CHAR16 *)str);
PrintStr(newline);
+ if ( !efi_bs )
+ efi_arch_halt();
+
if ( cfg.addr )
efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
if ( kernel.addr )
for ( retry = 0; ; retry = 1 )
{
efi_memmap_size = map_alloc_size;
- status = efi_bs->GetMemoryMap(&efi_memmap_size, efi_memmap, &map_key,
- &efi_mdesc_size, &mdesc_ver);
+ status = SystemTable->BootServices->GetMemoryMap(&efi_memmap_size,
+ efi_memmap, &map_key,
+ &efi_mdesc_size,
+ &mdesc_ver);
if ( EFI_ERROR(status) )
PrintErrMesg(L"Cannot obtain memory map", status);
efi_arch_pre_exit_boot();
- status = efi_bs->ExitBootServices(ImageHandle, map_key);
+ status = SystemTable->BootServices->ExitBootServices(ImageHandle,
+ map_key);
+ efi_bs = NULL;
if ( status != EFI_INVALID_PARAMETER || retry )
break;
}