X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/4fb81ad02399f6fe21e0b1b050aeb2f82f2b3fde..96837c792131679ab97dee48b9e879ea2d2f74c3:/aseg/firstrun.c?ds=sidebyside diff --git a/aseg/firstrun.c b/aseg/firstrun.c index c6eab7b..d3cd16f 100644 --- a/aseg/firstrun.c +++ b/aseg/firstrun.c @@ -2,10 +2,30 @@ #include #include #include +#include #include "vga-overlay.h" +#include +#include "../net/net.h" + +extern int _bss, _bssend; + +extern void timer_handler(smi_event_t ev); +extern void kbc_handler(smi_event_t ev); +extern void gbl_rls_handler(smi_event_t ev); void __firstrun_start() { - dologf("NetWatch running"); + unsigned char *bp; + smram_state_t smram; + + smram = smram_save_state(); + smram_tseg_set_state(SMRAM_TSEG_OPEN); + + for (bp = (void *)&_bss; (void *)bp < (void *)&_bssend; bp++) + *bp = 0; + + vga_flush_imm(0); + + outputf("NetWatch running"); /* Try really hard to shut up USB_LEGKEY. */ pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); @@ -14,8 +34,23 @@ void __firstrun_start() { pci_write16(0, 31, 4, 0xC0, 0); /* Turn on the SMIs we want */ - outb(0x830, inb(0x830) | ICH2_SMI_EN_SWSMI_TMR_EN); - outb(0x848, ICH2_DEVTRAP_EN_KBC_TRP_EN); + smi_disable(); + + eth_init(); + + smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler); + smi_enable_event(SMI_EVENT_FAST_TIMER); + + smi_register_handler(SMI_EVENT_DEVTRAP_KBC, kbc_handler); + smi_enable_event(SMI_EVENT_DEVTRAP_KBC); + + smi_register_handler(SMI_EVENT_GBL_RLS, gbl_rls_handler); + smi_enable_event(SMI_EVENT_GBL_RLS); + smi_enable(); + + vga_flush_imm(1); + + smram_restore_state(smram); }