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); }
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; } }
int main(int argc, char *argv[]) { int i, opt, option_index = 0; long write_data = -1; long write_addr = -1; static struct option long_options[] = { {"version", 0, 0, 'v'}, {"help", 0, 0, 'h'}, {"verbose", 0, 0, 'V'}, {"idx", 0, 0, 'i'}, {"query", 0, 0, 'q'}, {0, 0, 0, 0} }; while ((opt = getopt_long(argc, argv, "vh?Vidqw:z:", long_options, &option_index)) != EOF) { switch (opt) { case 'v': print_version(); exit(0); break; case 'V': verbose = 1; break; case 'i': dump_idx = 1; dump_ram = 1; break; case 'w': write_addr = strtol(optarg , NULL, 16); break; case 'z': write_data = strtol(optarg , NULL, 16); break; case 'd': dump_ram = 1; break; case 'q': dump_query = 1; break; case 'h': case '?': default: print_usage(argv[0]); exit(0); break; } } if (iopl(3)) { printf("You need to be root.\n"); exit(1); } if (write_addr >= 0 && write_data >= 0) { write_addr &= 0xff; write_data &= 0xff; printf("\nWriting ec %02lx = %02lx\n", write_addr & 0xff, write_data & 0xff); ec_write(write_addr & 0xff, write_data & 0xff); } /* preserve default - dump_ram if nothing selected */ if (!dump_ram && !dump_idx && !dump_query && !write_addr) { dump_ram = 1; } if (dump_ram) { printf("EC RAM:\n"); for (i = 0; i < 0x100; i++) { if ((i % 0x10) == 0) printf("\n%02x: ", i); printf("%02x ", ec_read(i)); } printf("\n\n"); } if (dump_query) { printf("EC QUERY %02x\n", ec_query()); } if (dump_idx) { printf("EC IDX RAM:\n"); for (i = 0; i < 0x10000; i++) { if ((i % 0x10) == 0) printf("\n%04x: ", i); printf("%02x ", ec_idx_read(i)); } printf("\n\n"); } return 0; }