dev: make BasicPioDevice take size in constructor
authorSteve Reinhardt <stever@gmail.com>
Fri, 12 Jul 2013 02:57:04 +0000 (21:57 -0500)
committerSteve Reinhardt <stever@gmail.com>
Fri, 12 Jul 2013 02:57:04 +0000 (21:57 -0500)
Instead of relying on derived classes explicitly assigning
to the BasicPioDevice pioSize field, require them to pass
a size value in to the constructor.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

36 files changed:
src/arch/x86/interrupts.cc
src/dev/alpha/backdoor.cc
src/dev/alpha/tsunami_cchip.cc
src/dev/alpha/tsunami_io.cc
src/dev/alpha/tsunami_pchip.cc
src/dev/arm/a9scu.cc
src/dev/arm/amba_device.cc
src/dev/arm/amba_device.hh
src/dev/arm/amba_fake.cc
src/dev/arm/kmi.cc
src/dev/arm/pl011.cc
src/dev/arm/rtc_pl031.cc
src/dev/arm/rv_ctrl.cc
src/dev/arm/timer_cpulocal.cc
src/dev/arm/timer_sp804.cc
src/dev/baddev.cc
src/dev/io_device.cc
src/dev/io_device.hh
src/dev/isa_fake.cc
src/dev/mips/malta_cchip.cc
src/dev/mips/malta_io.cc
src/dev/mips/malta_pchip.cc
src/dev/pciconfigall.cc
src/dev/sparc/dtod.cc
src/dev/sparc/mm_disk.cc
src/dev/uart.cc
src/dev/uart.hh
src/dev/uart8250.cc
src/dev/x86/cmos.hh
src/dev/x86/i8042.cc
src/dev/x86/i8042.hh
src/dev/x86/i82094aa.cc
src/dev/x86/i8237.hh
src/dev/x86/i8254.hh
src/dev/x86/i8259.cc
src/dev/x86/speaker.hh

index eba4b0010fcb9a3bbe2d7cbd444955d231af3806..afed9c132b5cac441693121334f18b56ed97409c 100644 (file)
@@ -608,7 +608,7 @@ X86ISA::Interrupts::setReg(ApicRegIndex reg, uint32_t val)
 
 
 X86ISA::Interrupts::Interrupts(Params * p)
-    : BasicPioDevice(p), IntDevice(this, p->int_latency),
+    : BasicPioDevice(p, PageBytes), IntDevice(this, p->int_latency),
       apicTimerEvent(this),
       pendingSmi(false), smiVector(0),
       pendingNmi(false), nmiVector(0),
@@ -619,7 +619,6 @@ X86ISA::Interrupts::Interrupts(Params * p)
       pendingIPIs(0), cpu(NULL),
       intSlavePort(name() + ".int_slave", this, this)
 {
-    pioSize = PageBytes;
     memset(regs, 0, sizeof(regs));
     //Set the local apic DFR to the flat model.
     regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1);
index a3579847bfe6d6c9a98b503fc334f6c47961f36a..dc0e8e49f6abfacb4220dc1e0a3e20d89b659896 100644 (file)
@@ -62,12 +62,10 @@ using namespace std;
 using namespace AlphaISA;
 
 AlphaBackdoor::AlphaBackdoor(const Params *p)
