Changeset b3f8fb7 in mainline for kernel/generic/include/mm/as.h
- Timestamp:
- 2007-01-28T13:25:49Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8e8c1a5
- Parents:
- 1ba41c5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/as.h
r1ba41c5 rb3f8fb7 48 48 #include <arch/mm/asid.h> 49 49 #include <arch/types.h> 50 #include <typedefs.h>51 50 #include <synch/spinlock.h> 52 51 #include <synch/mutex.h> … … 67 66 #define FLAG_AS_KERNEL (1 << 0) /**< Kernel address space. */ 68 67 69 /** Address space structure. 70 * 71 * as_t contains the list of as_areas of userspace accessible 72 * pages for one or more tasks. Ranges of kernel memory pages are not 73 * supposed to figure in the list as they are shared by all tasks and 74 * set up during system initialization. 75 */ 76 struct as { 77 /** Protected by asidlock. */ 78 link_t inactive_as_with_asid_link; 79 80 mutex_t lock; 81 82 /** Number of references (i.e tasks that reference this as). */ 83 count_t refcount; 84 85 /** Number of processors on wich is this address space active. */ 86 count_t cpu_refcount; 87 88 /** B+tree of address space areas. */ 89 btree_t as_area_btree; 90 91 /** Page table pointer. Constant on architectures that use global page hash table. */ 92 pte_t *page_table; 93 94 /** Address space identifier. Constant on architectures that do not support ASIDs.*/ 95 asid_t asid; 96 97 /** Architecture specific content. */ 98 as_arch_t arch; 99 }; 100 101 struct as_operations { 68 /** Address space area attributes. */ 69 #define AS_AREA_ATTR_NONE 0 70 #define AS_AREA_ATTR_PARTIAL 1 /**< Not fully initialized area. */ 71 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(). */ 75 76 typedef struct { 102 77 pte_t *(* page_table_create)(int flags); 103 78 void (* page_table_destroy)(pte_t *page_table); 104 79 void (* page_table_lock)(as_t *as, bool lock); 105 80 void (* page_table_unlock)(as_t *as, bool unlock); 106 }; 107 typedef struct as_operations as_operations_t; 108 109 /** Address space area attributes. */ 110 #define AS_AREA_ATTR_NONE 0 111 #define AS_AREA_ATTR_PARTIAL 1 /**< Not fully initialized area. */ 112 113 #define AS_PF_FAULT 0 /**< The page fault was not resolved by as_page_fault(). */ 114 #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */ 115 #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace() 116 or memcpy_to_uspace(). */ 81 } as_operations_t; 117 82 118 83 /** This structure contains information associated with the shared address space area. */ … … 123 88 } share_info_t; 124 89 125 /** Address space area backend structure. */ 126 typedef struct { 127 int (* page_fault)(as_area_t *area, uintptr_t addr, pf_access_t access); 128 void (* frame_free)(as_area_t *area, uintptr_t page, uintptr_t frame); 129 void (* share)(as_area_t *area); 130 } mem_backend_t; 90 /** Page fault access type. */ 91 typedef enum { 92 PF_ACCESS_READ, 93 PF_ACCESS_WRITE, 94 PF_ACCESS_EXEC 95 } pf_access_t; 96 97 struct mem_backend; 131 98 132 99 /** Backend data stored in address space area. */ 133 typedef union {100 typedef union mem_backend_data { 134 101 struct { /**< elf_backend members */ 135 102 elf_header_t *elf; … … 147 114 * In the future, it should not be difficult to support shared areas. 148 115 */ 149 struct as_area{116 typedef struct { 150 117 mutex_t lock; 151 118 as_t *as; /**< Containing address space. */ … … 157 124 share_info_t *sh_info; /**< If the address space area has been shared, this pointer will 158 125 reference the share info structure. */ 159 mem_backend_t*backend; /**< Memory backend backing this address space area. */126 struct mem_backend *backend; /**< Memory backend backing this address space area. */ 160 127 161 128 /** Data to be used by the backend. */ 162 129 mem_backend_data_t backend_data; 163 }; 130 } as_area_t; 131 132 /** Address space area backend structure. */ 133 typedef struct mem_backend { 134 int (* page_fault)(as_area_t *area, uintptr_t addr, pf_access_t access); 135 void (* frame_free)(as_area_t *area, uintptr_t page, uintptr_t frame); 136 void (* share)(as_area_t *area); 137 } mem_backend_t; 164 138 165 139 extern as_t *AS_KERNEL; … … 207 181 #endif /* !def as_deinstall_arch */ 208 182 209 /* Backend declarations . */183 /* Backend declarations and functions. */ 210 184 extern mem_backend_t anon_backend; 211 185 extern mem_backend_t elf_backend; 212 186 extern mem_backend_t phys_backend; 187 188 extern int elf_load(elf_header_t *header, as_t *as); 213 189 214 190 /* Address space area related syscalls. */
Note:
See TracChangeset
for help on using the changeset viewer.