summaryrefslogtreecommitdiffstats
path: root/src/interface/pxe/pxe_preboot.c
diff options
context:
space:
mode:
authorMichael Brown2007-06-29 02:42:59 +0200
committerMichael Brown2007-06-29 02:42:59 +0200
commit40d6d3dcf4b283272d3bd8166164b4622a85530b (patch)
treeedb41056ca755b6fc3252bd7e802f45d70537ed0 /src/interface/pxe/pxe_preboot.c
parentInitial notes on RIS (diff)
downloadipxe-40d6d3dcf4b283272d3bd8166164b4622a85530b.tar.gz
ipxe-40d6d3dcf4b283272d3bd8166164b4622a85530b.tar.xz
ipxe-40d6d3dcf4b283272d3bd8166164b4622a85530b.zip
Windows RIS now gets as far as downloading NTLDR.
Diffstat (limited to 'src/interface/pxe/pxe_preboot.c')
-rw-r--r--src/interface/pxe/pxe_preboot.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/interface/pxe/pxe_preboot.c b/src/interface/pxe/pxe_preboot.c
index 09fa5fef3..862c0dd70 100644
--- a/src/interface/pxe/pxe_preboot.c
+++ b/src/interface/pxe/pxe_preboot.c
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <gpxe/uaccess.h>
#include <gpxe/dhcp.h>
+#include <dhcp_basemem.h>
#include "pxe.h"
#include "pxe_callbacks.h"
@@ -85,11 +86,13 @@ PXENV_EXIT_t pxenv_get_cached_info ( struct s_PXENV_GET_CACHED_INFO
* sources of options.
*/
if ( get_cached_info->BufferLimit == 0 ) {
- DBG ( " without an external buffer. Aargh." );
- goto err;
+ get_cached_info->Buffer.segment = rm_ds;
+ get_cached_info->Buffer.offset =
+ ( unsigned int ) ( & __from_data16 ( dhcp_basemem ) );
+ get_cached_info->BufferLimit = sizeof ( dhcp_basemem );
}
- DBG ( " to %04x:%04x+%x\n", get_cached_info->Buffer.segment,
+ DBG ( " to %04x:%04x+%x", get_cached_info->Buffer.segment,
get_cached_info->Buffer.offset, get_cached_info->BufferLimit );
/* Allocate space for temporary copy */
@@ -121,6 +124,7 @@ PXENV_EXIT_t pxenv_get_cached_info ( struct s_PXENV_GET_CACHED_INFO
/* Copy packet to client buffer */
buffer = real_to_user ( get_cached_info->Buffer.segment,
get_cached_info->Buffer.offset );
+ len = dhcppkt.len;
copy_to_user ( buffer, 0, data, len );
get_cached_info->BufferSize = len;