source: bootcd/isolinux/syslinux-6.03/core/include/mbox.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 1.6 KB
Line 
1/*
2 * mbox.h
3 *
4 * Simple thread mailbox interface
5 */
6
7#ifndef _MBOX_H
8#define _MBOX_H
9
10#include "thread.h"
11
12/*
13 * If a mailbox is allocated statically (as a struct mailbox), this
14 * is the number of slots it gets.
15 */
16#define MAILBOX_STATIC_SIZE     512
17
18struct mailbox {
19    struct semaphore prod_sem;  /* Producer semaphore (empty slots) */
20    struct semaphore cons_sem;  /* Consumer semaphore (data slots) */
21    struct semaphore head_sem;  /* Head pointer semaphore */
22    struct semaphore tail_sem;  /* Tail pointer semaphore */
23    void **wrap;                /* Where pointers wrap */
24    void **head;                /* Head pointer */
25    void **tail;                /* Tail pointer */
26
27    void *data[MAILBOX_STATIC_SIZE]; /* Data array */
28};
29
30/* The number of bytes for an mailbox of size s */
31#define MBOX_BYTES(s) (sizeof(struct mailbox) + \
32                       ((s)-MAILBOX_STATIC_SIZE)*sizeof(void *))
33
34void mbox_init(struct mailbox *mbox, size_t size);
35int mbox_post(struct mailbox *mbox, void *msg, mstime_t timeout);
36mstime_t mbox_fetch(struct mailbox *mbox, void **msg, mstime_t timeout);
37
38/*
39 * This marks a mailbox object as unusable; it will remain unusable
40 * until sem_init() is called on it again.  This DOES NOT clear the
41 * list of blocked processes on this mailbox!
42 *
43 * It is also possible to mark the mailbox invalid by zeroing its
44 * memory structure.
45 */
46static inline void mbox_set_invalid(struct mailbox *mbox)
47{
48    if (!!mbox)
49        sem_set_invalid(&mbox->prod_sem);
50}
51
52/*
53 * Ask if a mailbox object has been initialized.
54 */
55static inline bool mbox_is_valid(struct mailbox *mbox)
56{
57    return ((!!mbox) && sem_is_valid(&mbox->prod_sem));
58}
59
60#endif /* _MBOX_H */
Note: See TracBrowser for help on using the repository browser.