OpenAMP Library  353
rpmsg_rpc_client_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021, L&T Technology Services Ltd.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef RPMSG_RPC_CLIENT_SERVER_H
9 #define RPMSG_RPC_CLIENT_SERVER_H
10 
11 #include <openamp/open_amp.h>
12 #include <metal/compiler.h>
13 
14 #if defined __cplusplus
15 extern "C" {
16 #endif
17 
18 #define RPMSG_RPC_OK 0
19 #define RPMSG_RPC_INVALID_ID (-1L)
20 #define RPMSG_RPC_SERVICE_NAME "rpmsg-rpc"
21 
22 /* RPMSG_BUFFER_SIZE = 512
23  * sizeof(struct rpmsg_hdr) = 16
24  * RPMSG_BUFFER_SIZE - sizeof(struct rpmsg_hdr) - 1 = 495
25  * Aligning to 64 bits -> 488UL
26  */
27 #define MAX_BUF_LEN 488UL
28 #define MAX_FUNC_ID_LEN sizeof(uint32_t)
29 
30 struct rpmsg_rpc_clt;
31 struct rpmsg_rpc_svr;
32 
33 typedef void (*rpmsg_rpc_shutdown_cb)(struct rpmsg_rpc_clt *rpc);
34 typedef void (*app_cb)(struct rpmsg_rpc_clt *rpc, int status, void *data,
35  size_t len);
36 typedef int (*rpmsg_rpc_syscall_cb)(void *data, struct rpmsg_rpc_svr *rpcs);
37 
46  uint32_t id;
47  unsigned char params[MAX_BUF_LEN];
48 };
49 
51 METAL_PACKED_BEGIN
54  uint32_t id;
55 
57  int32_t status;
58 
60  unsigned char params[MAX_BUF_LEN];
62 
66  uint32_t id;
67 
70 };
71 
75  uint32_t id;
76 
79 };
80 
86 struct rpmsg_rpc_svr {
88  struct rpmsg_endpoint ept;
89 
92 
94  unsigned int n_services;
95 };
96 
105  struct rpmsg_endpoint ept;
106 
109 
112 
114  unsigned int n_services;
115 };
116 
126 void rpmsg_rpc_client_release(struct rpmsg_rpc_clt *rpc);
127 
145 int rpmsg_rpc_client_init(struct rpmsg_rpc_clt *rpc,
146  struct rpmsg_device *rdev,
147  rpmsg_rpc_shutdown_cb shutdown_cb,
148  const struct rpmsg_rpc_client_services *services,
149  int len);
150 
166 int rpmsg_rpc_server_init(struct rpmsg_rpc_svr *rpcs, struct rpmsg_device *rdev,
167  const struct rpmsg_rpc_services *services, int len,
168  rpmsg_ns_unbind_cb rpmsg_service_server_unbind);
169 
183 int rpmsg_rpc_client_send(struct rpmsg_rpc_clt *rpc,
184  uint32_t rpc_id, void *request_param,
185  size_t req_param_size);
186 
202 int rpmsg_rpc_server_send(struct rpmsg_rpc_svr *rpcs, uint32_t rpc_id,
203  int status, void *request_param,
204  size_t param_size);
205 
206 #if defined __cplusplus
207 }
208 #endif
209 
210 #endif /* RPMSG_RPC_CLIENT_SERVER_H */
void(* rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept)
Definition: rpmsg.h:55
int rpmsg_rpc_client_init(struct rpmsg_rpc_clt *rpc, struct rpmsg_device *rdev, rpmsg_rpc_shutdown_cb shutdown_cb, const struct rpmsg_rpc_client_services *services, int len)
Definition: rpmsg_rpc_client.c:25
int rpmsg_rpc_server_init(struct rpmsg_rpc_svr *rpcs, struct rpmsg_device *rdev, const struct rpmsg_rpc_services *services, int len, rpmsg_ns_unbind_cb rpmsg_service_server_unbind)
Definition: rpmsg_rpc_server.c:16
METAL_PACKED_BEGIN struct rpmsg_rpc_answer METAL_PACKED_END
int rpmsg_rpc_client_send(struct rpmsg_rpc_clt *rpc, uint32_t rpc_id, void *request_param, size_t req_param_size)
Definition: rpmsg_rpc_client.c:50
int rpmsg_rpc_server_send(struct rpmsg_rpc_svr *rpcs, uint32_t rpc_id, int status, void *request_param, size_t param_size)
Definition: rpmsg_rpc_server.c:82
void(* rpmsg_rpc_shutdown_cb)(struct rpmsg_rpc_clt *rpc)
Definition: rpmsg_rpc_client_server.h:33
#define MAX_BUF_LEN
Definition: rpmsg_rpc_client_server.h:27
int(* rpmsg_rpc_syscall_cb)(void *data, struct rpmsg_rpc_svr *rpcs)
Definition: rpmsg_rpc_client_server.h:36
void(* app_cb)(struct rpmsg_rpc_clt *rpc, int status, void *data, size_t len)
Definition: rpmsg_rpc_client_server.h:34
void rpmsg_rpc_client_release(struct rpmsg_rpc_clt *rpc)
Definition: rpmsg_rpc_client.c:81
Representation of a RPMsg device.
Definition: rpmsg.h:133
Structure that binds a local RPMsg address to its user.
Definition: rpmsg.h:65
RPC request message.
Definition: rpmsg_rpc_client_server.h:52
int32_t status
Status of RPC.
Definition: rpmsg_rpc_client_server.h:57
uint32_t id
Service ID.
Definition: rpmsg_rpc_client_server.h:54
unsigned char params[MAX_BUF_LEN]
Answer params.
Definition: rpmsg_rpc_client_server.h:60
Table for client services.
Definition: rpmsg_rpc_client_server.h:73
app_cb cb
ID callback.
Definition: rpmsg_rpc_client_server.h:78
uint32_t id
Service ID.
Definition: rpmsg_rpc_client_server.h:75
Client remote procedure call data.
Definition: rpmsg_rpc_client_server.h:103
unsigned int n_services
Number of services.
Definition: rpmsg_rpc_client_server.h:114
rpmsg_rpc_shutdown_cb shutdown_cb
Shutdown callback function.
Definition: rpmsg_rpc_client_server.h:108
struct rpmsg_endpoint ept
RPMsg endpoint associated with the call.
Definition: rpmsg_rpc_client_server.h:105
const struct rpmsg_rpc_client_services * services
Service table.
Definition: rpmsg_rpc_client_server.h:111
struct rpmsg_rpc_request - rpc request message
Definition: rpmsg_rpc_client_server.h:45
uint32_t id
Definition: rpmsg_rpc_client_server.h:46
unsigned char params[MAX_BUF_LEN]
Definition: rpmsg_rpc_client_server.h:47
Table for services.
Definition: rpmsg_rpc_client_server.h:64
rpmsg_rpc_syscall_cb cb_function
ID callback.
Definition: rpmsg_rpc_client_server.h:69
uint32_t id
Service ID.
Definition: rpmsg_rpc_client_server.h:66
Server remote procedure call data.
Definition: rpmsg_rpc_client_server.h:86
unsigned int n_services
Number of services.
Definition: rpmsg_rpc_client_server.h:94
struct rpmsg_endpoint ept
RPMsg destination endpoint structure.
Definition: rpmsg_rpc_client_server.h:88
const struct rpmsg_rpc_services * services
Service table.
Definition: rpmsg_rpc_client_server.h:91