X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/3116da4b2f512f121bfc7b89e948de25a7daf2cc..33e49b2e6d599bc56326841b5b373b9f76adc5f7:/netwatch/firstrun.c diff --git a/netwatch/firstrun.c b/netwatch/firstrun.c new file mode 100644 index 0000000..efa0600 --- /dev/null +++ b/netwatch/firstrun.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include "vga-overlay.h" +#include +#include +#include "../net/net.h" +#include + +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); + +extern pci_driver_t *drivers[]; + +void smi_init() { + smram_state_t smram; + pci_driver_t **driver; + + smram = smram_save_state(); + smram_tseg_set_state(SMRAM_TSEG_OPEN); + + outputf("NetWatch running"); + + /* Try really hard to shut up USB_LEGKEY. */ + pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); + pci_write16(0, 31, 2, 0xC0, 0); + pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0)); + pci_write16(0, 31, 4, 0xC0, 0); + + /* Turn on the SMIs we want */ + smi_disable(); + + eth_init(); + + crc32_init(); + + /* After everything is initialized, load drivers. */ + for (driver = drivers; *driver; driver++) + { + outputf("Probing driver: %s", (*driver)->name); + if (pci_probe_driver(*driver)) + output("Found a card"); + } + outputf("Driver probe complete"); + + /* Load in fonts. */ + text_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); +} +