| /* |
| * Copyright (c) 2018 The Fuchsia Authors |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _ZIRCON_ZIRCON_H_ |
| #define _ZIRCON_ZIRCON_H_ |
| |
| #include <zircon/boot/image.h> |
| #include <zircon-estelle/driver-config.h> |
| #include <zircon-estelle/gpt.h> |
| |
| #if defined(CONFIG_FIRMWARE_TESTING_DEV_BUILD) |
| #define BOOTLOADER_BUILD_VARIANT "test" |
| #elif defined(CONFIG_DEV_BUILD) |
| #define BOOTLOADER_BUILD_VARIANT "dev" |
| #elif defined(CONFIG_DOGFOOD_BUILD) |
| #define BOOTLOADER_BUILD_VARIANT "dogfood" |
| #elif defined(CONFIG_PROD_BUILD) |
| #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. |
| * |
| * Returns: 0 on success, nonzero on failure. |
| */ |
| int zircon_fixup_zbi(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); |
| |
| /** |
| * 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_preboot(). |
| * |
| * @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 |