summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/cpufunc.h
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2007-08-09 20:14:35 +0000
committernjl <njl@FreeBSD.org>2007-08-09 20:14:35 +0000
commit6fbfdc29284a9679b2564c699957e1b35dd0c36d (patch)
tree92b1e138479abdf58ffb6d430d9c68f33dfbd4fe /sys/i386/include/cpufunc.h
parent3e954dbc055d1799a92b99f305a9becfeec7a491 (diff)
downloadFreeBSD-src-6fbfdc29284a9679b2564c699957e1b35dd0c36d.zip
FreeBSD-src-6fbfdc29284a9679b2564c699957e1b35dd0c36d.tar.gz
Add "show sysregs" command to ddb. On i386, this gives gdt, idt, ldt,
cr0-4, etc. Support should be added for other platforms that have a different set of registers for system use. Loosely based on: OpenBSD Approved by: re
Diffstat (limited to 'sys/i386/include/cpufunc.h')
-rw-r--r--sys/i386/include/cpufunc.h58
1 files changed, 47 insertions, 11 deletions
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 9a646f6..f3f6715 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -326,28 +326,28 @@ read_eflags(void)
return (ef);
}
-static __inline u_int64_t
+static __inline uint64_t
rdmsr(u_int msr)
{
- u_int64_t rv;
+ uint64_t rv;
__asm __volatile("rdmsr" : "=A" (rv) : "c" (msr));
return (rv);
}
-static __inline u_int64_t
+static __inline uint64_t
rdpmc(u_int pmc)
{
- u_int64_t rv;
+ uint64_t rv;
__asm __volatile("rdpmc" : "=A" (rv) : "c" (pmc));
return (rv);
}
-static __inline u_int64_t
+static __inline uint64_t
rdtsc(void)
{
- u_int64_t rv;
+ uint64_t rv;
__asm __volatile("rdtsc" : "=A" (rv));
return (rv);
@@ -366,7 +366,7 @@ write_eflags(u_int ef)
}
static __inline void
-wrmsr(u_int msr, u_int64_t newval)
+wrmsr(u_int msr, uint64_t newval)
{
__asm __volatile("wrmsr" : : "A" (newval), "c" (msr));
}
@@ -456,6 +456,14 @@ rfs(void)
return (sel);
}
+static __inline uint64_t
+rgdt(void)
+{
+ uint64_t gdtr;
+ __asm __volatile("sgdt %0" : "=m" (gdtr));
+ return (gdtr);
+}
+
static __inline u_int
rgs(void)
{
@@ -464,6 +472,22 @@ rgs(void)
return (sel);
}
+static __inline uint64_t
+ridt(void)
+{
+ uint64_t idtr;
+ __asm __volatile("sidt %0" : "=m" (idtr));
+ return (idtr);
+}
+
+static __inline u_short
+rldt(void)
+{
+ u_short ldtr;
+ __asm __volatile("sldt %0" : "=g" (ldtr));
+ return (ldtr);
+}
+
static __inline u_int
rss(void)
{
@@ -472,6 +496,14 @@ rss(void)
return (sel);
}
+static __inline u_short
+rtr(void)
+{
+ u_short tr;
+ __asm __volatile("str %0" : "=g" (tr));
+ return (tr);
+}
+
static __inline void
load_fs(u_int sel)
{
@@ -677,8 +709,8 @@ u_int rcr0(void);
u_int rcr2(void);
u_int rcr3(void);
u_int rcr4(void);
-u_int64_t rdmsr(u_int msr);
-u_int64_t rdpmc(u_int pmc);
+uint64_t rdmsr(u_int msr);
+uint64_t rdpmc(u_int pmc);
u_int rdr0(void);
u_int rdr1(void);
u_int rdr2(void);
@@ -687,13 +719,17 @@ u_int rdr4(void);
u_int rdr5(void);
u_int rdr6(void);
u_int rdr7(void);
-u_int64_t rdtsc(void);
+uint64_t rdtsc(void);
u_int read_eflags(void);
u_int rfs(void);
+uint64_t rgdt(void);
u_int rgs(void);
+uint64_t ridt(void);
+u_short rldt(void);
+u_short rtr(void);
void wbinvd(void);
void write_eflags(u_int ef);
-void wrmsr(u_int msr, u_int64_t newval);
+void wrmsr(u_int msr, uint64_t newval);
#endif /* __GNUCLIKE_ASM && __CC_SUPPORTS___INLINE */
OpenPOWER on IntegriCloud