unsigned int PTEr; /* Real half of HW PTE at base address */
unsigned int space; /* Cached VSID */
unsigned int blkFlags; /* Flags for this block */
-#define blkPerm 0x80000000
-#define blkPermbit 0
- unsigned int gas3; /* Reserved */
+#define blkPerm 0x80000000
+#define blkRem 0x40000000
+#define blkPermbit 0
+#define blkRembit 1
+ unsigned int current; /* Partial block remove current start */
unsigned int gas4; /* Reserved */
} blokmap;
#define ODDBLKMIN (8 * PAGE_SIZE)
+#define BLKREMMAX 128
#define MAPPING_NULL ((struct mapping *) 0)
+#define mapDirect 0x08
+#define mapRWNA 0x00000000
+#define mapRWRO 0x00000001
+#define mapRWRW 0x00000002
+#define mapRORO 0x00000003
+
+
+typedef struct mfmapping {
+ struct pmap *pmap;
+ vm_offset_t offset;
+} mfmapping;
+
+typedef struct mappingflush {
+ PCA *pcaptr;
+ unsigned int mappingcnt;
+ struct mfmapping mapping[8];
+} mappingflush;
+
typedef struct mappingctl {
unsigned int mapclock; /* Mapping allocation lock */
unsigned int mapcrecurse; /* Mapping allocation recursion control */
unsigned int mapcallocc; /* Total calls to mapping alloc */
unsigned int mapcmin; /* Minimum free mappings to keep */
unsigned int mapcmaxalloc; /* Maximum number of mappings allocated at one time */
- unsigned int mapcgas[3]; /* Pad to 64 bytes */
+ struct mappingflush mapcflush;
+ unsigned int mapcgas[1]; /* Pad to 64 bytes */
} mappingctl;
#define MAPPERBLOK 127
extern void mapping_prealloc(unsigned int); /* Preallocate mappings for large use */
extern void mapping_relpre(void); /* Releases preallocate request */
extern void mapping_init(void); /* Do initial stuff */
+extern void mapping_flush(void);
extern mapping *mapping_alloc(void); /* Obtain a mapping */
extern void mapping_free(struct mapping *mp); /* Release a mapping */
extern boolean_t mapping_tst_ref(struct phys_entry *pp); /* Tests the reference bit of a physical page */
extern void mapping_protect(pmap_t pmap, vm_offset_t vaddr, vm_prot_t prot); /* Change protection of a single mapping to page */
extern mapping *mapping_make(pmap_t pmap, struct phys_entry *pp, vm_offset_t va, vm_offset_t pa, vm_prot_t prot, int attr, boolean_t locked); /* Make an address mapping */
extern void mapping_purge(struct phys_entry *pp); /* Remove all mappings for this physent */
+extern void mapping_purge_pmap(struct phys_entry *pp, pmap_t pmap); /* Remove physent mappings for this pmap */
extern vm_offset_t mapping_p2v(pmap_t pmap, struct phys_entry *pp); /* Finds first virtual mapping of a physical page in a space */
extern void mapping_phys_attr(struct phys_entry *pp, vm_prot_t prot, unsigned int wimg); /* Sets the default physical page attributes */
extern void mapping_block_map_opt(pmap_t pmap, vm_offset_t va, vm_offset_t pa, vm_offset_t bnd, vm_size_t size, vm_prot_t prot, int attr); /* Map a block optimally */
extern mapping *hw_cvp(struct mapping *mapping); /* Converts a virtual mapping control block address to physical */
extern void hw_rem_map(struct mapping *mapping); /* Remove a mapping from the system */
extern void hw_add_map(struct mapping *mp, space_t space, vm_offset_t va); /* Add a mapping to the PTEG hash list */
+extern void hw_select_mappings(struct mappingflush *mappingflush); /* Select user mappings in a PTEG */
extern blokmap *hw_rem_blk(pmap_t pmap, vm_offset_t sva, vm_offset_t eva); /* Remove a block that falls within a range */
extern vm_offset_t hw_cvp_blk(pmap_t pmap, vm_offset_t va); /* Convert mapped block virtual to physical */
extern blokmap *hw_add_blk(pmap_t pmap, struct blokmap *bmr); /* Add a block to the pmap */