2005-04-16 15:20:36 -07:00
/*
* File : portdrv_bus . c
* Purpose : PCI Express Port Bus Driver ' s Bus Overloading Functions
*
* Copyright ( C ) 2004 Intel
* Copyright ( C ) Tom Long Nguyen ( tom . l . nguyen @ intel . com )
*/
# include <linux/module.h>
# include <linux/pci.h>
# include <linux/kernel.h>
# include <linux/errno.h>
# include <linux/pm.h>
# include <linux/pcieport_if.h>
2008-06-04 11:39:07 -06:00
# include "portdrv.h"
2005-04-16 15:20:36 -07:00
static int pcie_port_bus_match ( struct device * dev , struct device_driver * drv ) ;
struct bus_type pcie_port_bus_type = {
. name = " pci_express " ,
. match = pcie_port_bus_match ,
} ;
2006-07-31 15:18:39 +08:00
EXPORT_SYMBOL_GPL ( pcie_port_bus_type ) ;
2005-04-16 15:20:36 -07:00
static int pcie_port_bus_match ( struct device * dev , struct device_driver * drv )
{
struct pcie_device * pciedev ;
2009-01-13 14:46:46 +01:00
struct pcie_port_data * port_data ;
2005-04-16 15:20:36 -07:00
struct pcie_port_service_driver * driver ;
if ( drv - > bus ! = & pcie_port_bus_type | | dev - > bus ! = & pcie_port_bus_type )
return 0 ;
2009-01-13 14:46:46 +01:00
2005-04-16 15:20:36 -07:00
pciedev = to_pcie_device ( dev ) ;
driver = to_service_driver ( drv ) ;
2009-01-13 14:46:46 +01:00
if ( driver - > service ! = pciedev - > service )
return 0 ;
port_data = pci_get_drvdata ( pciedev - > port ) ;
if ( driver - > port_type ! = PCIE_ANY_PORT
& & driver - > port_type ! = port_data - > port_type )
2005-04-16 15:20:36 -07:00
return 0 ;
return 1 ;
}
2009-01-01 19:52:12 +01:00
int pcie_port_bus_register ( void )
{
return bus_register ( & pcie_port_bus_type ) ;
}
void pcie_port_bus_unregister ( void )
{
bus_unregister ( & pcie_port_bus_type ) ;
}