Revision e3e97e7c

b/pc-bios/bios.diff
1
Index: BIOS-bochs-latest
2
===================================================================
3
RCS file: /cvsroot/bochs/bochs/bios/BIOS-bochs-latest,v
4
retrieving revision 1.133
5
diff -u -w -r1.133 BIOS-bochs-latest
6
Binary files /tmp/cvsrjjP5I and BIOS-bochs-latest differ
7
Index: rombios.c
8
===================================================================
9
RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v
10
retrieving revision 1.170
11
diff -u -w -r1.170 rombios.c
12
--- rombios.c	30 Sep 2006 11:22:53 -0000	1.170
13
+++ rombios.c	1 Oct 2006 16:03:53 -0000
14
@@ -4115,7 +4115,7 @@
15
                     case 3:
16
                         set_e820_range(ES, regs.u.r16.di, 
17
                                        0x00100000L, 
18
-                                       extended_memory_size - 0x10000L, 1);
19
+                                       extended_memory_size - ACPI_DATA_SIZE, 1);
20
                         regs.u.r32.ebx = 4;
21
                         regs.u.r32.eax = 0x534D4150;
22
                         regs.u.r32.ecx = 0x14;
23
@@ -4124,7 +4124,7 @@
24
                         break;
25
                     case 4:
26
                         set_e820_range(ES, regs.u.r16.di, 
27
-                                       extended_memory_size - 0x10000L, 
28
+                                       extended_memory_size - ACPI_DATA_SIZE, 
29
                                        extended_memory_size, 3); // ACPI RAM
30
                         regs.u.r32.ebx = 5;
31
                         regs.u.r32.eax = 0x534D4150;
32
@@ -8723,7 +8723,7 @@
33
 
34
 .align 16
35
 bios32_entry_point:
36
-  pushf
37
+  pushfd
38
   cmp eax, #0x49435024 ;; "$PCI"
39
   jne unknown_service
40
   mov eax, #0x80000000
41
@@ -8750,12 +8750,12 @@
42
 #ifdef BX_QEMU
43
   and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu
44
 #endif
45
-  popf
46
+  popfd
47
   retf
48
 
49
 .align 16
50
 pcibios_protected:
51
-  pushf
52
+  pushfd
53
   cli
54
   push esi
55
   push edi
56
@@ -8864,7 +8864,7 @@
57
 #ifdef BX_QEMU
58
   and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu
59
 #endif
60
-  popf
61
+  popfd
62
   stc
63
   retf
64
 pci_pro_ok:
65
@@ -8874,7 +8874,7 @@
66
 #ifdef BX_QEMU
67
   and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu
68
 #endif
69
-  popf
70
+  popfd
71
   clc
72
   retf
73
 
74 1
Index: rombios.h
75 2
===================================================================
76 3
RCS file: /cvsroot/bochs/bochs/bios/rombios.h,v
77
retrieving revision 1.1
78
diff -u -w -r1.1 rombios.h
79
--- rombios.h	30 Sep 2006 11:22:53 -0000	1.1
80
+++ rombios.h	1 Oct 2006 16:03:54 -0000
4
retrieving revision 1.2
5
diff -u -w -r1.2 rombios.h
6
--- rombios.h	1 Oct 2006 16:39:18 -0000	1.2
7
+++ rombios.h	2 Oct 2006 18:31:41 -0000
81 8
@@ -19,7 +19,7 @@
82 9
 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
83 10
 
......
87 14
 
88 15
 #define BX_ROMBIOS32     1
89 16
 #define DEBUG_ROMBIOS    0
90
@@ -48,3 +48,7 @@
91
 #endif
92
 #define BX_INFO(format, p...)   bios_printf(BIOS_PRINTF_INFO, format, ##p)
93
 #define BX_PANIC(format, p...)  bios_printf(BIOS_PRINTF_DEBHALT, format, ##p)
94
+
95
+#define ACPI_DATA_SIZE    0x00010000L
96
+#define PM_IO_BASE        0xb000
97
+#define CPU_COUNT_ADDR    0xf000
98 17
Index: rombios32.c
99 18
===================================================================
100 19
RCS file: /cvsroot/bochs/bochs/bios/rombios32.c,v
101
retrieving revision 1.4
102
diff -u -w -r1.4 rombios32.c
103
--- rombios32.c	30 Sep 2006 11:22:53 -0000	1.4
104
+++ rombios32.c	1 Oct 2006 16:03:54 -0000
105
@@ -55,13 +55,10 @@
20
retrieving revision 1.6
21
diff -u -w -r1.6 rombios32.c
22
--- rombios32.c	2 Oct 2006 06:29:37 -0000	1.6
23
+++ rombios32.c	2 Oct 2006 18:31:41 -0000
24
@@ -45,6 +45,8 @@
25
                 : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \
26
                 : "0" (index))
106 27
 
107
 #define APIC_ENABLED 0x0100
28
+#define wbinvd() asm volatile("wbinvd")
29
+
30
 #define CPUID_APIC (1 << 9)
108 31
 
109
-#define CPU_COUNT_ADDR 0xf000
110
 #define AP_BOOT_ADDR 0x10000
32
 #define APIC_BASE    ((uint8_t *)0xfee00000)
33
@@ -591,6 +593,7 @@
34
     PCIDevice *d = &i440_pcidev;
