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, address_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(), 42 hot_spot, flags, region); 43 44 if (err) 45 return err; 46 47 err = complete_Dataspace_map(*region); 48 49 if (err) 50 return err; 51 52 return IPC_MESSAGE_SENT; 53 } 54 55 long SimplePager::info(offset_t *size, flags_t *flags) 56 { 57 *size = _region->size(); 58 *flags = L4_FPAGE_RW; 59 60 return L4_EOK; 61 } 62 63 // vim: tabstop=4 expandtab shiftwidth=4