- queue_head_t pmap_link; /* MUST BE FIRST */
- addr64_t pmapvr; /* Virtual to real conversion mask */
- shexlock pmapSXlk; /* Shared/Exclusive lock for mapping changes */
- unsigned int space; /* space for this pmap */
-#define invalSpace 0x00000001 /* Predefined always invalid space */
- int ref_count; /* reference count */
- unsigned int pmapFlags; /* Flags */
-#define pmapKeys 0x00000007 /* Keys and no execute bit to use with this pmap */
-#define pmapKeyDef 0x00000006 /* Default keys - Sup = 1, user = 1, no ex = 0 */
-#define pmapVMhost 0x00000010 /* pmap with Virtual Machines attached to it */
- unsigned int spaceNum; /* Space number */
- unsigned int pmapCCtl; /* Cache control */
-#define pmapCCtlVal 0xFFFF0000 /* Valid entries */
-#define pmapCCtlLck 0x00008000 /* Lock bit */
-#define pmapCCtlLckb 16 /* Lock bit */
-#define pmapCCtlGen 0x00007FFF /* Generation number */
-
-#define pmapSegCacheCnt 16 /* Maximum number of cache entries */
-#define pmapSegCacheUse 16 /* Number of cache entries to use */
-
- struct pmap *freepmap; /* Free pmaps */
-
- unsigned int pmapRsv1[3];
-/* 0x038 */
- uint64_t pmapSCSubTag; /* Segment cache sub-tags. This is a 16 entry 4 bit array */
-/* 0x040 */
- sgc pmapSegCache[pmapSegCacheCnt]; /* SLD values cached for quick load */
-
-/* 0x140 */
-/* if fanout is 4, then shift is 1, if fanout is 8 shift is 2, etc */
-#define kSkipListFanoutShift 1
-/* with n lists, we can handle (fanout**n) pages optimally */
-#define kSkipListMaxLists 12
- unsigned char pmapCurLists; /* 0x140 - max #lists any mapping in this pmap currently has */
- unsigned char pmapRsv2[3];
- uint32_t pmapRandNum; /* 0x144 - used by mapSetLists() as a random number generator */
- addr64_t pmapSkipLists[kSkipListMaxLists]; /* 0x148 - the list headers */
-/* following statistics conditionally gathered */
- uint64_t pmapSearchVisits; /* 0x1A8 - nodes visited searching pmaps */
- uint32_t pmapSearchCnt; /* 0x1B0 - number of calls to mapSearch or mapSearchFull */
-
- unsigned int pmapRsv3[3];
-
-/* 0x1C0 */
-
- struct pmap_statistics stats; /* statistics */
- decl_simple_lock_data(,lock) /* lock on map */
+ queue_head_t pmap_link; /* MUST BE FIRST */
+ unsigned int pmapvr; /* Virtual to real conversion mask */
+ space_t space; /* space for this pmap */
+#define BMAPLOCK 0x00000001
+ struct blokmap *bmaps; /* Physical pointer to odd-size page maps */
+ int ref_count; /* reference count */
+ unsigned int vflags; /* Alternate map validity flags */
+#define pmapBatVal 0xFF000000
+#define pmapBatDVal 0xF0000000
+#define pmapBatIVal 0x0F000000
+#define pmapFlags 0x00FF0000
+#define pmapSubord 0x00800000
+#define pmapVMhost 0x00400000
+#define pmapAltSeg 0x0000FFFF
+ unsigned int spaceNum; /* Space number */
+/* PPC line boundary here - 020 */
+ unsigned int pmapSegs[16]; /* Contents of segment register if different than base space */
+/* PPC line boundary here - 060 */
+ struct pmap *pmapPmaps[16]; /* Pointer to next lower level of pmaps */
+/* PPC line boundary here - 0A0 */
+/* Note: this must start on a word boundary */
+ unsigned short pmapUsage[128]; /* Count of pages mapped into 32mb (8192 page) slots */
+#define pmapUsageShft 25
+#define pmapUsageMask 0x0000007F
+#define pmapUsageSize (32*1024*1024)
+
+/* PPC line boundary here - 1A0 */
+ struct pmap_statistics stats; /* statistics */
+ decl_simple_lock_data(,lock) /* lock on map */