OpenAMP Library  latest
Loading...
Searching...
No Matches
remoteproc_loader.h
Go to the documentation of this file.
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
32extern "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
60 int (*open)(void *store, const char *path, const void **img_data);
61
63 void (*close)(void *store);
64
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
72 unsigned int features;
73};
74
76struct loader_ops {
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
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
94 int (*locate_rsc_table)(void *img_info, metal_phys_addr_t *da,
95 size_t *offset, size_t *size);
96
98 void (*release)(void *img_info);
99
101 metal_phys_addr_t (*get_entry)(void *img_info);
102
104 int (*get_load_state)(void *img_info);
105};
106
107#if defined __cplusplus
108}
109#endif
110
111#endif /* REMOTEPROC_LOADER_H_ */
User-defined image store operations.
Definition remoteproc_loader.h:58
void(* close)(void *store)
User-defined callback to close the "firmware" to clean up after loading.
Definition remoteproc_loader.h:63
unsigned int features
Loader supported features.
Definition remoteproc_loader.h:72
int(* load)(void *store, size_t offset, size_t size, const void **data, metal_phys_addr_t pa, struct metal_io_region *io, char is_blocking)
User-defined callback to load the firmware contents to target memory or local memory.
Definition remoteproc_loader.h:66
int(* open)(void *store, const char *path, const void **img_data)
User-defined callback to open the "firmware" to prepare loading.
Definition remoteproc_loader.h:60
Loader operations.
Definition remoteproc_loader.h:76
int(* locate_rsc_table)(void *img_info, metal_phys_addr_t *da, size_t *offset, size_t *size)
Define how to get the resource table target address, offset to the ELF image file and size of the res...
Definition remoteproc_loader.h:94
int(* load_data)(struct remoteproc *rproc, const void *img_data, size_t offset, size_t len, void **img_info, int last_load_state, metal_phys_addr_t *da, size_t *noffset, size_t *nlen, unsigned char *padding, size_t *nmemsize)
Define how to load the target data.
Definition remoteproc_loader.h:83
metal_phys_addr_t(* get_entry)(void *img_info)
Get entry address.
Definition remoteproc_loader.h:101
void(* release)(void *img_info)
Define how to release the loader.
Definition remoteproc_loader.h:98
int(* get_load_state)(void *img_info)
Get load state from the image information.
Definition remoteproc_loader.h:104
int(* load_header)(const void *img_data, size_t offset, size_t len, void **img_info, int last_state, size_t *noffset, size_t *nlen)
Define how to get the executable headers.
Definition remoteproc_loader.h:78
A remote processor instance.
Definition remoteproc.h:396