/* * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef MEDIA_BLOCK_VOLUME_H #define MEDIA_BLOCK_VOLUME_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** * Provides a concrete volume that presents a block storage partition * as a single volume. Access to the underlying storage is handled by an associated * block_store. The block_store could be any concrete block_store. */ struct block_volume { struct volume base_volume; size_t file_pos; size_t size; struct block_store *block_store; struct uuid_octets partition_guid; storage_partition_handle_t partition_handle; struct storage_partition_info partition_info; }; /** * @brief Initialize an block_volume instance * * @param[in] this_instance The subject block_volume * @param[in] block_store The associated block_store * @param[in] partition_guid The partition GUID * @param[out] volume The base volume * * @return 0 on success */ int block_volume_init( struct block_volume *this_instance, struct block_store *block_store, const struct uuid_octets *partition_guid, struct volume **volume); /** * @brief De-initialize an block_volume instance * * @param[in] this_instance The subject block_volume */ void block_volume_deinit( struct block_volume *this_instance); /** * @brief Set the partition GUID * * Modifies the partition GUID. This will be used to identify the target * storage partition on a subsequent call to io_dev_open. * * @param[in] this_instance The subject block_volume * @param[in] partition_guid The partition GUID */ void block_volume_set_partition_guid( struct block_volume *this_instance, const struct uuid_octets *partition_guid); #ifdef __cplusplus } #endif #endif /* MEDIA_BLOCK_VOLUME_H */