static void s390_cpu_initfn(Object *obj) { CPUState *cs = CPU(obj); S390CPU *cpu = S390_CPU(obj); CPUS390XState *env = &cpu->env; static bool inited; static int cpu_num = 0; #if !defined(CONFIG_USER_ONLY) struct tm tm; #endif cs->env_ptr = env; cpu_exec_init(env); #if !defined(CONFIG_USER_ONLY) qemu_register_reset(s390_cpu_machine_reset_cb, cpu); qemu_get_timedate(&tm, 0); env->tod_offset = TOD_UNIX_EPOCH + (time2tod(mktimegm(&tm)) * 1000000000ULL); env->tod_basetime = 0; env->tod_timer = qemu_new_timer_ns(vm_clock, s390x_tod_timer, cpu); env->cpu_timer = qemu_new_timer_ns(vm_clock, s390x_cpu_timer, cpu); /* set CPUState::halted state to 1 to avoid decrementing the running * cpu counter in s390_cpu_reset to a negative number at * initial ipl */ cs->halted = 1; #endif env->cpu_num = cpu_num++; env->ext_index = -1; if (tcg_enabled() && !inited) { inited = true; s390x_translate_init(); } }
static void s390_cpu_initfn(Object *obj) { CPUState *cs = CPU(obj); S390CPU *cpu = S390_CPU(obj); CPUS390XState *env = &cpu->env; static bool inited; static int cpu_num = 0; #if !defined(CONFIG_USER_ONLY) struct tm tm; #endif cs->env_ptr = env; cpu_exec_init(env); #if !defined(CONFIG_USER_ONLY) qemu_register_reset(s390_cpu_machine_reset_cb, cpu); qemu_get_timedate(&tm, 0); env->tod_offset = TOD_UNIX_EPOCH + (time2tod(mktimegm(&tm)) * 1000000000ULL); env->tod_basetime = 0; env->tod_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, s390x_tod_timer, cpu); env->cpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, s390x_cpu_timer, cpu); s390_cpu_set_state(CPU_STATE_STOPPED, cpu); #endif env->cpu_num = cpu_num++; if (tcg_enabled() && !inited) { inited = true; s390x_translate_init(); } }
static void s390_cpu_initfn(Object *obj) { CPUState *cs = CPU(obj); S390CPU *cpu = S390_CPU(obj); CPUS390XState *env = &cpu->env; static bool inited; #if !defined(CONFIG_USER_ONLY) struct tm tm; #endif cs->env_ptr = env; cs->halted = 1; cs->exception_index = EXCP_HLT; object_property_add(OBJECT(cpu), "id", "int64_t", s390x_cpu_get_id, s390x_cpu_set_id, NULL, NULL, NULL); s390_cpu_model_register_props(obj); #if !defined(CONFIG_USER_ONLY) qemu_get_timedate(&tm, 0); env->tod_offset = TOD_UNIX_EPOCH + (time2tod(mktimegm(&tm)) * 1000000000ULL); env->tod_basetime = 0; env->tod_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, s390x_tod_timer, cpu); env->cpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, s390x_cpu_timer, cpu); s390_cpu_set_state(CPU_STATE_STOPPED, cpu); #endif if (tcg_enabled() && !inited) { inited = true; s390x_translate_init(); } }
static void rtc_set_time(RTCState *s) { struct tm tm; rtc_get_time(s, &tm); s->base_rtc = mktimegm(&tm); s->last_update = qemu_get_clock_ns(rtc_clock); rtc_change_mon_event(&tm); }
/* * Parse a date in progress-file format. */ time_t parse_date(char *buf) { struct tm tm; int year, month; sscanf(buf, "%d/%d/%d %d:%d:%d", &year, &month, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); tm.tm_year = year - 1900; tm.tm_mon = month - 1; return mktimegm(&tm); }
static void rtc_set_time(RTCState *s) { struct tm tm; rtc_get_time(s, &tm); s->base_rtc = mktimegm(&tm); s->last_update = qemu_clock_get_ns(rtc_clock); qapi_event_send_rtc_change(qemu_timedate_diff(&tm), &error_abort); }
static void rtc_set_date_from_host(ISADevice *dev) { RTCState *s = MC146818_RTC(dev); struct tm tm; qemu_get_timedate(&tm, 0); s->base_rtc = mktimegm(&tm); s->last_update = qemu_get_clock_ns(rtc_clock); s->offset = 0; /* set the CMOS date */ rtc_set_cmos(s, &tm); }
static int pl031_init(SysBusDevice *dev) { pl031_state *s = FROM_SYSBUS(pl031_state, dev); struct tm tm; memory_region_init_io(&s->iomem, &pl031_ops, s, "pl031", 0x1000); sysbus_init_mmio(dev, &s->iomem); sysbus_init_irq(dev, &s->irq); qemu_get_timedate(&tm, 0); s->tick_offset = mktimegm(&tm) - qemu_get_clock_ns(rtc_clock) / get_ticks_per_sec(); s->timer = qemu_new_timer_ns(rtc_clock, pl031_interrupt, s); return 0; }
static void pl031_init(Object *obj) { PL031State *s = PL031(obj); SysBusDevice *dev = SYS_BUS_DEVICE(obj); struct tm tm; memory_region_init_io(&s->iomem, obj, &pl031_ops, s, "pl031", 0x1000); sysbus_init_mmio(dev, &s->iomem); sysbus_init_irq(dev, &s->irq); qemu_get_timedate(&tm, 0); s->tick_offset = mktimegm(&tm) - qemu_clock_get_ns(rtc_clock) / NANOSECONDS_PER_SECOND; s->timer = timer_new_ns(rtc_clock, pl031_interrupt, s); }
static int pl031_init(SysBusDevice *dev) { int iomemtype; pl031_state *s = FROM_SYSBUS(pl031_state, dev); struct tm tm; iomemtype = cpu_register_io_memory(pl031_readfn, pl031_writefn, s); if (iomemtype == -1) { hw_error("pl031_init: Can't register I/O memory\n"); } sysbus_init_mmio(dev, 0x1000, iomemtype); sysbus_init_irq(dev, &s->irq); /* ??? We assume vm_clock is zero at this point. */ qemu_get_timedate(&tm, 0); s->tick_offset = mktimegm(&tm); s->timer = qemu_new_timer(vm_clock, pl031_interrupt, s); return 0; }
static void s390_cpu_initfn(Object *obj) { S390CPU *cpu = S390_CPU(obj); CPUS390XState *env = &cpu->env; static int cpu_num = 0; #if !defined(CONFIG_USER_ONLY) struct tm tm; #endif cpu_exec_init(env); #if !defined(CONFIG_USER_ONLY) qemu_get_timedate(&tm, 0); env->tod_offset = TOD_UNIX_EPOCH + (time2tod(mktimegm(&tm)) * 1000000000ULL); env->tod_basetime = 0; env->tod_timer = qemu_new_timer_ns(vm_clock, s390x_tod_timer, cpu); env->cpu_timer = qemu_new_timer_ns(vm_clock, s390x_cpu_timer, cpu); #endif env->cpu_num = cpu_num++; env->ext_index = -1; cpu_reset(CPU(cpu)); }