int mainboard_io_trap_handler(int smif) { static int smm_initialized; if (!smm_initialized) { mainboard_smm_init(); smm_initialized = 1; } switch (smif) { case SMI_DOCK_CONNECT: /* If there's an legacy I/O module present, we're not * allowed to connect the Docking LPC Bus, as both Super I/O * chips are using 0x2e as base address. */ if (legacy_io_present()) break; if (!dock_connect()) { /* set dock LED to indicate status */ ec_write(0x0c, 0x08); ec_write(0x0c, 0x89); } else { /* blink dock LED to indicate failure */ ec_write(0x0c, 0xc8); ec_write(0x0c, 0x09); } break; case SMI_DOCK_DISCONNECT: dock_disconnect(); ec_write(0x0c, 0x09); ec_write(0x0c, 0x08); break; case SMI_BRIGHTNESS_UP: mainboard_smi_brightness_up(); break; case SMI_BRIGHTNESS_DOWN: mainboard_smi_brightness_down(); break; default: return 0; } /* On success, the IO Trap Handler returns 1 * On failure, the IO Trap Handler returns a value != 1 */ return 1; }
static void mainboard_smi_handle_ec_sci(void) { u8 status = inb(EC_SC); u8 event; if (!(status & EC_SCI_EVT)) return; event = ec_query(); printk(BIOS_DEBUG, "EC event %02x\n", event); switch (event) { /* brightness up */ case 0x14: mainboard_smi_brightness_up(); mainboard_smi_save_cmos(); break; /* brightness down */ case 0x15: mainboard_smi_brightness_down(); mainboard_smi_save_cmos(); break; /* Fn-F9 key */ case 0x18: /* Power loss */ case 0x27: /* Undock Key */ case 0x50: mainboard_io_trap_handler(SMI_DOCK_DISCONNECT); break; /* Dock Event */ case 0x37: case 0x58: mainboard_io_trap_handler(SMI_DOCK_CONNECT); break; default: break; } }
static void mainboard_smi_handle_ec_sci(void) { u8 status = inb(EC_SC); u8 event; if (!(status & EC_SCI_EVT)) return; event = ec_query(); printk(BIOS_DEBUG, "EC event %02x\n", event); switch (event) { case 0x14: /* brightness up */ mainboard_smi_brightness_up(); break; case 0x15: /* brightness down */ mainboard_smi_brightness_down(); break; default: break; } }