david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/gpxe/image.h

72 lines
1.9 KiB
C
Raw Normal View History

#ifndef _GPXE_IMAGE_H
#define _GPXE_IMAGE_H
/**
* @file
*
* Executable/loadable image formats
*
*/
#include <gpxe/tables.h>
/** An executable or loadable image */
struct image {
/** Raw file image */
userptr_t data;
/** Length of raw file image */
size_t len;
/** Execute method
*
* Filled in by the image loader. If NULL, then the image
* cannot be executed.
*/
int ( * execute ) ( struct image *image );
/** Entry point */
physaddr_t entry;
/** Command line to pass to image */
const char *cmdline;
};
/** An executable or loadable image type */
struct image_type {
/** Name of this image type */
char *name;
/** Load image into memory
*
* @v image Executable/loadable image
* @ret rc Return status code
*
* Load the image into memory. The file image may be
* discarded after this call; the method must preserve any
* information it may require later (e.g. the execution
* address) within the @c image structure.
*
* The method should return -ENOEXEC if and only if the image
* is not in the correct format. Other errors will be
* interpreted as "I claim this image format, but there's
* something wrong with it that makes it unloadable". In
* particular, returning -ENOEXEC will cause the image probing
* code to try the next available image type, while returning
* any other error will terminate image probing.
*/
int ( * load ) ( struct image *image );
};
/** An executable or loadable image type */
#define __image_type __table ( struct image_type, image_types, 01 )
/**
* An unverifiable executable or loadable image type
*
* This should be used to mark image types for which there are no
* signature or other checks that can be used to verify the validity
* of the image (such as PXE images). These will then be tried last
* in the list of image types.
*/
#define __default_image_type __table ( struct image_type, image_types, 02 )
#endif /* _GPXE_IMAGE_H */