Lines Matching +full:iommu +full:- +full:addresses
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2001 - 2003 by Thomas Moestl <tmm@FreeBSD.org>.
59 if ((OF_getprop_alloc(node, "name", (void **)&obd->obd_name)) == -1) in ofw_bus_gen_setup_devinfo()
61 OF_getprop_alloc(node, "compatible", (void **)&obd->obd_compat); in ofw_bus_gen_setup_devinfo()
62 OF_getprop_alloc(node, "device_type", (void **)&obd->obd_type); in ofw_bus_gen_setup_devinfo()
63 OF_getprop_alloc(node, "model", (void **)&obd->obd_model); in ofw_bus_gen_setup_devinfo()
64 OF_getprop_alloc(node, "status", (void **)&obd->obd_status); in ofw_bus_gen_setup_devinfo()
65 obd->obd_node = node; in ofw_bus_gen_setup_devinfo()
75 if (obd->obd_compat != NULL) in ofw_bus_gen_destroy_devinfo()
76 free(obd->obd_compat, M_OFWPROP); in ofw_bus_gen_destroy_devinfo()
77 if (obd->obd_model != NULL) in ofw_bus_gen_destroy_devinfo()
78 free(obd->obd_model, M_OFWPROP); in ofw_bus_gen_destroy_devinfo()
79 if (obd->obd_name != NULL) in ofw_bus_gen_destroy_devinfo()
80 free(obd->obd_name, M_OFWPROP); in ofw_bus_gen_destroy_devinfo()
81 if (obd->obd_type != NULL) in ofw_bus_gen_destroy_devinfo()
82 free(obd->obd_type, M_OFWPROP); in ofw_bus_gen_destroy_devinfo()
83 if (obd->obd_status != NULL) in ofw_bus_gen_destroy_devinfo()
84 free(obd->obd_status, M_OFWPROP); in ofw_bus_gen_destroy_devinfo()
129 return (obd->obd_compat); in ofw_bus_gen_get_compat()
140 return (obd->obd_model); in ofw_bus_gen_get_model()
151 return (obd->obd_name); in ofw_bus_gen_get_name()
161 return ((phandle_t)-1); in ofw_bus_gen_get_node()
162 return (obd->obd_node); in ofw_bus_gen_get_node()
173 return (obd->obd_type); in ofw_bus_gen_get_type()
185 return (obd->obd_status); in ofw_bus_get_status()
236 /* Slide to the next sub-string. */ in ofw_bus_node_is_compatible_int()
239 len -= l; in ofw_bus_node_is_compatible_int()
274 if ((node = ofw_bus_get_node(dev)) == -1) in ofw_bus_is_compatible()
308 for (; compat->ocd_str != NULL; ++compat) { in ofw_bus_search_compatible()
309 if (ofw_bus_is_compatible(dev, compat->ocd_str)) in ofw_bus_search_compatible()
321 if ((node = ofw_bus_get_node(dev)) == -1) in ofw_bus_has_prop()
333 if (OF_getencprop(node, "#address-cells", &addrc, sizeof(addrc)) == -1) in ofw_bus_setup_iinfo()
335 ii->opi_addrc = addrc * sizeof(pcell_t); in ofw_bus_setup_iinfo()
337 ii->opi_imapsz = OF_getencprop_alloc(node, "interrupt-map", in ofw_bus_setup_iinfo()
338 (void **)&ii->opi_imap); in ofw_bus_setup_iinfo()
339 if (ii->opi_imapsz > 0) { in ofw_bus_setup_iinfo()
340 msksz = OF_getencprop_alloc(node, "interrupt-map-mask", in ofw_bus_setup_iinfo()
341 (void **)&ii->opi_imapmsk); in ofw_bus_setup_iinfo()
346 if (msksz != -1 && msksz != ii->opi_addrc + intrsz) in ofw_bus_setup_iinfo()
347 panic("ofw_bus_setup_iinfo: bad interrupt-map-mask " in ofw_bus_setup_iinfo()
360 if (ii->opi_imapsz <= 0) in ofw_bus_lookup_imap()
362 KASSERT(regsz >= ii->opi_addrc, in ofw_bus_lookup_imap()
364 regsz, ii->opi_addrc)); in ofw_bus_lookup_imap()
365 if (node != -1) { in ofw_bus_lookup_imap()
370 return (ofw_bus_search_intrmap(pintr, pintrsz, reg, ii->opi_addrc, in ofw_bus_lookup_imap()
371 ii->opi_imap, ii->opi_imapsz, ii->opi_imapmsk, maskbuf, mintr, in ofw_bus_lookup_imap()
376 * Map an interrupt using the firmware reg, interrupt-map and
377 * interrupt-map-mask properties.
384 * imapmsk is a pointer to the interrupt-map-mask property, which must have
425 * CHRP-derived OF bindings, including ePAPR-compliant FDTs, in ofw_bus_search_intrmap()
429 "#address-cells", &paddrsz, sizeof(paddrsz)) == -1) in ofw_bus_search_intrmap()
435 "#interrupt-cells", &pintrsz, sizeof(pintrsz)) == -1) in ofw_bus_search_intrmap()
452 i -= tsz; in ofw_bus_search_intrmap()
467 len = OF_getencprop_alloc_multi(node, "msi-map", sizeof(*map), in ofw_bus_msimap()
472 OF_getencprop(node, "msi-parent", msi_parent, in ofw_bus_msimap()
482 OF_getencprop(node, "msi-map-mask", &mask, sizeof(mask)); in ofw_bus_msimap()
498 *msi_rid = masked_rid - rid_base + msi_base; in ofw_bus_msimap()
517 len = OF_getencprop_alloc_multi(node, "iommu-map", sizeof(*map), in ofw_bus_iommu_map()
524 OF_getencprop(node, "iommu-map-mask", &mask, sizeof(mask)); in ofw_bus_iommu_map()
540 *iommu_rid = masked_rid - rid_base + iommu_base; in ofw_bus_iommu_map()
564 if (ret == -1) in ofw_bus_reg_to_rl_helper()
569 nreg = (ret == -1) ? 0 : ret; in ofw_bus_reg_to_rl_helper()
591 phys, phys + size - 1, size); in ofw_bus_reg_to_rl_helper()
613 rl, "assigned-addresses")); in ofw_bus_assigned_addresses_to_rl()
625 if (OF_searchencprop(node, "interrupt-parent", &iparent, in ofw_bus_find_iparent()
626 sizeof(iparent)) == -1) { in ofw_bus_find_iparent()
629 if (OF_hasprop(iparent, "interrupt-controller")) in ofw_bus_find_iparent()
643 if (OF_getencprop(node, "interrupt-parent", &iparent, in ofw_bus_search_iparent()
651 } while (!OF_hasprop(node, "#interrupt-cells")); in ofw_bus_search_iparent()
667 if (OF_hasprop(node, "interrupt-controller")) in ofw_bus_traverse_imap()
674 /* There is no interrupt-map to follow */ in ofw_bus_traverse_imap()
675 if (!OF_hasprop(inode, "interrupt-map")) { in ofw_bus_traverse_imap()
702 if (OF_hasprop(inode, "interrupt-controller")) { in ofw_bus_traverse_imap()
729 device_printf(dev, "No interrupt-parent found, " in ofw_bus_intr_to_rl()
735 if (OF_searchencprop(iparent_node, "#interrupt-cells", &icells, in ofw_bus_intr_to_rl()
736 sizeof(icells)) == -1) { in ofw_bus_intr_to_rl()
737 device_printf(dev, "Missing #interrupt-cells " in ofw_bus_intr_to_rl()
742 device_printf(dev, "Invalid #interrupt-cells property " in ofw_bus_intr_to_rl()
748 nintr = OF_getencprop_alloc_multi(node, "interrupts-extended", in ofw_bus_intr_to_rl()
761 "#interrupt-cells", &icells, sizeof(icells)) == -1) { in ofw_bus_intr_to_rl()
762 device_printf(dev, "Missing #interrupt-cells " in ofw_bus_intr_to_rl()
768 device_printf(dev, "Invalid #interrupt-cells " in ofw_bus_intr_to_rl()
806 device_printf(dev, "No interrupt-parent found, " in ofw_bus_intr_by_rid()
812 "#interrupt-cells", &icells, sizeof(icells)) == -1) { in ofw_bus_intr_by_rid()
813 device_printf(dev, "Missing #interrupt-cells " in ofw_bus_intr_by_rid()
818 device_printf(dev, "Invalid #interrupt-cells property " in ofw_bus_intr_by_rid()
824 nintr = OF_getencprop_alloc_multi(node, "interrupts-extended", in ofw_bus_intr_by_rid()
836 "#interrupt-cells", &icells, sizeof(icells)) == -1) { in ofw_bus_intr_by_rid()
837 device_printf(dev, "Missing #interrupt-cells " in ofw_bus_intr_by_rid()
843 device_printf(dev, "Invalid #interrupt-cells " in ofw_bus_intr_by_rid()
872 if (ret == -1) in ofw_bus_find_child()
923 if (node == -1) in ofw_bus_find_child_device_by_phandle()
950 * node - consumers device node
951 * list_name - name of parsed list - "clocks"
952 * cells_name - name of size property - "#clock-cells"
953 * idx - the index of the requested list entry, or, if -1, an indication
956 * producer - handle of producer
957 * ncells - number of cells in result or the number of items in the list when
958 * idx == -1.
959 * cells - array of decoded cells
976 rv = (idx == -1) ? 0 : ENOENT; in ofw_bus_parse_xref_list_internal()
980 cells_name, &pcells, sizeof(pcells)) == -1) { in ofw_bus_parse_xref_list_internal()
1005 if (idx == -1 && rv == 0) in ofw_bus_parse_xref_list_internal()
1014 * node - consumers device node
1015 * list_name - name of parsed list - "clocks"
1016 * cells_name - name of size property - "#clock-cells"
1017 * idx - the index of the requested list entry (>= 0)
1019 * producer - handle of producer
1020 * ncells - number of cells in result
1021 * cells - array of decoded cells
1041 * node - consumers device node
1042 * list_name - name of parsed list - "clocks"
1043 * cells_name - name of size property - "#clock-cells"
1045 * count - number of items in list
1053 -1, NULL, count, NULL)); in ofw_bus_parse_xref_list_get_length()