#sccs "@(#)uts/kern/sys:vmmac.h 1.1" /* Convergent Technologies - System V - May 1983 */ #ifndef vmmac_h #define vmmac_h #include #include /* * Virtual memory related conversion macros */ /* Virtual page numbers to text|data|stack|kvmem|shlib segment page numbers and back */ #define vtotp(p, v) ((int)((v) - SYSPAGE)) #define vtodp(p, v) ((int)((v) - ((p)->p_tpage) - SYSPAGE)) #define vtosp(p, v) ((int)((MAXUMEM-1) - (v))) #define vtoldp(v) ((int)((v) - SHLIB_VPAGE0)) #define vtoltp(v) ((int)((v) - sl_tbase)) #define vtovp(v) ((int)((v) - KVMEM_VPAGE0)) #define tptov(p, i) ((unsigned)((i) + SYSPAGE)) #define dptov(p, i) ((unsigned)((i) + ((p)->p_tpage) + SYSPAGE)) #define sptov(p, i) ((unsigned)((MAXUMEM-1) - (i))) #define ldptov(i) ((unsigned)((i) + SHLIB_VPAGE0)) #define ltptov(i) ((unsigned)((i) + sl_tbase)) #define vptov(i) ((unsigned)((i) + KVMEM_VPAGE0)) /* Tell whether virtual page numbers are in text|data|stack|kvmem|shlib segment */ #define isassv(p, v) (((v) < MAXUMEM) && \ ((v) >= (MAXUMEM - (p)->p_ssize))) #define isatsv(p, v) (((v) - SYSPAGE) < (p)->p_tsize) #define isadsv(p, v) (((v) - SYSPAGE) >= ((p)->p_tpage) && \ ((v) - SYSPAGE - ((p)->p_tpage) < (p)->p_dsize)) #define isaldsv(v) (((v) >= SHLIB_VPAGE0) && \ ((v) < (SHLIB_VPAGE0+sl_lsize))) #define isaltsv(v) (((v) >= sl_tbase) && \ ((v) < (sl_tbase+sl_text.x_size))) #define isavsv(v) (((v) >= KVMEM_VPAGE0) && \ (((v) - KVMEM_VPAGE0) < kv_pages)) /* Tell whether pte's are text|data|stack|kvmem|shlib */ #define isaspte(p, pte) ((int)(pte - (struct mpte *) VPTE_BASE) >= \ ((p)->p_tsize + (p)->p_lsize + (p)->p_dsize)) #define isatpte(p, pte) ((pte >= (struct mpte *) VPTE_BASE) && \ ((int)(pte - (struct mpte *) VPTE_BASE) < \ (p)->p_tsize)) #define isadpte(p, pte) (((int)(pte - (struct mpte *) VPTE_BASE) >= \ ((p)->p_tsize + (p)->p_lsize)) && \ ((int)(pte - (struct mpte *) VPTE_BASE) < \ ((p)->p_tsize + (p)->p_lsize + (p)->p_dsize))) #define isaldpte(p, pte) (((int)(pte - (struct mpte *) VPTE_BASE) >= \ (p)->p_tsize) && \ ((int)(pte - (struct mpte *) VPTE_BASE) < \ ((p)->p_tsize + (p)->p_lsize))) #define isaltpte(pte) ((pte >= sl_mpte) && \ ((pte - sl_mpte) < sl_text.x_size)) #define isavpte(pte) ((pte >= kv_mpte) && \ ((pte - kv_mpte) < kv_pages)) /* Text|data|stack|kvmem|shlib pte's to segment page numbers and back */ #define ptetotp(p, pte) ((int)(pte - (struct mpte *) VPTE_BASE)) #define ptetodp(p, pte) ((int)(pte - (struct mpte *) VPTE_BASE) \ - (p)->p_tsize - (p)->p_lsize) #define ptetosp(p, pte) (((p)->p_tsize + (p)->p_lsize + (p)->p_dsize + (p)->p_ssize - 1) \ - (int)(pte - (struct mpte *) VPTE_BASE)) #define ptetoldp(p, pte) ((int)(pte - (struct mpte *) VPTE_BASE) \ - (p)->p_tsize) #define ptetoltp(pte) ((int)(pte - sl_mpte)) #define ptetovp(pte) ((int)(pte - kv_mpte)) #define tptopte(p, i) ((struct mpte *)(((i)<<2) + VPTE_BASE)) #define dptopte(p, i) ((struct mpte *) \ ((((i) + ((p)->p_tsize + (p)->p_lsize))<<2) + VPTE_BASE)) #define sptopte(p, i) ((struct mpte *) \ (((((p)->p_tsize + (p)->p_lsize + (p)->p_dsize + (p)->p_ssize - 1) - (i)) << 2) + VPTE_BASE)) #define ldptopte(p, i) ((struct mpte *) \ ((((p)->p_tsize + (i)) << 2) + VPTE_BASE)) #define ltptopte(i) (&sl_mpte[i]) #define vptopte(i) (&kv_mpte[i]) #define ctopt(x) (x) /* Bytes to pages without rounding, and back */ #define btop(x) (((unsigned)(x)) >> PGSHIFT) #define ptob(x) ((caddr_t)((x) << PGSHIFT)) /* given size in clicks, how many pages of U are needed to map it */ #define szupage(sz) (((sz) > PTE_BANK0) ? UPAGES + 1 : UPAGES) /* Average new into old with aging factor time */ #define ave(smooth, cnt, time) \ smooth = ((time - 1) * (smooth) + (cnt)) / (time) #endif vmmac_h