Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <mach.h>
5 int
6 rput(Regs *regs, char *name, ulong u)
7 {
8 if(regs == nil){
9 werrstr("registers not mapped");
10 return -1;
11 }
12 return regs->rw(regs, name, &u, 0);
13 }
15 int
16 rget(Regs *regs, char *name, ulong *u)
17 {
18 if(regs == nil){
19 *u = ~(ulong)0;
20 werrstr("registers not mapped");
21 return -1;
22 }
23 return regs->rw(regs, name, u, 1);
24 }
26 int
27 _uregrw(Regs *regs, char *name, ulong *u, int isr)
28 {
29 Regdesc *r;
30 uchar *ureg;
32 if(!isr){
33 werrstr("cannot write registers");
34 return -1;
35 }
37 if((r = regdesc(name)) == nil)
38 return -1;
39 ureg = ((UregRegs*)regs)->ureg + r->offset;
41 switch(r->format){
42 default:
43 case 'X':
44 *u = mach->swap4(*(u32int*)ureg);
45 return 0;
46 }
47 }
49 Regdesc*
50 regdesc(char *name)
51 {
52 Regdesc *r;
54 for(r=mach->reglist; r->name; r++)
55 if(strcmp(r->name, name) == 0)
56 return r;
57 return nil;
58 }