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