Revision 6ee093c9

b/audio/audio.c
1822 1822
        }
1823 1823
        conf.period.ticks = 1;
1824 1824
    } else {
1825
        conf.period.ticks = ticks_per_sec / conf.period.hertz;
1825
        conf.period.ticks = get_ticks_per_sec() / conf.period.hertz;
1826 1826
    }
1827 1827

  
1828 1828
    e = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
b/audio/noaudio.c
53 53

  
54 54
    now = qemu_get_clock (vm_clock);
55 55
    ticks = now - no->old_ticks;
56
    bytes = (ticks * hw->info.bytes_per_second) / ticks_per_sec;
56
    bytes = (ticks * hw->info.bytes_per_second) / get_ticks_per_sec();
57 57
    bytes = audio_MIN (bytes, INT_MAX);
58 58
    samples = bytes >> hw->info.shift;
59 59

  
......
109 109
    if (dead) {
110 110
        int64_t now = qemu_get_clock (vm_clock);
111 111
        int64_t ticks = now - no->old_ticks;
112
        int64_t bytes = (ticks * hw->info.bytes_per_second) / ticks_per_sec;
112
        int64_t bytes = (ticks * hw->info.bytes_per_second) / get_ticks_per_sec();
113 113

  
114 114
        no->old_ticks = now;
115 115
        bytes = audio_MIN (bytes, INT_MAX);
b/audio/wavaudio.c
54 54
    struct st_sample *src;
55 55
    int64_t now = qemu_get_clock (vm_clock);
56 56
    int64_t ticks = now - wav->old_ticks;
57
    int64_t bytes = (ticks * hw->info.bytes_per_second) / ticks_per_sec;
57
    int64_t bytes = (ticks * hw->info.bytes_per_second) / get_ticks_per_sec();
58 58

  
59 59
    if (bytes > INT_MAX) {
60 60
        samples = INT_MAX >> hw->info.shift;
b/hw/acpi.c
79 79
static uint32_t get_pmtmr(PIIX4PMState *s)
80 80
{
81 81
    uint32_t d;
82
    d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ, ticks_per_sec);
82
    d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ, get_ticks_per_sec());
83 83
    return d & 0xffffff;
84 84
}
85 85

  
......
88 88
    int64_t d;
89 89
    int pmsts;
90 90
    pmsts = s->pmsts;
91
    d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ, ticks_per_sec);
91
    d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ, get_ticks_per_sec());
92 92
    if (d >= s->tmr_overflow_time)
93 93
        s->pmsts |= TMROF_EN;
94 94
    return s->pmsts;
......
105 105
    qemu_set_irq(s->irq, sci_level);
106 106
    /* schedule a timer interruption if needed */
107 107
    if ((s->pmen & TMROF_EN) && !(pmsts & TMROF_EN)) {
108
        expire_time = muldiv64(s->tmr_overflow_time, ticks_per_sec, PM_FREQ);
108
        expire_time = muldiv64(s->tmr_overflow_time, get_ticks_per_sec(), PM_FREQ);
109 109
        qemu_mod_timer(s->tmr_timer, expire_time);
110 110
    } else {
111 111
        qemu_del_timer(s->tmr_timer);
......
130 130
            pmsts = get_pmsts(s);
131 131
            if (pmsts & val & TMROF_EN) {
132 132
                /* if TMRSTS is reset, then compute the new overflow time */
133
                d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ, ticks_per_sec);
133
                d = muldiv64(qemu_get_clock(vm_clock), PM_FREQ,
134
                             get_ticks_per_sec());
134 135
                s->tmr_overflow_time = (d + 0x800000LL) & ~0x7fffffLL;
135 136
            }
136 137
            s->pmsts &= ~val;
b/hw/adlib.c
165 165

  
166 166
    s->ticking[n] = 1;
167 167
#ifdef DEBUG
168
    interval = ticks_per_sec * interval_Sec;
168
    interval = get_ticks_per_sec() * interval_Sec;
169 169
    exp = qemu_get_clock (vm_clock) + interval;
170 170
    s->exp[n] = exp;
171 171
#endif
b/hw/baum.c
335 335
        int i;
336 336

  
337 337
        /* Allow 100ms to complete the DisplayData packet */
338
        qemu_mod_timer(baum->cellCount_timer, qemu_get_clock(vm_clock) + ticks_per_sec / 10);
338
        qemu_mod_timer(baum->cellCount_timer, qemu_get_clock(vm_clock) +
339
                       get_ticks_per_sec() / 10);
339 340
        for (i = 0; i < baum->x * baum->y ; i++) {
340 341
            EAT(c);
341 342
            cells[i] = c;
b/hw/bt-hci-csr.c
363 363
    switch (cmd) {
364 364
    case CHR_IOCTL_SERIAL_SET_PARAMS:
365 365
        ssp = (QEMUSerialSetParams *) arg;
366
        s->baud_delay = ticks_per_sec / ssp->speed;
366
        s->baud_delay = get_ticks_per_sec() / ssp->speed;
367 367
        /* Moments later... (but shorter than 100ms) */
368 368
        s->modem_state |= CHR_TIOCM_CTS;
369 369
        break;
......
389 389
    s->out_len = 0;
390 390
    s->out_size = FIFO_LEN;
391 391
    s->in_len = 0;
392
    s->baud_delay = ticks_per_sec;
392
    s->baud_delay = get_ticks_per_sec();
393 393
    s->enable = 0;
394 394
    s->in_hdr = INT_MAX;
395 395
    s->in_data = INT_MAX;
b/hw/bt-hci.c
577 577
static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period)
578 578
{
579 579
    qemu_mod_timer(timer, qemu_get_clock(vm_clock) +
580
                    muldiv64(period << 7, ticks_per_sec, 100));
580
                   muldiv64(period << 7, get_ticks_per_sec(), 100));
581 581
}
582 582

  
583 583
static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length)
......
1086 1086
    bt_hci_event_status(hci, HCI_SUCCESS);
1087 1087

  
1088 1088
    qemu_mod_timer(link->acl_mode_timer, qemu_get_clock(vm_clock) +
1089
                            muldiv64(interval * 625, ticks_per_sec, 1000000));
1089
                   muldiv64(interval * 625, get_ticks_per_sec(), 1000000));
1090 1090
    bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1091 1091

  
1092 1092
    return 0;
b/hw/cuda.c
171 171
    unsigned int counter;
172 172

  
173 173
    d = muldiv64(qemu_get_clock(vm_clock) - s->load_time,
174
                 CUDA_TIMER_FREQ, ticks_per_sec);
174
                 CUDA_TIMER_FREQ, get_ticks_per_sec());
175 175
    if (s->index == 0) {
176 176
        /* the timer goes down from latch to -1 (period of latch + 2) */
177 177
        if (d <= (s->counter_value + 1)) {
......
201 201

  
202 202
    /* current counter value */
203 203
    d = muldiv64(current_time - s->load_time,
204
                 CUDA_TIMER_FREQ, ticks_per_sec);
204
                 CUDA_TIMER_FREQ, get_ticks_per_sec());
205 205
    /* the timer goes down from latch to -1 (period of latch + 2) */
206 206
    if (d <= (s->counter_value + 1)) {
207 207
        counter = (s->counter_value - d) & 0xffff;
......
220 220
    }
221 221
    CUDA_DPRINTF("latch=%d counter=%" PRId64 " delta_next=%" PRId64 "\n",
222 222
                 s->latch, d, next_time - d);
223
    next_time = muldiv64(next_time, ticks_per_sec, CUDA_TIMER_FREQ) +
223
    next_time = muldiv64(next_time, get_ticks_per_sec(), CUDA_TIMER_FREQ) +
224 224
        s->load_time;
225 225
    if (next_time <= current_time)
226 226
        next_time = current_time + 1;
......
505 505
    }
506 506
    qemu_mod_timer(s->adb_poll_timer,
507 507
                   qemu_get_clock(vm_clock) +
508
                   (ticks_per_sec / CUDA_ADB_POLL_FREQ));
508
                   (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ));
509 509
}
510 510

  
511 511
static void cuda_receive_packet(CUDAState *s,
......
523 523
            if (autopoll) {
524 524
                qemu_mod_timer(s->adb_poll_timer,
525 525
                               qemu_get_clock(vm_clock) +
526
                               (ticks_per_sec / CUDA_ADB_POLL_FREQ));
526
                               (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ));
527 527
            } else {
528 528
                qemu_del_timer(s->adb_poll_timer);
529 529
            }
......
534 534
        break;
535 535
    case CUDA_SET_TIME:
536 536
        ti = (((uint32_t)data[1]) << 24) + (((uint32_t)data[2]) << 16) + (((uint32_t)data[3]) << 8) + data[4];
537
        s->tick_offset = ti - (qemu_get_clock(vm_clock) / ticks_per_sec);
537
        s->tick_offset = ti - (qemu_get_clock(vm_clock) / get_ticks_per_sec());
538 538
        obuf[0] = CUDA_PACKET;
539 539
        obuf[1] = 0;
540 540
        obuf[2] = 0;
541 541
        cuda_send_packet_to_host(s, obuf, 3);
542 542
        break;
543 543
    case CUDA_GET_TIME:
544
        ti = s->tick_offset + (qemu_get_clock(vm_clock) / ticks_per_sec);
544
        ti = s->tick_offset + (qemu_get_clock(vm_clock) / get_ticks_per_sec());
545 545
        obuf[0] = CUDA_PACKET;
546 546
        obuf[1] = 0;
547 547
        obuf[2] = 0;
b/hw/dp8393x.c
290 290

  
291 291
    ticks = s->regs[SONIC_WT1] << 16 | s->regs[SONIC_WT0];
292 292
    s->wt_last_update = qemu_get_clock(vm_clock);
293
    delay = ticks_per_sec * ticks / 5000000;
293
    delay = get_ticks_per_sec() * ticks / 5000000;
294 294
    qemu_mod_timer(s->watchdog, s->wt_last_update + delay);
295 295
}
296 296

  
b/hw/fdc.c
1541 1541
    /* XXX: should set main status register to busy */
1542 1542
    cur_drv->head = (fdctrl->fifo[1] >> 2) & 1;
1543 1543
    qemu_mod_timer(fdctrl->result_timer,
1544
                   qemu_get_clock(vm_clock) + (ticks_per_sec / 50));
1544
                   qemu_get_clock(vm_clock) + (get_ticks_per_sec() / 50));
1545 1545
}
1546 1546

  
1547 1547
static void fdctrl_handle_format_track (fdctrl_t *fdctrl, int direction)
b/hw/i8254.c
66 66
    uint64_t d;
67 67
    int counter;
68 68

  
69
    d = muldiv64(qemu_get_clock(vm_clock) - s->count_load_time, PIT_FREQ, ticks_per_sec);
69
    d = muldiv64(qemu_get_clock(vm_clock) - s->count_load_time, PIT_FREQ,
70
                 get_ticks_per_sec());
