Hardware Abstraction Layer for FreeRTOS
mailbox_prv.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2016
5  */
6 #ifndef MAILBOX_PRV_
7 #define MAILBOX_PRV_
8 #ifndef MAILBOX_PRV
9 # error "Never include this file out of a MAILBOX driver"
10 #endif
11 #include <FreeRTOS.h>
12 #include <semphr.h>
13 #include <stdint.h>
14 #include <stdbool.h>
15 #include <hal.h>
16 #define MAILBOX_ALREDY_INITED 1
17 int32_t mailbox_genericInit(struct mailbox *mailbox);
18 #ifdef CONFIG_MAILBOX_THREAD_SAVE
19 # define mailbox_lock(u, w, e) HAL_LOCK(u, w, e)
20 # define mailbox_unlock(u, e) HAL_UNLOCK(u, e)
21 #else
22 # define mailbox_lock(u, w, e)
23 # define mailbox_unlock(u, e)
24 #endif
25 #define MAILBOX_ADDDEV(ns, p) HAL_ADDDEV(mailbox, ns, p)
27 #define MAILBOX_GET_DEV(index) HAL_GET_DEV(mailbox, index)
28 #ifndef CONFIG_MAILBOX_MULTI
29 # define MAILBOX_OPS(ns)
30 # define MAILBOX_INIT_DEV(ns)
31 
32 # define MAILBOX_INIT(ns, index) struct mailbox *mailbox_init(uint32_t index)
33 # define MAILBOX_DEINIT(ns, p) int32_t mailbox_deinit(struct mailbox *p)
34 
35 # define MAILBOX_SEND(ns, p, data, w) int32_t mailbox_send(struct mailbox *p, uint32_t data, TickType_t w)
36 # define MAILBOX_RECV(ns, p, data, w) int32_t mailbox_recv(struct mailbox *p, uint32_t *data, TickType_t w)
37 # define MAILBOX_SEND_ISR(ns, p, data) int32_t mailbox_sendISR(struct mailbox *p, uint32_t data)
38 # define MAILBOX_RECV_ISR(ns, p, data) int32_t mailbox_recvISR(struct mailbox *p, uint32_t *data)
39 #else
40 # define MAILBOX_OPS(ns) static const struct mailbox_ops ns##_mailbox_ops = { \
41  .mailbox_init = &ns##_mailbox_init,\
42  .mailbox_deinit = &ns##_mailbox_deinit,\
43  .mailbox_send = &ns##_mailbox_send,\
44  .mailbox_recv = &ns##_mailbox_recv,\
45  .mailbox_sendISR = &ns##_mailbox_sendISR,\
46  .mailbox_recvISR = &ns##_mailbox_recvISR,\
47 }
48 # define MAILBOX_INIT_DEV(ns) .gen.ops = &ns##_mailbox_ops,
49 # define MAILBOX_INIT(ns, index) static struct mailbox *ns##_mailbox_init(uint32_t index)
50 # define MAILBOX_DEINIT(ns, p) static int32_t ns##_mailbox_deinit(struct mailbox *p)
51 # define MAILBOX_SEND(ns, p, data, w) int32_t ns##_mailbox_send(struct mailbox *p, uint32_t data, TickType_t w)
52 # define MAILBOX_RECV(ns, p, data, w) int32_t ns##_mailbox_recv(struct mailbox *p, uint32_t *data, TickType_t w)
53 # define MAILBOX_SEND_ISR(ns, p, data) int32_t ns##_mailbox_sendISR(struct mailbox *p, uint32_t data)
54 # define MAILBOX_RECV_ISR(ns, p, data) int32_t ns##_mailbox_recvISR(struct mailbox *p, uint32_t *data)
55 #endif
56 #endif
hal.h
mailbox_genericInit
int32_t mailbox_genericInit(struct mailbox *mailbox)
HAL_DEFINE_GLOBAL_ARRAY
HAL_DEFINE_GLOBAL_ARRAY(mailbox)