From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JnZ0u-0003By-Dy for qemu-devel@nongnu.org; Sun, 20 Apr 2008 08:51:24 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JnZ0s-0003B2-S5 for qemu-devel@nongnu.org; Sun, 20 Apr 2008 08:51:23 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JnZ0s-0003Az-N3 for qemu-devel@nongnu.org; Sun, 20 Apr 2008 08:51:22 -0400 Received: from fg-out-1718.google.com ([72.14.220.159]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JnZ0s-00036g-6n for qemu-devel@nongnu.org; Sun, 20 Apr 2008 08:51:22 -0400 Received: by fg-out-1718.google.com with SMTP id e12so1191104fga.8 for ; Sun, 20 Apr 2008 05:51:20 -0700 (PDT) Message-ID: <1b44819d0804200551g7fde21f7p39a9f1584d143df2@mail.gmail.com> Date: Sun, 20 Apr 2008 13:51:19 +0100 From: "coolman coolx" MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_8183_12257968.1208695879424" Subject: [Qemu-devel] unsubscribe Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_8183_12257968.1208695879424 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thu, Apr 17, 2008 at 12:07 AM, Andrzej Zaborowski wrote: > Revision: 4216 > http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4216 > Author: balrog > Date: 2008-04-16 23:07:32 +0000 (Wed, 16 Apr 2008) > > Log Message: > ----------- > Use qemu time/date functions for the Menelaus RTC. > > Modified Paths: > -------------- > trunk/hw/twl92230.c > > Modified: trunk/hw/twl92230.c > =================================================================== > --- trunk/hw/twl92230.c 2008-04-14 21:57:44 UTC (rev 4215) > +++ trunk/hw/twl92230.c 2008-04-16 23:07:32 UTC (rev 4216) > @@ -59,9 +59,9 @@ > struct tm tm; > struct tm new; > struct tm alm; > - time_t sec; > - time_t alm_sec; > - time_t next_comp; > + int sec_offset; > + int alm_sec; > + int next_comp; > struct tm *(*gettime)(const time_t *timep, struct tm *result); > } rtc; > qemu_irq handler[3]; > @@ -91,20 +91,21 @@ > > static void menelaus_rtc_update(struct menelaus_s *s) > { > - s->rtc.gettime(&s->rtc.sec, &s->rtc.tm); > + qemu_get_timedate(&s->rtc.tm, s->rtc.sec_offset); > } > > static void menelaus_alm_update(struct menelaus_s *s) > { > if ((s->rtc.ctrl & 3) == 3) > - s->rtc.alm_sec = mktime(&s->rtc.alm); > + s->rtc.alm_sec = qemu_timedate_diff(&s->rtc.alm) - > s->rtc.sec_offset; > } > > static void menelaus_rtc_hz(void *opaque) > { > struct menelaus_s *s = (struct menelaus_s *) opaque; > > - s->rtc.sec ++; > + s->rtc.next_comp --; > + s->rtc.alm_sec --; > s->rtc.next += 1000; > qemu_mod_timer(s->rtc.hz, s->rtc.next); > if ((s->rtc.ctrl >> 3) & 3) { /* EVERY */ > @@ -118,13 +119,13 @@ > } else > s->status |= 1 << 8; /* RTCTMR > */ > if ((s->rtc.ctrl >> 1) & 1) { /* > RTC_AL_EN */ > - if (s->rtc.sec == s->rtc.alm_sec) > + if (s->rtc.alm_sec == 0) > s->status |= 1 << 9; /* RTCALM > */ > /* TODO: wake-up */ > } > - if (s->rtc.next_comp >= s->rtc.sec) { > + if (s->rtc.next_comp <= 0) { > s->rtc.next -= muldiv64((int16_t) s->rtc.comp, 1000, 0x8000); > - s->rtc.next_comp = s->rtc.sec + 3600; > + s->rtc.next_comp = 3600; > } > menelaus_update(s); > } > @@ -132,7 +133,6 @@ > void menelaus_reset(i2c_slave *i2c) > { > struct menelaus_s *s = (struct menelaus_s *) i2c; > - time_t ti; > s->reg = 0x00; > > s->vcore[0] = 0x0c; /* XXX: X-loader needs 0x8c? check! */ > @@ -169,14 +169,14 @@ > s->mmc_ctrl[2] = 0x00; > s->mmc_debounce = 0x05; > > - time(&ti); > if (s->rtc.ctrl & 1) > menelaus_rtc_stop(s); > s->rtc.ctrl = 0x00; > s->rtc.comp = 0x0000; > s->rtc.next = 1000; > - s->rtc.sec = ti; > - s->rtc.next_comp = s->rtc.sec + 1800; > + s->rtc.sec_offset = 0; > + s->rtc.next_comp = 1800; > + s->rtc.alm_sec = 1800; > s->rtc.alm.tm_sec = 0x00; > s->rtc.alm.tm_min = 0x00; > s->rtc.alm.tm_hour = 0x00; > @@ -627,7 +627,7 @@ > s->status |= 1 << 10; /* RTCERR > */ > menelaus_update(s); > } > - s->rtc.sec += difftime(mktime(&tm), mktime(&s->rtc.tm)); > + s->rtc.sec_offset = qemu_timedate_diff(&tm); > break; > case MENELAUS_RTC_SEC: > s->rtc.tm.tm_sec = from_bcd(value & 0x7f); > @@ -888,9 +888,6 @@ > s->i2c.recv = menelaus_rx; > s->i2c.send = menelaus_tx; > > - /* TODO: use the qemu gettime functions */ > - s->rtc.gettime = localtime_r; > - > s->irq = irq; > s->rtc.hz = qemu_new_timer(rt_clock, menelaus_rtc_hz, s); > s->in = qemu_allocate_irqs(menelaus_gpio_set, s, 3); > > > > > ------=_Part_8183_12257968.1208695879424 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline

On Thu, Apr 17, 2008 at 12:07 AM, Andrzej Zaborowski <balrogg@gmail.com> wrote:
Revision: 4216
         http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4216
Author:   balrog
Date:     2008-04-16 23:07:32 +0000 (Wed, 16 Apr 2008)

Log Message:
-----------
Use qemu time/date functions for the Menelaus RTC.

Modified Paths:
--------------
   trunk/hw/twl92230.c

Modified: trunk/hw/twl92230.c
===================================================================
--- trunk/hw/twl92230.c 2008-04-14 21:57:44 UTC (rev 4215)
+++ trunk/hw/twl92230.c 2008-04-16 23:07:32 UTC (rev 4216)
@@ -59,9 +59,9 @@
        struct tm tm;
        struct tm new;
        struct tm alm;
-        time_t sec;
-        time_t alm_sec;
-        time_t next_comp;
+        int sec_offset;
+        int alm_sec;
+        int next_comp;
        struct tm *(*gettime)(const time_t *timep, struct tm *result);
    } rtc;
    qemu_irq handler[3];
