diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 09:48:20 +0200 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 14:02:16 +0200 |
commit | 2489007e7d740ccbc3e0a202914e243ad5178787 (patch) | |
tree | b8e6380ea7b1da63474ad68a5dba997e01146043 /drivers/media/isdbt/fc8150/fci_ringbuffer.h | |
parent | 5f67568eb31e3a813c7c52461dcf66ade15fc2e7 (diff) | |
download | kernel_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.h | 89 |
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 |