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