1.1 --- a/dstest_server.cc Tue Jan 19 23:26:49 2021 +0100
1.2 +++ b/dstest_server.cc Wed Jan 20 01:37:12 2021 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * Test dataspace operations.
1.6 *
1.7 - * Copyright (C) 2020 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2020, 2021 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -29,58 +29,19 @@
1.13 #include <ipc/server.h>
1.14
1.15 #include "dataspace_server.h"
1.16 -#include "flexpage.h"
1.17 +#include "simple_pager.h"
1.18
1.19
1.20
1.21 /* Component interface. */
1.22
1.23 -class DataspaceServer : public Dataspace
1.24 +class DataspaceServer : public SimplePager
1.25 {
1.26 -protected:
1.27 - Region *_region;
1.28 - offset_t _start, _size;
1.29 -
1.30 public:
1.31 - explicit DataspaceServer(char *addr, offset_t size)
1.32 - {
1.33 - _region = new Region((offset_t) addr, (offset_t) addr + size);
1.34 - _start = 0;
1.35 - _size = size;
1.36 -
1.37 - offset_t i;
1.38 - int j;
1.39 -
1.40 - for (i = 0, j = 0; i < size; i += PAGE_SIZE, j++)
1.41 - memset((void *) (addr + i), (int) 'a' + j, PAGE_SIZE);
1.42 - }
1.43 -
1.44 - virtual long map(unsigned long offset, l4_addr_t hot_spot, unsigned long flags, l4_snd_fpage_t *region)
1.45 + explicit DataspaceServer(Memory *memory)
1.46 + : SimplePager(memory)
1.47 {
1.48 - Flexpage flexpage(_region);
1.49 - offset_t max_offset = _start + _size;
1.50 -
1.51 - printf("map(%ld, %lx, %lx, ...)\n", offset, hot_spot, flags);
1.52 -
1.53 - flexpage.reset(_start + offset);
1.54 -
1.55 - SendFlexpage send_flexpage = flexpage.to_send(offset, hot_spot, max_offset);
1.56 -
1.57 - printf("send %lx -> %lx -> {%lx, %d}\n", _region->start, flexpage.base_addr, send_flexpage.base_addr, send_flexpage.order);
1.58 -
1.59 - /* Send the flexpage explicitly. */
1.60 -
1.61 - region->fpage = l4_fpage(send_flexpage.base_addr, send_flexpage.order,
1.62 - (flags & L4RE_DS_MAP_FLAG_RW) ? L4_FPAGE_RW
1.63 - : L4_FPAGE_RO);
1.64 - region->snd_base = hot_spot;
1.65 -
1.66 - long err = complete_Dataspace_map(*region);
1.67 -
1.68 - if (err)
1.69 - return err;
1.70 -
1.71 - return IPC_MESSAGE_SENT;
1.72 + memset((void *) _region->start, (int) 'a', PAGE_SIZE);
1.73 }
1.74 };
1.75
1.76 @@ -90,17 +51,11 @@
1.77 {
1.78 /* Some memory. */
1.79
1.80 - char *memory;
1.81 -
1.82 - if (posix_memalign((void **) &memory, 40960, 40960))
1.83 - {
1.84 - printf("Could not allocate memory.\n");
1.85 - return 1;
1.86 - }
1.87 + Memory memory(10);
1.88
1.89 /* Dataspace encapsulation. */
1.90
1.91 - DataspaceServer obj(memory, 40960);
1.92 + DataspaceServer obj(&memory);
1.93
1.94 /* Server capability. */
1.95