summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/elf.h2
-rw-r--r--src/include/ipxe/image.h62
-rw-r--r--src/include/usr/imgmgmt.h34
3 files changed, 51 insertions, 47 deletions
diff --git a/src/include/ipxe/elf.h b/src/include/ipxe/elf.h
index 23160a93e..e5fed2f89 100644
--- a/src/include/ipxe/elf.h
+++ b/src/include/ipxe/elf.h
@@ -12,6 +12,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <elf.h>
-extern int elf_load ( struct image *image );
+extern int elf_load ( struct image *image, physaddr_t *entry );
#endif /* _IPXE_ELF_H */
diff --git a/src/include/ipxe/image.h b/src/include/ipxe/image.h
index abe4a6102..2865ea057 100644
--- a/src/include/ipxe/image.h
+++ b/src/include/ipxe/image.h
@@ -4,7 +4,7 @@
/**
* @file
*
- * Executable/loadable images
+ * Executable images
*
*/
@@ -18,7 +18,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
struct uri;
struct image_type;
-/** An executable or loadable image */
+/** An executable image */
struct image {
/** Reference count */
struct refcnt refcnt;
@@ -42,20 +42,13 @@ struct image {
/** Image type, if known */
struct image_type *type;
- /** Image type private data */
- union {
- physaddr_t phys;
- userptr_t user;
- unsigned long ul;
- } priv;
/** Replacement image
*
* An image wishing to replace itself with another image (in a
* style similar to a Unix exec() call) should return from its
* exec() method with the replacement image set to point to
- * the new image. The new image must already be in a suitable
- * state for execution (i.e. loaded).
+ * the new image.
*
* If an image unregisters itself as a result of being
* executed, it must make sure that its replacement image (if
@@ -65,41 +58,26 @@ struct image {
struct image *replacement;
};
-/** Image is loaded */
-#define IMAGE_LOADED 0x0001
+/** Image is selected for execution */
+#define IMAGE_SELECTED 0x0001
-/** An executable or loadable image type */
+/** An executable image type */
struct image_type {
/** Name of this image type */
char *name;
- /**
- * Load image into memory
+ /** Probe image
*
- * @v image Executable/loadable image
+ * @v image Executable image
* @ret rc Return status code
*
- * Load the image into memory at the correct location as
- * determined by the file format.
- *
- * If the file image is in the correct format, the method must
- * update @c image->type to point to its own type (unless @c
- * image->type is already set). This allows the autoloading
- * code to disambiguate between "this is not my image format"
- * and "there is something wrong with this image". In
- * particular, setting @c image->type and then returning an
- * error will cause image_autoload() to abort and return an
- * error, rather than continuing to the next image type.
+ * Return success if the image is of this image type.
*/
- int ( * load ) ( struct image *image );
+ int ( * probe ) ( struct image *image );
/**
- * Execute loaded image
+ * Execute image
*
- * @v image Loaded image
+ * @v image Executable image
* @ret rc Return status code
- *
- * Note that the image may be invalidated by the act of
- * execution, i.e. an image is allowed to choose to unregister
- * (and so potentially free) itself.
*/
int ( * exec ) ( struct image *image );
};
@@ -125,10 +103,10 @@ struct image_type {
*/
#define PROBE_PXE 03
-/** Executable or loadable image type table */
+/** Executable image type table */
#define IMAGE_TYPES __table ( struct image_type, "image_types" )
-/** An executable or loadable image type */
+/** An executable image type */
#define __image_type( probe_order ) __table_entry ( IMAGE_TYPES, probe_order )
extern struct list_head images;
@@ -147,17 +125,17 @@ static inline int have_images ( void ) {
}
extern struct image * alloc_image ( void );
-extern int image_set_uri ( struct image *image, struct uri *uri );
+extern void image_set_uri ( struct image *image, struct uri *uri );
extern int image_set_cmdline ( struct image *image, const char *cmdline );
extern int register_image ( struct image *image );
extern void unregister_image ( struct image *image );
-extern void promote_image ( struct image *image );
struct image * find_image ( const char *name );
-extern int image_load ( struct image *image );
-extern int image_autoload ( struct image *image );
+extern int image_probe ( struct image *image );
extern int image_exec ( struct image *image );
-extern int register_and_autoload_image ( struct image *image );
-extern int register_and_autoexec_image ( struct image *image );
+extern int image_select ( struct image *image );
+extern struct image * image_find_selected ( void );
+extern int register_and_select_image ( struct image *image );
+extern int register_and_boot_image ( struct image *image );
/**
* Increment reference count on an image
diff --git a/src/include/usr/imgmgmt.h b/src/include/usr/imgmgmt.h
index 64e51499e..6660039c4 100644
--- a/src/include/usr/imgmgmt.h
+++ b/src/include/usr/imgmgmt.h
@@ -9,16 +9,42 @@
FILE_LICENCE ( GPL2_OR_LATER );
-struct image;
+#include <ipxe/image.h>
extern int imgdownload ( struct image *image, struct uri *uri,
int ( * action ) ( struct image *image ) );
extern int imgfetch ( struct image *image, const char *uri_string,
int ( * action ) ( struct image *image ) );
-extern int imgload ( struct image *image );
-extern int imgexec ( struct image *image );
-extern struct image * imgautoselect ( void );
extern void imgstat ( struct image *image );
extern void imgfree ( struct image *image );
+/**
+ * Select an image for execution
+ *
+ * @v image Image
+ * @ret rc Return status code
+ */
+static inline int imgselect ( struct image *image ) {
+ return image_select ( image );
+}
+
+/**
+ * Find the previously-selected image
+ *
+ * @ret image Image, or NULL
+ */
+static inline struct image * imgautoselect ( void ) {
+ return image_find_selected();
+}
+
+/**
+ * Execute an image
+ *
+ * @v image Image
+ * @ret rc Return status code
+ */
+static inline int imgexec ( struct image *image ) {
+ return image_exec ( image );
+}
+
#endif /* _USR_IMGMGMT_H */