OpenAMP Library
rpmsg_internal.h
Go to the documentation of this file.
1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * $FreeBSD$
5  */
6 
7 #ifndef _RPMSG_INTERNAL_H_
8 #define _RPMSG_INTERNAL_H_
9 
10 #include <stdint.h>
11 #include <openamp/rpmsg.h>
12 
13 #if defined __cplusplus
14 extern "C" {
15 #endif
16 
17 #ifdef RPMSG_DEBUG
18 #include <metal/log.h>
19 
20 #define RPMSG_ASSERT(_exp, _msg) do { \
21  if (!(_exp)) { \
22  metal_log(METAL_LOG_EMERGENCY, \
23  "FATAL: %s - "_msg, __func__); \
24  metal_assert(_exp); \
25  } \
26  } while (0)
27 #else
28 #define RPMSG_ASSERT(_exp, _msg) metal_assert(_exp)
29 #endif
30 
31 #define RPMSG_BUF_HELD (1U << 31) /* Flag to suggest to hold the buffer */
32 
33 #define RPMSG_LOCATE_HDR(p) \
34  ((struct rpmsg_hdr *)((unsigned char *)(p) - sizeof(struct rpmsg_hdr)))
35 #define RPMSG_LOCATE_DATA(p) ((unsigned char *)(p) + sizeof(struct rpmsg_hdr))
36 
48 };
49 
60 METAL_PACKED_BEGIN
61 struct rpmsg_hdr {
62  uint32_t src;
63  uint32_t dst;
64  uint32_t reserved;
65  uint16_t len;
66  uint16_t flags;
68 
81 METAL_PACKED_BEGIN
82 struct rpmsg_ns_msg {
84  uint32_t addr;
85  uint32_t flags;
87 
88 int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags);
89 
90 struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rvdev,
91  const char *name, uint32_t addr,
92  uint32_t dest_addr);
94  struct rpmsg_endpoint *ept,
95  const char *name,
96  uint32_t src, uint32_t dest,
99 
100 static inline struct rpmsg_endpoint *
102 {
103  return rpmsg_get_endpoint(rdev, NULL, addr, RPMSG_ADDR_ANY);
104 }
105 
106 #if defined __cplusplus
107 }
108 #endif
109 
110 #endif /* _RPMSG_INTERNAL_H_ */
#define RPMSG_NAME_SIZE
Definition: rpmsg.h:28
void(* rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept)
Definition: rpmsg.h:53
#define RPMSG_ADDR_ANY
Definition: rpmsg.h:33
int(* rpmsg_ept_cb)(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv)
Definition: rpmsg.h:51
static struct rpmsg_endpoint * rpmsg_get_ept_from_addr(struct rpmsg_device *rdev, uint32_t addr)
Definition: rpmsg_internal.h:101
int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags)
Definition: rpmsg.c:118
void rpmsg_register_endpoint(struct rpmsg_device *rdev, struct rpmsg_endpoint *ept, const char *name, uint32_t src, uint32_t dest, rpmsg_ept_cb cb, rpmsg_ns_unbind_cb ns_unbind_cb)
Definition: rpmsg.c:252
METAL_PACKED_BEGIN struct rpmsg_hdr METAL_PACKED_END
rpmsg_ns_flags
Definition: rpmsg_internal.h:45
@ RPMSG_NS_DESTROY
Definition: rpmsg_internal.h:47
@ RPMSG_NS_CREATE
Definition: rpmsg_internal.h:46
struct rpmsg_endpoint * rpmsg_get_endpoint(struct rpmsg_device *rvdev, const char *name, uint32_t addr, uint32_t dest_addr)
Definition: rpmsg.c:209
Definition: rpmsg.h:120
Definition: rpmsg.h:73
struct rpmsg_device * rdev
Definition: rpmsg.h:75
char name[RPMSG_NAME_SIZE]
Definition: rpmsg.h:74
rpmsg_ept_cb cb
Definition: rpmsg.h:78
uint32_t addr
Definition: rpmsg.h:76
rpmsg_ns_unbind_cb ns_unbind_cb
Definition: rpmsg.h:79
uint32_t dest_addr
Definition: rpmsg.h:77
Definition: rpmsg_internal.h:61
uint32_t dst
Definition: rpmsg_internal.h:63
uint16_t flags
Definition: rpmsg_internal.h:66
uint32_t src
Definition: rpmsg_internal.h:62
uint32_t reserved
Definition: rpmsg_internal.h:64
uint16_t len
Definition: rpmsg_internal.h:65
Definition: rpmsg_internal.h:82
char name[RPMSG_NAME_SIZE]
Definition: rpmsg_internal.h:83
uint32_t addr
Definition: rpmsg_internal.h:84
uint32_t flags
Definition: rpmsg_internal.h:85