base: split out the VncServer into a VncInput and Server classes
[gem5.git] / src / dev / uart8250.hh
index 2e768216a9b60b8dda69a99444a81df16d4497d9..7d577954cf6c3b1157e185cc327afe911242400f 100644 (file)
 #ifndef __DEV_UART8250_HH__
 #define __DEV_UART8250_HH__
 
-#include "dev/tsunamireg.h"
-#include "base/range.hh"
 #include "dev/io_device.hh"
 #include "dev/uart.hh"
-
+#include "params/Uart8250.hh"
 
 /* UART8250 Interrupt ID Register
  *  bit 0    Interrupt Pending 0 = true, 1 = false
@@ -54,15 +52,26 @@ const uint8_t IIR_TXID  = 0x02; /* Tx Data */
 const uint8_t IIR_RXID  = 0x04; /* Rx Data */
 const uint8_t IIR_LINE  = 0x06; /* Rx Line Status (highest priority)*/
 
-class SimConsole;
+const uint8_t UART_IER_RDI  = 0x01;
+const uint8_t UART_IER_THRI = 0x02;
+const uint8_t UART_IER_RLSI = 0x04;
+
+
+const uint8_t UART_LSR_TEMT = 0x40;
+const uint8_t UART_LSR_THRE = 0x20;
+const uint8_t UART_LSR_DR   = 0x01;
+
+const uint8_t UART_MCR_LOOP = 0x10;
+
+
+class Terminal;
 class Platform;
 
 class Uart8250 : public Uart
 {
-
-
   protected:
     uint8_t IER, DLAB, LCR, MCR;
+    Tick lastTxInt;
 
     class IntrEvent : public Event
     {
@@ -72,7 +81,7 @@ class Uart8250 : public Uart
         public:
             IntrEvent(Uart8250 *u, int bit);
             virtual void process();
-            virtual const char *description();
+            virtual const char *description() const;
             void scheduleIntr();
     };
 
@@ -80,12 +89,17 @@ class Uart8250 : public Uart
     IntrEvent rxIntrEvent;
 
   public:
-    Uart8250(Params *p);
+    typedef Uart8250Params Params;
+    const Params *
+    params() const
+    {
+        return dynamic_cast<const Params *>(_params);
+    }
+    Uart8250(const Params *p);
 
     virtual Tick read(PacketPtr pkt);
     virtual Tick write(PacketPtr pkt);
-    virtual void addressRanges(AddrRangeList &range_list);
-
+    virtual AddrRangeList getAddrRanges() const;
 
     /**
      * Inform the uart that there is data available.