diff options
author | Morten Borup Petersen <morten.petersen@arm.com> | 2019-05-29 11:05:35 +0100 |
---|---|---|
committer | Tushar Khandelwal <tushar.khandelwal@arm.com> | 2019-09-04 11:37:10 +0100 |
commit | 1823b4070df6fb9fd214d75f08e79ba815a95a33 (patch) | |
tree | d88684620192d8ef0b852adc7a2ef661217dd7fd /framework/include/openamp/rpmsg_internal.h | |
parent | dcdab40635b39fb7b2cb24474060d0d4560cb2af (diff) |
add openamp framework and rpmsg clientCORSTONE-700-2019.09.23
Change-Id: I3c0cb2b52975af89d6e2d5482389d9ebc06a0cfe
Signed-off-by: Morten Borup Petersen <morten.petersen@arm.com>
Diffstat (limited to 'framework/include/openamp/rpmsg_internal.h')
-rw-r--r-- | framework/include/openamp/rpmsg_internal.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/framework/include/openamp/rpmsg_internal.h b/framework/include/openamp/rpmsg_internal.h new file mode 100644 index 0000000..e4e1221 --- /dev/null +++ b/framework/include/openamp/rpmsg_internal.h @@ -0,0 +1,101 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * + * $FreeBSD$ + */ + +#ifndef _RPMSG_INTERNAL_H_ +#define _RPMSG_INTERNAL_H_ + +#include <stdint.h> +#include <openamp/rpmsg.h> +#include <libmetal/compiler.h> + +#ifdef RPMSG_DEBUG +#include <metal/log.h> + +#define RPMSG_ASSERT(_exp, _msg) do { \ + if (!(_exp)) { \ + metal_log(METAL_LOG_EMERGENCY, \ + "FATAL: %s - "_msg, __func__); \ + while (1) { \ + ; \ + } \ + } \ + } while (0) +#else +#define RPMSG_ASSERT(_exp, _msg) do { \ + if (!(_exp)) \ + while (1) { \ + ; \ + } \ + } while (0) +#endif + +#define RPMSG_LOCATE_DATA(p) ((unsigned char *)(p) + sizeof(struct rpmsg_hdr)) +/** + * enum rpmsg_ns_flags - dynamic name service announcement flags + * + * @RPMSG_NS_CREATE: a new remote service was just created + * @RPMSG_NS_DESTROY: a known remote service was just destroyed + * @RPMSG_NS_CREATE_WITH_ACK: a new remote service was just created waiting + * acknowledgment. + */ +enum rpmsg_ns_flags { + RPMSG_NS_CREATE = 0, + RPMSG_NS_DESTROY = 1, +}; + +/** + * struct rpmsg_hdr - common header for all rpmsg messages + * @src: source address + * @dst: destination address + * @reserved: reserved for future use + * @len: length of payload (in bytes) + * @flags: message flags + * + * Every message sent(/received) on the rpmsg bus begins with this header. + */ +OPENAMP_PACKED_BEGIN +struct rpmsg_hdr { + uint32_t src; + uint32_t dst; + uint32_t reserved; + uint16_t len; + uint16_t flags; +} OPENAMP_PACKED_END; + +/** + * struct rpmsg_ns_msg - dynamic name service announcement message + * @name: name of remote service that is published + * @addr: address of remote service that is published + * @flags: indicates whether service is created or destroyed + * + * This message is sent across to publish a new service, or announce + * about its removal. When we receive these messages, an appropriate + * rpmsg channel (i.e device) is created/destroyed. In turn, the ->probe() + * or ->remove() handler of the appropriate rpmsg driver will be invoked + * (if/as-soon-as one is registered). + */ +OPENAMP_PACKED_BEGIN +struct rpmsg_ns_msg { + char name[RPMSG_NAME_SIZE]; + uint32_t addr; + uint32_t flags; +} OPENAMP_PACKED_END; + +int rpmsg_send_ns_message(struct rpmsg_endpoint *ept, unsigned long flags); + +struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rvdev, + const char *name, uint32_t addr, + uint32_t dest_addr); +int rpmsg_register_endpoint(struct rpmsg_device *rdev, + struct rpmsg_endpoint *ept); + +static inline struct rpmsg_endpoint * +rpmsg_get_ept_from_addr(struct rpmsg_device *rdev, uint32_t addr) +{ + return rpmsg_get_endpoint(rdev, NULL, addr, RPMSG_ADDR_ANY); +} + +#endif /* _RPMSG_INTERNAL_H_ */ |