1 #include <l4/re/c/dataspace.h> 2 3 #include "dataspace_server.h" 4 #include "ipc.h" 5 #include "simple_pager.h" 6 7 8 9 SimplePager::SimplePager(Memory *memory) 10 { 11 if (memory == NULL) 12 _memory = new Memory(); 13 else 14 _memory = memory; 15 16 _region = _memory->region(); 17 } 18 19 void SimplePager::close() 20 { 21 if (_region != NULL) 22 { 23 _memory->release(_region); 24 _region = NULL; 25 } 26 } 27 28 /* Map a flexpage corresponding to the dataspace 'offset' involving a 'hot_spot' 29 (flexpage offset). */ 30 31 long SimplePager::map(offset_t offset, l4_addr_t hot_spot, flags_t flags, l4_snd_fpage_t *region) 32 { 33 Flexpage flexpage(_region); 34 35 flexpage.reset(offset); 36 flexpage.upgrade(flags); 37 38 /* Send the flexpage explicitly. */ 39 40 long err = ipc_prepare_flexpage(&flexpage, offset, _region->size(), hot_spot, region); 41 42 if (err) 43 return err; 44 45 err = complete_Dataspace_map(*region); 46 47 if (err) 48 return err; 49 50 return IPC_MESSAGE_SENT; 51 } 52 53 long SimplePager::info(offset_t *size, flags_t *flags) 54 { 55 *size = _region->size(); 56 *flags = L4_FPAGE_RW; 57 58 return L4_EOK; 59 } 60 61 // vim: tabstop=4 expandtab shiftwidth=4