Index: trunk/i386/libsaio/acpi_patcher.c =================================================================== --- trunk/i386/libsaio/acpi_patcher.c (revision 2361) +++ trunk/i386/libsaio/acpi_patcher.c (revision 2362) @@ -793,6 +793,8 @@ addConfigurationTable(&gEfiAcpiTableGuid, &acpi10_p, "ACPI"); if(acpi20_p) { addConfigurationTable(&gEfiAcpi20TableGuid, &acpi20_p, "ACPI_20"); + } else { + verbose("No ACPI 2.\n"); } return 1; } @@ -989,7 +991,7 @@ DBG("New checksum %d at %x\n", rsdt_mod->Checksum,rsdt_mod); } else { rsdp_mod->RsdtAddress=0; - printf("RSDT not found or incorrect\n"); + printf("RSDT not found or RSDT incorrect\n"); } if (version) { Index: trunk/i386/boot2/resume.c =================================================================== --- trunk/i386/boot2/resume.c (revision 2361) +++ trunk/i386/boot2/resume.c (revision 2362) @@ -51,10 +51,10 @@ printf("\nWake Kernel!\n"); - dst = (unsigned long *) (header->restore1CodePage << 12); + dst = (unsigned long *) (header->restore1CodePhysPage << 12); count = header->restore1PageCount; proc = (header->restore1CodeOffset + ((uint32_t) dst)); - newSP = header->restore1StackOffset + (header->restore1CodePage << 12); + newSP = header->restore1StackOffset + (header->restore1CodePhysPage << 12); src = (unsigned long *) (((u_int32_t) &header->fileExtentMap[0]) + header->fileExtentMapSize); @@ -104,7 +104,7 @@ size = ReadFileAtOffset (image_filename, header, 0, sizeof(IOHibernateImageHeader)); printf("header read size %x\n", size); - + imageSize = header->image1Size; codeSize = header->restore1PageCount << 12; if (kIOHibernateHeaderSignature != header->signature) { @@ -132,11 +132,11 @@ } } #endif - + allocSize = imageSize + ((4095 + sizeof(hibernate_graphics_t)) & ~4095); - + mem_base = getmemorylimit() - allocSize;//TODO: lower this - + printf("mem_base %x\n", mem_base); if (((long long)mem_base + allocSize) < (1024 * bootInfo->extmem + 0x100000)) { printf ("Not enough space to restore image. Press any key to proceed with normal boot.\n"); @@ -146,14 +146,14 @@ bcopy(header, (void *) mem_base, sizeof(IOHibernateImageHeader)); header = (IOHibernateImageHeader *) mem_base; - + imageSize -= sizeof(IOHibernateImageHeader); buffer = (long)(header + 1); if (header->previewSize) { uint64_t preview_offset = header->fileExtentMapSize - sizeof(header->fileExtentMap) + codeSize; uint8_t progressSaveUnder[kIOHibernateProgressCount][kIOHibernateProgressSaveUnderSize]; - + ReadFileAtOffset (image_filename, (char *)buffer, sizeof(IOHibernateImageHeader), preview_offset+header->previewSize); drawPreview ((void *)(long)(buffer+preview_offset + header->previewPageListSize), &(progressSaveUnder[0][0])); previewTotalSectors = (imageSize-(preview_offset+header->previewSize))/512; @@ -168,12 +168,12 @@ previewLoadedSectors = 0; previewSaveunder = 0; #if 0 - AsereBLN: - check_vga_nvidia() didn't work as expected (recursion level > 0 & return value). - Unforutnaltely I cannot find a note why to switch back to text mode for nVidia cards only - and because it check_vga_nvidia does not work (cards normally are behind a bridge) I will - remove it completely - setVideoMode( VGA_TEXT_MODE, 0 ); + // AsereBLN: + // check_vga_nvidia() didn't work as expected (recursion level > 0 & return value). + // Unforutnaltely I cannot find a note why to switch back to text mode for nVidia cards only + // and because it check_vga_nvidia does not work (cards normally are behind a bridge) I will + // remove it completely + // setVideoMode( VGA_TEXT_MODE, 0 ); #endif } else { ReadFileAtOffset (image_filename, (char *)buffer, sizeof(IOHibernateImageHeader), imageSize); Index: trunk/i386/boot2/IOHibernatePrivate.h =================================================================== --- trunk/i386/boot2/IOHibernatePrivate.h (revision 2361) +++ trunk/i386/boot2/IOHibernatePrivate.h (revision 2362) @@ -2,7 +2,7 @@ * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -11,10 +11,10 @@ * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. - * + * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -22,7 +22,7 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ @@ -36,81 +36,83 @@ struct IOPolledFileExtent { - uint64_t start; - uint64_t length; + uint64_t start; + uint64_t length; }; typedef struct IOPolledFileExtent IOPolledFileExtent; struct IOHibernateImageHeader { - uint64_t imageSize; - uint64_t image1Size; - - uint32_t restore1CodePage; - uint32_t restore1PageCount; - uint32_t restore1CodeOffset; - uint32_t restore1StackOffset; - - uint32_t pageCount; - uint32_t bitmapSize; + uint64_t imageSize; + uint64_t image1Size; - uint32_t restore1Sum; - uint32_t image1Sum; - uint32_t image2Sum; + uint32_t restore1CodePhysPage; + uint32_t reserved1; + uint64_t restore1CodeVirt; + uint32_t restore1PageCount; + uint32_t restore1CodeOffset; + uint32_t restore1StackOffset; - uint32_t actualRestore1Sum; - uint32_t actualImage1Sum; - uint32_t actualImage2Sum; + uint32_t pageCount; + uint32_t bitmapSize; - uint32_t actualUncompressedPages; - uint32_t conflictCount; - uint32_t nextFree; + uint32_t restore1Sum; + uint32_t image1Sum; + uint32_t image2Sum; - uint32_t signature; - uint32_t processorFlags; + uint32_t actualRestore1Sum; + uint32_t actualImage1Sum; + uint32_t actualImage2Sum; - uint32_t runtimePages; - uint32_t runtimePageCount; + uint32_t actualUncompressedPages; + uint32_t conflictCount; + uint32_t nextFree; - uint8_t reserved2[16]; - - uint64_t encryptStart; - uint64_t machineSignature; + uint32_t signature; + uint32_t processorFlags; - uint32_t previewSize; - uint32_t previewPageListSize; + uint32_t runtimePages; + uint32_t runtimePageCount; - uint32_t diag[4]; + uint8_t reserved2[16]; - int32_t graphicsInfoOffset; - int32_t cryptVarsOffset; - int32_t memoryMapOffset; - uint32_t memoryMapSize; - uint32_t systemTableOffset; + uint64_t encryptStart; + uint64_t machineSignature; - uint32_t reserved[77]; // make sizeof == 512 + uint32_t previewSize; + uint32_t previewPageListSize; - uint32_t fileExtentMapSize; - IOPolledFileExtent fileExtentMap[2]; + uint32_t diag[4]; + + int32_t graphicsInfoOffset; + int32_t cryptVarsOffset; + int32_t memoryMapOffset; + uint32_t memoryMapSize; + uint32_t systemTableOffset; + + uint32_t reserved[77]; // make sizeof == 512 + + uint32_t fileExtentMapSize; + IOPolledFileExtent fileExtentMap[2]; }; typedef struct IOHibernateImageHeader IOHibernateImageHeader; struct hibernate_bitmap_t { - uint32_t first_page; - uint32_t last_page; - uint32_t bitmapwords; - uint32_t bitmap[0]; + uint32_t first_page; + uint32_t last_page; + uint32_t bitmapwords; + uint32_t bitmap[0]; }; typedef struct hibernate_bitmap_t hibernate_bitmap_t; struct hibernate_page_list_t { - uint32_t list_size; - uint32_t page_count; - uint32_t bank_count; - hibernate_bitmap_t bank_bitmap[0]; + uint32_t list_size; + uint32_t page_count; + uint32_t bank_count; + hibernate_bitmap_t bank_bitmap[0]; }; typedef struct hibernate_page_list_t hibernate_page_list_t; @@ -118,14 +120,14 @@ struct hibernate_cryptwakevars_t { - uint8_t aes_iv[AES_BLOCK_SIZE]; + uint8_t aes_iv[AES_BLOCK_SIZE]; }; typedef struct hibernate_cryptwakevars_t hibernate_cryptwakevars_t; struct hibernate_cryptvars_t { - uint8_t aes_iv[AES_BLOCK_SIZE]; - aes_ctx ctx; + uint8_t aes_iv[AES_BLOCK_SIZE]; + aes_ctx ctx; }; typedef struct hibernate_cryptvars_t hibernate_cryptvars_t; @@ -134,38 +136,37 @@ enum { - kIOHibernateProgressCount = 19, - kIOHibernateProgressWidth = 7, - kIOHibernateProgressHeight = 16, - kIOHibernateProgressSpacing = 3, - kIOHibernateProgressOriginY = 81, + kIOHibernateProgressCount = 19, + kIOHibernateProgressWidth = 7, + kIOHibernateProgressHeight = 16, + kIOHibernateProgressSpacing = 3, + kIOHibernateProgressOriginY = 81, - kIOHibernateProgressSaveUnderSize = 2*5+14*2, + kIOHibernateProgressSaveUnderSize = 2*5+14*2, - kIOHibernateProgressLightGray = 230, - kIOHibernateProgressMidGray = 174, - kIOHibernateProgressDarkGray = 92 + kIOHibernateProgressLightGray = 230, + kIOHibernateProgressMidGray = 174, + kIOHibernateProgressDarkGray = 92 }; -enum -{ - kIOHibernatePostWriteSleep = 0, - kIOHibernatePostWriteWake = 1, - kIOHibernatePostWriteHalt = 2, - kIOHibernatePostWriteRestart = 3 +enum { + kIOHibernatePostWriteSleep = 0, + kIOHibernatePostWriteWake = 1, + kIOHibernatePostWriteHalt = 2, + kIOHibernatePostWriteRestart = 3 }; struct hibernate_graphics_t { - 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 + 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]; + uint8_t progressSaveUnder[kIOHibernateProgressCount][kIOHibernateProgressSaveUnderSize]; }; typedef struct hibernate_graphics_t hibernate_graphics_t; @@ -173,22 +174,22 @@ static const uint8_t gIOHibernateProgressAlpha \ [kIOHibernateProgressHeight][kIOHibernateProgressWidth] = \ { \ - { 0x00,0x63,0xd8,0xf0,0xd8,0x63,0x00 }, \ - { 0x51,0xff,0xff,0xff,0xff,0xff,0x51 }, \ - { 0xae,0xff,0xff,0xff,0xff,0xff,0xae }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ - { 0xae,0xff,0xff,0xff,0xff,0xff,0xae }, \ - { 0x54,0xff,0xff,0xff,0xff,0xff,0x54 }, \ - { 0x00,0x66,0xdb,0xf3,0xdb,0x66,0x00 } \ + { 0x00,0x63,0xd8,0xf0,0xd8,0x63,0x00 }, \ + { 0x51,0xff,0xff,0xff,0xff,0xff,0x51 }, \ + { 0xae,0xff,0xff,0xff,0xff,0xff,0xae }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xc3,0xff,0xff,0xff,0xff,0xff,0xc3 }, \ + { 0xae,0xff,0xff,0xff,0xff,0xff,0xae }, \ + { 0x54,0xff,0xff,0xff,0xff,0xff,0x54 }, \ + { 0x00,0x66,0xdb,0xf3,0xdb,0x66,0x00 } \ }; #ifdef KERNEL @@ -208,8 +209,8 @@ typedef void (*kern_get_file_extents_callback_t)(void * ref, uint64_t start, uint64_t size); struct kern_direct_file_io_ref_t * -kern_open_file_for_direct_io(const char * name, - kern_get_file_extents_callback_t callback, +kern_open_file_for_direct_io(const char * name, + kern_get_file_extents_callback_t callback, void * callback_ref, dev_t * device, uint64_t * partitionbase_result, @@ -224,18 +225,18 @@ hibernate_page_list_t * hibernate_page_list_allocate(void); -kern_return_t +kern_return_t hibernate_setup(IOHibernateImageHeader * header, uint32_t free_page_ratio, uint32_t free_page_time, hibernate_page_list_t ** page_list_ret, hibernate_page_list_t ** page_list_wired_ret, boolean_t * encryptedswap); -kern_return_t +kern_return_t hibernate_teardown(hibernate_page_list_t * page_list, hibernate_page_list_t * page_list_wired); -kern_return_t +kern_return_t hibernate_processor_setup(IOHibernateImageHeader * header); void @@ -249,7 +250,7 @@ hibernate_page_list_t * page_list_wired, uint32_t * pagesOut); -// mark pages to be saved, or pages not to be saved but available +// mark pages to be saved, or pages not to be saved but available // for scratch usage during restore void hibernate_page_list_setall_machine(hibernate_page_list_t * page_list, @@ -269,10 +270,10 @@ hibernate_set_page_state(hibernate_page_list_t * page_list, hibernate_page_list_t * page_list_wired, vm_offset_t ppnum, vm_offset_t count, uint32_t kind); -void +void hibernate_page_bitset(hibernate_page_list_t * list, boolean_t set, uint32_t page); -boolean_t +boolean_t hibernate_page_bittst(hibernate_page_list_t * list, uint32_t page); hibernate_bitmap_t * @@ -309,46 +310,46 @@ extern hibernate_cryptwakevars_t * gIOHibernateCryptWakeVars; #define HIBLOG(fmt, args...) \ - { kprintf(fmt, ## args); printf(fmt, ## args); } + { kprintf(fmt, ## args); printf(fmt, ## args); } #define HIBPRINT(fmt, args...) \ - { kprintf(fmt, ## args); } + { kprintf(fmt, ## args); } #endif /* KERNEL */ // gIOHibernateState, kIOHibernateStateKey enum { - kIOHibernateStateInactive = 0, - kIOHibernateStateHibernating = 1, /* writing image */ - kIOHibernateStateWakingFromHibernate = 2 /* booted and restored image */ + kIOHibernateStateInactive = 0, + kIOHibernateStateHibernating = 1, /* writing image */ + kIOHibernateStateWakingFromHibernate = 2 /* booted and restored image */ }; // gIOHibernateMode, kIOHibernateModeKey enum { - kIOHibernateModeOn = 0x00000001, - kIOHibernateModeSleep = 0x00000002, - kIOHibernateModeEncrypt = 0x00000004, - kIOHibernateModeDiscardCleanInactive = 0x00000008, - kIOHibernateModeDiscardCleanActive = 0x00000010, - kIOHibernateModeSwitch = 0x00000020, - kIOHibernateModeRestart = 0x00000040 + kIOHibernateModeOn = 0x00000001, + kIOHibernateModeSleep = 0x00000002, + kIOHibernateModeEncrypt = 0x00000004, + kIOHibernateModeDiscardCleanInactive = 0x00000008, + kIOHibernateModeDiscardCleanActive = 0x00000010, + kIOHibernateModeSwitch = 0x00000020, + kIOHibernateModeRestart = 0x00000040 }; // IOHibernateImageHeader.signature enum { - kIOHibernateHeaderSignature = 0x73696d65, - kIOHibernateHeaderInvalidSignature = 0x7a7a7a7a + kIOHibernateHeaderSignature = 0x73696d65, + kIOHibernateHeaderInvalidSignature = 0x7a7a7a7a }; // kind for hibernate_set_page_state() enum { - kIOHibernatePageStateFree = 0, - kIOHibernatePageStateWiredSave = 1, - kIOHibernatePageStateUnwiredSave = 2 + kIOHibernatePageStateFree = 0, + kIOHibernatePageStateWiredSave = 1, + kIOHibernatePageStateUnwiredSave = 2 }; #define kIOHibernateModeKey "Hibernate Mode" @@ -363,8 +364,8 @@ #define kIOHibernatePreviewActiveKey "IOHibernatePreviewActive" // values for kIOHibernatePreviewActiveKey enum { - kIOHibernatePreviewActive = 0x00000001, - kIOHibernatePreviewUpdates = 0x00000002 + kIOHibernatePreviewActive = 0x00000001, + kIOHibernatePreviewUpdates = 0x00000002 }; #define kIOHibernateBootImageKey "boot-image"