|
@@ -5,6 +5,7 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
5
|
5
|
#define PXENV_UNDI_GET_IFACE_INFO 0x0013
|
6
|
6
|
#define PXENV_STOP_UNDI 0x0015
|
7
|
7
|
#define PXENV_UNLOAD_STACK 0x0070
|
|
8
|
+#define PXENV_FILE_CMDLINE 0x00e8
|
8
|
9
|
|
9
|
10
|
#define PXE_HACK_EB54 0x0001
|
10
|
11
|
|
|
@@ -381,6 +382,37 @@ get_iface_type:
|
381
|
382
|
99: movb $0x0a, %al
|
382
|
383
|
call print_character
|
383
|
384
|
|
|
385
|
+
|
|
386
|
+/*****************************************************************************
|
|
387
|
+ * Check for a command line
|
|
388
|
+ *****************************************************************************
|
|
389
|
+ */
|
|
390
|
+get_cmdline:
|
|
391
|
+ /* Issue PXENV_FILE_CMDLINE */
|
|
392
|
+ xorl %esi, %esi
|
|
393
|
+ movw %ss, %si
|
|
394
|
+ movw %si, ( pxe_parameter_structure + 0x06 )
|
|
395
|
+ movw $PREFIX_STACK_SIZE, ( pxe_parameter_structure + 0x04 )
|
|
396
|
+ movw $0xffff, ( pxe_parameter_structure + 0x02 )
|
|
397
|
+ movw $PXENV_FILE_CMDLINE, %bx
|
|
398
|
+ call pxe_call
|
|
399
|
+ jnc 1f
|
|
400
|
+ call print_pxe_error
|
|
401
|
+ jmp 99f
|
|
402
|
+1: /* Check for non-NULL command line */
|
|
403
|
+ movw ( pxe_parameter_structure + 0x02 ), %ax
|
|
404
|
+ testw %ax, %ax
|
|
405
|
+ jz 99f
|
|
406
|
+ /* Record command line */
|
|
407
|
+ shll $4, %esi
|
|
408
|
+ addl $PREFIX_STACK_SIZE, %esi
|
|
409
|
+ movl %esi, pxe_cmdline
|
|
410
|
+99:
|
|
411
|
+ .section ".prefix.data", "aw", @progbits
|
|
412
|
+pxe_cmdline:
|
|
413
|
+ .long 0
|
|
414
|
+ .previous
|
|
415
|
+
|
384
|
416
|
/*****************************************************************************
|
385
|
417
|
* Leave NIC in a safe state
|
386
|
418
|
*****************************************************************************
|
|
@@ -728,6 +760,9 @@ run_ipxe:
|
728
|
760
|
movw pxe_ss, %di
|
729
|
761
|
movl pxe_esp, %ebp
|
730
|
762
|
|
|
763
|
+ /* Retrieve PXE command line, if any */
|
|
764
|
+ movl pxe_cmdline, %esi
|
|
765
|
+
|
731
|
766
|
/* Jump to .text16 segment with %ds pointing to .data16 */
|
732
|
767
|
movw %bx, %ds
|
733
|
768
|
pushw %ax
|
|
@@ -738,6 +773,9 @@ run_ipxe:
|
738
|
773
|
/* Update the exit hook */
|
739
|
774
|
movw %cs, ( pxe_exit_hook + 2 )
|
740
|
775
|
|
|
776
|
+ /* Store command-line pointer */
|
|
777
|
+ movl %esi, cmdline_phys
|
|
778
|
+
|
741
|
779
|
/* Run main program */
|
742
|
780
|
pushl $main
|
743
|
781
|
pushw %cs
|