// 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.sysinfo;

using zx;

const uint8 SYSINFO_BOARD_NAME_LEN = 32;

enum InterruptControllerType {
    UNKNOWN = 0;
    APIC = 1;
    GIC_V2 = 2;
    GIC_V3 = 3;
};

struct InterruptControllerInfo {
    InterruptControllerType type;
};

[Layout = "Simple"]
protocol Device {
    // Return the root job handle.
    GetRootJob() -> (zx.status status, handle<job>? job);

    // Return the root resource (with only ZX_RIGHT_ENUMERATE and ZX_RIGHT_TRANSFER).
    GetRootResource() -> (zx.status status, handle<resource>? resource);

    // Return the hypervisor resource (with only ZX_RIGHT_TRANSFER).
    GetHypervisorResource() -> (zx.status status, handle<resource>? resource);

    // Return the board name for the platform we are running on.
    GetBoardName() -> (zx.status status, string:SYSINFO_BOARD_NAME_LEN? name);

    // Return interrupt controller information.
    GetInterruptControllerInfo() -> (zx.status status, InterruptControllerInfo? info);
};
