URI:
       tregs.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tregs.c (917B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <mach.h>
            4 
            5 Regdesc*
            6 regdesc(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 
           16 int
           17 rput(Regs *regs, char *name, u64int u)
           18 {
           19         if(regs == nil){
           20                 werrstr("registers not mapped");
           21                 return -1;
           22         }
           23         return regs->rw(regs, name, &u, 0);
           24 }
           25 
           26 int
           27 rget(Regs *regs, char *name, u64int *u)
           28 {
           29         if(regs == nil){
           30                 *u = ~(u64int)0;
           31                 werrstr("registers not mapped");
           32                 return -1;
           33         }
           34         return regs->rw(regs, name, u, 1);
           35 }
           36 
           37 int
           38 _uregrw(Regs *regs, char *name, u64int *u, int isr)
           39 {
           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':
           55                 *u = mach->swap4(*(u32int*)ureg);
           56                 return 0;
           57         case 'Y':
           58                 *u = mach->swap8(*(u64int*)ureg);
           59                 return 0;
           60         }
           61 }