70 71
    switch(s->mode) {
71 72
    case 0:
72 73
    case 1:
......
91 92
    uint64_t d;
92 93
    int out;
93 94

  
94
    d = muldiv64(current_time - s->count_load_time, PIT_FREQ, ticks_per_sec);
95
    d = muldiv64(current_time - s->count_load_time, PIT_FREQ,
96
                 get_ticks_per_sec());
95 97
    switch(s->mode) {
96 98
    default:
97 99
    case 0:
......
130 132
    uint64_t d, next_time, base;
131 133
    int period2;
132 134

  
133
    d = muldiv64(current_time - s->count_load_time, PIT_FREQ, ticks_per_sec);
135
    d = muldiv64(current_time - s->count_load_time, PIT_FREQ,
136
                 get_ticks_per_sec());
134 137
    switch(s->mode) {
135 138
    default:
136 139
    case 0:
......
166 169
        break;
167 170
    }
168 171
    /* convert to timer units */
169
    next_time = s->count_load_time + muldiv64(next_time, ticks_per_sec, PIT_FREQ);
172
    next_time = s->count_load_time + muldiv64(next_time, get_ticks_per_sec(),
173
                                              PIT_FREQ);
170 174
    /* fix potential rounding problems */
171 175
    /* XXX: better solution: use a clock at PIT_FREQ Hz */
172 176
    if (next_time <= current_time)
......
373 377
#ifdef DEBUG_PIT
374 378
    printf("irq_level=%d next_delay=%f\n",
375 379
           irq_level,
376
           (double)(expire_time - current_time) / ticks_per_sec);
380
           (double)(expire_time - current_time) / get_ticks_per_sec());
377 381
#endif
378 382
    s->next_transition_time = expire_time;
379 383
    if (expire_time != -1)
b/hw/i8259.c
247 247
#ifdef DEBUG_IRQ_LATENCY
248 248
    printf("IRQ%d latency=%0.3fus\n",
249 249
           irq,
250
           (double)(qemu_get_clock(vm_clock) - irq_time[irq]) * 1000000.0 / ticks_per_sec);
250
           (double)(qemu_get_clock(vm_clock) -
251
                    irq_time[irq]) * 1000000.0 / get_ticks_per_sec());
251 252
#endif
252 253
#if defined(DEBUG_PIC)
253 254
    printf("pic_interrupt: irq=%d\n", irq);
b/hw/ide/core.c
647 647
           option _only_ to install Windows 2000. You must disable it
648 648
           for normal use. */
649 649
        qemu_mod_timer(s->sector_write_timer, 
650
                       qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
650
                       qemu_get_clock(vm_clock) + (get_ticks_per_sec() / 1000));
651 651
    } else 
652 652
#endif
653 653
    {
b/hw/mc146818rtc.c
109 109
        /* divide each RTC interval to 2 - 8 smaller intervals */
110 110
        int c = MIN(s->irq_coalesced, 7) + 1; 
111 111
        int64_t next_clock = qemu_get_clock(vm_clock) +
112
		muldiv64(s->period / c, ticks_per_sec, 32768);
112
		muldiv64(s->period / c, get_ticks_per_sec(), 32768);
113 113
        qemu_mod_timer(s->coalesced_timer, next_clock);
114 114
    }
115 115
}
......
159 159
        s->period = period;
160 160
#endif
161 161
        /* compute 32 khz clock */
162
        cur_clock = muldiv64(current_time, 32768, ticks_per_sec);
162
        cur_clock = muldiv64(current_time, 32768, get_ticks_per_sec());
163 163
        next_irq_clock = (cur_clock & ~(period - 1)) + period;
164
        s->next_periodic_time = muldiv64(next_irq_clock, ticks_per_sec, 32768) + 1;
164
        s->next_periodic_time = muldiv64(next_irq_clock, get_ticks_per_sec(), 32768) + 1;
165 165
        qemu_mod_timer(s->periodic_timer, s->next_periodic_time);
166 166
    } else {
167 167
#ifdef TARGET_I386
......
380 380

  
381 381
    /* if the oscillator is not in normal operation, we do not update */
382 382
    if ((s->cmos_data[RTC_REG_A] & 0x70) != 0x20) {
383
        s->next_second_time += ticks_per_sec;
383
        s->next_second_time += get_ticks_per_sec();
384 384
        qemu_mod_timer(s->second_timer, s->next_second_time);
385 385
    } else {
386 386
        rtc_next_second(&s->current_tm);
......
391 391
        }
392 392
        /* should be 244 us = 8 / 32768 seconds, but currently the
393 393
           timers do not have the necessary resolution. */
394
        delay = (ticks_per_sec * 1) / 100;
394
        delay = (get_ticks_per_sec() * 1) / 100;
395 395
        if (delay < 1)
396 396
            delay = 1;
397 397
        qemu_mod_timer(s->second_timer2,
......
431 431
    /* clear update in progress bit */
432 432
    s->cmos_data[RTC_REG_A] &= ~REG_A_UIP;
433 433

  
434
    s->next_second_time += ticks_per_sec;
434
    s->next_second_time += get_ticks_per_sec();
435 435
    qemu_mod_timer(s->second_timer, s->next_second_time);
436 436
}
437 437

  
......
616 616
    s->second_timer2 = qemu_new_timer(vm_clock,
617 617
                                      rtc_update_second2, s);
618 618

  
619
    s->next_second_time = qemu_get_clock(vm_clock) + (ticks_per_sec * 99) / 100;
619
    s->next_second_time = qemu_get_clock(vm_clock) + (get_ticks_per_sec() * 99) / 100;
620 620
    qemu_mod_timer(s->second_timer2, s->next_second_time);
621 621

  
622 622
    register_ioport_write(base, 2, 1, cmos_ioport_write, s);
......
754 754
    s->second_timer2 = qemu_new_timer(vm_clock,
755 755
                                      rtc_update_second2, s);
756 756

  
757
    s->next_second_time = qemu_get_clock(vm_clock) + (ticks_per_sec * 99) / 100;
757
    s->next_second_time = qemu_get_clock(vm_clock) + (get_ticks_per_sec() * 99) / 100;
758 758
    qemu_mod_timer(s->second_timer2, s->next_second_time);
759 759

  
760 760
    io_memory = cpu_register_io_memory(rtc_mm_read, rtc_mm_write, s);
b/hw/mips_timer.c
27 27
    else
28 28
        return env->CP0_Count +
29 29
            (uint32_t)muldiv64(qemu_get_clock(vm_clock),
30
                               TIMER_FREQ, ticks_per_sec);
30
                               TIMER_FREQ, get_ticks_per_sec());
31 31
}
32 32

  
33 33
static void cpu_mips_timer_update(CPUState *env)
......
37 37

  
38 38
    now = qemu_get_clock(vm_clock);
39 39
    wait = env->CP0_Compare - env->CP0_Count -
40
	    (uint32_t)muldiv64(now, TIMER_FREQ, ticks_per_sec);
41
    next = now + muldiv64(wait, ticks_per_sec, TIMER_FREQ);
40
	    (uint32_t)muldiv64(now, TIMER_FREQ, get_ticks_per_sec());
