X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/96837c792131679ab97dee48b9e879ea2d2f74c3..cdde55f54a0880bde5694fcdea8e386ada0cd5ce:/aseg-paging/smi.c?ds=inline diff --git a/aseg-paging/smi.c b/aseg-paging/smi.c index 031797d..d519341 100644 --- a/aseg-paging/smi.c +++ b/aseg-paging/smi.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "../net/net.h" #include "vga-overlay.h" @@ -18,6 +19,9 @@ void smi_entry(void) { char statstr[512]; + /* Reenable caching on SMRAM. */ + WRMSR(0x202, (RDMSR(0x202) & ~(0xFFULL)) | 0x06ULL); + pcisave = inl(0xCF8); vgasave = inb(0x3D4); pci_unbother_all(); @@ -28,8 +32,11 @@ void smi_entry(void) fb->getvmode(fb->priv); counter++; - sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter); - strblit(statstr, 0, 0, 0); + if (!fb || fb->curmode.text) + { + sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter); + strblit(statstr, 0, 0, 0); + } eth_poll(); @@ -48,6 +55,9 @@ void smi_entry(void) 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);