// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// DO NOT EDIT. Generated from FIDL library
//   zbi (//sdk/fidl/zbi/zbi.fidl)
// by zither, a Fuchsia platform tool.

#ifndef LIB_ZBI_FORMAT_ZBI_H_
#define LIB_ZBI_FORMAT_ZBI_H_

#include <stdint.h>

#if defined(__cplusplus)
extern "C" {
#endif

#define ZBI_ALIGNMENT ((uint32_t)(8u))

// Numeric prefix for kernel types.
//
// 'KRN\0'
#define ZBI_TYPE_KERNEL_PREFIX ((uint32_t)(0x004e524bu))

// Mask to compare against TYPE_KERNEL_PREFIX.
#define ZBI_TYPE_KERNEL_MASK ((uint32_t)(0x00ffffffu))

// Numeric prefix for driver metadata types.
//
// 'm\0\0\0'
#define ZBI_TYPE_DRIVER_METADATA_PREFIX ((uint32_t)(0x0000006du))

// Mask to compare against TYPE_DRIVER_METADATA_PREFIX.
#define ZBI_TYPE_DRIVER_METADATA_MASK ((uint32_t)(0x000000ffu))

typedef uint32_t zbi_type_t;

// 'BOOT'
//
// Each ZBI starts with a container header.
//     length:          Total size of the image after this header.
//                      This includes all item headers, payloads, and padding.
//                      It does not include the container header itself.
//                      Must be a multiple of ZBI_ALIGNMENT.
//     extra:           Must be ZBI_CONTAINER_MAGIC.
//     flags:           Must be ZBI_FLAGS_VERSION and no other flags.
#define ZBI_TYPE_CONTAINER ((zbi_type_t)(0x544f4f42u))

// x86-64 kernel. See zbi_kernel_t for a payload description.
//
// 'KRNL'
#define ZBI_TYPE_KERNEL_X64 ((zbi_type_t)(1280201291u))  // 0x4c000000 | TYPE_KERNEL_PREFIX

// ARM64 kernel. See zbi_kernel_t for a payload description.
//
// KRN8
#define ZBI_TYPE_KERNEL_ARM64 ((zbi_type_t)(944656971u))  // 0x38000000 | TYPE_KERNEL_PREFIX

// RISC-V kernel. See zbi_kernel_t for a payload description.
//
// 'KRNV'
#define ZBI_TYPE_KERNEL_RISCV64 ((zbi_type_t)(1447973451u))  // 0x56000000 | TYPE_KERNEL_PREFIX

// A discarded item that should just be ignored.  This is used for an
// item that was already processed and should be ignored by whatever
// stage is now looking at the ZBI.  An earlier stage already "consumed"
// this information, but avoided copying data around to remove it from
// the ZBI item stream.
//
// 'SKIP'
#define ZBI_TYPE_DISCARD ((zbi_type_t)(0x50494b53u))

// A virtual disk image.  This is meant to be treated as if it were a
// storage device.  The payload (after decompression) is the contents of
// the storage device, in whatever format that might be.
//
// 'RDSK'
#define ZBI_TYPE_STORAGE_RAMDISK ((zbi_type_t)(0x4b534452u))

// The /boot filesystem in BOOTFS format, specified in
// <lib/zbi-format/internal/bootfs.h>.  This represents an internal
// contract between Zircon userboot (//docs/userboot.md), which handles
// the contents of this filesystem, and platform tooling, which prepares
// them.
//
// 'BFSB'
#define ZBI_TYPE_STORAGE_BOOTFS ((zbi_type_t)(0x42534642u))

// Storage used by the kernel (such as a compressed image containing the
// actual kernel).  The meaning and format of the data is specific to the
// kernel, though it always uses the standard (private) storage
// compression protocol. Each particular KERNEL_{ARCH} item image and its
// STORAGE_KERNEL item image are intimately tied and one cannot work
// without the exact correct corresponding other.
//
// 'KSTR'
#define ZBI_TYPE_STORAGE_KERNEL ((zbi_type_t)(0x5254534bu))

// Device-specific factory data, stored in BOOTFS format.
//
// TODO(https://fxbug.dev/42109921): This should not use the "STORAGE" infix.
//
// 'BFSF'
#define ZBI_TYPE_STORAGE_BOOTFS_FACTORY ((zbi_type_t)(0x46534642u))

// A kernel command line fragment, a UTF-8 string that need not be
// NUL-terminated.  The kernel's own option parsing accepts only printable
// 'ASCI'I and treats all other characters as equivalent to whitespace. Multiple
// ZBI_TYPE_CMDLINE items can appear.  They are treated as if concatenated with
// ' ' between each item, in the order they appear: first items in the bootable
// ZBI containing the kernel; then items in the ZBI synthesized by the boot
// loader.  The kernel interprets the [whole command line](../../../../docs/kernel_cmdline.md).
//
// 'CMDL'
#define ZBI_TYPE_CMDLINE ((zbi_type_t)(0x4c444d43u))

// The crash log from the previous boot, a UTF-8 string.
//
// 'BOOM'
#define ZBI_TYPE_CRASHLOG ((zbi_type_t)(0x4d4f4f42u))

// Physical memory region that will persist across warm boots. See zbi_nvram_t
// for payload description.
//
// 'NVLL'
#define ZBI_TYPE_NVRAM ((zbi_type_t)(0x4c4c564eu))

// Platform ID Information.
//
// 'PLID'
#define ZBI_TYPE_PLATFORM_ID ((zbi_type_t)(0x44494c50u))

// Board-specific information.
//
// mBSI
#define ZBI_TYPE_DRV_BOARD_INFO \
  ((zbi_type_t)(1230193261u))  // 0x49534200 | TYPE_DRIVER_METADATA_PREFIX

// CPU configuration. See zbi_topology_node_t for a description of the payload.
#define ZBI_TYPE_CPU_TOPOLOGY ((zbi_type_t)(0x43505533u))

// Device memory configuration. See zbi_mem_range_t for a description of the
// payload.
//
// 'MEMC'
#define ZBI_TYPE_MEM_CONFIG ((zbi_type_t)(0x434d454du))

// Kernel driver configuration.  The zbi_header_t.extra field gives a
// ZBI_KERNEL_DRIVER_* type that determines the payload format.
// See <lib/zbi-format/driver-config.h> for details.
//
// 'KDRV'
#define ZBI_TYPE_KERNEL_DRIVER ((zbi_type_t)(0x5652444bu))

// 'ACPI' Root Table Pointer, a uint64_t physical address.
//
// 'RSDP'
#define ZBI_TYPE_ACPI_RSDP ((zbi_type_t)(0x50445352u))

// 'SMBI'
//
// 'SMBI'OS entry point, a uint64_t physical address.
#define ZBI_TYPE_SMBIOS ((zbi_type_t)(0x49424d53u))

// EFI system table, a uint64_t physical address.
//
// 'EFIS'
#define ZBI_TYPE_EFI_SYSTEM_TABLE ((zbi_type_t)(0x53494645u))

// EFI memory attributes table. An example of this format can be found in UEFI 2.10 section 4.6.4,
// but the consumer of this item is responsible for interpreting whatever the bootloader supplies
// (in particular the "version" field may differ as the format evolves).
//
// 'EMAT'
#define ZBI_TYPE_EFI_MEMORY_ATTRIBUTES_TABLE ((zbi_type_t)(0x54414d45u))

// Framebuffer parameters, a zbi_swfb_t entry.
//
// 'SWFB'
#define ZBI_TYPE_FRAMEBUFFER ((zbi_type_t)(0x42465753u))

// The image arguments, data is a trivial text format of one "key=value" per line
// with leading whitespace stripped and "#" comment lines and blank lines ignored.
// It is processed by bootsvc and parsed args are shared to others via Arguments service.
// TODO: the format can be streamlined after the /config/additional_boot_args compat support is
// removed.
//
// 'IARG'
#define ZBI_TYPE_IMAGE_ARGS ((zbi_type_t)(0x47524149u))

// A copy of the boot version stored within the sysconfig
// partition
//
// 'BVRS'
#define ZBI_TYPE_BOOT_VERSION ((zbi_type_t)(0x53525642u))

// MAC address for Ethernet, Wifi, Bluetooth, etc.  zbi_header_t.extra
// is a board-specific index to specify which device the MAC address
// applies to.  zbi_header_t.length gives the size in bytes, which
// varies depending on the type of address appropriate for the device.
//
// mMAC
#define ZBI_TYPE_DRV_MAC_ADDRESS \
  ((zbi_type_t)(1128353133u))  // 0x43414d00 | TYPE_DRIVER_METADATA_PREFIX

// A partition map for a storage device, a zbi_partition_map_t header
// followed by one or more zbi_partition_t entries.  zbi_header_t.extra
// is a board-specific index to specify which device this applies to.
//
// mPRT
#define ZBI_TYPE_DRV_PARTITION_MAP \
  ((zbi_type_t)(1414680685u))  // 0x54525000 | TYPE_DRIVER_METADATA_PREFIX

// Private information for the board driver.
//
// mBOR
#define ZBI_TYPE_DRV_BOARD_PRIVATE \
  ((zbi_type_t)(1380926061u))  // 0x524f4200 | TYPE_DRIVER_METADATA_PREFIX

// 'HWRB'
#define ZBI_TYPE_HW_REBOOT_REASON ((zbi_type_t)(0x42525748u))

// The serial number, an unterminated ASCII string of printable non-whitespace
// characters with length zbi_header_t.length.
//
// 'SRLN'
#define ZBI_TYPE_SERIAL_NUMBER ((zbi_type_t)(0x4e4c5253u))

// This type specifies a binary file passed in by the bootloader.
// The first byte specifies the length of the filename without a NUL terminator.
// The filename starts on the second byte.
// The file contents are located immediately after the filename.
//
// Layout: | name_len |        name       |   payload
//           ^(1 byte)  ^(name_len bytes)     ^(length of file)
//
// 'BTFL'
#define ZBI_TYPE_BOOTLOADER_FILE ((zbi_type_t)(0x4c465442u))

// The devicetree blob from the legacy boot loader, if any.  This is used only
// for diagnostic and development purposes.  Zircon kernel and driver
// configuration is entirely driven by specific ZBI items from the boot
// loader.  The boot shims for legacy boot loaders pass the raw devicetree
// along for development purposes, but extract information from it to populate
// specific ZBI items such as ZBI_TYPE_KERNEL_DRIVER et al.
#define ZBI_TYPE_DEVICETREE ((zbi_type_t)(0xd00dfeedu))

// An arbitrary number of random bytes attested to have high entropy.  Any
// number of items of any size can be provided, but no data should be provided
// that is not true entropy of cryptographic quality.  This is used to seed
// secure cryptographic pseudo-random number generators.
//
// 'RAND'
#define ZBI_TYPE_SECURE_ENTROPY ((zbi_type_t)(0x444e4152u))

// This provides a data dump and associated logging from a boot loader,
// shim, or earlier incarnation that wants its data percolated up by the
// booting Zircon kernel. See zbi_debugdata_t for a description of the
// payload.
//
// 'DBGD'
#define ZBI_TYPE_DEBUGDATA ((zbi_type_t)(0x44474244u))

// Each RISC-V hart has an associated "ISA string" encoding its supported
// extensions: see Chapter 27 (ISA Extension Naming Conventions) in
// https://riscv.org/wp-content/uploads/2019/12/riscv-spec-20191213.pdf.
// This item gives the NUL-separated (and -terminated) concatenation of
// all such strings in the system.
//
// The first character of the table must be NUL; that is, the first entry
// in the table must be the empty and invalid, which is pointed to by a
// default-constructructed index. Beyond that, there are no guarantees to
// order the strings in the table or the extent of their (de)duplication.
//
// A given hart's index into the table is encoded within its associated
// node structure in the ZBI_TYPE_CPU_TOPOLOGY item.
//
// 'VISA'
#define ZBI_TYPE_RISCV64_ISA_STRTAB ((zbi_type_t)(0x41534956u))

// LSW of sha256("bootdata")
#define ZBI_CONTAINER_MAGIC ((uint32_t)(0x868cf7e6u))

// LSW of sha256("bootitem")
#define ZBI_ITEM_MAGIC ((uint32_t)(0xb5781729u))

// Flags associated with an item.  A valid flags value must always include
// ZBI_FLAGS_VERSION. Values should also contain ZBI_FLAGS_CRC32 for any item
// where it's feasible to compute the CRC32 at build time.  Other flags are
// specific to each type.
typedef uint32_t zbi_flags_t;

// This flag is always required.
#define ZBI_FLAGS_VERSION ((zbi_flags_t)(1u << 16))

// ZBI items with the CRC32 flag must have a valid crc32.
// Otherwise their crc32 field must contain ZBI_ITEM_NO_CRC32
#define ZBI_FLAGS_CRC32 ((zbi_flags_t)(1u << 17))

// Value for zbi_header_t.crc32 when ZBI_FLAGS_CRC32 is not set.
#define ZBI_ITEM_NO_CRC32 ((uint32_t)(0x4a87e8d6u))

// Each header must be 8-byte aligned.  The length field specifies the
// actual payload length and does not include the size of padding.
typedef struct {
  // ZBI_TYPE_* constant.
  zbi_type_t type;

  // Size of the payload immediately following this header.  This
  // does not include the header itself nor any alignment padding
  // after the payload.
  uint32_t length;

  // Type-specific extra data.  Each type specifies the use of this
  // field.  When not explicitly specified, it should be zero.
  uint32_t extra;

  // Flags for this item.
  zbi_flags_t flags;

  // For future expansion.  Set to 0.
  uint32_t reserved0;
  uint32_t reserved1;

  // Must be ZBI_ITEM_MAGIC.
  uint32_t magic;

  // Must be the CRC32 of payload if ZBI_FLAGS_CRC32 is set,
  // otherwise must be ZBI_ITEM_NO_CRC32.
  uint32_t crc32;
} zbi_header_t;

#if defined(__cplusplus)
}
#endif

#endif  // LIB_ZBI_FORMAT_ZBI_H_
