xref: /OK3568_Linux_fs/kernel/include/linux/rpmsg/rockchip_rpmsg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2022 Rockchip Electronics Co., Ltd.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun #ifndef ROCKCHIP_RPMSG_H
6*4882a593Smuzhiyun #define ROCKCHIP_RPMSG_H
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun /* rpmsg flag bit definition
9*4882a593Smuzhiyun  * bit 0: Set 1 to indicate remote processor is ready
10*4882a593Smuzhiyun  * bit 1: Set 1 to use reserved memory region as shared DMA pool
11*4882a593Smuzhiyun  * bit 2: Set 1 to use cached share memory as vring buffer
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun #define RPMSG_REMOTE_IS_READY			BIT(0)
14*4882a593Smuzhiyun #define RPMSG_SHARED_DMA_POOL			BIT(1)
15*4882a593Smuzhiyun #define RPMSG_CACHED_VRING			BIT(2)
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define RPMSG_VIRTIO_RPMSG_F_NS			BIT(0)
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define RPMSG_BUF_PAYLOAD_SIZE			(496UL)
20*4882a593Smuzhiyun /* rpmsg buffer size is formed by payload size and struct rpmsg_hdr */
21*4882a593Smuzhiyun #define RPMSG_BUF_SIZE				(RPMSG_BUF_PAYLOAD_SIZE + 16UL)
22*4882a593Smuzhiyun /* rpmsg buffer count for each direction */
23*4882a593Smuzhiyun #define RPMSG_BUF_COUNT				(64UL)
24*4882a593Smuzhiyun /* rpmsg endpoint size is equal to rpmsg buffer size */
25*4882a593Smuzhiyun #define RPMSG_EPT_SIZE				RPMSG_BUF_SIZE
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #define RPMSG_MAX_INSTANCE_NUM			(12U)
28*4882a593Smuzhiyun #define RPMSG_MAX_LINK_ID			(0xFFU)
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define RPMSG_MBOX_MAGIC			(0x524D5347U)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /* Linux requires the ALIGN to 0x1000(4KB) */
33*4882a593Smuzhiyun #define RPMSG_VRING_ALIGN			(0x1000UL)
34*4882a593Smuzhiyun /* contains pool of descriptors and two circular buffers */
35*4882a593Smuzhiyun #define RPMSG_VRING_SIZE			(0x8000UL)
36*4882a593Smuzhiyun /* size of 2 * RPMSG_VRING_SIZE */
37*4882a593Smuzhiyun #define RPMSG_VRING_OVERHEAD			(2UL * RPMSG_VRING_SIZE)
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /* link_id: 4 bit master cpu_id and 4 bit remote_id */
40*4882a593Smuzhiyun #define RPMSG_GET_M_CPU_ID(link_id)		(((link_id) & 0xF0U) >> 4U)
41*4882a593Smuzhiyun #define RPMSG_GET_R_CPU_ID(link_id)		((link_id) & 0xFU)
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #endif /* ROCKCHIP_RPMSG_H */
44