aboutsummaryrefslogtreecommitdiffstats
path: root/qemu-timer-ui.c
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2010-10-19 08:07:11 +0200
committerDavid 'Digit' Turner <digit@android.com>2010-10-19 08:33:48 +0200
commit18fe86e8245878f3b7a2813bd59b8cfcf636e15c (patch)
tree16ecfe8a8665aec212abdd3f2fcd1e122635358b /qemu-timer-ui.c
parent6b512811e01d7c81348bfa9c29c21f788ccc0a8e (diff)
downloadexternal_qemu-18fe86e8245878f3b7a2813bd59b8cfcf636e15c.zip
external_qemu-18fe86e8245878f3b7a2813bd59b8cfcf636e15c.tar.gz
external_qemu-18fe86e8245878f3b7a2813bd59b8cfcf636e15c.tar.bz2
emulator-ui: Remove dependencies from qemu sources.
This change removes some QEMU-specifics that crept into the UI code. Change-Id: Ib1974dc64e54a35dc0cd01aec1eb547a9263a0c8
Diffstat (limited to 'qemu-timer-ui.c')
-rw-r--r--qemu-timer-ui.c209
1 files changed, 4 insertions, 205 deletions
diff --git a/qemu-timer-ui.c b/qemu-timer-ui.c
index 912e634..ae85509 100644
--- a/qemu-timer-ui.c
+++ b/qemu-timer-ui.c
@@ -24,6 +24,7 @@
#include "qemu-timer.h"
#include "console.h"
+#include "android/utils/system.h"
extern QEMUClock* rtc_clock;
@@ -39,11 +40,6 @@ extern QEMUClock* rtc_clock;
#ifdef __linux__
#include <sys/ioctl.h>
-#include <linux/rtc.h>
-/* For the benefit of older linux systems which don't supply it,
- we use a local copy of hpet.h. */
-/* #include <linux/hpet.h> */
-#include "hpet.h"
#endif
#ifdef _WIN32
@@ -265,12 +261,6 @@ static int dynticks_start_timer(struct qemu_alarm_timer *t);
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
-static int hpet_start_timer(struct qemu_alarm_timer *t);
-static void hpet_stop_timer(struct qemu_alarm_timer *t);
-
-static int rtc_start_timer(struct qemu_alarm_timer *t);
-static void rtc_stop_timer(struct qemu_alarm_timer *t);
-
#endif /* __linux__ */
#endif /* _WIN32 */
@@ -280,10 +270,6 @@ static struct qemu_alarm_timer alarm_timers[] = {
#ifdef __linux__
{"dynticks", dynticks_start_timer,
dynticks_stop_timer, dynticks_rearm_timer, NULL},
- /* HPET - if available - is preferred */
- {"hpet", hpet_start_timer, hpet_stop_timer, NULL, NULL},
- /* ...otherwise try RTC */
- {"rtc", rtc_start_timer, rtc_stop_timer, NULL, NULL},
#endif
{"unix", unix_start_timer, unix_stop_timer, NULL, NULL},
#else
@@ -295,70 +281,6 @@ static struct qemu_alarm_timer alarm_timers[] = {
{NULL, }
};
-static void show_available_alarms(void)
-{
- int i;
-
- printf("Available alarm timers, in order of precedence:\n");
- for (i = 0; alarm_timers[i].name; i++)
- printf("%s\n", alarm_timers[i].name);
-}
-
-void configure_alarms(char const *opt)
-{
- int i;
- int cur = 0;
- int count = ARRAY_SIZE(alarm_timers) - 1;
- char *arg;
- char *name;
- struct qemu_alarm_timer tmp;
-
- if (!strcmp(opt, "?")) {
- show_available_alarms();
- exit(0);
- }
-
- arg = qemu_strdup(opt);
-
- /* Reorder the array */
- name = strtok(arg, ",");
- while (name) {
- for (i = 0; i < count && alarm_timers[i].name; i++) {
- if (!strcmp(alarm_timers[i].name, name))
- break;
- }
-
- if (i == count) {
- fprintf(stderr, "Unknown clock %s\n", name);
- goto next;
- }
-
- if (i < cur)
- /* Ignore */
- goto next;
-
- /* Swap */
- tmp = alarm_timers[i];
- alarm_timers[i] = alarm_timers[cur];
- alarm_timers[cur] = tmp;
-
- cur++;
-next:
- name = strtok(NULL, ",");
- }
-
- qemu_free(arg);
-
- if (cur) {
- /* Disable remaining timers */
- for (i = cur; i < count; i++)
- alarm_timers[i].name = NULL;
- } else {
- show_available_alarms();
- exit(1);
- }
-}
-
#define QEMU_NUM_CLOCKS 3
QEMUClock *rt_clock;
@@ -370,22 +292,17 @@ static QEMUTimer *active_timers[QEMU_NUM_CLOCKS];
static QEMUClock *qemu_new_clock(int type)
{
QEMUClock *clock;
- clock = qemu_mallocz(sizeof(QEMUClock));
+ ANEW0(clock);
clock->type = type;
clock->enabled = 1;
return clock;
}
-void qemu_clock_enable(QEMUClock *clock, int enabled)
-{
- clock->enabled = enabled;
-}
-
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
{
QEMUTimer *ts;
- ts = qemu_mallocz(sizeof(QEMUTimer));
+ ANEW0(ts);
ts->clock = clock;
ts->cb = cb;
ts->opaque = opaque;
@@ -394,7 +311,7 @@ QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
void qemu_free_timer(QEMUTimer *ts)
{
- qemu_free(ts);
+ AFREE(ts);
}
/* stop a timer, but do not dealloc it */
@@ -449,16 +366,6 @@ void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
}
}
-int qemu_timer_pending(QEMUTimer *ts)
-{
- QEMUTimer *t;
- for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
- if (t == ts)
- return 1;
- }
- return 0;
-}
-
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
{
if (!timer_head)
@@ -622,8 +529,6 @@ int64_t qemu_next_deadline(void)
#if defined(__linux__)
-#define RTC_FREQ 1024
-
static uint64_t qemu_next_deadline_dyntick(void)
{
int64_t delta;
@@ -644,106 +549,6 @@ static uint64_t qemu_next_deadline_dyntick(void)
return delta;
}
-static void enable_sigio_timer(int fd)
-{
- struct sigaction act;
-
- /* timer signal */
- sigfillset(&act.sa_mask);
- act.sa_flags = 0;
- act.sa_handler = host_alarm_handler;
-
- sigaction(SIGIO, &act, NULL);
- fcntl_setfl(fd, O_ASYNC);
- fcntl(fd, F_SETOWN, getpid());
-}
-
-static int hpet_start_timer(struct qemu_alarm_timer *t)
-{
- struct hpet_info info;
- int r, fd;
-
- fd = open("/dev/hpet", O_RDONLY);
- if (fd < 0)
- return -1;
-
- /* Set frequency */
- r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
- if (r < 0) {
- fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
- "error, but for better emulation accuracy type:\n"
- "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
- goto fail;
- }
-
- /* Check capabilities */
- r = ioctl(fd, HPET_INFO, &info);
- if (r < 0)
- goto fail;
-
- /* Enable periodic mode */
- r = ioctl(fd, HPET_EPI, 0);
- if (info.hi_flags && (r < 0))
- goto fail;
-
- /* Enable interrupt */
- r = ioctl(fd, HPET_IE_ON, 0);
- if (r < 0)
- goto fail;
-
- enable_sigio_timer(fd);
- t->priv = (void *)(long)fd;
-
- return 0;
-fail:
- close(fd);
- return -1;
-}
-
-static void hpet_stop_timer(struct qemu_alarm_timer *t)
-{
- int fd = (long)t->priv;
-
- close(fd);
-}
-
-#define TFR(cond) while ((cond) && errno == EINTR) {}
-static int rtc_start_timer(struct qemu_alarm_timer *t)
-{
- int rtc_fd;
- unsigned long current_rtc_freq = 0;
-
- TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
- if (rtc_fd < 0)
- return -1;
- ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
- if (current_rtc_freq != RTC_FREQ &&
- ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
- fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
- "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
- "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
- goto fail;
- }
- if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
- fail:
- close(rtc_fd);
- return -1;
- }
-
- enable_sigio_timer(rtc_fd);
-
- t->priv = (void *)(long)rtc_fd;
-
- return 0;
-}
-
-static void rtc_stop_timer(struct qemu_alarm_timer *t)
-{
- int rtc_fd = (long)t->priv;
-
- close(rtc_fd);
-}
-
static int dynticks_start_timer(struct qemu_alarm_timer *t)
{
struct sigevent ev;
@@ -934,12 +739,6 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t)
#endif /* _WIN32 */
-static void alarm_timer_on_change_state_rearm(void *opaque, int running, int reason)
-{
- if (running)
- qemu_rearm_alarm_timer((struct qemu_alarm_timer *) opaque);
-}
-
int init_timer_alarm(void)
{
struct qemu_alarm_timer *t = NULL;