| // Copyright 2018 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. | |
| #ifndef SYSROOT_ZIRCON_BOOT_BOOTFS_H_ | |
| #define SYSROOT_ZIRCON_BOOT_BOOTFS_H_ | |
| // Local modification for Estelle. See lib/fuchsia/README.estelle.md. | |
| #include <common.h> // <stdint.h> | |
| // The payload (after decompression) of an item in BOOTFS format consists | |
| // of separate "file" images that are each aligned to ZBI_BOOTFS_PAGE_SIZE | |
| // bytes from the beginning of the item payload. The first "file" consists | |
| // of a zbi_bootfs_header_t followed by directory entries. | |
| #define ZBI_BOOTFS_PAGE_SIZE (4096u) | |
| #define ZBI_BOOTFS_PAGE_ALIGN(size) \ | |
| (((size) + ZBI_BOOTFS_PAGE_SIZE - 1) & ~(ZBI_BOOTFS_PAGE_SIZE - 1)) | |
| typedef struct { | |
| // Must be ZBI_BOOTFS_MAGIC. | |
| uint32_t magic; | |
| // Size in bytes of all the directory entries. | |
| // Does not include the size of the zbi_bootfs_header_t. | |
| uint32_t dirsize; | |
| // Reserved for future use. Set to 0. | |
| uint32_t reserved0; | |
| uint32_t reserved1; | |
| } zbi_bootfs_header_t; | |
| // LSW of sha256("bootfs") | |
| #define ZBI_BOOTFS_MAGIC (0xa56d3ff9) | |
| // Each directory entry holds a pathname and gives the offset and size | |
| // of the contents of the file by that name. | |
| typedef struct { | |
| // Length of the name[] field at the end. This length includes the | |
| // NUL terminator, which must be present, but does not include any | |
| // alignment padding required before the next directory entry. | |
| uint32_t name_len; | |
| // Length of the file in bytes. This is an exact size that is not | |
| // rounded, though the file is always padded with zeros up to a | |
| // multiple of ZBI_BOOTFS_PAGE_SIZE. | |
| uint32_t data_len; | |
| // Offset from the beginning of the payload (zbi_bootfs_header_t) to | |
| // the file's data. This must be a multiple of ZBI_BOOTFS_PAGE_SIZE. | |
| uint32_t data_off; | |
| // Pathname of the file, a UTF-8 string. This must include a NUL | |
| // terminator at the end. It must not begin with a '/', but it may | |
| // contain '/' separators for subdirectories. | |
| char name[]; | |
| } zbi_bootfs_dirent_t; | |
| // Each directory entry has a variable size of [16,268] bytes that | |
| // must be a multiple of 4 bytes. | |
| #define ZBI_BOOTFS_DIRENT_SIZE(name_len) \ | |
| ((sizeof(zbi_bootfs_dirent_t) + (name_len) + 3) & -(size_t)4) | |
| // zbi_bootfs_dirent_t.name_len must be > 1 and <= ZBI_BOOTFS_MAX_NAME_LEN. | |
| #define ZBI_BOOTFS_MAX_NAME_LEN (256) | |
| #endif // SYSROOT_ZIRCON_BOOT_BOOTFS_H_ |