1 #include <l4/re/protocols.h> /* L4RE_PROTO_DATASPACE */ 2 #include <systypes/base.h> /* map_address_t, offset_t */ 3 4 /* A dataspace interface. */ 5 6 [protocol(L4RE_PROTO_DATASPACE)] 7 interface Dataspace 8 { 9 /* Map memory within a dataspace. 10 NOTE: Using opcode_type to work around L4Re dataspace IPC issues. In 11 principle, this workaround is unnecessary for AMD64 and MIPS32 12 because even in the latter case, the opcode will be followed by the 13 64-bit offset aligned to a 64-bit boundary. Here, both the structure 14 used to interpret the message and the L4Re RPC framework agree. 15 However, on IA32, the "alignment requirement" of the 64-bit offset is 16 actually only 32 bits, meaning that the offset structure member will 17 immediately follow the opcode, but the L4Re RPC framework seems to 18 observe a different alignment regime. */ 19 20 [opcode(0),opcode_type(l4_uint64_t)] void map(in offset_t offset, in map_address_t hot_spot, 21 in map_flags_t flags, out fpage region); 22 23 /* Clear a dataspace. */ 24 25 [opcode(1)] void clear(in offset_t offset, in offset_t size); 26 27 /* Obtain statistics about a dataspace. */ 28 29 [opcode(2)] void info(out offset_t size, out map_flags_t flags); 30 31 /* Copy data between dataspaces. */ 32 33 [opcode(3)] void copy_in(in offset_t dest_offset, in cap source, 34 in offset_t source_offset, in offset_t size); 35 36 /* Allocate at least the given size at the given address in a dataspace. */ 37 38 [opcode(6)] void allocate(in offset_t offset, in l4_size_t size); 39 };