package main import "fmt" func FIXMEEC(ctx Context) { ap := Create(ctx, "acpi/platform.asl") defer ap.Close() hasKeyboard := IsIOPortUsedBy(ctx, 0x60, "keyboard") sbGPE := GuessECGPE(ctx) var GPEUnsure bool if sbGPE < 0 { sbGPE = SouthBridge.EncodeGPE(1) GPEUnsure = true SouthBridge.NeedRouteGPIOManually() } else { GPEUnsure = false SouthBridge.EnableGPE(SouthBridge.DecodeGPE(sbGPE)) } ap.WriteString( `Method(_WAK,1) { /* FIXME: EC support */ Return(Package(){0,0}) } Method(_PTS,1) { /* FIXME: EC support */ } `) ecs := ctx.InfoSource.GetEC() MainboardIncludes = append(MainboardIncludes, "ec/acpi/ec.h") MainboardInit += ` /* FIXME: trim this down or remove if necessary */ { int i; const u8 dmp[256] = {` for i := 0; i < 0x100; i++ { if (i & 0xf) == 0 { MainboardInit += fmt.Sprintf("\n\t\t\t/* %02x */ ", i) } MainboardInit += fmt.Sprintf("0x%02x,", ecs[i]) if (i & 0xf) != 0xf { MainboardInit += " " } } MainboardInit += "\n\t\t};\n" MainboardInit += ` printk(BIOS_DEBUG, "Replaying EC dump ..."); for (i = 0; i < 256; i++) ec_write (i, dmp[i]); printk(BIOS_DEBUG, "done\n"); } ` si := Create(ctx, "acpi/superio.asl") defer si.Close() if hasKeyboard { si.WriteString("#include <drivers/pc80/ps2_controller.asl>\n") MainboardInit += fmt.Sprintf("\tpc_keyboard_init();\n") MainboardIncludes = append(MainboardIncludes, "pc80/keyboard.h") } ec := Create(ctx, "acpi/ec.asl") defer ec.Close() ec.WriteString(`Device(EC) { Name (_HID, EISAID("PNP0C09")) Name (_UID, 0) `) if GPEUnsure { ec.WriteString("\t/* FIXME: Set GPE */\n") ec.WriteString("\t/* Name (_GPE, ?) */\n") } else { fmt.Fprintf(ec, "\tName (_GPE, %d)\n", sbGPE) } ec.WriteString("/* FIXME: EC support */\n") }