]> Joshua Wise's Git repositories - netwatch.git/blob - aseg-paging/smi.c
instrument time spent in network
[netwatch.git] / aseg-paging / smi.c
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 <serial.h>
8 #include <fb.h>
9 #include <output.h>
10 #include "../net/net.h"
11 #include "vga-overlay.h"
12
13 unsigned int counter = 0;
14 unsigned long pcisave = 0;
15 unsigned char vgasave = 0;
16
17 void smi_entry(void)
18 {
19         char statstr[512];
20
21         pcisave = inl(0xCF8);
22         vgasave = inb(0x3D4);
23         pci_unbother_all();
24         
25         serial_init();
26         
27         if (fb)
28                 fb->getvmode(fb->priv);
29
30         counter++;
31         if (!fb || fb->curmode.text)
32         {
33                 sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter);
34                 strblit(statstr, 0, 0, 0);
35         }
36         
37         eth_poll();
38         
39         if (inl(0x840) & 0x1000)
40         {
41         /*
42                 pci_dump();
43         */
44                 outl(0x840, 0x1100);
45                 outl(0x840, 0x0100);
46         }
47
48
49         smi_poll();
50         
51         pci_bother_all();
52         outl(0xCF8, pcisave);
53         outb(0x3D4, vgasave);
54 }
55
56 extern void timer_handler(smi_event_t ev);
57 extern void kbc_handler(smi_event_t ev);
58 extern void gbl_rls_handler(smi_event_t ev);
59
60 void __firstrun_stub() {
61
62         /* Try really hard to shut up USB_LEGKEY. */
63         pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0));
64         pci_write16(0, 31, 2, 0xC0, 0);
65         pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0));
66         pci_write16(0, 31, 4, 0xC0, 0);
67
68         /* Turn on the SMIs we want */
69         smi_disable();
70
71         smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler);
72         smi_enable_event(SMI_EVENT_FAST_TIMER);
73
74         smi_register_handler(SMI_EVENT_DEVTRAP_KBC, kbc_handler);
75         smi_enable_event(SMI_EVENT_DEVTRAP_KBC);
76
77         smi_register_handler(SMI_EVENT_GBL_RLS, gbl_rls_handler);
78         smi_enable_event(SMI_EVENT_GBL_RLS);
79
80         smi_enable();
81 }
This page took 0.031584 seconds and 4 git commands to generate.