X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/89b3af67bb32e691275bf6fa803d1834b2284115..d1ecb069dfe24481e4a83f44cb5217a2b06746d7:/iokit/IOKit/IOHibernatePrivate.h diff --git a/iokit/IOKit/IOHibernatePrivate.h b/iokit/IOKit/IOHibernatePrivate.h index f8900155b..dd000cb34 100644 --- a/iokit/IOKit/IOHibernatePrivate.h +++ b/iokit/IOKit/IOHibernatePrivate.h @@ -73,11 +73,13 @@ struct IOHibernateImageHeader uint32_t runtimePages; uint32_t runtimePageCount; + uint64_t runtimeVirtualPages __attribute__ ((packed)); - uint8_t reserved2[16]; + uint32_t performanceDataStart; + uint32_t performanceDataSize; - uint64_t encryptStart; - uint64_t machineSignature; + uint64_t encryptStart __attribute__ ((packed)); + uint64_t machineSignature __attribute__ ((packed)); uint32_t previewSize; uint32_t previewPageListSize; @@ -90,13 +92,19 @@ struct IOHibernateImageHeader uint32_t memoryMapSize; uint32_t systemTableOffset; - uint32_t reserved[77]; // make sizeof == 512 + uint32_t debugFlags; + + uint32_t reserved[76]; // make sizeof == 512 uint32_t fileExtentMapSize; IOPolledFileExtent fileExtentMap[2]; }; typedef struct IOHibernateImageHeader IOHibernateImageHeader; +enum +{ + kIOHibernateDebugRestoreLogs = 0x00000001 +}; struct hibernate_bitmap_t { @@ -116,27 +124,23 @@ struct hibernate_page_list_t }; typedef struct hibernate_page_list_t hibernate_page_list_t; +#if defined(_AES_H) + struct hibernate_cryptwakevars_t { -#ifdef _AES_H uint8_t aes_iv[AES_BLOCK_SIZE]; -#else -#warning undef _AES_H -#endif }; typedef struct hibernate_cryptwakevars_t hibernate_cryptwakevars_t; struct hibernate_cryptvars_t { -#ifdef _AES_H uint8_t aes_iv[AES_BLOCK_SIZE]; aes_ctx ctx; -#else -#warning undef _AES_H -#endif }; typedef struct hibernate_cryptvars_t hibernate_cryptvars_t; +#endif /* defined(_AES_H) */ + enum { @@ -153,16 +157,25 @@ enum kIOHibernateProgressDarkGray = 92 }; +enum +{ + kIOHibernatePostWriteSleep = 0, + kIOHibernatePostWriteWake = 1, + kIOHibernatePostWriteHalt = 2, + kIOHibernatePostWriteRestart = 3 +}; + + struct hibernate_graphics_t { - unsigned long physicalAddress; // Base address of video memory - unsigned long mode; // - unsigned long rowBytes; // Number of bytes per pixel row - unsigned long width; // Width - unsigned long height; // Height - unsigned long depth; // Pixel Depth - - uint8_t progressSaveUnder[kIOHibernateProgressCount][kIOHibernateProgressSaveUnderSize]; + uint32_t physicalAddress; // Base address of video memory + uint32_t mode; // + uint32_t rowBytes; // Number of bytes per pixel row + uint32_t width; // Width + uint32_t height; // Height + uint32_t depth; // Pixel Depth + + uint8_t progressSaveUnder[kIOHibernateProgressCount][kIOHibernateProgressSaveUnderSize]; }; typedef struct hibernate_graphics_t hibernate_graphics_t; @@ -215,7 +228,7 @@ void kern_close_file_for_direct_io(struct kern_direct_file_io_ref_t * ref); int kern_write_file(struct kern_direct_file_io_ref_t * ref, off_t offset, caddr_t addr, vm_size_t len); -int get_kernel_symfile(struct proc *p, char **symfile); +int get_kernel_symfile(struct proc *p, char const **symfile); #endif /* _SYS_CONF_H_ */ hibernate_page_list_t * @@ -235,6 +248,11 @@ hibernate_teardown(hibernate_page_list_t * page_list, kern_return_t hibernate_processor_setup(IOHibernateImageHeader * header); +void +hibernate_gobble_pages(uint32_t gobble_count, uint32_t free_page_time); +void +hibernate_free_gobble_pages(void); + void hibernate_vm_lock(void); void @@ -283,7 +301,8 @@ hibernate_restore_phys_page(uint64_t src, uint64_t dst, uint32_t len, uint32_t p void hibernate_machine_init(void); -boolean_t + +uint32_t hibernate_write_image(void); long @@ -297,6 +316,7 @@ hibernate_newruntime_map(void * map, vm_size_t map_size, extern uint32_t gIOHibernateState; extern uint32_t gIOHibernateMode; +extern uint32_t gIOHibernateDebugFlags; extern uint32_t gIOHibernateFreeTime; // max time to spend freeing pages (ms) extern uint8_t gIOHibernateRestoreStack[]; extern uint8_t gIOHibernateRestoreStackEnd[]; @@ -326,9 +346,10 @@ enum kIOHibernateModeOn = 0x00000001, kIOHibernateModeSleep = 0x00000002, kIOHibernateModeEncrypt = 0x00000004, - kIOHibernateModeDiscardCleanInactive = 0x00000008, - kIOHibernateModeDiscardCleanActive = 0x00000010 + kIOHibernateModeDiscardCleanActive = 0x00000010, + kIOHibernateModeSwitch = 0x00000020, + kIOHibernateModeRestart = 0x00000040 }; // IOHibernateImageHeader.signature @@ -355,6 +376,13 @@ enum #define kIOHibernateFeatureKey "Hibernation" #define kIOHibernatePreviewBufferKey "IOPreviewBuffer" +#define kIOHibernatePreviewActiveKey "IOHibernatePreviewActive" +// values for kIOHibernatePreviewActiveKey +enum { + kIOHibernatePreviewActive = 0x00000001, + kIOHibernatePreviewUpdates = 0x00000002 +}; + #define kIOHibernateBootImageKey "boot-image" #define kIOHibernateBootImageKeyKey "boot-image-key" #define kIOHibernateBootSignatureKey "boot-signature" @@ -365,6 +393,9 @@ enum #define kIOHibernateRTCVariablesKey "IOHibernateRTCVariables" +#define kIOHibernateBootSwitchVarsKey "boot-switch-vars" + + #ifdef __cplusplus } #endif