Revision 10765455
b/pc-bios/bios.diff | ||
---|---|---|
4 | 4 |
retrieving revision 1.4 |
5 | 5 |
diff -u -w -r1.4 apmbios.S |
6 | 6 |
--- apmbios.S 26 Dec 2005 10:35:51 -0000 1.4 |
7 |
+++ apmbios.S 28 Apr 2006 22:41:19 -0000
|
|
7 |
+++ apmbios.S 3 May 2006 21:22:46 -0000
|
|
8 | 8 |
@@ -225,6 +225,7 @@ |
9 | 9 |
APMSYM(05): |
10 | 10 |
cmp al, #0x05 |
... | ... | |
19 | 19 |
retrieving revision 1.160 |
20 | 20 |
diff -u -w -r1.160 rombios.c |
21 | 21 |
--- rombios.c 25 Jan 2006 17:51:49 -0000 1.160 |
22 |
+++ rombios.c 28 Apr 2006 22:41:21 -0000
|
|
22 |
+++ rombios.c 3 May 2006 21:22:48 -0000
|
|
23 | 23 |
@@ -1816,6 +1816,7 @@ |
24 | 24 |
{ |
25 | 25 |
printf(BX_APPNAME" BIOS - build: %s\n%s\nOptions: ", |
... | ... | |
38 | 38 |
} |
39 | 39 |
|
40 | 40 |
//-------------------------------------------------------------------------- |
41 |
@@ -8713,6 +8717,7 @@ |
|
41 |
@@ -3999,6 +4003,29 @@ |
|
42 |
} |
|
43 |
#endif |
|
44 |
|
|
45 |
+ |
|
46 |
+void set_e820_range(ES, DI, start, end, type) |
|
47 |
+ Bit16u ES; |
|
48 |
+ Bit16u DI; |
|
49 |
+ Bit32u start; |
|
50 |
+ Bit32u end; |
|
51 |
+ Bit16u type; |
|
52 |
+{ |
|
53 |
+ write_word(ES, DI, start); |
|
54 |
+ write_word(ES, DI+2, start >> 16); |
|
55 |
+ write_word(ES, DI+4, 0x00); |
|
56 |
+ write_word(ES, DI+6, 0x00); |
|
57 |
+ |
|
58 |
+ end -= start; |
|
59 |
+ write_word(ES, DI+8, end); |
|
60 |
+ write_word(ES, DI+10, end >> 16); |
|
61 |
+ write_word(ES, DI+12, 0x0000); |
|
62 |
+ write_word(ES, DI+14, 0x0000); |
|
63 |
+ |
|
64 |
+ write_word(ES, DI+16, type); |
|
65 |
+ write_word(ES, DI+18, 0x0); |
|
66 |
+} |
|
67 |
+ |
|
68 |
void |
|
69 |
int15_function32(regs, ES, DS, FLAGS) |
|
70 |
pushad_regs_t regs; // REGS pushed via pushad |
|
71 |
@@ -4063,19 +4090,8 @@ |
|
72 |
switch(regs.u.r16.bx) |
|
73 |
{ |
|
74 |
case 0: |
|
75 |
- write_word(ES, regs.u.r16.di, 0x00); |
|
76 |
- write_word(ES, regs.u.r16.di+2, 0x00); |
|
77 |
- write_word(ES, regs.u.r16.di+4, 0x00); |
|
78 |
- write_word(ES, regs.u.r16.di+6, 0x00); |
|
79 |
- |
|
80 |
- write_word(ES, regs.u.r16.di+8, 0xFC00); |
|
81 |
- write_word(ES, regs.u.r16.di+10, 0x0009); |
|
82 |
- write_word(ES, regs.u.r16.di+12, 0x0000); |
|
83 |
- write_word(ES, regs.u.r16.di+14, 0x0000); |
|
84 |
- |
|
85 |
- write_word(ES, regs.u.r16.di+16, 0x1); |
|
86 |
- write_word(ES, regs.u.r16.di+18, 0x0); |
|
87 |
- |
|
88 |
+ set_e820_range(ES, regs.u.r16.di, |
|
89 |
+ 0x0000000L, 0x0009fc00L, 1); |
|
90 |
regs.u.r32.ebx = 1; |
|
91 |
regs.u.r32.eax = 0x534D4150; |
|
92 |
regs.u.r32.ecx = 0x14; |
|
93 |
@@ -4083,6 +4099,24 @@ |
|
94 |
return; |
|
95 |
break; |
|
96 |
case 1: |
|
97 |
+ set_e820_range(ES, regs.u.r16.di, |
|
98 |
+ 0x0009fc00L, 0x000a0000L, 2); |
|
99 |
+ regs.u.r32.ebx = 2; |
|
100 |
+ regs.u.r32.eax = 0x534D4150; |
|
101 |
+ regs.u.r32.ecx = 0x14; |
|
102 |
+ CLEAR_CF(); |
|
103 |
+ return; |
|
104 |
+ break; |
|
105 |
+ case 2: |
|
106 |
+ set_e820_range(ES, regs.u.r16.di, |
|
107 |
+ 0x000e8000L, 0x00100000L, 2); |
|
108 |
+ regs.u.r32.ebx = 3; |
|
109 |
+ regs.u.r32.eax = 0x534D4150; |
|
110 |
+ regs.u.r32.ecx = 0x14; |
|
111 |
+ CLEAR_CF(); |
|
112 |
+ return; |
|
113 |
+ break; |
|
114 |
+ case 3: |
|
115 |
extended_memory_size = inb_cmos(0x35); |
|
116 |
extended_memory_size <<= 8; |
|
117 |
extended_memory_size |= inb_cmos(0x34); |
|
118 |
@@ -4092,9 +4126,9 @@ |
|
119 |
extended_memory_size = 0x3bc000; // everything after this is reserved memory until we get to 0x100000000 |
|
120 |
} |
|
121 |
extended_memory_size *= 1024; |
|
122 |
- extended_memory_size += 15728640; // make up for the 16mb of memory that is chopped off |
|
123 |
+ extended_memory_size += (16L * 1024 * 1024); |
|
124 |
|
|
125 |
- if(extended_memory_size <= 15728640) |
|
126 |
+ if(extended_memory_size <= (16L * 1024 * 1024)) |
|
127 |
{ |
|
128 |
extended_memory_size = inb_cmos(0x31); |
|
129 |
extended_memory_size <<= 8; |
|
130 |
@@ -4102,28 +4136,23 @@ |
|
131 |
extended_memory_size *= 1024; |
|
132 |
} |
|
133 |
|
|
134 |
- write_word(ES, regs.u.r16.di, 0x0000); |
|
135 |
- write_word(ES, regs.u.r16.di+2, 0x0010); |
|
136 |
- write_word(ES, regs.u.r16.di+4, 0x0000); |
|
137 |
- write_word(ES, regs.u.r16.di+6, 0x0000); |
|
138 |
- |
|
139 |
- write_word(ES, regs.u.r16.di+8, extended_memory_size); |
|
140 |
- extended_memory_size >>= 16; |
|
141 |
- write_word(ES, regs.u.r16.di+10, extended_memory_size); |
|
142 |
- extended_memory_size >>= 16; |
|
143 |
- write_word(ES, regs.u.r16.di+12, extended_memory_size); |
|
144 |
- extended_memory_size >>= 16; |
|
145 |
- write_word(ES, regs.u.r16.di+14, extended_memory_size); |
|
146 |
- |
|
147 |
- write_word(ES, regs.u.r16.di+16, 0x1); |
|
148 |
- write_word(ES, regs.u.r16.di+18, 0x0); |
|
149 |
- |
|
150 |
- regs.u.r32.ebx = 0; |
|
151 |
+ set_e820_range(ES, regs.u.r16.di, |
|
152 |
+ 0x00100000L, extended_memory_size, 1); |
|
153 |
+ regs.u.r32.ebx = 4; |
|
154 |
regs.u.r32.eax = 0x534D4150; |
|
155 |
regs.u.r32.ecx = 0x14; |
|
156 |
CLEAR_CF(); |
|
157 |
return; |
|
158 |
break; |
|
159 |
+ case 4: |
|
160 |
+ /* 256KB BIOS area at the end of 4 GB */ |
|
161 |
+ set_e820_range(ES, regs.u.r16.di, |
|
162 |
+ 0xfffc0000L, 0x00000000L, 2); |
|
163 |
+ regs.u.r32.ebx = 0; |
|
164 |
+ regs.u.r32.eax = 0x534D4150; |
|
165 |
+ regs.u.r32.ecx = 0x14; |
|
166 |
+ CLEAR_CF(); |
|
167 |
+ return; |
|
168 |
default: /* AX=E820, DX=534D4150, BX unrecognized */ |
|
169 |
goto int15_unimplemented; |
|
170 |
break; |
|
171 |
@@ -8713,6 +8742,7 @@ |
|
42 | 172 |
mov al, #0x80 |
43 | 173 |
bios32_end: |
44 | 174 |
popf |
... | ... | |
46 | 176 |
retf |
47 | 177 |
|
48 | 178 |
.align 16 |
49 |
@@ -8823,17 +8828,17 @@
|
|
179 |
@@ -8823,17 +8853,17 @@
|
|
50 | 180 |
pci_pro_fail: |
51 | 181 |
pop edi |
52 | 182 |
pop esi |
... | ... | |
66 | 196 |
retf |
67 | 197 |
|
68 | 198 |
pci_pro_select_reg: |
69 |
@@ -8971,7 +8976,7 @@
|
|
199 |
@@ -8971,7 +9001,7 @@
|
|
70 | 200 |
jmp pci_real_ok |
71 | 201 |
pci_real_f0d: ;; write configuration dword |
72 | 202 |
cmp al, #0x0d |
... | ... | |
75 | 205 |
call pci_real_select_reg |
76 | 206 |
push dx |
77 | 207 |
mov dx, #0x0cfc |
78 |
@@ -8979,6 +8984,46 @@
|
|
208 |
@@ -8979,6 +9009,46 @@
|
|
79 | 209 |
out dx, eax |
80 | 210 |
pop dx |
81 | 211 |
jmp pci_real_ok |
... | ... | |
122 | 252 |
pci_real_unknown: |
123 | 253 |
mov ah, #0x81 |
124 | 254 |
pci_real_fail: |
125 |
@@ -9019,6 +9064,7 @@
|
|
255 |
@@ -9019,6 +9089,7 @@
|
|
126 | 256 |
dw 0,0 ;; Miniport data |
127 | 257 |
db 0,0,0,0,0,0,0,0,0,0,0 ;; reserved |
128 | 258 |
db 0x07 ;; checksum |
... | ... | |
130 | 260 |
;; first slot entry PCI-to-ISA (embedded) |
131 | 261 |
db 0 ;; pci bus number |
132 | 262 |
db 0x08 ;; pci device number (bit 7-3) |
133 |
@@ -9097,6 +9143,7 @@
|
|
263 |
@@ -9097,6 +9168,7 @@
|
|
134 | 264 |
dw 0xdef8 ;; IRQ bitmap INTD# |
135 | 265 |
db 5 ;; physical slot (0 = embedded) |
136 | 266 |
db 0 ;; reserved |
Also available in: Unified diff