blob: 24495cdcd2d8cb5155358df92aad1d28a9c3eb64 [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;
type Mask = strict union {
1: r8 uint8;
2: r16 uint16;
3: r32 uint32;
4: r64 uint64;
};
type MaskEntry = table {
1: mask Mask;
/// MMIO offset of mask range.
/// Should be aligned to 4 for 32-bit registers, 8 for 64-bit registers, etc.
2: mmio_offset zx.paddr;
/// Number of masks with this mask value.
3: count uint32;
/// 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: overlap_check_on bool;
};
type RegistersMetadataEntry = table {
/// ID for binding purposes (BIND_REGISTER_ID device property).
1: bind_id uint32;
/// MMIO ID for MMIO corresponding to register.
2: mmio_id uint32;
/// A run length encoded list of masks.
/// Should be in order starting from base address. Masks should all be of the same type.
3: masks vector<MaskEntry>:MAX;
};
type MmioMetadataEntry = table {
/// MMIO ID.
1: id uint32;
};
type Metadata = table {
/// Vector of MMIO metadata. One for each MMIO listed.
1: mmio vector<MmioMetadataEntry>:MAX;
/// Vector of Registers metadata. One for each register to be published.
2: registers vector<RegistersMetadataEntry>:MAX;
};