rev |
line source |
pascal@962
|
1 --- gpxe-0.9.3/src/arch/i386/prefix/lkrnprefix.S
|
pascal@962
|
2 +++ gpxe-0.9.3/src/arch/i386/prefix/lkrnprefix.S
|
pascal@962
|
3 @@ -441,6 +441,8 @@
|
pascal@962
|
4 /* Calculated lcall to _start with %cs:0000 = image start */
|
pascal@962
|
5 lret
|
pascal@962
|
6
|
pascal@962
|
7 +boot_url:
|
pascal@962
|
8 + .space 128, 0
|
pascal@962
|
9
|
pascal@962
|
10 .org PREFIXSIZE
|
pascal@962
|
11 /*
|
pascal@962
|
12 @@ -453,6 +455,13 @@
|
pascal@962
|
13 movw %bx, %ss
|
pascal@962
|
14 movw $_estack16, %sp
|
pascal@962
|
15
|
pascal@962
|
16 + /* Copy our boot_url structure to the forced_url variable */
|
pascal@962
|
17 + movw %bx, %es
|
pascal@962
|
18 + movw $forced_url, %di
|
pascal@962
|
19 + movw $boot_url, %si
|
pascal@962
|
20 + movw $128, %cx
|
pascal@962
|
21 + rep movsb
|
pascal@962
|
22 +
|
pascal@962
|
23 /* Jump to .text16 segment */
|
pascal@962
|
24 pushw %ax
|
pascal@962
|
25 pushw $1f
|
pascal@962
|
26
|
pascal@962
|
27 --- gpxe-0.9.3/src/arch/i386/prefix/pxeprefix.S
|
pascal@962
|
28 +++ gpxe-0.9.3/src/arch/i386/prefix/pxeprefix.S
|
pascal@962
|
29 @@ -19,6 +19,8 @@
|
pascal@962
|
30 .section ".prefix"
|
pascal@962
|
31 /* Set up our non-stack segment registers */
|
pascal@962
|
32 jmp $0x7c0, $1f
|
pascal@962
|
33 +boot_url:
|
pascal@962
|
34 + .space 128, 0
|
pascal@962
|
35 1: movw %cs, %ax
|
pascal@962
|
36 movw %ax, %ds
|
pascal@962
|
37 movw $0x40, %ax /* BIOS data segment access */
|
pascal@962
|
38 @@ -703,16 +705,22 @@
|
pascal@962
|
39 /* Set up real-mode stack */
|
pascal@962
|
40 movw %bx, %ss
|
pascal@962
|
41 movw $_estack16, %sp
|
pascal@962
|
42 -
|
pascal@962
|
43 + movw %bx, %es
|
pascal@962
|
44 +
|
pascal@962
|
45 #ifdef PXELOADER_KEEP_UNDI
|
pascal@962
|
46 /* Copy our undi_device structure to the preloaded_undi variable */
|
pascal@962
|
47 - movw %bx, %es
|
pascal@962
|
48 movw $preloaded_undi, %di
|
pascal@962
|
49 movw $undi_device, %si
|
pascal@962
|
50 movw $undi_device_size, %cx
|
pascal@962
|
51 rep movsb
|
pascal@962
|
52 #endif
|
pascal@962
|
53
|
pascal@962
|
54 + /* Copy our boot_url structure to the forced_url variable */
|
pascal@962
|
55 + movw $forced_url, %di
|
pascal@962
|
56 + movw $boot_url, %si
|
pascal@962
|
57 + movw $128, %cx
|
pascal@962
|
58 + rep movsb
|
pascal@962
|
59 +
|
pascal@962
|
60 /* Jump to .text16 segment with %ds pointing to .data16 */
|
pascal@962
|
61 movw %bx, %ds
|
pascal@962
|
62 pushw %ax
|
pascal@962
|
63
|
pascal@955
|
64 --- gpxe-0.9.3/src/usr/autoboot.c
|
pascal@955
|
65 +++ gpxe-0.9.3/src/usr/autoboot.c
|
pascal@962
|
66 @@ -120,6 +120,11 @@
|
pascal@962
|
67 return -ENOTSUP;
|
pascal@962
|
68 }
|
pascal@962
|
69
|
pascal@962
|
70 +struct _forced_url {
|
pascal@962
|
71 + char url[128];
|
pascal@962
|
72 +};
|
pascal@962
|
73 +struct _forced_url __data16 ( forced_url );
|
pascal@962
|
74 +#define forced_url __use_data16 ( forced_url )
|
pascal@962
|
75 /**
|
pascal@962
|
76 * Boot from a network device
|
pascal@962
|
77 *
|
pascal@962
|
78 @@ -139,15 +144,21 @@
|
pascal@962
|
79 if ( ( rc = dhcp ( netdev ) ) != 0 )
|
pascal@962
|
80 return rc;
|
pascal@962
|
81 route();
|
pascal@962
|
82 -
|
pascal@962
|
83 +
|
pascal@962
|
84 /* Try to boot an embedded image if we have one */
|
pascal@962
|
85 rc = boot_embedded_image ();
|
pascal@962
|
86 if ( rc != ENOENT )
|
pascal@962
|
87 return rc;
|
pascal@962
|
88
|
pascal@962
|
89 + /* Try to boot a forced url if we have one */
|
pascal@962
|
90 + strcpy ( buf, forced_url.url );
|
pascal@962
|
91 + if ( forced_url.url[0] == 0 ) {
|
pascal@962
|
92 +
|
pascal@962
|
93 /* Try to download and boot whatever we are given as a filename */
|
pascal@962
|
94 dhcp_snprintf ( buf, sizeof ( buf ),
|
pascal@955
|
95 find_global_dhcp_option ( DHCP_BOOTFILE_NAME ) );
|
pascal@962
|
96 + }
|
pascal@962
|
97 + while (1) {
|
pascal@955
|
98 if ( buf[0] ) {
|
pascal@962
|
99 printf ( "Booting from filename \"%s\"\n", buf );
|
pascal@962
|
100 return boot_filename ( buf );
|
pascal@962
|
101 @@ -162,7 +173,8 @@
|
pascal@962
|
102 }
|
pascal@962
|
103
|
pascal@955
|
104 printf ( "No filename or root path specified\n" );
|
pascal@955
|
105 - return -ENOENT;
|
pascal@955
|
106 + strcpy ( buf, "http://boot.slitaz.org/gpxe" );
|
pascal@962
|
107 + }
|
pascal@955
|
108 }
|
pascal@962
|
109
|
pascal@962
|
110 /**
|