| /* Taken from depthcharge: src/boot/fit.h */ |
| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| |
| #ifndef __LIB_FIT_H__ |
| #define __LIB_FIT_H__ |
| |
| #include <commonlib/list.h> |
| #include <device_tree.h> |
| #include <program_loading.h> |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| struct fit_image_node { |
| const char *name; |
| void *data; |
| uint32_t size; |
| int compression; |
| |
| struct list_node list_node; |
| }; |
| |
| struct fit_config_node { |
| const char *name; |
| struct fit_image_node *kernel; |
| struct fit_image_node *fdt; |
| struct list_node overlays; |
| struct fit_image_node *ramdisk; |
| struct fdt_property compat; |
| int compat_rank; |
| int compat_pos; |
| const char *compat_string; |
| |
| struct list_node list_node; |
| }; |
| |
| struct fit_overlay_chain { |
| struct fit_image_node *overlay; |
| struct list_node list_node; |
| }; |
| |
| /* |
| * Updates the cmdline in the devicetree. |
| */ |
| void fit_update_chosen(struct device_tree *tree, const char *cmd_line); |
| |
| /* |
| * Add a compat string to the list of supported board ids. |
| * Has to be called before fit_load(). |
| * The most common use-case would be to implement it on board level. |
| * Strings that were added first have a higher priority on finding a match. |
| */ |
| void fit_add_compat_string(const char *str); |
| |
| /* |
| * Updates the memory section in the devicetree. |
| */ |
| void fit_update_memory(struct device_tree *tree); |
| |
| /* |
| * Do architecture specific payload placements and fixups. |
| * Set entrypoint and first argument (if any). |
| * @param payload The payload, to set the entry point |
| * @param config The extracted FIT config |
| * @param kernel out-argument where to place the kernel |
| * @param fdt out-argument where to place the devicetree |
| * @param initrd out-argument where to place the initrd (optional) |
| * @return True if all config nodes could be placed, the corresponding |
| * regions have been updated and the entry point has been set. |
| * False on error. |
| */ |
| bool fit_payload_arch(struct prog *payload, struct fit_config_node *config, |
| struct region *kernel, |
| struct region *fdt, |
| struct region *initrd); |
| |
| /* |
| * Unpack a FIT image into memory, choosing the right configuration through the |
| * compatible string set by fit_add_compat() and return the selected config |
| * node. |
| */ |
| struct fit_config_node *fit_load(void *fit); |
| |
| void fit_add_ramdisk(struct device_tree *tree, void *ramdisk_addr, |
| size_t ramdisk_size); |
| |
| #endif /* __LIB_FIT_H__ */ |