our first interrupt
authorAli Saidi <saidi@eecs.umich.edu>
Wed, 28 Jan 2004 23:12:52 +0000 (18:12 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Wed, 28 Jan 2004 23:12:52 +0000 (18:12 -0500)
cpu/exetrace.cc:
    added looking for symbols at PC+4 and PC+8 thanks to gcc skiping
    setting the gp where it can and jumping <func>+8
dev/console.cc:
    commented out weird interrupt per nate's suggestion
dev/tsunami_cchip.cc:
    moved rtc flag to correct bit
dev/tsunami_io.cc:
    time interrupt will be 1024Hz and at some point be configurable by
    linux
dev/tsunami_io.hh:
    Timer interrupt will be 1024hz for now and in the future be
    configurable by linux

--HG--
extra : convert_revision : 2fcc924c8848eb3c6166d9d517617ed193a2b89a

cpu/exetrace.cc
dev/console.cc
dev/tsunami_cchip.cc
dev/tsunami_io.cc
dev/tsunami_io.hh

index a7224223228d4d62a93cd3ad6a410bdaf2a3ab0d..4d3a70f376ae90d88b907ddd508fc68456f5cf1f 100644 (file)
@@ -67,8 +67,12 @@ Trace::InstRecord::dump(ostream &outs)
 
 
     std::string str;
-    if(debugSymbolTable->findSymbol(data.as_int, str))
+    if(debugSymbolTable->findSymbol(PC, str))
         outs << "@" << setw(17) << str << " : ";
+    else if(debugSymbolTable->findSymbol(PC - 4, str))
+        outs << "@" << setw(15) << str << "+4 : ";
+    else if(debugSymbolTable->findSymbol(PC - 8, str))
+        outs << "@" << setw(15) << str << "+8 : ";
     else
         outs << "0x" << hex << PC << " : ";
 
index f4156207dfb1071785a21c1536cef6c91c735b51..08b169bc4b521cf2fe5711d6e26aeb9d7c9c9a2b 100644 (file)
@@ -388,8 +388,8 @@ CREATE_SIM_OBJECT(SimConsole)
     SimConsole *console = new SimConsole(getInstanceName(), filename, number);
     ((ConsoleListener *)listener)->add(console);
     ((SimConsole *)console)->initInt(intr_control);
-    ((SimConsole *)console)->setInt(SimConsole::TransmitInterrupt |
-                                    SimConsole::ReceiveInterrupt);
+//    ((SimConsole *)console)->setInt(SimConsole::TransmitInterrupt |
+//                                 SimConsole::ReceiveInterrupt);
 
     return console;
 }
index 6559f38090ea6a0ca6bed3b2b5f9772a90d645d1..ffde4da98890d195aa16295d30550c56e95854d0 100644 (file)
@@ -148,10 +148,11 @@ TsunamiCChip::write(MemReqPtr req, const uint8_t *data)
                    return No_Fault;
               case TSDEV_CC_MISC:
                 //If it is the seventh bit, clear the RTC interrupt
-                if ((*(uint64_t*) data) & (1<<7)) {
+                if ((*(uint64_t*) data) & (1<<4)) {
                     RTCInterrupting = false;
                     tsunami->intrctrl->clear(0, TheISA::INTLEVEL_IRQ2, 0);
-                    misc &= ~(1<<7);
+                    DPRINTF(Tsunami, "clearing rtc interrupt\n");
+                    misc &= ~(1<<4);
                 } else panic("TSDEV_CC_MISC write not implemented\n");
                   return No_Fault;
               case TSDEV_CC_AAR0:
index 611496e58730f1985bf48d87525e1c138f8c7666..87f997e9ed30e9f0111158dd51d5badad75d0d9e 100644 (file)
@@ -25,8 +25,6 @@ using namespace std;
 
 #define UNIX_YEAR_OFFSET 52
 
-//This will have to be dynamic if we want support usermode access of the RTC
-#define RTC_RATE  1024
 
 // Timer Event for Periodic interrupt of RTC
 TsunamiIO::RTCEvent::RTCEvent(Tsunami* t)
@@ -39,7 +37,7 @@ TsunamiIO::RTCEvent::RTCEvent(Tsunami* t)
 void
 TsunamiIO::RTCEvent::process()
 {
-    DPRINTF(MC146818, "Timer Interrupt\n");
+    DPRINTF(MC146818, "RTC Timer Interrupt\n");
     schedule(curTick + ticksPerSecond/RTC_RATE);
     //Actually interrupt the processor here
     if (!tsunami->cchip->RTCInterrupting) {
@@ -105,8 +103,8 @@ TsunamiIO::ClockEvent::Status()
 
 
 TsunamiIO::TsunamiIO(const string &name, Tsunami *t, time_t init_time,
-                       Addr addr, Addr mask, uint32_t f, MemoryController *mmu)
-    : MmapDevice(name, addr, mask, mmu), tsunami(t), rtc(t), freq(f)
+                       Addr addr, Addr mask, MemoryController *mmu)
+    : MmapDevice(name, addr, mask, mmu), tsunami(t), rtc(t)
 {
     timerData = 0;
     set_time(init_time == 0 ? time(NULL) : init_time);
@@ -300,7 +298,6 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(TsunamiIO)
     SimObjectParam<MemoryController *> mmu;
     Param<Addr> addr;
     Param<Addr> mask;
-    Param<uint32_t> frequency;
 
 END_DECLARE_SIM_OBJECT_PARAMS(TsunamiIO)
 
@@ -311,15 +308,14 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(TsunamiIO)
             "(0 for actual time, default is 1/1/06", ULL(1136073600)),
     INIT_PARAM(mmu, "Memory Controller"),
     INIT_PARAM(addr, "Device Address"),
-    INIT_PARAM(mask, "Address Mask"),
-    INIT_PARAM(frequency, "clock interrupt frequency")
+    INIT_PARAM(mask, "Address Mask")
 
 END_INIT_SIM_OBJECT_PARAMS(TsunamiIO)
 
 CREATE_SIM_OBJECT(TsunamiIO)
 {
     return new TsunamiIO(getInstanceName(), tsunami, time,  addr,
-                         mask, frequency, mmu);
+                         mask, mmu);
 }
 
 REGISTER_SIM_OBJECT("TsunamiIO", TsunamiIO)
index e945eb53d88a1a69e25b7988ce76b461b65a2f1b..9706dea2532061ce774601e3d60662858cd993c8 100644 (file)
  */
 
 /* @file
- * Tsunnami Fake DMA memory map
+ * Tsunami Fake I/O Space mapping including RTC/timer interrupts
  */
 
 #ifndef __TSUNAMI_DMA_HH__
 #define __TSUNAMI_DMA_HH__
 
+#define RTC_RATE 1024
+
 #include "mem/functional_mem/mmap_device.hh"
 #include "dev/tsunami.hh"
 
@@ -107,13 +109,12 @@ class TsunamiIO : public MmapDevice
 
       uint32_t timerData;
 
-    uint32_t  freq;
 
   public:
-    uint32_t  frequency() const { return freq; }
+    uint32_t  frequency() const { return RTC_RATE; }
 
     TsunamiIO(const std::string &name, Tsunami *t, time_t init_time,
-               Addr addr, Addr mask, uint32_t f, MemoryController *mmu);
+               Addr addr, Addr mask,  MemoryController *mmu);
 
     void set_time(time_t t);