summaryrefslogtreecommitdiff
path: root/pc-bios/bios.diff
blob: 647025b8898f3e9da3b994b86fb303286b5e5d2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Index: apmbios.S
===================================================================
RCS file: /cvsroot/bochs/bochs/bios/apmbios.S,v
retrieving revision 1.4
diff -u -w -r1.4 apmbios.S
--- apmbios.S	26 Dec 2005 10:35:51 -0000	1.4
+++ apmbios.S	28 Apr 2006 22:41:19 -0000
@@ -225,6 +225,7 @@
 APMSYM(05):
   cmp al, #0x05
   jne APMSYM(07)
+  sti
   hlt
   jmp APMSYM(ok)
 
Index: rombios.c
===================================================================
RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v
retrieving revision 1.160
diff -u -w -r1.160 rombios.c
--- rombios.c	25 Jan 2006 17:51:49 -0000	1.160
+++ rombios.c	28 Apr 2006 22:41:21 -0000
@@ -1816,6 +1816,7 @@
 {
   printf(BX_APPNAME" BIOS - build: %s\n%s\nOptions: ",
     BIOS_BUILD_DATE, bios_cvs_version_string);
+#if 0
   printf(
 #ifdef BX_APM
   "apmbios "
@@ -1827,6 +1828,9 @@
   "eltorito "
 #endif
   "\n\n");
+#else
+  printf("apmbios pcibios eltorito \n\n");
+#endif
 }
 
 //--------------------------------------------------------------------------
@@ -8713,6 +8717,7 @@
   mov al, #0x80
 bios32_end:
   popf
+  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
   retf
 
 .align 16
@@ -8823,17 +8828,17 @@
 pci_pro_fail:
   pop edi
   pop esi
-  sti
   popf
   stc
+  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
   retf
 pci_pro_ok:
   xor ah, ah
   pop edi
   pop esi
-  sti
   popf
   clc
+  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
   retf
 
 pci_pro_select_reg:
@@ -8971,7 +8976,7 @@
   jmp pci_real_ok
 pci_real_f0d: ;; write configuration dword
   cmp al, #0x0d
-  jne pci_real_unknown
+  jne pci_real_f0e
   call pci_real_select_reg
   push dx
   mov dx, #0x0cfc
@@ -8979,6 +8984,46 @@
   out dx, eax
   pop dx
   jmp pci_real_ok
+pci_real_f0e: ;; get irq routing options
+  cmp al, #0x0e
+  jne pci_real_unknown
+  SEG ES
+  cmp word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start
+  jb pci_real_too_small    
+  SEG ES
+  mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start        
+  pushf
+  push ds
+  push es
+  push cx
+  push si
+  push di
+  cld
+  mov si, #pci_routing_table_structure_start
+  push cs
+  pop ds
+  SEG ES
+  mov cx, [di+2]
+  SEG ES
+  mov es, [di+4]
+  mov di, cx
+  mov cx, #pci_routing_table_structure_end - pci_routing_table_structure_start
+  rep 
+      movsb
+  pop di
+  pop si
+  pop cx
+  pop es
+  pop ds
+  popf
+  mov bx, #(1 << 9) | (1 << 11)   ;; irq 9 and 11 are used
+  jmp pci_real_ok
+pci_real_too_small:
+  SEG ES
+  mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start        
+  mov ah, #0x89
+  jmp pci_real_fail
+
 pci_real_unknown:
   mov ah, #0x81
 pci_real_fail:
@@ -9019,6 +9064,7 @@
   dw 0,0 ;; Miniport data
   db 0,0,0,0,0,0,0,0,0,0,0 ;; reserved
   db 0x07 ;; checksum
+pci_routing_table_structure_start:
   ;; first slot entry PCI-to-ISA (embedded)
   db 0 ;; pci bus number
   db 0x08 ;; pci device number (bit 7-3)
@@ -9097,6 +9143,7 @@
   dw 0xdef8 ;; IRQ bitmap INTD#
   db 5 ;; physical slot (0 = embedded)
   db 0 ;; reserved
+pci_routing_table_structure_end:
 
 pci_irq_list:
   db 11, 10, 9, 5;