// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Copyright (c) 2009 Corey Tabaka

// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SYSROOT_ZIRCON_MULTIBOOT_H_
#define SYSROOT_ZIRCON_MULTIBOOT_H_

/* magic number for multiboot header */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002

// Flags for multiboot header:
//   0x00000002: Boot loader should provide memory map.
//   0x00010000: *_addr fields in multiboot_header_t are used.
#define MULTIBOOT_HEADER_FLAGS 0x00010002

/* magic number passed by multiboot-compliant boot loaders */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002

#ifndef __ASSEMBLER__

#include <stdint.h>

/* multiboot header */
typedef struct multiboot_header {
  uint32_t magic;
  uint32_t flags;
  uint32_t checksum;
  uint32_t header_addr;
  uint32_t load_addr;
  uint32_t load_end_addr;
  uint32_t bss_end_addr;
  uint32_t entry_addr;
} multiboot_header_t;

/* symbol table for a.out */
typedef struct aout_symbol_table {
  uint32_t tabsize;
  uint32_t strsize;
  uint32_t addr;
  uint32_t reserved;
} aout_symbol_table_t;

/* section header table for ELF */
typedef struct elf_section_header_table {
  uint32_t num;
  uint32_t size;
  uint32_t addr;
  uint32_t shndx;
} elf_section_header_table_t;

/* multiboot info */
typedef struct multiboot_info {
  uint32_t flags;
  uint32_t mem_lower;
  uint32_t mem_upper;
  uint32_t boot_device;
  uint32_t cmdline;
  uint32_t mods_count;
  uint32_t mods_addr;
  union {
    aout_symbol_table_t aout_sym;
    elf_section_header_table_t elf_sec;
  } u;
  uint32_t mmap_length;
  uint32_t mmap_addr;
  uint32_t drives_length;
  uint32_t drives_addr;
  uint32_t config_table;
  uint32_t boot_loader_name;
  uint32_t apm_table;
} multiboot_info_t;

#define MB_INFO_MEM_SIZE 0x001
#define MB_INFO_BOOT_DEV 0x002
#define MB_INFO_CMD_LINE 0x004
#define MB_INFO_MODS 0x008
#define MB_INFO_SYMS 0x010
#define MB_INFO_SHDR 0x020
#define MB_INFO_MMAP 0x040
#define MB_INFO_DRIVES 0x080
#define MB_INFO_CONFIG 0x100
#define MB_INFO_BOOT_LOADER 0x200
#define MB_INFO_APM_TABLE 0x400
#define MB_INFO_VBE 0x800

/* module structure */
typedef struct module {
  uint32_t mod_start;
  uint32_t mod_end;
  uint32_t string;
  uint32_t reserved;
} module_t;

/* memory map - be careful that the offset 0 is base_addr_low without size */
typedef struct memory_map {
  uint32_t size;
  uint32_t base_addr_low;
  uint32_t base_addr_high;
  uint32_t length_low;
  uint32_t length_high;
  uint32_t type;
} memory_map_t;

/* memory map entry types */
#define MB_MMAP_TYPE_AVAILABLE 0x01
#define MB_MMAP_TYPE_RESERVED 0x02
#define MB_MMAP_TYPE_ACPI_RECLAIM 0x03
#define MB_MMAP_TYPE_ACPI_NVS 0x04

#endif

#endif  // SYSROOT_ZIRCON_BOOT_MULTIBOOT_
