Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-only */ 2 : : /* 3 : : * Remote processor framework 4 : : * 5 : : * Copyright (C) 2011 Texas Instruments, Inc. 6 : : * Copyright (C) 2011 Google, Inc. 7 : : * 8 : : * Ohad Ben-Cohen <ohad@wizery.com> 9 : : * Brian Swetland <swetland@google.com> 10 : : */ 11 : : 12 : : #ifndef REMOTEPROC_INTERNAL_H 13 : : #define REMOTEPROC_INTERNAL_H 14 : : 15 : : #include <linux/irqreturn.h> 16 : : #include <linux/firmware.h> 17 : : 18 : : struct rproc; 19 : : 20 : : struct rproc_debug_trace { 21 : : struct rproc *rproc; 22 : : struct dentry *tfile; 23 : : struct list_head node; 24 : : struct rproc_mem_entry trace_mem; 25 : : }; 26 : : 27 : : /* from remoteproc_core.c */ 28 : : void rproc_release(struct kref *kref); 29 : : irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id); 30 : : void rproc_vdev_release(struct kref *ref); 31 : : 32 : : /* from remoteproc_virtio.c */ 33 : : int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id); 34 : : int rproc_remove_virtio_dev(struct device *dev, void *data); 35 : : 36 : : /* from remoteproc_debugfs.c */ 37 : : void rproc_remove_trace_file(struct dentry *tfile); 38 : : struct dentry *rproc_create_trace_file(const char *name, struct rproc *rproc, 39 : : struct rproc_debug_trace *trace); 40 : : void rproc_delete_debug_dir(struct rproc *rproc); 41 : : void rproc_create_debug_dir(struct rproc *rproc); 42 : : void rproc_init_debugfs(void); 43 : : void rproc_exit_debugfs(void); 44 : : 45 : : /* from remoteproc_sysfs.c */ 46 : : extern struct class rproc_class; 47 : : int rproc_init_sysfs(void); 48 : : void rproc_exit_sysfs(void); 49 : : 50 : : void rproc_free_vring(struct rproc_vring *rvring); 51 : : int rproc_alloc_vring(struct rproc_vdev *rvdev, int i); 52 : : 53 : : void *rproc_da_to_va(struct rproc *rproc, u64 da, int len); 54 : : phys_addr_t rproc_va_to_pa(void *cpu_addr); 55 : : int rproc_trigger_recovery(struct rproc *rproc); 56 : : 57 : : int rproc_elf_sanity_check(struct rproc *rproc, const struct firmware *fw); 58 : : u32 rproc_elf_get_boot_addr(struct rproc *rproc, const struct firmware *fw); 59 : : int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw); 60 : : int rproc_elf_load_rsc_table(struct rproc *rproc, const struct firmware *fw); 61 : : struct resource_table *rproc_elf_find_loaded_rsc_table(struct rproc *rproc, 62 : : const struct firmware *fw); 63 : : struct rproc_mem_entry * 64 : : rproc_find_carveout_by_name(struct rproc *rproc, const char *name, ...); 65 : : 66 : : static inline 67 : 0 : int rproc_fw_sanity_check(struct rproc *rproc, const struct firmware *fw) 68 : : { 69 [ # # ]: 0 : if (rproc->ops->sanity_check) 70 : 0 : return rproc->ops->sanity_check(rproc, fw); 71 : : 72 : : return 0; 73 : : } 74 : : 75 : : static inline 76 : 0 : u32 rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw) 77 : : { 78 [ # # ]: 0 : if (rproc->ops->get_boot_addr) 79 : 0 : return rproc->ops->get_boot_addr(rproc, fw); 80 : : 81 : : return 0; 82 : : } 83 : : 84 : : static inline 85 : 0 : int rproc_load_segments(struct rproc *rproc, const struct firmware *fw) 86 : : { 87 [ # # ]: 0 : if (rproc->ops->load) 88 : 0 : return rproc->ops->load(rproc, fw); 89 : : 90 : : return -EINVAL; 91 : : } 92 : : 93 : 0 : static inline int rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) 94 : : { 95 [ # # ]: 0 : if (rproc->ops->parse_fw) 96 : 0 : return rproc->ops->parse_fw(rproc, fw); 97 : : 98 : : return 0; 99 : : } 100 : : 101 : : static inline 102 : 0 : int rproc_handle_rsc(struct rproc *rproc, u32 rsc_type, void *rsc, int offset, 103 : : int avail) 104 : : { 105 [ # # ]: 0 : if (rproc->ops->handle_rsc) 106 : 0 : return rproc->ops->handle_rsc(rproc, rsc_type, rsc, offset, 107 : : avail); 108 : : 109 : : return RSC_IGNORED; 110 : : } 111 : : 112 : : static inline 113 : 0 : struct resource_table *rproc_find_loaded_rsc_table(struct rproc *rproc, 114 : : const struct firmware *fw) 115 : : { 116 [ # # ]: 0 : if (rproc->ops->find_loaded_rsc_table) 117 : 0 : return rproc->ops->find_loaded_rsc_table(rproc, fw); 118 : : 119 : : return NULL; 120 : : } 121 : : 122 : : #endif /* REMOTEPROC_INTERNAL_H */