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