]> Joshua Wise's Git repositories - netwatch.git/blame - aseg-paging/paging.c
Working serial output in pagingland. Continues to run, too.
[netwatch.git] / aseg-paging / paging.c
CommitLineData
9e2a82e4
JP
1#include <io.h>
2#include <smram.h>
3#include <video_defines.h>
4#include <minilib.h>
5#include <smi.h>
6#include <pci-bother.h>
7#include "../net/net.h"
8#include "vga-overlay.h"
9
10#include "pagetable.h"
11
12unsigned int counter = 0;
13unsigned int lastctr = 0;
14unsigned long pcisave;
15unsigned char vgasave;
16
17void set_cr0(unsigned int);
18
19#define get_cr0() \
20 ({ \
21 register unsigned int _temp__; \
22 asm volatile("mov %%cr0, %0" : "=r" (_temp__)); \
23 _temp__; \
24 })
25
26
27#define set_cr3(value) \
28 { \
29 register unsigned int _temp__ = (value); \
30 asm volatile("mov %0, %%cr3" : : "r" (_temp__)); \
31 }
32#define CR0_PG 0x80000000
33
34
35void smi_entry(void)
36{
37/*
38 char statstr[512];
39*/
40
41 outb(0x80, 0xBB);
42 return;
43
44 char * pagedir = pt_setup(0xA0000);
45 outb(0x80, 0x43);
46 set_cr3((int)pagedir);
47 outb(0x80, 0xA5);
48
49 /* Turn paging on */
50 set_cr0(get_cr0() | CR0_PG);
51 outb(0x80, 0xAA);
52
53 pcisave = inl(0xCF8);
54 vgasave = inb(0x3D4);
55/*
56 pci_unbother_all();
57 */
58
59 counter++;
60 /*
61 sprintf(statstr, "15-412! %08x %08x", smi_status(), counter);
62 strblit(statstr, 0, 0);
63 */
64
65 /*
66 eth_poll();
67 */
68
69 if (inl(0x840) & 0x1000)
70 {
71 /*
72 pci_dump();
73 */
74 outl(0x840, 0x1100);
75 outl(0x840, 0x0100);
76 }
77
78/*
79 smi_poll();
80
81 pci_bother_all();
82 */
83 outl(0xCF8, pcisave);
84 outb(0x3D4, vgasave);
85}
86
87void timer_handler(smi_event_t ev)
88{
89 static unsigned int ticks = 0;
90
91 smi_disable_event(SMI_EVENT_FAST_TIMER);
92 smi_enable_event(SMI_EVENT_FAST_TIMER);
93
94 outb(0x80, (ticks++) & 0xFF);
95
96 outlog();
97}
98
99
100void __firstrun_start() {
101 smi_disable();
102 outb(0x80, 0x41);
103
104 smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler);
105 smi_enable_event(SMI_EVENT_FAST_TIMER);
106
107 smi_enable();
108}
109
This page took 0.028404 seconds and 4 git commands to generate.