summaryrefslogtreecommitdiff
path: root/core/pxelinux.asm
diff options
context:
space:
mode:
Diffstat (limited to 'core/pxelinux.asm')
-rw-r--r--core/pxelinux.asm39
1 files changed, 18 insertions, 21 deletions
diff --git a/core/pxelinux.asm b/core/pxelinux.asm
index b8077fd9..06e52061 100644
--- a/core/pxelinux.asm
+++ b/core/pxelinux.asm
@@ -290,29 +290,8 @@ _start1:
extern pxe_fs_ops
mov eax,pxe_fs_ops
pm_call fs_init
- jmp next
;
-; Plan C, because it must be in real mode, we set it here
-;
- global plan_c
-plan_c:
-
- ; Plan C: PXENV+ structure via INT 1Ah AX=5650h
- mov ax, 5650h
-%if USE_PXE_PROVIDED_STACK == 0
- lss sp,[InitStack]
-%endif
- int 1Ah ; May trash regs
-%if USE_PXE_PROVIDED_STACK == 0
- lss esp,[BaseStack]
-%endif
- sti ; Work around Etherboot bug
- ret
-
-
-next:
-;
; Common initialization code
;
%include "cpuinit.inc"
@@ -483,6 +462,24 @@ PXEEntry equ pxenv.jump+1
PXEStatus resb 2
+ section .text16
+;
+; Invoke INT 1Ah on the PXE stack. This is used by the "Plan C" method
+; for finding the PXE entry point.
+;
+ global pxe_int1a
+pxe_int1a:
+%if USE_PXE_PROVIDED_STACK == 0
+ mov [cs:PXEStack],sp
+ mov [cs:PXEStack+2],ss
+ lss sp,[cs:InitStack]
+%endif
+ int 1Ah ; May trash registers
+%if USE_PXE_PROVIDED_STACK == 0
+ lss sp,[cs:PXEStack]
+%endif
+ ret
+
;
; TimeoutTable: list of timeouts (in 18.2 Hz timer ticks)
;