*
*/
-#include"vl.h"
+#include "hw.h"
+#include "primecell.h"
+#include "qemu-timer.h"
+#include "sysemu.h"
//#define DEBUG_PL031
typedef struct {
QEMUTimer *timer;
qemu_irq irq;
- uint32_t base;
- uint64_t start_time;
uint32_t tick_offset;
uint32_t mr;
{
pl031_state *s = (pl031_state *)opaque;
- offset -= s->base;
-
if (offset >= 0xfe0 && offset < 0x1000)
return pl031_id[(offset - 0xfe0) >> 2];
{
pl031_state *s = (pl031_state *)opaque;
- offset -= s->base;
switch (offset) {
case RTC_LR:
{
int iomemtype;
pl031_state *s;
- time_t ti;
- struct tm *tm;
+ struct tm tm;
s = qemu_mallocz(sizeof(pl031_state));
- if (!s)
- cpu_abort(cpu_single_env, "pl031_init: Out of memory\n");
iomemtype = cpu_register_io_memory(0, pl031_readfn, pl031_writefn, s);
if (iomemtype == -1)
cpu_register_physical_memory(base, 0x00001000, iomemtype);
- s->base = base;
s->irq = irq;
/* ??? We assume vm_clock is zero at this point. */
- time(&ti);
- if (rtc_utc)
- tm = gmtime(&ti);
- else
- tm = localtime(&ti);
- s->tick_offset = mktime(tm);
+ qemu_get_timedate(&tm, 0);
+ s->tick_offset = mktimegm(&tm);
s->timer = qemu_new_timer(vm_clock, pl031_interrupt, s);
}