11a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil/*
21a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
31a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    Copyright (C) 2004  Chris Kennedy <c@groovy.org>
41a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    Copyright (C) 2006-2007  Hans Verkuil <hverkuil@xs4all.nl>
51a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
61a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    This program is free software; you can redistribute it and/or modify
71a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    it under the terms of the GNU General Public License as published by
81a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    the Free Software Foundation; either version 2 of the License, or
91a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    (at your option) any later version.
101a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
111a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    This program is distributed in the hope that it will be useful,
121a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    but WITHOUT ANY WARRANTY; without even the implied warranty of
131a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    GNU General Public License for more details.
151a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
161a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    You should have received a copy of the GNU General Public License
171a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    along with this program; if not, write to the Free Software
181a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
191a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil */
201a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
21612570f2c4794bbf4e5bfa8648b61fbfc9cd8501Hans Verkuil#ifndef IVTV_UDMA_H
22612570f2c4794bbf4e5bfa8648b61fbfc9cd8501Hans Verkuil#define IVTV_UDMA_H
23612570f2c4794bbf4e5bfa8648b61fbfc9cd8501Hans Verkuil
241a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil/* User DMA functions */
251a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_get_page_info(struct ivtv_dma_page_info *dma_page, unsigned long first, unsigned long size);
261a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilint ivtv_udma_fill_sg_list(struct ivtv_user_dma *dma, struct ivtv_dma_page_info *dma_page, int map_offset);
271a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_fill_sg_array(struct ivtv_user_dma *dma, u32 buffer_offset, u32 buffer_offset_2, u32 split);
281a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilint ivtv_udma_setup(struct ivtv *itv, unsigned long ivtv_dest_addr,
291a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil		       void __user *userbuf, int size_in_bytes);
301a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_unmap(struct ivtv *itv);
311a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_free(struct ivtv *itv);
321a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_alloc(struct ivtv *itv);
331a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_prepare(struct ivtv *itv);
341a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilvoid ivtv_udma_start(struct ivtv *itv);
351a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
361a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilstatic inline void ivtv_udma_sync_for_device(struct ivtv *itv)
371a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil{
388ac05ae3192ce8a71fc84e4a88772cce0c09173cHans Verkuil	pci_dma_sync_single_for_device(itv->pdev, itv->udma.SG_handle,
391a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil		sizeof(itv->udma.SGarray), PCI_DMA_TODEVICE);
401a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil}
411a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil
421a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuilstatic inline void ivtv_udma_sync_for_cpu(struct ivtv *itv)
431a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil{
448ac05ae3192ce8a71fc84e4a88772cce0c09173cHans Verkuil	pci_dma_sync_single_for_cpu(itv->pdev, itv->udma.SG_handle,
451a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil		sizeof(itv->udma.SGarray), PCI_DMA_TODEVICE);
461a0adaf37c30e89e44d1470ef604a930999a5826Hans Verkuil}
47612570f2c4794bbf4e5bfa8648b61fbfc9cd8501Hans Verkuil
48612570f2c4794bbf4e5bfa8648b61fbfc9cd8501Hans Verkuil#endif
49