1/*
2 * Copyright (c) 2007, 2008, 2009, 2010, 2011, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10/* XXX: "blocking" is a misnomer. There is nothing in particular about this
11 * interface that requires clients to block on calls, simply the current
12 * implementation of the default (non-THC) Flounder RPC client stubs.
13 */
14interface monitor_blocking "The monitor to client RPC interface" {
15    typedef struct {
16        uint64 w0;
17        uint64 w1;
18        uint64 w2;
19        uint64 w3;
20    } caprep;
21
22    // For special boot domains to request the bootinfo frame
23    rpc get_bootinfo(out errval err, out cap frame, out size frame_size);
24
25    /* Remote cap operation messages */
26    rpc remote_cap_retype(in cap src_root, in cap dest_root, in uint32 src,
27                          in uint64 offset, in uint64 objtype, in uint64 objsize,
28                          in uint64 count, in uint32 to, in uint32 slot,
29                          in int dcn_level, out errval err);
30    rpc remote_cap_delete(in cap croot, in uint32 src, in uint8 level,
31                          out errval err);
32    rpc remote_cap_revoke(in cap croot, in uint32 src, in uint8 level,
33                          out errval err);
34
35    rpc get_phyaddr_cap(out cap pyaddr, out errval err);
36    rpc get_io_cap(out cap io, out errval err);
37    
38    // Get a irq destination capability that is targeted at the local apic, 
39    // with an unused vector.
40    rpc get_irq_dest_cap(out cap io, out errval err);
41
42    // Get a irq destination capability that is connectable with the irq src
43    // capability.
44    rpc get_irq_dest_cap_arm(in cap src, in int irq_idx, out cap io, out errval err);
45
46    // Resource control
47    rpc rsrc_manifest(in cap dispatcher, in String manifest[2048],
48            out rsrcid id, out errval err);
49    rpc rsrc_join(in rsrcid id, in cap dispatcher, out errval err);
50    rpc rsrc_phase(in rsrcid id, in uint32 phase);
51
52    // New monitor endpoint
53    rpc alloc_monitor_ep(out errval err, out cap ep);
54
55    // debug cap identify mechanism
56    rpc cap_identify(in cap cap, out errval err, out caprep caprep);
57
58    // XXX: Hack to set a cap remote until we have x-core cap management
59    rpc cap_set_remote(in cap cap, in bool remote, out errval err);
60
61    /* Allocate local IRQ vector */
62    rpc irq_handle(in cap ep, out errval err, out uint32 vector);
63
64    /* Allocate an IRQ on the arm plattform */
65    rpc arm_irq_handle(in cap ep, in uint32 irq, out errval err);
66
67    /* Retrieve local arch-specific core ID (e.g. APIC ID on x86)*/
68    rpc get_arch_core_id(out uintptr id);
69
70    /* get cap that can be used to send IPIs */
71    rpc get_ipi_cap(out cap cap);
72
73    rpc forward_kcb_request(in coreid destination, in cap kcb, out errval err);
74
75    /* should this be out cap kcb? */
76    rpc forward_kcb_rm_request(in coreid destination, in cap kcb, out errval err);
77
78    rpc get_global_paddr(out genpaddr global);
79
80    /* get platform we're running on */
81    rpc get_platform(out uint32 arch, out uint32 platform);
82
83    /* Get arch-specific platform data. Size must match PI_ARCH_INFO_SIZE+1. */
84    rpc get_platform_arch(out uint8 buf[length,256]);
85
86    /* Creates a new monitor binding and associates it with the endpoint */
87    rpc new_monitor_binding(in cap umpep, in bool do_bind, in uintptr id,
88                            out cap ep, out errval err);
89
90    rpc cap_needs_revoke_agreement(in cap c, in uintptr st, out errval err);
91};
92