2
0
mirror of https://github.com/xcat2/xcat-dep.git synced 2024-11-23 18:10:03 +00:00
xcat-dep/gpxe/gpxe-1.0.0-int18boot.patch

125 lines
3.4 KiB
Diff
Raw Normal View History

diff -urN gpxe-1.0.0/src/arch/i386/prefix/romprefix.S gpxe-1.0.0-int18boot/src/arch/i386/prefix/romprefix.S
--- gpxe-1.0.0/src/arch/i386/prefix/romprefix.S 2010-02-06 14:20:06.000000000 -0500
+++ gpxe-1.0.0-int18boot/src/arch/i386/prefix/romprefix.S 2010-02-06 14:19:39.000000000 -0500
@@ -169,7 +169,7 @@
* Determine whether or not this is a PnP system via a signature
* check. If it is PnP, return to the PnP BIOS indicating that we are
* a boot-capable device; the BIOS will call our boot execution vector
- * if it wants to boot us. If it is not PnP, hook INT 19.
+ * if it wants to boot us. If it is not PnP, hook INT 18.
*/
init:
/* Preserve registers, clear direction flag, set %ds=%cs */
@@ -301,17 +301,15 @@
testw %ax, %ax
je got_bbs
no_pnp: /* Not PnP-compliant - therefore cannot be BBS-compliant */
-no_bbs: /* Not BBS-compliant - must hook INT 19 */
- movw $init_message_int19, %si
+no_bbs: /* Not BBS-compliant - must hook INT 18 */
+ movw $init_message_int18, %si
xorw %di, %di
call print_message
xorw %ax, %ax
movw %ax, %es
- pushl %es:( 0x19 * 4 )
- popl orig_int19
pushw %gs /* %gs contains runtime %cs */
- pushw $int19_entry
- popl %es:( 0x19 * 4 )
+ pushw $int18_entry
+ popl %es:( 0x18 * 4 )
jmp bbs_done
got_bbs: /* BBS compliant - no need to hook INT 19 */
movw $init_message_bbs, %si
@@ -535,9 +533,9 @@
.asciz "\nPMM required but not present!\n"
.size init_message_no_pmm, . - init_message_no_pmm
#endif
-init_message_int19:
- .asciz " INT19"
- .size init_message_int19, . - init_message_int19
+init_message_int18:
+ .asciz " INT18"
+ .size init_message_int18, . - init_message_int18
init_message_prompt:
.asciz "\nPress Ctrl-B to configure "
.size init_message_prompt, . - init_message_prompt
@@ -887,58 +885,29 @@
#endif /* LOAD_ROM_FROM_PCI */
-/* INT19 entry point
+/* INT18 entry point
*
- * Called via the hooked INT 19 if we detected a non-PnP BIOS. We
- * attempt to return via the original INT 19 vector (if we were able
- * to store it).
+ * Called via the hooked INT 18 if we detected a non-PnP BIOS. We
+ * use iret to return.
*/
-int19_entry:
- pushw %cs
- popw %ds
- /* Prompt user to press B to boot */
- movw $int19_message_prompt, %si
- xorw %di, %di
- call print_message
- movw $prodstr, %si
- call print_message
- movw $int19_message_dots, %si
- call print_message
- movw $0xdf4e, %bx
- call wait_for_key
- pushf
- xorw %di, %di
- call print_kill_line
- movw $int19_message_done, %si
- call print_message
- popf
- jz 1f
- /* Leave keypress in buffer and start gPXE. The keypress will
- * cause the usual initial Ctrl-B prompt to be skipped.
- */
+int18_entry:
+ pushfl
+ pushal
+ pushw %gs
+ pushw %fs
+ pushw %es
+ pushw %ds
pushw %cs
call exec
-1: /* Try to call original INT 19 vector */
- movl %cs:orig_int19, %eax
- testl %eax, %eax
- je 2f
- ljmp *%cs:orig_int19
-2: /* No chained vector: issue INT 18 as a last resort */
- int $0x18
- .size int19_entry, . - int19_entry
-orig_int19:
- .long 0
- .size orig_int19, . - orig_int19
+ popw %ds
+ popw %es
+ popw %fs
+ popw %gs
+ popal
+ popfl
+ iret
+
-int19_message_prompt:
- .asciz "Press N to skip booting from "
- .size int19_message_prompt, . - int19_message_prompt
-int19_message_dots:
- .asciz "..."
- .size int19_message_dots, . - int19_message_dots
-int19_message_done:
- .asciz "\n\n"
- .size int19_message_done, . - int19_message_done
/* Execute as a boot device
*