在pcie设备中找到pcie的root port

来源:互联网 发布:算法推荐书籍 编辑:程序博客网 时间:2024/06/07 20:20
pcie 设备是通过一种树状的方式连接在root port上,有时候需要知道自己连在哪个root port上就可以通过pcie_find_root_port来找到root port。例如下例就是找到root port,然后判断root port是否支持aer功能struct pci_dev *dev, *rpdev;dev = pci_get_domain_bus_and_slot(einj->domain, einj->bus, devfn);if (!dev)return -ENODEV;rpdev = pcie_find_root_port(dev);if (!rpdev) {dev_err(&dev->dev, "aer_inject: Root port not found\n");ret = -ENODEV;goto out_put;}rp_pos_cap_err = pci_find_ext_capability(rpdev, PCI_EXT_CAP_ID_ERR);if (!rp_pos_cap_err) {dev_err(&rpdev->dev,"aer_inject: Root port doesn't support AER\n");ret = -EPROTONOSUPPORT;goto out_put;}继续看看pcie_find_root_port是如何找到root port的呢?static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev){while (1) {if (!pci_is_pcie(dev))break;//原来就是一直往上回溯,知道找到root port后,返回root portif (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)return dev;if (!dev->bus->self)break;dev = dev->bus->self;}return NULL;}

原创粉丝点击