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)
|
X86ISA::Interrupts::Interrupts(Params * p)
|
||||||
: BasicPioDevice(p), IntDevice(this, p->int_latency),
|
: BasicPioDevice(p, PageBytes), IntDevice(this, p->int_latency),
|
||||||
apicTimerEvent(this),
|
apicTimerEvent(this),
|
||||||
pendingSmi(false), smiVector(0),
|
pendingSmi(false), smiVector(0),
|
||||||
pendingNmi(false), nmiVector(0),
|
pendingNmi(false), nmiVector(0),
|
||||||
|
@ -619,7 +619,6 @@ X86ISA::Interrupts::Interrupts(Params * p)
|
||||||
pendingIPIs(0), cpu(NULL),
|
pendingIPIs(0), cpu(NULL),
|
||||||
intSlavePort(name() + ".int_slave", this, this)
|
intSlavePort(name() + ".int_slave", this, this)
|
||||||
{
|
{
|
||||||
pioSize = PageBytes;
|
|
||||||
memset(regs, 0, sizeof(regs));
|
memset(regs, 0, sizeof(regs));
|
||||||
//Set the local apic DFR to the flat model.
|
//Set the local apic DFR to the flat model.
|
||||||
regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1);
|
regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1);
|
||||||
|
|
|
@ -62,12 +62,10 @@ using namespace std;
|
||||||
using namespace AlphaISA;
|
using namespace AlphaISA;
|
||||||
|
|
||||||
AlphaBackdoor::AlphaBackdoor(const Params *p)
|
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)
|
system(p->system), cpu(p->cpu)
|
||||||
{
|
{
|
||||||
|
|
||||||
pioSize = sizeof(struct AlphaAccess);
|
|
||||||
|
|
||||||
alphaAccess = new Access();
|
alphaAccess = new Access();
|
||||||
alphaAccess->last_offset = pioSize - 1;
|
alphaAccess->last_offset = pioSize - 1;
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,8 @@
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
TsunamiCChip::TsunamiCChip(const Params *p)
|
TsunamiCChip::TsunamiCChip(const Params *p)
|
||||||
: BasicPioDevice(p), tsunami(p->tsunami)
|
: BasicPioDevice(p, 0x10000000), tsunami(p->tsunami)
|
||||||
{
|
{
|
||||||
pioSize = 0x10000000;
|
|
||||||
|
|
||||||
drir = 0;
|
drir = 0;
|
||||||
ipint = 0;
|
ipint = 0;
|
||||||
itint = 0;
|
itint = 0;
|
||||||
|
|
|
@ -69,11 +69,9 @@ TsunamiIO::RTC::RTC(const string &n, const TsunamiIOParams *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
TsunamiIO::TsunamiIO(const Params *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)
|
pitimer(this, p->name + "pitimer"), rtc(p->name + ".rtc", p)
|
||||||
{
|
{
|
||||||
pioSize = 0x100;
|
|
||||||
|
|
||||||
// set the back pointer from tsunami to myself
|
// set the back pointer from tsunami to myself
|
||||||
tsunami->io = this;
|
tsunami->io = this;
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,8 @@ using namespace std;
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
TsunamiPChip::TsunamiPChip(const Params *p)
|
TsunamiPChip::TsunamiPChip(const Params *p)
|
||||||
: BasicPioDevice(p)
|
: BasicPioDevice(p, 0x1000)
|
||||||
{
|
{
|
||||||
pioSize = 0x1000;
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
wsba[i] = 0;
|
wsba[i] = 0;
|
||||||
wsm[i] = 0;
|
wsm[i] = 0;
|
||||||
|
|
|
@ -45,9 +45,8 @@
|
||||||
#include "sim/system.hh"
|
#include "sim/system.hh"
|
||||||
|
|
||||||
A9SCU::A9SCU(Params *p)
|
A9SCU::A9SCU(Params *p)
|
||||||
: BasicPioDevice(p)
|
: BasicPioDevice(p, 0x60)
|
||||||
{
|
{
|
||||||
pioSize = 0x60;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -49,13 +49,14 @@
|
||||||
|
|
||||||
const uint64_t AmbaVendor = ULL(0xb105f00d00000000);
|
const uint64_t AmbaVendor = ULL(0xb105f00d00000000);
|
||||||
|
|
||||||
AmbaPioDevice::AmbaPioDevice(const Params *p)
|
AmbaPioDevice::AmbaPioDevice(const Params *p, Addr pio_size)
|
||||||
: BasicPioDevice(p), ambaId(AmbaVendor | p->amba_id)
|
: BasicPioDevice(p, pio_size), ambaId(AmbaVendor | p->amba_id)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
AmbaIntDevice::AmbaIntDevice(const Params *p)
|
AmbaIntDevice::AmbaIntDevice(const Params *p, Addr pio_size)
|
||||||
: AmbaPioDevice(p), intNum(p->int_num), gic(p->gic), intDelay(p->int_delay)
|
: 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:
|
public:
|
||||||
typedef AmbaPioDeviceParams Params;
|
typedef AmbaPioDeviceParams Params;
|
||||||
AmbaPioDevice(const Params *p);
|
AmbaPioDevice(const Params *p, Addr pio_size);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AmbaIntDevice : public AmbaPioDevice
|
class AmbaIntDevice : public AmbaPioDevice
|
||||||
|
@ -94,7 +94,7 @@ class AmbaIntDevice : public AmbaPioDevice
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef AmbaIntDeviceParams Params;
|
typedef AmbaIntDeviceParams Params;
|
||||||
AmbaIntDevice(const Params *p);
|
AmbaIntDevice(const Params *p, Addr pio_size);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AmbaDmaDevice : public DmaDevice, public AmbaDevice
|
class AmbaDmaDevice : public DmaDevice, public AmbaDevice
|
||||||
|
|
|
@ -47,9 +47,8 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
AmbaFake::AmbaFake(const Params *p)
|
AmbaFake::AmbaFake(const Params *p)
|
||||||
: AmbaPioDevice(p)
|
: AmbaPioDevice(p, 0xfff)
|
||||||
{
|
{
|
||||||
pioSize = 0xfff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -51,12 +51,10 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
Pl050::Pl050(const Params *p)
|
Pl050::Pl050(const Params *p)
|
||||||
: AmbaIntDevice(p), control(0), status(0x43), clkdiv(0), interrupts(0),
|
: AmbaIntDevice(p, 0xfff), control(0), status(0x43), clkdiv(0),
|
||||||
rawInterrupts(0), ackNext(false), shiftDown(false), vnc(p->vnc),
|
interrupts(0), rawInterrupts(0), ackNext(false), shiftDown(false),
|
||||||
driverInitialized(false), intEvent(this)
|
vnc(p->vnc), driverInitialized(false), intEvent(this)
|
||||||
{
|
{
|
||||||
pioSize = 0xfff;
|
|
||||||
|
|
||||||
if (vnc) {
|
if (vnc) {
|
||||||
if (!p->is_mouse)
|
if (!p->is_mouse)
|
||||||
vnc->setKeyboard(this);
|
vnc->setKeyboard(this);
|
||||||
|
|
|
@ -52,11 +52,10 @@
|
||||||
#include "sim/sim_exit.hh"
|
#include "sim/sim_exit.hh"
|
||||||
|
|
||||||
Pl011::Pl011(const Params *p)
|
Pl011::Pl011(const Params *p)
|
||||||
: Uart(p), control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12), imsc(0),
|
: Uart(p, 0xfff), control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12),
|
||||||
rawInt(0), maskInt(0), intNum(p->int_num), gic(p->gic),
|
imsc(0), rawInt(0), maskInt(0), intNum(p->int_num), gic(p->gic),
|
||||||
endOnEOT(p->end_on_eot), intDelay(p->int_delay), intEvent(this)
|
endOnEOT(p->end_on_eot), intDelay(p->int_delay), intEvent(this)
|
||||||
{
|
{
|
||||||
pioSize = 0xfff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -49,11 +49,10 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
PL031::PL031(Params *p)
|
PL031::PL031(Params *p)
|
||||||
: AmbaIntDevice(p), timeVal(mkutctime(&p->time)), lastWrittenTick(0),
|
: AmbaIntDevice(p, 0xfff), timeVal(mkutctime(&p->time)),
|
||||||
loadVal(0), matchVal(0), rawInt(false), maskInt(false),
|
lastWrittenTick(0), loadVal(0), matchVal(0),
|
||||||
pendingInt(false), matchEvent(this)
|
rawInt(false), maskInt(false), pendingInt(false), matchEvent(this)
|
||||||
{
|
{
|
||||||
pioSize = 0xfff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,8 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
RealViewCtrl::RealViewCtrl(Params *p)
|
RealViewCtrl::RealViewCtrl(Params *p)
|
||||||
: BasicPioDevice(p), flags(0)
|
: BasicPioDevice(p, 0xD4), flags(0)
|
||||||
{
|
{
|
||||||
pioSize = 0xD4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
CpuLocalTimer::CpuLocalTimer(Params *p)
|
CpuLocalTimer::CpuLocalTimer(Params *p)
|
||||||
: BasicPioDevice(p), gic(p->gic)
|
: BasicPioDevice(p, 0x38), gic(p->gic)
|
||||||
{
|
{
|
||||||
// Initialize the timer registers for each per cpu timer
|
// Initialize the timer registers for each per cpu timer
|
||||||
for (int i = 0; i < CPU_MAX; i++) {
|
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].intNumWatchdog = p->int_num_watchdog;
|
||||||
localTimer[i].cpuNum = i;
|
localTimer[i].cpuNum = i;
|
||||||
}
|
}
|
||||||
pioSize = 0x38;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CpuLocalTimer::Timer::Timer()
|
CpuLocalTimer::Timer::Timer()
|
||||||
|
|
|
@ -47,10 +47,10 @@
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
Sp804::Sp804(Params *p)
|
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)
|
timer1(name() + ".timer1", this, p->int_num1, p->clock1)
|
||||||
{
|
{
|
||||||
pioSize = 0xfff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Sp804::Timer::Timer(std::string __name, Sp804 *_parent, int int_num, Tick _clock)
|
Sp804::Timer::Timer(std::string __name, Sp804 *_parent, int int_num, Tick _clock)
|
||||||
|
|
|
@ -46,9 +46,8 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
BadDevice::BadDevice(Params *p)
|
BadDevice::BadDevice(Params *p)
|
||||||
: BasicPioDevice(p), devname(p->devicename)
|
: BasicPioDevice(p, 0x10), devname(p->devicename)
|
||||||
{
|
{
|
||||||
pioSize = 0x10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -103,8 +103,8 @@ PioDevice::drain(DrainManager *dm)
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicPioDevice::BasicPioDevice(const Params *p)
|
BasicPioDevice::BasicPioDevice(const Params *p, Addr size)
|
||||||
: PioDevice(p), pioAddr(p->pio_addr), pioSize(0),
|
: PioDevice(p), pioAddr(p->pio_addr), pioSize(size),
|
||||||
pioDelay(p->pio_latency)
|
pioDelay(p->pio_latency)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ class BasicPioDevice : public PioDevice
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef BasicPioDeviceParams Params;
|
typedef BasicPioDeviceParams Params;
|
||||||
BasicPioDevice(const Params *p);
|
BasicPioDevice(const Params *p, Addr size);
|
||||||
|
|
||||||
const Params *
|
const Params *
|
||||||
params() const
|
params() const
|
||||||
|
|
|
@ -42,11 +42,8 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
IsaFake::IsaFake(Params *p)
|
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;
|
retData8 = p->ret_data8;
|
||||||
retData16 = p->ret_data16;
|
retData16 = p->ret_data16;
|
||||||
retData32 = p->ret_data32;
|
retData32 = p->ret_data32;
|
||||||
|
|
|
@ -55,11 +55,10 @@ using namespace std;
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
MaltaCChip::MaltaCChip(Params *p)
|
MaltaCChip::MaltaCChip(Params *p)
|
||||||
: BasicPioDevice(p), malta(p->malta)
|
: BasicPioDevice(p, 0xfffffff), malta(p->malta)
|
||||||
{
|
{
|
||||||
warn("MaltaCCHIP::MaltaCChip() not implemented.");
|
warn("MaltaCCHIP::MaltaCChip() not implemented.");
|
||||||
|
|
||||||
pioSize = 0xfffffff;
|
|
||||||
//Put back pointer in malta
|
//Put back pointer in malta
|
||||||
malta->cchip = this;
|
malta->cchip = this;
|
||||||
|
|
||||||
|
|
|
@ -65,11 +65,9 @@ MaltaIO::RTC::RTC(const string &name, const MaltaIOParams *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
MaltaIO::MaltaIO(const Params *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)
|
pitimer(this, p->name + "pitimer"), rtc(p->name + ".rtc", p)
|
||||||
{
|
{
|
||||||
pioSize = 0x100;
|
|
||||||
|
|
||||||
// set the back pointer from malta to myself
|
// set the back pointer from malta to myself
|
||||||
malta->io = this;
|
malta->io = this;
|
||||||
|
|
||||||
|
|
|
@ -51,10 +51,8 @@ using namespace std;
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
MaltaPChip::MaltaPChip(const Params *p)
|
MaltaPChip::MaltaPChip(const Params *p)
|
||||||
: BasicPioDevice(p)
|
: BasicPioDevice(p, 0x1000)
|
||||||
{
|
{
|
||||||
pioSize = 0x1000;
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
wsba[i] = 0;
|
wsba[i] = 0;
|
||||||
wsm[i] = 0;
|
wsm[i] = 0;
|
||||||
|
|
|
@ -44,13 +44,11 @@
|
||||||
#include "sim/system.hh"
|
#include "sim/system.hh"
|
||||||
|
|
||||||
PciConfigAll::PciConfigAll(const Params *p)
|
PciConfigAll::PciConfigAll(const Params *p)
|
||||||
: BasicPioDevice(p)
|
: BasicPioDevice(p, p->size)
|
||||||
{
|
{
|
||||||
// the pio_addr Python parameter is ignored, and overridden by
|
// the pio_addr Python parameter is ignored, and overridden by
|
||||||
// this caluclated value
|
// this caluclated value
|
||||||
pioAddr = p->platform->calcPciConfigAddr(params()->bus,0,0);
|
pioAddr = p->platform->calcPciConfigAddr(params()->bus,0,0);
|
||||||
|
|
||||||
pioSize = params()->size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,13 +50,11 @@ using namespace std;
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
DumbTOD::DumbTOD(const Params *p)
|
DumbTOD::DumbTOD(const Params *p)
|
||||||
: BasicPioDevice(p)
|
: BasicPioDevice(p, 0x08)
|
||||||
{
|
{
|
||||||
struct tm tm = p->time;
|
struct tm tm = p->time;
|
||||||
char *tz;
|
char *tz;
|
||||||
|
|
||||||
pioSize = 0x08;
|
|
||||||
|
|
||||||
tz = getenv("TZ");
|
tz = getenv("TZ");
|
||||||
setenv("TZ", "", 1);
|
setenv("TZ", "", 1);
|
||||||
tzset();
|
tzset();
|
||||||
|
|
|
@ -45,10 +45,10 @@
|
||||||
#include "sim/system.hh"
|
#include "sim/system.hh"
|
||||||
|
|
||||||
MmDisk::MmDisk(const Params *p)
|
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);
|
std::memset(&diskData, 0, SectorSize);
|
||||||
pioSize = image->size() * SectorSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -38,8 +38,8 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
Uart::Uart(const Params *p)
|
Uart::Uart(const Params *p, Addr pio_size)
|
||||||
: BasicPioDevice(p), platform(p->platform), term(p->terminal)
|
: BasicPioDevice(p, pio_size), platform(p->platform), term(p->terminal)
|
||||||
{
|
{
|
||||||
status = 0;
|
status = 0;
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Uart : public BasicPioDevice
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef UartParams Params;
|
typedef UartParams Params;
|
||||||
Uart(const Params *p);
|
Uart(const Params *p, Addr pio_size);
|
||||||
|
|
||||||
const Params *
|
const Params *
|
||||||
params() const
|
params() const
|
||||||
|
|
|
@ -102,10 +102,9 @@ Uart8250::IntrEvent::scheduleIntr()
|
||||||
|
|
||||||
|
|
||||||
Uart8250::Uart8250(const Params *p)
|
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)
|
txIntrEvent(this, TX_INT), rxIntrEvent(this, RX_INT)
|
||||||
{
|
{
|
||||||
pioSize = 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -71,10 +71,9 @@ class Cmos : public BasicPioDevice
|
||||||
public:
|
public:
|
||||||
typedef CmosParams Params;
|
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)
|
rtc(this, "rtc", p->time, true, ULL(5000000000), p->int_pin)
|
||||||
{
|
{
|
||||||
pioSize = 2;
|
|
||||||
memset(regs, 0, numRegs * sizeof(uint8_t));
|
memset(regs, 0, numRegs * sizeof(uint8_t));
|
||||||
address = 0;
|
address = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,24 @@ const uint8_t CommandAck = 0xfa;
|
||||||
const uint8_t CommandNack = 0xfe;
|
const uint8_t CommandNack = 0xfe;
|
||||||
const uint8_t BatSuccessful = 0xaa;
|
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
|
AddrRangeList
|
||||||
X86ISA::I8042::getAddrRanges() const
|
X86ISA::I8042::getAddrRanges() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -241,19 +241,7 @@ class I8042 : public BasicPioDevice
|
||||||
return dynamic_cast<const Params *>(_params);
|
return dynamic_cast<const Params *>(_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
I8042(Params *p) : BasicPioDevice(p), latency(p->pio_latency),
|
I8042(Params *p);
|
||||||
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 getAddrRanges() const;
|
AddrRangeList getAddrRanges() const;
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include "sim/system.hh"
|
#include "sim/system.hh"
|
||||||
|
|
||||||
X86ISA::I82094AA::I82094AA(Params *p)
|
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)
|
extIntPic(p->external_int_pic), lowestPriorityOffset(0)
|
||||||
{
|
{
|
||||||
// This assumes there's only one I/O APIC in the system and since the apic
|
// 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;
|
redirTable[i] = entry;
|
||||||
pinStates[i] = false;
|
pinStates[i] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pioSize = 20;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -52,9 +52,8 @@ class I8237 : public BasicPioDevice
|
||||||
return dynamic_cast<const Params *>(_params);
|
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);
|
Tick read(PacketPtr pkt);
|
||||||
|
|
||||||
|
|
|
@ -77,10 +77,9 @@ class I8254 : public BasicPioDevice
|
||||||
return dynamic_cast<const Params *>(_params);
|
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)
|
pit(p->name, this), intPin(p->int_pin)
|
||||||
{
|
{
|
||||||
pioSize = 4;
|
|
||||||
}
|
}
|
||||||
Tick read(PacketPtr pkt);
|
Tick read(PacketPtr pkt);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
#include "mem/packet.hh"
|
#include "mem/packet.hh"
|
||||||
#include "mem/packet_access.hh"
|
#include "mem/packet_access.hh"
|
||||||
|
|
||||||
X86ISA::I8259::I8259(Params * p) : BasicPioDevice(p), IntDevice(this),
|
X86ISA::I8259::I8259(Params * p)
|
||||||
|
: BasicPioDevice(p, 2), IntDevice(this),
|
||||||
latency(p->pio_latency), output(p->output),
|
latency(p->pio_latency), output(p->output),
|
||||||
mode(p->mode), slave(p->slave),
|
mode(p->mode), slave(p->slave),
|
||||||
IRR(0), ISR(0), IMR(0),
|
IRR(0), ISR(0), IMR(0),
|
||||||
|
@ -43,7 +44,6 @@ X86ISA::I8259::I8259(Params * p) : BasicPioDevice(p), IntDevice(this),
|
||||||
{
|
{
|
||||||
for (int i = 0; i < NumLines; i++)
|
for (int i = 0; i < NumLines; i++)
|
||||||
pinStates[i] = false;
|
pinStates[i] = false;
|
||||||
pioSize = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick
|
Tick
|
||||||
|
|
|
@ -64,10 +64,9 @@ class Speaker : public BasicPioDevice
|
||||||
return dynamic_cast<const Params *>(_params);
|
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)
|
latency(p->pio_latency), controlVal(0), timer(p->i8254)
|
||||||
{
|
{
|
||||||
pioSize = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tick read(PacketPtr pkt);
|
Tick read(PacketPtr pkt);
|
||||||
|
|
Loading…
Reference in a new issue