56 #define FIBRE_UNBOUNDED_SLEEP ((uint32_t) 0x7fffffff)
75 #define FIBRE_VAR_INIT(fn) { (fn), 0, 0, 0, LIST_NODE_VAR_INIT }
94 #define FIBRE_EVENTQ_VAR_INIT(fn, basep, base_len, msg_len) \
96 .fibre = FIBRE_VAR_INIT(fn), \
97 .eventq = MESSAGEQ_VAR_INIT(basep, base_len, msg_len) \
103 #define PT_BEGIN_FIBRE(f) PT_BEGIN(&((f)->priv))
183 void *basep,
size_t base_len,
size_t msg_len);
237 #endif // RF_FIBRE_H_
struct fibre_eventq fibre_eventq_t
Fibre and eventq descriptor.
void fibre_init(fibre_t *f, fibre_entrypoint_t *fn)
Dynamic initializer for a fibre descriptor.
void * fibre_eventq_claim(fibre_eventq_t *evtq)
Request memory resources to send an event to a fibre.
uint32_t fibre_scheduler_next(uint32_t time)
Schedule the next fibre.
void fibre_scheduler_main_loop(void)
bool fibre_eventq_empty(fibre_eventq_t *evtq)
Return true if the fibre's event queue is empty.
void fibre_eventq_init(fibre_eventq_t *evtq, fibre_entrypoint_t *fn, void *basep, size_t base_len, size_t msg_len)
Dynamic initializer for a fibre and eventq descriptor.
bool fibre_kill(fibre_t *f)
struct fibre fibre_t
Fibre descriptor.
bool fibre_eventq_send(fibre_eventq_t *evtq, void *evtp)
Send an event to a fibre.
int fibre_entrypoint_t(struct fibre *)
void fibre_eventq_release(fibre_eventq_t *evtq, void *evtp)
Release a message previously received by a fibre.
void * fibre_eventq_receive(fibre_eventq_t *evtq)
Recevied a message previously send to the fibre.
bool fibre_run_atomic(fibre_t *f)
Fibre and eventq descriptor.
fibre_t * fibre_self(void)
Returns the currently active fibre descriptor.
void fibre_run(fibre_t *f)
bool fibre_timeout(uint32_t duetime)