Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 791 → Rev 792

/kernel/trunk/genarch/include/mm/page_ht.h
28,8 → 28,6
 
/*
* This is the generic page hash table interface.
* Architectures that use single page hash table for
* storing page translations must implement it.
*/
 
#ifndef __PAGE_HT_H__
37,75 → 35,32
 
#include <mm/page.h>
#include <typedefs.h>
#include <arch/types.h>
#include <adt/list.h>
#include <adt/hash_table.h>
 
/** Page hash table size. */
#define HT_WIDTH HT_WIDTH_ARCH
#define HT_SIZE (1<<HT_WIDTH)
#define HT_ENTRIES (HT_SIZE/sizeof(pte_t))
#define PAGE_HT_KEYS 2
#define KEY_AS 0
#define KEY_PAGE 1
 
/** Hash function.
*
* @param page Virtual address. Only vpn bits will be used.
* @param asid Address space identifier.
*
* @return Pointer to hash table typed pte_t *.
*/
#define HT_HASH(page, asid) HT_HASH_ARCH(page, asid)
#define PAGE_HT_ENTRIES_BITS 13
#define PAGE_HT_ENTRIES (1<<PAGE_HT_ENTRIES_BITS)
 
/** Compare PTE with page and asid.
*
* @param page Virtual address. Only vpn bits will be used.
* @param asid Address space identifier.
* @param t PTE.
*
* @return 1 on match, 0 otherwise.
*/
#define HT_COMPARE(page, asid, t) HT_COMPARE_ARCH(page, asid, t)
struct pte {
link_t link; /**< Page hash table link. */
as_t *as; /**< Address space. */
__address page; /**< Virtual memory page. */
__address frame; /**< Physical memory frame. */
int flags;
unsigned a : 1; /**< Accessed. */
unsigned d : 1; /**< Dirty. */
unsigned p : 1; /**< Present. */
};
 
/** Identify empty page hash table slots.
*
* @param t Pointer ro hash table typed pte_t *.
*
* @return 1 if the slot is empty, 0 otherwise.
*/
#define HT_SLOT_EMPTY(t) HT_SLOT_EMPTY_ARCH(t)
 
/** Invalidate/empty page hash table slot.
*
* @param t Address of the slot to be invalidated.
*/
#define HT_INVALIDATE_SLOT(t) HT_INVALIDATE_SLOT_ARCH(t)
 
/** Return next record in collision chain.
*
* @param t PTE.
*
* @return Successor of PTE or NULL.
*/
#define HT_GET_NEXT(t) HT_GET_NEXT_ARCH(t)
 
/** Set successor in collision chain.
*
* @param t PTE.
* @param s Successor or NULL.
*/
#define HT_SET_NEXT(t, s) HT_SET_NEXT_ARCH(t, s)
 
/** Set page hash table record.
*
* @param t PTE.
* @param page Virtual address. Only vpn bits will be used.
* @param asid Address space identifier.
* @param frame Physical address. Only pfn bits will be used.
* @param flags Flags. See mm/page.h.
*/
#define HT_SET_RECORD(t, page, asid, frame, flags) HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
 
extern page_operations_t page_ht_operations;
extern spinlock_t page_ht_lock;
 
extern pte_t *page_ht;
extern hash_table_t page_ht;
extern hash_table_operations_t ht_operations;
 
extern void ht_invalidate_all(void);
 
#endif