16 #include <metal/mutex.h>
17 #include <metal/compiler.h>
19 #if defined __cplusplus
23 #define RSC_NOTIFY_ID_ANY 0xFFFFFFFFU
25 #define RPROC_MAX_NAME_LEN 32
109 #define FW_RSC_U64_ADDR_ANY 0xFFFFFFFFFFFFFFFFUL
110 #define FW_RSC_U32_ADDR_ANY 0xFFFFFFFFUL
338 metal_phys_addr_t
da;
339 metal_phys_addr_t
pa;
342 struct metal_io_region *
io;
343 struct metal_list
node;
371 struct metal_list
mems;
372 struct metal_list
vdevs;
405 metal_phys_addr_t *pa, metal_phys_addr_t *da,
406 size_t size,
unsigned int attribute,
407 struct metal_io_region **io);
432 metal_phys_addr_t pa,
433 metal_phys_addr_t da,
434 void *va,
size_t size,
439 #define RPROC_EBASE 0
440 #define RPROC_ENOMEM (RPROC_EBASE + 1)
441 #define RPROC_EINVAL (RPROC_EBASE + 2)
442 #define RPROC_ENODEV (RPROC_EBASE + 3)
443 #define RPROC_EAGAIN (RPROC_EBASE + 4)
444 #define RPROC_ERR_RSC_TAB_TRUNC (RPROC_EBASE + 5)
445 #define RPROC_ERR_RSC_TAB_VER (RPROC_EBASE + 6)
446 #define RPROC_ERR_RSC_TAB_RSVD (RPROC_EBASE + 7)
447 #define RPROC_ERR_RSC_TAB_VDEV_NRINGS (RPROC_EBASE + 9)
448 #define RPROC_ERR_RSC_TAB_NP (RPROC_EBASE + 10)
449 #define RPROC_ERR_RSC_TAB_NS (RPROC_EBASE + 11)
450 #define RPROC_ERR_LOADER_STATE (RPROC_EBASE + 12)
451 #define RPROC_EMAX (RPROC_EBASE + 16)
452 #define RPROC_EPTR (void *)(-1)
453 #define RPROC_EOF (void *)(-1)
462 if ((
unsigned long)ptr >= (
unsigned long)(-
RPROC_EMAX))
470 return (
void *)error;
529 metal_phys_addr_t pa, metal_phys_addr_t da,
530 size_t size,
struct metal_io_region *io)
532 if (!mem || !io || size == 0)
535 strncpy(mem->
name, name,
sizeof(mem->
name));
555 metal_list_add_tail(&rproc->
mems, &mem->
node);
566 struct metal_io_region *
578 struct metal_io_region *
580 metal_phys_addr_t pa);
591 struct metal_io_region *
593 metal_phys_addr_t da,
594 unsigned long *offset);
604 struct metal_io_region *
621 metal_phys_addr_t *pa, metal_phys_addr_t *da,
622 size_t size,
unsigned int attribute,
623 struct metal_io_region **io);
750 const void *img_data,
size_t offset,
size_t len,
752 metal_phys_addr_t *pa,
struct metal_io_region **io,
753 size_t *noffset,
size_t *nlen,
754 size_t *nmlen,
unsigned char *padding);
782 int vdev_id,
unsigned int role,
805 #if defined __cplusplus
static long RPROC_PTR_ERR(const void *ptr)
Definition: remoteproc.h:455
struct metal_io_region * remoteproc_get_io_with_va(struct remoteproc *rproc, void *va)
Get remoteproc memory I/O region with virtual address.
Definition: remoteproc.c:353
int remoteproc_remove(struct remoteproc *rproc)
Remove remoteproc resource.
Definition: remoteproc.c:189
#define RPROC_MAX_NAME_LEN
Definition: remoteproc.h:25
static void remoteproc_add_mem(struct remoteproc *rproc, struct remoteproc_mem *mem)
Add remoteproc memory.
Definition: remoteproc.h:551
struct metal_io_region * remoteproc_get_io_with_pa(struct remoteproc *rproc, metal_phys_addr_t pa)
Get remoteproc memory I/O region with physical address.
Definition: remoteproc.c:311
void remoteproc_remove_virtio(struct remoteproc *rproc, struct virtio_device *vdev)
Remove virtio device.
Definition: remoteproc.c:997
int remoteproc_load(struct remoteproc *rproc, const char *path, void *store, const struct image_store_ops *store_ops, void **img_info)
Loads the executable.
Definition: remoteproc.c:409
int remoteproc_config(struct remoteproc *rproc, void *data)
This function configures the remote processor to get it ready to load and run executable.
Definition: remoteproc.c:207
static void remoteproc_init_mem(struct remoteproc_mem *mem, const char *name, metal_phys_addr_t pa, metal_phys_addr_t da, size_t size, struct metal_io_region *io)
Initialize remoteproc memory.
Definition: remoteproc.h:528
unsigned int remoteproc_allocate_id(struct remoteproc *rproc, unsigned int start, unsigned int end)
Allocate notifyid for resource.
Definition: remoteproc.c:871
fw_resource_type
Definition: remoteproc.h:99
@ RSC_VENDOR_END
Definition: remoteproc.h:106
@ RSC_VENDOR_START
Definition: remoteproc.h:105
@ RSC_DEVMEM
Definition: remoteproc.h:101
@ RSC_LAST
Definition: remoteproc.h:104
@ RSC_CARVEOUT
Definition: remoteproc.h:100
@ RSC_TRACE
Definition: remoteproc.h:102
@ RSC_VDEV
Definition: remoteproc.h:103
int remoteproc_set_rsc_table(struct remoteproc *rproc, struct resource_table *rsc_table, size_t rsc_size)
Parse and set resource table of remoteproc.
Definition: remoteproc.c:152
static void * RPROC_ERR_PTR(long error)
Definition: remoteproc.h:468
struct metal_io_region * remoteproc_get_io_with_name(struct remoteproc *rproc, const char *name)
Get remoteproc memory I/O region with name.
Definition: remoteproc.c:293
int remoteproc_shutdown(struct remoteproc *rproc)
This function shuts down the remote processor and releases its resources.
Definition: remoteproc.c:267
int remoteproc_load_noblock(struct remoteproc *rproc, const void *img_data, size_t offset, size_t len, void **img_info, metal_phys_addr_t *pa, struct metal_io_region **io, size_t *noffset, size_t *nlen, size_t *nmlen, unsigned char *padding)
Loads the executable.
Definition: remoteproc.c:680
struct remoteproc * remoteproc_init(struct remoteproc *rproc, const struct remoteproc_ops *ops, void *priv)
Initializes remoteproc resource.
Definition: remoteproc.c:174
METAL_PACKED_BEGIN struct resource_table METAL_PACKED_END
static int RPROC_IS_ERR(const void *ptr)
Definition: remoteproc.h:460
struct virtio_device * remoteproc_create_virtio(struct remoteproc *rproc, int vdev_id, unsigned int role, void(*rst_cb)(struct virtio_device *vdev))
Create virtio device, it returns pointer to the created virtio device.
Definition: remoteproc.c:904
int remoteproc_stop(struct remoteproc *rproc)
This function stops the remote processor but it will not release its resource.
Definition: remoteproc.c:248
#define RPROC_EMAX
Definition: remoteproc.h:451
struct metal_io_region * remoteproc_get_io_with_da(struct remoteproc *rproc, metal_phys_addr_t da, unsigned long *offset)
Get remoteproc memory I/O region with device address.
Definition: remoteproc.c:328
remoteproc_state
Definition: remoteproc.h:484
@ RPROC_STOPPED
Definition: remoteproc.h:491
@ RPROC_LAST
Definition: remoteproc.h:492
@ RPROC_CONFIGURED
Definition: remoteproc.h:486
@ RPROC_SUSPENDED
Definition: remoteproc.h:489
@ RPROC_ERROR
Definition: remoteproc.h:490
@ RPROC_READY
Definition: remoteproc.h:487
@ RPROC_OFFLINE
Definition: remoteproc.h:485
@ RPROC_RUNNING
Definition: remoteproc.h:488
int remoteproc_get_notification(struct remoteproc *rproc, uint32_t notifyid)
remoteproc is got notified, it will check its subdevices for the notification
Definition: remoteproc.c:1012
void * remoteproc_mmap(struct remoteproc *rproc, metal_phys_addr_t *pa, metal_phys_addr_t *da, size_t size, unsigned int attribute, struct metal_io_region **io)
Remoteproc mmap memory.
Definition: remoteproc.c:369
int remoteproc_start(struct remoteproc *rproc)
This function starts the remote processor. It assumes the firmware is already loaded.
Definition: remoteproc.c:231
Definition: remoteproc.h:156
uint32_t len
Definition: remoteproc.h:160
uint32_t type
Definition: remoteproc.h:157
uint8_t name[RPROC_MAX_NAME_LEN]
Definition: remoteproc.h:163
uint32_t pa
Definition: remoteproc.h:159
uint32_t reserved
Definition: remoteproc.h:162
uint32_t da
Definition: remoteproc.h:158
uint32_t flags
Definition: remoteproc.h:161
Definition: remoteproc.h:196
uint32_t pa
Definition: remoteproc.h:199
uint32_t da
Definition: remoteproc.h:198
uint32_t len
Definition: remoteproc.h:200
uint32_t reserved
Definition: remoteproc.h:202
uint32_t type
Definition: remoteproc.h:197
uint32_t flags
Definition: remoteproc.h:201
uint8_t name[RPROC_MAX_NAME_LEN]
Definition: remoteproc.h:203
Definition: remoteproc.h:72
uint32_t type
Definition: remoteproc.h:73
uint8_t data[0]
Definition: remoteproc.h:74
Definition: remoteproc.h:223
uint32_t da
Definition: remoteproc.h:225
uint8_t name[RPROC_MAX_NAME_LEN]
Definition: remoteproc.h:228
uint32_t reserved
Definition: remoteproc.h:227
uint32_t type
Definition: remoteproc.h:224
uint32_t len
Definition: remoteproc.h:226
Definition: remoteproc.h:249
uint32_t da
Definition: remoteproc.h:250
uint32_t align
Definition: remoteproc.h:251
uint32_t notifyid
Definition: remoteproc.h:253
uint32_t num
Definition: remoteproc.h:252
uint32_t reserved
Definition: remoteproc.h:254
Definition: remoteproc.h:293
uint32_t config_len
Definition: remoteproc.h:299
uint32_t notifyid
Definition: remoteproc.h:296
uint8_t reserved[2]
Definition: remoteproc.h:302
uint32_t type
Definition: remoteproc.h:294
uint8_t num_of_vrings
Definition: remoteproc.h:301
uint32_t dfeatures
Definition: remoteproc.h:297
uint32_t gfeatures
Definition: remoteproc.h:298
uint8_t status
Definition: remoteproc.h:300
uint32_t id
Definition: remoteproc.h:295
Definition: remoteproc.h:317
uint32_t len
Definition: remoteproc.h:319
uint32_t type
Definition: remoteproc.h:318
Definition: remoteproc_loader.h:66
Definition: remoteproc_loader.h:87
Definition: remoteproc.h:337
char name[RPROC_MAX_NAME_LEN]
Definition: remoteproc.h:341
struct metal_io_region * io
Definition: remoteproc.h:342
metal_phys_addr_t pa
Definition: remoteproc.h:339
metal_phys_addr_t da
Definition: remoteproc.h:338
struct metal_list node
Definition: remoteproc.h:343
size_t size
Definition: remoteproc.h:340
Definition: remoteproc.h:400
int(* stop)(struct remoteproc *rproc)
Definition: remoteproc.h:411
int(* notify)(struct remoteproc *rproc, uint32_t id)
Definition: remoteproc.h:413
int(* handle_rsc)(struct remoteproc *rproc, void *rsc, size_t len)
Definition: remoteproc.h:408
int(* shutdown)(struct remoteproc *rproc)
Definition: remoteproc.h:412
int(* start)(struct remoteproc *rproc)
Definition: remoteproc.h:410
int(* config)(struct remoteproc *rproc, void *data)
Definition: remoteproc.h:409
void(* remove)(struct remoteproc *rproc)
Definition: remoteproc.h:403
Definition: remoteproc.h:366
void * priv
Definition: remoteproc.h:378
const struct loader_ops * loader
Definition: remoteproc.h:376
struct metal_list mems
Definition: remoteproc.h:371
struct metal_io_region * rsc_io
Definition: remoteproc.h:370
size_t rsc_len
Definition: remoteproc.h:369
struct metal_list vdevs
Definition: remoteproc.h:372
metal_mutex_t lock
Definition: remoteproc.h:367
unsigned int state
Definition: remoteproc.h:377
void * rsc_table
Definition: remoteproc.h:368
unsigned long bitmap
Definition: remoteproc.h:373
const struct remoteproc_ops * ops
Definition: remoteproc.h:374
metal_phys_addr_t bootaddr
Definition: remoteproc.h:375
Definition: remoteproc.h:55
uint32_t ver
Definition: remoteproc.h:56
uint32_t num
Definition: remoteproc.h:57
uint32_t offset[0]
Definition: remoteproc.h:59
uint32_t reserved[2]
Definition: remoteproc.h:58
unsigned int role
Definition: virtio.h:124
uint32_t notifyid
Definition: virtio.h:119
Definition: virtio_ring.h:77