aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/isdbt/fc8150/fci_ringbuffer.h
diff options
context:
space:
mode:
authorcodeworkx <codeworkx@cyanogenmod.com>2012-09-22 09:48:20 +0200
committercodeworkx <codeworkx@cyanogenmod.com>2012-09-22 14:02:16 +0200
commit2489007e7d740ccbc3e0a202914e243ad5178787 (patch)
treeb8e6380ea7b1da63474ad68a5dba997e01146043 /drivers/media/isdbt/fc8150/fci_ringbuffer.h
parent5f67568eb31e3a813c7c52461dcf66ade15fc2e7 (diff)
downloadkernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.zip
kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.gz
kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.bz2
merge opensource jb u5
Change-Id: I1aaec157aa196f3448eff8636134fce89a814cf2
Diffstat (limited to 'drivers/media/isdbt/fc8150/fci_ringbuffer.h')
-rw-r--r--drivers/media/isdbt/fc8150/fci_ringbuffer.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/drivers/media/isdbt/fc8150/fci_ringbuffer.h b/drivers/media/isdbt/fc8150/fci_ringbuffer.h
new file mode 100644
index 0000000..0d1a2cc
--- /dev/null
+++ b/drivers/media/isdbt/fc8150/fci_ringbuffer.h
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ Copyright(c) 2010 FCI Inc. All Rights Reserved
+
+ File name : fci_ringbuffer.h
+
+ Description :
+
+ History :
+ ----------------------------------------------------------------------
+ 2010/11/25 aslan.cho initial
+*******************************************************************************/
+
+#ifndef __FCI_RINGBUFFER_H__
+#define __FCI_RINGBUFFER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct fci_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define FCI_RINGBUFFER_PKTHDRSIZE 3
+
+extern void fci_ringbuffer_init(struct fci_ringbuffer *rbuf
+ , void *data, size_t len);
+
+extern int fci_ringbuffer_empty(struct fci_ringbuffer *rbuf);
+
+extern ssize_t fci_ringbuffer_free(struct fci_ringbuffer *rbuf);
+
+extern ssize_t fci_ringbuffer_avail(struct fci_ringbuffer *rbuf);
+
+extern void fci_ringbuffer_reset(struct fci_ringbuffer *rbuf);
+
+extern void fci_ringbuffer_flush(struct fci_ringbuffer *rbuf);
+
+extern void fci_ringbuffer_flush_spinlock_wakeup(struct fci_ringbuffer *rbuf);
+
+#define FCI_RINGBUFFER_PEEK(rbuf, offs) \
+ ((rbuf)->data[((rbuf)->pread+(offs)) % (rbuf)->size])
+
+#define FCI_RINGBUFFER_SKIP(rbuf, num) \
+ ((rbuf)->pread = ((rbuf)->pread+(num)) % (rbuf)->size)
+
+extern ssize_t fci_ringbuffer_read_user(struct fci_ringbuffer *rbuf
+, u8 __user *buf, size_t len);
+
+extern void fci_ringbuffer_read(struct fci_ringbuffer *rbuf
+ , u8 *buf, size_t len);
+
+
+#define FCI_RINGBUFFER_WRITE_BYTE(rbuf, byte) \
+ { (rbuf)->data[(rbuf)->pwrite] = (byte); \
+ (rbuf)->pwrite = ((rbuf)->pwrite + 1) % (rbuf)->size; }
+
+extern ssize_t fci_ringbuffer_write(struct fci_ringbuffer *rbuf
+ , const u8 *buf, size_t len);
+
+extern ssize_t fci_ringbuffer_pkt_write(struct fci_ringbuffer *rbuf
+ , u8 *buf, size_t len);
+
+extern ssize_t fci_ringbuffer_pkt_read_user(struct fci_ringbuffer *rbuf
+ , size_t idx, int offset, u8 __user *buf, size_t len);
+
+extern ssize_t fci_ringbuffer_pkt_read(struct fci_ringbuffer *rbuf
+ , size_t idx, int offset, u8 *buf, size_t len);
+
+extern void fci_ringbuffer_pkt_dispose(struct fci_ringbuffer *rbuf, size_t idx);
+
+extern ssize_t fci_ringbuffer_pkt_next(struct fci_ringbuffer *rbuf
+ , size_t idx, size_t *pktlen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif