Rev 2106 | Rev 2126 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2106 | Rev 2125 | ||
---|---|---|---|
Line 79... | Line 79... | ||
79 | 79 | ||
80 | #ifdef CONFIG_VIRT_IDX_DCACHE |
80 | #ifdef CONFIG_VIRT_IDX_DCACHE |
81 | #include <arch/mm/cache.h> |
81 | #include <arch/mm/cache.h> |
82 | #endif /* CONFIG_VIRT_IDX_DCACHE */ |
82 | #endif /* CONFIG_VIRT_IDX_DCACHE */ |
83 | 83 | ||
- | 84 | #ifndef __OBJC__ |
|
84 | /** |
85 | /** |
85 | * Each architecture decides what functions will be used to carry out |
86 | * Each architecture decides what functions will be used to carry out |
86 | * address space operations such as creating or locking page tables. |
87 | * address space operations such as creating or locking page tables. |
87 | */ |
88 | */ |
88 | as_operations_t *as_operations = NULL; |
89 | as_operations_t *as_operations = NULL; |
- | 90 | #endif |
|
89 | 91 | ||
90 | /** |
92 | /** |
91 | * Slab for as_t objects. |
93 | * Slab for as_t objects. |
92 | */ |
94 | */ |
93 | static slab_cache_t *as_slab; |
95 | static slab_cache_t *as_slab; |
Line 990... | Line 992... | ||
990 | * |
992 | * |
991 | * @return First entry of the page table. |
993 | * @return First entry of the page table. |
992 | */ |
994 | */ |
993 | pte_t *page_table_create(int flags) |
995 | pte_t *page_table_create(int flags) |
994 | { |
996 | { |
- | 997 | #ifdef __OBJC__ |
|
- | 998 | return [as_t page_table_create: flags]; |
|
- | 999 | #else |
|
995 | ASSERT(as_operations); |
1000 | ASSERT(as_operations); |
996 | ASSERT(as_operations->page_table_create); |
1001 | ASSERT(as_operations->page_table_create); |
997 | 1002 | ||
998 | return as_operations->page_table_create(flags); |
1003 | return as_operations->page_table_create(flags); |
- | 1004 | #endif |
|
999 | } |
1005 | } |
1000 | 1006 | ||
1001 | /** Destroy page table. |
1007 | /** Destroy page table. |
1002 | * |
1008 | * |
1003 | * Destroy page table in architecture specific way. |
1009 | * Destroy page table in architecture specific way. |
1004 | * |
1010 | * |
1005 | * @param page_table Physical address of PTL0. |
1011 | * @param page_table Physical address of PTL0. |
1006 | */ |
1012 | */ |
1007 | void page_table_destroy(pte_t *page_table) |
1013 | void page_table_destroy(pte_t *page_table) |
1008 | { |
1014 | { |
- | 1015 | #ifdef __OBJC__ |
|
- | 1016 | return [as_t page_table_destroy: page_table]; |
|
- | 1017 | #else |
|
1009 | ASSERT(as_operations); |
1018 | ASSERT(as_operations); |
1010 | ASSERT(as_operations->page_table_destroy); |
1019 | ASSERT(as_operations->page_table_destroy); |
1011 | 1020 | ||
1012 | as_operations->page_table_destroy(page_table); |
1021 | as_operations->page_table_destroy(page_table); |
- | 1022 | #endif |
|
1013 | } |
1023 | } |
1014 | 1024 | ||
1015 | /** Lock page table. |
1025 | /** Lock page table. |
1016 | * |
1026 | * |
1017 | * This function should be called before any page_mapping_insert(), |
1027 | * This function should be called before any page_mapping_insert(), |
Line 1024... | Line 1034... | ||
1024 | * @param as Address space. |
1034 | * @param as Address space. |
1025 | * @param lock If false, do not attempt to lock as->lock. |
1035 | * @param lock If false, do not attempt to lock as->lock. |
1026 | */ |
1036 | */ |
1027 | void page_table_lock(as_t *as, bool lock) |
1037 | void page_table_lock(as_t *as, bool lock) |
1028 | { |
1038 | { |
- | 1039 | #ifdef __OBJC__ |
|
- | 1040 | [as page_table_lock: lock]; |
|
- | 1041 | #else |
|
1029 | ASSERT(as_operations); |
1042 | ASSERT(as_operations); |
1030 | ASSERT(as_operations->page_table_lock); |
1043 | ASSERT(as_operations->page_table_lock); |
1031 | 1044 | ||
1032 | as_operations->page_table_lock(as, lock); |
1045 | as_operations->page_table_lock(as, lock); |
- | 1046 | #endif |
|
1033 | } |
1047 | } |
1034 | 1048 | ||
1035 | /** Unlock page table. |
1049 | /** Unlock page table. |
1036 | * |
1050 | * |
1037 | * @param as Address space. |
1051 | * @param as Address space. |
1038 | * @param unlock If false, do not attempt to unlock as->lock. |
1052 | * @param unlock If false, do not attempt to unlock as->lock. |
1039 | */ |
1053 | */ |
1040 | void page_table_unlock(as_t *as, bool unlock) |
1054 | void page_table_unlock(as_t *as, bool unlock) |
1041 | { |
1055 | { |
- | 1056 | #ifdef __OBJC__ |
|
- | 1057 | [as page_table_unlock: unlock]; |
|
- | 1058 | #else |
|
1042 | ASSERT(as_operations); |
1059 | ASSERT(as_operations); |
1043 | ASSERT(as_operations->page_table_unlock); |
1060 | ASSERT(as_operations->page_table_unlock); |
1044 | 1061 | ||
1045 | as_operations->page_table_unlock(as, unlock); |
1062 | as_operations->page_table_unlock(as, unlock); |
- | 1063 | #endif |
|
1046 | } |
1064 | } |
1047 | 1065 | ||
1048 | 1066 | ||
1049 | /** Find address space area and lock it. |
1067 | /** Find address space area and lock it. |
1050 | * |
1068 | * |