Lines Matching +full:non +full:- +full:pci
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
50 #include <dev/pci/pcireg.h>
51 #include <dev/pci/pcivar.h>
52 #include <dev/pci/pci_private.h>
85 /* PCI interface */
100 DEFINE_CLASS_1(pci, ofw_pcibus_driver, ofw_pcibus_methods,
104 MODULE_DEPEND(ofw_pcibus, pci, 1, 1, 1);
107 TUNABLE_INT("hw.pci.ofw_devices_only", &ofw_devices_only);
113 if (ofw_bus_get_node(dev) == -1) in ofw_pcibus_probe()
115 device_set_desc(dev, "OFW PCI bus"); in ofw_pcibus_probe()
140 * the device tree to enumerate only some PCI devices. Apple's in ofw_pcibus_attach()
141 * OF device tree on some Grackle-based hardware can also miss in ofw_pcibus_attach()
142 * functions on multi-function cards. in ofw_pcibus_attach()
158 return (&dinfo->opd_dinfo); in ofw_pcibus_alloc_devinfo()
176 sizeof(pcir)) == -1) in ofw_pcibus_enum_devtree()
187 * it such that the PCI code will reroute the interrupt if in ofw_pcibus_enum_devtree()
198 * Now set up the PCI and OFW bus layer devinfo and add it in ofw_pcibus_enum_devtree()
199 * to the PCI bus. in ofw_pcibus_enum_devtree()
206 if (ofw_bus_gen_setup_devinfo(&dinfo->opd_obdinfo, child) != in ofw_pcibus_enum_devtree()
211 dinfo->opd_dma_tag = NULL; in ofw_pcibus_enum_devtree()
220 if (dinfo->opd_dinfo.cfg.intpin == 0) in ofw_pcibus_enum_devtree()
222 &dinfo->opd_dinfo.resources, NULL); in ofw_pcibus_enum_devtree()
230 * to handle non-enumerated PCI children as exist in FDT and on the second
265 dinfo->opd_dma_tag = NULL; in ofw_pcibus_enum_bus()
266 dinfo->opd_obdinfo.obd_node = -1; in ofw_pcibus_enum_bus()
268 dinfo->opd_obdinfo.obd_name = NULL; in ofw_pcibus_enum_bus()
269 dinfo->opd_obdinfo.obd_compat = NULL; in ofw_pcibus_enum_bus()
270 dinfo->opd_obdinfo.obd_type = NULL; in ofw_pcibus_enum_bus()
271 dinfo->opd_obdinfo.obd_model = NULL; in ofw_pcibus_enum_bus()
274 * For non OFW-devices, don't believe 0 in ofw_pcibus_enum_bus()
277 if (dinfo->opd_dinfo.cfg.intline == 0) { in ofw_pcibus_enum_bus()
278 dinfo->opd_dinfo.cfg.intline = PCI_INVALID_IRQ; in ofw_pcibus_enum_bus()
294 ofw_bus_gen_destroy_devinfo(&dinfo->opd_obdinfo); in ofw_pcibus_child_deleted()
303 if (ofw_bus_get_node(child) != -1) { in ofw_pcibus_child_pnpinfo_method()
320 if (node == -1) { in ofw_pcibus_assign_interrupt()
321 /* Non-firmware enumerated child, use standard routing */ in ofw_pcibus_assign_interrupt()
333 iparent = -1; in ofw_pcibus_assign_interrupt()
334 if (OF_getencprop(node, "interrupt-parent", &iparent, in ofw_pcibus_assign_interrupt()
336 iparent = -1; in ofw_pcibus_assign_interrupt()
338 if (iparent != -1) in ofw_pcibus_assign_interrupt()
339 OF_getencprop(OF_node_from_xref(iparent), "#interrupt-cells", in ofw_pcibus_assign_interrupt()
349 return ((iparent == -1) ? intr[0] : ofw_bus_map_intr(dev, in ofw_pcibus_assign_interrupt()
354 if (iparent != -1) in ofw_pcibus_assign_interrupt()
363 * For on-board devices, it frequently is not, and is completely out in ofw_pcibus_assign_interrupt()
364 * of the valid intpin range. For PCI slots, it hopefully is, in ofw_pcibus_assign_interrupt()
365 * otherwise we will have trouble interfacing with non-OFW buses in ofw_pcibus_assign_interrupt()
380 return (&dinfo->opd_obdinfo); in ofw_pcibus_get_devinfo()