Blame


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