linux/drivers/pci/pcie/portdrv_bus.c
<<
>>
Prefs
   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