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 18static int pcie_port_bus_match(struct device *dev, struct device_driver *drv); 19 20struct bus_type pcie_port_bus_type = { 21 .name = "pci_express", 22 .match = pcie_port_bus_match, 23}; 24EXPORT_SYMBOL_GPL(pcie_port_bus_type); 25 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 != pci_pcie_type(pciedev->port))) 42 return 0; 43 44 return 1; 45} 46 47int pcie_port_bus_register(void) 48{ 49 return bus_register(&pcie_port_bus_type); 50} 51 52void pcie_port_bus_unregister(void) 53{ 54 bus_unregister(&pcie_port_bus_type); 55} 56