cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rpmsg_internal.h (3841B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * remote processor messaging bus internals
      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 __RPMSG_INTERNAL_H__
     13#define __RPMSG_INTERNAL_H__
     14
     15#include <linux/rpmsg.h>
     16#include <linux/poll.h>
     17
     18#define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev)
     19#define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv)
     20
     21extern struct class *rpmsg_class;
     22
     23/**
     24 * struct rpmsg_device_ops - indirection table for the rpmsg_device operations
     25 * @create_channel:	create backend-specific channel, optional
     26 * @release_channel:	release backend-specific channel, optional
     27 * @create_ept:		create backend-specific endpoint, required
     28 * @announce_create:	announce presence of new channel, optional
     29 * @announce_destroy:	announce destruction of channel, optional
     30 *
     31 * Indirection table for the operations that a rpmsg backend should implement.
     32 * @announce_create and @announce_destroy are optional as the backend might
     33 * advertise new channels implicitly by creating the endpoints.
     34 */
     35struct rpmsg_device_ops {
     36	struct rpmsg_device *(*create_channel)(struct rpmsg_device *rpdev,
     37					       struct rpmsg_channel_info *chinfo);
     38	int (*release_channel)(struct rpmsg_device *rpdev,
     39			       struct rpmsg_channel_info *chinfo);
     40	struct rpmsg_endpoint *(*create_ept)(struct rpmsg_device *rpdev,
     41					    rpmsg_rx_cb_t cb, void *priv,
     42					    struct rpmsg_channel_info chinfo);
     43
     44	int (*announce_create)(struct rpmsg_device *ept);
     45	int (*announce_destroy)(struct rpmsg_device *ept);
     46};
     47
     48/**
     49 * struct rpmsg_endpoint_ops - indirection table for rpmsg_endpoint operations
     50 * @destroy_ept:	see @rpmsg_destroy_ept(), required
     51 * @send:		see @rpmsg_send(), required
     52 * @sendto:		see @rpmsg_sendto(), optional
     53 * @send_offchannel:	see @rpmsg_send_offchannel(), optional
     54 * @trysend:		see @rpmsg_trysend(), required
     55 * @trysendto:		see @rpmsg_trysendto(), optional
     56 * @trysend_offchannel:	see @rpmsg_trysend_offchannel(), optional
     57 * @poll:		see @rpmsg_poll(), optional
     58 * @get_mtu:		see @rpmsg_get_mtu(), optional
     59 *
     60 * Indirection table for the operations that a rpmsg backend should implement.
     61 * In addition to @destroy_ept, the backend must at least implement @send and
     62 * @trysend, while the variants sending data off-channel are optional.
     63 */
     64struct rpmsg_endpoint_ops {
     65	void (*destroy_ept)(struct rpmsg_endpoint *ept);
     66
     67	int (*send)(struct rpmsg_endpoint *ept, void *data, int len);
     68	int (*sendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
     69	int (*send_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
     70				  void *data, int len);
     71
     72	int (*trysend)(struct rpmsg_endpoint *ept, void *data, int len);
     73	int (*trysendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
     74	int (*trysend_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
     75			     void *data, int len);
     76	__poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
     77			     poll_table *wait);
     78	ssize_t (*get_mtu)(struct rpmsg_endpoint *ept);
     79};
     80
     81struct device *rpmsg_find_device(struct device *parent,
     82				 struct rpmsg_channel_info *chinfo);
     83
     84struct rpmsg_device *rpmsg_create_channel(struct rpmsg_device *rpdev,
     85					  struct rpmsg_channel_info *chinfo);
     86int rpmsg_release_channel(struct rpmsg_device *rpdev,
     87			  struct rpmsg_channel_info *chinfo);
     88/**
     89 * rpmsg_ctrldev_register_device() - register a char device for control based on rpdev
     90 * @rpdev:	prepared rpdev to be used for creating endpoints
     91 *
     92 * This function wraps rpmsg_register_device() preparing the rpdev for use as
     93 * basis for the rpmsg chrdev.
     94 */
     95static inline int rpmsg_ctrldev_register_device(struct rpmsg_device *rpdev)
     96{
     97	return rpmsg_register_device_override(rpdev, "rpmsg_ctrl");
     98}
     99
    100#endif