#include <u.h>
#include <libc.h>
#include <mach.h>

Regdesc*
regdesc(char *name)
{
	Regdesc *r;

	for(r=mach->reglist; r->name; r++)
		if(strcmp(r->name, name) == 0)
			return r;
	return nil;
}

int
rput(Regs *regs, char *name, ulong u)
{
	if(regs == nil){
		werrstr("registers not mapped");
		return -1;
	}
	return regs->rw(regs, name, &u, 0);
}

int
rget(Regs *regs, char *name, ulong *u)
{
	if(regs == nil){
		*u = ~(ulong)0;
		werrstr("registers not mapped");
		return -1;
	}
	return regs->rw(regs, name, u, 1);
}

int
_uregrw(Regs *regs, char *name, ulong *u, int isr)
{
	Regdesc *r;
	uchar *ureg;

	if(!isr){
		werrstr("cannot write registers");
		return -1;
	}

	if((r = regdesc(name)) == nil)
		return -1;
	ureg = ((UregRegs*)regs)->ureg + r->offset;

	switch(r->format){
	default:
	case 'X':
		*u = mach->swap4(*(u32int*)ureg);
		return 0;
	}
}

