1 /*
2  * (c) 2008-2009 Alexander Warg <warg@os.inf.tu-dresden.de>
3  *     economic rights: Technische Universität Dresden (Germany)
4  *
5  * This file is part of TUD:OS and distributed under the terms of the
6  * GNU General Public License 2.
7  * Please see the COPYING-GPL-2 file for details.
8  */
9 #pragma once
10 
11 #include "dataspace.h"
12 
13 namespace Moe {
14 
15 /**
16  * A dataspace serving a contiguous range of physical memory.
17  */
18 class Dataspace_cont : public Dataspace
19 {
20 public:
21   Dataspace_cont(void *start, unsigned long size,
22                  Flags flags,
23                  unsigned char page_shift);
24 
~Dataspace_cont()25   ~Dataspace_cont() { unmap(); }
26 
27   Address address(l4_addr_t offset,
28                   Flags flags, l4_addr_t hot_spot = 0,
29                   l4_addr_t min = 0, l4_addr_t max = ~0) const override;
30   int copy_address(l4_addr_t offset, Flags flags,
31                    l4_addr_t *addr, unsigned long *size) const override;
32 
33   int dma_map(Dma_space *dma, l4_addr_t offset, l4_size_t *size,
34               Dma_attribs dma_attrs, Dma_space::Direction dir,
35               Dma_space::Dma_addr *dma_addr) override;
36 
37 protected:
start(void * start)38   void start(void *start) { _start = (char*)start; }
start()39   void *start() { return _start; }
40 
41 private:
42   void unmap() const throw();
43 
44   char *_start;
45 };
46 
47 };
48 
49