Changeset 8182031 in mainline for generic/include/mm/as.h
- Timestamp:
- 2006-05-23T23:09:13Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 82da5f5
- Parents:
- 56789125
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/include/mm/as.h
r56789125 r8182031 35 35 #define AS_AREA_EXEC 4 36 36 #define AS_AREA_DEVICE 8 37 #define AS_AREA_ANON 16 37 38 38 39 #ifdef KERNEL … … 61 62 62 63 #define FLAG_AS_KERNEL (1 << 0) /**< Kernel address space. */ 63 64 65 /** Address space area attributes. */66 #define AS_AREA_ATTR_NONE 067 #define AS_AREA_ATTR_PARTIAL 1 /* Not fully initialized area. */68 69 #define AS_PF_FAULT 0 /**< The page fault was not resolved by as_page_fault(). */70 #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */71 #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace()72 or memcpy_to_uspace(). */73 74 /** Address space area structure.75 *76 * Each as_area_t structure describes one contiguous area of virtual memory.77 * In the future, it should not be difficult to support shared areas.78 */79 struct as_area {80 mutex_t lock;81 int flags; /**< Flags related to the memory represented by the address space area. */82 int attributes; /**< Attributes related to the address space area itself. */83 count_t pages; /**< Size of this area in multiples of PAGE_SIZE. */84 __address base; /**< Base address of this area. */85 btree_t used_space; /**< Map of used space. */86 };87 64 88 65 /** Address space structure. … … 119 96 typedef struct as_operations as_operations_t; 120 97 98 /** Address space area attributes. */ 99 #define AS_AREA_ATTR_NONE 0 100 #define AS_AREA_ATTR_PARTIAL 1 /**< Not fully initialized area. */ 101 102 #define AS_PF_FAULT 0 /**< The page fault was not resolved by as_page_fault(). */ 103 #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */ 104 #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace() 105 or memcpy_to_uspace(). */ 106 107 typedef struct share_info share_info_t; 108 typedef struct mem_backend mem_backend_t; 109 110 /** Address space area structure. 111 * 112 * Each as_area_t structure describes one contiguous area of virtual memory. 113 * In the future, it should not be difficult to support shared areas. 114 */ 115 struct as_area { 116 mutex_t lock; 117 int flags; /**< Flags related to the memory represented by the address space area. */ 118 int attributes; /**< Attributes related to the address space area itself. */ 119 count_t pages; /**< Size of this area in multiples of PAGE_SIZE. */ 120 __address base; /**< Base address of this area. */ 121 btree_t used_space; /**< Map of used space. */ 122 share_info_t *sh_info; /**< If the address space area has been shared, this pointer will 123 reference the share info structure. */ 124 mem_backend_t *backend; /**< Memory backend backing this address space area. */ 125 void *backend_data[2]; /**< Data to be used by the backend. */ 126 }; 127 128 /** Address space area backend structure. */ 129 struct mem_backend { 130 int (* backend_page_fault)(as_area_t *area, __address addr); 131 void (* backend_frame_free)(as_area_t *area, __address page, __address frame); 132 }; 133 121 134 extern as_t *AS_KERNEL; 122 135 extern as_operations_t *as_operations; … … 127 140 extern void as_init(void); 128 141 extern as_t *as_create(int flags); 129 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base, int attrs); 142 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base, int attrs, 143 mem_backend_t *backend, void **backend_data); 130 144 extern int as_area_resize(as_t *as, __address address, size_t size, int flags); 131 145 extern int as_area_destroy(as_t *as, __address address); 146 extern int as_area_get_flags(as_area_t *area); 132 147 extern void as_set_mapping(as_t *as, __address page, __address frame); 133 148 extern int as_page_fault(__address page, istate_t *istate); … … 136 151 extern int as_area_steal(task_t *src_task, __address src_base, size_t acc_size, __address dst_base); 137 152 extern size_t as_get_size(__address base); 153 extern int used_space_insert(as_area_t *a, __address page, count_t count); 154 extern int used_space_remove(as_area_t *a, __address page, count_t count); 138 155 139 156 /* Interface to be implemented by architectures. */ … … 141 158 extern void as_install_arch(as_t *as); 142 159 #endif /* !def as_install_arch */ 160 161 /* Backend declarations. */ 162 extern mem_backend_t anon_backend; 163 extern mem_backend_t elf_backend; 143 164 144 165 /* Address space area related syscalls. */
Note:
See TracChangeset
for help on using the changeset viewer.