All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Hervé Poussineau" <hpoussin@reactos.org>
To: qemu-devel@nongnu.org
Cc: "Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Alexander Graf" <agraf@suse.de>,
	"Alyssa Milburn" <fuzzie@fuzzie.org>,
	"Hervé Poussineau" <hpoussin@reactos.org>,
	qemu-ppc@nongnu.org, "David Gibson" <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PATCH 04/13] cuda: port SET_AUTO_RATE command to new framework
Date: Sat, 23 Jan 2016 21:40:01 +0100	[thread overview]
Message-ID: <1453581610-23179-5-git-send-email-hpoussin@reactos.org> (raw)
In-Reply-To: <1453581610-23179-1-git-send-email-hpoussin@reactos.org>

Take requested autopoll rate into account

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/misc/macio/cuda.c | 31 +++++++++++++++++++++++++++----
 hw/ppc/mac.h         |  1 +
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 37406fc..9ec642f 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -105,7 +105,6 @@
 #define CUDA_COMBINED_FORMAT_IIC	0x25
 
 #define CUDA_TIMER_FREQ (4700000 / 6)
-#define CUDA_ADB_POLL_FREQ 50
 
 /* CUDA returns time_t's offset from Jan 1, 1904, not 1970 */
 #define RTC_OFFSET                      2082844800
@@ -531,7 +530,7 @@ static void cuda_adb_poll(void *opaque)
     }
     timer_mod(s->adb_poll_timer,
                    qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
-                   (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ));
+                   (get_ticks_per_sec() / (1000 / s->auto_rate_ms)));
 }
 
 /* description of commands */
@@ -559,7 +558,7 @@ static bool cuda_cmd_autopoll(CUDAState *s,
         if (autopoll) {
             timer_mod(s->adb_poll_timer,
                       qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
-                      (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ));
+                      (get_ticks_per_sec() / (1000 / s->auto_rate_ms)));
         } else {
             timer_del(s->adb_poll_timer);
         }
@@ -567,8 +566,32 @@ static bool cuda_cmd_autopoll(CUDAState *s,
     return true;
 }
 
+static bool cuda_cmd_set_autorate(CUDAState *s,
+                                  const uint8_t *in_data, int in_len,
+                                  uint8_t *out_data, int *out_len)
+{
+    if (in_len != 1) {
+        return false;
+    }
+
+    /* we don't want a period of 0 ms */
+    /* FIXME: check what real hardware does */
+    if (in_data[0] == 0) {
+        return;
+    }
+
+    s->auto_rate_ms = in_data[0];
+    if (s->autopoll) {
+        timer_mod(s->adb_poll_timer,
+                  qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
+                  (get_ticks_per_sec() / (1000 / s->auto_rate_ms)));
+    }
+    return true;
+}
+
 static const CudaCommand handlers[] = {
     { CUDA_AUTOPOLL, "AUTOPOLL", cuda_cmd_autopoll },
+    { CUDA_SET_AUTO_RATE, "SET_AUTO_RATE",  cuda_cmd_set_autorate },
 };
 
 static void cuda_receive_packet(CUDAState *s,
@@ -618,7 +641,6 @@ static void cuda_receive_packet(CUDAState *s,
         return;
     case CUDA_FILE_SERVER_FLAG:
     case CUDA_SET_DEVICE_LIST:
-    case CUDA_SET_AUTO_RATE:
     case CUDA_SET_POWER_MESSAGES:
         cuda_send_packet_to_host(s, obuf, 3);
         return;
@@ -824,6 +846,7 @@ static void cuda_realizefn(DeviceState *dev, Error **errp)
     s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
 
     s->adb_poll_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, cuda_adb_poll, s);
+    s->auto_rate_ms = 20;
 }
 
 static void cuda_initfn(Object *obj)
diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h
index e375ed2..90fcb69 100644
--- a/hw/ppc/mac.h
+++ b/hw/ppc/mac.h
@@ -111,6 +111,7 @@ typedef struct CUDAState {
     int data_out_index;
 
     qemu_irq irq;
+    uint8_t auto_rate_ms;
     uint8_t autopoll;
     uint8_t data_in[128];
     uint8_t data_out[16];
-- 
2.1.4

  parent reply	other threads:[~2016-01-23 20:41 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-23 20:39 [Qemu-devel] [PATCH 00/13] cuda: misc fixes and cleanups Hervé Poussineau
2016-01-23 20:39 ` [Qemu-devel] [PATCH 01/13] cuda: add a framework to handle commands Hervé Poussineau
2016-01-24 23:10   ` David Gibson
2016-01-23 20:39 ` [Qemu-devel] [PATCH 02/13] cuda: reject unknown commands Hervé Poussineau
2016-01-24 23:12   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 03/13] cuda: port AUTOPOLL command to new framework Hervé Poussineau
2016-01-24 23:13   ` David Gibson
2016-01-23 20:40 ` Hervé Poussineau [this message]
2016-01-24 18:33   ` [Qemu-devel] [PATCH 04/13] cuda: port SET_AUTO_RATE " Hervé Poussineau
2016-01-24 23:21   ` David Gibson
2016-02-07 19:27   ` Mark Cave-Ayland
2016-01-23 20:40 ` [Qemu-devel] [PATCH 05/13] cuda: port SET_DEVICE_LIST " Hervé Poussineau
2016-01-24 23:23   ` David Gibson
2016-02-07 19:35   ` Mark Cave-Ayland
2016-01-23 20:40 ` [Qemu-devel] [PATCH 06/13] cuda: port POWERDOWN " Hervé Poussineau
2016-01-24 23:24   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 07/13] cuda: port RESET_SYSTEM " Hervé Poussineau
2016-01-24 23:24   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 08/13] cuda: port FILE_SERVER_FLAG " Hervé Poussineau
2016-01-24 23:25   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 09/13] cuda: port SET_POWER_MESSAGES " Hervé Poussineau
2016-01-24 23:26   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 10/13] cuda: port GET_TIME " Hervé Poussineau
2016-01-24 23:27   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 11/13] cuda: port SET_TIME " Hervé Poussineau
2016-01-24 23:27   ` David Gibson
2016-01-23 20:40 ` [Qemu-devel] [PATCH 12/13] cuda: remove GET_6805_ADDR command Hervé Poussineau
2016-01-25  8:35   ` Alyssa Milburn
2016-01-25  8:48     ` Mark Cave-Ayland
2016-01-25  9:51       ` Alyssa Milburn
2016-01-23 20:40 ` [Qemu-devel] [PATCH 13/13] cuda: remove CUDA_GET_SET_IIC/CUDA_COMBINED_FORMAT_IIC commands Hervé Poussineau
2016-01-25 10:00   ` Alyssa Milburn
2016-01-24 23:29 ` [Qemu-devel] [PATCH 00/13] cuda: misc fixes and cleanups David Gibson
2016-01-25  9:58 ` Alyssa Milburn
2016-01-25 13:08   ` Mark Cave-Ayland
2016-01-25 22:08   ` Hervé Poussineau
2016-01-26 11:32     ` [Qemu-devel] [Qemu-ppc] " BALATON Zoltan
2016-01-27 22:35       ` Hervé Poussineau
2016-01-28  1:45         ` BALATON Zoltan
2016-01-28 13:43           ` Hervé Poussineau
2016-02-04 20:15 ` [Qemu-devel] " Alyssa Milburn
2016-02-06 13:32 ` Mark Cave-Ayland
2016-02-06 14:30   ` Hervé Poussineau
2016-02-07 19:50     ` Mark Cave-Ayland
2016-02-07 20:38       ` Hervé Poussineau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1453581610-23179-5-git-send-email-hpoussin@reactos.org \
    --to=hpoussin@reactos.org \
    --cc=agraf@suse.de \
    --cc=david@gibson.dropbear.id.au \
    --cc=fuzzie@fuzzie.org \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.