X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/5cb80fe1822bb0f49a4a1754424ebdd77503e284..cdde55f54a0880bde5694fcdea8e386ada0cd5ce:/aseg-paging/smi.c?ds=sidebyside diff --git a/aseg-paging/smi.c b/aseg-paging/smi.c index 7f75a85..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(); @@ -51,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);