8 explicit Vm(Ram_quota *q) : Task(q, Caps::mem() | Caps::obj()) {}
9 int resume_vcpu(Context *, Vcpu_state *, bool) = 0;
12 template< typename VM >
15 static Kmem_slab_t<VM> a;
19 Kmem_slab_t<VM> Vm_allocator<VM>::a("Vm");
22 // ------------------------------------------------------------------------
23 INTERFACE [obj_space_virt]:
25 #include "obj_space_phys_util.h"
27 EXTENSION class Vm : Obj_space_phys<Vm>
30 typedef Obj_space_phys<Vm> Vm_obj_space;
31 using Task::ram_quota;
32 static Ram_quota *ram_quota(Vm_obj_space const *obj_sp)
33 { return static_cast<Vm const *>(obj_sp)->ram_quota(); }
35 bool v_lookup(Obj_space::V_pfn const &virt, Obj_space::Phys_addr *phys,
36 Obj_space::Page_order *size, Obj_space::Attr *attribs);
38 L4_fpage::Rights v_delete(Obj_space::V_pfn virt, Order size,
39 L4_fpage::Rights page_attribs);
40 Obj_space::Status v_insert(Obj_space::Phys_addr phys,
41 Obj_space::V_pfn const &virt,
43 Obj_space::Attr page_attribs);
45 Obj_space::Capability lookup(Cap_index virt);
46 Obj_space::V_pfn obj_map_max_address() const;
51 // ------------------------------------------------------------------------
56 Vm::mem_space_map_max_address() const
57 { return Page_number(1UL << (MWORD_BITS - Mem_space::Page_shift)); }
60 template< typename VM >
63 { return &Vm_allocator<VM>::a; }
65 // ------------------------------------------------------------------------
66 IMPLEMENTATION [ia32]:
68 PROTECTED static inline
73 // ------------------------------------------------------------------------
74 IMPLEMENTATION [amd64]:
76 PROTECTED static inline
82 //----------------------------------------------------------------------------
83 IMPLEMENTATION [obj_space_virt]:
86 // Utilities for map<Generic_obj_space> and unmap<Generic_obj_space>
90 void __attribute__((__flatten__))
92 { Vm_obj_space::caps_free(); }
96 bool __attribute__((__flatten__))
97 Vm::v_lookup(Obj_space::V_pfn const &virt, Obj_space::Phys_addr *phys,
98 Obj_space::Page_order *size, Obj_space::Attr *attribs)
99 { return Vm_obj_space::v_lookup(virt, phys, size, attribs); }
102 inline __attribute__((__flatten__))
103 Obj_space::Capability __attribute__((__flatten__))
104 Vm::lookup(Cap_index virt)
105 { return Vm_obj_space::lookup(virt); }
108 inline __attribute__((__flatten__))
109 L4_fpage::Rights __attribute__((__flatten__))
110 Vm::v_delete(Obj_space::V_pfn virt, Obj_space::Page_order size,
111 L4_fpage::Rights page_attribs)
112 { return Vm_obj_space::v_delete(virt, size, page_attribs); }
115 inline __attribute__((__flatten__))
116 Obj_space::Status __attribute__((__flatten__))
117 Vm::v_insert(Obj_space::Phys_addr phys, Obj_space::V_pfn const &virt,
118 Obj_space::Page_order size, Obj_space::Attr page_attribs)
119 { return (Obj_space::Status)Vm_obj_space::v_insert(phys, virt, size, page_attribs); }
122 inline __attribute__((__flatten__))
124 Vm::obj_map_max_address() const
125 { return Vm_obj_space::obj_map_max_address(); }
127 // ------------------------------------------------------------------------------
128 IMPLEMENTATION [obj_space_virt && debug]:
132 Vm::get_space(Vm_obj_space *base)
133 { return static_cast<Vm*>(base); }
136 Vm::Vm_obj_space::Entry *
137 Vm::jdb_lookup_cap(Cap_index index)
138 { return Vm_obj_space::jdb_lookup_cap(index); }
140 // ------------------------------------------------------------------------------
141 IMPLEMENTATION [obj_space_virt && !debug]:
145 Vm::get_space(Vm_obj_space *)