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

virtio_rpmsg_bus.c (31100B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Virtio-based remote processor messaging bus
      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#define pr_fmt(fmt) "%s: " fmt, __func__
     13
     14#include <linux/dma-mapping.h>
     15#include <linux/idr.h>
     16#include <linux/jiffies.h>
     17#include <linux/kernel.h>
     18#include <linux/module.h>
     19#include <linux/mutex.h>
     20#include <linux/rpmsg.h>
     21#include <linux/rpmsg/byteorder.h>
     22#include <linux/rpmsg/ns.h>
     23#include <linux/scatterlist.h>
     24#include <linux/slab.h>
     25#include <linux/sched.h>
     26#include <linux/virtio.h>
     27#include <linux/virtio_ids.h>
     28#include <linux/virtio_config.h>
     29#include <linux/wait.h>
     30
     31#include "rpmsg_internal.h"
     32
     33/**
     34 * struct virtproc_info - virtual remote processor state
     35 * @vdev:	the virtio device
     36 * @rvq:	rx virtqueue
     37 * @svq:	tx virtqueue
     38 * @rbufs:	kernel address of rx buffers
     39 * @sbufs:	kernel address of tx buffers
     40 * @num_bufs:	total number of buffers for rx and tx
     41 * @buf_size:   size of one rx or tx buffer
     42 * @last_sbuf:	index of last tx buffer used
     43 * @bufs_dma:	dma base addr of the buffers
     44 * @tx_lock:	protects svq, sbufs and sleepers, to allow concurrent senders.
     45 *		sending a message might require waking up a dozing remote
     46 *		processor, which involves sleeping, hence the mutex.
     47 * @endpoints:	idr of local endpoints, allows fast retrieval
     48 * @endpoints_lock: lock of the endpoints set
     49 * @sendq:	wait queue of sending contexts waiting for a tx buffers
     50 * @sleepers:	number of senders that are waiting for a tx buffer
     51 *
     52 * This structure stores the rpmsg state of a given virtio remote processor
     53 * device (there might be several virtio proc devices for each physical
     54 * remote processor).
     55 */
     56struct virtproc_info {
     57	struct virtio_device *vdev;
     58	struct virtqueue *rvq, *svq;
     59	void *rbufs, *sbufs;
     60	unsigned int num_bufs;
     61	unsigned int buf_size;
     62	int last_sbuf;
     63	dma_addr_t bufs_dma;
     64	struct mutex tx_lock;
     65	struct idr endpoints;
     66	struct mutex endpoints_lock;
     67	wait_queue_head_t sendq;
     68	atomic_t sleepers;
     69};
     70
     71/* The feature bitmap for virtio rpmsg */
     72#define VIRTIO_RPMSG_F_NS	0 /* RP supports name service notifications */
     73
     74/**
     75 * struct rpmsg_hdr - common header for all rpmsg messages
     76 * @src: source address
     77 * @dst: destination address
     78 * @reserved: reserved for future use
     79 * @len: length of payload (in bytes)
     80 * @flags: message flags
     81 * @data: @len bytes of message payload data
     82 *
     83 * Every message sent(/received) on the rpmsg bus begins with this header.
     84 */
     85struct rpmsg_hdr {
     86	__rpmsg32 src;
     87	__rpmsg32 dst;
     88	__rpmsg32 reserved;
     89	__rpmsg16 len;
     90	__rpmsg16 flags;
     91	u8 data[];
     92} __packed;
     93
     94
     95/**
     96 * struct virtio_rpmsg_channel - rpmsg channel descriptor
     97 * @rpdev: the rpmsg channel device
     98 * @vrp: the virtio remote processor device this channel belongs to
     99 *
    100 * This structure stores the channel that links the rpmsg device to the virtio
    101 * remote processor device.
    102 */
    103struct virtio_rpmsg_channel {
    104	struct rpmsg_device rpdev;
    105
    106	struct virtproc_info *vrp;
    107};
    108
    109#define to_virtio_rpmsg_channel(_rpdev) \
    110	container_of(_rpdev, struct virtio_rpmsg_channel, rpdev)
    111
    112/*
    113 * We're allocating buffers of 512 bytes each for communications. The
    114 * number of buffers will be computed from the number of buffers supported
    115 * by the vring, upto a maximum of 512 buffers (256 in each direction).
    116 *
    117 * Each buffer will have 16 bytes for the msg header and 496 bytes for
    118 * the payload.
    119 *
    120 * This will utilize a maximum total space of 256KB for the buffers.
    121 *
    122 * We might also want to add support for user-provided buffers in time.
    123 * This will allow bigger buffer size flexibility, and can also be used
    124 * to achieve zero-copy messaging.
    125 *
    126 * Note that these numbers are purely a decision of this driver - we
    127 * can change this without changing anything in the firmware of the remote
    128 * processor.
    129 */
    130#define MAX_RPMSG_NUM_BUFS	(512)
    131#define MAX_RPMSG_BUF_SIZE	(512)
    132
    133/*
    134 * Local addresses are dynamically allocated on-demand.
    135 * We do not dynamically assign addresses from the low 1024 range,
    136 * in order to reserve that address range for predefined services.
    137 */
    138#define RPMSG_RESERVED_ADDRESSES	(1024)
    139
    140static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept);
    141static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
    142static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
    143			       u32 dst);
    144static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
    145					u32 dst, void *data, int len);
    146static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
    147static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
    148				  int len, u32 dst);
    149static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
    150					   u32 dst, void *data, int len);
    151static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept);
    152static struct rpmsg_device *__rpmsg_create_channel(struct virtproc_info *vrp,
    153						   struct rpmsg_channel_info *chinfo);
    154
    155static const struct rpmsg_endpoint_ops virtio_endpoint_ops = {
    156	.destroy_ept = virtio_rpmsg_destroy_ept,
    157	.send = virtio_rpmsg_send,
    158	.sendto = virtio_rpmsg_sendto,
    159	.send_offchannel = virtio_rpmsg_send_offchannel,
    160	.trysend = virtio_rpmsg_trysend,
    161	.trysendto = virtio_rpmsg_trysendto,
    162	.trysend_offchannel = virtio_rpmsg_trysend_offchannel,
    163	.get_mtu = virtio_rpmsg_get_mtu,
    164};
    165
    166/**
    167 * rpmsg_sg_init - initialize scatterlist according to cpu address location
    168 * @sg: scatterlist to fill
    169 * @cpu_addr: virtual address of the buffer
    170 * @len: buffer length
    171 *
    172 * An internal function filling scatterlist according to virtual address
    173 * location (in vmalloc or in kernel).
    174 */
    175static void
    176rpmsg_sg_init(struct scatterlist *sg, void *cpu_addr, unsigned int len)
    177{
    178	if (is_vmalloc_addr(cpu_addr)) {
    179		sg_init_table(sg, 1);
    180		sg_set_page(sg, vmalloc_to_page(cpu_addr), len,
    181			    offset_in_page(cpu_addr));
    182	} else {
    183		WARN_ON(!virt_addr_valid(cpu_addr));
    184		sg_init_one(sg, cpu_addr, len);
    185	}
    186}
    187
    188/**
    189 * __ept_release() - deallocate an rpmsg endpoint
    190 * @kref: the ept's reference count
    191 *
    192 * This function deallocates an ept, and is invoked when its @kref refcount
    193 * drops to zero.
    194 *
    195 * Never invoke this function directly!
    196 */
    197static void __ept_release(struct kref *kref)
    198{
    199	struct rpmsg_endpoint *ept = container_of(kref, struct rpmsg_endpoint,
    200						  refcount);
    201	/*
    202	 * At this point no one holds a reference to ept anymore,
    203	 * so we can directly free it
    204	 */
    205	kfree(ept);
    206}
    207
    208/* for more info, see below documentation of rpmsg_create_ept() */
    209static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp,
    210						 struct rpmsg_device *rpdev,
    211						 rpmsg_rx_cb_t cb,
    212						 void *priv, u32 addr)
    213{
    214	int id_min, id_max, id;
    215	struct rpmsg_endpoint *ept;
    216	struct device *dev = rpdev ? &rpdev->dev : &vrp->vdev->dev;
    217
    218	ept = kzalloc(sizeof(*ept), GFP_KERNEL);
    219	if (!ept)
    220		return NULL;
    221
    222	kref_init(&ept->refcount);
    223	mutex_init(&ept->cb_lock);
    224
    225	ept->rpdev = rpdev;
    226	ept->cb = cb;
    227	ept->priv = priv;
    228	ept->ops = &virtio_endpoint_ops;
    229
    230	/* do we need to allocate a local address ? */
    231	if (addr == RPMSG_ADDR_ANY) {
    232		id_min = RPMSG_RESERVED_ADDRESSES;
    233		id_max = 0;
    234	} else {
    235		id_min = addr;
    236		id_max = addr + 1;
    237	}
    238
    239	mutex_lock(&vrp->endpoints_lock);
    240
    241	/* bind the endpoint to an rpmsg address (and allocate one if needed) */
    242	id = idr_alloc(&vrp->endpoints, ept, id_min, id_max, GFP_KERNEL);
    243	if (id < 0) {
    244		dev_err(dev, "idr_alloc failed: %d\n", id);
    245		goto free_ept;
    246	}
    247	ept->addr = id;
    248
    249	mutex_unlock(&vrp->endpoints_lock);
    250
    251	return ept;
    252
    253free_ept:
    254	mutex_unlock(&vrp->endpoints_lock);
    255	kref_put(&ept->refcount, __ept_release);
    256	return NULL;
    257}
    258
    259static struct rpmsg_device *virtio_rpmsg_create_channel(struct rpmsg_device *rpdev,
    260							struct rpmsg_channel_info *chinfo)
    261{
    262	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    263	struct virtproc_info *vrp = vch->vrp;
    264
    265	return __rpmsg_create_channel(vrp, chinfo);
    266}
    267
    268static int virtio_rpmsg_release_channel(struct rpmsg_device *rpdev,
    269					struct rpmsg_channel_info *chinfo)
    270{
    271	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    272	struct virtproc_info *vrp = vch->vrp;
    273
    274	return rpmsg_unregister_device(&vrp->vdev->dev, chinfo);
    275}
    276
    277static struct rpmsg_endpoint *virtio_rpmsg_create_ept(struct rpmsg_device *rpdev,
    278						      rpmsg_rx_cb_t cb,
    279						      void *priv,
    280						      struct rpmsg_channel_info chinfo)
    281{
    282	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    283
    284	return __rpmsg_create_ept(vch->vrp, rpdev, cb, priv, chinfo.src);
    285}
    286
    287/**
    288 * __rpmsg_destroy_ept() - destroy an existing rpmsg endpoint
    289 * @vrp: virtproc which owns this ept
    290 * @ept: endpoing to destroy
    291 *
    292 * An internal function which destroy an ept without assuming it is
    293 * bound to an rpmsg channel. This is needed for handling the internal
    294 * name service endpoint, which isn't bound to an rpmsg channel.
    295 * See also __rpmsg_create_ept().
    296 */
    297static void
    298__rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept)
    299{
    300	/* make sure new inbound messages can't find this ept anymore */
    301	mutex_lock(&vrp->endpoints_lock);
    302	idr_remove(&vrp->endpoints, ept->addr);
    303	mutex_unlock(&vrp->endpoints_lock);
    304
    305	/* make sure in-flight inbound messages won't invoke cb anymore */
    306	mutex_lock(&ept->cb_lock);
    307	ept->cb = NULL;
    308	mutex_unlock(&ept->cb_lock);
    309
    310	kref_put(&ept->refcount, __ept_release);
    311}
    312
    313static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
    314{
    315	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(ept->rpdev);
    316
    317	__rpmsg_destroy_ept(vch->vrp, ept);
    318}
    319
    320static int virtio_rpmsg_announce_create(struct rpmsg_device *rpdev)
    321{
    322	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    323	struct virtproc_info *vrp = vch->vrp;
    324	struct device *dev = &rpdev->dev;
    325	int err = 0;
    326
    327	/* need to tell remote processor's name service about this channel ? */
    328	if (rpdev->announce && rpdev->ept &&
    329	    virtio_has_feature(vrp->vdev, VIRTIO_RPMSG_F_NS)) {
    330		struct rpmsg_ns_msg nsm;
    331
    332		strncpy(nsm.name, rpdev->id.name, RPMSG_NAME_SIZE);
    333		nsm.addr = cpu_to_rpmsg32(rpdev, rpdev->ept->addr);
    334		nsm.flags = cpu_to_rpmsg32(rpdev, RPMSG_NS_CREATE);
    335
    336		err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
    337		if (err)
    338			dev_err(dev, "failed to announce service %d\n", err);
    339	}
    340
    341	return err;
    342}
    343
    344static int virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
    345{
    346	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    347	struct virtproc_info *vrp = vch->vrp;
    348	struct device *dev = &rpdev->dev;
    349	int err = 0;
    350
    351	/* tell remote processor's name service we're removing this channel */
    352	if (rpdev->announce && rpdev->ept &&
    353	    virtio_has_feature(vrp->vdev, VIRTIO_RPMSG_F_NS)) {
    354		struct rpmsg_ns_msg nsm;
    355
    356		strncpy(nsm.name, rpdev->id.name, RPMSG_NAME_SIZE);
    357		nsm.addr = cpu_to_rpmsg32(rpdev, rpdev->ept->addr);
    358		nsm.flags = cpu_to_rpmsg32(rpdev, RPMSG_NS_DESTROY);
    359
    360		err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
    361		if (err)
    362			dev_err(dev, "failed to announce service %d\n", err);
    363	}
    364
    365	return err;
    366}
    367
    368static const struct rpmsg_device_ops virtio_rpmsg_ops = {
    369	.create_channel = virtio_rpmsg_create_channel,
    370	.release_channel = virtio_rpmsg_release_channel,
    371	.create_ept = virtio_rpmsg_create_ept,
    372	.announce_create = virtio_rpmsg_announce_create,
    373	.announce_destroy = virtio_rpmsg_announce_destroy,
    374};
    375
    376static void virtio_rpmsg_release_device(struct device *dev)
    377{
    378	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
    379	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    380
    381	kfree(vch);
    382}
    383
    384/*
    385 * create an rpmsg channel using its name and address info.
    386 * this function will be used to create both static and dynamic
    387 * channels.
    388 */
    389static struct rpmsg_device *__rpmsg_create_channel(struct virtproc_info *vrp,
    390						   struct rpmsg_channel_info *chinfo)
    391{
    392	struct virtio_rpmsg_channel *vch;
    393	struct rpmsg_device *rpdev;
    394	struct device *tmp, *dev = &vrp->vdev->dev;
    395	int ret;
    396
    397	/* make sure a similar channel doesn't already exist */
    398	tmp = rpmsg_find_device(dev, chinfo);
    399	if (tmp) {
    400		/* decrement the matched device's refcount back */
    401		put_device(tmp);
    402		dev_err(dev, "channel %s:%x:%x already exist\n",
    403				chinfo->name, chinfo->src, chinfo->dst);
    404		return NULL;
    405	}
    406
    407	vch = kzalloc(sizeof(*vch), GFP_KERNEL);
    408	if (!vch)
    409		return NULL;
    410
    411	/* Link the channel to our vrp */
    412	vch->vrp = vrp;
    413
    414	/* Assign public information to the rpmsg_device */
    415	rpdev = &vch->rpdev;
    416	rpdev->src = chinfo->src;
    417	rpdev->dst = chinfo->dst;
    418	rpdev->ops = &virtio_rpmsg_ops;
    419	rpdev->little_endian = virtio_is_little_endian(vrp->vdev);
    420
    421	/*
    422	 * rpmsg server channels has predefined local address (for now),
    423	 * and their existence needs to be announced remotely
    424	 */
    425	rpdev->announce = rpdev->src != RPMSG_ADDR_ANY;
    426
    427	strncpy(rpdev->id.name, chinfo->name, RPMSG_NAME_SIZE);
    428
    429	rpdev->dev.parent = &vrp->vdev->dev;
    430	rpdev->dev.release = virtio_rpmsg_release_device;
    431	ret = rpmsg_register_device(rpdev);
    432	if (ret)
    433		return NULL;
    434
    435	return rpdev;
    436}
    437
    438/* super simple buffer "allocator" that is just enough for now */
    439static void *get_a_tx_buf(struct virtproc_info *vrp)
    440{
    441	unsigned int len;
    442	void *ret;
    443
    444	/* support multiple concurrent senders */
    445	mutex_lock(&vrp->tx_lock);
    446
    447	/*
    448	 * either pick the next unused tx buffer
    449	 * (half of our buffers are used for sending messages)
    450	 */
    451	if (vrp->last_sbuf < vrp->num_bufs / 2)
    452		ret = vrp->sbufs + vrp->buf_size * vrp->last_sbuf++;
    453	/* or recycle a used one */
    454	else
    455		ret = virtqueue_get_buf(vrp->svq, &len);
    456
    457	mutex_unlock(&vrp->tx_lock);
    458
    459	return ret;
    460}
    461
    462/**
    463 * rpmsg_upref_sleepers() - enable "tx-complete" interrupts, if needed
    464 * @vrp: virtual remote processor state
    465 *
    466 * This function is called before a sender is blocked, waiting for
    467 * a tx buffer to become available.
    468 *
    469 * If we already have blocking senders, this function merely increases
    470 * the "sleepers" reference count, and exits.
    471 *
    472 * Otherwise, if this is the first sender to block, we also enable
    473 * virtio's tx callbacks, so we'd be immediately notified when a tx
    474 * buffer is consumed (we rely on virtio's tx callback in order
    475 * to wake up sleeping senders as soon as a tx buffer is used by the
    476 * remote processor).
    477 */
    478static void rpmsg_upref_sleepers(struct virtproc_info *vrp)
    479{
    480	/* support multiple concurrent senders */
    481	mutex_lock(&vrp->tx_lock);
    482
    483	/* are we the first sleeping context waiting for tx buffers ? */
    484	if (atomic_inc_return(&vrp->sleepers) == 1)
    485		/* enable "tx-complete" interrupts before dozing off */
    486		virtqueue_enable_cb(vrp->svq);
    487
    488	mutex_unlock(&vrp->tx_lock);
    489}
    490
    491/**
    492 * rpmsg_downref_sleepers() - disable "tx-complete" interrupts, if needed
    493 * @vrp: virtual remote processor state
    494 *
    495 * This function is called after a sender, that waited for a tx buffer
    496 * to become available, is unblocked.
    497 *
    498 * If we still have blocking senders, this function merely decreases
    499 * the "sleepers" reference count, and exits.
    500 *
    501 * Otherwise, if there are no more blocking senders, we also disable
    502 * virtio's tx callbacks, to avoid the overhead incurred with handling
    503 * those (now redundant) interrupts.
    504 */
    505static void rpmsg_downref_sleepers(struct virtproc_info *vrp)
    506{
    507	/* support multiple concurrent senders */
    508	mutex_lock(&vrp->tx_lock);
    509
    510	/* are we the last sleeping context waiting for tx buffers ? */
    511	if (atomic_dec_and_test(&vrp->sleepers))
    512		/* disable "tx-complete" interrupts */
    513		virtqueue_disable_cb(vrp->svq);
    514
    515	mutex_unlock(&vrp->tx_lock);
    516}
    517
    518/**
    519 * rpmsg_send_offchannel_raw() - send a message across to the remote processor
    520 * @rpdev: the rpmsg channel
    521 * @src: source address
    522 * @dst: destination address
    523 * @data: payload of message
    524 * @len: length of payload
    525 * @wait: indicates whether caller should block in case no TX buffers available
    526 *
    527 * This function is the base implementation for all of the rpmsg sending API.
    528 *
    529 * It will send @data of length @len to @dst, and say it's from @src. The
    530 * message will be sent to the remote processor which the @rpdev channel
    531 * belongs to.
    532 *
    533 * The message is sent using one of the TX buffers that are available for
    534 * communication with this remote processor.
    535 *
    536 * If @wait is true, the caller will be blocked until either a TX buffer is
    537 * available, or 15 seconds elapses (we don't want callers to
    538 * sleep indefinitely due to misbehaving remote processors), and in that
    539 * case -ERESTARTSYS is returned. The number '15' itself was picked
    540 * arbitrarily; there's little point in asking drivers to provide a timeout
    541 * value themselves.
    542 *
    543 * Otherwise, if @wait is false, and there are no TX buffers available,
    544 * the function will immediately fail, and -ENOMEM will be returned.
    545 *
    546 * Normally drivers shouldn't use this function directly; instead, drivers
    547 * should use the appropriate rpmsg_{try}send{to, _offchannel} API
    548 * (see include/linux/rpmsg.h).
    549 *
    550 * Return: 0 on success and an appropriate error value on failure.
    551 */
    552static int rpmsg_send_offchannel_raw(struct rpmsg_device *rpdev,
    553				     u32 src, u32 dst,
    554				     void *data, int len, bool wait)
    555{
    556	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    557	struct virtproc_info *vrp = vch->vrp;
    558	struct device *dev = &rpdev->dev;
    559	struct scatterlist sg;
    560	struct rpmsg_hdr *msg;
    561	int err;
    562
    563	/* bcasting isn't allowed */
    564	if (src == RPMSG_ADDR_ANY || dst == RPMSG_ADDR_ANY) {
    565		dev_err(dev, "invalid addr (src 0x%x, dst 0x%x)\n", src, dst);
    566		return -EINVAL;
    567	}
    568
    569	/*
    570	 * We currently use fixed-sized buffers, and therefore the payload
    571	 * length is limited.
    572	 *
    573	 * One of the possible improvements here is either to support
    574	 * user-provided buffers (and then we can also support zero-copy
    575	 * messaging), or to improve the buffer allocator, to support
    576	 * variable-length buffer sizes.
    577	 */
    578	if (len > vrp->buf_size - sizeof(struct rpmsg_hdr)) {
    579		dev_err(dev, "message is too big (%d)\n", len);
    580		return -EMSGSIZE;
    581	}
    582
    583	/* grab a buffer */
    584	msg = get_a_tx_buf(vrp);
    585	if (!msg && !wait)
    586		return -ENOMEM;
    587
    588	/* no free buffer ? wait for one (but bail after 15 seconds) */
    589	while (!msg) {
    590		/* enable "tx-complete" interrupts, if not already enabled */
    591		rpmsg_upref_sleepers(vrp);
    592
    593		/*
    594		 * sleep until a free buffer is available or 15 secs elapse.
    595		 * the timeout period is not configurable because there's
    596		 * little point in asking drivers to specify that.
    597		 * if later this happens to be required, it'd be easy to add.
    598		 */
    599		err = wait_event_interruptible_timeout(vrp->sendq,
    600					(msg = get_a_tx_buf(vrp)),
    601					msecs_to_jiffies(15000));
    602
    603		/* disable "tx-complete" interrupts if we're the last sleeper */
    604		rpmsg_downref_sleepers(vrp);
    605
    606		/* timeout ? */
    607		if (!err) {
    608			dev_err(dev, "timeout waiting for a tx buffer\n");
    609			return -ERESTARTSYS;
    610		}
    611	}
    612
    613	msg->len = cpu_to_rpmsg16(rpdev, len);
    614	msg->flags = 0;
    615	msg->src = cpu_to_rpmsg32(rpdev, src);
    616	msg->dst = cpu_to_rpmsg32(rpdev, dst);
    617	msg->reserved = 0;
    618	memcpy(msg->data, data, len);
    619
    620	dev_dbg(dev, "TX From 0x%x, To 0x%x, Len %d, Flags %d, Reserved %d\n",
    621		src, dst, len, msg->flags, msg->reserved);
    622#if defined(CONFIG_DYNAMIC_DEBUG)
    623	dynamic_hex_dump("rpmsg_virtio TX: ", DUMP_PREFIX_NONE, 16, 1,
    624			 msg, sizeof(*msg) + len, true);
    625#endif
    626
    627	rpmsg_sg_init(&sg, msg, sizeof(*msg) + len);
    628
    629	mutex_lock(&vrp->tx_lock);
    630
    631	/* add message to the remote processor's virtqueue */
    632	err = virtqueue_add_outbuf(vrp->svq, &sg, 1, msg, GFP_KERNEL);
    633	if (err) {
    634		/*
    635		 * need to reclaim the buffer here, otherwise it's lost
    636		 * (memory won't leak, but rpmsg won't use it again for TX).
    637		 * this will wait for a buffer management overhaul.
    638		 */
    639		dev_err(dev, "virtqueue_add_outbuf failed: %d\n", err);
    640		goto out;
    641	}
    642
    643	/* tell the remote processor it has a pending message to read */
    644	virtqueue_kick(vrp->svq);
    645out:
    646	mutex_unlock(&vrp->tx_lock);
    647	return err;
    648}
    649
    650static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
    651{
    652	struct rpmsg_device *rpdev = ept->rpdev;
    653	u32 src = ept->addr, dst = rpdev->dst;
    654
    655	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, true);
    656}
    657
    658static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
    659			       u32 dst)
    660{
    661	struct rpmsg_device *rpdev = ept->rpdev;
    662	u32 src = ept->addr;
    663
    664	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, true);
    665}
    666
    667static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
    668					u32 dst, void *data, int len)
    669{
    670	struct rpmsg_device *rpdev = ept->rpdev;
    671
    672	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, true);
    673}
    674
    675static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
    676{
    677	struct rpmsg_device *rpdev = ept->rpdev;
    678	u32 src = ept->addr, dst = rpdev->dst;
    679
    680	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false);
    681}
    682
    683static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
    684				  int len, u32 dst)
    685{
    686	struct rpmsg_device *rpdev = ept->rpdev;
    687	u32 src = ept->addr;
    688
    689	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false);
    690}
    691
    692static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
    693					   u32 dst, void *data, int len)
    694{
    695	struct rpmsg_device *rpdev = ept->rpdev;
    696
    697	return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false);
    698}
    699
    700static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept)
    701{
    702	struct rpmsg_device *rpdev = ept->rpdev;
    703	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
    704
    705	return vch->vrp->buf_size - sizeof(struct rpmsg_hdr);
    706}
    707
    708static int rpmsg_recv_single(struct virtproc_info *vrp, struct device *dev,
    709			     struct rpmsg_hdr *msg, unsigned int len)
    710{
    711	struct rpmsg_endpoint *ept;
    712	struct scatterlist sg;
    713	bool little_endian = virtio_is_little_endian(vrp->vdev);
    714	unsigned int msg_len = __rpmsg16_to_cpu(little_endian, msg->len);
    715	int err;
    716
    717	dev_dbg(dev, "From: 0x%x, To: 0x%x, Len: %d, Flags: %d, Reserved: %d\n",
    718		__rpmsg32_to_cpu(little_endian, msg->src),
    719		__rpmsg32_to_cpu(little_endian, msg->dst), msg_len,
    720		__rpmsg16_to_cpu(little_endian, msg->flags),
    721		__rpmsg32_to_cpu(little_endian, msg->reserved));
    722#if defined(CONFIG_DYNAMIC_DEBUG)
    723	dynamic_hex_dump("rpmsg_virtio RX: ", DUMP_PREFIX_NONE, 16, 1,
    724			 msg, sizeof(*msg) + msg_len, true);
    725#endif
    726
    727	/*
    728	 * We currently use fixed-sized buffers, so trivially sanitize
    729	 * the reported payload length.
    730	 */
    731	if (len > vrp->buf_size ||
    732	    msg_len > (len - sizeof(struct rpmsg_hdr))) {
    733		dev_warn(dev, "inbound msg too big: (%d, %d)\n", len, msg_len);
    734		return -EINVAL;
    735	}
    736
    737	/* use the dst addr to fetch the callback of the appropriate user */
    738	mutex_lock(&vrp->endpoints_lock);
    739
    740	ept = idr_find(&vrp->endpoints, __rpmsg32_to_cpu(little_endian, msg->dst));
    741
    742	/* let's make sure no one deallocates ept while we use it */
    743	if (ept)
    744		kref_get(&ept->refcount);
    745
    746	mutex_unlock(&vrp->endpoints_lock);
    747
    748	if (ept) {
    749		/* make sure ept->cb doesn't go away while we use it */
    750		mutex_lock(&ept->cb_lock);
    751
    752		if (ept->cb)
    753			ept->cb(ept->rpdev, msg->data, msg_len, ept->priv,
    754				__rpmsg32_to_cpu(little_endian, msg->src));
    755
    756		mutex_unlock(&ept->cb_lock);
    757
    758		/* farewell, ept, we don't need you anymore */
    759		kref_put(&ept->refcount, __ept_release);
    760	} else
    761		dev_warn_ratelimited(dev, "msg received with no recipient\n");
    762
    763	/* publish the real size of the buffer */
    764	rpmsg_sg_init(&sg, msg, vrp->buf_size);
    765
    766	/* add the buffer back to the remote processor's virtqueue */
    767	err = virtqueue_add_inbuf(vrp->rvq, &sg, 1, msg, GFP_KERNEL);
    768	if (err < 0) {
    769		dev_err(dev, "failed to add a virtqueue buffer: %d\n", err);
    770		return err;
    771	}
    772
    773	return 0;
    774}
    775
    776/* called when an rx buffer is used, and it's time to digest a message */
    777static void rpmsg_recv_done(struct virtqueue *rvq)
    778{
    779	struct virtproc_info *vrp = rvq->vdev->priv;
    780	struct device *dev = &rvq->vdev->dev;
    781	struct rpmsg_hdr *msg;
    782	unsigned int len, msgs_received = 0;
    783	int err;
    784
    785	msg = virtqueue_get_buf(rvq, &len);
    786	if (!msg) {
    787		dev_err(dev, "uhm, incoming signal, but no used buffer ?\n");
    788		return;
    789	}
    790
    791	while (msg) {
    792		err = rpmsg_recv_single(vrp, dev, msg, len);
    793		if (err)
    794			break;
    795
    796		msgs_received++;
    797
    798		msg = virtqueue_get_buf(rvq, &len);
    799	}
    800
    801	dev_dbg(dev, "Received %u messages\n", msgs_received);
    802
    803	/* tell the remote processor we added another available rx buffer */
    804	if (msgs_received)
    805		virtqueue_kick(vrp->rvq);
    806}
    807
    808/*
    809 * This is invoked whenever the remote processor completed processing
    810 * a TX msg we just sent it, and the buffer is put back to the used ring.
    811 *
    812 * Normally, though, we suppress this "tx complete" interrupt in order to
    813 * avoid the incurred overhead.
    814 */
    815static void rpmsg_xmit_done(struct virtqueue *svq)
    816{
    817	struct virtproc_info *vrp = svq->vdev->priv;
    818
    819	dev_dbg(&svq->vdev->dev, "%s\n", __func__);
    820
    821	/* wake up potential senders that are waiting for a tx buffer */
    822	wake_up_interruptible(&vrp->sendq);
    823}
    824
    825/*
    826 * Called to expose to user a /dev/rpmsg_ctrlX interface allowing to
    827 * create endpoint-to-endpoint communication without associated RPMsg channel.
    828 * The endpoints are rattached to the ctrldev RPMsg device.
    829 */
    830static struct rpmsg_device *rpmsg_virtio_add_ctrl_dev(struct virtio_device *vdev)
    831{
    832	struct virtproc_info *vrp = vdev->priv;
    833	struct virtio_rpmsg_channel *vch;
    834	struct rpmsg_device *rpdev_ctrl;
    835	int err = 0;
    836
    837	vch = kzalloc(sizeof(*vch), GFP_KERNEL);
    838	if (!vch)
    839		return ERR_PTR(-ENOMEM);
    840
    841	/* Link the channel to the vrp */
    842	vch->vrp = vrp;
    843
    844	/* Assign public information to the rpmsg_device */
    845	rpdev_ctrl = &vch->rpdev;
    846	rpdev_ctrl->ops = &virtio_rpmsg_ops;
    847
    848	rpdev_ctrl->dev.parent = &vrp->vdev->dev;
    849	rpdev_ctrl->dev.release = virtio_rpmsg_release_device;
    850	rpdev_ctrl->little_endian = virtio_is_little_endian(vrp->vdev);
    851
    852	err = rpmsg_ctrldev_register_device(rpdev_ctrl);
    853	if (err) {
    854		/* vch will be free in virtio_rpmsg_release_device() */
    855		return ERR_PTR(err);
    856	}
    857
    858	return rpdev_ctrl;
    859}
    860
    861static void rpmsg_virtio_del_ctrl_dev(struct rpmsg_device *rpdev_ctrl)
    862{
    863	if (!rpdev_ctrl)
    864		return;
    865	device_unregister(&rpdev_ctrl->dev);
    866}
    867
    868static int rpmsg_probe(struct virtio_device *vdev)
    869{
    870	vq_callback_t *vq_cbs[] = { rpmsg_recv_done, rpmsg_xmit_done };
    871	static const char * const names[] = { "input", "output" };
    872	struct virtqueue *vqs[2];
    873	struct virtproc_info *vrp;
    874	struct virtio_rpmsg_channel *vch = NULL;
    875	struct rpmsg_device *rpdev_ns, *rpdev_ctrl;
    876	void *bufs_va;
    877	int err = 0, i;
    878	size_t total_buf_space;
    879	bool notify;
    880
    881	vrp = kzalloc(sizeof(*vrp), GFP_KERNEL);
    882	if (!vrp)
    883		return -ENOMEM;
    884
    885	vrp->vdev = vdev;
    886
    887	idr_init(&vrp->endpoints);
    888	mutex_init(&vrp->endpoints_lock);
    889	mutex_init(&vrp->tx_lock);
    890	init_waitqueue_head(&vrp->sendq);
    891
    892	/* We expect two virtqueues, rx and tx (and in this order) */
    893	err = virtio_find_vqs(vdev, 2, vqs, vq_cbs, names, NULL);
    894	if (err)
    895		goto free_vrp;
    896
    897	vrp->rvq = vqs[0];
    898	vrp->svq = vqs[1];
    899
    900	/* we expect symmetric tx/rx vrings */
    901	WARN_ON(virtqueue_get_vring_size(vrp->rvq) !=
    902		virtqueue_get_vring_size(vrp->svq));
    903
    904	/* we need less buffers if vrings are small */
    905	if (virtqueue_get_vring_size(vrp->rvq) < MAX_RPMSG_NUM_BUFS / 2)
    906		vrp->num_bufs = virtqueue_get_vring_size(vrp->rvq) * 2;
    907	else
    908		vrp->num_bufs = MAX_RPMSG_NUM_BUFS;
    909
    910	vrp->buf_size = MAX_RPMSG_BUF_SIZE;
    911
    912	total_buf_space = vrp->num_bufs * vrp->buf_size;
    913
    914	/* allocate coherent memory for the buffers */
    915	bufs_va = dma_alloc_coherent(vdev->dev.parent,
    916				     total_buf_space, &vrp->bufs_dma,
    917				     GFP_KERNEL);
    918	if (!bufs_va) {
    919		err = -ENOMEM;
    920		goto vqs_del;
    921	}
    922
    923	dev_dbg(&vdev->dev, "buffers: va %pK, dma %pad\n",
    924		bufs_va, &vrp->bufs_dma);
    925
    926	/* half of the buffers is dedicated for RX */
    927	vrp->rbufs = bufs_va;
    928
    929	/* and half is dedicated for TX */
    930	vrp->sbufs = bufs_va + total_buf_space / 2;
    931
    932	/* set up the receive buffers */
    933	for (i = 0; i < vrp->num_bufs / 2; i++) {
    934		struct scatterlist sg;
    935		void *cpu_addr = vrp->rbufs + i * vrp->buf_size;
    936
    937		rpmsg_sg_init(&sg, cpu_addr, vrp->buf_size);
    938
    939		err = virtqueue_add_inbuf(vrp->rvq, &sg, 1, cpu_addr,
    940					  GFP_KERNEL);
    941		WARN_ON(err); /* sanity check; this can't really happen */
    942	}
    943
    944	/* suppress "tx-complete" interrupts */
    945	virtqueue_disable_cb(vrp->svq);
    946
    947	vdev->priv = vrp;
    948
    949	rpdev_ctrl = rpmsg_virtio_add_ctrl_dev(vdev);
    950	if (IS_ERR(rpdev_ctrl)) {
    951		err = PTR_ERR(rpdev_ctrl);
    952		goto free_coherent;
    953	}
    954
    955	/* if supported by the remote processor, enable the name service */
    956	if (virtio_has_feature(vdev, VIRTIO_RPMSG_F_NS)) {
    957		vch = kzalloc(sizeof(*vch), GFP_KERNEL);
    958		if (!vch) {
    959			err = -ENOMEM;
    960			goto free_ctrldev;
    961		}
    962
    963		/* Link the channel to our vrp */
    964		vch->vrp = vrp;
    965
    966		/* Assign public information to the rpmsg_device */
    967		rpdev_ns = &vch->rpdev;
    968		rpdev_ns->ops = &virtio_rpmsg_ops;
    969		rpdev_ns->little_endian = virtio_is_little_endian(vrp->vdev);
    970
    971		rpdev_ns->dev.parent = &vrp->vdev->dev;
    972		rpdev_ns->dev.release = virtio_rpmsg_release_device;
    973
    974		err = rpmsg_ns_register_device(rpdev_ns);
    975		if (err)
    976			/* vch will be free in virtio_rpmsg_release_device() */
    977			goto free_ctrldev;
    978	}
    979
    980	/*
    981	 * Prepare to kick but don't notify yet - we can't do this before
    982	 * device is ready.
    983	 */
    984	notify = virtqueue_kick_prepare(vrp->rvq);
    985
    986	/* From this point on, we can notify and get callbacks. */
    987	virtio_device_ready(vdev);
    988
    989	/* tell the remote processor it can start sending messages */
    990	/*
    991	 * this might be concurrent with callbacks, but we are only
    992	 * doing notify, not a full kick here, so that's ok.
    993	 */
    994	if (notify)
    995		virtqueue_notify(vrp->rvq);
    996
    997	dev_info(&vdev->dev, "rpmsg host is online\n");
    998
    999	return 0;
   1000
   1001free_ctrldev:
   1002	rpmsg_virtio_del_ctrl_dev(rpdev_ctrl);
   1003free_coherent:
   1004	dma_free_coherent(vdev->dev.parent, total_buf_space,
   1005			  bufs_va, vrp->bufs_dma);
   1006vqs_del:
   1007	vdev->config->del_vqs(vrp->vdev);
   1008free_vrp:
   1009	kfree(vrp);
   1010	return err;
   1011}
   1012
   1013static int rpmsg_remove_device(struct device *dev, void *data)
   1014{
   1015	device_unregister(dev);
   1016
   1017	return 0;
   1018}
   1019
   1020static void rpmsg_remove(struct virtio_device *vdev)
   1021{
   1022	struct virtproc_info *vrp = vdev->priv;
   1023	size_t total_buf_space = vrp->num_bufs * vrp->buf_size;
   1024	int ret;
   1025
   1026	virtio_reset_device(vdev);
   1027
   1028	ret = device_for_each_child(&vdev->dev, NULL, rpmsg_remove_device);
   1029	if (ret)
   1030		dev_warn(&vdev->dev, "can't remove rpmsg device: %d\n", ret);
   1031
   1032	idr_destroy(&vrp->endpoints);
   1033
   1034	vdev->config->del_vqs(vrp->vdev);
   1035
   1036	dma_free_coherent(vdev->dev.parent, total_buf_space,
   1037			  vrp->rbufs, vrp->bufs_dma);
   1038
   1039	kfree(vrp);
   1040}
   1041
   1042static struct virtio_device_id id_table[] = {
   1043	{ VIRTIO_ID_RPMSG, VIRTIO_DEV_ANY_ID },
   1044	{ 0 },
   1045};
   1046
   1047static unsigned int features[] = {
   1048	VIRTIO_RPMSG_F_NS,
   1049};
   1050
   1051static struct virtio_driver virtio_ipc_driver = {
   1052	.feature_table	= features,
   1053	.feature_table_size = ARRAY_SIZE(features),
   1054	.driver.name	= KBUILD_MODNAME,
   1055	.driver.owner	= THIS_MODULE,
   1056	.id_table	= id_table,
   1057	.probe		= rpmsg_probe,
   1058	.remove		= rpmsg_remove,
   1059};
   1060
   1061static int __init rpmsg_init(void)
   1062{
   1063	int ret;
   1064
   1065	ret = register_virtio_driver(&virtio_ipc_driver);
   1066	if (ret)
   1067		pr_err("failed to register virtio driver: %d\n", ret);
   1068
   1069	return ret;
   1070}
   1071subsys_initcall(rpmsg_init);
   1072
   1073static void __exit rpmsg_fini(void)
   1074{
   1075	unregister_virtio_driver(&virtio_ipc_driver);
   1076}
   1077module_exit(rpmsg_fini);
   1078
   1079MODULE_DEVICE_TABLE(virtio, id_table);
   1080MODULE_DESCRIPTION("Virtio-based remote processor messaging bus");
   1081MODULE_LICENSE("GPL v2");