/*
 *
 * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
 *
 * Copyright (C) 2003 Oliver Endriss
 * Copyright (C) 2004 Andrew de Quincey
 *
 * based on code originally found in av7110.c & dvb_ci.c:
 * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
 *                         for convergence integrated media GmbH
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 */

#ifndef _DVB_RINGBUFFER_H_
#define _DVB_RINGBUFFER_H_

#include <linux/spinlock.h>
#include <linux/wait.h>

/**
 * struct dvb_ringbuffer - Describes a ring buffer used at DVB framework
 *
 * @data: Area were the ringbuffer data is written
 * @size: size of the ringbuffer
 * @pread: next position to read
 * @pwrite: next position to write
 * @error: used by ringbuffer clients to indicate that an error happened.
 * @queue: Wait queue used by ringbuffer clients to indicate when buffer
 *         was filled
 * @lock: Spinlock used to protect the ringbuffer
 */
struct dvb_ringbuffer {
	u8               *data;
	ssize_t           size;
	ssize_t           pread;
	ssize_t           pwrite;
	int               error;

	wait_queue_head_t queue;
	spinlock_t        lock;
};

#define DVB_RINGBUFFER_PKTHDRSIZE 3

/**
 * dvb_ringbuffer_init - initialize ring buffer, lock and queue
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @data: pointer to the buffer where the data will be stored
 * @len: bytes from ring buffer into @buf
 */
extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data,
				size_t len);

/**
 * dvb_ringbuffer_empty - test whether buffer is empty
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 */
extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);

/**
 * dvb_ringbuffer_free - returns the number of free bytes in the buffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 *
 * Return: number of free bytes in the buffer
 */
extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);

/**
 * dvb_ringbuffer_avail - returns the number of bytes waiting in the buffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 *
 * Return: number of bytes waiting in the buffer
 */
extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);

/**
 * dvb_ringbuffer_reset - resets the ringbuffer to initial state
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 *
 * Resets the read and write pointers to zero and flush the buffer.
 *
 * This counts as a read and write operation
 */
extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);

/*
 * read routines & macros
 */

/**
 * dvb_ringbuffer_flush - flush buffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 */
extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);

/**
 * dvb_ringbuffer_flush_spinlock_wakeup- flush buffer protected by spinlock
 *      and wake-up waiting task(s)
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 */
extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);

/**
 * DVB_RINGBUFFER_PEEK - peek at byte @offs in the buffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @offs: offset inside the ringbuffer
 */
#define DVB_RINGBUFFER_PEEK(rbuf, offs)	\
			((rbuf)->data[((rbuf)->pread + (offs)) % (rbuf)->size])

/**
 * DVB_RINGBUFFER_SKIP - advance read ptr by @num bytes
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @num: number of bytes to advance
 */
#define DVB_RINGBUFFER_SKIP(rbuf, num)	{\
			(rbuf)->pread = ((rbuf)->pread + (num)) % (rbuf)->size;\
}

/**
 * dvb_ringbuffer_read_user - Reads a buffer into a user pointer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @buf: pointer to the buffer where the data will be stored
 * @len: bytes from ring buffer into @buf
 *
 * This variant assumes that the buffer is a memory at the userspace. So,
 * it will internally call copy_to_user().
 *
 * Return: number of bytes transferred or -EFAULT
 */
extern ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf,
				   u8 __user *buf, size_t len);

/**
 * dvb_ringbuffer_read - Reads a buffer into a pointer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @buf: pointer to the buffer where the data will be stored
 * @len: bytes from ring buffer into @buf
 *
 * This variant assumes that the buffer is a memory at the Kernel space
 *
 * Return: number of bytes transferred or -EFAULT
 */
extern void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf,
				   u8 *buf, size_t len);

/*
 * write routines & macros
 */

/**
 * DVB_RINGBUFFER_WRITE_BYTE - write single byte to ring buffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @byte: byte to write
 */
#define DVB_RINGBUFFER_WRITE_BYTE(rbuf, byte)	\
			{ (rbuf)->data[(rbuf)->pwrite] = (byte); \
			(rbuf)->pwrite = ((rbuf)->pwrite + 1) % (rbuf)->size; }

/**
 * dvb_ringbuffer_write - Writes a buffer into the ringbuffer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @buf: pointer to the buffer where the data will be read
 * @len: bytes from ring buffer into @buf
 *
 * This variant assumes that the buffer is a memory at the Kernel space
 *
 * return: number of bytes transferred or -EFAULT
 */
extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
				    size_t len);

/**
 * dvb_ringbuffer_write_user - Writes a buffer received via a user pointer
 *
 * @rbuf: pointer to struct dvb_ringbuffer
 * @buf: pointer to the buffer where the data will be read
 * @len: bytes from ring buffer into @buf
 *
 * This variant assumes that the buffer is a memory at the userspace. So,
 * it will internally call copy_from_user().
 *
 * Return: number of bytes transferred or -EFAULT
 */
extern ssize_t dvb_ringbuffer_write_user(struct dvb_ringbuffer *rbuf,
					 const u8 __user *buf, size_t len);

/**
 * dvb_ringbuffer_pkt_write - Write a packet into the ringbuffer.
 *
 * @rbuf: Ringbuffer to write to.
 * @buf: Buffer to write.
 * @len: Length of buffer (currently limited to 65535 bytes max).
 *
 * Return: Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
 */
extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8 *buf,
					size_t len);

/**
 * dvb_ringbuffer_pkt_read_user - Read from a packet in the ringbuffer.
 *
 * @rbuf: Ringbuffer concerned.
 * @idx: Packet index as returned by dvb_ringbuffer_pkt_next().
 * @offset: Offset into packet to read from.
 * @buf: Destination buffer for data.
 * @len: Size of destination buffer.
 *
 * Return: Number of bytes read, or -EFAULT.
 *
 * .. note::
 *
 *    unlike dvb_ringbuffer_read(), this does **NOT** update the read pointer
 *    in the ringbuffer. You must use dvb_ringbuffer_pkt_dispose() to mark a
 *    packet as no longer required.
 */
extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf,
					    size_t idx,
					    int offset, u8 __user *buf,
					    size_t len);

/**
 * dvb_ringbuffer_pkt_read - Read from a packet in the ringbuffer.
 * Note: unlike dvb_ringbuffer_read_user(), this DOES update the read pointer
 * in the ringbuffer.
 *
 * @rbuf: Ringbuffer concerned.
 * @idx: Packet index as returned by dvb_ringbuffer_pkt_next().
 * @offset: Offset into packet to read from.
 * @buf: Destination buffer for data.
 * @len: Size of destination buffer.
 *
 * Return: Number of bytes read, or -EFAULT.
 */
extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
				       int offset, u8 *buf, size_t len);

/**
 * dvb_ringbuffer_pkt_dispose - Dispose of a packet in the ring buffer.
 *
 * @rbuf: Ring buffer concerned.
 * @idx: Packet index as returned by dvb_ringbuffer_pkt_next().
 */
extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);

/**
 * dvb_ringbuffer_pkt_next - Get the index of the next packet in a ringbuffer.
 *
 * @rbuf: Ringbuffer concerned.
 * @idx: Previous packet index, or -1 to return the first packet index.
 * @pktlen: On success, will be updated to contain the length of the packet
 *          in bytes.
 * returns Packet index (if >=0), or -1 if no packets available.
 */
extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf,
				       size_t idx, size_t *pktlen);

#endif /* _DVB_RINGBUFFER_H_ */
