x86: Expose the raw hash map of MSRs
authorAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 18 Sep 2013 09:28:28 +0000 (11:28 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 18 Sep 2013 09:28:28 +0000 (11:28 +0200)
This patch allows the KVM CPU module to initialize it's MSRs by
enumerating the MSRs in the gem5 x86 implementation.

src/arch/x86/regs/msr.cc
src/arch/x86/regs/msr.hh

index aeb283afff3ac13fe61d485410debcc8f3ac392e..462d87e8c814dfd19dbb48b589e37c73497820c5 100644 (file)
  */
 
 #include "arch/x86/regs/msr.hh"
-#include "base/hashmap.hh"
 
 namespace X86ISA
 {
 
-typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
-
 typedef MsrMap::value_type MsrVal;
 
 const MsrMap::value_type msrMapData[] = {
@@ -146,12 +143,12 @@ const MsrMap::value_type msrMapData[] = {
 
 static const unsigned msrMapSize = sizeof(msrMapData) / sizeof(msrMapData[0]);
 
-static MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
+const MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
 
 bool
 msrAddrToIndex(MiscRegIndex &regNum, Addr addr)
 {
-    MsrMap::iterator it = msrMap.find(addr);
+    MsrMap::const_iterator it(msrMap.find(addr));
     if (it == msrMap.end()) {
         return false;
     } else {
index c10c5c203aea5a19163b192bd31365c1a5caaecc..a2ae5c69af2737f0d31c9d685c3b51d99a8337e7 100644 (file)
 #define __ARCH_X86_REG_MSR_HH__
 
 #include "arch/x86/regs/misc.hh"
+#include "base/hashmap.hh"
 #include "base/types.hh"
 
 namespace X86ISA
 {
 
+typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
+
+/**
+ * Map between MSR addresses and their corresponding misc registers.
+ *
+ * @note This map is usually only used when enumeration of supported
+ * MSRs is needed (e.g., in virtualized CPUs). Code that needs to
+ * look-up specific MSRs should use msrAddrToIndex().
+ */
+extern const MsrMap msrMap;
+
+/**
+ * Find and return the misc reg corresponding to an MSR address.
+ *
+ * Look for an MSR (addr) in #msrMap and return the
+ * corresponding misc reg in regNum. The value of regNum is undefined
+ * if the MSR was not found.
+ *
+ * @param regNum misc reg index (out).
+ * @param addr MSR address
+ * @return True if the MSR was found, false otherwise.
+ */
 bool msrAddrToIndex(MiscRegIndex &regNum, Addr addr);
 
 } // namespace X86ISA