Changeset 0ee077ee in mainline for generic/include/mm/as.h
- Timestamp:
- 2006-05-27T17:50:30Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 127c957b
- Parents:
- fb84455
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/include/mm/as.h
rfb84455 r0ee077ee 31 31 32 32 /** Address space area flags. */ 33 #define AS_AREA_READ 1 34 #define AS_AREA_WRITE 2 35 #define AS_AREA_EXEC 4 36 #define AS_AREA_DEVICE 8 37 #define AS_AREA_ANON 16 33 #define AS_AREA_READ 1 34 #define AS_AREA_WRITE 2 35 #define AS_AREA_EXEC 4 36 #define AS_AREA_CACHEABLE 8 38 37 39 38 #ifdef KERNEL … … 105 104 or memcpy_to_uspace(). */ 106 105 107 typedef struct share_info share_info_t; 108 typedef struct mem_backend mem_backend_t; 106 /** This structure contains information associated with the shared address space area. */ 107 typedef struct { 108 mutex_t lock; /**< This lock must be acquired only when the as_area lock is held. */ 109 count_t refcount; /**< This structure can be deallocated if refcount drops to 0. */ 110 btree_t pagemap; /**< B+tree containing complete map of anonymous pages of the shared area. */ 111 } share_info_t; 112 113 /** Address space area backend structure. */ 114 typedef struct { 115 int (* page_fault)(as_area_t *area, __address addr, pf_access_t access); 116 void (* frame_free)(as_area_t *area, __address page, __address frame); 117 void (* share)(as_area_t *area); 118 } mem_backend_t; 119 120 /** Backend data stored in address space area. */ 121 typedef struct backend_data { 122 __native d1; 123 __native d2; 124 } mem_backend_data_t; 109 125 110 126 /** Address space area structure. … … 115 131 struct as_area { 116 132 mutex_t lock; 133 as_t *as; /**< Containing address space. */ 117 134 int flags; /**< Flags related to the memory represented by the address space area. */ 118 135 int attributes; /**< Attributes related to the address space area itself. */ … … 121 138 btree_t used_space; /**< Map of used space. */ 122 139 share_info_t *sh_info; /**< If the address space area has been shared, this pointer will 123 reference the share info structure. */140 reference the share info structure. */ 124 141 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 142 128 /** Address space area backend structure. */ 129 struct mem_backend { 130 int (* backend_page_fault)(as_area_t *area, __address addr, pf_access_t access); 131 void (* backend_frame_free)(as_area_t *area, __address page, __address frame); 143 /** Data to be used by the backend. */ 144 mem_backend_data_t backend_data; 132 145 }; 133 146 … … 141 154 extern as_t *as_create(int flags); 142 155 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);156 mem_backend_t *backend, mem_backend_data_t *backend_data); 144 157 extern int as_area_resize(as_t *as, __address address, size_t size, int flags); 145 158 extern int as_area_destroy(as_t *as, __address address); 146 159 extern int as_area_get_flags(as_area_t *area); 147 extern void as_set_mapping(as_t *as, __address page, __address frame);148 160 extern bool as_area_check_access(as_area_t *area, pf_access_t access); 149 161 extern int as_page_fault(__address page, pf_access_t access, istate_t *istate); … … 164 176 extern mem_backend_t anon_backend; 165 177 extern mem_backend_t elf_backend; 178 extern mem_backend_t phys_backend; 166 179 167 180 /* Address space area related syscalls. */
Note:
See TracChangeset
for help on using the changeset viewer.