Lines Matching +full:sc +full:- +full:resource
1 /*-
66 int ap_bus; /* bios-assigned bus number */
67 int ap_addr; /* device/func of PCI-Host bridge */
92 static struct resource *acpi_pcib_acpi_alloc_resource(device_t dev,
97 device_t child, struct resource *r,
100 device_t child, struct resource *r);
102 device_t child, struct resource *r);
104 device_t child, struct resource *r);
161 root = (devinfo->Flags & ACPI_PCI_ROOT_BRIDGE) != 0; in acpi_pcib_acpi_probe()
166 device_set_desc(dev, "ACPI Host-PCI bridge"); in acpi_pcib_acpi_probe()
173 struct acpi_hpcib_softc *sc; in acpi_pcib_producer_handler() local
178 sc = context; in acpi_pcib_producer_handler()
179 switch (res->Type) { in acpi_pcib_producer_handler()
187 if (res->Data.Address.ProducerConsumer != ACPI_PRODUCER) in acpi_pcib_producer_handler()
189 switch (res->Type) { in acpi_pcib_producer_handler()
191 min = res->Data.Address16.Address.Minimum; in acpi_pcib_producer_handler()
192 max = res->Data.Address16.Address.Maximum; in acpi_pcib_producer_handler()
193 length = res->Data.Address16.Address.AddressLength; in acpi_pcib_producer_handler()
196 min = res->Data.Address32.Address.Minimum; in acpi_pcib_producer_handler()
197 max = res->Data.Address32.Address.Maximum; in acpi_pcib_producer_handler()
198 length = res->Data.Address32.Address.AddressLength; in acpi_pcib_producer_handler()
201 min = res->Data.Address64.Address.Minimum; in acpi_pcib_producer_handler()
202 max = res->Data.Address64.Address.Maximum; in acpi_pcib_producer_handler()
203 length = res->Data.Address64.Address.AddressLength; in acpi_pcib_producer_handler()
206 KASSERT(res->Type == in acpi_pcib_producer_handler()
209 min = res->Data.ExtAddress64.Address.Minimum; in acpi_pcib_producer_handler()
210 max = res->Data.ExtAddress64.Address.Maximum; in acpi_pcib_producer_handler()
211 length = res->Data.ExtAddress64.Address.AddressLength; in acpi_pcib_producer_handler()
216 if (min + length - 1 != max && in acpi_pcib_producer_handler()
217 (res->Data.Address.MinAddressFixed != ACPI_ADDRESS_FIXED || in acpi_pcib_producer_handler()
218 res->Data.Address.MaxAddressFixed != ACPI_ADDRESS_FIXED)) in acpi_pcib_producer_handler()
221 switch (res->Data.Address.ResourceType) { in acpi_pcib_producer_handler()
224 if (res->Type != ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64) { in acpi_pcib_producer_handler()
225 if (res->Data.Address.Info.Mem.Caching == in acpi_pcib_producer_handler()
245 if (min + length - 1 != max) in acpi_pcib_producer_handler()
246 device_printf(sc->ap_dev, in acpi_pcib_producer_handler()
248 (uintmax_t)(max - min + 1), (uintmax_t)length); in acpi_pcib_producer_handler()
251 device_printf(sc->ap_dev, in acpi_pcib_producer_handler()
252 "Ignoring %d range above 4GB (%#jx-%#jx)\n", in acpi_pcib_producer_handler()
257 device_printf(sc->ap_dev, in acpi_pcib_producer_handler()
258 "Truncating end of %d range above 4GB (%#jx-%#jx)\n", in acpi_pcib_producer_handler()
263 error = pcib_host_res_decodes(&sc->ap_host_res, type, min, max, in acpi_pcib_producer_handler()
266 panic("Failed to manage %d range (%#jx-%#jx): %d", in acpi_pcib_producer_handler()
276 get_decoded_bus_range(struct acpi_hpcib_softc *sc, rman_res_t *startp, in get_decoded_bus_range() argument
281 rle = resource_list_find(&sc->ap_host_res.hr_rl, PCI_RES_BUS, 0); in get_decoded_bus_range()
284 *startp = rle->start; in get_decoded_bus_range()
285 *endp = rle->end; in get_decoded_bus_range()
292 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_attach() local
296 struct resource *bus_res; in acpi_pcib_acpi_attach()
304 sc = device_get_softc(dev); in acpi_pcib_acpi_attach()
305 sc->ap_dev = dev; in acpi_pcib_acpi_attach()
306 sc->ap_handle = acpi_get_handle(dev); in acpi_pcib_acpi_attach()
314 acpi_pcib_osc(dev, &sc->ap_osc_ctl, 0); in acpi_pcib_acpi_attach()
320 status = acpi_GetInteger(sc->ap_handle, "_SEG", &sc->ap_segment); in acpi_pcib_acpi_attach()
323 device_printf(dev, "could not evaluate _SEG - %s\n", in acpi_pcib_acpi_attach()
328 sc->ap_segment = 0; in acpi_pcib_acpi_attach()
333 * PCI-Host bridge device from _ADR. Assume we don't have one if in acpi_pcib_acpi_attach()
336 status = acpi_GetInteger(sc->ap_handle, "_ADR", &sc->ap_addr); in acpi_pcib_acpi_attach()
339 device_printf(dev, "could not evaluate _ADR - %s\n", in acpi_pcib_acpi_attach()
341 sc->ap_addr = -1; in acpi_pcib_acpi_attach()
346 * resource managers for those ranges. in acpi_pcib_acpi_attach()
348 if (pcib_host_res_init(sc->ap_dev, &sc->ap_host_res) != 0) in acpi_pcib_acpi_attach()
351 status = AcpiWalkResources(sc->ap_handle, "_CRS", in acpi_pcib_acpi_attach()
352 acpi_pcib_producer_handler, sc); in acpi_pcib_acpi_attach()
354 device_printf(sc->ap_dev, "failed to parse resources: %s\n", in acpi_pcib_acpi_attach()
370 * XXX It seems many BIOS's with multiple Host-PCI bridges do not set in acpi_pcib_acpi_attach()
375 * only needed for old single-domain machines. in acpi_pcib_acpi_attach()
377 status = acpi_GetInteger(sc->ap_handle, "_BBN", &sc->ap_bus); in acpi_pcib_acpi_attach()
380 device_printf(dev, "could not evaluate _BBN - %s\n", in acpi_pcib_acpi_attach()
385 sc->ap_bus = 0; in acpi_pcib_acpi_attach()
394 if (sc->ap_segment == 0 && sc->ap_bus == 0 && bus0_seen) { in acpi_pcib_acpi_attach()
396 if (sc->ap_addr != -1) { in acpi_pcib_acpi_attach()
398 slot = ACPI_ADR_PCI_SLOT(sc->ap_addr); in acpi_pcib_acpi_attach()
399 func = ACPI_ADR_PCI_FUNC(sc->ap_addr); in acpi_pcib_acpi_attach()
406 sc->ap_bus = busno; in acpi_pcib_acpi_attach()
414 * Host-PCI bridges in order and that as a result the next free in acpi_pcib_acpi_attach()
422 if (get_decoded_bus_range(sc, &start, &end)) in acpi_pcib_acpi_attach()
423 sc->ap_bus = start; in acpi_pcib_acpi_attach()
426 bus_res = pci_domain_alloc_bus(sc->ap_segment, dev, &rid, 0, in acpi_pcib_acpi_attach()
431 pcib_host_res_free(dev, &sc->ap_host_res); in acpi_pcib_acpi_attach()
434 sc->ap_bus = rman_get_start(bus_res); in acpi_pcib_acpi_attach()
435 pci_domain_release_bus(sc->ap_segment, dev, bus_res); in acpi_pcib_acpi_attach()
442 if (get_decoded_bus_range(sc, &start, &end)) { in acpi_pcib_acpi_attach()
443 if (sc->ap_bus != start) { in acpi_pcib_acpi_attach()
447 "(%ju - %ju).\n", in acpi_pcib_acpi_attach()
448 sc->ap_bus, (uintmax_t)start, (uintmax_t)end); in acpi_pcib_acpi_attach()
452 sc->ap_bus = start; in acpi_pcib_acpi_attach()
458 if (sc->ap_segment == 0 && sc->ap_bus == 0) in acpi_pcib_acpi_attach()
461 acpi_pcib_fetch_prt(dev, &sc->ap_prt); in acpi_pcib_acpi_attach()
466 BUS_SPACE_MAXSIZE, 0, NULL, NULL, &sc->ap_dma_tag); in acpi_pcib_acpi_attach()
471 error = bus_dma_tag_set_domain(sc->ap_dma_tag, domain); in acpi_pcib_acpi_attach()
477 bus_dma_tag_destroy(sc->ap_dma_tag); in acpi_pcib_acpi_attach()
478 sc->ap_dma_tag = NULL; in acpi_pcib_acpi_attach()
487 pcib_host_res_free(dev, &sc->ap_host_res); in acpi_pcib_acpi_attach()
497 struct acpi_hpcib_softc *sc = device_get_softc(dev); in acpi_pcib_read_ivar() local
501 *result = sc->ap_segment; in acpi_pcib_read_ivar()
504 *result = sc->ap_bus; in acpi_pcib_read_ivar()
507 *result = (uintptr_t)sc->ap_handle; in acpi_pcib_read_ivar()
510 *result = (uintptr_t)sc->ap_flags; in acpi_pcib_read_ivar()
519 struct acpi_hpcib_softc *sc = device_get_softc(dev); in acpi_pcib_write_ivar() local
525 sc->ap_bus = value; in acpi_pcib_write_ivar()
528 sc->ap_handle = (ACPI_HANDLE)value; in acpi_pcib_write_ivar()
531 sc->ap_flags = (int)value; in acpi_pcib_write_ivar()
541 struct acpi_hpcib_softc *sc = device_get_softc(dev); in acpi_pcib_read_config() local
543 return (pci_cfgregread(sc->ap_segment, bus, slot, func, reg, bytes)); in acpi_pcib_read_config()
550 struct acpi_hpcib_softc *sc = device_get_softc(dev); in acpi_pcib_write_config() local
552 pci_cfgregwrite(sc->ap_segment, bus, slot, func, reg, data, bytes); in acpi_pcib_write_config()
558 struct acpi_hpcib_softc *sc = device_get_softc(pcib); in acpi_pcib_acpi_route_interrupt() local
560 return (acpi_pcib_route_interrupt(pcib, dev, pin, &sc->ap_prt)); in acpi_pcib_acpi_route_interrupt()
587 struct acpi_hpcib_softc *sc; in acpi_pcib_map_msi() local
596 sc = device_get_softc(pcib); in acpi_pcib_map_msi()
597 if (sc->ap_addr == -1) in acpi_pcib_map_msi()
600 hostb = pci_find_dbsf(sc->ap_segment, 0, ACPI_ADR_PCI_SLOT(sc->ap_addr), in acpi_pcib_map_msi()
601 ACPI_ADR_PCI_FUNC(sc->ap_addr)); in acpi_pcib_map_msi()
607 struct resource *
611 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_alloc_resource() local
612 struct resource *res; in acpi_pcib_acpi_alloc_resource()
618 sc = device_get_softc(dev); in acpi_pcib_acpi_alloc_resource()
620 return (pci_domain_alloc_bus(sc->ap_segment, child, rid, start, end, in acpi_pcib_acpi_alloc_resource()
622 res = pcib_host_res_alloc(&sc->ap_host_res, child, type, rid, start, end, in acpi_pcib_acpi_alloc_resource()
628 * do long-term is explicitly trust any firmware-configured in acpi_pcib_acpi_alloc_resource()
632 if (res == NULL && start + count - 1 == end) in acpi_pcib_acpi_alloc_resource()
640 struct resource *r, rman_res_t start, rman_res_t end) in acpi_pcib_acpi_adjust_resource()
642 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_adjust_resource() local
644 sc = device_get_softc(dev); in acpi_pcib_acpi_adjust_resource()
646 return (pci_domain_adjust_bus(sc->ap_segment, child, r, start, in acpi_pcib_acpi_adjust_resource()
648 return (pcib_host_res_adjust(&sc->ap_host_res, child, r, start, end)); in acpi_pcib_acpi_adjust_resource()
653 struct resource *r) in acpi_pcib_acpi_release_resource()
655 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_release_resource() local
657 sc = device_get_softc(dev); in acpi_pcib_acpi_release_resource()
659 return (pci_domain_release_bus(sc->ap_segment, child, r)); in acpi_pcib_acpi_release_resource()
665 struct resource *r) in acpi_pcib_acpi_activate_resource()
667 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_activate_resource() local
669 sc = device_get_softc(dev); in acpi_pcib_acpi_activate_resource()
671 return (pci_domain_activate_bus(sc->ap_segment, child, r)); in acpi_pcib_acpi_activate_resource()
677 struct resource *r) in acpi_pcib_acpi_deactivate_resource()
679 struct acpi_hpcib_softc *sc; in acpi_pcib_acpi_deactivate_resource() local
681 sc = device_get_softc(dev); in acpi_pcib_acpi_deactivate_resource()
683 return (pci_domain_deactivate_bus(sc->ap_segment, child, r)); in acpi_pcib_acpi_deactivate_resource()
691 struct acpi_hpcib_softc *sc; in acpi_pcib_request_feature() local
693 sc = device_get_softc(pcib); in acpi_pcib_request_feature()
706 return (acpi_pcib_osc(pcib, &sc->ap_osc_ctl, osc_ctl)); in acpi_pcib_request_feature()
712 struct acpi_hpcib_softc *sc; in acpi_pcib_get_dma_tag() local
714 sc = device_get_softc(bus); in acpi_pcib_get_dma_tag()
716 return (sc->ap_dma_tag); in acpi_pcib_get_dma_tag()