#if CONFIG_FREEZE
#ifndef _DEFAULT_FREEZER_H_
#define _DEFAULT_FREEZER_H_
#ifdef MACH_KERNEL
#include <default_pager/default_pager_internal.h>
#include <default_pager/default_pager_object_server.h>
#include <mach/memory_object_default_server.h>
#include <mach/memory_object_control.h>
#include <mach/memory_object_types.h>
#include <mach/memory_object_server.h>
#include <mach/upl.h>
#include <mach/vm_map.h>
#include <vm/memory_object.h>
#include <vm/vm_pageout.h>
#include <vm/vm_map.h>
extern void df_memory_object_reference(memory_object_t);
extern void df_memory_object_deallocate(memory_object_t);
extern kern_return_t df_memory_object_init(memory_object_t,
memory_object_control_t,
memory_object_cluster_size_t);
extern kern_return_t df_memory_object_terminate(memory_object_t);
extern kern_return_t df_memory_object_data_request(memory_object_t,
memory_object_offset_t,
memory_object_cluster_size_t,
vm_prot_t,
memory_object_fault_info_t);
extern kern_return_t df_memory_object_data_return(memory_object_t,
memory_object_offset_t,
memory_object_cluster_size_t,
memory_object_offset_t *,
int *,
boolean_t,
boolean_t,
int);
extern kern_return_t df_memory_object_data_initialize(memory_object_t,
memory_object_offset_t,
memory_object_cluster_size_t);
extern kern_return_t df_memory_object_data_unlock(memory_object_t,
memory_object_offset_t,
memory_object_size_t,
vm_prot_t);
extern kern_return_t df_memory_object_synchronize(memory_object_t,
memory_object_offset_t,
memory_object_size_t,
vm_sync_t);
extern kern_return_t df_memory_object_map(memory_object_t,
vm_prot_t);
extern kern_return_t df_memory_object_last_unmap(memory_object_t);
extern kern_return_t df_memory_object_data_reclaim( memory_object_t,
boolean_t);
const struct memory_object_pager_ops default_freezer_ops = {
df_memory_object_reference,
df_memory_object_deallocate,
df_memory_object_init,
df_memory_object_terminate,
df_memory_object_data_request,
df_memory_object_data_return,
df_memory_object_data_initialize,
df_memory_object_data_unlock,
df_memory_object_synchronize,
df_memory_object_map,
df_memory_object_last_unmap,
df_memory_object_data_reclaim,
"default freezer"
};
#define MAX_FREEZE_TABLE_ENTRIES 128
struct default_freezer_mapping_table_entry {
memory_object_t memory_object;
memory_object_offset_t offset;
};
typedef struct default_freezer_mapping_table *default_freezer_mapping_table_t;
struct default_freezer_mapping_table {
struct default_freezer_mapping_table *next;
vm_object_t object;
vm_object_offset_t offset;
unsigned int index;
struct default_freezer_mapping_table_entry entry[MAX_FREEZE_TABLE_ENTRIES];
};
typedef struct default_freezer_mapping_table_entry *default_freezer_mapping_table_entry_t;
struct default_freezer_memory_object{
struct ipc_object_header fo_pager_header;
memory_object_pager_ops_t fo_pager_ops;
memory_object_control_t fo_pager_control;
vm_object_t fo_compact_object;
default_freezer_mapping_table_t fo_table;
};
typedef struct default_freezer_memory_object *default_freezer_memory_object_t;
__private_extern__ void* default_freezer_mapping_create(vm_object_t, vm_offset_t);
__private_extern__ void default_freezer_mapping_free(void**, boolean_t all);
__private_extern__ kern_return_t default_freezer_mapping_store( default_freezer_mapping_table_t *,
memory_object_offset_t,
memory_object_t,
memory_object_offset_t );
__private_extern__ kern_return_t default_freezer_mapping_update( default_freezer_mapping_table_t,
memory_object_t,
memory_object_offset_t,
memory_object_offset_t *,
boolean_t );
__private_extern__ void default_freezer_memory_object_create(vm_object_t, vm_object_t, default_freezer_mapping_table_t);
__private_extern__ void default_freezer_pack_page(vm_page_t, vm_object_t, vm_object_offset_t, void**);
__private_extern__ void default_freezer_unpack(vm_object_t, void**);
__private_extern__ vm_object_t default_freezer_get_compact_vm_object(void**);
#endif
#endif
#endif