1 /*
2  * Copyright (c) 2016-2017 Nordic Semiconductor ASA
3  * Copyright (c) 2016 Vinayak Kariappa Chettimada
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #define MAYFLY_CALL_ID_0       0
9 #define MAYFLY_CALL_ID_1       1
10 #define MAYFLY_CALL_ID_2       2
11 #define MAYFLY_CALL_ID_PROGRAM 3
12 #define MAYFLY_CALLER_COUNT    4
13 #define MAYFLY_CALLEE_COUNT    4
14 
15 struct mayfly {
16 	uint8_t volatile _req;
17 	uint8_t _ack;
18 	memq_link_t *_link;
19 	void *param;
20 	void (*fp)(void *);
21 };
22 
23 void mayfly_init(void);
24 void mayfly_enable(uint8_t caller_id, uint8_t callee_id, uint8_t enable);
25 uint32_t mayfly_enqueue(uint8_t caller_id, uint8_t callee_id, uint8_t chain,
26 		     struct mayfly *m);
27 void mayfly_run(uint8_t callee_id);
28 
29 extern void mayfly_enable_cb(uint8_t caller_id, uint8_t callee_id, uint8_t enable);
30 extern uint32_t mayfly_is_enabled(uint8_t caller_id, uint8_t callee_id);
31 extern uint32_t mayfly_prio_is_equal(uint8_t caller_id, uint8_t callee_id);
32 extern void mayfly_pend(uint8_t caller_id, uint8_t callee_id);
33 extern uint32_t mayfly_is_running(void);
34