41
    next = now + muldiv64(wait, get_ticks_per_sec(), TIMER_FREQ);
42 42
    qemu_mod_timer(env->timer, next);
43 43
}
44 44

  
......
50 50
        /* Store new count register */
51 51
        env->CP0_Count =
52 52
            count - (uint32_t)muldiv64(qemu_get_clock(vm_clock),
53
                                       TIMER_FREQ, ticks_per_sec);
53
                                       TIMER_FREQ, get_ticks_per_sec());
54 54
        /* Update timer timer */
55 55
        cpu_mips_timer_update(env);
56 56
    }
......
75 75
{
76 76
    /* Store the current value */
77 77
    env->CP0_Count += (uint32_t)muldiv64(qemu_get_clock(vm_clock),
78
                                         TIMER_FREQ, ticks_per_sec);
78
                                         TIMER_FREQ, get_ticks_per_sec());
79 79
}
80 80

  
81 81
static void mips_timer_cb (void *opaque)
b/hw/omap1.c
675 675

  
676 676
    if (timer->st && timer->enable && timer->rate)
677 677
        return timer->val - muldiv64(distance >> (timer->ptv + 1),
678
                        timer->rate, ticks_per_sec);
678
                                     timer->rate, get_ticks_per_sec());
679 679
    else
680 680
        return timer->val;
681 681
}
......
693 693
    if (timer->enable && timer->st && timer->rate) {
694 694
        timer->val = timer->reset_val;	/* Should skip this on clk enable */
695 695
        expires = muldiv64((uint64_t) timer->val << (timer->ptv + 1),
696
                        ticks_per_sec, timer->rate);
696
                           get_ticks_per_sec(), timer->rate);
697 697

  
698 698
        /* If timer expiry would be sooner than in about 1 ms and
699 699
         * auto-reload isn't set, then fire immediately.  This is a hack
......
701 701
         * sets the interval to a very low value and polls the status bit
702 702
         * in a busy loop when it wants to sleep just a couple of CPU
703 703
         * ticks.  */
704
        if (expires > (ticks_per_sec >> 10) || timer->ar)
704
        if (expires > (get_ticks_per_sec() >> 10) || timer->ar)
705 705
            qemu_mod_timer(timer->timer, timer->time + expires);
706 706
        else
707 707
            qemu_bh_schedule(timer->tick);
......
1158 1158
                now -= s->ulpd_gauge_start;
1159 1159

  
1160 1160
                /* 32-kHz ticks */
1161
                ticks = muldiv64(now, 32768, ticks_per_sec);
1161
                ticks = muldiv64(now, 32768, get_ticks_per_sec());
1162 1162
                s->ulpd_pm_regs[0x00 >> 2] = (ticks >>  0) & 0xffff;
1163 1163
                s->ulpd_pm_regs[0x04 >> 2] = (ticks >> 16) & 0xffff;
1164 1164
                if (ticks >> 32)	/* OVERFLOW_32K */
1165 1165
                    s->ulpd_pm_regs[0x14 >> 2] |= 1 << 2;
1166 1166

  
1167 1167
                /* High frequency ticks */
1168
                ticks = muldiv64(now, 12000000, ticks_per_sec);
1168
                ticks = muldiv64(now, 12000000, get_ticks_per_sec());
1169 1169
                s->ulpd_pm_regs[0x08 >> 2] = (ticks >>  0) & 0xffff;
1170 1170
                s->ulpd_pm_regs[0x0c >> 2] = (ticks >> 16) & 0xffff;
1171 1171
                if (ticks >> 32)	/* OVERFLOW_HI_FREQ */
......
3831 3831
    s->rx_req = s->rx_rate << bps[(s->rcr[0] >> 5) & 7];
3832 3832

  
3833 3833
    omap_mcbsp_rx_newdata(s);
3834
    qemu_mod_timer(s->source_timer, qemu_get_clock(vm_clock) + ticks_per_sec);
3834
    qemu_mod_timer(s->source_timer, qemu_get_clock(vm_clock) +
3835
                   get_ticks_per_sec());
3835 3836
}
3836 3837

  
3837 3838
static void omap_mcbsp_rx_start(struct omap_mcbsp_s *s)
......
3876 3877
    s->tx_req = s->tx_rate << bps[(s->xcr[0] >> 5) & 7];
3877 3878

  
3878 3879
    omap_mcbsp_tx_newdata(s);
3879
    qemu_mod_timer(s->sink_timer, qemu_get_clock(vm_clock) + ticks_per_sec);
3880
    qemu_mod_timer(s->sink_timer, qemu_get_clock(vm_clock) +
3881
                   get_ticks_per_sec());
3880 3882
}
3881 3883

  
3882 3884
static void omap_mcbsp_tx_start(struct omap_mcbsp_s *s)
b/hw/omap2.c
412 412
        if (s->trigger == gpt_trigger_none)
413 413
            omap_gp_timer_out(s, s->scpwm);
414 414
        /* TODO: make sure this doesn't overflow 32-bits */
415
        s->ticks_per_sec = ticks_per_sec << (s->pre ? s->ptv + 1 : 0);
415
        s->ticks_per_sec = get_ticks_per_sec() << (s->pre ? s->ptv + 1 : 0);
416 416
        omap_gp_timer_update(s);
417 417
        break;
418 418

  
......
491 491

  
492 492
/* 32-kHz Sync Timer of the OMAP2 */
493 493
static uint32_t omap_synctimer_read(struct omap_synctimer_s *s) {
494
    return muldiv64(qemu_get_clock(vm_clock), 0x8000, ticks_per_sec);
494
    return muldiv64(qemu_get_clock(vm_clock), 0x8000, get_ticks_per_sec());
495 495
}
496 496

  
497 497
static void omap_synctimer_reset(struct omap_synctimer_s *s)
b/hw/pcnet.c
726 726
{
727 727
    int64_t next_time = current_time +
728 728
        muldiv64(65536 - (CSR_SPND(s) ? 0 : CSR_POLL(s)),
729
                 ticks_per_sec, 33000000L);
729
                 get_ticks_per_sec(), 33000000L);
