X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/722e5aea4f6704ee7a3e7779c5326c157a98195b..9279fff3ac25895f3fa48cd764bdad56d7c735ff:/aseg-paging/smi.c?ds=inline diff --git a/aseg-paging/smi.c b/aseg-paging/smi.c index eada78d..d519341 100644 --- a/aseg-paging/smi.c +++ b/aseg-paging/smi.c @@ -5,6 +5,9 @@ #include #include #include +#include +#include +#include #include "../net/net.h" #include "vga-overlay.h" @@ -15,27 +18,27 @@ unsigned char vgasave = 0; void smi_entry(void) { char statstr[512]; - outb(0x80, 0x0B); + + /* Reenable caching on SMRAM. */ + WRMSR(0x202, (RDMSR(0x202) & ~(0xFFULL)) | 0x06ULL); + pcisave = inl(0xCF8); vgasave = inb(0x3D4); - outb(0x80, 0x1B); -/* pci_unbother_all(); - */ - counter++; - outb(0x80, 0x2B); - sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter); - outb(0x80, 0x3B); - strblit(statstr, 0, 0); - outb(0x80, 0x4B); serial_init(); -/* dolog("wee!"); - */ - /* + if (fb) + fb->getvmode(fb->priv); + + counter++; + if (!fb || fb->curmode.text) + { + sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter); + strblit(statstr, 0, 0, 0); + } + eth_poll(); - */ if (inl(0x840) & 0x1000) { @@ -48,11 +51,13 @@ void smi_entry(void) smi_poll(); -/* + pci_bother_all(); - */ outl(0xCF8, pcisave); outb(0x3D4, vgasave); + + /* Disable caching on SMRAM again, to prevent the user from whacking us. */ + WRMSR(0x202, RDMSR(0x202) & ~(0xFFULL)); } extern void timer_handler(smi_event_t ev);