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