730 730
    if (next_time <= current_time)
731 731
        next_time = current_time + 1;
732 732
    return next_time;
b/hw/pflash_cfi02.c
389 389
            pflash_update(pfl, 0, pfl->chip_len);
390 390
            /* Let's wait 5 seconds before chip erase is done */
391 391
            qemu_mod_timer(pfl->timer,
392
                           qemu_get_clock(vm_clock) + (ticks_per_sec * 5));
392
                           qemu_get_clock(vm_clock) + (get_ticks_per_sec() * 5));
393 393
            break;
394 394
        case 0x30:
395 395
            /* Sector erase */
......
402 402
            pfl->status = 0x00;
403 403
            /* Let's wait 1/2 second before sector erase is done */
404 404
            qemu_mod_timer(pfl->timer,
405
                           qemu_get_clock(vm_clock) + (ticks_per_sec / 2));
405
                           qemu_get_clock(vm_clock) + (get_ticks_per_sec() / 2));
406 406
            break;
407 407
        default:
408 408
            DPRINTF("%s: invalid command %02x (wc 5)\n", __func__, cmd);
b/hw/pl031.c
67 67
{
68 68
    /* This assumes qemu_get_clock returns the time since the machine was
69 69
       created.  */
70
    return s->tick_offset + qemu_get_clock(vm_clock) / ticks_per_sec;
70
    return s->tick_offset + qemu_get_clock(vm_clock) / get_ticks_per_sec();
71 71
}
72 72

  
73 73
static void pl031_set_alarm(pl031_state *s)
......
76 76
    uint32_t ticks;
77 77

  
78 78
    now = qemu_get_clock(vm_clock);
79
    ticks = s->tick_offset + now / ticks_per_sec;
79
    ticks = s->tick_offset + now / get_ticks_per_sec();
80 80

  
81 81
    /* The timer wraps around.  This subtraction also wraps in the same way,
82 82
       and gives correct results when alarm < now_ticks.  */
......
86 86
        qemu_del_timer(s->timer);
87 87
        pl031_interrupt(s);
88 88
    } else {
89
        qemu_mod_timer(s->timer, now + (int64_t)ticks * ticks_per_sec);
89
        qemu_mod_timer(s->timer, now + (int64_t)ticks * get_ticks_per_sec());
90 90
    }
91 91
}
92 92

  
b/hw/ppc.c
397 397
                                      int64_t tb_offset)
398 398
{
399 399
    /* TB time in tb periods */
400
    return muldiv64(vmclk, tb_env->tb_freq, ticks_per_sec) + tb_offset;
400
    return muldiv64(vmclk, tb_env->tb_freq, get_ticks_per_sec()) + tb_offset;
401 401
}
402 402

  
403 403
uint32_t cpu_ppc_load_tbl (CPUState *env)
......
430 430
static inline void cpu_ppc_store_tb(ppc_tb_t *tb_env, uint64_t vmclk,
431 431
                                    int64_t *tb_offsetp, uint64_t value)
432 432
{
433
    *tb_offsetp = value - muldiv64(vmclk, tb_env->tb_freq, ticks_per_sec);
433
    *tb_offsetp = value - muldiv64(vmclk, tb_env->tb_freq, get_ticks_per_sec());
434 434
    LOG_TB("%s: tb %016" PRIx64 " offset %08" PRIx64 "\n",
435 435
                __func__, value, *tb_offsetp);
436 436
}
......
557 557

  
558 558
    diff = next - qemu_get_clock(vm_clock);
559 559
    if (diff >= 0)
560
        decr = muldiv64(diff, tb_env->decr_freq, ticks_per_sec);
560
        decr = muldiv64(diff, tb_env->decr_freq, get_ticks_per_sec());
561 561
    else
562
        decr = -muldiv64(-diff, tb_env->decr_freq, ticks_per_sec);
562
        decr = -muldiv64(-diff, tb_env->decr_freq, get_ticks_per_sec());
563 563
    LOG_TB("%s: %08" PRIx32 "\n", __func__, decr);
564 564

  
565 565
    return decr;
......
586 586

  
587 587
    diff = qemu_get_clock(vm_clock) - tb_env->purr_start;
588 588

  
589
    return tb_env->purr_load + muldiv64(diff, tb_env->tb_freq, ticks_per_sec);
589
    return tb_env->purr_load + muldiv64(diff, tb_env->tb_freq, get_ticks_per_sec());
590 590
}
591 591

  
592 592
/* When decrementer expires,
......
618 618
    LOG_TB("%s: %08" PRIx32 " => %08" PRIx32 "\n", __func__,
619 619
                decr, value);
620 620
    now = qemu_get_clock(vm_clock);
621
    next = now + muldiv64(value, ticks_per_sec, tb_env->decr_freq);
621
    next = now + muldiv64(value, get_ticks_per_sec(), tb_env->decr_freq);
622 622
    if (is_excp)
623 623
        next += *nextp - now;
624 624
    if (next == now)
......
788 788
        /* Cannot occur, but makes gcc happy */
789 789
        return;
790 790
    }
791
    next = now + muldiv64(next, ticks_per_sec, tb_env->tb_freq);
791
    next = now + muldiv64(next, get_ticks_per_sec(), tb_env->tb_freq);
792 792
    if (next == now)
793 793
        next++;
794 794
    qemu_mod_timer(ppcemb_timer->fit_timer, next);
......
818 818
                    __func__, ppcemb_timer->pit_reload);
819 819
        now = qemu_get_clock(vm_clock);
820 820
        next = now + muldiv64(ppcemb_timer->pit_reload,
821
                              ticks_per_sec, tb_env->decr_freq);
821
                              get_ticks_per_sec(), tb_env->decr_freq);
822 822
        if (is_excp)
823 823
            next += tb_env->decr_next - now;
824 824
        if (next == now)
......
878 878
        /* Cannot occur, but makes gcc happy */
879 879
        return;
880 880
    }
881
    next = now + muldiv64(next, ticks_per_sec, tb_env->decr_freq);
