00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00038 #include <genarch/mm/as_ht.h>
00039 #include <genarch/mm/page_ht.h>
00040 #include <mm/as.h>
00041 #include <mm/frame.h>
00042 #include <arch/types.h>
00043 #include <typedefs.h>
00044 #include <memstr.h>
00045 #include <adt/hash_table.h>
00046 #include <synch/mutex.h>
00047
00048 static pte_t *ht_create(int flags);
00049 static void ht_destroy(pte_t *page_table);
00050
00051 static void ht_lock(as_t *as, bool lock);
00052 static void ht_unlock(as_t *as, bool unlock);
00053
00054 as_operations_t as_ht_operations = {
00055 .page_table_create = ht_create,
00056 .page_table_destroy = ht_destroy,
00057 .page_table_lock = ht_lock,
00058 .page_table_unlock = ht_unlock,
00059 };
00060
00061
00071 pte_t *ht_create(int flags)
00072 {
00073 if (flags & FLAG_AS_KERNEL) {
00074 hash_table_create(&page_ht, PAGE_HT_ENTRIES, 2, &ht_operations);
00075 mutex_initialize(&page_ht_lock);
00076 }
00077 return NULL;
00078 }
00079
00086 void ht_destroy(pte_t *page_table)
00087 {
00088
00089 }
00090
00099 void ht_lock(as_t *as, bool lock)
00100 {
00101 if (lock)
00102 mutex_lock(&as->lock);
00103 mutex_lock(&page_ht_lock);
00104 }
00105
00114 void ht_unlock(as_t *as, bool unlock)
00115 {
00116 mutex_unlock(&page_ht_lock);
00117 if (unlock)
00118 mutex_unlock(&as->lock);
00119 }
00120