1 /* 2 * File: portdrv_bus.c 3 * Purpose: PCI Express Port Bus Driver's Bus Overloading Functions 4 * 5 * Copyright (C) 2004 Intel 6 * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) 7 */ 8 9 #include <linux/module.h> 10 #include <linux/pci.h> 11 #include <linux/kernel.h> 12 #include <linux/errno.h> 13 #include <linux/pm.h> 14 15 #include <linux/pcieport_if.h> 16 #include "portdrv.h" 17 18 static int pcie_port_bus_match(struct device *dev, struct device_driver *drv); 19 20 struct bus_type pcie_port_bus_type = { 21 .name = "pci_express", 22 .match = pcie_port_bus_match, 23 }; 24 EXPORT_SYMBOL_GPL(pcie_port_bus_type); 25 pcie_port_bus_match(struct device * dev,struct device_driver * drv)26static int pcie_port_bus_match(struct device *dev, struct device_driver *drv) 27 { 28 struct pcie_device *pciedev; 29 struct pcie_port_service_driver *driver; 30 31 if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type) 32 return 0; 33 34 pciedev = to_pcie_device(dev); 35 driver = to_service_driver(drv); 36 37 if (driver->service != pciedev->service) 38 return 0; 39 40 if ((driver->port_type != PCIE_ANY_PORT) && 41 (driver->port_type != pciedev->port->pcie_type)) 42 return 0; 43 44 return 1; 45 } 46 pcie_port_bus_register(void)47int pcie_port_bus_register(void) 48 { 49 return bus_register(&pcie_port_bus_type); 50 } 51 pcie_port_bus_unregister(void)52void pcie_port_bus_unregister(void) 53 { 54 bus_unregister(&pcie_port_bus_type); 55 } 56