void *of_claim(unsigned long virt, unsigned long size, unsigned long align) { int ret; unsigned int result; if (need_map < 0) need_map = check_of_version(); if (align || !need_map) return (void *) of_call_prom("claim", 3, 1, virt, size, align); ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", memory, align, size, virt); if (ret != 0 || result == -1) return (void *) -1; ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", chosen_mmu, align, size, virt); /* */ ret = of_call_prom("call-method", 6, 1, "map", chosen_mmu, 0x12, size, virt, virt); return (void *) virt; }
void of1275_prominit(prom_entry entry) { promptr = entry; chosen_handle = of1275_finddevice("/chosen"); if (chosen_handle == (phandle) (-1)) { chosen_handle = of1275_finddevice("/chosen@0"); if (chosen_handle == (phandle) (-1)) of1275_exit(); } if (of1275_getprop(chosen_handle, "stdout", &stdout, sizeof(stdout)) != 4) of1275_exit(); stderr = stdout; if (of1275_getprop(chosen_handle, "stdin", &stdin, sizeof(stdin)) != 4) of1275_exit(); if (!check_of_version()) return; claim_needs_map = 1; if (of1275_getprop(chosen_handle, "mmu", &mmu, sizeof(mmu)) != 4) of1275_exit(); }
void *claim(unsigned int virt, unsigned int size, unsigned int align) { int ret; unsigned int result; if (need_map < 0) need_map = check_of_version(); if (align || !need_map) return (void *) call_prom("claim", 3, 1, virt, size, align); ret = call_prom_ret("call-method", 5, 2, &result, "claim", memory, align, size, virt); if (ret != 0 || result == -1) return (void *) -1; ret = call_prom_ret("call-method", 5, 2, &result, "claim", chosen_mmu, align, size, virt); /* 0x12 == coherent + read/write */ ret = call_prom("call-method", 6, 1, "map", chosen_mmu, 0x12, size, virt, virt); return virt; }