mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
59 lines
855 B
C
59 lines
855 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <mach.h>
|
|
|
|
Regdesc*
|
|
regdesc(char *name)
|
|
{
|
|
Regdesc *r;
|
|
|
|
for(r=mach->reglist; r->name; r++)
|
|
if(strcmp(r->name, name) == 0)
|
|
return r;
|
|
return nil;
|
|
}
|
|
|
|
int
|
|
rput(Regs *regs, char *name, ulong u)
|
|
{
|
|
if(regs == nil){
|
|
werrstr("registers not mapped");
|
|
return -1;
|
|
}
|
|
return regs->rw(regs, name, &u, 0);
|
|
}
|
|
|
|
int
|
|
rget(Regs *regs, char *name, ulong *u)
|
|
{
|
|
if(regs == nil){
|
|
*u = ~(ulong)0;
|
|
werrstr("registers not mapped");
|
|
return -1;
|
|
}
|
|
return regs->rw(regs, name, u, 1);
|
|
}
|
|
|
|
int
|
|
_uregrw(Regs *regs, char *name, ulong *u, int isr)
|
|
{
|
|
Regdesc *r;
|
|
uchar *ureg;
|
|
|
|
if(!isr){
|
|
werrstr("cannot write registers");
|
|
return -1;
|
|
}
|
|
|
|
if((r = regdesc(name)) == nil)
|
|
return -1;
|
|
ureg = ((UregRegs*)regs)->ureg + r->offset;
|
|
|
|
switch(r->format){
|
|
default:
|
|
case 'X':
|
|
*u = mach->swap4(*(u32int*)ureg);
|
|
return 0;
|
|
}
|
|
}
|
|
|