VirtualBox

source: vbox/trunk/src/VBox/Devices/PC/BIOS-new/pcibio32.asm@ 40754

Last change on this file since 40754 was 40694, checked in by vboxsync, 12 years ago

BIOS: Make last searched bus/dev/fn configurable.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1;;
2;; Copyright (C) 2006-2011 Oracle Corporation
3;;
4;; This file is part of VirtualBox Open Source Edition (OSE), as
5;; available from http://www.virtualbox.org. This file is free software;
6;; you can redistribute it and/or modify it under the terms of the GNU
7;; General Public License (GPL) as published by the Free Software
8;; Foundation, in version 2 as it comes in the "COPYING" file of the
9;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
10;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
11;; --------------------------------------------------------------------
12;;
13;; This code is based on:
14;;
15;; ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
16;;
17;; Copyright (C) 2002 MandrakeSoft S.A.
18;;
19;; MandrakeSoft S.A.
20;; 43, rue d'Aboukir
21;; 75002 Paris - France
22;; http://www.linux-mandrake.com/
23;; http://www.mandrakesoft.com/
24;;
25;; This library is free software; you can redistribute it and/or
26;; modify it under the terms of the GNU Lesser General Public
27;; License as published by the Free Software Foundation; either
28;; version 2 of the License, or (at your option) any later version.
29;;
30;; This library is distributed in the hope that it will be useful,
31;; but WITHOUT ANY WARRANTY; without even the implied warranty of
32;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
33;; Lesser General Public License for more details.
34;;
35;; You should have received a copy of the GNU Lesser General Public
36;; License along with this library; if not, write to the Free Software
37;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
38;;
39;;
40
41include pcicfg.inc
42
43if BX_PCIBIOS
44
45.386
46
47BIOS32 segment public 'CODE' use32
48
49public pcibios_protected
50
51align 16
52bios32_structure:
53 db '_32_' ; signature
54 dw bios32_entry_point, 0Fh ;; 32 bit physical address
55 db 0 ; revision level
56 db 1 ; length in paragraphs
57 db 0 ; checksum (updated externally)
58 db 0,0,0,0,0 ; reserved
59
60align 16
61bios32_entry_point:
62 pushfd
63 cmp eax, 'ICP$' ; 0x49435024 "$PCI"
64 jne unknown_service
65
66ifdef PCI_FIXED_HOST_BRIDGE_1
67 mov eax, 80000000h
68 mov dx, PCI_CFG1
69 out dx, eax
70 mov dx, PCI_CFG2
71 in eax, dx
72 cmp eax, PCI_FIXED_HOST_BRIDGE_1
73 je device_ok
74endif
75
76ifdef PCI_FIXED_HOST_BRIDGE_2
77 ; 1Eh << 11
78 mov eax, 8000f000h
79 mov dx, PCI_CFG1
80 out dx, eax
81 mov dx, PCI_CFG2
82 in eax, dx
83 cmp eax, PCI_FIXED_HOST_BRIDGE_2
84 je device_ok
85endif
86 jmp unknown_service
87device_ok:
88 mov ebx, 000f0000h
89 mov ecx, 0
90 mov edx, pcibios_protected
91 xor al, al
92 jmp bios32_end
93
94unknown_service:
95 mov al, 80h
96bios32_end:
97 popfd
98 retf
99
100align 16
101pcibios_protected:
102 pushfd
103 cli
104 push esi
105 push edi
106 cmp al, 1 ; installation check
107 jne pci_pro_f02
108
109 mov bx, 0210h
110 mov cx, 0
111 mov edx, ' ICP' ; 0x20494350 "PCI "
112 mov al, 1
113 jmp pci_pro_ok
114
115pci_pro_f02: ;; find pci device
116 cmp al, 2
117 jne pci_pro_f03
118
119 shl ecx, 16
120 mov cx, dx
121 xor ebx, ebx
122 mov di, 0
123pci_pro_devloop:
124 call pci_pro_select_reg
125 mov dx, PCI_CFG2
126 in eax, dx
127 cmp eax, ecx
128 jne pci_pro_nextdev
129
130 cmp si, 0
131 je pci_pro_ok
132
133 dec si
134pci_pro_nextdev:
135 inc ebx
136 cmp ebx, MAX_BUSDEVFN
137 jne pci_pro_devloop
138
139 mov ah, 86h
140 jmp pci_pro_fail
141
142pci_pro_f03: ;; find class code
143 cmp al, 3
144 jne pci_pro_f08
145
146 xor ebx, ebx
147 mov di, 8
148pci_pro_devloop2:
149 call pci_pro_select_reg
150 mov dx, PCI_CFG2
151 in eax, dx
152 shr eax, 8
153 cmp eax, ecx
154 jne pci_pro_nextdev2
155
156 cmp si, 0
157 je pci_pro_ok
158
159 dec si
160pci_pro_nextdev2:
161 inc ebx
162 cmp ebx, MAX_BUSDEVFN
163 jne pci_pro_devloop2
164
165 mov ah, 86h
166 jmp pci_pro_fail
167
168pci_pro_f08: ;; read configuration byte
169 cmp al, 8
170 jne pci_pro_f09
171
172 call pci_pro_select_reg
173 push edx
174 mov dx, di
175 and dx, 3
176 add dx, PCI_CFG2
177 in al, dx
178 pop edx
179 mov cl, al
180 jmp pci_pro_ok
181
182pci_pro_f09: ;; read configuration word
183 cmp al, 9
184 jne pci_pro_f0a
185
186 call pci_pro_select_reg
187 push edx
188 mov dx, di
189 and dx, 2
190 add dx, PCI_CFG2
191 in ax, dx
192 pop edx
193 mov cx, ax
194 jmp pci_pro_ok
195
196pci_pro_f0a: ;; read configuration dword
197 cmp al, 0Ah
198 jne pci_pro_f0b
199
200 call pci_pro_select_reg
201 push edx
202 mov dx, PCI_CFG2
203 in eax, dx
204 pop edx
205 mov ecx, eax
206 jmp pci_pro_ok
207
208pci_pro_f0b: ;; write configuration byte
209 cmp al, 0Bh
210 jne pci_pro_f0c
211
212 call pci_pro_select_reg
213 push edx
214 mov dx, di
215 and dx, 3
216 add dx, PCI_CFG2
217 mov al, cl
218 out dx, al
219 pop edx
220 jmp pci_pro_ok
221
222pci_pro_f0c: ;; write configuration word
223 cmp al, 0Ch
224 jne pci_pro_f0d
225
226 call pci_pro_select_reg
227 push edx
228 mov dx, di
229 and dx, 2
230 add dx, PCI_CFG2
231 mov ax, cx
232 out dx, ax
233 pop edx
234 jmp pci_pro_ok
235
236pci_pro_f0d: ;; write configuration dword
237 cmp al, 0Dh
238 jne pci_pro_unknown
239 call pci_pro_select_reg
240 push edx
241 mov dx, PCI_CFG2
242 mov eax, ecx
243 out dx, eax
244 pop edx
245 jmp pci_pro_ok
246
247pci_pro_unknown:
248 mov ah, 81h
249pci_pro_fail:
250 pop edi
251 pop esi
252 popfd
253 stc
254 retf
255
256pci_pro_ok:
257 xor ah, ah
258 pop edi
259 pop esi
260 popfd
261 clc
262 retf
263
264pci_pro_select_reg:
265 push edx
266 mov eax, 800000h
267 mov ax, bx
268 shl eax, 8
269 and di, 0FFh
270 or ax, di
271 and al, 0FCh
272 mov dx, PCI_CFG1
273 out dx, eax
274 pop edx
275 ret
276
277BIOS32 ends
278
279endif ; BX_PCIBIOS
280
281 end
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use