Changeset 20d50a1 in mainline for generic/include/mm/as.h
- Timestamp:
- 2006-01-13T13:02:45Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f9425006
- Parents:
- 0369911
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
generic/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __ VM_H__30 #define __ VM_H__29 #ifndef __AS_H__ 30 #define __AS_H__ 31 31 32 32 #include <arch/mm/page.h> 33 #include <arch/mm/ vm.h>33 #include <arch/mm/as.h> 34 34 #include <arch/mm/asid.h> 35 35 #include <arch/types.h> … … 49 49 #define UDATA_ADDRESS UDATA_ADDRESS_ARCH 50 50 51 enum vm_type {52 VMA_TEXT = 1, VMA_DATA, VMA_STACK51 enum as_area_type { 52 AS_AREA_TEXT = 1, AS_AREA_DATA, AS_AREA_STACK 53 53 }; 54 54 55 /* 56 * Each vm_area_t structure describes one continuous area of virtual memory. 57 * In the future, it should not be difficult to support shared areas of vm. 55 /** Address space area structure. 56 * 57 * Each as_area_t structure describes one contiguous area of virtual memory. 58 * In the future, it should not be difficult to support shared areas. 58 59 */ 59 struct vm_area {60 struct as_area { 60 61 SPINLOCK_DECLARE(lock); 61 62 link_t link; 62 vm_type_t type;63 int size;64 __address address;65 __address *mapping;63 as_area_type_t type; 64 size_t size; /**< Size of this area. */ 65 __address base; /**< Base address of this area. */ 66 index_t *mapping; /**< Map of physical frame numbers mapped to virtual page numbers in this area. */ 66 67 }; 67 68 68 /* 69 * vm_t contains the list of vm_areas of userspace accessible 69 /** Address space structure. 70 * 71 * as_t contains the list of as_areas of userspace accessible 70 72 * pages for one or more tasks. Ranges of kernel memory pages are not 71 73 * supposed to figure in the list as they are shared by all tasks and 72 74 * set up during system initialization. 73 75 */ 74 struct vm{76 struct as { 75 77 SPINLOCK_DECLARE(lock); 76 link_t vm_area_head;78 link_t as_area_head; 77 79 pte_t *ptl0; 78 asid_t asid; 80 asid_t asid; /**< Address space identifier. */ 79 81 }; 80 82 81 extern vm_t * vm_create(pte_t *ptl0); 82 extern void vm_destroy(vm_t *m); 83 extern as_t * as_create(pte_t *ptl0); 84 extern as_area_t *as_area_create(as_t *as, as_area_type_t type, size_t size, __address base); 85 extern void as_area_load_mapping(as_area_t *a, index_t *pfn); 86 extern int as_page_fault(__address page); 87 extern void as_install(as_t *m); 83 88 84 extern vm_area_t *vm_area_create(vm_t *m, vm_type_t type, size_t size, __address addr); 85 extern void vm_area_destroy(vm_area_t *a); 86 87 extern void vm_area_map(vm_area_t *a, vm_t *m); 88 extern void vm_area_unmap(vm_area_t *a, vm_t *m); 89 90 extern void vm_install(vm_t *m); 91 extern void vm_uninstall(vm_t *m); 89 /* 90 * Each architecture should implement this function. 91 * Its main purpose is to do TLB purges according 92 * to architecture's requirements. Note that 93 * some architectures invalidate their TLB automatically 94 * on hardware address space switch (e.g. ia32 and 95 * amd64). 96 */ 97 #ifndef as_install_arch 98 extern void as_install_arch(as_t *as); 99 #endif /* !def as_install_arch */ 92 100 93 101 #endif
Note:
See TracChangeset
for help on using the changeset viewer.