mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 23:21:46 +00:00
remoteproc: Introduce subdevices
A subdevice is an abstract entity that can be used to tie actions to the booting and shutting down of a remote processor. The subdevice object is expected to be embedded in concrete implementations, allowing for a variety of use cases to be implemented. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
1d701d3dd8
commit
7bdc9650f0
2 changed files with 94 additions and 0 deletions
|
@ -400,6 +400,7 @@ enum rproc_crash_type {
|
|||
* @firmware_loading_complete: marks e/o asynchronous firmware loading
|
||||
* @bootaddr: address of first instruction to boot rproc with (optional)
|
||||
* @rvdevs: list of remote virtio devices
|
||||
* @subdevs: list of subdevices, to following the running state
|
||||
* @notifyids: idr for dynamically assigning rproc-wide unique notify ids
|
||||
* @index: index of this rproc device
|
||||
* @crash_handler: workqueue for handling a crash
|
||||
|
@ -431,6 +432,7 @@ struct rproc {
|
|||
struct completion firmware_loading_complete;
|
||||
u32 bootaddr;
|
||||
struct list_head rvdevs;
|
||||
struct list_head subdevs;
|
||||
struct idr notifyids;
|
||||
int index;
|
||||
struct work_struct crash_handler;
|
||||
|
@ -444,6 +446,19 @@ struct rproc {
|
|||
bool auto_boot;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rproc_subdev - subdevice tied to a remoteproc
|
||||
* @node: list node related to the rproc subdevs list
|
||||
* @probe: probe function, called as the rproc is started
|
||||
* @remove: remove function, called as the rproc is stopped
|
||||
*/
|
||||
struct rproc_subdev {
|
||||
struct list_head node;
|
||||
|
||||
int (*probe)(struct rproc_subdev *subdev);
|
||||
void (*remove)(struct rproc_subdev *subdev);
|
||||
};
|
||||
|
||||
/* we currently support only two vrings per rvdev */
|
||||
|
||||
#define RVDEV_NUM_VRINGS 2
|
||||
|
@ -511,4 +526,11 @@ static inline struct rproc *vdev_to_rproc(struct virtio_device *vdev)
|
|||
return rvdev->rproc;
|
||||
}
|
||||
|
||||
void rproc_add_subdev(struct rproc *rproc,
|
||||
struct rproc_subdev *subdev,
|
||||
int (*probe)(struct rproc_subdev *subdev),
|
||||
void (*remove)(struct rproc_subdev *subdev));
|
||||
|
||||
void rproc_remove_subdev(struct rproc *rproc, struct rproc_subdev *subdev);
|
||||
|
||||
#endif /* REMOTEPROC_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue