-#include <io.h>
-#include <smram.h>
-#include <video_defines.h>
-#include <minilib.h>
-#include <smi.h>
-#include <pci-bother.h>
-#include "../net/net.h"
-#include "vga-overlay.h"
-
-#include "pagetable.h"
-
-unsigned int counter = 0;
-unsigned int lastctr = 0;
-unsigned long pcisave;
-unsigned char vgasave;
-
-void set_cr0(unsigned int);
-
-#define get_cr0() \
- ({ \
- register unsigned int _temp__; \
- asm volatile("mov %%cr0, %0" : "=r" (_temp__)); \
- _temp__; \
- })
-
-
-#define set_cr3(value) \
- { \
- register unsigned int _temp__ = (value); \
- asm volatile("mov %0, %%cr3" : : "r" (_temp__)); \
- }
-#define CR0_PG 0x80000000
-
-
-void smi_entry(void)
-{
-/*
- char statstr[512];
-*/
-
- outb(0x80, 0xBB);
- return;
-
- char * pagedir = pt_setup(0xA0000);
- outb(0x80, 0x43);
- set_cr3((int)pagedir);
- outb(0x80, 0xA5);
-
- /* Turn paging on */
- set_cr0(get_cr0() | CR0_PG);
- outb(0x80, 0xAA);
-
- pcisave = inl(0xCF8);
- vgasave = inb(0x3D4);
-/*
- pci_unbother_all();
- */
-
- counter++;
- /*
- sprintf(statstr, "15-412! %08x %08x", smi_status(), counter);
- strblit(statstr, 0, 0);
- */
-
- /*
- eth_poll();
- */
-
- if (inl(0x840) & 0x1000)
- {
- /*
- pci_dump();
- */
- outl(0x840, 0x1100);
- outl(0x840, 0x0100);
- }
-
-/*
- smi_poll();
-
- pci_bother_all();
- */
- outl(0xCF8, pcisave);
- outb(0x3D4, vgasave);
-}
-
-void timer_handler(smi_event_t ev)
-{
- static unsigned int ticks = 0;
-
- smi_disable_event(SMI_EVENT_FAST_TIMER);
- smi_enable_event(SMI_EVENT_FAST_TIMER);
-
- outb(0x80, (ticks++) & 0xFF);
-
- outlog();
-}
-
-
-void __firstrun_start() {
- smi_disable();
- outb(0x80, 0x41);
-
- smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler);
- smi_enable_event(SMI_EVENT_FAST_TIMER);
-
- smi_enable();
-}
-