int mainboard_smi_apmc(u8 apmc) { ec_set_ports(EC_MAILBOX_PORT, EC_MAILBOX_PORT+1); switch (apmc) { case 0xe1: /* ACPI ENABLE */ send_ec_command(EC_SMI_DISABLE); send_ec_command(EC_ACPI_ENABLE); break; case 0x1e: /* ACPI DISABLE */ send_ec_command(EC_SMI_ENABLE); send_ec_command(EC_ACPI_DISABLE); break; case APMC_FINALIZE: if (mainboard_finalized) { printk(BIOS_DEBUG, "SMI#: Already finalized\n"); return 0; } intel_me_finalize_smm(); intel_pch_finalize_smm(); intel_sandybridge_finalize_smm(); intel_model_206ax_finalize_smm(); mainboard_finalized = 1; break; } return 0; }
int mainboard_smi_apmc(u8 apmc) { switch (apmc) { case APMC_FINALIZE: if (mainboard_finalized) { printk(BIOS_DEBUG, "SMI#: Already finalized\n"); return 0; } intel_me_finalize_smm(); intel_pch_finalize_smm(); intel_sandybridge_finalize_smm(); intel_model_206ax_finalize_smm(); mainboard_finalized = 1; break; case APMC_ACPI_EN: google_chromeec_set_smi_mask(0); /* Clear all pending events */ while (google_chromeec_get_event() != 0); google_chromeec_set_sci_mask(LINK_EC_SCI_EVENTS); break; case APMC_ACPI_DIS: google_chromeec_set_sci_mask(0); /* Clear all pending events */ while (google_chromeec_get_event() != 0); google_chromeec_set_smi_mask(LINK_EC_SMI_EVENTS); break; } return 0; }
int mainboard_smi_apmc(u8 data) { u16 pmbase = pci_read_config16(PCI_DEV(0, 0x1f, 0), 0x40) & 0xfffc; u8 tmp; printk(BIOS_DEBUG, "%s: pmbase %04X, data %02X\n", __func__, pmbase, data); if (!pmbase) return 0; 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 */ outw(inw(pmbase + ALT_GP_SMI_EN) & ~(1 << GPE_EC_SCI), pmbase + ALT_GP_SMI_EN); tmp = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xbb); tmp &= ~0x03; tmp |= 0x02; pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xbb, tmp); /* 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 */ outw(inw(pmbase + ALT_GP_SMI_EN) | (1 << GPE_EC_SCI), pmbase + ALT_GP_SMI_EN); tmp = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xbb); tmp &= ~0x03; tmp |= 0x01; pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xbb, tmp); /* discard all events, and enable attention */ ec_write(0x80, 0x01); break; 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_sandybridge_finalize_smm(); intel_model_206ax_finalize_smm(); mainboard_finalized = 1; break; default: break; } return 0; }
int mainboard_smi_apmc(u8 apmc) { switch (apmc) { case APM_CNT_FINALIZE: if (mainboard_finalized) { printk(BIOS_DEBUG, "SMI#: Already finalized\n"); return 0; } intel_me_finalize_smm(); intel_pch_finalize_smm(); intel_sandybridge_finalize_smm(); intel_model_206ax_finalize_smm(); mainboard_finalized = 1; break; } return 0; }