blob: b1b82672d8a77796e2318c4f0a336e947f58ceb4 [file] [log] [blame]
Harald Welteec8b4502010-02-20 20:34:29 +01001#ifndef _BSC_SELECT_H
2#define _BSC_SELECT_H
3
Pablo Neira Ayuso83419342011-03-22 16:36:13 +01004#include <osmocom/core/linuxlist.h>
Harald Welteec8b4502010-02-20 20:34:29 +01005
Harald Weltebd598e32011-08-16 23:26:52 +02006/*! \file select.h
7 * \brief select loop abstraction
8 */
9
10/*! \brief Indicate interest in reading from the file descriptor */
Harald Welteec8b4502010-02-20 20:34:29 +010011#define BSC_FD_READ 0x0001
Harald Weltebd598e32011-08-16 23:26:52 +020012/*! \brief Indicate interest in writing to the file descriptor */
Harald Welteec8b4502010-02-20 20:34:29 +010013#define BSC_FD_WRITE 0x0002
Harald Weltebd598e32011-08-16 23:26:52 +020014/*! \brief Indicate interest in exceptions from the file descriptor */
Harald Welteec8b4502010-02-20 20:34:29 +010015#define BSC_FD_EXCEPT 0x0004
16
Harald Weltebd598e32011-08-16 23:26:52 +020017/*! \brief Structure representing a file dsecriptor */
Pablo Neira Ayusof7f89d02011-05-07 12:42:40 +020018struct osmo_fd {
Harald Weltebd598e32011-08-16 23:26:52 +020019 /*! linked list for internal management */
20 struct llist_head list;
21 /*! actual operating-system level file decriptor */
Harald Welteec8b4502010-02-20 20:34:29 +010022 int fd;
Harald Weltebd598e32011-08-16 23:26:52 +020023 /*! bit-mask or of \ref BSC_FD_READ, \ref BSC_FD_WRITE and/or
24 * \ref BSC_FD_EXCEPT */
Harald Welteec8b4502010-02-20 20:34:29 +010025 unsigned int when;
Harald Weltebd598e32011-08-16 23:26:52 +020026 /*! call-back function to be called once file descriptor becomes
27 * available */
Pablo Neira Ayusof7f89d02011-05-07 12:42:40 +020028 int (*cb)(struct osmo_fd *fd, unsigned int what);
Harald Weltebd598e32011-08-16 23:26:52 +020029 /*! data pointer passed through to call-back function */
Harald Welteec8b4502010-02-20 20:34:29 +010030 void *data;
Harald Weltebd598e32011-08-16 23:26:52 +020031 /*! private number, extending \a data */
Harald Welteec8b4502010-02-20 20:34:29 +010032 unsigned int priv_nr;
33};
34
Harald Weltebd598e32011-08-16 23:26:52 +020035/*! \brief Register a new file descriptor with select loop abstraction
36 * \param[in] fd osmocom file descriptor to be registered
37 */
Pablo Neira Ayusof7f89d02011-05-07 12:42:40 +020038int osmo_fd_register(struct osmo_fd *fd);
Harald Weltebd598e32011-08-16 23:26:52 +020039
40/*! \brief Unregister a file descriptor from select loop abstraction
41 * \param[in] fd osmocom file descriptor to be unregistered
42 */
Pablo Neira Ayusof7f89d02011-05-07 12:42:40 +020043void osmo_fd_unregister(struct osmo_fd *fd);
Harald Weltebd598e32011-08-16 23:26:52 +020044
45/*! \brief select main loop integration
46 * \param[in] polling should we pollonly (1) or block on select (0)
47 */
Pablo Neira Ayusof7f89d02011-05-07 12:42:40 +020048int osmo_select_main(int polling);
Harald Weltebd598e32011-08-16 23:26:52 +020049
Harald Welteec8b4502010-02-20 20:34:29 +010050#endif /* _BSC_SELECT_H */