1*76404edcSAsim Jamshed #ifndef __EVENTPOLL_H_
2*76404edcSAsim Jamshed #define __EVENTPOLL_H_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include "mtcp_api.h"
5*76404edcSAsim Jamshed #include "mtcp_epoll.h"
6*76404edcSAsim Jamshed 
7*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
8*76404edcSAsim Jamshed struct mtcp_epoll_stat
9*76404edcSAsim Jamshed {
10*76404edcSAsim Jamshed 	uint64_t calls;
11*76404edcSAsim Jamshed 	uint64_t waits;
12*76404edcSAsim Jamshed 	uint64_t wakes;
13*76404edcSAsim Jamshed 
14*76404edcSAsim Jamshed 	uint64_t issued;
15*76404edcSAsim Jamshed 	uint64_t registered;
16*76404edcSAsim Jamshed 	uint64_t invalidated;
17*76404edcSAsim Jamshed 	uint64_t handled;
18*76404edcSAsim Jamshed };
19*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
20*76404edcSAsim Jamshed struct mtcp_epoll_event_int
21*76404edcSAsim Jamshed {
22*76404edcSAsim Jamshed 	struct mtcp_epoll_event ev;
23*76404edcSAsim Jamshed 	int sockid;
24*76404edcSAsim Jamshed };
25*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
26*76404edcSAsim Jamshed enum event_queue_type
27*76404edcSAsim Jamshed {
28*76404edcSAsim Jamshed 	USR_EVENT_QUEUE = 0,
29*76404edcSAsim Jamshed 	USR_SHADOW_EVENT_QUEUE = 1,
30*76404edcSAsim Jamshed 	MOS_EVENT_QUEUE = 2
31*76404edcSAsim Jamshed };
32*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
33*76404edcSAsim Jamshed struct event_queue
34*76404edcSAsim Jamshed {
35*76404edcSAsim Jamshed 	struct mtcp_epoll_event_int *events;
36*76404edcSAsim Jamshed 	int start;			// starting index
37*76404edcSAsim Jamshed 	int end;			// ending index
38*76404edcSAsim Jamshed 
39*76404edcSAsim Jamshed 	int size;			// max size
40*76404edcSAsim Jamshed 	int num_events;		// number of events
41*76404edcSAsim Jamshed };
42*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
43*76404edcSAsim Jamshed struct mtcp_epoll
44*76404edcSAsim Jamshed {
45*76404edcSAsim Jamshed 	struct event_queue *usr_queue;
46*76404edcSAsim Jamshed 	struct event_queue *usr_shadow_queue;
47*76404edcSAsim Jamshed 	struct event_queue *mtcp_queue;
48*76404edcSAsim Jamshed 
49*76404edcSAsim Jamshed 	uint8_t waiting;
50*76404edcSAsim Jamshed 	struct mtcp_epoll_stat stat;
51*76404edcSAsim Jamshed 
52*76404edcSAsim Jamshed 	pthread_cond_t epoll_cond;
53*76404edcSAsim Jamshed 	pthread_mutex_t epoll_lock;
54*76404edcSAsim Jamshed };
55*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
56*76404edcSAsim Jamshed 
57*76404edcSAsim Jamshed int
58*76404edcSAsim Jamshed CloseEpollSocket(mctx_t mctx, int epid);
59*76404edcSAsim Jamshed 
60*76404edcSAsim Jamshed struct event_queue *
61*76404edcSAsim Jamshed CreateEventQueue(int size);
62*76404edcSAsim Jamshed 
63*76404edcSAsim Jamshed void
64*76404edcSAsim Jamshed DestroyEventQueue(struct event_queue *eq);
65*76404edcSAsim Jamshed 
66*76404edcSAsim Jamshed #endif /* __EVENTPOLL_H_ */
67