OFW: Move code for searching interrupt parent into separate function.
It can be used by interrupt controller drivers. Approved by: kib (mentor)
This commit is contained in:
parent
4b3dc89847
commit
821a61efa0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=291648
@ -430,6 +430,27 @@ ofw_bus_reg_to_rl(device_t dev, phandle_t node, pcell_t acells, pcell_t scells,
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get interrupt parent for given node.
|
||||
* Returns 0 if interrupt parent doesn't exist.
|
||||
*/
|
||||
phandle_t
|
||||
ofw_bus_find_iparent(phandle_t node)
|
||||
{
|
||||
phandle_t iparent;
|
||||
|
||||
if (OF_searchencprop(node, "interrupt-parent", &iparent,
|
||||
sizeof(iparent)) == -1) {
|
||||
for (iparent = node; iparent != 0;
|
||||
iparent = OF_parent(iparent)) {
|
||||
if (OF_hasprop(iparent, "interrupt-controller"))
|
||||
break;
|
||||
}
|
||||
iparent = OF_xref_from_node(iparent);
|
||||
}
|
||||
return (iparent);
|
||||
}
|
||||
|
||||
int
|
||||
ofw_bus_intr_to_rl(device_t dev, phandle_t node,
|
||||
struct resource_list *rl, int *rlen)
|
||||
@ -442,18 +463,11 @@ ofw_bus_intr_to_rl(device_t dev, phandle_t node,
|
||||
nintr = OF_getencprop_alloc(node, "interrupts", sizeof(*intr),
|
||||
(void **)&intr);
|
||||
if (nintr > 0) {
|
||||
if (OF_searchencprop(node, "interrupt-parent", &iparent,
|
||||
sizeof(iparent)) == -1) {
|
||||
for (iparent = node; iparent != 0;
|
||||
iparent = OF_parent(iparent)) {
|
||||
if (OF_hasprop(iparent, "interrupt-controller"))
|
||||
break;
|
||||
}
|
||||
if (iparent == 0) {
|
||||
device_printf(dev, "No interrupt-parent found, "
|
||||
"assuming direct parent\n");
|
||||
iparent = OF_parent(node);
|
||||
}
|
||||
iparent = ofw_bus_find_iparent(node);
|
||||
if (iparent == 0) {
|
||||
device_printf(dev, "No interrupt-parent found, "
|
||||
"assuming direct parent\n");
|
||||
iparent = OF_parent(node);
|
||||
iparent = OF_xref_from_node(iparent);
|
||||
}
|
||||
if (OF_searchencprop(OF_node_from_xref(iparent),
|
||||
|
@ -82,7 +82,7 @@ const char *ofw_bus_get_status(device_t dev);
|
||||
int ofw_bus_status_okay(device_t dev);
|
||||
|
||||
/* Helper to get node's interrupt parent */
|
||||
void ofw_bus_find_iparent(phandle_t);
|
||||
phandle_t ofw_bus_find_iparent(phandle_t);
|
||||
|
||||
/* Helper routine for checking compat prop */
|
||||
int ofw_bus_is_compatible(device_t, const char *);
|
||||
|
Loading…
Reference in New Issue
Block a user