881
    next = now + muldiv64(next, get_ticks_per_sec(), tb_env->decr_freq);
882 882
    if (next == now)
883 883
        next++;
884 884
    LOG_TB("%s: TCR " TARGET_FMT_lx " TSR " TARGET_FMT_lx "\n", __func__,
b/hw/ppc405_uc.c
1379 1379
    case 0x00:
1380 1380
        /* Time base counter */
1381 1381
        ret = muldiv64(qemu_get_clock(vm_clock) + gpt->tb_offset,
1382
                       gpt->tb_freq, ticks_per_sec);
1382
                       gpt->tb_freq, get_ticks_per_sec());
1383 1383
        break;
1384 1384
    case 0x10:
1385 1385
        /* Output enable */
......
1434 1434
    switch (addr) {
1435 1435
    case 0x00:
1436 1436
        /* Time base counter */
1437
        gpt->tb_offset = muldiv64(value, ticks_per_sec, gpt->tb_freq)
1437
        gpt->tb_offset = muldiv64(value, get_ticks_per_sec(), gpt->tb_freq)
1438 1438
            - qemu_get_clock(vm_clock);
1439 1439
        ppc4xx_gpt_compute_timer(gpt);
1440 1440
        break;
b/hw/pxa2xx_timer.c
98 98
    uint64_t new_qemu;
99 99

  
100 100
    now_vm = s->clock +
101
            muldiv64(now_qemu - s->lastload, s->freq, ticks_per_sec);
101
            muldiv64(now_qemu - s->lastload, s->freq, get_ticks_per_sec());
102 102

  
103 103
    for (i = 0; i < 4; i ++) {
104 104
        new_qemu = now_qemu + muldiv64((uint32_t) (s->timer[i].value - now_vm),
105
                        ticks_per_sec, s->freq);
105
                        get_ticks_per_sec(), s->freq);
106 106
        qemu_mod_timer(s->timer[i].qtimer, new_qemu);
107 107
    }
108 108
}
......
127 127

  
128 128
    now_vm = s->tm4[counter].clock + muldiv64(now_qemu -
129 129
                    s->tm4[counter].lastload,
130
                    s->tm4[counter].freq, ticks_per_sec);
130
                    s->tm4[counter].freq, get_ticks_per_sec());
131 131

  
132 132
    new_qemu = now_qemu + muldiv64((uint32_t) (s->tm4[n].tm.value - now_vm),
133
                    ticks_per_sec, s->tm4[counter].freq);
133
                    get_ticks_per_sec(), s->tm4[counter].freq);
134 134
    qemu_mod_timer(s->tm4[n].tm.qtimer, new_qemu);
135 135
}
136 136

  
......
158 158
        return s->tm4[tm].tm.value;
159 159
    case OSCR:
160 160
        return s->clock + muldiv64(qemu_get_clock(vm_clock) -
161
                        s->lastload, s->freq, ticks_per_sec);
161
                        s->lastload, s->freq, get_ticks_per_sec());
162 162
    case OSCR11: tm ++;
163 163
    case OSCR10: tm ++;
164 164
    case OSCR9:  tm ++;
......
175 175
                s->snapshot = s->tm4[tm - 1].clock + muldiv64(
176 176
                                qemu_get_clock(vm_clock) -
177 177
                                s->tm4[tm - 1].lastload,
178
                                s->tm4[tm - 1].freq, ticks_per_sec);
178
                                s->tm4[tm - 1].freq, get_ticks_per_sec());
179 179
            else
180 180
                s->snapshot = s->tm4[tm - 1].clock;
181 181
        }
......
183 183
        if (!s->tm4[tm].freq)
184 184
            return s->tm4[tm].clock;
185 185
        return s->tm4[tm].clock + muldiv64(qemu_get_clock(vm_clock) -
186
                        s->tm4[tm].lastload, s->tm4[tm].freq, ticks_per_sec);
186
                        s->tm4[tm].lastload, s->tm4[tm].freq, get_ticks_per_sec());
187 187
    case OIER:
188 188
        return s->irq_enabled;
189 189
    case OSSR:	/* Status register */
b/hw/rc4030.c
104 104

  
105 105
    tm_hz = 1000 / (s->itr + 1);
106 106

  
107
    qemu_mod_timer(s->periodic_timer, qemu_get_clock(vm_clock) + ticks_per_sec / tm_hz);
107
    qemu_mod_timer(s->periodic_timer, qemu_get_clock(vm_clock) +
108
                   get_ticks_per_sec() / tm_hz);
