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

using zx;

// Mailboxes
enum MailboxType : uint8 {
    SCP_SECURE_MAILBOX = 0x0;
    SCP_NS_LOW_PRIORITY_MAILBOX = 0x1;
    SCP_NS_HIGH_PRIORITY_MAILBOX = 0x2;
    AP_SECURE_MAILBOX = 0x3;
    AP_NS_LOW_PRIORITY_MAILBOX = 0x4;
    AP_NS_HIGH_PRIORITY_MAILBOX = 0x5;
    INVALID_MAILBOX = 0x6;
};

struct MailboxDataBuf {
    uint32 cmd;
    [Buffer] vector<uint8> tx;
};

struct MailboxChannel {
    MailboxType mailbox;
    [Buffer] vector<uint8> rx;
};

[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol Mailbox {
    SendCommand(MailboxChannel channel, MailboxDataBuf mdata) -> (zx.status s);
};
