diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hw/ahci.c | 19 | ||||
-rw-r--r-- | src/sercon.c | 4 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/hw/ahci.c b/src/hw/ahci.c index 4f0f640..7e7a03d 100644 --- a/src/hw/ahci.c +++ b/src/hw/ahci.c @@ -637,7 +637,7 @@ static void ahci_controller_setup(struct pci_device *pci) { struct ahci_port_s *port; - u32 val, pnr, max; + u32 pnr, max; if (create_bounce_buf() < 0) return; @@ -660,8 +660,23 @@ ahci_controller_setup(struct pci_device *pci) pci_enable_busmaster(pci); - val = ahci_ctrl_readl(ctrl, HOST_CTL); + u32 val = ahci_ctrl_readl(ctrl, HOST_CTL); + ahci_ctrl_writel(ctrl, HOST_CTL, val | HOST_CTL_RESET); + u32 end = timer_calc(AHCI_RESET_TIMEOUT); + for (;;) { + val = ahci_ctrl_readl(ctrl, HOST_CTL); + if (!(val & HOST_CTL_RESET)) + break; + if (timer_check(end)) { + warn_timeout(); + dprintf(1, "AHCI: controller reset failed\n"); + free(ctrl); + return; + } + yield(); + } ahci_ctrl_writel(ctrl, HOST_CTL, val | HOST_CTL_AHCI_EN); + (void)ahci_ctrl_readl(ctrl, HOST_CTL); /* Flush */ ctrl->caps = ahci_ctrl_readl(ctrl, HOST_CAP); ctrl->ports = ahci_ctrl_readl(ctrl, HOST_PORTS_IMPL); diff --git a/src/sercon.c b/src/sercon.c index 3019d9b..cdc47ab 100644 --- a/src/sercon.c +++ b/src/sercon.c @@ -567,8 +567,8 @@ static VAR16 struct { { .seq = "[19~", .len = 4, .keycode = 0x4200 }, // F8 { .seq = "[20~", .len = 4, .keycode = 0x4300 }, // F9 { .seq = "[21~", .len = 4, .keycode = 0x4400 }, // F10 - { .seq = "[23~", .len = 4, .keycode = 0x5700 }, // F11 - { .seq = "[24~", .len = 4, .keycode = 0x5800 }, // F12 + { .seq = "[23~", .len = 4, .keycode = 0x8500 }, // F11 + { .seq = "[24~", .len = 4, .keycode = 0x8600 }, // F12 { .seq = "[2~", .len = 3, .keycode = 0x52e0 }, // insert { .seq = "[3~", .len = 3, .keycode = 0x53e0 }, // delete |