1 | |
---|
2 | static void |
---|
3 | __outb(int port, unsigned char v) |
---|
4 | { |
---|
5 | *((volatile unsigned char *)(0x80000000 + port)) = v; |
---|
6 | } |
---|
7 | |
---|
8 | static unsigned char |
---|
9 | __inb(int port) |
---|
10 | { |
---|
11 | return *((volatile unsigned char *)(0x80000000 + port)); |
---|
12 | } |
---|
13 | |
---|
14 | static void |
---|
15 | __memcpy (unsigned char *d, unsigned char *s, int len) |
---|
16 | { |
---|
17 | while (len--) |
---|
18 | *d++ = *s++; |
---|
19 | } |
---|
20 | |
---|
21 | static void |
---|
22 | __bzero (unsigned char *d, int len) |
---|
23 | { |
---|
24 | while (len--) |
---|
25 | *d++ = 0; |
---|
26 | } |
---|
27 | |
---|
28 | extern unsigned char __sdata2_load[], __sdata2_start[], __sdata2_end[]; |
---|
29 | extern unsigned char __data_load[], __data_start[], __data_end[]; |
---|
30 | extern unsigned char __sdata_load[], __sdata_start[], __sdata_end[]; |
---|
31 | extern unsigned char __sbss2_start[], __sbss2_end[]; |
---|
32 | extern unsigned char __sbss_start[], __sbss_end[]; |
---|
33 | extern unsigned char __bss_start[], __bss_end[]; |
---|
34 | |
---|
35 | extern void boot_card(void *); |
---|
36 | |
---|
37 | |
---|
38 | void cmain (void) |
---|
39 | { |
---|
40 | /* |
---|
41 | * init variable sections |
---|
42 | */ |
---|
43 | __memcpy (__sdata2_start, __sdata2_load, __sdata2_end - __sdata2_start); |
---|
44 | __memcpy (__sdata_start , __sdata_load , __sdata_end - __sdata_start); |
---|
45 | __memcpy (__data_start , __data_load , __data_end - __data_start); |
---|
46 | __bzero (__sbss2_start , __sbss2_end - __sbss2_start); |
---|
47 | __bzero (__sbss_start , __sbss_end - __sbss_start); |
---|
48 | __bzero (__bss_start , __bss_end - __bss_start); |
---|
49 | printk( "start of BSP\n"); |
---|
50 | boot_card(0); |
---|
51 | printk( "end of BSP\n"); |
---|
52 | __outb (0x92, 0x01); |
---|
53 | while (1) |
---|
54 | ; |
---|
55 | } |
---|