Changeset 80bcaed in mainline for kernel/generic/include/mm/as.h
- Timestamp:
- 2007-02-03T13:22:24Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f619ec11
- Parents:
- fa8e7d2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/as.h
rfa8e7d2 r80bcaed 54 54 #include <lib/elf.h> 55 55 56 /** Defined to be true if user address space and kernel address space shadow each other. */ 56 /** 57 * Defined to be true if user address space and kernel address space shadow each 58 * other. 59 */ 57 60 #define KERNEL_ADDRESS_SPACE_SHADOWED KERNEL_ADDRESS_SPACE_SHADOWED_ARCH 58 61 … … 62 65 #define USER_ADDRESS_SPACE_END USER_ADDRESS_SPACE_END_ARCH 63 66 64 #define USTACK_ADDRESS USTACK_ADDRESS_ARCH 65 66 #define FLAG_AS_KERNEL (1 << 0) /**< Kernel address space. */ 67 68 /** Address space area attributes. */ 67 #define USTACK_ADDRESS USTACK_ADDRESS_ARCH 68 69 /** Kernel address space. */ 70 #define FLAG_AS_KERNEL (1 << 0) 71 72 /* Address space area attributes. */ 69 73 #define AS_AREA_ATTR_NONE 0 70 74 #define AS_AREA_ATTR_PARTIAL 1 /**< Not fully initialized area. */ 71 75 72 #define AS_PF_FAULT 0 /**< The page fault was not resolved by as_page_fault(). */ 73 #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */ 74 #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */ 76 /** The page fault was not resolved by as_page_fault(). */ 77 #define AS_PF_FAULT 0 78 /** The page fault was resolved by as_page_fault(). */ 79 #define AS_PF_OK 1 80 /** The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */ 81 #define AS_PF_DEFER 2 82 83 /** Address space structure. 84 * 85 * as_t contains the list of as_areas of userspace accessible 86 * pages for one or more tasks. Ranges of kernel memory pages are not 87 * supposed to figure in the list as they are shared by all tasks and 88 * set up during system initialization. 89 */ 90 typedef struct as { 91 /** Protected by asidlock. */ 92 link_t inactive_as_with_asid_link; 93 94 mutex_t lock; 95 96 /** Number of references (i.e tasks that reference this as). */ 97 count_t refcount; 98 99 /** Number of processors on wich is this address space active. */ 100 count_t cpu_refcount; 101 102 /** B+tree of address space areas. */ 103 btree_t as_area_btree; 104 105 /** 106 * Address space identifier. 107 * Constant on architectures that do not support ASIDs. 108 */ 109 asid_t asid; 110 111 /** Non-generic content. */ 112 as_genarch_t genarch; 113 114 /** Architecture specific content. */ 115 as_arch_t arch; 116 } as_t; 75 117 76 118 typedef struct { … … 81 123 } as_operations_t; 82 124 83 /** This structure contains information associated with the shared address space area. */ 125 /** 126 * This structure contains information associated with the shared address space 127 * area. 128 */ 84 129 typedef struct { 85 mutex_t lock; /**< This lock must be acquired only when the as_area lock is held. */ 86 count_t refcount; /**< This structure can be deallocated if refcount drops to 0. */ 87 btree_t pagemap; /**< B+tree containing complete map of anonymous pages of the shared area. */ 130 /** This lock must be acquired only when the as_area lock is held. */ 131 mutex_t lock; 132 /** This structure can be deallocated if refcount drops to 0. */ 133 count_t refcount; 134 /** 135 * B+tree containing complete map of anonymous pages of the shared area. 136 */ 137 btree_t pagemap; 88 138 } share_info_t; 89 139 … … 116 166 typedef struct { 117 167 mutex_t lock; 118 as_t *as; /**< Containing address space. */ 119 int flags; /**< Flags related to the memory represented by the address space area. */ 120 int attributes; /**< Attributes related to the address space area itself. */ 121 count_t pages; /**< Size of this area in multiples of PAGE_SIZE. */ 122 uintptr_t base; /**< Base address of this area. */ 123 btree_t used_space; /**< Map of used space. */ 124 share_info_t *sh_info; /**< If the address space area has been shared, this pointer will 125 reference the share info structure. */ 126 struct mem_backend *backend; /**< Memory backend backing this address space area. */ 168 /** Containing address space. */ 169 as_t *as; 170 /** Flags related to the memory represented by the address space area. */ 171 int flags; 172 /** Attributes related to the address space area itself. */ 173 int attributes; 174 /** Size of this area in multiples of PAGE_SIZE. */ 175 count_t pages; 176 /** Base address of this area. */ 177 uintptr_t base; 178 /** Map of used space. */ 179 btree_t used_space; 180 181 /** 182 * If the address space area has been shared, this pointer will reference 183 * the share info structure. 184 */ 185 share_info_t *sh_info; 186 187 /** Memory backend backing this address space area. */ 188 struct mem_backend *backend; 127 189 128 190 /** Data to be used by the backend. */ … … 147 209 extern as_t *as_create(int flags); 148 210 extern void as_destroy(as_t *as); 149 extern void as_switch(as_t *old , as_t *replace);211 extern void as_switch(as_t *old_as, as_t *new_as); 150 212 extern int as_page_fault(uintptr_t page, pf_access_t access, istate_t *istate); 151 213 152 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, uintptr_t base, int attrs, 153 mem_backend_t *backend, mem_backend_data_t *backend_data); 214 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, 215 uintptr_t base, int attrs, mem_backend_t *backend, 216 mem_backend_data_t *backend_data); 154 217 extern int as_area_destroy(as_t *as, uintptr_t address); 155 218 extern int as_area_resize(as_t *as, uintptr_t address, size_t size, int flags); 156 219 int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size, 157 220 as_t *dst_as, uintptr_t dst_base, int dst_flags_mask); 158 221 159 222 extern int as_area_get_flags(as_area_t *area);
Note:
See TracChangeset
for help on using the changeset viewer.