void prom_apply_generic_ranges (int node, int parent, struct linux_prom_registers *regs, int nregs) { int success; int num_ranges; struct linux_prom_ranges ranges[PROMREG_MAX]; success = prom_getproperty(node, "ranges", (char *) ranges, sizeof (ranges)); if (success != -1) { num_ranges = (success/sizeof(struct linux_prom_ranges)); if (parent) { struct linux_prom_ranges parent_ranges[PROMREG_MAX]; int num_parent_ranges; success = prom_getproperty(parent, "ranges", (char *) parent_ranges, sizeof (parent_ranges)); if (success != -1) { num_parent_ranges = (success/sizeof(struct linux_prom_ranges)); prom_adjust_ranges (ranges, num_ranges, parent_ranges, num_parent_ranges); } } prom_adjust_regs(regs, nregs, ranges, num_ranges); } }
static void __init sbus_bus_ranges_init(int parent_node, struct sbus_bus *sbus) { int len; len = prom_getproperty(sbus->prom_node, "ranges", (char *) sbus->sbus_ranges, sizeof(sbus->sbus_ranges)); if (len == -1 || len == 0) { sbus->num_sbus_ranges = 0; return; } sbus->num_sbus_ranges = len / sizeof(struct linux_prom_ranges); #ifdef CONFIG_SPARC32 if (sparc_cpu_model == sun4d) { struct linux_prom_ranges iounit_ranges[PROMREG_MAX]; int num_iounit_ranges; len = prom_getproperty(parent_node, "ranges", (char *) iounit_ranges, sizeof (iounit_ranges)); if (len != -1) { num_iounit_ranges = (len/sizeof(struct linux_prom_ranges)); prom_adjust_ranges (sbus->sbus_ranges, sbus->num_sbus_ranges, iounit_ranges, num_iounit_ranges); } } #endif }