#ifndef _SYS_MEM_CAGE_H
#define _SYS_MEM_CAGE_H
#include <sys/types.h>
#include <sys/memlist.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
#define KCT_FAILURE 0
#define KCT_CRIT 1
#define KCT_NONCRIT 2
extern int kernel_cage_enable;
extern int kcage_on;
extern kthread_id_t kcage_cageout_thread;
extern pgcnt_t kcage_freemem;
extern pgcnt_t kcage_needfree;
extern pgcnt_t kcage_lotsfree;
extern pgcnt_t kcage_desfree;
extern pgcnt_t kcage_minfree;
extern pgcnt_t kcage_throttlefree;
extern void kcage_freemem_add(pgcnt_t);
extern void kcage_freemem_sub(pgcnt_t);
extern int kcage_create_throttle(pgcnt_t, int);
typedef enum {KCAGE_UP, KCAGE_DOWN} kcage_dir_t;
extern void kcage_range_init(struct memlist *, kcage_dir_t, pgcnt_t);
extern int kcage_range_add(pfn_t, pgcnt_t, kcage_dir_t);
extern int kcage_current_pfn(pfn_t *);
extern int kcage_range_delete(pfn_t, pgcnt_t);
extern int kcage_range_delete_post_mem_del(pfn_t, pgcnt_t);
extern void kcage_recalc_thresholds(void);
extern void kcage_cageout_init(void);
extern void kcage_cageout_wakeup(void);
extern void kcage_tick(void);
extern int kcage_next_range(int incage,
pfn_t lo, pfn_t hi, pfn_t *nlo, pfn_t *nhi);
extern kcage_dir_t kcage_startup_dir;
#endif
#ifdef __cplusplus
}
#endif
#endif