blob: 07f19450db3ec08854d5d3a330b452513f992889 [file] [log] [blame]
// 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 in doubt, default to true. If not set, defaults to 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;
};