summaryrefslogtreecommitdiff
path: root/drivers/i2c-slave/i2c_slave_ring_buffer.h
blob: 32fc21b618ed7c95013af2d5c4f7b9b0aaaf3896 (plain)
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
35
36
37
38
39
#ifndef __BUFFER_MANAGER_H__
#define __BUFFER_MANAGER_H__
/*
 * Copyright 2007-2010 Freescale Semiconductor, Inc. All Rights Reserved.
 */

/*
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */
#include <linux/types.h>
#include <linux/spinlock.h>

typedef struct i2c_slave_ring_buffer {
	int start;
	int end;
	int total;
	bool full;
	char *buffer;
	spinlock_t lock;
} i2c_slave_ring_buffer_t;

i2c_slave_ring_buffer_t *i2c_slave_rb_alloc(int size);

void i2c_slave_rb_release(i2c_slave_ring_buffer_t *ring);

int i2c_slave_rb_produce(i2c_slave_ring_buffer_t *ring, int num, char *data);

int i2c_slave_rb_consume(i2c_slave_ring_buffer_t *ring, int num, char *data);

int i2c_slave_rb_num(i2c_slave_ring_buffer_t *ring);

void i2c_slave_rb_clear(i2c_slave_ring_buffer_t *ring);

#endif