Changeset c7ec94a4 in mainline for genarch/include/mm/page_ht.h
- Timestamp:
- 2006-02-06T14:18:28Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f5935ed
- Parents:
- 214f5bb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
genarch/include/mm/page_ht.h
r214f5bb rc7ec94a4 29 29 /* 30 30 * This is the generic page hash table interface. 31 * Architectures that use single page hash table for32 * storing page translations must implement it.33 31 */ 34 32 … … 38 36 #include <mm/page.h> 39 37 #include <typedefs.h> 38 #include <arch/types.h> 39 #include <adt/list.h> 40 #include <adt/hash_table.h> 40 41 41 /** Page hash table size. */ 42 #define HT_WIDTH HT_WIDTH_ARCH 43 #define HT_SIZE (1<<HT_WIDTH) 44 #define HT_ENTRIES (HT_SIZE/sizeof(pte_t)) 42 #define PAGE_HT_KEYS 2 43 #define KEY_AS 0 44 #define KEY_PAGE 1 45 45 46 /** Hash function. 47 * 48 * @param page Virtual address. Only vpn bits will be used. 49 * @param asid Address space identifier. 50 * 51 * @return Pointer to hash table typed pte_t *. 52 */ 53 #define HT_HASH(page, asid) HT_HASH_ARCH(page, asid) 46 #define PAGE_HT_ENTRIES_BITS 13 47 #define PAGE_HT_ENTRIES (1<<PAGE_HT_ENTRIES_BITS) 54 48 55 /** Compare PTE with page and asid. 56 * 57 * @param page Virtual address. Only vpn bits will be used. 58 * @param asid Address space identifier. 59 * @param t PTE. 60 * 61 * @return 1 on match, 0 otherwise. 62 */ 63 #define HT_COMPARE(page, asid, t) HT_COMPARE_ARCH(page, asid, t) 64 65 /** Identify empty page hash table slots. 66 * 67 * @param t Pointer ro hash table typed pte_t *. 68 * 69 * @return 1 if the slot is empty, 0 otherwise. 70 */ 71 #define HT_SLOT_EMPTY(t) HT_SLOT_EMPTY_ARCH(t) 72 73 /** Invalidate/empty page hash table slot. 74 * 75 * @param t Address of the slot to be invalidated. 76 */ 77 #define HT_INVALIDATE_SLOT(t) HT_INVALIDATE_SLOT_ARCH(t) 78 79 /** Return next record in collision chain. 80 * 81 * @param t PTE. 82 * 83 * @return Successor of PTE or NULL. 84 */ 85 #define HT_GET_NEXT(t) HT_GET_NEXT_ARCH(t) 86 87 /** Set successor in collision chain. 88 * 89 * @param t PTE. 90 * @param s Successor or NULL. 91 */ 92 #define HT_SET_NEXT(t, s) HT_SET_NEXT_ARCH(t, s) 93 94 /** Set page hash table record. 95 * 96 * @param t PTE. 97 * @param page Virtual address. Only vpn bits will be used. 98 * @param asid Address space identifier. 99 * @param frame Physical address. Only pfn bits will be used. 100 * @param flags Flags. See mm/page.h. 101 */ 102 #define HT_SET_RECORD(t, page, asid, frame, flags) HT_SET_RECORD_ARCH(t, page, asid, frame, flags) 49 struct pte { 50 link_t link; /**< Page hash table link. */ 51 as_t *as; /**< Address space. */ 52 __address page; /**< Virtual memory page. */ 53 __address frame; /**< Physical memory frame. */ 54 int flags; 55 unsigned a : 1; /**< Accessed. */ 56 unsigned d : 1; /**< Dirty. */ 57 unsigned p : 1; /**< Present. */ 58 }; 103 59 104 60 extern page_operations_t page_ht_operations; 105 61 extern spinlock_t page_ht_lock; 106 62 107 extern pte_t *page_ht; 108 109 extern void ht_invalidate_all(void); 63 extern hash_table_t page_ht; 64 extern hash_table_operations_t ht_operations; 110 65 111 66 #endif
Note:
See TracChangeset
for help on using the changeset viewer.