blob: 78972eeb487f10f3bc6731c12e105b215182a03c [file] [log] [blame]
rsca84cbb22004-04-19 19:29:25 +00001#include <u.h>
2#include <libc.h>
3#include <mach.h>
4
rscd0f5cbc2005-01-07 04:02:28 +00005Regdesc*
6regdesc(char *name)
7{
8 Regdesc *r;
9
10 for(r=mach->reglist; r->name; r++)
11 if(strcmp(r->name, name) == 0)
12 return r;
13 return nil;
14}
15
rsca84cbb22004-04-19 19:29:25 +000016int
rsc4f0073f2004-06-11 12:52:08 +000017rput(Regs *regs, char *name, ulong u)
rsca84cbb22004-04-19 19:29:25 +000018{
19 if(regs == nil){
20 werrstr("registers not mapped");
21 return -1;
22 }
23 return regs->rw(regs, name, &u, 0);
24}
25
26int
rsc4f0073f2004-06-11 12:52:08 +000027rget(Regs *regs, char *name, ulong *u)
rsca84cbb22004-04-19 19:29:25 +000028{
29 if(regs == nil){
30 *u = ~(ulong)0;
31 werrstr("registers not mapped");
32 return -1;
33 }
34 return regs->rw(regs, name, u, 1);
35}
36
37int
rsc4f0073f2004-06-11 12:52:08 +000038_uregrw(Regs *regs, char *name, ulong *u, int isr)
rsca84cbb22004-04-19 19:29:25 +000039{
40 Regdesc *r;
41 uchar *ureg;
42
43 if(!isr){
44 werrstr("cannot write registers");
45 return -1;
46 }
47
48 if((r = regdesc(name)) == nil)
49 return -1;
50 ureg = ((UregRegs*)regs)->ureg + r->offset;
51
52 switch(r->format){
53 default:
54 case 'X':
rsc4f0073f2004-06-11 12:52:08 +000055 *u = mach->swap4(*(u32int*)ureg);
rsca84cbb22004-04-19 19:29:25 +000056 return 0;
57 }
58}
59