1/*
2 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 *
6 */
7syntax = "proto3";
8
9enum Action {
10    ALLOCATE = 0;
11    FREE = 1;
12};
13
14/* allocate a memory region */
15message MemoryAllocMessage {
16    uint64 address = 1;
17    uint64 size_bits = 2;
18    uint64 type = 3;
19    Action action = 4;
20};
21
22/* allocate IRQs */
23/* x86 MSI IRQs */
24message IrqAllocMessagex86_MSI {
25    uint64 pci_bus = 1;
26    uint64 pci_dev = 2;
27    uint64 pci_func = 3;
28    uint64 handle = 4;
29    uint64 vector = 5;
30};
31
32/* x86 IOAPIC IRQs */
33message IrqAllocMessagex86_IOAPIC {
34    uint64 ioapic = 1;
35    uint64 pin = 2;
36    uint64 level = 3;
37    uint64 polarity = 4;
38    uint64 vector = 5;
39};
40
41/* IRQs represented only by a number, and also ARM IRQs with a trigger. */
42message IrqAllocMessageSimple {
43    bool setTrigger = 1;
44    uint64 irq = 2;
45    uint64 trigger = 3;
46};
47
48/* contains all IRQ messages */
49message IrqAllocMessage {
50    oneof type {
51        IrqAllocMessagex86_MSI msi = 1;
52        IrqAllocMessagex86_IOAPIC ioapic = 2;
53        IrqAllocMessageSimple simple = 3;
54    };
55};
56
57/* allocate IO port ranges */
58message IOPortMessage {
59    uint32 start = 1;
60    uint32 end = 2;
61};
62
63message ReturnMessage {
64    uint32 errorCode = 1;
65    uint64 cookie = 2;
66};
67
68/*
69 * this is the only message type that's actually sent,
70 * all the other messages are just contained within
71 * this one.
72 */
73message RpcMessage {
74    oneof msg {
75        ReturnMessage ret = 1;
76        MemoryAllocMessage memory = 2;
77        IrqAllocMessage irq = 3;
78        IOPortMessage ioport = 4;
79    };
80};
81