123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "dev.h"
- #include "buffer.h"
- #include "load_buffer.h"
- #include "image.h"
- #include <console.h>
-
- static struct image images[0] __image_start;
- static struct image images_end[0] __image_end;
-
- /*
- * Print all images
- *
- */
- void print_images ( void ) {
- struct image *image;
-
- for ( image = images ; image < images_end ; image++ ) {
- printf ( "%s ", image->name );
- }
- }
-
- #if 0
-
- /*
- * Identify the image format
- *
- */
- static struct image * identify_image ( physaddr_t start, physaddr_t len,
- void **context ) {
- struct image *image;
-
- for ( image = images ; image < images_end ; image++ ) {
- if ( image->probe ( start, len, context ) )
- return image;
- }
-
- return NULL;
- }
-
- /*
- * Load an image into memory at a location determined by the image
- * format
- *
- */
- int autoload ( struct dev *dev, struct image **image, void **context ) {
- struct buffer buffer;
- int rc = 0;
-
- /* Prepare the load buffer */
- if ( ! init_load_buffer ( &buffer ) ) {
- DBG ( "IMAGE could not initialise load buffer\n" );
- goto out;
- }
-
- /* Load the image into the load buffer */
- if ( ! load ( dev, &buffer ) ) {
- DBG ( "IMAGE could not load image\n" );
- goto out_free;
- }
-
- /* Shrink the load buffer */
- trim_load_buffer ( &buffer );
-
- /* Identify the image type */
- *image = identify_image ( buffer.start, buffer.fill, context );
- if ( ! *image ) {
- DBG ( "IMAGE could not identify image type\n" );
- goto out_free;
- }
-
- /* Move the image into the target location */
- if ( ! (*image)->load ( buffer.start, buffer.fill, *context ) ) {
- DBG ( "IMAGE could not move to target location\n" );
- goto out_free;
- }
-
- /* Return success */
- rc = 1;
-
- out_free:
- /* Free the load buffer */
- done_load_buffer ( &buffer );
- out:
- return rc;
- }
-
- #endif
|