IOHibernateInternal.h [plain text]
#include <stdint.h>
#ifdef __cplusplus
enum { kIOHibernateAESKeySize = 128 };
struct IOHibernateVars
{
hibernate_page_list_t * page_list;
hibernate_page_list_t * page_list_wired;
hibernate_page_list_t * page_list_pal;
class IOBufferMemoryDescriptor * ioBuffer;
class IOBufferMemoryDescriptor * srcBuffer;
class IOBufferMemoryDescriptor * handoffBuffer;
class IOMemoryDescriptor * previewBuffer;
OSData * previewData;
OSData * fileExtents;
OSObject * saveBootDevice;
struct IOPolledFileIOVars * fileVars;
vm_offset_t videoMapping;
vm_size_t videoAllocSize;
vm_size_t videoMapSize;
uint8_t * consoleMapping;
uint8_t haveFastBoot;
uint8_t saveBootAudioVolume;
uint8_t wiredCryptKey[kIOHibernateAESKeySize / 8];
uint8_t cryptKey[kIOHibernateAESKeySize / 8];
uint8_t volumeCryptKey[kIOHibernateAESKeySize / 8];
};
typedef struct IOHibernateVars IOHibernateVars;
struct IOPolledFileIOVars
{
struct kern_direct_file_io_ref_t * fileRef;
class OSArray * pollers;
IOByteCount blockSize;
uint8_t * buffer;
IOByteCount bufferSize;
IOByteCount bufferLimit;
IOByteCount bufferOffset;
IOByteCount bufferHalf;
IOByteCount extentRemaining;
IOByteCount lastRead;
IOByteCount readEnd;
uint32_t flags;
uint64_t block0;
uint64_t position;
uint64_t extentPosition;
uint64_t encryptStart;
uint64_t encryptEnd;
uint64_t cryptBytes;
AbsoluteTime cryptTime;
IOPolledFileExtent * extentMap;
IOPolledFileExtent * currentExtent;
bool io;
IOReturn ioStatus;
};
typedef struct IOPolledFileIOVars IOPolledFileIOVars;
#endif
enum
{
kIOHibernateTagSignature = 0x53000000,
kIOHibernateTagLength = 0x00001fff,
};
#ifdef __cplusplus
extern "C"
#endif
uint32_t
hibernate_sum_page(uint8_t *buf, uint32_t ppnum);
extern vm_offset_t sectHIBB;
extern unsigned long sectSizeHIB;
extern vm_offset_t sectDATAB;
extern unsigned long sectSizeDATA;
#if defined(__i386__) || defined(__x86_64__)
extern vm_offset_t sectINITPTB;
#endif
extern ppnum_t gIOHibernateHandoffPages[];
extern uint32_t gIOHibernateHandoffPageCount;