2005-04-17 02:20:36 +04:00
/*
* include / asm - v850 / pci . h - - PCI support
*
2005-07-27 22:44:55 +04:00
* Copyright ( C ) 2001 , 02 , 05 NEC Corporation
* Copyright ( C ) 2001 , 02 , 05 Miles Bader < miles @ gnu . org >
2005-04-17 02:20:36 +04:00
*
* This file is subject to the terms and conditions of the GNU General
* Public License . See the file COPYING in the main directory of this
* archive for more details .
*
* Written by Miles Bader < miles @ gnu . org >
*/
# ifndef __V850_PCI_H__
# define __V850_PCI_H__
/* Get any platform-dependent definitions. */
# include <asm/machdep.h>
# define pcibios_scan_all_fns(a, b) 0
/* Generic declarations. */
struct scatterlist ;
extern void pcibios_set_master ( struct pci_dev * dev ) ;
/* `Grant' to PDEV the memory block at CPU_ADDR, for doing DMA. The
32 - bit PCI bus mastering address to use is returned . the device owns
this memory until either pci_unmap_single or pci_dma_sync_single_for_cpu is
performed . */
extern dma_addr_t
pci_map_single ( struct pci_dev * pdev , void * cpu_addr , size_t size , int dir ) ;
/* Return to the CPU the PCI DMA memory block previously `granted' to
PDEV , at DMA_ADDR . */
extern void
pci_unmap_single ( struct pci_dev * pdev , dma_addr_t dma_addr , size_t size ,
int dir ) ;
/* Make physical memory consistent for a single streaming mode DMA
translation after a transfer .
If you perform a pci_map_single ( ) but wish to interrogate the
buffer using the cpu , yet do not wish to teardown the PCI dma
mapping , you must call this function before doing so . At the next
point you give the PCI dma address back to the card , you must first
perform a pci_dma_sync_for_device , and then the device again owns
the buffer . */
extern void
2005-07-27 22:44:55 +04:00
pci_dma_sync_single_for_cpu ( struct pci_dev * dev , dma_addr_t dma_addr ,
size_t size , int dir ) ;
2005-04-17 02:20:36 +04:00
extern void
2005-07-27 22:44:55 +04:00
pci_dma_sync_single_for_device ( struct pci_dev * dev , dma_addr_t dma_addr ,
size_t size , int dir ) ;
2005-04-17 02:20:36 +04:00
/* Do multiple DMA mappings at once. */
extern int
pci_map_sg ( struct pci_dev * pdev , struct scatterlist * sg , int sg_len , int dir ) ;
/* Unmap multiple DMA mappings at once. */
extern void
pci_unmap_sg ( struct pci_dev * pdev , struct scatterlist * sg , int sg_len ,
int dir ) ;
2005-07-27 22:44:55 +04:00
/* SG-list versions of pci_dma_sync functions. */
extern void
pci_dma_sync_sg_for_cpu ( struct pci_dev * dev ,
struct scatterlist * sg , int sg_len ,
int dir ) ;
extern void
pci_dma_sync_sg_for_device ( struct pci_dev * dev ,
struct scatterlist * sg , int sg_len ,
int dir ) ;
# define pci_map_page(dev, page, offs, size, dir) \
pci_map_single ( dev , ( page_address ( page ) + ( offs ) ) , size , dir )
# define pci_unmap_page(dev,addr,sz,dir) \
pci_unmap_single ( dev , addr , sz , dir )
/* Test for pci_map_single or pci_map_page having generated an error. */
static inline int
pci_dma_mapping_error ( dma_addr_t dma_addr )
{
return dma_addr = = 0 ;
}
2005-04-17 02:20:36 +04:00
/* Allocate and map kernel buffer using consistent mode DMA for PCI
device . Returns non - NULL cpu - view pointer to the buffer if
successful and sets * DMA_ADDR to the pci side dma address as well ,
else DMA_ADDR is undefined . */
extern void *
pci_alloc_consistent ( struct pci_dev * pdev , size_t size , dma_addr_t * dma_addr ) ;
/* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must
be values that were returned from pci_alloc_consistent . SIZE must be
the same as what as passed into pci_alloc_consistent . References to
the memory and mappings assosciated with CPU_ADDR or DMA_ADDR past
this call are illegal . */
extern void
pci_free_consistent ( struct pci_dev * pdev , size_t size , void * cpu_addr ,
dma_addr_t dma_addr ) ;
2005-06-07 10:07:46 +04:00
# ifdef CONFIG_PCI
2005-06-02 23:55:50 +04:00
static inline void pci_dma_burst_advice ( struct pci_dev * pdev ,
enum pci_dma_burst_strategy * strat ,
unsigned long * strategy_parameter )
{
* strat = PCI_DMA_BURST_INFINITY ;
* strategy_parameter = ~ 0UL ;
}
2005-06-07 10:07:46 +04:00
# endif
2005-06-02 23:55:50 +04:00
2005-07-27 22:44:55 +04:00
extern void __iomem * pci_iomap ( struct pci_dev * dev , int bar , unsigned long max ) ;
extern void pci_iounmap ( struct pci_dev * dev , void __iomem * addr ) ;
2005-04-17 02:20:36 +04:00
# endif /* __V850_PCI_H__ */