You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
caif_virtio: Introduce caif over virtio
Add the CAIF Virtio shared memory driver for talking to a modem. This CAIF Link layer communicates to the modem over shared memory. It is implemented as a virtio_driver. The underlying virtio device is managed by the remoteproc framework. The Virtio queue is used for transmitting data to the modem, and the new vringh is used for receiving data. Genalloc is used for managing the shared memory used for TX data. The default dma-alloc-coherent allocator can only allocate whole pages, and this wastes too much shared memory. Flow control is implemented by stopping the TX-queues if the virtio queues go full or we run out of memory. Queued are reopened when queues are below the watermark. NAPI is used in RX path, and a dedicated tasklet is used for releasing TX buffers. Signed-off-by: Erwan Yvin <erwan.yvin@stericsson.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (minor fixes)
This commit is contained in:
committed by
Rusty Russell
parent
3beee86a4b
commit
0d2e1a2926
@@ -47,3 +47,17 @@ config CAIF_HSI
|
||||
The caif low level driver for CAIF over HSI.
|
||||
Be aware that if you enable this then you also need to
|
||||
enable a low-level HSI driver.
|
||||
|
||||
config CAIF_VIRTIO
|
||||
tristate "CAIF virtio transport driver"
|
||||
depends on CAIF
|
||||
select VHOST_RING
|
||||
select VIRTIO
|
||||
select GENERIC_ALLOCATOR
|
||||
default n
|
||||
---help---
|
||||
The caif driver for CAIF over Virtio.
|
||||
|
||||
if CAIF_VIRTIO
|
||||
source "drivers/vhost/Kconfig"
|
||||
endif
|
||||
|
||||
@@ -13,3 +13,6 @@ obj-$(CONFIG_CAIF_SHM) += caif_shm.o
|
||||
|
||||
# HSI interface
|
||||
obj-$(CONFIG_CAIF_HSI) += caif_hsi.o
|
||||
|
||||
# Virtio interface
|
||||
obj-$(CONFIG_CAIF_VIRTIO) += caif_virtio.o
|
||||
|
||||
785
drivers/net/caif/caif_virtio.c
Normal file
785
drivers/net/caif/caif_virtio.c
Normal file
File diff suppressed because it is too large
Load Diff
24
include/linux/virtio_caif.h
Normal file
24
include/linux/virtio_caif.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) ST-Ericsson AB 2012
|
||||
* Author: Sjur Brændeland <sjur.brandeland@stericsson.com>
|
||||
*
|
||||
* This header is BSD licensed so
|
||||
* anyone can use the definitions to implement compatible remote processors
|
||||
*/
|
||||
|
||||
#ifndef VIRTIO_CAIF_H
|
||||
#define VIRTIO_CAIF_H
|
||||
|
||||
#include <linux/types.h>
|
||||
struct virtio_caif_transf_config {
|
||||
u16 headroom;
|
||||
u16 tailroom;
|
||||
u32 mtu;
|
||||
u8 reserved[4];
|
||||
};
|
||||
|
||||
struct virtio_caif_config {
|
||||
struct virtio_caif_transf_config uplink, downlink;
|
||||
u8 reserved[8];
|
||||
};
|
||||
#endif
|
||||
@@ -38,5 +38,6 @@
|
||||
#define VIRTIO_ID_SCSI 8 /* virtio scsi */
|
||||
#define VIRTIO_ID_9P 9 /* 9p virtio console */
|
||||
#define VIRTIO_ID_RPROC_SERIAL 11 /* virtio remoteproc serial link */
|
||||
#define VIRTIO_ID_CAIF 12 /* Virtio caif */
|
||||
|
||||
#endif /* _LINUX_VIRTIO_IDS_H */
|
||||
|
||||
Reference in New Issue
Block a user