diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/main.c | 12 | ||||
| -rw-r--r-- | src/core/nic.c | 19 |
2 files changed, 15 insertions, 16 deletions
diff --git a/src/core/main.c b/src/core/main.c index 08f6d6a58..260a44b88 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -162,6 +162,7 @@ void initialise ( void ) { MAIN - Kick off routine **************************************************************************/ int main ( void ) { + struct buffer buffer; int skip = 0; /* Print out configuration */ @@ -213,8 +214,15 @@ int main ( void ) { continue; } - /* Boot from the device */ - load ( &dev, load_block ); + /* Load boot file from the device */ + init_buffer ( &buffer, 0x7c00, 0x100 ); + if ( ! load ( &dev, &buffer ) ) { + /* Load (e.g. TFTP failed) */ + printf ( "...load failed\n" ); + continue; + } + + printf ( "Loaded file of size %d\n", buffer.fill ); } diff --git a/src/core/nic.c b/src/core/nic.c index fc8deebe5..3909f5489 100644 --- a/src/core/nic.c +++ b/src/core/nic.c @@ -282,14 +282,10 @@ static int nic_configure ( struct type_dev *type_dev ) { /* - * Download a file from the specified URL and process it with the - * specified function + * Download a file from the specified URL into the specified buffer * */ -int download_url ( char *url, - int ( * process ) ( unsigned char *data, - unsigned int blocknum, - unsigned int len, int eof ) ) { +int download_url ( char *url, struct buffer *buffer ) { struct protocol *proto; struct sockaddr_in server; char *filename; @@ -303,7 +299,7 @@ int download_url ( char *url, } /* Call protocol's method to download the file */ - return proto->load ( url, &server, filename, process ); + return proto->load ( url, &server, filename, buffer ); } @@ -312,10 +308,7 @@ int download_url ( char *url, /************************************************************************** LOAD - Try to get booted **************************************************************************/ -static int nic_load ( struct type_dev *type_dev, - int ( * process ) ( unsigned char *data, - unsigned int blocknum, - unsigned int size, int eof ) ) { +static int nic_load ( struct type_dev *type_dev, struct buffer *buffer ) { char *kernel; /* Now use TFTP to load file */ @@ -327,12 +320,10 @@ static int nic_load ( struct type_dev *type_dev, #endif : KERNEL_BUF; if ( kernel ) { - download_url(kernel,process); /* We don't return except on error */ - printf("Unable to load file.\n"); + return download_url ( kernel, buffer ); } else { printf("No filename\n"); } - interruptible_sleep(2); /* lay off the server for a while */ return 0; } |
