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 .
*/
# ifndef _ASM_PCI_H
# define _ASM_PCI_H
# include <linux/mm.h>
# ifdef __KERNEL__
/*
* This file essentially defines the interface between board
2013-01-22 15:59:30 +04:00
* specific PCI code and MIPS common PCI code . Should potentially put
2005-04-17 02:20:36 +04:00
* into include / asm / pci . h file .
*/
# include <linux/ioport.h>
2012-05-04 12:50:13 +04:00
# include <linux/of.h>
2005-04-17 02:20:36 +04:00
/*
2013-01-22 15:59:30 +04:00
* Each pci channel is a top - level PCI bus seem by CPU . A machine with
2005-04-17 02:20:36 +04:00
* multiple PCI channels may have multiple PCI host controllers or a
* single controller supporting multiple channels .
*/
struct pci_controller {
struct pci_controller * next ;
struct pci_bus * bus ;
2012-05-04 12:50:13 +04:00
struct device_node * of_node ;
2005-04-17 02:20:36 +04:00
struct pci_ops * pci_ops ;
struct resource * mem_resource ;
unsigned long mem_offset ;
struct resource * io_resource ;
unsigned long io_offset ;
2006-12-07 17:35:43 +03:00
unsigned long io_map_base ;
2015-01-19 12:19:20 +03:00
struct resource * busn_resource ;
unsigned long busn_offset ;
2005-04-17 02:20:36 +04:00
unsigned int index ;
/* For compatibility with current (as of July 2003) pciutils
and XFree86 . Eventually will be removed . */
unsigned int need_domain_info ;
int iommu ;
2005-10-20 10:59:11 +04:00
/* Optional access methods for reading/writing the bus number
of the PCI controller */
int ( * get_busno ) ( void ) ;
void ( * set_busno ) ( int busno ) ;
2005-04-17 02:20:36 +04:00
} ;
/*
* Used by boards to register their PCI busses before the actual scanning .
*/
extern void register_pci_controller ( struct pci_controller * hose ) ;
/*
* board supplied pci irq fixup routine
*/
2007-07-10 20:33:00 +04:00
extern int pcibios_map_irq ( const struct pci_dev * dev , u8 slot , u8 pin ) ;
2005-04-17 02:20:36 +04:00
/* Can be used to override the logic in pci_scan_bus for skipping
already - configured bus numbers - to be used for buggy BIOSes
or architectures with incomplete PCI setup by the loader */
extern unsigned int pcibios_assign_all_busses ( void ) ;
extern unsigned long PCIBIOS_MIN_IO ;
extern unsigned long PCIBIOS_MIN_MEM ;
# define PCIBIOS_MIN_CARDBUS_IO 0x4000
extern void pcibios_set_master ( struct pci_dev * dev ) ;
2008-12-09 20:58:46 +03:00
# define HAVE_PCI_MMAP
extern int pci_mmap_page_range ( struct pci_dev * dev , struct vm_area_struct * vma ,
enum pci_mmap_state mmap_state , int write_combine ) ;
2010-12-13 23:48:10 +03:00
# define HAVE_ARCH_PCI_RESOURCE_TO_USER
static inline void pci_resource_to_user ( const struct pci_dev * dev , int bar ,
const struct resource * rsrc , resource_size_t * start ,
resource_size_t * end )
{
2014-11-22 02:22:09 +03:00
phys_addr_t size = resource_size ( rsrc ) ;
2010-12-13 23:48:10 +03:00
* start = fixup_bigphys_addr ( rsrc - > start , size ) ;
* end = rsrc - > start + size ;
}
2005-04-17 02:20:36 +04:00
/*
* Dynamic DMA mapping stuff .
* MIPS has everything mapped statically .
*/
# include <linux/types.h>
# include <linux/slab.h>
2015-05-01 13:46:15 +03:00
# include <linux/scatterlist.h>
2005-04-17 02:20:36 +04:00
# include <linux/string.h>
# include <asm/io.h>
2012-02-24 07:18:57 +04:00
# include <asm-generic/pci-bridge.h>
2005-04-17 02:20:36 +04:00
struct pci_dev ;
/*
2013-01-22 15:59:30 +04:00
* The PCI address space does equal the physical memory address space . The
2005-04-17 02:20:36 +04:00
* networking and block device layers use this boolean for bounce buffer
* decisions . This is set if any hose does not have an IOMMU .
*/
extern unsigned int PCI_DMA_BUS_IS_PHYS ;
2014-12-12 15:45:39 +03:00
# ifdef CONFIG_PCI_DOMAINS
2005-04-17 02:20:36 +04:00
# define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index
static inline int pci_proc_domain ( struct pci_bus * bus )
{
struct pci_controller * hose = bus - > sysdata ;
return hose - > need_domain_info ;
}
2014-12-12 15:45:39 +03:00
# endif /* CONFIG_PCI_DOMAINS */
2005-04-17 02:20:36 +04:00
# endif /* __KERNEL__ */
/* implement the pci_ DMA API in terms of the generic device dma_ one */
# include <asm-generic/pci-dma-compat.h>
/* Do platform specific device initialization at pci_enable_device() time */
extern int pcibios_plat_dev_init ( struct pci_dev * dev ) ;
2006-12-09 19:12:18 +03:00
/* Chances are this interrupt is wired PC-style ... */
static inline int pci_get_legacy_ide_irq ( struct pci_dev * dev , int channel )
{
return channel ? 15 : 14 ;
}
2008-07-23 19:25:14 +04:00
extern char * ( * pcibios_plat_setup ) ( char * str ) ;
2013-02-02 17:36:48 +04:00
# ifdef CONFIG_OF
2012-05-04 12:50:13 +04:00
/* this function parses memory ranges from a device node */
2012-12-22 02:04:39 +04:00
extern void pci_load_of_ranges ( struct pci_controller * hose ,
struct device_node * node ) ;
2013-02-02 17:36:48 +04:00
# else
static inline void pci_load_of_ranges ( struct pci_controller * hose ,
struct device_node * node ) { }
# endif
2012-05-04 12:50:13 +04:00
2005-04-17 02:20:36 +04:00
# endif /* _ASM_PCI_H */