Index: trunk/i386/libsaio/state_generator.c =================================================================== --- trunk/i386/libsaio/state_generator.c (revision 2526) +++ trunk/i386/libsaio/state_generator.c (revision 2527) @@ -386,17 +386,21 @@ bool c2_enabled = false; bool c3_enabled = false; bool c4_enabled = false; + bool c6_enabled = false; + bool c7_enabled = false; bool cst_using_systemio = false; getBoolForKey(kEnableC2State, &c2_enabled, &bootInfo->chameleonConfig); getBoolForKey(kEnableC3State, &c3_enabled, &bootInfo->chameleonConfig); getBoolForKey(kEnableC4State, &c4_enabled, &bootInfo->chameleonConfig); + getBoolForKey(kEnableC6State, &c6_enabled, &bootInfo->chameleonConfig); + getBoolForKey(kEnableC7State, &c7_enabled, &bootInfo->chameleonConfig); getBoolForKey(kCSTUsingSystemIO, &cst_using_systemio, &bootInfo->chameleonConfig); c2_enabled = c2_enabled | (fadt->C2_Latency < 100); c3_enabled = c3_enabled | (fadt->C3_Latency < 1000); - unsigned char cstates_count = 1 + (c2_enabled ? 1 : 0) + (c3_enabled ? 1 : 0); + unsigned char cstates_count = 1 + (c2_enabled ? 1 : 0) + ((c3_enabled || c4_enabled)? 1 : 0) + (c6_enabled ? 1 : 0) + (c7_enabled ? 1 : 0); AML_CHUNK* root = aml_create_node(NULL); aml_add_buffer(root, cst_ssdt_header, sizeof(cst_ssdt_header)); // SSDT header @@ -456,9 +460,35 @@ resource_template_register_systemio[12] = p_blk_hi; // C3 aml_add_buffer(tmpl, resource_template_register_systemio, sizeof(resource_template_register_systemio)); aml_add_byte(tmpl, 0x03); // C3 - aml_add_word(tmpl, 0x0060); // Latency - aml_add_dword(tmpl, 0x0000015e); // Power + aml_add_word(tmpl, 0x0043); // Latency + aml_add_dword(tmpl, 0x000001F4); // Power } + if (c6_enabled) // C6 + { + p_blk_lo = acpi_cpu_p_blk + 5; + p_blk_hi = (acpi_cpu_p_blk + 5) >> 8; + + tmpl = aml_add_package(pack); + resource_template_register_systemio[11] = p_blk_lo; // C6 + resource_template_register_systemio[12] = p_blk_hi; // C6 + aml_add_buffer(tmpl, resource_template_register_systemio, sizeof(resource_template_register_systemio)); + aml_add_byte(tmpl, 0x06); // C6 + aml_add_word(tmpl, 0x0046); // Latency + aml_add_dword(tmpl, 0x0000015E); // Power + } + if (c7_enabled) //C7 + { + p_blk_lo = (acpi_cpu_p_blk + 6) & 0xff; + p_blk_hi = (acpi_cpu_p_blk + 5) >> 8; + + tmpl = aml_add_package(pack); + resource_template_register_systemio[11] = p_blk_lo; // C4 or C7 + resource_template_register_systemio[12] = p_blk_hi; + aml_add_buffer(tmpl, resource_template_register_fixedhw, sizeof(resource_template_register_fixedhw)); + aml_add_byte(tmpl, 0x07); // C7 + aml_add_word(tmpl, 0xF5); // Latency as in iMac14,1 + aml_add_dword(tmpl, 0xC8); // Power + } } else { @@ -500,9 +530,27 @@ resource_template_register_fixedhw[11] = 0x20; // C3 aml_add_buffer(tmpl, resource_template_register_fixedhw, sizeof(resource_template_register_fixedhw)); aml_add_byte(tmpl, 0x03); // C3 - aml_add_word(tmpl, 0x0060); // Latency - aml_add_dword(tmpl, 0x0000015e); // Power + aml_add_word(tmpl, 0x0043); // Latency + aml_add_dword(tmpl, 0x000001F4); // Power } + if (c6_enabled) // C6 + { + tmpl = aml_add_package(pack); + resource_template_register_fixedhw[11] = 0x20; // C6 + aml_add_buffer(tmpl, resource_template_register_fixedhw, sizeof(resource_template_register_fixedhw)); + aml_add_byte(tmpl, 0x06); // C6 + aml_add_word(tmpl, 0x0046); // Latency as in MacPro6,1 + aml_add_dword(tmpl, 0x0000015E); // Power + } + if (c7_enabled) // C7 + { + tmpl = aml_add_package(pack); + resource_template_register_fixedhw[11] = 0x30; // C4 or C7 + aml_add_buffer(tmpl, resource_template_register_fixedhw, sizeof(resource_template_register_fixedhw)); + aml_add_byte(tmpl, 0x07); // C7 + aml_add_word(tmpl, 0xF5); // Latency as in iMac14,1 + aml_add_dword(tmpl, 0xC8); // Power + } } // Aliaces Index: trunk/i386/boot2/boot.h =================================================================== --- trunk/i386/boot2/boot.h (revision 2526) +++ trunk/i386/boot2/boot.h (revision 2527) @@ -143,6 +143,8 @@ #define kEnableC2State "EnableC2State" /* acpi_patcher.c */ #define kEnableC3State "EnableC3State" /* acpi_patcher.c */ #define kEnableC4State "EnableC4State" /* acpi_patcher.c */ +#define kEnableC6State "EnableC6State" /* acpi_patcher.c */ +#define kEnableC7State "EnableC7State" /* acpi_patcher.c */ /* valv: added these keys */ #define kbusratio "busratio" /* cpu.c */ Index: trunk/package/OptionalSettings/PowerManagement.txt =================================================================== --- trunk/package/OptionalSettings/PowerManagement.txt (revision 2526) +++ trunk/package/OptionalSettings/PowerManagement.txt (revision 2527) @@ -30,7 +30,7 @@ Bool@EnableC2State:EnableC2State=Yes Bool@EnableC3State:EnableC3State=Yes Bool@EnableC4State:EnableC4State=Yes -#Bool@EnableC6State:EnableC6State=Yes -#Bool@EnableC7State:EnableC7State=Yes +Bool@EnableC6State:EnableC6State=Yes +Bool@EnableC7State:EnableC7State=Yes Bool@GenerateCStates:GenerateCStates=Yes Bool@GeneratePStates:GeneratePStates=Yes Index: trunk/doc/BootHelp.txt =================================================================== --- trunk/doc/BootHelp.txt (revision 2526) +++ trunk/doc/BootHelp.txt (revision 2527) @@ -136,6 +136,8 @@ EnableC2State=Yes Enable specific Processor power state, C2. EnableC3State=Yes Enable specific Processor power state, C3. EnableC4State=Yes Enable specific Processor power state, C4. + EnableC6State=Yes Enable specific Processor power state, C6. + EnableC7State=Yes Enable specific Processor power state, C7. PrivateData=No Show masked data (serial number) in bdmesg log (enbaled by default). Index: trunk/CHANGES =================================================================== --- trunk/CHANGES (revision 2526) +++ trunk/CHANGES (revision 2527) @@ -1,3 +1,4 @@ +- ErmaC : C6 & C7 States credits to Clover Team. - ErmaC : define recursive cpu series for BrandString - Zenith432 : saio_types.h, biosfn.c - minor typo in bios-defined data structure that isn't actually used. fake_efi.c - eliminate redundant scan of bt(0,0) in setupSmbiosConfigFile. loadConfigFile already does a fall-back scan of bt(0,0), so another scan isn't needed.