/* Take the archdata values for IOMMU, STC, and HOSTDATA found in * BUS and propagate to all child platform_device objects.
*/ void of_propagate_archdata(struct platform_device *bus)
{ struct dev_archdata *bus_sd = &bus->dev.archdata; struct device_node *bus_dp = bus->dev.of_node; struct device_node *dp;
staticvoid get_cells(struct device_node *dp, int *addrc, int *sizec)
{ if (addrc)
*addrc = of_n_addr_cells(dp); if (sizec)
*sizec = of_n_size_cells(dp);
}
/* * Default translator (generic bus)
*/
void of_bus_default_count_cells(struct device_node *dev, int *addrc, int *sizec)
{
get_cells(dev, addrc, sizec);
}
/* Make sure the least significant 64-bits are in-range. Even * for 3 or 4 cell values it is a good enough approximation.
*/ int of_out_of_range(const u32 *addr, const u32 *base, const u32 *size, int na, int ns)
{
u64 a = of_read_addr(addr, na);
u64 b = of_read_addr(base, na);
if (a < b) return 1;
b += of_read_addr(size, ns); if (a >= b) return 1;
return 0;
}
int of_bus_default_map(u32 *addr, const u32 *range, int na, int ns, int pna)
{
u32 result[OF_MAX_ADDR_CELLS]; int i;
int of_bus_sbus_match(struct device_node *np)
{ struct device_node *dp = np;
while (dp) { if (of_node_name_eq(dp, "sbus") ||
of_node_name_eq(dp, "sbi")) return 1;
/* Have a look at use_1to1_mapping(). We're trying * to match SBUS if that's the top-level bus and we * don't have some intervening real bus that provides * ranges based translations.
*/ if (of_property_present(dp, "ranges")) break;
dp = dp->parent;
}
return 0;
}
void of_bus_sbus_count_cells(struct device_node *child, int *addrc, int *sizec)
{ if (addrc)
*addrc = 2; if (sizec)
*sizec = 1;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.