#ifndef _KERNEL_ARCH_M68K_PAGING_040_PAGING_H
#define _KERNEL_ARCH_M68K_PAGING_040_PAGING_H
#include <SupportDefs.h>
#include <interrupts.h>
#include <kernel.h>
#include <arch_040_mmu.h>
#define PAGE_INVALIDATE_CACHE_SIZE 64
#define FIRST_USER_PGROOT_ENT (VADDR_TO_PRENT(USER_BASE))
#define FIRST_USER_PGDIR_ENT (VADDR_TO_PDENT(USER_BASE))
#define NUM_USER_PGROOT_ENTS (VADDR_TO_PRENT(ROUNDUP(USER_SIZE, B_PAGE_SIZE * 64 * 128)))
#define NUM_USER_PGDIR_ENTS (VADDR_TO_PDENT(ROUNDUP(USER_SIZE, B_PAGE_SIZE * 64)))
#define FIRST_KERNEL_PGROOT_ENT (VADDR_TO_PRENT(KERNEL_BASE))
#define FIRST_KERNEL_PGDIR_ENT (VADDR_TO_PDENT(KERNEL_BASE))
#define NUM_KERNEL_PGROOT_ENTS (VADDR_TO_PRENT(KERNEL_SIZE))
#define NUM_KERNEL_PGDIR_ENTS (VADDR_TO_PDENT(KERNEL_SIZE))
static const size_t kPageTableAlignment = B_PAGE_SIZE
* NUM_PAGETBL_PER_PAGE * NUM_PAGEENT_PER_TBL;
static const size_t kPageDirAlignment = B_PAGE_SIZE
* NUM_PAGEENT_PER_TBL
* NUM_DIRTBL_PER_PAGE * NUM_DIRENT_PER_TBL;
#if 0
#define VADDR_TO_PDENT(va) (((va) / B_PAGE_SIZE) / 1024)
#define VADDR_TO_PTENT(va) (((va) / B_PAGE_SIZE) % 1024)
#define M68K_PDE_PRESENT 0x00000001
#define M68K_PDE_WRITABLE 0x00000002
#define M68K_PDE_USER 0x00000004
#define M68K_PDE_WRITE_THROUGH 0x00000008
#define M68K_PDE_CACHING_DISABLED 0x00000010
#define M68K_PDE_ACCESSED 0x00000020
#define M68K_PDE_IGNORED1 0x00000040
#define M68K_PDE_RESERVED1 0x00000080
#define M68K_PDE_IGNORED2 0x00000100
#define M68K_PDE_IGNORED3 0x00000200
#define M68K_PDE_IGNORED4 0x00000400
#define M68K_PDE_IGNORED5 0x00000800
#define M68K_PDE_ADDRESS_MASK 0xfffff000
#define M68K_PTE_PRESENT 0x00000001
#define M68K_PTE_WRITABLE 0x00000002
#define M68K_PTE_USER 0x00000004
#define M68K_PTE_WRITE_THROUGH 0x00000008
#define M68K_PTE_CACHING_DISABLED 0x00000010
#define M68K_PTE_ACCESSED 0x00000020
#define M68K_PTE_DIRTY 0x00000040
#define M68K_PTE_PAT 0x00000080
#define M68K_PTE_GLOBAL 0x00000100
#define M68K_PTE_IGNORED1 0x00000200
#define M68K_PTE_IGNORED2 0x00000400
#define M68K_PTE_IGNORED3 0x00000800
#define M68K_PTE_ADDRESS_MASK 0xfffff000
#define M68K_PTE_PROTECTION_MASK (M68K_PTE_WRITABLE | M68K_PTE_USER)
#define M68K_PTE_MEMORY_TYPE_MASK (M68K_PTE_WRITE_THROUGH \
| M68K_PTE_CACHING_DISABLED)
#define FIRST_USER_PGDIR_ENT (VADDR_TO_PDENT(USER_BASE))
#define NUM_USER_PGDIR_ENTS (VADDR_TO_PDENT(ROUNDUP(USER_SIZE, \
B_PAGE_SIZE * 1024)))
#define FIRST_KERNEL_PGDIR_ENT (VADDR_TO_PDENT(KERNEL_BASE))
#define NUM_KERNEL_PGDIR_ENTS (VADDR_TO_PDENT(KERNEL_SIZE))
static const size_t kPageTableAlignment = 1024 * B_PAGE_SIZE;
typedef uint32 page_table_entry;
typedef uint32 page_directory_entry;
#endif
#endif