mirror of
https://github.com/xcat2/xNBA.git
synced 2024-11-22 09:31:51 +00:00
[romprefix] Sanity-check the runtime segment address for PCI 3
Some PCI 3 BIOSes seem to provide a garbage value in %bx, which should contain the runtime segment address. Perform a basic sanity check: we reject the segment if it is below the start of option ROM space. If the sanity check fails, we assume that the BIOS was not expecting us to be a PCI 3 ROM, and we just leave our image in situ.
This commit is contained in:
parent
7982e79d3c
commit
5600955bdd
@ -205,7 +205,16 @@ init:
|
||||
movb %bl, %al
|
||||
call print_hex_byte
|
||||
cmpb $3, %bh
|
||||
jb 1f
|
||||
/* PCI >=3.0: leave %gs as-is if sane */
|
||||
movw %gs, %ax
|
||||
cmpw $0xc000, %ax
|
||||
jae 2f
|
||||
/* PCI 3.0 with insane %gs value: print error and ignore %gs */
|
||||
movb $'!', %al
|
||||
call print_character
|
||||
movw %gs, %ax
|
||||
call print_hex_word
|
||||
1: /* PCI <3.0: set %gs (runtime segment) = %cs (init-time segment) */
|
||||
pushw %cs
|
||||
popw %gs
|
||||
|
Loading…
Reference in New Issue
Block a user