paul@6 | 1 | #pragma once |
paul@6 | 2 | |
paul@30 | 3 | #include <systypes/base.h> |
paul@30 | 4 | |
paul@6 | 5 | #include "page_mapper.h" |
paul@6 | 6 | #include "resource.h" |
paul@6 | 7 | |
paul@6 | 8 | |
paul@6 | 9 | |
paul@6 | 10 | /* A pager exposing a dataspace. */ |
paul@6 | 11 | |
paul@7 | 12 | class Pager : public Resource |
paul@6 | 13 | { |
paul@6 | 14 | protected: |
paul@6 | 15 | offset_t _start, _size; |
paul@6 | 16 | PageMapper *_mapper; |
paul@54 | 17 | flags_t _flags; |
paul@6 | 18 | |
paul@6 | 19 | public: |
paul@54 | 20 | explicit Pager(PageMapper *mapper, flags_t flags); |
paul@6 | 21 | |
paul@24 | 22 | virtual void close(); |
paul@6 | 23 | |
paul@6 | 24 | /* Paging methods. */ |
paul@6 | 25 | |
paul@90 | 26 | virtual long map(offset_t offset, l4_addr_t hot_spot, flags_t flags, |
paul@90 | 27 | l4_snd_fpage_t *region); |
paul@6 | 28 | |
paul@6 | 29 | /* Limit methods. */ |
paul@6 | 30 | |
paul@6 | 31 | offset_t get_data_size(); |
paul@6 | 32 | |
paul@53 | 33 | /* File methods. */ |
paul@53 | 34 | |
paul@53 | 35 | virtual long flush(offset_t populated_size, offset_t *size); |
paul@53 | 36 | |
paul@55 | 37 | virtual long resize(offset_t *size); |
paul@55 | 38 | |
paul@7 | 39 | /* Mapped file methods. */ |
paul@7 | 40 | |
paul@90 | 41 | virtual long mmap(offset_t position, offset_t length, offset_t *start_pos, |
paul@90 | 42 | offset_t *end_pos, offset_t *size); |
paul@6 | 43 | }; |
paul@6 | 44 | |
paul@6 | 45 | // vim: tabstop=4 expandtab shiftwidth=4 |