35
     int v;
111 36
 
112
 #define MPTABLE_MAX_SIZE  0x00002000
113
-#define ACPI_DATA_SIZE    0x00010000
114
 #define SMI_CMD_IO_ADDR   0xb2
115
-#define PM_IO_BASE        0xb000
37
+    wbinvd();
38
     v = pci_config_readb(d, 0x59);
39
     v = (v & 0x0f) | (0x10);
40
     pci_config_writeb(d, 0x59, v);
41
@@ -645,7 +648,7 @@
42
     outb(0xb3, 0x01);
116 43
 
117
 #define BIOS_TMP_STORAGE  0x00030000 /* 64 KB used to copy the BIOS to shadow RAM */
44
     /* raise an SMI interrupt */
45
-    outb(0xb2, 0x01);
46
+    outb(0xb2, 0x00);
118 47
 
119
@@ -354,12 +351,14 @@
48
     /* wait until SMM code executed */
49
     while (inb(0xb3) != 0x00);
50
@@ -656,6 +659,7 @@
51
     /* copy the SMM code */
52
     memcpy((void *)0xa8000, &smm_code_start,
53
            &smm_code_end - &smm_code_start);
54
+    wbinvd();
55
     
56
     /* close the SMM memory window and enable normal SMM */
57
     pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x08);
58
@@ -848,6 +852,11 @@
59
     int ioapic_id, i, len;
60
     int mp_config_table_size;
120 61
 
121
 void delay_ms(int n)
122
 {
123
-    int i, j, r1, r2;
124
+    int i, j;
125
     for(i = 0; i < n; i++) {
126
-#if BX_QEMU
127 62
+#ifdef BX_QEMU
128
         /* approximative ! */
129
         for(j = 0; j < 1000000; j++);
130
 #else
131
+        {
132
+            int r1, r2;
133
         j = 66;
134
         r1 = inb(0x61) & 0x10;
135
         do {
136
@@ -369,6 +368,7 @@
137
                 r1 = r2;
138
             }
139
         } while (j > 0);
140
+        }
141
 #endif
142
     }
143
 }
144
Index: rombios32start.S
145
===================================================================
146
RCS file: /cvsroot/bochs/bochs/bios/rombios32start.S,v
147
retrieving revision 1.1
148
diff -u -w -r1.1 rombios32start.S
149
--- rombios32start.S	28 Sep 2006 18:56:20 -0000	1.1
150
+++ rombios32start.S	1 Oct 2006 16:03:54 -0000
151
@@ -1,3 +1,25 @@
152
+/////////////////////////////////////////////////////////////////////////
153
+// $Id: bios.diff,v 1.15 2006-10-01 16:08:15 bellard Exp $
154
+/////////////////////////////////////////////////////////////////////////
155
+//
156
+//  32 bit Bochs BIOS init code
157
+//  Copyright (C) 2006 Fabrice Bellard
158
+//
159
+//  This library is free software; you can redistribute it and/or
160
+//  modify it under the terms of the GNU Lesser General Public
161
+//  License as published by the Free Software Foundation; either
162
+//  version 2 of the License, or (at your option) any later version.
163
+//
164
+//  This library is distributed in the hope that it will be useful,
165
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
166
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
167
+//  Lesser General Public License for more details.
168
+//
169
+//  You should have received a copy of the GNU Lesser General Public
170
+//  License along with this library; if not, write to the Free Software
171
+//  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
172
+#include "rombios.h"
63
+    if (smp_cpus <= 1)
64
+        return;
65
+#endif
173 66
+
174
 .globl _start
175
 .globl smp_ap_boot_code_start
176
 .globl smp_ap_boot_code_end
177
@@ -6,8 +28,6 @@
178
 .global smm_code_start
179
 .global smm_code_end
180
 
181
-#define PM_IO_BASE        0xb000
182
-
183
 _start:
184
   /* clear bss section */
185
   xor %eax, %eax
186
@@ -18,13 +38,11 @@
187
 
188
   jmp rombios32_init
189
 
190
-#define CPU_COUNT 0xf000
191
-
192
   .code16                        
193
 smp_ap_boot_code_start:
194
   xor %ax, %ax
195
   mov %ax, %ds
196
-  incw CPU_COUNT
197
+  incw CPU_COUNT_ADDR
198
 1:
199
   hlt
200
   jmp 1b
201
@@ -33,7 +51,7 @@
202
 /* code to relocate SMBASE to 0xa0000 */
203
 smm_relocation_start:
204
   mov $0x38000 + 0x7efc, %ebx
205
-  mov (%ebx), %al  /* revision ID to see if x86_64 or x86 */
206
+  addr32 mov (%ebx), %al  /* revision ID to see if x86_64 or x86 */
207
   cmp $0x64, %al
208
   je 1f
209
   mov $0x38000 + 0x7ef8, %ebx
210
@@ -42,7 +60,7 @@
211
   mov $0x38000 + 0x7f00, %ebx
212
 2:
213
   movl $0xa0000, %eax
214
-  movl %eax, (%ebx)
215
+  addr32 movl %eax, (%ebx)
216
   rsm                
217
 smm_relocation_end:
218
         
67
 #ifdef BX_USE_EBDA_TABLES
68
     mp_config_table = (uint8_t *)(ram_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE);
69
 #else

Also available in: Unified diff