mirror of
https://github.com/xcat2/xcat-dep.git
synced 2024-11-25 19:08:31 +00:00
125 lines
3.4 KiB
Diff
125 lines
3.4 KiB
Diff
|
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
|
||
|
*
|