2005-04-16 15:20:36 -07: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 12:59:30 +01:00
* specific PCI code and MIPS common PCI code . Should potentially put
2005-04-16 15:20:36 -07:00
* into include / asm / pci . h file .
*/
# include <linux/ioport.h>
2012-05-04 10:50:13 +02:00
# include <linux/of.h>
2005-04-16 15:20:36 -07:00
/*
2013-01-22 12:59:30 +01:00
* Each pci channel is a top - level PCI bus seem by CPU . A machine with
2005-04-16 15:20:36 -07: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 10:50:13 +02:00
struct device_node * of_node ;
2005-04-16 15:20:36 -07: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 15:35:43 +01:00
unsigned long io_map_base ;
2015-01-19 04:19:20 -05:00
struct resource * busn_resource ;
unsigned long busn_offset ;
2005-04-16 15:20:36 -07:00
unsigned int index ;
/* For compatibility with current (as of July 2003) pciutils
and XFree86 . Eventually will be removed . */
unsigned int need_domain_info ;
2005-10-19 23:59:11 -07: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-16 15:20:36 -07: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 17:33:00 +01:00
extern int pcibios_map_irq ( const struct pci_dev * dev , u8 slot , u8 pin ) ;
2005-04-16 15:20:36 -07: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 17:58:46 +00: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 21:48:10 +01:00
# define HAVE_ARCH_PCI_RESOURCE_TO_USER
2005-04-16 15:20:36 -07:00
/*
* Dynamic DMA mapping stuff .
* MIPS has everything mapped statically .
*/
# include <linux/types.h>
# include <linux/slab.h>
2015-05-01 12:46:15 +02:00
# include <linux/scatterlist.h>
2005-04-16 15:20:36 -07:00
# include <linux/string.h>
# include <asm/io.h>
struct pci_dev ;
/*
2014-08-30 06:06:28 +04: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 .
2005-04-16 15:20:36 -07:00
*/
2014-08-30 06:06:28 +04:00
# define PCI_DMA_BUS_IS_PHYS (1)
2005-04-16 15:20:36 -07:00
2014-12-12 12:45:39 +00:00
# ifdef CONFIG_PCI_DOMAINS
2005-04-16 15:20:36 -07: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 12:45:39 +00:00
# endif /* CONFIG_PCI_DOMAINS */
2005-04-16 15:20:36 -07:00
# endif /* __KERNEL__ */
/* Do platform specific device initialization at pci_enable_device() time */
extern int pcibios_plat_dev_init ( struct pci_dev * dev ) ;
2006-12-09 16:12:18 +00: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-24 00:25:14 +09:00
extern char * ( * pcibios_plat_setup ) ( char * str ) ;
2013-02-02 13:36:48 +00:00
# ifdef CONFIG_OF
2012-05-04 10:50:13 +02:00
/* this function parses memory ranges from a device node */
2012-12-21 14:04:39 -08:00
extern void pci_load_of_ranges ( struct pci_controller * hose ,
struct device_node * node ) ;
2013-02-02 13:36:48 +00:00
# else
static inline void pci_load_of_ranges ( struct pci_controller * hose ,
struct device_node * node ) { }
# endif
2012-05-04 10:50:13 +02:00
2005-04-16 15:20:36 -07:00
# endif /* _ASM_PCI_H */