#ifndef _SYS_VMSYSTM_H
#define _SYS_VMSYSTM_H
#include <sys/proc.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
extern pgcnt_t freemem;
extern pgcnt_t avefree;
extern pgcnt_t avefree30;
extern pgcnt_t deficit;
extern pgcnt_t nscan;
extern pgcnt_t desscan;
extern pgcnt_t slowscan;
extern pgcnt_t fastscan;
extern pgcnt_t pushes;
extern uint64_t low_mem_scan;
extern volatile uint64_t n_throttle;
extern pgcnt_t maxpgio;
extern pgcnt_t lotsfree;
extern pgcnt_t desfree;
extern pgcnt_t minfree;
extern pgcnt_t needfree;
extern pgcnt_t throttlefree;
extern pgcnt_t pageout_reserve;
extern pgcnt_t pages_before_pager;
#define NOMEMWAIT() (ttoproc(curthread) == proc_pageout || \
ttoproc(curthread) == proc_fsflush || \
ttoproc(curthread) == proc_sched || \
(curthread->t_flag & T_PUSHPAGE) != 0)
#define nz(x) ((x) != 0 ? (x) : 1)
#define HARDSWAP 1
#define SOFTSWAP 2
#define RANGE_OKAY (0)
#define RANGE_BADADDR (1)
#define RANGE_BADPROT (2)
#define MAPPGSZ_VA 0x01
#define MAPPGSZ_STK 0x02
#define MAPPGSZ_HEAP 0x04
#define MAPPGSZ_ISM 0x08
#define MAPPGSZC_SHM 0x01
#define MAPPGSZC_PRIVM 0x02
#define MAPPGSZC_STACK 0x04
#define MAPPGSZC_HEAP 0x08
#define ADDR_NOVACALIGN 0
#define ADDR_VACALIGN 1
struct as;
struct page;
struct anon;
extern int maxslp;
extern ulong_t pginrate;
extern ulong_t pgoutrate;
extern void swapout_lwp(klwp_t *);
extern int valid_va_range(caddr_t *basep, size_t *lenp, size_t minlen,
int dir);
extern int valid_va_range_aligned(caddr_t *basep, size_t *lenp,
size_t minlen, int dir, size_t align, size_t redzone, size_t off);
extern int valid_usr_range(caddr_t, size_t, uint_t, struct as *, caddr_t);
extern int useracc(void *, size_t, int);
extern size_t map_pgsz(int maptype, struct proc *p, caddr_t addr, size_t len,
int memcntl);
extern uint_t map_pgszcvec(caddr_t addr, size_t size, uintptr_t off, int flags,
int type, int memcntl);
extern int choose_addr(struct as *as, caddr_t *addrp, size_t len, offset_t off,
int vacalign, uint_t flags);
extern void map_addr(caddr_t *addrp, size_t len, offset_t off, int vacalign,
uint_t flags);
extern int map_addr_vacalign_check(caddr_t, u_offset_t);
extern void map_addr_proc(caddr_t *addrp, size_t len, offset_t off,
int vacalign, caddr_t userlimit, struct proc *p, uint_t flags);
extern void vmmeter(void);
extern int cow_mapin(struct as *, caddr_t, caddr_t, struct page **,
struct anon **, size_t *, int);
extern caddr_t ppmapin(struct page *, uint_t, caddr_t);
extern void ppmapout(caddr_t);
extern int pf_is_memory(pfn_t);
extern void dcache_flushall(void);
extern void *boot_virt_alloc(void *addr, size_t size);
extern size_t exec_get_spslew(void);
#endif
#ifdef __cplusplus
}
#endif
#endif