dev: make BasicPioDevice take size in constructor
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>
This commit is contained in:
parent
502ad1e675
commit
1f43e244bd
36 changed files with 73 additions and 103 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -57,10 +57,8 @@
|
|||
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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -45,9 +45,8 @@
|
|||
#include "sim/system.hh"
|
||||
|
||||
A9SCU::A9SCU(Params *p)
|
||||
: BasicPioDevice(p)
|
||||
: BasicPioDevice(p, 0x60)
|
||||
{
|
||||
pioSize = 0x60;
|
||||
}
|
||||
|
||||
Tick
|
||||
|
|
|
@ -49,13 +49,14 @@
|
|||
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -47,9 +47,8 @@
|
|||
#include "mem/packet_access.hh"
|
||||
|
||||
AmbaFake::AmbaFake(const Params *p)
|
||||
: AmbaPioDevice(p)
|
||||
: AmbaPioDevice(p, 0xfff)
|
||||
{
|
||||
pioSize = 0xfff;
|
||||
}
|
||||
|
||||
Tick
|
||||
|
|
|
@ -51,12 +51,10 @@
|
|||
#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);
|
||||
|
|
|
@ -52,11 +52,10 @@
|
|||
#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
|
||||
|
|
|
@ -49,11 +49,10 @@
|
|||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -47,10 +47,10 @@
|
|||
#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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -42,11 +42,8 @@
|
|||
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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -44,13 +44,11 @@
|
|||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -45,10 +45,10 @@
|
|||
#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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -35,15 +35,15 @@
|
|||
#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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue