blob: b042bd2d89088f21bc79b2888f1ab8d5f3eaaf5b [file] [log] [blame]
// 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);
};