#ifndef _PPC_PMAP_H_
#define _PPC_PMAP_H_
#include <mach/vm_types.h>
#include <mach/machine/vm_types.h>
#include <mach/vm_prot.h>
#include <mach/vm_statistics.h>
#include <kern/queue.h>
#include <vm/pmap.h>
struct pmap {
queue_head_t pmap_link;
unsigned int pmapvr;
space_t space;
#define BMAPLOCK 0x00000001
struct blokmap *bmaps;
int ref_count;
unsigned int vflags;
#define pmapBatVal 0xFF000000
#define pmapBatDVal 0xF0000000
#define pmapBatIVal 0x0F000000
#define pmapFlags 0x00FF0000
#define pmapSubord 0x00800000
#define pmapVMhost 0x00400000
#define pmapAltSeg 0x0000FFFF
unsigned int spaceNum;
unsigned int pmapSegs[16];
struct pmap *pmapPmaps[16];
unsigned short pmapUsage[128];
#define pmapUsageShft 25
#define pmapUsageMask 0x0000007F
#define pmapUsageSize (32*1024*1024)
struct pmap_statistics stats;
decl_simple_lock_data(,lock)
#define pmapSize 512
};
#define PMAP_NULL ((pmap_t) 0)
extern pmap_t kernel_pmap;
extern pmap_t cursor_pmap;
#define PMAP_SWITCH_USER(th, map, my_cpu) th->map = map;
#define PMAP_ACTIVATE(pmap, th, cpu)
#define PMAP_DEACTIVATE(pmap, th, cpu)
#define PMAP_CONTEXT(pmap,th)
#define pmap_kernel_va(VA) \
(((VA) >= VM_MIN_KERNEL_ADDRESS) && ((VA) <= VM_MAX_KERNEL_ADDRESS))
#define PPC_SID_KERNEL 0
#define SID_MAX ((1<<20) - 1)
#define pmap_kernel() (kernel_pmap)
#define pmap_resident_count(pmap) ((pmap)->stats.resident_count)
#define pmap_remove_attributes(pmap,start,end)
#define pmap_copy(dpmap,spmap,da,len,sa)
#define pmap_update()
#define pmap_phys_address(x) ((x) << PPC_PGSHIFT)
#define pmap_phys_to_frame(x) ((x) >> PPC_PGSHIFT)
#define PMAP_DEFAULT_CACHE 0
#define PMAP_INHIBIT_CACHE 1
#define PMAP_GUARDED_CACHE 2
#define PMAP_ACTIVATE_CACHE 4
#define PMAP_NO_GUARD_CACHE 8
#define VM_WIMG_DEFAULT VM_MEM_COHERENT
#define VM_WIMG_IO VM_MEM_COHERENT | \
VM_MEM_NOT_CACHEABLE | VM_MEM_GUARDED
extern void ppc_protection_init(void);
extern vm_offset_t phystokv(vm_offset_t pa);
extern vm_offset_t kvtophys(vm_offset_t va);
extern vm_offset_t pmap_map(vm_offset_t va,
vm_offset_t spa,
vm_offset_t epa,
vm_prot_t prot);
extern kern_return_t pmap_add_physical_memory(vm_offset_t spa,
vm_offset_t epa,
boolean_t available,
unsigned int attr);
extern vm_offset_t pmap_map_bd(vm_offset_t va,
vm_offset_t spa,
vm_offset_t epa,
vm_prot_t prot);
extern void pmap_bootstrap(unsigned int mem_size,
vm_offset_t *first_avail,
vm_offset_t *first_phys_avail, unsigned int kmapsize);
extern void pmap_block_map(vm_offset_t pa,
vm_size_t size,
vm_prot_t prot,
int entry,
int dtlb);
extern void pmap_switch(pmap_t);
extern vm_offset_t pmap_extract(pmap_t pmap,
vm_offset_t va);
extern void pmap_remove_all(vm_offset_t pa);
extern boolean_t pmap_verify_free(vm_offset_t pa);
extern void sync_cache(vm_offset_t pa, unsigned length);
extern void flush_dcache(vm_offset_t va, unsigned length, boolean_t phys);
extern void invalidate_dcache(vm_offset_t va, unsigned length, boolean_t phys);
extern void invalidate_icache(vm_offset_t va, unsigned length, boolean_t phys);
extern void pmap_sync_caches_phys(vm_offset_t pa);
extern void invalidate_cache_for_io(vm_offset_t va, unsigned length, boolean_t phys);
extern void pmap_map_block(pmap_t pmap, vm_offset_t va, vm_offset_t pa, vm_size_t size,
vm_prot_t prot, int attr, unsigned int flags);
extern kern_return_t pmap_map_block_opt(vm_map_t map, vm_offset_t *va,
vm_offset_t pa, vm_size_t size, vm_prot_t prot, int attr);
extern kern_return_t vm_map_block(vm_map_t map, vm_offset_t *va, vm_offset_t *bnd, vm_offset_t pa,
vm_size_t size, vm_prot_t prot);
extern kern_return_t pmap_nest(pmap_t grand, pmap_t subord, vm_offset_t vaddr, vm_size_t size);
extern void pmap_ver(pmap_t pmap, vm_offset_t sva, vm_offset_t eva);
#endif