aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/eccci/ccci_ringbuf.h
blob: c8126e1aa0dc956340d59c76d502af57394a6082 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef __CCCI_RINGBUF_H__
#define __CCCI_RINGBUF_H__
#include "ccci_core.h"
typedef enum
{
	CCCI_RINGBUF_OK = 0,
    CCCI_RINGBUF_PARAM_ERR,
	CCCI_RINGBUF_NOT_ENOUGH,
	CCCI_RINGBUF_BAD_HEADER,
	CCCI_RINGBUF_BAD_FOOTER,
	CCCI_RINGBUF_NOT_COMPLETE,
	CCCI_RINGBUF_EMPTY,
} ccci_ringbuf_error;

struct ccci_ringbuf
{
    struct
    {
        unsigned int read;
        unsigned int write;
        unsigned int length;
    }    rx_control, tx_control;
    unsigned char    buffer[0]; 
};
#define CCCI_RINGBUF_CTL_LEN (4+sizeof(struct ccci_ringbuf)+4)

int ccci_ringbuf_readable(int md_id,struct ccci_ringbuf * ringbuf);
int ccci_ringbuf_writeable(int md_id,struct ccci_ringbuf * ringbuf,unsigned int write_size);
struct ccci_ringbuf * ccci_create_ringbuf(int md_id, unsigned char* buf,int buf_size,int rx_size, int tx_size);
int ccci_ringbuf_read(int md_id,struct ccci_ringbuf * ringbuf, unsigned char *buf, int read_size);
int ccci_ringbuf_write(int md_id,struct ccci_ringbuf *ringbuf, unsigned char *data, int data_len);
void ccci_ringbuf_move_rpointer(int md_id,struct ccci_ringbuf * ringbuf,int read_size);
void ccci_ringbuf_reset(int md_id,struct ccci_ringbuf * ringbuf,int dir);
#endif //__CCCI_RINGBUF_H__