| /* |
| * Copyright (c) 2018 The Fuchsia Authors |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _ZIRCON_UBOOT_ZIRCON_H_ |
| #define _ZIRCON_UBOOT_ZIRCON_H_ |
| |
| #include <abr/abr.h> |
| #include <abr/ops.h> |
| #include <zircon/boot/driver-config.h> |
| #include <zircon/boot/image.h> |
| #include <zircon_uboot/gpt.h> |
| |
| #if defined(DEV_BUILD_CONFIG) |
| #define BOOTLOADER_BUILD_VARIANT "dev" |
| #elif defined(DOGFOOD_BUILD_CONFIG) |
| #define BOOTLOADER_BUILD_VARIANT "dogfood" |
| #elif defined(PROD_BUILD_CONFIG) |
| #define BOOTLOADER_BUILD_VARIANT "prod" |
| #else |
| #error Unknown bootloader build variant |
| #endif |
| |
| /** |
| * Modifies the ZBI to add bootloader-generated items. |
| * |
| * This should be called exactly once after the prebuilt ZBI has been loaded |
| * into memory, before booting it. |
| * |
| * @zbi: ZBI container. |
| * @capacity: Total available space the container can expand to. |
| * @slot: Zircon slot we're booting into. |
| * |
| * Returns: 0 on success, nonzero on failure. |
| */ |
| int zircon_fixup_zbi(zbi_header_t *zbi, size_t capacity, AbrSlotIndex slot); |
| |
| /** |
| * Modifies the ZBI to add bootloader-generated items. |
| * |
| * This should be called exactly once after the prebuilt ZBI has been loaded |
| * into memory, before booting it. |
| * |
| * @zbi: ZBI container. |
| * @capacity: Total available space the container can expand to. |
| * |
| * Returns: 0 on success, nonzero on failure. |
| */ |
| int zircon_fixup_zbi_no_slot(zbi_header_t *zbi, size_t capacity); |
| |
| |
| /** |
| * Adds a ZBI item to the given container. |
| * |
| * This is a thin wrapper around libzbi's zbi_create_entry_with_payload(), |
| * which adds: |
| * - additional length checks to prevent uint32_t overflow |
| * - automatic logging if appending the item fails |
| * |
| * @zbi: ZBI container. |
| * @capacity: ZBI container capacity. |
| * @type: ZBI item type to add. |
| * @extra: ZBI item extra value. |
| * @payload: ZBI item payload. |
| * @size: ZBI item payload size. |
| * |
| * Return: 0 on success, nonzero on error. |
| */ |
| int append_zbi_item_or_log(void *zbi, size_t capacity, uint32_t type, |
| uint32_t extra, const void *payload, size_t size); |
| |
| /** |
| * Maps slot index to partition name. |
| * Returns empty string for invalid slot_index. |
| */ |
| const char *zircon_slot_idx_to_part_name(AbrSlotIndex slot_index); |
| |
| /* AbrOps implementation. */ |
| const AbrOps *zircon_abr_ops(void); |
| |
| /** |
| * Name of partition containing A/B/R config data - normally "misc" or |
| * "durable_boot". |
| */ |
| extern const char *zircon_abr_partition_name; |
| |
| /** |
| * Loads zircon image using A/B/R scheme. |
| * |
| * @loadaddr: Address at which to load the zircon image. |
| * @loadsize: Size of the load buffer. |
| * @force_recovery: trigger a force boot into recovery (R slot). |
| * @img_offset: Set to entry point offset. Zero if unknown. |
| * @slot: On success, will be set to the slot that was loaded. |
| * |
| * Return: 0 if successful, negative value on failure. |
| */ |
| int zircon_abr_img_load(unsigned char *loadaddr, size_t loadsize, |
| bool force_recovery, size_t *img_offset, |
| AbrSlotIndex *slot); |
| |
| /** |
| * Stages a ZBI_TYPE_BOOTLOADER_FILE item. |
| * |
| * This functionality is used by fastboot before the ZBI is loaded into |
| * memory, so we can't append it to the prebuilt ZBI directly. Instead we |
| * stage it in a buffer and it will be appended by zircon_fixup_zbi(). |
| * |
| * @name: file name. |
| * @data: file contents. |
| * @data_len: contents length. |
| * |
| * Returns: 0 on success, nonzero on failure. |
| */ |
| int zircon_stage_zbi_file(const char *name, const uint8_t *data, |
| size_t data_len); |
| |
| #endif // _ZIRCON_UBOOT_ZIRCON_H_ |