2005-04-16 15:20:36 -07:00
# ifndef __x8664_PCI_H
# define __x8664_PCI_H
# ifdef __KERNEL__
2007-07-22 00:23:39 +03:00
# ifdef CONFIG_CALGARY_IOMMU
2008-03-23 01:03:02 -07:00
static inline void * pci_iommu ( struct pci_bus * bus )
2007-07-22 00:23:39 +03:00
{
struct pci_sysdata * sd = bus - > sysdata ;
return sd - > iommu ;
}
static inline void set_pci_iommu ( struct pci_bus * bus , void * val )
{
struct pci_sysdata * sd = bus - > sysdata ;
sd - > iommu = val ;
}
# endif /* CONFIG_CALGARY_IOMMU */
2008-03-23 01:03:02 -07:00
extern int ( * pci_config_read ) ( int seg , int bus , int dev , int fn ,
int reg , int len , u32 * value ) ;
extern int ( * pci_config_write ) ( int seg , int bus , int dev , int fn ,
int reg , int len , u32 value ) ;
2005-04-16 15:20:36 -07:00
2006-06-26 13:58:11 +02:00
extern void pci_iommu_alloc ( void ) ;
2005-04-16 15:20:36 -07:00
/* The PCI address space does equal the physical memory
* address space . The networking and block device layers use
* this boolean for bounce buffer decisions
*
2006-01-11 22:44:42 +01:00
* On AMD64 it mostly equals , but we set it to zero if a hardware
* IOMMU ( gart ) of sotware IOMMU ( swiotlb ) is available .
2005-04-16 15:20:36 -07:00
*/
2006-01-11 22:44:42 +01:00
# define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
2007-10-24 12:49:48 +02:00
# if defined(CONFIG_GART_IOMMU) || defined(CONFIG_CALGARY_IOMMU)
2005-04-16 15:20:36 -07:00
# define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
dma_addr_t ADDR_NAME ;
# define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \
__u32 LEN_NAME ;
# define pci_unmap_addr(PTR, ADDR_NAME) \
( ( PTR ) - > ADDR_NAME )
# define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \
( ( ( PTR ) - > ADDR_NAME ) = ( VAL ) )
# define pci_unmap_len(PTR, LEN_NAME) \
( ( PTR ) - > LEN_NAME )
# define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
( ( ( PTR ) - > LEN_NAME ) = ( VAL ) )
# else
/* No IOMMU */
# define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
# define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
# define pci_unmap_addr(PTR, ADDR_NAME) (0)
# define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
# define pci_unmap_len(PTR, LEN_NAME) (0)
# define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
# endif
# endif /* __KERNEL__ */
# endif /* __x8664_PCI_H */