int mainboard_smi_apmc(u8 apmc) { printk(BIOS_DEBUG, "mainboard_smi_apmc: %x\n", apmc); switch (apmc) { case APMC_ACPI_EN: printk(BIOS_DEBUG, "APMC: ACPI_EN\n"); /* Clear all pending events */ /* EC cmd:59 data:E8 */ ec_kbc_write_cmd(0x59); ec_kbc_write_ib(0xE8); /* Set LID GPI to generate SCIs */ gpi_route_interrupt(EC_LID_GPI, GPI_IS_SCI); break; case APMC_ACPI_DIS: printk(BIOS_DEBUG, "APMC: ACPI_DIS\n"); /* Clear all pending events */ /* EC cmd:59 data:e9 */ ec_kbc_write_cmd(0x59); ec_kbc_write_ib(0xE9); /* Set LID GPI to generate SMIs */ gpi_route_interrupt(EC_LID_GPI, GPI_IS_SMI); break; } return 0; }
int mainboard_smi_apmc(u8 data) { switch (data) { case APM_CNT_ACPI_ENABLE: /* use 0x1600/0x1604 to prevent races with userspace */ ec_set_ports(0x1604, 0x1600); /* route EC_SCI to SCI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SCI); /* discard all events, and enable attention */ ec_write(0x80, 0x01); break; case APM_CNT_ACPI_DISABLE: /* we have to use port 0x62/0x66, as 0x1600/0x1604 doesn't provide a EC query function */ ec_set_ports(0x66, 0x62); /* route EC_SCI to SMI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SMI); /* discard all events, and enable attention */ ec_write(0x80, 0x01); break; default: break; } return 0; }
int mainboard_smi_apmc(u8 data) { switch (data) { case APM_CNT_ACPI_ENABLE: /* route H8SCI to SCI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SCI); break; case APM_CNT_ACPI_DISABLE: /* route H8SCI# to SMI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SMI); break; default: break; } return 0; }
void mainboard_smi_sleep(u8 slp_typ) { if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ if (ec_wake & 0x14) { /* Redirect EC WAKE GPE to SCI. */ gpi_route_interrupt(GPE_EC_WAKE, GPI_IS_SCI); } } }
int mainboard_smi_apmc(u8 data) { switch (data) { case APM_CNT_FINALIZE: printk(BIOS_DEBUG, "APMC: FINALIZE\n"); if (mainboard_finalized) { printk(BIOS_DEBUG, "APMC#: Already finalized\n"); return 0; } intel_me_finalize_smm(); intel_pch_finalize_smm(); intel_nehalem_finalize_smm(); intel_model_2065x_finalize_smm(); mainboard_finalized = 1; break; case APM_CNT_ACPI_ENABLE: /* use 0x1600/0x1604 to prevent races with userspace */ ec_set_ports(0x1604, 0x1600); /* route H8SCI to SCI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SCI); /* discard all events, and enable attention */ ec_write(0x80, 0x01); break; case APM_CNT_ACPI_DISABLE: /* we have to use port 0x62/0x66, as 0x1600/0x1604 doesn't provide a EC query function */ ec_set_ports(0x66, 0x62); /* route H8SCI# to SMI */ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SMI); /* discard all events, and enable attention */ ec_write(0x80, 0x01); break; default: break; } return 0; }