fix printf format args
[people/xl0/gpxe.git] / src / core / image.c
1 #include "dev.h"
2 #include "buffer.h"
3 #include "load_buffer.h"
4 #include "image.h"
5 #include <console.h>
6
7 static struct image images[0] __image_start;
8 static struct image images_end[0] __image_end;
9
10 /*
11  * Print all images
12  *
13  */
14 void print_images ( void ) {
15         struct image *image;
16
17         for ( image = images ; image < images_end ; image++ ) {
18                 printf ( "%s ", image->name );
19         }
20 }
21
22 #if 0
23
24 /*
25  * Identify the image format
26  *
27  */
28 static struct image * identify_image ( physaddr_t start, physaddr_t len,
29                                        void **context ) {
30         struct image *image;
31         
32         for ( image = images ; image < images_end ; image++ ) {
33                 if ( image->probe ( start, len, context ) )
34                         return image;
35         }
36         
37         return NULL;
38 }
39
40 /*
41  * Load an image into memory at a location determined by the image
42  * format
43  *
44  */
45 int autoload ( struct dev *dev, struct image **image, void **context ) {
46         struct buffer buffer;
47         int rc = 0;
48
49         /* Prepare the load buffer */
50         if ( ! init_load_buffer ( &buffer ) ) {
51                 DBG ( "IMAGE could not initialise load buffer\n" );
52                 goto out;
53         }
54
55         /* Load the image into the load buffer */
56         if ( ! load ( dev, &buffer ) ) {
57                 DBG ( "IMAGE could not load image\n" );
58                 goto out_free;
59         }
60
61         /* Shrink the load buffer */
62         trim_load_buffer ( &buffer );
63
64         /* Identify the image type */
65         *image = identify_image ( buffer.start, buffer.fill, context );
66         if ( ! *image ) {
67                 DBG ( "IMAGE could not identify image type\n" );
68                 goto out_free;
69         }
70
71         /* Move the image into the target location */
72         if ( ! (*image)->load ( buffer.start, buffer.fill, *context ) ) {
73                 DBG ( "IMAGE could not move to target location\n" );
74                 goto out_free;
75         }
76
77         /* Return success */
78         rc = 1;
79
80  out_free:
81         /* Free the load buffer */
82         done_load_buffer ( &buffer );
83  out:
84         return rc;
85 }
86
87 #endif