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 443d6288 2012-02-19 rsc rput(Regs *regs, char *name, u64int 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 443d6288 2012-02-19 rsc rget(Regs *regs, char *name, u64int *u)
28 a84cbb2a 2004-04-19 devnull {
29 a84cbb2a 2004-04-19 devnull if(regs == nil){
30 4a000a28 2012-03-05 rsc *u = ~(u64int)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 443d6288 2012-02-19 rsc _uregrw(Regs *regs, char *name, u64int *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 4a000a28 2012-03-05 rsc case 'Y':
58 4a000a28 2012-03-05 rsc *u = mach->swap8(*(u64int*)ureg);
59 4a000a28 2012-03-05 rsc return 0;
60 a84cbb2a 2004-04-19 devnull }
61 a84cbb2a 2004-04-19 devnull }