summaryrefslogtreecommitdiffstats
path: root/include/bootm.h
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-07-20 08:04:11 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-07-26 08:31:31 +0200
commit4d85cb974a5f95a98f81a5efd45f9956ca8c4858 (patch)
treefead2940d3654d6c4ac50ef53d02a7594e1a66ed /include/bootm.h
parentcb47ddee1b700d910c0459c71ce7a98035e5de5b (diff)
downloadbarebox-4d85cb974a5f95a98f81a5efd45f9956ca8c4858.tar.gz
barebox-4d85cb974a5f95a98f81a5efd45f9956ca8c4858.tar.xz
include: Move bulk of boot.h to bootm.h
The majority of the stuff currently in include/boot.h is about bootm code implemented common/bootm.c. To be more consistent move it to a new file include/bootm.h. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include/bootm.h')
-rw-r--r--include/bootm.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/include/bootm.h b/include/bootm.h
new file mode 100644
index 0000000000..6e9777a9ac
--- /dev/null
+++ b/include/bootm.h
@@ -0,0 +1,125 @@
+#ifndef __BOOTM_H
+#define __BOOTM_H
+
+#include <image.h>
+#include <filetype.h>
+#include <linux/list.h>
+
+enum bootm_verify {
+ BOOTM_VERIFY_NONE,
+ BOOTM_VERIFY_HASH,
+ BOOTM_VERIFY_SIGNATURE,
+ BOOTM_VERIFY_AVAILABLE,
+};
+
+struct bootm_data {
+ const char *os_file;
+ const char *initrd_file;
+ const char *oftree_file;
+ int verbose;
+ enum bootm_verify verify;
+ bool force;
+ bool dryrun;
+ /*
+ * appendroot - if true, try to add a suitable root= Kernel option to
+ * mount the rootfs from the same device as the Kernel comes from.
+ */
+ bool appendroot;
+ unsigned long initrd_address;
+ unsigned long os_address;
+ unsigned long os_entry;
+};
+
+int bootm_boot(struct bootm_data *data);
+
+struct image_data {
+ /* simplest case. barebox has already loaded the os here */
+ struct resource *os_res;
+
+ /* if os is an uImage this will be provided */
+ struct uimage_handle *os;
+
+ /* if os is a FIT image this will be provided */
+ struct fit_handle *os_fit;
+
+ char *os_part;
+
+ /* otherwise only the filename will be provided */
+ char *os_file;
+
+ /*
+ * The address the user wants to load the os image to.
+ * May be UIMAGE_INVALID_ADDRESS to indicate that the
+ * user has not specified any address. In this case the
+ * handler may choose a suitable address
+ */
+ unsigned long os_address;
+
+ /* entry point to the os. relative to the start of the image */
+ unsigned long os_entry;
+
+ /* if initrd is already loaded this resource will be !NULL */
+ struct resource *initrd_res;
+
+ /* if initrd is an uImage this will be provided */
+ struct uimage_handle *initrd;
+ char *initrd_part;
+
+ /* otherwise only the filename will be provided */
+ char *initrd_file;
+
+ unsigned long initrd_address;
+
+ char *oftree_file;
+ char *oftree_part;
+
+ struct device_node *of_root_node;
+ struct fdt_header *oftree;
+ struct resource *oftree_res;
+
+ enum bootm_verify verify;
+ int verbose;
+ int force;
+ int dryrun;
+};
+
+struct image_handler {
+ const char *name;
+
+ struct list_head list;
+
+ int ih_os;
+
+ enum filetype filetype;
+ int (*bootm)(struct image_data *data);
+};
+
+int register_image_handler(struct image_handler *handle);
+
+#ifdef CONFIG_BOOTM_VERBOSE
+static inline int bootm_verbose(struct image_data *data)
+{
+ return data->verbose;
+}
+#else
+static inline int bootm_verbose(struct image_data *data)
+{
+ return 0;
+}
+#endif
+
+void bootm_data_init_defaults(struct bootm_data *data);
+
+int bootm_load_os(struct image_data *data, unsigned long load_address);
+
+bool bootm_has_initrd(struct image_data *data);
+int bootm_load_initrd(struct image_data *data, unsigned long load_address);
+
+int bootm_load_devicetree(struct image_data *data, unsigned long load_address);
+int bootm_get_os_size(struct image_data *data);
+
+enum bootm_verify bootm_get_verify_mode(void);
+
+#define UIMAGE_SOME_ADDRESS (UIMAGE_INVALID_ADDRESS - 1)
+
+#endif /* __BOOTM_H */