1 /* 2 * Copyright (c) 2014, Mentor Graphics Corporation 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 /************************************************************************** 9 * FILE NAME 10 * 11 * remoteproc_loader.h 12 * 13 * COMPONENT 14 * 15 * OpenAMP stack. 16 * 17 * DESCRIPTION 18 * 19 * This file provides definitions for remoteproc loader 20 * 21 * 22 **************************************************************************/ 23 #ifndef REMOTEPROC_LOADER_H_ 24 #define REMOTEPROC_LOADER_H_ 25 26 #include <metal/io.h> 27 #include <metal/list.h> 28 #include <metal/sys.h> 29 #include <openamp/remoteproc.h> 30 31 #if defined __cplusplus 32 extern "C" { 33 #endif 34 35 /* Loader feature macros */ 36 #define SUPPORT_SEEK 1UL 37 38 /* Remoteproc loader any address */ 39 #define RPROC_LOAD_ANYADDR ((metal_phys_addr_t)-1) 40 41 /* Remoteproc loader Executable Image Parsing States */ 42 /* Remoteproc loader parser initial state */ 43 #define RPROC_LOADER_NOT_READY 0x0L 44 /* Remoteproc loader ready to load, even it can be not finish parsing */ 45 #define RPROC_LOADER_READY_TO_LOAD 0x10000L 46 /* Remoteproc loader post data load */ 47 #define RPROC_LOADER_POST_DATA_LOAD 0x20000L 48 /* Remoteproc loader finished loading */ 49 #define RPROC_LOADER_LOAD_COMPLETE 0x40000L 50 /* Remoteproc loader state mask */ 51 #define RPROC_LOADER_MASK 0x00FF0000L 52 /* Remoteproc loader private mask */ 53 #define RPROC_LOADER_PRIVATE_MASK 0x0000FFFFL 54 /* Remoteproc loader reserved mask */ 55 #define RPROC_LOADER_RESERVED_MASK 0x0F000000L 56 57 /** @brief User-defined image store operations */ 58 struct image_store_ops { 59 /** User-defined callback to open the "firmware" to prepare loading */ 60 int (*open)(void *store, const char *path, const void **img_data); 61 62 /** User-defined callback to close the "firmware" to clean up after loading */ 63 void (*close)(void *store); 64 65 /** User-defined callback to load the firmware contents to target memory or local memory */ 66 int (*load)(void *store, size_t offset, size_t size, 67 const void **data, 68 metal_phys_addr_t pa, 69 struct metal_io_region *io, char is_blocking); 70 71 /** Loader supported features. e.g. seek */ 72 unsigned int features; 73 }; 74 75 /** @brief Loader operations */ 76 struct loader_ops { 77 /** Define how to get the executable headers */ 78 int (*load_header)(const void *img_data, size_t offset, size_t len, 79 void **img_info, int last_state, 80 size_t *noffset, size_t *nlen); 81 82 /** Define how to load the target data */ 83 int (*load_data)(struct remoteproc *rproc, 84 const void *img_data, size_t offset, size_t len, 85 void **img_info, int last_load_state, 86 metal_phys_addr_t *da, 87 size_t *noffset, size_t *nlen, 88 unsigned char *padding, size_t *nmemsize); 89 90 /** 91 * Define how to get the resource table target address, offset to the ELF 92 * image file and size of the resource table 93 */ 94 int (*locate_rsc_table)(void *img_info, metal_phys_addr_t *da, 95 size_t *offset, size_t *size); 96 97 /** Define how to release the loader */ 98 void (*release)(void *img_info); 99 100 /** Get entry address */ 101 metal_phys_addr_t (*get_entry)(void *img_info); 102 103 /** Get load state from the image information */ 104 int (*get_load_state)(void *img_info); 105 }; 106 107 #if defined __cplusplus 108 } 109 #endif 110 111 #endif /* REMOTEPROC_LOADER_H_ */ 112