1*76404edcSAsim Jamshed #ifndef __LOGGER_H_
2*76404edcSAsim Jamshed #define __LOGGER_H_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include <stdint.h>
5*76404edcSAsim Jamshed 
6*76404edcSAsim Jamshed #define LOG_BUFF_SIZE (256*1024)
7*76404edcSAsim Jamshed #define NUM_LOG_BUFF (100)
8*76404edcSAsim Jamshed 
9*76404edcSAsim Jamshed enum {
10*76404edcSAsim Jamshed 	IDLE_LOGT,
11*76404edcSAsim Jamshed 	ACTIVE_LOGT
12*76404edcSAsim Jamshed } log_thread_state;
13*76404edcSAsim Jamshed 
14*76404edcSAsim Jamshed typedef struct log_buff
15*76404edcSAsim Jamshed {
16*76404edcSAsim Jamshed 	int tid;
17*76404edcSAsim Jamshed 	FILE* fid;
18*76404edcSAsim Jamshed 	int buff_len;
19*76404edcSAsim Jamshed 	char buff[LOG_BUFF_SIZE];
20*76404edcSAsim Jamshed 	TAILQ_ENTRY(log_buff) buff_link;
21*76404edcSAsim Jamshed } log_buff;
22*76404edcSAsim Jamshed 
23*76404edcSAsim Jamshed typedef struct log_thread_context {
24*76404edcSAsim Jamshed 	pthread_t thread;
25*76404edcSAsim Jamshed 	int cpu;
26*76404edcSAsim Jamshed 	int done;
27*76404edcSAsim Jamshed 	int sp_fd;
28*76404edcSAsim Jamshed 	int pair_sp_fd;
29*76404edcSAsim Jamshed 	int free_buff_cnt;
30*76404edcSAsim Jamshed 	int job_buff_cnt;
31*76404edcSAsim Jamshed 
32*76404edcSAsim Jamshed 	uint8_t state;
33*76404edcSAsim Jamshed 
34*76404edcSAsim Jamshed 	pthread_mutex_t mutex;
35*76404edcSAsim Jamshed 	pthread_mutex_t free_mutex;
36*76404edcSAsim Jamshed 
37*76404edcSAsim Jamshed 	TAILQ_HEAD(, log_buff) working_queue;
38*76404edcSAsim Jamshed 	TAILQ_HEAD(, log_buff) free_queue;
39*76404edcSAsim Jamshed 
40*76404edcSAsim Jamshed } log_thread_context;
41*76404edcSAsim Jamshed 
42*76404edcSAsim Jamshed log_buff* DequeueFreeBuffer (log_thread_context *ctx);
43*76404edcSAsim Jamshed void EnqueueJobBuffer(log_thread_context *ctx, log_buff* working_bp);
44*76404edcSAsim Jamshed void InitLogThreadContext (log_thread_context *ctx, int cpu);
45*76404edcSAsim Jamshed void *ThreadLogMain(void* arg);
46*76404edcSAsim Jamshed 
47*76404edcSAsim Jamshed #endif /* __LOGGER_H_ */
48