xref: /linux/drivers/greybus/arpc.h (revision b81beec9cb2d586412c7166c893894930f19965e)
1*b81beec9SGreg Kroah-Hartman /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
2*b81beec9SGreg Kroah-Hartman /*
3*b81beec9SGreg Kroah-Hartman  * Copyright(c) 2016 Google Inc. All rights reserved.
4*b81beec9SGreg Kroah-Hartman  * Copyright(c) 2016 Linaro Ltd. All rights reserved.
5*b81beec9SGreg Kroah-Hartman  */
6*b81beec9SGreg Kroah-Hartman 
7*b81beec9SGreg Kroah-Hartman #ifndef __ARPC_H
8*b81beec9SGreg Kroah-Hartman #define __ARPC_H
9*b81beec9SGreg Kroah-Hartman 
10*b81beec9SGreg Kroah-Hartman /* APBridgeA RPC (ARPC) */
11*b81beec9SGreg Kroah-Hartman 
12*b81beec9SGreg Kroah-Hartman enum arpc_result {
13*b81beec9SGreg Kroah-Hartman 	ARPC_SUCCESS		= 0x00,
14*b81beec9SGreg Kroah-Hartman 	ARPC_NO_MEMORY		= 0x01,
15*b81beec9SGreg Kroah-Hartman 	ARPC_INVALID		= 0x02,
16*b81beec9SGreg Kroah-Hartman 	ARPC_TIMEOUT		= 0x03,
17*b81beec9SGreg Kroah-Hartman 	ARPC_UNKNOWN_ERROR	= 0xff,
18*b81beec9SGreg Kroah-Hartman };
19*b81beec9SGreg Kroah-Hartman 
20*b81beec9SGreg Kroah-Hartman struct arpc_request_message {
21*b81beec9SGreg Kroah-Hartman 	__le16	id;		/* RPC unique id */
22*b81beec9SGreg Kroah-Hartman 	__le16	size;		/* Size in bytes of header + payload */
23*b81beec9SGreg Kroah-Hartman 	__u8	type;		/* RPC type */
24*b81beec9SGreg Kroah-Hartman 	__u8	data[0];	/* ARPC data */
25*b81beec9SGreg Kroah-Hartman } __packed;
26*b81beec9SGreg Kroah-Hartman 
27*b81beec9SGreg Kroah-Hartman struct arpc_response_message {
28*b81beec9SGreg Kroah-Hartman 	__le16	id;		/* RPC unique id */
29*b81beec9SGreg Kroah-Hartman 	__u8	result;		/* Result of RPC */
30*b81beec9SGreg Kroah-Hartman } __packed;
31*b81beec9SGreg Kroah-Hartman 
32*b81beec9SGreg Kroah-Hartman /* ARPC requests */
33*b81beec9SGreg Kroah-Hartman #define ARPC_TYPE_CPORT_CONNECTED		0x01
34*b81beec9SGreg Kroah-Hartman #define ARPC_TYPE_CPORT_QUIESCE			0x02
35*b81beec9SGreg Kroah-Hartman #define ARPC_TYPE_CPORT_CLEAR			0x03
36*b81beec9SGreg Kroah-Hartman #define ARPC_TYPE_CPORT_FLUSH			0x04
37*b81beec9SGreg Kroah-Hartman #define ARPC_TYPE_CPORT_SHUTDOWN		0x05
38*b81beec9SGreg Kroah-Hartman 
39*b81beec9SGreg Kroah-Hartman struct arpc_cport_connected_req {
40*b81beec9SGreg Kroah-Hartman 	__le16 cport_id;
41*b81beec9SGreg Kroah-Hartman } __packed;
42*b81beec9SGreg Kroah-Hartman 
43*b81beec9SGreg Kroah-Hartman struct arpc_cport_quiesce_req {
44*b81beec9SGreg Kroah-Hartman 	__le16 cport_id;
45*b81beec9SGreg Kroah-Hartman 	__le16 peer_space;
46*b81beec9SGreg Kroah-Hartman 	__le16 timeout;
47*b81beec9SGreg Kroah-Hartman } __packed;
48*b81beec9SGreg Kroah-Hartman 
49*b81beec9SGreg Kroah-Hartman struct arpc_cport_clear_req {
50*b81beec9SGreg Kroah-Hartman 	__le16 cport_id;
51*b81beec9SGreg Kroah-Hartman } __packed;
52*b81beec9SGreg Kroah-Hartman 
53*b81beec9SGreg Kroah-Hartman struct arpc_cport_flush_req {
54*b81beec9SGreg Kroah-Hartman 	__le16 cport_id;
55*b81beec9SGreg Kroah-Hartman } __packed;
56*b81beec9SGreg Kroah-Hartman 
57*b81beec9SGreg Kroah-Hartman struct arpc_cport_shutdown_req {
58*b81beec9SGreg Kroah-Hartman 	__le16 cport_id;
59*b81beec9SGreg Kroah-Hartman 	__le16 timeout;
60*b81beec9SGreg Kroah-Hartman 	__u8 phase;
61*b81beec9SGreg Kroah-Hartman } __packed;
62*b81beec9SGreg Kroah-Hartman 
63*b81beec9SGreg Kroah-Hartman #endif	/* __ARPC_H */
64