I/O changes and SkipFuncEvents to increase FreeBSD compatibility.

SConscript:
    Added kern/freebsd/freebsd_events.cc.
arch/alpha/isa_traits.hh:
    Added Argument to support replacement of calibrate_clocks function in FreeBSD.
dev/ns_gige.hh:
    Fixed NIC model number typo.
dev/tsunami_io.cc:
    Added support for RTC writes and PIC 2 mask reads.  Made RTC static member.
dev/tsunami_io.hh:
    Made RTC static member.
kern/freebsd/freebsd_system.cc:
    Added events to skip functions in FreeBSD.
kern/freebsd/freebsd_system.hh:
    Added events to skip certain functions.

--HG--
extra : convert_revision : 8aaca51d3f9b1bb601722a5bae240aae77b445db
This commit is contained in:
Benjamin Nash
2005-06-17 18:08:05 -04:00
parent 129417d7cb
commit f4e5776df4
7 changed files with 109 additions and 6 deletions

View File

@@ -99,7 +99,7 @@ class Bus;
class PciConfigAll;
/**
* NS DP82830 Ethernet device model
* NS DP83820 Ethernet device model
*/
class NSGigE : public PciDev
{

View File

@@ -52,6 +52,8 @@ using namespace std;
#define UNIX_YEAR_OFFSET 52
struct tm TsunamiIO::tm = { 0 };
// Timer Event for Periodic interrupt of RTC
TsunamiIO::RTCEvent::RTCEvent(Tsunami* t, Tick i)
: Event(&mainEventQueue), tsunami(t), interval(i)
@@ -67,6 +69,9 @@ TsunamiIO::RTCEvent::process()
schedule(curTick + interval);
//Actually interrupt the processor here
tsunami->cchip->postRTC();
// For FreeBSD
tm.tm_sec++;
}
const char *
@@ -217,6 +222,9 @@ TsunamiIO::read(MemReqPtr &req, uint8_t *data)
case TSDEV_PIC1_MASK:
*(uint8_t*)data = ~mask1;
return No_Fault;
case TSDEV_PIC2_MASK:
*(uint8_t*)data = ~mask2;
return No_Fault;
case TSDEV_PIC1_ISR:
// !!! If this is modified 64bit case needs to be too
// Pal code has to do a 64 bit physical read because there is
@@ -261,6 +269,7 @@ TsunamiIO::read(MemReqPtr &req, uint8_t *data)
return No_Fault;
case RTC_DOM:
*(uint8_t *)data = tm.tm_mday;
return No_Fault;
case RTC_MON:
*(uint8_t *)data = tm.tm_mon + 1;
return No_Fault;
@@ -411,7 +420,38 @@ TsunamiIO::write(MemReqPtr &req, const uint8_t *data)
case TSDEV_KBD:
return No_Fault;
case TSDEV_RTC_DATA:
panic("RTC Write not implmented (rtc.o won't work)\n");
switch(RTCAddress) {
case RTC_CNTRL_REGA:
return No_Fault;
case RTC_CNTRL_REGB:
return No_Fault;
case RTC_CNTRL_REGC:
return No_Fault;
case RTC_CNTRL_REGD:
return No_Fault;
case RTC_SEC:
tm.tm_sec = *(uint8_t *)data;
return No_Fault;
case RTC_MIN:
tm.tm_min = *(uint8_t *)data;
return No_Fault;
case RTC_HR:
tm.tm_hour = *(uint8_t *)data;
return No_Fault;
case RTC_DOW:
tm.tm_wday = *(uint8_t *)data;
return No_Fault;
case RTC_DOM:
tm.tm_mday = *(uint8_t *)data;
return No_Fault;
case RTC_MON:
tm.tm_mon = *(uint8_t *)data - 1;
return No_Fault;
case RTC_YEAR:
tm.tm_year = *(uint8_t *)data + UNIX_YEAR_OFFSET;
return No_Fault;
//panic("RTC Write not implmented (rtc.o won't work)\n");
}
default:
panic("I/O Write - va%#x size %d\n", req->vaddr, req->size);
}

View File

@@ -51,7 +51,7 @@ class TsunamiIO : public PioDevice
/** The size of mappad from the above address */
static const Addr size = 0xff;
struct tm tm;
static struct tm tm;
/**
* In Tsunami RTC only has two i/o ports one for data and one for