-    : BasicPioDevice(p), disk(p->disk), terminal(p->terminal),
+    : BasicPioDevice(p, sizeof(struct AlphaAccess)),
+      disk(p->disk), terminal(p->terminal),
       system(p->system), cpu(p->cpu)
 {
-
-    pioSize = sizeof(struct AlphaAccess);
-
     alphaAccess = new Access();
     alphaAccess->last_offset = pioSize - 1;
 
index 0960c71ab1752775a52ccc3c0ad89058dae18d7f..203325e75cee92af10a40de5a32dbfd790a441d0 100644 (file)
 using namespace TheISA;
 
 TsunamiCChip::TsunamiCChip(const Params *p)
-    : BasicPioDevice(p), tsunami(p->tsunami)
+    : BasicPioDevice(p, 0x10000000), tsunami(p->tsunami)
 {
-    pioSize = 0x10000000;
-
     drir = 0;
     ipint = 0;
     itint = 0;
index bccdddf85c27272433871ae17eaf946b7ba7d67f..6586cd9809fcf920462003d7396392819f9dcb08 100644 (file)
@@ -69,11 +69,9 @@ TsunamiIO::RTC::RTC(const string &n, const TsunamiIOParams *p)
 }
 
 TsunamiIO::TsunamiIO(const Params *p)
-    : BasicPioDevice(p), tsunami(p->tsunami),
+    : BasicPioDevice(p, 0x100), tsunami(p->tsunami),
       pitimer(this, p->name + "pitimer"), rtc(p->name + ".rtc", p)
 {
-    pioSize = 0x100;
-
     // set the back pointer from tsunami to myself
     tsunami->io = this;
 
index fcd06c582e4528be5710eb7e91b774c0539330b3..3ddc0f1b3686553d39a66e1973f9aee093f37fb9 100644 (file)
@@ -52,10 +52,8 @@ using namespace std;
 using namespace TheISA;
 
 TsunamiPChip::TsunamiPChip(const Params *p)
-: BasicPioDevice(p)
+    : BasicPioDevice(p, 0x1000)
 {
-    pioSize = 0x1000;
-
     for (int i = 0; i < 4; i++) {
         wsba[i] = 0;
         wsm[i] = 0;
index 31d38b4ff000273ea1f4fbca548f3671c80b8ee2..efb27daf9e492bc76e55991ff34266c88f075e81 100644 (file)
@@ -45,9 +45,8 @@
 #include "sim/system.hh"
 
 A9SCU::A9SCU(Params *p)
-    : BasicPioDevice(p)
+    : BasicPioDevice(p, 0x60)
 {
-    pioSize = 0x60;
 }
 
 Tick
index 617a67d79307fc08c4f99dcc1db912304cef486b..d2333417f82c782687940625233a8a26064ba758 100644 (file)
 
 const uint64_t AmbaVendor = ULL(0xb105f00d00000000);
 
-AmbaPioDevice::AmbaPioDevice(const Params *p)
-    : BasicPioDevice(p), ambaId(AmbaVendor | p->amba_id)
+AmbaPioDevice::AmbaPioDevice(const Params *p, Addr pio_size)
+    : BasicPioDevice(p, pio_size), ambaId(AmbaVendor | p->amba_id)
 {
 }
 
-AmbaIntDevice::AmbaIntDevice(const Params *p)
-    : AmbaPioDevice(p), intNum(p->int_num), gic(p->gic), intDelay(p->int_delay)
+AmbaIntDevice::AmbaIntDevice(const Params *p, Addr pio_size)
+    : AmbaPioDevice(p, pio_size),
+      intNum(p->int_num), gic(p->gic), intDelay(p->int_delay)
 {
 }
 
index d908ae6161fcbb460b394a4d89b387b1c514469c..3915e436cb4c4897f89d693843fc78a42944f951 100644 (file)
@@ -82,7 +82,7 @@ class AmbaPioDevice : public BasicPioDevice, public AmbaDevice
 
   public:
     typedef AmbaPioDeviceParams Params;
-    AmbaPioDevice(const Params *p);
+    AmbaPioDevice(const Params *p, Addr pio_size);
 };
 
 class AmbaIntDevice : public AmbaPioDevice
@@ -94,7 +94,7 @@ class AmbaIntDevice : public AmbaPioDevice
 
   public:
     typedef AmbaIntDeviceParams Params;
-    AmbaIntDevice(const Params *p);
+    AmbaIntDevice(const Params *p, Addr pio_size);
 };
 
 class AmbaDmaDevice : public DmaDevice, public AmbaDevice
index 654bd3112f5f9c0c3abd5c77a42356ab149f4bc5..3ca705c6cce674db30c59ed43adfba21763078be 100644 (file)
@@ -47,9 +47,8 @@
 #include "mem/packet_access.hh"
 
 AmbaFake::AmbaFake(const Params *p)
-    : AmbaPioDevice(p)
+    : AmbaPioDevice(p, 0xfff)
 {
-    pioSize = 0xfff;
 }
 
 Tick
index 01b1fa7377158b96613fb8d83e4d556eb14f63d3..99d61c610c61ab4e09f77198053cf1382aecf198 100644 (file)
 #include "mem/packet_access.hh"
 
 Pl050::Pl050(const Params *p)
-    : AmbaIntDevice(p), control(0), status(0x43), clkdiv(0), interrupts(0),
-      rawInterrupts(0), ackNext(false), shiftDown(false), vnc(p->vnc),
-      driverInitialized(false), intEvent(this)
+    : AmbaIntDevice(p, 0xfff), control(0), status(0x43), clkdiv(0),
+      interrupts(0), rawInterrupts(0), ackNext(false), shiftDown(false),
+      vnc(p->vnc), driverInitialized(false), intEvent(this)
 {
-    pioSize = 0xfff;
-
     if (vnc) {
         if (!p->is_mouse)
             vnc->setKeyboard(this);
index 8af27087872c7011a8467578ed8a3ba5426acc69..2b4225ad533c31b2bf4e2f8c1601c3218111853d 100644 (file)
 #include "sim/sim_exit.hh"
 
 Pl011::Pl011(const Params *p)
-    : Uart(p), control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12), imsc(0),
-      rawInt(0), maskInt(0), intNum(p->int_num), gic(p->gic),
+    : Uart(p, 0xfff), control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12),
+      imsc(0), rawInt(0), maskInt(0), intNum(p->int_num), gic(p->gic),
       endOnEOT(p->end_on_eot), intDelay(p->int_delay), intEvent(this)
 {
-    pioSize = 0xfff;
 }
 
 Tick
index ca1486f049004d47bb32f5362851ceb3a719d50b..8f421a1da64c93d0600543d003ed0e11e83a79d3 100644 (file)
 #include "mem/packet_access.hh"
 
 PL031::PL031(Params *p)
-    : AmbaIntDevice(p), timeVal(mkutctime(&p->time)), lastWrittenTick(0),
-            loadVal(0), matchVal(0), rawInt(false), maskInt(false),
-            pendingInt(false), matchEvent(this)
+    : AmbaIntDevice(p, 0xfff), timeVal(mkutctime(&p->time)),
+      lastWrittenTick(0), loadVal(0), matchVal(0),
+      rawInt(false), maskInt(false), pendingInt(false), matchEvent(this)
 {
-    pioSize = 0xfff;
 }
 
 
index 337ed73ad7a5703a6d1376d9a445e0c5bee77273..61111d22ee25861dcfe389ce288876b486f5119c 100644 (file)
@@ -43,9 +43,8 @@
 #include "mem/packet_access.hh"
 
 RealViewCtrl::RealViewCtrl(Params *p)
-    : BasicPioDevice(p), flags(0)
+    : BasicPioDevice(p, 0xD4), flags(0)
 {
-    pioSize = 0xD4;
 }
 
 Tick
index 458df06749b9a447c9c622cb4093c829fa6e3c74..ae341e2be97ef0a6fd40c4bc587895cd49f7eba9 100644 (file)
@@ -48,7 +48,7 @@
 #include "mem/packet_access.hh"
 
 CpuLocalTimer::CpuLocalTimer(Params *p)
-    : BasicPioDevice(p), gic(p->gic)
+    : BasicPioDevice(p, 0x38), gic(p->gic)
 {
    // Initialize the timer registers for each per cpu timer
    for (int i = 0; i < CPU_MAX; i++) {
@@ -60,7 +60,6 @@ CpuLocalTimer::CpuLocalTimer(Params *p)
         localTimer[i].intNumWatchdog = p->int_num_watchdog;
         localTimer[i].cpuNum = i;
     }
-    pioSize = 0x38;
 }
 
 CpuLocalTimer::Timer::Timer()
index d4550845d92870a2d026f0af394bf4b6a39e04e4..25bc08003e777b988b5dca1a667519d1c3faf244 100644 (file)
 #include "mem/packet_access.hh"
 
 Sp804::Sp804(Params *p)
-    : AmbaPioDevice(p), gic(p->gic), timer0(name() + ".timer0", this, p->int_num0, p->clock0),
+    : AmbaPioDevice(p, 0xfff), gic(p->gic),
+      timer0(name() + ".timer0", this, p->int_num0, p->clock0),
       timer1(name() + ".timer1", this, p->int_num1, p->clock1)
 {
-    pioSize = 0xfff;
 }
 
 Sp804::Timer::Timer(std::string __name, Sp804 *_parent, int int_num, Tick _clock)
index 9fb88d876f8dc668902fb0ca042a8a65c64afc25..b3a30b7e5747a42b545c2a44fa5ee228980c8a88 100644 (file)
@@ -46,9 +46,8 @@
 using namespace std;
 
 BadDevice::BadDevice(Params *p)
-    : BasicPioDevice(p), devname(p->devicename)
+    : BasicPioDevice(p, 0x10), devname(p->devicename)
 {
-    pioSize = 0x10;
 }
 
 Tick
index 6f76f4f27858f035604faed6fab253e3d0bbbd3d..0c927651d30060ef3c6c507f41cb6be900fd8ca0 100644 (file)
@@ -103,8 +103,8 @@ PioDevice::drain(DrainManager *dm)
     return count;
 }
 
-BasicPioDevice::BasicPioDevice(const Params *p)
-    : PioDevice(p), pioAddr(p->pio_addr), pioSize(0),
+BasicPioDevice::BasicPioDevice(const Params *p, Addr size)
+    : PioDevice(p), pioAddr(p->pio_addr), pioSize(size),
       pioDelay(p->pio_latency)
 {}
 
index 848b8f0ba7f1136fa9d597f5ea0fb199481a96be..a528b250e30a0a66b9ceaa1b643a7fb4d90fa458 100644 (file)
@@ -148,7 +148,7 @@ class BasicPioDevice : public PioDevice
 
   public:
     typedef BasicPioDeviceParams Params;
-    BasicPioDevice(const Params *p);
+    BasicPioDevice(const Params *p, Addr size);
 
     const Params *
     params() const
index 98d3f9d457c87a2670e76ab9bd566726708a75b4..81c7a4dcdcb35feae87a78749fca66303993c7f4 100644 (file)
 using namespace std;
 
 IsaFake::IsaFake(Params *p)
-    : BasicPioDevice(p)
+    : BasicPioDevice(p, p->ret_bad_addr ? 0 : p->pio_size)
 {
-    if (!p->ret_bad_addr)
-        pioSize = p->pio_size;
-
     retData8 = p->ret_data8;
     retData16 = p->ret_data16;
     retData32 = p->ret_data32;
index 25062e422c0e0a82e18273a440103a8e19955932..fe333643500a06437b88e0d7c8a69d42bb10f2c1 100755 (executable)
@@ -55,11 +55,10 @@ using namespace std;
 using namespace TheISA;
 
 MaltaCChip::MaltaCChip(Params *p)
-    : BasicPioDevice(p), malta(p->malta)
+    : BasicPioDevice(p, 0xfffffff), malta(p->malta)
 {
     warn("MaltaCCHIP::MaltaCChip() not implemented.");
 
-    pioSize = 0xfffffff;
     //Put back pointer in malta
     malta->cchip = this;
 
index 1ae5442bf0feb250d41557c696321b30bf19568f..d769b1112f9b1439ae6ea40ed55fcd2240d0fd15 100755 (executable)
@@ -65,11 +65,9 @@ MaltaIO::RTC::RTC(const string &name, const MaltaIOParams *p)
 }
 
 MaltaIO::MaltaIO(const Params *p)
-    : BasicPioDevice(p), malta(p->malta),
+    : BasicPioDevice(p, 0x100), malta(p->malta),
       pitimer(this, p->name + "pitimer"), rtc(p->name + ".rtc", p)
 {
-    pioSize = 0x100;
-
     // set the back pointer from malta to myself
     malta->io = this;
 
index 076fdfe84c5ec7a2fe49826137d801ea4d4f0034..37aaa1b5a555e4aa094770f2d2c4d8739403b7ed 100755 (executable)
@@ -51,10 +51,8 @@ using namespace std;
 using namespace TheISA;
 
 MaltaPChip::MaltaPChip(const Params *p)
-: BasicPioDevice(p)
+    : BasicPioDevice(p, 0x1000)
 {
-    pioSize = 0x1000;
-
     for (int i = 0; i < 4; i++) {
         wsba[i] = 0;
         wsm[i] = 0;
index d5ebb7d57551958e273923be1b0e671087915e51..b0da01f0ba963edabfde8464ad5504f4ab8c736c 100644 (file)
 #include "sim/system.hh"
 
 PciConfigAll::PciConfigAll(const Params *p)
-    : BasicPioDevice(p)
+    : BasicPioDevice(p, p->size)
 {
     // the pio_addr Python parameter is ignored, and overridden by
     // this caluclated value
     pioAddr = p->platform->calcPciConfigAddr(params()->bus,0,0);
-
-    pioSize = params()->size;
 }
 
 
index c7243cfb87c5c442ab567b9d5f472226e396fcd4..abbab2dee15a13c1ec82fd537abeaedb86ce925c 100644 (file)
@@ -50,13 +50,11 @@ using namespace std;
 using namespace TheISA;
 
 DumbTOD::DumbTOD(const Params *p)
-    : BasicPioDevice(p)
+    : BasicPioDevice(p, 0x08)
 {
     struct tm tm = p->time;
     char *tz;
 
-    pioSize = 0x08;
-
     tz = getenv("TZ");
     setenv("TZ", "", 1);
     tzset();
index 0095d9f1dfa7cca30d9d5a607af2533f521cff6e..0a6d144450f83cb2d4d081586d0e4a031ab7fa00 100644 (file)
 #include "sim/system.hh"
 
 MmDisk::MmDisk(const Params *p)
-    : BasicPioDevice(p), image(p->image), curSector((off_t)-1), dirty(false)
+    : BasicPioDevice(p, p->image->size() * SectorSize),
+      image(p->image), curSector((off_t)-1), dirty(false)
 {
     std::memset(&diskData, 0, SectorSize);
-    pioSize = image->size() * SectorSize;
 }
 
 Tick
index ab0ebde2cdb8926663d021d17d765e68847bedc8..084511444acf83a1ab54cf24a183f46c8d74a675 100644 (file)
@@ -38,8 +38,8 @@
 
 using namespace std;
 
-Uart::Uart(const Params *p)
-    : BasicPioDevice(p), platform(p->platform), term(p->terminal)
+Uart::Uart(const Params *p, Addr pio_size)
+    : BasicPioDevice(p, pio_size), platform(p->platform), term(p->terminal)
 {
     status = 0;
 
index eac70bf1f75dbd12a9e2828115bb6537c969b247..f1a26fda8d7700d388b8e6849fee877288949b53 100644 (file)
@@ -54,7 +54,7 @@ class Uart : public BasicPioDevice
 
   public:
     typedef UartParams Params;
-    Uart(const Params *p);
+    Uart(const Params *p, Addr pio_size);
 
     const Params *
     params() const
index a014398b2e1f128bf9c1ef2667f2d8836e5004c4..dfaf9088d4fc90c027084604947d2374db99e442 100644 (file)
@@ -102,10 +102,9 @@ Uart8250::IntrEvent::scheduleIntr()
 
 
 Uart8250::Uart8250(const Params *p)
-    : Uart(p), IER(0), DLAB(0), LCR(0), MCR(0), lastTxInt(0),
+    : Uart(p, 8), IER(0), DLAB(0), LCR(0), MCR(0), lastTxInt(0),
       txIntrEvent(this, TX_INT), rxIntrEvent(this, RX_INT)
 {
-    pioSize = 8;
 }
 
 Tick
index 83d92e7219c87c05c046abddb7673f5114b9eebd..7957e5304123ccc1ca24374e6ceb5c99d87ca190 100644 (file)
@@ -71,10 +71,9 @@ class Cmos : public BasicPioDevice
   public:
     typedef CmosParams Params;
 
-    Cmos(const Params *p) : BasicPioDevice(p), latency(p->pio_latency),
+    Cmos(const Params *p) : BasicPioDevice(p, 2), latency(p->pio_latency),
         rtc(this, "rtc", p->time, true, ULL(5000000000), p->int_pin)
     {
-        pioSize = 2;
         memset(regs, 0, numRegs * sizeof(uint8_t));
         address = 0;
     }
index c0bd34ad2e40523599c627b1a5cffe646b6cb4d2..a0a7c35ec0218fcbba2725b702c193d3442f5e3e 100644 (file)
@@ -43,6 +43,24 @@ const uint8_t CommandAck = 0xfa;
 const uint8_t CommandNack = 0xfe;
 const uint8_t BatSuccessful = 0xaa;
 
+
+X86ISA::I8042::I8042(Params *p)
+    : BasicPioDevice(p, 0), // pioSize arg is dummy value... not used
+      latency(p->pio_latency),
+      dataPort(p->data_port), commandPort(p->command_port),
+      statusReg(0), commandByte(0), dataReg(0), lastCommand(NoCommand),
+      mouseIntPin(p->mouse_int_pin), keyboardIntPin(p->keyboard_int_pin)
+{
+    statusReg.passedSelfTest = 1;
+    statusReg.commandLast = 1;
+    statusReg.keyboardUnlocked = 1;
+
+    commandByte.convertScanCodes = 1;
+    commandByte.passedSelfTest = 1;
+    commandByte.keyboardFullInt = 1;
+}
+
+
 AddrRangeList
 X86ISA::I8042::getAddrRanges() const
 {
index 800fffc408f9cdfcfd5ad97f0ad840ad214242d8..7919221422965a61aae439e84fe35b11cf3b3eac 100644 (file)
@@ -241,19 +241,7 @@ class I8042 : public BasicPioDevice
         return dynamic_cast<const Params *>(_params);
     }
 
-    I8042(Params *p) : BasicPioDevice(p), latency(p->pio_latency),
-            dataPort(p->data_port), commandPort(p->command_port),
-            statusReg(0), commandByte(0), dataReg(0), lastCommand(NoCommand),
-            mouseIntPin(p->mouse_int_pin), keyboardIntPin(p->keyboard_int_pin)
-    {
-        statusReg.passedSelfTest = 1;
-        statusReg.commandLast = 1;
-        statusReg.keyboardUnlocked = 1;
-
-        commandByte.convertScanCodes = 1;
-        commandByte.passedSelfTest = 1;
-        commandByte.keyboardFullInt = 1;
-    }
+    I8042(Params *p);
 
     AddrRangeList getAddrRanges() const;
 
index f547d7c1b187c06e3baba56e9da42291f8f9ef6e..12697ce62e451fe02fedb8210a6a708ce4215d0d 100644 (file)
@@ -39,7 +39,7 @@
 #include "sim/system.hh"
 
 X86ISA::I82094AA::I82094AA(Params *p)
-    : BasicPioDevice(p), IntDevice(this, p->int_latency),
+    : BasicPioDevice(p, 20), IntDevice(this, p->int_latency),
       extIntPic(p->external_int_pic), lowestPriorityOffset(0)
 {
     // This assumes there's only one I/O APIC in the system and since the apic
@@ -56,8 +56,6 @@ X86ISA::I82094AA::I82094AA(Params *p)
         redirTable[i] = entry;
         pinStates[i] = false;
     }
-
-    pioSize = 20;
 }
 
 void
index 28d9e85a3eaab37cbb314e9fa46cdf2b5f49761f..b1b11091bb878396c73a636c7860a9fb6470754f 100644 (file)
@@ -52,9 +52,8 @@ class I8237 : public BasicPioDevice
         return dynamic_cast<const Params *>(_params);
     }
 
-    I8237(Params *p) : BasicPioDevice(p), latency(p->pio_latency), maskReg(0)
+    I8237(Params *p) : BasicPioDevice(p, 16), latency(p->pio_latency), maskReg(0)
     {
-        pioSize = 16;
     }
     Tick read(PacketPtr pkt);
 
index e6d500f42c0d78d863e779604897dd2e5aa5b5bd..49ea271e94ea9f0578f0c9a5253c536f35f16277 100644 (file)
@@ -77,10 +77,9 @@ class I8254 : public BasicPioDevice
         return dynamic_cast<const Params *>(_params);
     }
 
-    I8254(Params *p) : BasicPioDevice(p), latency(p->pio_latency),
+    I8254(Params *p) : BasicPioDevice(p, 4), latency(p->pio_latency),
             pit(p->name, this), intPin(p->int_pin)
     {
-        pioSize = 4;
     }
     Tick read(PacketPtr pkt);
 
index fa54ad5d7c4d47304f5302fa9a94d3dec33def37..d599ecef3534661320d338ecc2fa60531ec1ba6f 100644 (file)
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 
-X86ISA::I8259::I8259(Params * p) : BasicPioDevice(p), IntDevice(this),
-                    latency(p->pio_latency), output(p->output),
-                    mode(p->mode), slave(p->slave),
-                    IRR(0), ISR(0), IMR(0),
-                    readIRR(true), initControlWord(0), autoEOI(false)
+X86ISA::I8259::I8259(Params * p)
+    : BasicPioDevice(p, 2), IntDevice(this),
+      latency(p->pio_latency), output(p->output),
+      mode(p->mode), slave(p->slave),
+      IRR(0), ISR(0), IMR(0),
+      readIRR(true), initControlWord(0), autoEOI(false)
 {
     for (int i = 0; i < NumLines; i++)
         pinStates[i] = false;
-    pioSize = 2;
 }
 
 Tick
index 2886a76d7ba8de45286f6facea7a0d8d335727f3..22fc03e1c1ef460eb10957eec3c1f0cec943c01d 100644 (file)
@@ -64,10 +64,9 @@ class Speaker : public BasicPioDevice
         return dynamic_cast<const Params *>(_params);
     }
 
-    Speaker(Params *p) : BasicPioDevice(p),
+    Speaker(Params *p) : BasicPioDevice(p, 1),
         latency(p->pio_latency), controlVal(0), timer(p->i8254)
     {
-        pioSize = 1;
     }
 
     Tick read(PacketPtr pkt);