
pci_device
1 2 3 4 5 6 7
|
static void (struct pci_dev *pci_dev) { pci_dev->dev.platform_data = &pdata; }
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, INTEL_IPU4_HW_BXT_P, ipu4_quirk);
|
pci_driver
1 2 3 4 5 6 7 8 9 10 11
|
static const struct pci_device_id intel_ipu4_pci_tbl[] = { {PCI_DEVICE(PCI_VENDOR_ID_INTEL, INTEL_IPU4_HW_BXT_B0)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, INTEL_IPU4_HW_BXT_P)}, {0,} };
static struct pci_driver intel_ipu4_pci_driver = { .name = INTEL_IPU4_NAME, .id_table = intel_ipu4_pci_tbl, .probe = intel_ipu4_pci_probe, };
|
match
通过PCI_VENDOR_ID_INTEL, INTEL_IPU4_HW_BXT_P来进行match,match成功的话会调用ipu4_quirk以及intel_ipu4_pci_probe
intel_ipu4_pci_probe
intel_ipu4_bus_device
注册了name = INTEL_IPU4_ISYS_NAME的device
1 2 3 4 5 6 7 8 9 10 11 12 13
|
static int intel_ipu4_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { isp->isys = intel_ipu4_isys_init( pdev, &isp->isys_iommu->dev, &isp->isys_iommu->dev, isys_base, isys_ipdata, pdev->dev.platform_data, 0, is_intel_ipu_hw_fpga(isp) ? INTEL_IPU4_ISYS_TYPE_INTEL_IPU4_FPGA : INTEL_IPU4_ISYS_TYPE_INTEL_IPU4); return intel_ipu4_bus_add_device(pdev, parent, pdata, iommu, NULL, INTEL_IPU4_ISYS_NAME, nr); }
|
intel_ipu4_bus_driver
1 2 3 4 5 6 7
|
static struct intel_ipu4_bus_driver isys_driver = { .probe = isys_probe, .wanted = INTEL_IPU4_ISYS_NAME, .drv = { .name = INTEL_IPU4_ISYS_NAME, }, };
|
INTEL_IPU4_ISYS_NAME匹配调用isys_probe
即pdata和isys_probe将会有一定的联系
近期评论