aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-12-09 12:41:12 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-12-09 12:41:12 +0000
commit25fc0e6b2778fecfc631a7a523351202a3a10295 (patch)
treecc9200ebdd4b8398615ddaa228179cd2da3edc1e /tools
parenta046a6dc893165068ee4e6692b152da828dc1970 (diff)
downloadxen-25fc0e6b2778fecfc631a7a523351202a3a10295.tar.gz
xen-25fc0e6b2778fecfc631a7a523351202a3a10295.tar.bz2
xen-25fc0e6b2778fecfc631a7a523351202a3a10295.zip
rombios: support BCV
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com> Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/firmware/rombios/rombios.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/firmware/rombios/rombios.c b/tools/firmware/rombios/rombios.c
index 05ee9875c6..c2ca5c51b8 100644
--- a/tools/firmware/rombios/rombios.c
+++ b/tools/firmware/rombios/rombios.c
@@ -9725,6 +9725,30 @@ fetch_bdf:
mov ax, 2[bx]
cmp ax, #0x506e
jne no_bev
+
+ mov ax, 0x16[bx] ;; 0x16 is the offset of Boot Connection Vector
+ cmp ax, #0x0000
+ je no_bcv
+
+ ;; Option ROM has BCV. Run it now.
+ push cx ;; Push seg
+ push ax ;; Push offset
+
+ ;; Point ES:DI at "$PnP", which tells the ROM that we are a PnP BIOS.
+ mov bx, #0xf000
+ mov es, bx
+ lea di, pnp_string
+ /* jump to BCV function entry pointer */
+ mov bp, sp ;; Call ROM BCV routine using seg:off on stack
+ db 0xff ;; call_far ss:[bp+0]
+ db 0x5e
+ db 0
+ cli ;; In case expansion ROM BIOS turns IF on
+ add sp, #2 ;; Pop offset value
+ pop cx ;; Pop seg value (restore CX)
+ ja no_bev
+
+no_bcv:
mov ax, 0x1a[bx] ;; 0x1A is also the offset into the expansion header of...
cmp ax, #0x0000 ;; the Bootstrap Entry Vector, or zero if there is none.
je no_bev