]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/dpdk/lib/librte_vhost/fd_man.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / spdk / dpdk / lib / librte_vhost / fd_man.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2014 Intel Corporation
3 */
4
5 #ifndef _FD_MAN_H_
6 #define _FD_MAN_H_
7 #include <stdint.h>
8 #include <pthread.h>
9 #include <poll.h>
10
11 #define MAX_FDS 1024
12
13 typedef void (*fd_cb)(int fd, void *dat, int *remove);
14
15 struct fdentry {
16 int fd; /* -1 indicates this entry is empty */
17 fd_cb rcb; /* callback when this fd is readable. */
18 fd_cb wcb; /* callback when this fd is writeable.*/
19 void *dat; /* fd context */
20 int busy; /* whether this entry is being used in cb. */
21 };
22
23 struct fdset {
24 struct pollfd rwfds[MAX_FDS];
25 struct fdentry fd[MAX_FDS];
26 pthread_mutex_t fd_mutex;
27 int num; /* current fd number of this fdset */
28
29 union pipefds {
30 struct {
31 int pipefd[2];
32 };
33 struct {
34 int readfd;
35 int writefd;
36 };
37 } u;
38 };
39
40
41 void fdset_init(struct fdset *pfdset);
42
43 int fdset_add(struct fdset *pfdset, int fd,
44 fd_cb rcb, fd_cb wcb, void *dat);
45
46 void *fdset_del(struct fdset *pfdset, int fd);
47 int fdset_try_del(struct fdset *pfdset, int fd);
48
49 void *fdset_event_dispatch(void *arg);
50
51 int fdset_pipe_init(struct fdset *fdset);
52
53 void fdset_pipe_uninit(struct fdset *fdset);
54
55 void fdset_pipe_notify(struct fdset *fdset);
56
57 #endif