All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: peter.maydell@linaro.org
Cc: aik@ozlabs.ru, mark.cave-ayland@ilande.co.uk, agraf@suse.de,
	qemu-devel@nongnu.org, "Hervé Poussineau" <hpoussin@reactos.org>,
	qemu-ppc@nongnu.org, "David Gibson" <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PULL 16/26] cuda: port SET_DEVICE_LIST command to new framework
Date: Thu, 18 Feb 2016 15:18:37 +1100	[thread overview]
Message-ID: <1455769127-26005-17-git-send-email-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <1455769127-26005-1-git-send-email-david@gibson.dropbear.id.au>

From: Hervé Poussineau <hpoussin@reactos.org>

Also implement the command, by taking device list mask into account
when polling ADB devices.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/input/adb.c         | 18 ++++++++++--------
 hw/misc/macio/cuda.c   | 18 ++++++++++++++++--
 hw/ppc/mac.h           |  1 +
 include/hw/input/adb.h |  2 +-
 4 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/hw/input/adb.c b/hw/input/adb.c
index c384856..f0ad0d4 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -89,7 +89,7 @@ int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
 }
 
 /* XXX: move that to cuda ? */
-int adb_poll(ADBBusState *s, uint8_t *obuf)
+int adb_poll(ADBBusState *s, uint8_t *obuf, uint16_t poll_mask)
 {
     ADBDevice *d;
     int olen, i;
@@ -100,13 +100,15 @@ int adb_poll(ADBBusState *s, uint8_t *obuf)
         if (s->poll_index >= s->nb_devices)
             s->poll_index = 0;
         d = s->devices[s->poll_index];
-        buf[0] = ADB_READREG | (d->devaddr << 4);
-        olen = adb_request(s, obuf + 1, buf, 1);
-        /* if there is data, we poll again the same device */
-        if (olen > 0) {
-            obuf[0] = buf[0];
-            olen++;
-            break;
+        if ((1 << d->devaddr) & poll_mask) {
+            buf[0] = ADB_READREG | (d->devaddr << 4);
+            olen = adb_request(s, obuf + 1, buf, 1);
+            /* if there is data, we poll again the same device */
+            if (olen > 0) {
+                obuf[0] = buf[0];
+                olen++;
+                break;
+            }
         }
         s->poll_index++;
     }
diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 71fd97c..a2e31d0 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -523,7 +523,7 @@ static void cuda_adb_poll(void *opaque)
     uint8_t obuf[ADB_MAX_OUT_LEN + 2];
     int olen;
 
-    olen = adb_poll(&s->adb_bus, obuf + 2);
+    olen = adb_poll(&s->adb_bus, obuf + 2, s->adb_poll_mask);
     if (olen > 0) {
         obuf[0] = ADB_PACKET;
         obuf[1] = 0x40; /* polled data */
@@ -590,9 +590,22 @@ static bool cuda_cmd_set_autorate(CUDAState *s,
     return true;
 }
 
+static bool cuda_cmd_set_device_list(CUDAState *s,
+                                     const uint8_t *in_data, int in_len,
+                                     uint8_t *out_data, int *out_len)
+{
+    if (in_len != 2) {
+        return false;
+    }
+
+    s->adb_poll_mask = (((uint16_t)in_data[0]) << 8) | in_data[1];
+    return true;
+}
+
 static const CudaCommand handlers[] = {
     { CUDA_AUTOPOLL, "AUTOPOLL", cuda_cmd_autopoll },
     { CUDA_SET_AUTO_RATE, "SET_AUTO_RATE",  cuda_cmd_set_autorate },
+    { CUDA_SET_DEVICE_LIST, "SET_DEVICE_LIST", cuda_cmd_set_device_list },
 };
 
 static void cuda_receive_packet(CUDAState *s,
@@ -641,7 +654,6 @@ static void cuda_receive_packet(CUDAState *s,
         cuda_send_packet_to_host(s, obuf, 7);
         return;
     case CUDA_FILE_SERVER_FLAG:
-    case CUDA_SET_DEVICE_LIST:
     case CUDA_SET_POWER_MESSAGES:
         cuda_send_packet_to_host(s, obuf, 3);
         return;
@@ -798,6 +810,7 @@ static const VMStateDescription vmstate_cuda = {
         VMSTATE_INT32(data_out_index, CUDAState),
         VMSTATE_UINT8(autopoll, CUDAState),
         VMSTATE_UINT8(autopoll_rate_ms, CUDAState),
+        VMSTATE_UINT16(adb_poll_mask, CUDAState),
         VMSTATE_BUFFER(data_in, CUDAState),
         VMSTATE_BUFFER(data_out, CUDAState),
         VMSTATE_UINT32(tick_offset, CUDAState),
@@ -852,6 +865,7 @@ static void cuda_realizefn(DeviceState *dev, Error **errp)
 
     s->adb_poll_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, cuda_adb_poll, s);
     s->autopoll_rate_ms = 20;
+    s->adb_poll_mask = 0xffff;
 }
 
 static void cuda_initfn(Object *obj)
diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h
index 887c8c1..5764b86 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;
+    uint16_t adb_poll_mask;
     uint8_t autopoll_rate_ms;
     uint8_t autopoll;
     uint8_t data_in[128];
diff --git a/include/hw/input/adb.h b/include/hw/input/adb.h
index bdfccd4..db51d03 100644
--- a/include/hw/input/adb.h
+++ b/include/hw/input/adb.h
@@ -79,7 +79,7 @@ struct ADBBusState {
 
 int adb_request(ADBBusState *s, uint8_t *buf_out,
                 const uint8_t *buf, int len);
-int adb_poll(ADBBusState *s, uint8_t *buf_out);
+int adb_poll(ADBBusState *s, uint8_t *buf_out, uint16_t poll_mask);
 
 #define TYPE_ADB_KEYBOARD "adb-keyboard"
 #define TYPE_ADB_MOUSE "adb-mouse"
-- 
2.5.0

  parent reply	other threads:[~2016-02-18  4:17 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-18  4:18 [Qemu-devel] [PULL 00/26] ppc-for-2.6 queue 20160218 David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 01/26] hw: fix some debug message format strings David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 02/26] target-ppc: Remove unused kvmppc_update_sdr1() stub David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 03/26] target-ppc: Include missing MMU models for SDR1 in info registers David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 04/26] pseries: Simplify handling of the hash page table fd David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 05/26] pseries: Add helper to calculate recommended hash page table size David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 06/26] pseries: Move hash page table allocation to reset time David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 07/26] target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 08/26] migration: ensure htab_save_first completes after timeout David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 09/26] hw/ppc/spapr: Add h_set_sprg0 hypercall David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 10/26] hw/ppc/spapr: Implement h_set_dabr David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 11/26] hw/ppc/spapr: Implement the h_set_xdabr hypercall David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 12/26] cuda: add a framework to handle commands David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 13/26] cuda: move unknown commands reject out of switch David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 14/26] cuda: port AUTOPOLL command to new framework David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 15/26] cuda: port SET_AUTO_RATE " David Gibson
2016-02-18  4:18 ` David Gibson [this message]
2016-02-18  4:18 ` [Qemu-devel] [PULL 17/26] cuda: port POWERDOWN " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 18/26] cuda: port RESET_SYSTEM " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 19/26] cuda: port FILE_SERVER_FLAG " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 20/26] cuda: port SET_POWER_MESSAGES " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 21/26] cuda: port GET_TIME " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 22/26] cuda: port SET_TIME " David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 23/26] cuda: remove GET_6805_ADDR command David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 24/26] cuda: remove CUDA_GET_SET_IIC/CUDA_COMBINED_FORMAT_IIC commands David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 25/26] pseries: Include missing pseries-2.5 compat properties in pseries-2.4 David Gibson
2016-02-18  4:18 ` [Qemu-devel] [PULL 26/26] hw/ppc/spapr: Halt CPU when powering off via RTAS call David Gibson
2016-02-18 11:20 ` [Qemu-devel] [PULL 00/26] ppc-for-2.6 queue 20160218 Peter Maydell

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=1455769127-26005-17-git-send-email-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=hpoussin@reactos.org \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=peter.maydell@linaro.org \
    --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.