#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/promif.h>
#include <sys/promimpl.h>
int
prom_stopcpu_bycpuid(int cpuid)
{
cell_t ci[5];
ci[0] = p1275_ptr2cell("SUNW,stop-cpu-by-cpuid");
ci[1] = (cell_t)1;
ci[2] = (cell_t)1;
ci[3] = p1275_int2cell(cpuid);
promif_preprom();
(void) p1275_cif_handler(&ci);
promif_postprom();
return (p1275_cell2int(ci[4]));
}
int
prom_startcpu(pnode_t node, caddr_t pc, int arg)
{
cell_t ci[6];
ci[0] = p1275_ptr2cell("SUNW,start-cpu");
ci[1] = (cell_t)3;
ci[2] = (cell_t)0;
ci[3] = p1275_dnode2cell(node);
ci[4] = p1275_ptr2cell(pc);
ci[5] = p1275_int2cell(arg);
promif_preprom();
(void) p1275_cif_handler(&ci);
promif_postprom();
return (0);
}
int
prom_startcpu_bycpuid(int cpuid, caddr_t pc, int arg)
{
cell_t ci[7];
ci[0] = p1275_ptr2cell("SUNW,start-cpu-by-cpuid");
ci[1] = (cell_t)3;
ci[2] = (cell_t)1;
ci[3] = p1275_int2cell(cpuid);
ci[4] = p1275_ptr2cell(pc);
ci[5] = p1275_int2cell(arg);
promif_preprom();
(void) p1275_cif_handler(&ci);
promif_postprom();
return (p1275_cell2int(ci[6]));
}
int
prom_wakeupcpu(pnode_t node)
{
cell_t ci[5];
int rv;
ci[0] = p1275_ptr2cell("SUNW,wakeup-cpu");
ci[1] = (cell_t)1;
ci[2] = (cell_t)1;
ci[3] = p1275_dnode2cell(node);
promif_preprom();
rv = p1275_cif_handler(&ci);
promif_postprom();
if (rv != 0)
return (rv);
else
return (p1275_cell2int(ci[4]));
}
int
prom_cpuoff(pnode_t node)
{
cell_t ci[5];
int rv;
ci[0] = p1275_ptr2cell("SUNW,park-cpu");
ci[1] = (cell_t)1;
ci[2] = (cell_t)1;
ci[3] = p1275_dnode2cell(node);
promif_preprom();
rv = p1275_cif_handler(&ci);
promif_postprom();
if (rv != 0)
return (-1);
return (p1275_cell2int(ci[4]));
}
int
prom_hotaddcpu(int cpuid)
{
cell_t ci[5];
ci[0] = p1275_ptr2cell("SUNW,hotadd-cpu-by-cpuid");
ci[1] = (cell_t)1;
ci[2] = (cell_t)1;
ci[3] = p1275_int2cell(cpuid);
promif_preprom();
(void) p1275_cif_handler(&ci);
promif_postprom();
return (p1275_cell2int(ci[4]));
}
int
prom_hotremovecpu(int cpuid)
{
cell_t ci[5];
ci[0] = p1275_ptr2cell("SUNW,hotremove-cpu-by-cpuid");
ci[1] = (cell_t)1;
ci[2] = (cell_t)1;
ci[3] = p1275_int2cell(cpuid);
promif_preprom();
(void) p1275_cif_handler(&ci);
promif_postprom();
return (p1275_cell2int(ci[4]));
}