// Copyright 2020 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.registers;

using zx;

union Mask {
    1: uint8 r8;
    2: uint16 r16;
    3: uint32 r32;
    4: uint64 r64;
};

table MaskEntry {
    1: Mask mask;

    /// MMIO offset of mask range.
    /// Should be aligned to 4 for 32-bit registers, 8 for 64-bit registers, etc.
    2: zx.paddr mmio_offset;

    /// Number of masks with this mask value.
    3: uint32 count;

    /// Overlap check.
    /// If true, checks this mask for overlapping bits defined for all registers.
    /// If false, doesn't check.
    /// If absent, interpreted as true.
    4: bool overlap_check_on;
};

table RegistersMetadataEntry {
    /// ID for binding purposes (BIND_REGISTER_ID device property).
    1: uint32 bind_id;

    /// MMIO ID for MMIO corresponding to register.
    2: uint32 mmio_id;

    /// A run length encoded list of masks.
    /// Should be in order starting from base address. Masks should all be of the same type.
    3: vector<MaskEntry>:MAX masks;
};

table MmioMetadataEntry {
    /// MMIO ID.
    1: uint32 id;
};

table Metadata {
    /// Vector of MMIO metadata. One for each MMIO listed.
    1: vector<MmioMetadataEntry>:MAX mmio;

    /// Vector of Registers metadata. One for each register to be published.
    2: vector<RegistersMetadataEntry>:MAX registers;
};
