Lines Matching +full:child +full:- +full:node
1 /*-
95 if (ofw_bus_is_compatible(dev, "pci-host-ecam-generic")) {
111 phandle_t node;
116 STAILQ_INIT(&sc->pci_ofw_devlist);
120 device_printf(dev, "parsing FDT for ECAM%d:\n", sc->base.ecam);
121 if (parse_pci_mem_ranges(dev, &sc->base))
128 node = ofw_bus_get_node(dev);
129 if (sc->base.coherent == 0) {
130 sc->base.coherent = OF_hasprop(node, "dma-coherent");
133 device_printf(dev, "Bus is%s cache-coherent\n",
134 sc->base.coherent ? "" : " not");
137 sc->base.bus_start = 0;
138 sc->base.bus_end = 0xFF;
146 sc->base.ecam = device_get_unit(dev);
152 if (ofw_bus_is_compatible(dev, "marvell,armada8k-pcie-ecam") ||
153 ofw_bus_is_compatible(dev, "socionext,synquacer-pcie-ecam") ||
154 ofw_bus_is_compatible(dev, "snps,dw-pcie-ecam")) {
156 sc->base.quirks |= PCIE_ECAM_DESIGNWARE_QUIRK;
159 ofw_bus_setup_iinfo(node, &sc->pci_iinfo, sizeof(cell_t));
185 phandle_t node;
188 node = ofw_bus_get_node(dev);
190 OF_getencprop(node, "#address-cells", &pci_addr_cells,
192 OF_getencprop(node, "#size-cells", &size_cells,
194 OF_getencprop(OF_parent(node), "#address-cells", &parent_addr_cells,
203 nbase_ranges = OF_getproplen(node, "ranges");
204 sc->nranges = nbase_ranges / sizeof(cell_t) /
207 OF_getencprop(node, "ranges", base_ranges, nbase_ranges);
209 for (i = 0, j = 0; i < sc->nranges; i++) {
213 sc->ranges[i].flags |= FLAG_TYPE_IO;
215 sc->ranges[i].flags |= FLAG_TYPE_MEM;
218 sc->ranges[i].rid = -1;
219 sc->ranges[i].pci_base = 0;
220 for (k = 0; k < (pci_addr_cells - 1); k++) {
221 sc->ranges[i].pci_base <<= 32;
222 sc->ranges[i].pci_base |= base_ranges[j++];
224 sc->ranges[i].phys_base = 0;
226 sc->ranges[i].phys_base <<= 32;
227 sc->ranges[i].phys_base |= base_ranges[j++];
229 sc->ranges[i].size = 0;
231 sc->ranges[i].size <<= 32;
232 sc->ranges[i].size |= base_ranges[j++];
237 /* zero-fill remaining tuples to mark empty elements in array */
238 sc->ranges[i].pci_base = 0;
239 sc->ranges[i].phys_base = 0;
240 sc->ranges[i].size = 0;
265 &sc->pci_iinfo, ®, sizeof(reg), &pintr, sizeof(pintr),
278 generic_pcie_fdt_alloc_msi(device_t pci, device_t child, int count,
285 err = ofw_bus_msimap(ofw_bus_get_node(pci), pci_get_rid(child),
289 return (intr_alloc_msi(pci, child, msi_parent, count, maxcount,
297 generic_pcie_fdt_release_msi(device_t pci, device_t child, int count, int *irqs)
303 err = ofw_bus_msimap(ofw_bus_get_node(pci), pci_get_rid(child),
307 return (intr_release_msi(pci, child, msi_parent, count, irqs));
314 generic_pcie_fdt_map_msi(device_t pci, device_t child, int irq, uint64_t *addr,
321 err = ofw_bus_msimap(ofw_bus_get_node(pci), pci_get_rid(child),
325 return (intr_map_msi(pci, child, msi_parent, irq, addr, data));
332 generic_pcie_fdt_alloc_msix(device_t pci, device_t child, int *irq)
338 err = ofw_bus_msimap(ofw_bus_get_node(pci), pci_get_rid(child),
342 return (intr_alloc_msix(pci, child, msi_parent, irq));
349 generic_pcie_fdt_release_msix(device_t pci, device_t child, int irq)
355 err = ofw_bus_msimap(ofw_bus_get_node(pci), pci_get_rid(child),
359 return (intr_release_msix(pci, child, msi_parent, irq));
366 generic_pcie_get_iommu(device_t pci, device_t child, uintptr_t *id)
372 phandle_t node;
375 node = ofw_bus_get_node(pci);
376 pci_rid = pci_get_rid(child);
380 err = ofw_bus_iommu_map(node, pci_rid, &iommu_xref, &iommu_rid);
382 iommu->id = iommu_rid;
383 iommu->xref = iommu_xref;
390 generic_pcie_get_id(device_t pci, device_t child, enum pci_id_type type,
393 phandle_t node;
399 return (generic_pcie_get_iommu(pci, child, id));
402 return (pcib_get_id(pci, child, type, id));
404 node = ofw_bus_get_node(pci);
405 pci_rid = pci_get_rid(child);
407 err = ofw_bus_msimap(node, pci_rid, NULL, &rid);
416 generic_pcie_ofw_get_devinfo(device_t bus, device_t child)
423 slot = pci_get_slot(child);
424 func = pci_get_function(child);
425 busno = pci_get_bus(child);
427 STAILQ_FOREACH(di, &sc->pci_ofw_devlist, pci_ofw_link)
428 if (slot == di->slot && func == di->func && busno == di->bus)
429 return (&di->di_dinfo);
441 phandle_t parent, node;
451 for (node = OF_child(parent); node > 0; node = OF_peer(node)) {
452 len = OF_getencprop(node, "reg", reg, sizeof(reg));
458 if (ofw_bus_gen_setup_devinfo(&di->di_dinfo, node) != 0) {
462 di->func = OFW_PCI_PHYS_HI_FUNCTION(reg[0]);
463 di->slot = OFW_PCI_PHYS_HI_DEVICE(reg[0]);
464 di->bus = OFW_PCI_PHYS_HI_BUS(reg[0]);
465 STAILQ_INSERT_TAIL(&sc->pci_ofw_devlist, di, pci_ofw_link);