#ifndef _MESA_SHM_RING_QUEUE_H_ #define _MESA_SHM_RING_QUEUE_H_ #include #define MESA_SHM_RING_QUEUE_NUM 128 #define MESA_SHM_RING_QUEUE_BLOCK_NUM 8192 #define MESA_SHM_RING_QUEUE_BLOCK_BUFLEN 4096 #define MESA_SHM_RING_QUEUE_BLOCK_SIZE (MESA_SHM_RING_QUEUE_BLOCK_BUFLEN + sizeof(int) + 1) /*user buf + (int)len flag + '\n'*/ #define MESA_SHM_KEY_OVERVIEW 35720 #define MESA_SHM_KEY_MIN (MESA_SHM_KEY_OVERVIEW + 1) #define MESA_SHM_KEY_MAX (MESA_SHM_KEY_MIN + MESA_SHM_RING_QUEUE_NUM -1) #define MESA_SHM_RING_QUEUE_INITIAL 0 #define MESA_SHM_RING_QUEUE_IDLE 1 #define MESA_SHM_RING_QUEUE_HALF_IDLE 2 #define MESA_SHM_RING_QUEUE_USED 3 struct MESA_shm_overview *MESA_shm_alloc_overview(); struct MESA_shm_queue_head *MESA_shm_get_ring_queue(); void MESA_shm_init_mutex(); void MESA_shm_init_overview(); void MESA_shm_recycle_ring_queue(struct MESA_shm_queue_head *ring_queue_head); int MESA_shm_copy_buf_to_ring_queue(char *buf, int buflen, struct MESA_shm_queue_head *head); void MESA_shm_write_ring_queue_to_file(int fd, struct MESA_shm_queue_head *head); struct MESA_shm_overview{ int shmkey; int shmid; int idx; pthread_mutex_t mutex; }; struct MESA_shm_queue_head{ unsigned int blksize; unsigned int blknum; volatile unsigned int rd_idx; volatile unsigned int wr_idx; int ovw_idx; }; #endif