diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-11-24 13:57:48 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-11-24 13:57:48 +0000 |
commit | ba10bcb00ff0a66d19a7444e1a2dcd517d4738c3 (patch) | |
tree | e62bce09d067484349108268d85d4821c6ab4fc9 /tools/firmware/rombios | |
parent | 6641cb8ee3810c3d15de6250c45b2dccb6591c35 (diff) | |
download | xen-ba10bcb00ff0a66d19a7444e1a2dcd517d4738c3.tar.gz xen-ba10bcb00ff0a66d19a7444e1a2dcd517d4738c3.tar.bz2 xen-ba10bcb00ff0a66d19a7444e1a2dcd517d4738c3.zip |
hvmloader: Pass BDF to PCI option ROMs.
Signed-off-by: Shan Haitao <Haitao.shan@intel.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools/firmware/rombios')
-rw-r--r-- | tools/firmware/rombios/rombios.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/tools/firmware/rombios/rombios.c b/tools/firmware/rombios/rombios.c index 0edd371765..05ee9875c6 100644 --- a/tools/firmware/rombios/rombios.c +++ b/tools/firmware/rombios/rombios.c @@ -9677,20 +9677,35 @@ block_count_rounded: pop ds pop ax #endif - xor bx, bx ;; Restore DS back to 0000: - mov ds, bx push ax ;; Save AX push di ;; Save DI ;; Push addr of ROM entry point push cx ;; Push seg push #0x0003 ;; Push offset + ;; Get the BDF into ax before invoking the option ROM + mov bl, [2] + mov al, bl + shr al, #7 + cmp al, #1 + jne fetch_bdf + mov ax, ds ;; Increment the DS since rom size larger than an segment + add ax, #0x1000 + mov ds, ax +fetch_bdf: + shl bx, #9 + xor ax, ax + mov al, [bx] + ;; Point ES:DI at "$PnP", which tells the ROM that we are a PnP BIOS. ;; That should stop it grabbing INT 19h; we will use its BEV instead. - mov ax, #0xf000 - mov es, ax + mov bx, #0xf000 + mov es, bx lea di, pnp_string + xor bx, bx ;; Restore DS back to 0000: + mov ds, bx + mov bp, sp ;; Call ROM init routine using seg:off on stack db 0xff ;; call_far ss:[bp+0] db 0x5e |