108 109
}
109 110

  
110 111
/* called for accesses to rc4030 */
b/hw/rtl8139.c
3361 3361
static inline int64_t rtl8139_get_next_tctr_time(RTL8139State *s, int64_t current_time)
3362 3362
{
3363 3363
    int64_t next_time = current_time +
3364
        muldiv64(1, ticks_per_sec, PCI_FREQUENCY);
3364
        muldiv64(1, get_ticks_per_sec(), PCI_FREQUENCY);
3365 3365
    if (next_time <= current_time)
3366 3366
        next_time = current_time + 1;
3367 3367
    return next_time;
......
3385 3385

  
3386 3386
    curr_time = qemu_get_clock(vm_clock);
3387 3387

  
3388
    curr_tick = muldiv64(curr_time - s->TCTR_base, PCI_FREQUENCY, ticks_per_sec);
3388
    curr_tick = muldiv64(curr_time - s->TCTR_base, PCI_FREQUENCY,
3389
                         get_ticks_per_sec());
3389 3390

  
3390 3391
    if (s->TimerInt && curr_tick >= s->TimerInt)
3391 3392
    {
b/hw/sb16.c
757 757
                freq = s->freq > 0 ? s->freq : 11025;
758 758
                samples = dsp_get_lohi (s) + 1;
759 759
                bytes = samples << s->fmt_stereo << (s->fmt_bits == 16);
760
                ticks = (bytes * ticks_per_sec) / freq;
761
                if (ticks < ticks_per_sec / 1024) {
760
                ticks = (bytes * get_ticks_per_sec()) / freq;
761
                if (ticks < get_ticks_per_sec() / 1024) {
762 762
                    qemu_irq_raise (s->pic);
763 763
                }
764 764
                else {
b/hw/serial.c
246 246
    ssp.parity = parity;
247 247
    ssp.data_bits = data_bits;
248 248
    ssp.stop_bits = stop_bits;
249
    s->char_transmit_time =  (ticks_per_sec / speed) * frame_size;
249
    s->char_transmit_time =  (get_ticks_per_sec() / speed) * frame_size;
250 250
    qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
251 251
#if 0
252 252
    printf("speed=%d parity=%c data=%d stop=%d\n",
......
286 286
       We'll be lazy and poll only every 10ms, and only poll it at all if MSI interrupts are turned on */
287 287

  
288 288
    if (s->poll_msl)
289
        qemu_mod_timer(s->modem_status_poll, qemu_get_clock(vm_clock) + ticks_per_sec / 100);
289
        qemu_mod_timer(s->modem_status_poll, qemu_get_clock(vm_clock) + get_ticks_per_sec() / 100);
290 290
}
291 291

  
292 292
static void serial_xmit(void *opaque)
......
695 695
    s->mcr = UART_MCR_OUT2;
696 696
    s->scr = 0;
697 697
    s->tsr_retry = 0;
698
    s->char_transmit_time = (ticks_per_sec / 9600) * 9;
698
    s->char_transmit_time = (get_ticks_per_sec() / 9600) * 9;
699 699
    s->poll_msl = 0;
700 700

  
701 701
    fifo_clear(s,RECV_FIFO);
b/hw/spitz.c
392 392
            s->fifopos = 0;
393 393
    }
394 394

  
395
    qemu_mod_timer(s->kbdtimer, qemu_get_clock(vm_clock) + ticks_per_sec / 32);
395
    qemu_mod_timer(s->kbdtimer, qemu_get_clock(vm_clock) +
396
                   get_ticks_per_sec() / 32);
396 397
}
397 398

  
398 399
static void spitz_keyboard_pre_map(SpitzKeyboardState *s)
b/hw/stellaris.c
90 90
        tick += (int64_t)count * system_clock_scale;
91 91
    } else if (s->config == 1) {
92 92
        /* 32-bit RTC.  1Hz tick.  */
93
        tick += ticks_per_sec;
93
        tick += get_ticks_per_sec();
94 94
    } else if (s->mode[n] == 0xa) {
95 95
        /* PWM mode.  Not implemented.  */
96 96
    } else {
b/hw/tsc2005.c
290 290
    s->precision = s->nextprecision;
291 291
    s->function = s->nextfunction;
292 292
    s->pdst = !s->pnd0;	/* Synchronised on internal clock */
293
    expires = qemu_get_clock(vm_clock) + (ticks_per_sec >> 7);
293
    expires = qemu_get_clock(vm_clock) + (get_ticks_per_sec() >> 7);
294 294
    qemu_mod_timer(s->timer, expires);
295 295
}
296 296

  
b/hw/tsc210x.c
864 864
    s->busy = 1;
865 865
    s->precision = s->nextprecision;
866 866
    s->function = s->nextfunction;
867
    expires = qemu_get_clock(vm_clock) + (ticks_per_sec >> 10);
867
    expires = qemu_get_clock(vm_clock) + (get_ticks_per_sec() >> 10);
868 868
    qemu_mod_timer(s->timer, expires);
869 869
}
870 870

  
b/hw/tusb6010.c
523 523
        if (value & TUSB_DEV_OTG_TIMER_ENABLE)
524 524
            qemu_mod_timer(s->otg_timer, qemu_get_clock(vm_clock) +
525 525
                            muldiv64(TUSB_DEV_OTG_TIMER_VAL(value),
526
                                    ticks_per_sec, TUSB_DEVCLOCK));
526
                                     get_ticks_per_sec(), TUSB_DEVCLOCK));
527 527
        else
528 528
            qemu_del_timer(s->otg_timer);
529 529
        break;
......
763 763
        s->intr_ok = 0;
764 764
        tusb_intr_update(s);
765 765
        qemu_mod_timer(s->pwr_timer,
766
                        qemu_get_clock(vm_clock) + ticks_per_sec / 2);
766
                       qemu_get_clock(vm_clock) + get_ticks_per_sec() / 2);
767 767
    }
768 768
}
b/hw/usb-musb.c
511 511
        ep->intv_timer[dir] = qemu_new_timer(vm_clock, musb_cb_tick, opaque);
512 512

  
513 513
    qemu_mod_timer(ep->intv_timer[dir], qemu_get_clock(vm_clock) +
514
                    muldiv64(timeout, ticks_per_sec, 8000));
514
                   muldiv64(timeout, get_ticks_per_sec(), 8000));
