2005-04-17 02:20:36 +04:00
/* Functions internal to the PCI core code */
2005-11-16 11:00:00 +03:00
extern int pci_uevent ( struct device * dev , char * * envp , int num_envp ,
char * buffer , int buffer_size ) ;
2005-04-17 02:20:36 +04: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 ) ;
2007-07-17 08:27:10 +04:00
2005-03-19 08:15:48 +03:00
/* Firmware callbacks */
2007-07-20 06:03:22 +04:00
extern pci_power_t ( * platform_pci_choose_state ) ( struct pci_dev * dev , pm_message_t state ) ;
2005-03-19 08:16:18 +03:00
extern int ( * platform_pci_set_power_state ) ( struct pci_dev * dev , pci_power_t state ) ;
2005-03-19 08:15:48 +03:00
2005-09-27 12:21:55 +04: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-17 02:20:36 +04: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 void pci_remove_legacy_files ( struct pci_bus * bus ) ;
/* Lock for read/write access to pci device and bus lists */
2006-06-02 08:35:43 +04:00
extern struct rw_semaphore pci_bus_sem ;
2005-04-17 02:20:36 +04:00
2006-07-12 19:59:00 +04:00
extern unsigned int pci_pm_d3_delay ;
2007-01-25 11:34:07 +03:00
2005-08-17 02:16:05 +04:00
# ifdef CONFIG_PCI_MSI
2006-03-06 08:33:34 +03:00
void pci_no_msi ( void ) ;
2007-04-05 11:19:10 +04:00
extern void pci_msi_init_pci_dev ( struct pci_dev * dev ) ;
2005-08-17 02:16:05 +04:00
# else
2006-03-06 08:33:34 +03:00
static inline void pci_no_msi ( void ) { }
2007-04-05 11:19:10 +04:00
static inline void pci_msi_init_pci_dev ( struct pci_dev * dev ) { }
2005-08-17 02:16:05 +04:00
# endif
2007-01-25 11:34:08 +03:00
2006-02-08 12:11:38 +03:00
# if defined(CONFIG_PCI_MSI) && defined(CONFIG_PM)
void pci_restore_msi_state ( struct pci_dev * dev ) ;
# else
static inline void pci_restore_msi_state ( struct pci_dev * dev ) { }
# endif
2007-01-25 11:34:08 +03:00
2006-07-12 19:59:00 +04:00
static inline int pci_no_d1d2 ( struct pci_dev * dev )
{
unsigned int parent_dstates = 0 ;
2005-08-17 02:16:05 +04:00
2006-07-12 19:59:00 +04:00
if ( dev - > bus - > self )
parent_dstates = dev - > bus - > self - > no_d1d2 ;
return ( dev - > no_d1d2 | | parent_dstates ) ;
}
2005-04-17 02:20:36 +04: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 ;
}