include/nucleus/select.h

Go to the documentation of this file.
00001 
00025 #ifndef XNSELECT_H
00026 #define XNSELECT_H
00027 
00031 #include <nucleus/thread.h>
00032 
00033 #define XNSELECT_READ      0
00034 #define XNSELECT_WRITE     1
00035 #define XNSELECT_EXCEPT    2
00036 #define XNSELECT_MAX_TYPES 3
00037 
00038 struct xnselector { 
00039         xnsynch_t synchbase;
00040         struct fds {
00041                 fd_set expected;
00042                 fd_set pending;
00043         } fds [XNSELECT_MAX_TYPES];
00044         xnqueue_t bindings; /* only used by xnselector_destroy */
00045 };
00046 
00047 #ifdef CONFIG_XENO_OPT_SELECT
00048 
00049 struct xnselect {
00050         xnqueue_t bindings;
00051 };
00052 
00053 #define DECLARE_XNSELECT(name) struct xnselect name
00054 
00055 struct xnselect_binding {
00056         struct xnselector *selector;
00057         struct xnselect *fd;
00058         unsigned type;
00059         unsigned bit_index;
00060         xnholder_t link;  /* link in selected fds list. */
00061         xnholder_t slink; /* link in selector list */
00062 };
00063 
00064 #ifdef __cplusplus
00065 extern "C" {
00066 #endif /* __cplusplus */
00067 
00068 void xnselect_init(struct xnselect *select_block);
00069 
00070 int xnselect_bind(struct xnselect *select_block,
00071                   struct xnselect_binding *binding,
00072                   struct xnselector *selector,
00073                   unsigned type,
00074                   unsigned bit_index,
00075                   unsigned state);
00076 
00077 int __xnselect_signal(struct xnselect *select_block, unsigned state);
00078 
00089 static inline int
00090 xnselect_signal(struct xnselect *select_block, unsigned state)
00091 {
00092         if (!emptyq_p(&select_block->bindings))
00093                 return __xnselect_signal(select_block, state);
00094         return 0;
00095 }
00096 
00097 void xnselect_destroy(struct xnselect *select_block);
00098 
00099 int xnselector_init(struct xnselector *selector);
00100 
00101 int xnselect(struct xnselector *selector,
00102              fd_set *out_fds[XNSELECT_MAX_TYPES],
00103              fd_set *in_fds[XNSELECT_MAX_TYPES],
00104              int nfds,
00105              xnticks_t timeout, xntmode_t timeout_mode);
00106 
00107 void xnselector_destroy(struct xnselector *selector);
00108 
00109 #ifdef __cplusplus
00110 }
00111 #endif /* __cplusplus */
00112 
00113 #else /* !CONFIG_XENO_OPT_SELECT */
00114 struct xnselector;
00115 #define DECLARE_XNSELECT(name)
00116 #define xnselect_init(block)
00117 #define xnselect_bind(select_block,binding,selector,type,bit_index,state) \
00118         ({ -EBADF; })
00119 #define xnselect_signal(block, state) ({ int __ret = 0; __ret; })
00120 #define xnselect_destroy(block)
00121 #endif /* !CONFIG_XENO_OPT_SELECT */
00122 
00125 #endif /* XNSELECT_H */

Generated on Mon Mar 24 18:02:40 2008 for Xenomai API by  doxygen 1.5.3