linux/drivers/remoteproc/remoteproc_internal.h
<<
>>
Prefs
   1/*
   2 * Remote processor framework
   3 *
   4 * Copyright (C) 2011 Texas Instruments, Inc.
   5 * Copyright (C) 2011 Google, Inc.
   6 *
   7 * Ohad Ben-Cohen <ohad@wizery.com>
   8 * Brian Swetland <swetland@google.com>
   9 *
  10 * This software is licensed under the terms of the GNU General Public
  11 * License version 2, as published by the Free Software Foundation, and
  12 * may be copied, distributed, and modified under those terms.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 */
  19
  20#ifndef REMOTEPROC_INTERNAL_H
  21#define REMOTEPROC_INTERNAL_H
  22
  23#include <linux/irqreturn.h>
  24#include <linux/firmware.h>
  25
  26struct rproc;
  27
  28/**
  29 * struct rproc_fw_ops - firmware format specific operations.
  30 * @find_rsc_table:     finds the resource table inside the firmware image
  31 * @load:               load firmeware to memory, where the remote processor
  32 *                      expects to find it
  33 * @sanity_check:       sanity check the fw image
  34 * @get_boot_addr:      get boot address to entry point specified in firmware
  35 */
  36struct rproc_fw_ops {
  37        struct resource_table *(*find_rsc_table) (struct rproc *rproc,
  38                                                const struct firmware *fw,
  39                                                int *tablesz);
  40        int (*load)(struct rproc *rproc, const struct firmware *fw);
  41        int (*sanity_check)(struct rproc *rproc, const struct firmware *fw);
  42        u32 (*get_boot_addr)(struct rproc *rproc, const struct firmware *fw);
  43};
  44
  45/* from remoteproc_core.c */
  46void rproc_release(struct kref *kref);
  47irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id);
  48
  49/* from remoteproc_virtio.c */
  50int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id);
  51void rproc_remove_virtio_dev(struct rproc_vdev *rvdev);
  52
  53/* from remoteproc_debugfs.c */
  54void rproc_remove_trace_file(struct dentry *tfile);
  55struct dentry *rproc_create_trace_file(const char *name, struct rproc *rproc,
  56                                        struct rproc_mem_entry *trace);
  57void rproc_delete_debug_dir(struct rproc *rproc);
  58void rproc_create_debug_dir(struct rproc *rproc);
  59void rproc_init_debugfs(void);
  60void rproc_exit_debugfs(void);
  61
  62void rproc_free_vring(struct rproc_vring *rvring);
  63int rproc_alloc_vring(struct rproc_vdev *rvdev, int i);
  64
  65void *rproc_da_to_va(struct rproc *rproc, u64 da, int len);
  66int rproc_trigger_recovery(struct rproc *rproc);
  67
  68static inline
  69int rproc_fw_sanity_check(struct rproc *rproc, const struct firmware *fw)
  70{
  71        if (rproc->fw_ops->sanity_check)
  72                return rproc->fw_ops->sanity_check(rproc, fw);
  73
  74        return 0;
  75}
  76
  77static inline
  78u32 rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw)
  79{
  80        if (rproc->fw_ops->get_boot_addr)
  81                return rproc->fw_ops->get_boot_addr(rproc, fw);
  82
  83        return 0;
  84}
  85
  86static inline
  87int rproc_load_segments(struct rproc *rproc, const struct firmware *fw)
  88{
  89        if (rproc->fw_ops->load)
  90                return rproc->fw_ops->load(rproc, fw);
  91
  92        return -EINVAL;
  93}
  94
  95static inline
  96struct resource_table *rproc_find_rsc_table(struct rproc *rproc,
  97                                const struct firmware *fw, int *tablesz)
  98{
  99        if (rproc->fw_ops->find_rsc_table)
 100                return rproc->fw_ops->find_rsc_table(rproc, fw, tablesz);
 101
 102        return NULL;
 103}
 104
 105extern const struct rproc_fw_ops rproc_elf_fw_ops;
 106
 107#endif /* REMOTEPROC_INTERNAL_H */
 108
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.