2005-04-16 15:20:36 -07:00
/* Functions internal to the PCI core code */
2005-11-16 09:00:00 +01:00
extern int pci_uevent ( struct device * dev , char * * envp , int num_envp ,
char * buffer , int buffer_size ) ;
2005-04-16 15:20:36 -07:00
extern int pci_create_sysfs_dev_files ( struct pci_dev * pdev ) ;
extern void pci_remove_sysfs_dev_files ( struct pci_dev * pdev ) ;
extern void pci_cleanup_rom ( struct pci_dev * dev ) ;
extern int pci_bus_alloc_resource ( struct pci_bus * bus , struct resource * res ,
2006-06-12 17:06:02 -07:00
resource_size_t size , resource_size_t align ,
resource_size_t min , unsigned int type_mask ,
2005-04-16 15:20:36 -07:00
void ( * alignf ) ( void * , struct resource * ,
2006-06-12 17:06:02 -07:00
resource_size_t , resource_size_t ) ,
2005-04-16 15:20:36 -07:00
void * alignf_data ) ;
2005-03-19 00:15:48 -05:00
/* Firmware callbacks */
extern int ( * platform_pci_choose_state ) ( struct pci_dev * dev , pm_message_t state ) ;
2005-03-19 00:16:18 -05:00
extern int ( * platform_pci_set_power_state ) ( struct pci_dev * dev , pci_power_t state ) ;
2005-03-19 00:15:48 -05:00
2005-09-27 01:21:55 -07:00
extern int pci_user_read_config_byte ( struct pci_dev * dev , int where , u8 * val ) ;
extern int pci_user_read_config_word ( struct pci_dev * dev , int where , u16 * val ) ;
extern int pci_user_read_config_dword ( struct pci_dev * dev , int where , u32 * val ) ;
extern int pci_user_write_config_byte ( struct pci_dev * dev , int where , u8 val ) ;
extern int pci_user_write_config_word ( struct pci_dev * dev , int where , u16 val ) ;
extern int pci_user_write_config_dword ( struct pci_dev * dev , int where , u32 val ) ;
2005-04-16 15:20:36 -07:00
/* PCI /proc functions */
# ifdef CONFIG_PROC_FS
extern int pci_proc_attach_device ( struct pci_dev * dev ) ;
extern int pci_proc_detach_device ( struct pci_dev * dev ) ;
extern int pci_proc_detach_bus ( struct pci_bus * bus ) ;
# else
static inline int pci_proc_attach_device ( struct pci_dev * dev ) { return 0 ; }
static inline int pci_proc_detach_device ( struct pci_dev * dev ) { return 0 ; }
static inline int pci_proc_detach_bus ( struct pci_bus * bus ) { return 0 ; }
# endif
/* Functions for PCI Hotplug drivers to use */
extern unsigned int pci_do_scan_bus ( struct pci_bus * bus ) ;
extern int pci_bus_find_capability ( struct pci_bus * bus , unsigned int devfn , int cap ) ;
extern void pci_remove_legacy_files ( struct pci_bus * bus ) ;
/* Lock for read/write access to pci device and bus lists */
2006-06-02 12:35:43 +08:00
extern struct rw_semaphore pci_bus_sem ;
2005-04-16 15:20:36 -07:00
2006-08-31 01:54:56 -04:00
# ifdef CONFIG_PCI_MSI
2005-04-16 15:20:36 -07:00
extern int pci_msi_quirk ;
# else
# define pci_msi_quirk 0
# endif
2006-07-12 08:59:00 -07:00
extern unsigned int pci_pm_d3_delay ;
2005-08-16 15:16:05 -07:00
# ifdef CONFIG_PCI_MSI
2005-08-16 15:15:58 -07:00
void disable_msi_mode ( struct pci_dev * dev , int pos , int type ) ;
2006-03-05 22:33:34 -07:00
void pci_no_msi ( void ) ;
2005-08-16 15:16:05 -07:00
# else
static inline void disable_msi_mode ( struct pci_dev * dev , int pos , int type ) { }
2006-03-05 22:33:34 -07:00
static inline void pci_no_msi ( void ) { }
2005-08-16 15:16:05 -07:00
# endif
2006-02-08 17:11:38 +08:00
# if defined(CONFIG_PCI_MSI) && defined(CONFIG_PM)
int pci_save_msi_state ( struct pci_dev * dev ) ;
int pci_save_msix_state ( struct pci_dev * dev ) ;
void pci_restore_msi_state ( struct pci_dev * dev ) ;
void pci_restore_msix_state ( struct pci_dev * dev ) ;
# else
static inline int pci_save_msi_state ( struct pci_dev * dev ) { return 0 ; }
static inline int pci_save_msix_state ( struct pci_dev * dev ) { return 0 ; }
static inline void pci_restore_msi_state ( struct pci_dev * dev ) { }
static inline void pci_restore_msix_state ( struct pci_dev * dev ) { }
# endif
2006-07-12 08:59:00 -07:00
static inline int pci_no_d1d2 ( struct pci_dev * dev )
{
unsigned int parent_dstates = 0 ;
2005-08-16 15:16:05 -07:00
2006-07-12 08:59:00 -07:00
if ( dev - > bus - > self )
parent_dstates = dev - > bus - > self - > no_d1d2 ;
return ( dev - > no_d1d2 | | parent_dstates ) ;
}
2005-04-16 15:20:36 -07:00
extern int pcie_mch_quirk ;
extern struct device_attribute pci_dev_attrs [ ] ;
extern struct class_device_attribute class_device_attr_cpuaffinity ;
/**
* pci_match_one_device - Tell if a PCI device structure has a matching
* PCI device id structure
* @ id : single PCI device id structure to match
* @ dev : the PCI device structure to match against
*
* Returns the matching pci_device_id structure or % NULL if there is no match .
*/
static inline const struct pci_device_id *
pci_match_one_device ( const struct pci_device_id * id , const struct pci_dev * dev )
{
if ( ( id - > vendor = = PCI_ANY_ID | | id - > vendor = = dev - > vendor ) & &
( id - > device = = PCI_ANY_ID | | id - > device = = dev - > device ) & &
( id - > subvendor = = PCI_ANY_ID | | id - > subvendor = = dev - > subsystem_vendor ) & &
( id - > subdevice = = PCI_ANY_ID | | id - > subdevice = = dev - > subsystem_device ) & &
! ( ( id - > class ^ dev - > class ) & id - > class_mask ) )
return id ;
return NULL ;
}