515 515
}
516 516

  
517 517
static void musb_schedule0_cb(USBPacket *packey, void *opaque)
b/hw/usb-ohci.c
1669 1669

  
1670 1670
    if (usb_frame_time == 0) {
1671 1671
#ifdef OHCI_TIME_WARP
1672
        usb_frame_time = ticks_per_sec;
1673
        usb_bit_time = muldiv64(1, ticks_per_sec, USB_HZ/1000);
1672
        usb_frame_time = get_ticks_per_sec();
1673
        usb_bit_time = muldiv64(1, get_ticks_per_sec(), USB_HZ/1000);
1674 1674
#else
1675
        usb_frame_time = muldiv64(1, ticks_per_sec, 1000);
1676
        if (ticks_per_sec >= USB_HZ) {
1677
            usb_bit_time = muldiv64(1, ticks_per_sec, USB_HZ);
1675
        usb_frame_time = muldiv64(1, get_ticks_per_sec(), 1000);
1676
        if (get_ticks_per_sec() >= USB_HZ) {
1677
            usb_bit_time = muldiv64(1, get_ticks_per_sec(), USB_HZ);
1678 1678
        } else {
1679 1679
            usb_bit_time = 1;
1680 1680
        }
b/hw/usb-uhci.c
1054 1054

  
1055 1055
    /* prepare the timer for the next frame */
1056 1056
    expire_time = qemu_get_clock(vm_clock) +
1057
        (ticks_per_sec / FRAME_TIMER_FREQ);
1057
        (get_ticks_per_sec() / FRAME_TIMER_FREQ);
1058 1058
    qemu_mod_timer(s->frame_timer, expire_time);
1059 1059
}
1060 1060

  
b/hw/vga.c
202 202

  
203 203
    r->total_chars = vtotal_lines * htotal_chars;
204 204
    if (r->freq) {
205
        r->ticks_per_char = ticks_per_sec / (r->total_chars * r->freq);
205
        r->ticks_per_char = get_ticks_per_sec() / (r->total_chars * r->freq);
206 206
    } else {
207
        r->ticks_per_char = ticks_per_sec / chars_per_sec;
207
        r->ticks_per_char = get_ticks_per_sec() / chars_per_sec;
208 208
    }
209 209

  
210 210
    r->vstart = vretr_start_line;
......
230 230
        "dots = %d\n"
231 231
        "ticks/char = %lld\n"
232 232
        "\n",
233
        (double) ticks_per_sec / (r->ticks_per_char * r->total_chars),
233
        (double) get_ticks_per_sec() / (r->ticks_per_char * r->total_chars),
234 234
        htotal_chars,
235 235
        hretr_start_char,
236 236
        hretr_skew_chars,
b/hw/wdt_i6300esb.c
130 130
        timeout <<= 5;
131 131

  
132 132
    /* Get the timeout in units of ticks_per_sec. */
133
    timeout = ticks_per_sec * timeout / 33000000;
133
    timeout = get_ticks_per_sec() * timeout / 33000000;
134 134

  
135 135
    i6300esb_debug("stage %d, timeout %" PRIi64 "\n", d->stage, timeout);
136 136

  
b/hw/wdt_ib700.c
52 52

  
53 53
    ib700_debug("addr = %x, data = %x\n", addr, data);
54 54

  
55
    timeout = (int64_t) time_map[data & 0xF] * ticks_per_sec;
55
    timeout = (int64_t) time_map[data & 0xF] * get_ticks_per_sec();
56 56
    qemu_mod_timer(timer, qemu_get_clock (vm_clock) + timeout);
57 57
}
58 58

  
b/monitor.c
1164 1164
    }
1165 1165
    /* delayed key up events */
1166 1166
    qemu_mod_timer(key_timer, qemu_get_clock(vm_clock) +
1167
                    muldiv64(ticks_per_sec, hold_time, 1000));
1167
                   muldiv64(get_ticks_per_sec(), hold_time, 1000));
1168 1168
}
1169 1169

  
1170 1170
static int mouse_button_state;
......
1463 1463
    if (total == 0)
1464 1464
        total = 1;
1465 1465
    monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1466
                   dev_time, dev_time / (double)ticks_per_sec);
1466
                   dev_time, dev_time / (double)get_ticks_per_sec());
1467 1467
    monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1468
                   qemu_time, qemu_time / (double)ticks_per_sec);
1468
                   qemu_time, qemu_time / (double)get_ticks_per_sec());
1469 1469
    qemu_time = 0;
1470 1470
    dev_time = 0;
1471 1471
}
b/net.c
2254 2254
        return size;
2255 2255
    }
2256 2256

  
2257
    ts = muldiv64(qemu_get_clock(vm_clock), 1000000, ticks_per_sec);
2257
    ts = muldiv64(qemu_get_clock(vm_clock), 1000000, get_ticks_per_sec());
2258 2258
    caplen = size > s->pcap_caplen ? s->pcap_caplen : size;
2259 2259

  
2260 2260
    hdr.ts.tv_sec = ts / 1000000;
b/qemu-timer.h
26 26
int qemu_timer_pending(QEMUTimer *ts);
27 27
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time);
28 28

  
29
extern int64_t ticks_per_sec;
29
int64_t get_ticks_per_sec(void);
30 30

  
31 31
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
32 32
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
b/target-ppc/kvm_ppc.c
99 99
     * an idle guest does no IO, qemu's device model will never get a chance to
100 100
     * run. So, until Qemu gains IO threads, we create this timer to ensure
101 101
     * that the device model gets a chance to run. */
102
    kvmppc_timer_rate = ticks_per_sec / 10;
102
    kvmppc_timer_rate = get_ticks_per_sec() / 10;
103 103
    kvmppc_timer = qemu_new_timer(vm_clock, &kvmppc_timer_hack, NULL);
104 104
    qemu_mod_timer(kvmppc_timer, qemu_get_clock(vm_clock) + kvmppc_timer_rate);
105 105
}
b/vl.c
186 186
static DisplayState *display_state;
187 187
DisplayType display_type = DT_DEFAULT;
188 188
const char* keyboard_layout = NULL;
189
int64_t ticks_per_sec;
189
static int64_t ticks_per_sec;
190 190
ram_addr_t ram_size;
191 191
int nb_nics;
192 192
NICInfo nd_table[MAX_NICS];
......
1032 1032
    }
1033 1033
}
1034 1034

  
1035
int64_t get_ticks_per_sec(void)
1036
{
1037
    return ticks_per_sec;
1038
}
1039

  
1035 1040
static void init_timers(void)
1036 1041
{
1037 1042
    init_get_clock();
......
1110 1115
            delta_cum += delta;
1111 1116
            if (++count == DISP_FREQ) {
1112 1117
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1113
                       muldiv64(delta_min, 1000000, ticks_per_sec),
1114
                       muldiv64(delta_max, 1000000, ticks_per_sec),
1115
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1116
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1118
                       muldiv64(delta_min, 1000000, get_ticks_per_sec()),
1119
                       muldiv64(delta_max, 1000000, get_ticks_per_sec()),
1120
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, get_ticks_per_sec()),
1121
                       (double)get_ticks_per_sec() / ((double)delta_cum / DISP_FREQ));
1117 1122
                count = 0;
1118 1123
                delta_min = INT64_MAX;
1119 1124
                delta_max = 0;

Also available in: Unified diff