| /* |
| * Copyright (c) 2018 The Fuchsia Authors |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _ZIRCON_PARTITION_H_ |
| #define _ZIRCON_PARTITION_H_ |
| |
| #include <zircon/boot/image.h> |
| |
| #define ZIRCON_PARTITION_PREFIX "zircon_" |
| |
| /* TODO(dmitryya@) add descriptions for API */ |
| |
| /* Gets zircon partition layout */ |
| const zbi_partition_map_t *zircon_get_partition_map(void); |
| |
| /* Gets |name| partition size from zircon partition layout. |
| */ |
| int zircon_get_partititon_size(const char *name, uint64_t *size); |
| |
| /* Writes |size| bytes from the buffer starting at |data| to the |
| * |name| zircon partition. |
| */ |
| int zircon_partition_write(const char *name, uint64_t offset, |
| const unsigned char *data, size_t size); |
| |
| /* Attempts to read |size| bytes from |name| zircon partition |
| * into the buffer starting at |data|. |
| */ |
| int zircon_partition_read(const char *name, uint64_t offset, |
| unsigned char *data, size_t size); |
| |
| /* Reads data + OOB bytes from NAND. |
| * |
| * Data is read as interleaved data->oob->data->oob->... bytes. Read failures |
| * are marked by an 8-char error code with the rest of the page all 0s. See |
| * constants below for the possible error codes. |
| * |
| * This function is designed to support sequential calls to fetch chunks of |
| * partitions at a time if the partition is too large to fit in the buffer. |
| * |offset_out| gives the next offset to start at, or 0 if we reached the |
| * end of the partition. |
| * |
| * @name: partition name. |
| * @offset: partition byte offset to start reading at; must be page-aligned. |
| * @buffer: buffer to read into. |
| * @size: buffer size; may not be filled completely if the partition ends |
| * early or we can't fit another whole page. |
| * @offset_out: offset to start the next read at, or 0 if we reached the |
| * partition end. |
| * @size_out: total number of bytes (data + OOB) copied into buffer; always |
| * contains complete pages. |
| * |
| * Returns 0 on success, nonzero on failure. |
| */ |
| int zircon_partition_read_oob(const char *name, uint64_t offset, |
| uint8_t *buffer, size_t size, |
| uint64_t *offset_out, size_t *size_out); |
| |
| /* Encountered a known bad block and skipped without attempting to read. */ |
| #define READ_OOB_ERROR_CODE_BAD_BLOCK "BADBLOCK" |
| |
| /* Attempted to read multiple times but failed each time. */ |
| #define READ_OOB_ERROR_CODE_READ_FAILURE "READFAIL" |
| |
| /* Erase |name| partition */ |
| int zircon_partition_erase(const char *name); |
| |
| #endif /* _ZIRCON_PARTITION_H_ */ |