Subject: Re: rdmsr() function
To: None <port-i386@netbsd.org>
From: Rui Paulo <phlox-netbsd-i386@fnop.net>
List: port-i386
Date: 09/22/2004 21:53:24
On 2004.09.21 16:46:25 +0000, Jason Thorpe wrote:
> I like this suggestion. Don't forget wrmsr64().
Ok. Here they are:
static __inline u_int64_t
rdmsr64(u_int msr)
{
u_int64_t rv;
u_int32_t regs[2];
__asm __volatile("rdmsr" : "=A" (regs[0]), "=D" (regs[1]) : "c" (msr));
rv = ((u_int64_t) regs[1] << 32) + regs[0];
return (rv);
}
static __inline void
wrmsr64(u_int msr, u_int64_t newval)
{
u_int32_t regs[2];
regs[0] = (u_int32_t) (newval >> 32);
regs[1] = (u_int32_t) newval;
__asm __volatile("wrmsr" : : "A" (regs[0]), "D" (regs[1]), "c" (msr));
}
--
Rui Paulo "Simplicity is the ultimate sophistication."
-- Leonardo da Vinci