pnode_t prom_childnode(pnode_t nodeid) { cell_t ci[5]; ci[0] = p1275_ptr2cell("child"); /* Service name */ ci[1] = (cell_t)1; /* #argument cells */ ci[2] = (cell_t)1; /* #result cells */ ci[3] = p1275_dnode2cell(nodeid); /* Arg1: input phandle */ ci[4] = p1275_dnode2cell(OBP_NONODE); /* Res1: Prime result */ promif_preprom(); (void) p1275_cif_handler(&ci); promif_postprom(); return (p1275_cell2dnode(ci[4])); /* Res1: child phandle */ }
int prom_test_method(char *method, dnode_t node) { cell_t ci[6]; ci[0] = p1275_ptr2cell("test-method"); /* service */ ci[1] = (cell_t)2; /* #argument cells */ ci[2] = (cell_t)1; /* #result cells */ ci[3] = p1275_dnode2cell(node); ci[4] = p1275_ptr2cell(method); ci[5] = (cell_t)-1; (void) p1275_cif_handler(&ci); return (p1275_cell2int(ci[5])); }
int prom_serengeti_wakeupcpu(pnode_t node) { cell_t ci[5]; int rv; ci[0] = p1275_ptr2cell("SUNW,Serengeti,wakeup-cpu"); /* Service name */ ci[1] = (cell_t)1; /* #argument cells */ ci[2] = (cell_t)1; /* #result cells */ ci[3] = p1275_dnode2cell(node); /* Arg1: nodeid to wakeup */ promif_preprom(); rv = p1275_cif_handler(&ci); promif_postprom(); if (rv != 0) return (rv); else return (p1275_cell2int(ci[4])); /* Res1: Catch result */ }
int prom_serengeti_cpu_off(pnode_t node) { cell_t ci[5]; int rv; ci[0] = p1275_ptr2cell("SUNW,Serengeti,park-cpu"); ci[1] = (cell_t)1; /* #argument cells */ ci[2] = (cell_t)1; /* #return cells */ ci[3] = p1275_dnode2cell(node); promif_preprom(); rv = p1275_cif_handler(&ci); promif_postprom(); if (rv != 0) return (-1); return (p1275_cell2int(ci[4])); }
pnode_t prom_finddevice(char *path) { cell_t ci[5]; #ifdef PROM_32BIT_ADDRS char *opath = NULL; size_t len; if ((uintptr_t)path > (uint32_t)-1) { opath = path; len = prom_strlen(opath) + 1; /* include terminating NUL */ path = promplat_alloc(len); if (path == NULL) { return (OBP_BADNODE); } (void) prom_strcpy(path, opath); } #endif promif_preprom(); ci[0] = p1275_ptr2cell("finddevice"); /* Service name */ ci[1] = (cell_t)1; /* #argument cells */ ci[2] = (cell_t)1; /* #result cells */ ci[3] = p1275_ptr2cell(path); /* Arg1: pathname */ ci[4] = p1275_dnode2cell(OBP_BADNODE); /* Res1: Prime result */ (void) p1275_cif_handler(&ci); promif_postprom(); #ifdef PROM_32BIT_ADDRS if (opath != NULL) promplat_free(path, len); #endif return ((pnode_t)p1275_cell2dnode(ci[4])); /* Res1: phandle */ }