| // 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. |
| |
| library fuchsia.hardware.nand; |
| |
| using zx; |
| |
| const uint32 MAX_PARTITIONS = 10; |
| const uint32 NAME_LEN = 32; |
| |
| struct Partition { |
| // GUID specifying the format and use of data stored in the partition. |
| array<uint8>:GUID_LEN type_guid; |
| |
| // GUID unique to this partition. |
| array<uint8>:GUID_LEN unique_guid; |
| |
| // First and last block occupied by this partition. |
| uint32 first_block; |
| uint32 last_block; |
| |
| // The number of data copies and offset between each data copy (if relevant). |
| uint32 copy_count; |
| uint32 copy_byte_offset; |
| |
| // A string would break the current requirement for a simple C binding. |
| array<uint8>:NAME_LEN name; |
| |
| bool hidden; // Not a user-visible partition. |
| bool bbt; // Contains a legacy bad block table. |
| }; |
| |
| struct PartitionMap { |
| array<uint8>:GUID_LEN device_guid; |
| |
| // Number of partitions in the map. |
| uint32 partition_count; |
| array<Partition>:MAX_PARTITIONS partitions; |
| }; |
| |
| // Defines how a newly created ram-nand volume should operate. |
| struct RamNandInfo { |
| // VMO to use as backing store for nand device. Size should match size of `nand_info`. |
| // If a vmo is not provided, the device will create its own buffer and initialize it to be |
| // empty (all 1s). |
| handle<vmo>? vmo; |
| |
| // The desired "chip" configuration. |
| Info nand_info; |
| |
| // Partition map for the device. This can be left fully empty (as in default-initialized), |
| // as long as no metadata has to be exported by the device. If any metadata is required, |
| // it will be extracted from this map. |
| PartitionMap partition_map; |
| |
| bool export_nand_config; // If true, export "extra" partition configuration as metadata. |
| bool export_partition_map; // if true, export a boot partition map as metadata. |
| }; |
| |
| [Layout = "Simple"] |
| protocol RamNandCtl { |
| // Creates a new ram-nand device. On success, returns the device's name (not the full |
| // topological name, just the last component). |
| CreateDevice(RamNandInfo info) -> (zx.status status, string:NAME_LEN name); |
| }; |
| |
| [Layout = "Simple"] |
| protocol RamNand { |
| // Removes the device. |
| Unlink() -> (zx.status status); |
| }; |