2008-04-28 20:24:33 -03:00
/*
* cx18 buffer queues
*
* Derived from ivtv - queue . h
*
* Copyright ( C ) 2007 Hans Verkuil < hverkuil @ xs4all . nl >
2008-11-22 01:37:34 -03:00
* Copyright ( C ) 2008 Andy Walls < awalls @ radix . net >
2008-04-28 20:24:33 -03:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA
* 02111 - 1307 USA
*/
# define CX18_DMA_UNMAPPED ((u32) -1)
/* cx18_buffer utility functions */
static inline void cx18_buf_sync_for_cpu ( struct cx18_stream * s ,
struct cx18_buffer * buf )
{
2009-01-10 21:54:39 -03:00
pci_dma_sync_single_for_cpu ( s - > cx - > pci_dev , buf - > dma_handle ,
2008-04-28 20:24:33 -03:00
s - > buf_size , s - > dma ) ;
}
static inline void cx18_buf_sync_for_device ( struct cx18_stream * s ,
struct cx18_buffer * buf )
{
2009-01-10 21:54:39 -03:00
pci_dma_sync_single_for_device ( s - > cx - > pci_dev , buf - > dma_handle ,
2008-04-28 20:24:33 -03:00
s - > buf_size , s - > dma ) ;
}
void cx18_buf_swap ( struct cx18_buffer * buf ) ;
/* cx18_queue utility functions */
2008-12-08 23:02:45 -03:00
struct cx18_queue * _cx18_enqueue ( struct cx18_stream * s , struct cx18_buffer * buf ,
struct cx18_queue * q , int to_front ) ;
2008-11-28 00:04:21 -03:00
static inline
2008-12-08 23:02:45 -03:00
struct cx18_queue * cx18_enqueue ( struct cx18_stream * s , struct cx18_buffer * buf ,
struct cx18_queue * q )
2008-11-28 00:04:21 -03:00
{
2008-12-08 23:02:45 -03:00
return _cx18_enqueue ( s , buf , q , 0 ) ; /* FIFO */
2008-11-28 00:04:21 -03:00
}
static inline
2008-12-08 23:02:45 -03:00
struct cx18_queue * cx18_push ( struct cx18_stream * s , struct cx18_buffer * buf ,
struct cx18_queue * q )
2008-11-28 00:04:21 -03:00
{
2008-12-08 23:02:45 -03:00
return _cx18_enqueue ( s , buf , q , 1 ) ; /* LIFO */
2008-11-28 00:04:21 -03:00
}
void cx18_queue_init ( struct cx18_queue * q ) ;
2008-04-28 20:24:33 -03:00
struct cx18_buffer * cx18_dequeue ( struct cx18_stream * s , struct cx18_queue * q ) ;
2008-11-16 01:38:19 -03:00
struct cx18_buffer * cx18_queue_get_buf ( struct cx18_stream * s , u32 id ,
2008-04-28 20:24:33 -03:00
u32 bytesused ) ;
void cx18_flush_queues ( struct cx18_stream * s ) ;
/* cx18_stream utility functions */
int cx18_stream_alloc ( struct cx18_stream * s ) ;
void cx18_stream_free ( struct cx18_stream * s ) ;