@@ -91,20 +91,21 @@

 static void menelaus_rtc_update(struct menelaus_s *s)
 {
-    s->rtc.gettime(&s->rtc.sec, &s->rtc.tm);
+    qemu_get_timedate(&s->rtc.tm, s->rtc.sec_offset);
 }

 static void menelaus_alm_update(struct menelaus_s *s)
 {
    if ((s->rtc.ctrl & 3) == 3)
-        s->rtc.alm_sec = mktime(&s->rtc.alm);
+        s->rtc.alm_sec = qemu_timedate_diff(&s->rtc.alm) - s->rtc.sec_offset;
 }

 static void menelaus_rtc_hz(void *opaque)
 {
    struct menelaus_s *s = (struct menelaus_s *) opaque;

-    s->rtc.sec ++;
+    s->rtc.next_comp --;
+    s->rtc.alm_sec --;
    s->rtc.next += 1000;
    qemu_mod_timer(s->rtc.hz, s->rtc.next);
    if ((s->rtc.ctrl >> 3) & 3) {                              /* EVERY */
@@ -118,13 +119,13 @@
    } else
        s->status |= 1 << 8;                                   /* RTCTMR */
    if ((s->rtc.ctrl >> 1) & 1) {                              /* RTC_AL_EN */
-        if (s->rtc.sec == s->rtc.alm_sec)
+        if (s->rtc.alm_sec == 0)
            s->status |= 1 << 9;                               /* RTCALM */
        /* TODO: wake-up */
    }
-    if (s->rtc.next_comp >= s->rtc.sec) {
+    if (s->rtc.next_comp <= 0) {
        s->rtc.next -= muldiv64((int16_t) s->rtc.comp, 1000, 0x8000);
-        s->rtc.next_comp = s->rtc.sec + 3600;
+        s->rtc.next_comp = 3600;
    }
    menelaus_update(s);
 }
@@ -132,7 +133,6 @@
 void menelaus_reset(i2c_slave *i2c)
 {
    struct menelaus_s *s = (struct menelaus_s *) i2c;
-    time_t ti;
    s->reg = 0x00;

    s->vcore[0] = 0x0c;        /* XXX: X-loader needs 0x8c? check!  */
@@ -169,14 +169,14 @@
    s->mmc_ctrl[2] = 0x00;
    s->mmc_debounce = 0x05;

-    time(&ti);
    if (s->rtc.ctrl & 1)
        menelaus_rtc_stop(s);
    s->rtc.ctrl = 0x00;
    s->rtc.comp = 0x0000;
    s->rtc.next = 1000;
-    s->rtc.sec = ti;
-    s->rtc.next_comp = s->rtc.sec + 1800;
+    s->rtc.sec_offset = 0;
+    s->rtc.next_comp = 1800;
+    s->rtc.alm_sec = 1800;
    s->rtc.alm.tm_sec = 0x00;
    s->rtc.alm.tm_min = 0x00;
    s->rtc.alm.tm_hour = 0x00;
@@ -627,7 +627,7 @@
            s->status |= 1 << 10;                              /* RTCERR */
            menelaus_update(s);
        }
-        s->rtc.sec += difftime(mktime(&tm), mktime(&s->rtc.tm));
+        s->rtc.sec_offset = qemu_timedate_diff(&tm);
        break;
    case MENELAUS_RTC_SEC:
        s->rtc.tm.tm_sec = from_bcd(value & 0x7f);
@@ -888,9 +888,6 @@
    s->i2c.recv = menelaus_rx;
    s->i2c.send = menelaus_tx;

-    /* TODO: use the qemu gettime functions */
-    s->rtc.gettime = localtime_r;
-
    s->irq = irq;
    s->rtc.hz = qemu_new_timer(rt_clock, menelaus_rtc_hz, s);
    s->in = qemu_allocate_irqs(menelaus_gpio_set, s, 3);





------=_Part_8183_12257968.1208695879424--