diff mbox

[05/13] cuda.c: fix CUDA_PACKET response packet format

Message ID 1445608598-24485-6-git-send-email-mark.cave-ayland@ilande.co.uk
State New
Headers show

Commit Message

Mark Cave-Ayland Oct. 23, 2015, 1:56 p.m. UTC
According to comments in MOL, the response to a CUDA_PACKET should be one of
the following:

Reply: CUDA_PACKET, status, cmd
Error: ERROR_PACKET, status, CUDA_PACKET, cmd

Update cuda_receive_packet() accordingly to reflect this.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/macio/cuda.c |   24 +++++-------------------
 1 file changed, 5 insertions(+), 19 deletions(-)

Comments

David Gibson Nov. 4, 2015, 3:15 a.m. UTC | #1
On Fri, Oct 23, 2015 at 02:56:30PM +0100, Mark Cave-Ayland wrote:
> According to comments in MOL, the response to a CUDA_PACKET should be one of
> the following:
> 
> Reply: CUDA_PACKET, status, cmd
> Error: ERROR_PACKET, status, CUDA_PACKET, cmd
> 
> Update cuda_receive_packet() accordingly to reflect this.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Code seems to match the description, but I don't have another source
to check what the right thing to do is for CUDA.

> ---
>  hw/misc/macio/cuda.c |   24 +++++-------------------
>  1 file changed, 5 insertions(+), 19 deletions(-)
> 
> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
> index 9ec19af..88a0999 100644
> --- a/hw/misc/macio/cuda.c
> +++ b/hw/misc/macio/cuda.c
> @@ -480,7 +480,7 @@ static void cuda_adb_poll(void *opaque)
>  static void cuda_receive_packet(CUDAState *s,
>                                  const uint8_t *data, int len)
>  {
> -    uint8_t obuf[16];
> +    uint8_t obuf[16] = { CUDA_PACKET, 0, data[0] };
>      int autopoll;
>      uint32_t ti;
>  
> @@ -497,23 +497,15 @@ static void cuda_receive_packet(CUDAState *s,
>                  timer_del(s->adb_poll_timer);
>              }
>          }
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = data[1];
> -        cuda_send_packet_to_host(s, obuf, 2);
> +        cuda_send_packet_to_host(s, obuf, 3);
>          break;
>      case CUDA_SET_TIME:
>          ti = (((uint32_t)data[1]) << 24) + (((uint32_t)data[2]) << 16) + (((uint32_t)data[3]) << 8) + data[4];
>          s->tick_offset = ti - (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = 0;
> -        obuf[2] = 0;
>          cuda_send_packet_to_host(s, obuf, 3);
>          break;
>      case CUDA_GET_TIME:
>          ti = s->tick_offset + (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = 0;
> -        obuf[2] = 0;
>          obuf[3] = ti >> 24;
>          obuf[4] = ti >> 16;
>          obuf[5] = ti >> 8;
> @@ -524,20 +516,14 @@ static void cuda_receive_packet(CUDAState *s,
>      case CUDA_SET_DEVICE_LIST:
>      case CUDA_SET_AUTO_RATE:
>      case CUDA_SET_POWER_MESSAGES:
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = 0;
> -        cuda_send_packet_to_host(s, obuf, 2);
> +        cuda_send_packet_to_host(s, obuf, 3);
>          break;
>      case CUDA_POWERDOWN:
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = 0;
> -        cuda_send_packet_to_host(s, obuf, 2);
> +        cuda_send_packet_to_host(s, obuf, 3);
>          qemu_system_shutdown_request();
>          break;
>      case CUDA_RESET_SYSTEM:
> -        obuf[0] = CUDA_PACKET;
> -        obuf[1] = 0;
> -        cuda_send_packet_to_host(s, obuf, 2);
> +        cuda_send_packet_to_host(s, obuf, 3);
>          qemu_system_reset_request();
>          break;
>      default:
Mark Cave-Ayland Nov. 4, 2015, 10:58 p.m. UTC | #2
On 04/11/15 03:15, David Gibson wrote:

> On Fri, Oct 23, 2015 at 02:56:30PM +0100, Mark Cave-Ayland wrote:
>> According to comments in MOL, the response to a CUDA_PACKET should be one of
>> the following:
>>
>> Reply: CUDA_PACKET, status, cmd
>> Error: ERROR_PACKET, status, CUDA_PACKET, cmd
>>
>> Update cuda_receive_packet() accordingly to reflect this.
>>
>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> 
> Code seems to match the description, but I don't have another source
> to check what the right thing to do is for CUDA.

Again there is no official documentation for this other than the
comments in MOL's src/drivers/via-cuda.c cuda_packet() function :(

>> ---
>>  hw/misc/macio/cuda.c |   24 +++++-------------------
>>  1 file changed, 5 insertions(+), 19 deletions(-)
>>
>> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
>> index 9ec19af..88a0999 100644
>> --- a/hw/misc/macio/cuda.c
>> +++ b/hw/misc/macio/cuda.c
>> @@ -480,7 +480,7 @@ static void cuda_adb_poll(void *opaque)
>>  static void cuda_receive_packet(CUDAState *s,
>>                                  const uint8_t *data, int len)
>>  {
>> -    uint8_t obuf[16];
>> +    uint8_t obuf[16] = { CUDA_PACKET, 0, data[0] };
>>      int autopoll;
>>      uint32_t ti;
>>  
>> @@ -497,23 +497,15 @@ static void cuda_receive_packet(CUDAState *s,
>>                  timer_del(s->adb_poll_timer);
>>              }
>>          }
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = data[1];
>> -        cuda_send_packet_to_host(s, obuf, 2);
>> +        cuda_send_packet_to_host(s, obuf, 3);
>>          break;
>>      case CUDA_SET_TIME:
>>          ti = (((uint32_t)data[1]) << 24) + (((uint32_t)data[2]) << 16) + (((uint32_t)data[3]) << 8) + data[4];
>>          s->tick_offset = ti - (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = 0;
>> -        obuf[2] = 0;
>>          cuda_send_packet_to_host(s, obuf, 3);
>>          break;
>>      case CUDA_GET_TIME:
>>          ti = s->tick_offset + (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = 0;
>> -        obuf[2] = 0;
>>          obuf[3] = ti >> 24;
>>          obuf[4] = ti >> 16;
>>          obuf[5] = ti >> 8;
>> @@ -524,20 +516,14 @@ static void cuda_receive_packet(CUDAState *s,
>>      case CUDA_SET_DEVICE_LIST:
>>      case CUDA_SET_AUTO_RATE:
>>      case CUDA_SET_POWER_MESSAGES:
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = 0;
>> -        cuda_send_packet_to_host(s, obuf, 2);
>> +        cuda_send_packet_to_host(s, obuf, 3);
>>          break;
>>      case CUDA_POWERDOWN:
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = 0;
>> -        cuda_send_packet_to_host(s, obuf, 2);
>> +        cuda_send_packet_to_host(s, obuf, 3);
>>          qemu_system_shutdown_request();
>>          break;
>>      case CUDA_RESET_SYSTEM:
>> -        obuf[0] = CUDA_PACKET;
>> -        obuf[1] = 0;
>> -        cuda_send_packet_to_host(s, obuf, 2);
>> +        cuda_send_packet_to_host(s, obuf, 3);
>>          qemu_system_reset_request();
>>          break;
>>      default:


ATB,

Mark.
diff mbox

Patch

diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 9ec19af..88a0999 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -480,7 +480,7 @@  static void cuda_adb_poll(void *opaque)
 static void cuda_receive_packet(CUDAState *s,
                                 const uint8_t *data, int len)
 {
-    uint8_t obuf[16];
+    uint8_t obuf[16] = { CUDA_PACKET, 0, data[0] };
     int autopoll;
     uint32_t ti;
 
@@ -497,23 +497,15 @@  static void cuda_receive_packet(CUDAState *s,
                 timer_del(s->adb_poll_timer);
             }
         }
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = data[1];
-        cuda_send_packet_to_host(s, obuf, 2);
+        cuda_send_packet_to_host(s, obuf, 3);
         break;
     case CUDA_SET_TIME:
         ti = (((uint32_t)data[1]) << 24) + (((uint32_t)data[2]) << 16) + (((uint32_t)data[3]) << 8) + data[4];
         s->tick_offset = ti - (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = 0;
-        obuf[2] = 0;
         cuda_send_packet_to_host(s, obuf, 3);
         break;
     case CUDA_GET_TIME:
         ti = s->tick_offset + (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / get_ticks_per_sec());
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = 0;
-        obuf[2] = 0;
         obuf[3] = ti >> 24;
         obuf[4] = ti >> 16;
         obuf[5] = ti >> 8;
@@ -524,20 +516,14 @@  static void cuda_receive_packet(CUDAState *s,
     case CUDA_SET_DEVICE_LIST:
     case CUDA_SET_AUTO_RATE:
     case CUDA_SET_POWER_MESSAGES:
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = 0;
-        cuda_send_packet_to_host(s, obuf, 2);
+        cuda_send_packet_to_host(s, obuf, 3);
         break;
     case CUDA_POWERDOWN:
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = 0;
-        cuda_send_packet_to_host(s, obuf, 2);
+        cuda_send_packet_to_host(s, obuf, 3);
         qemu_system_shutdown_request();
         break;
     case CUDA_RESET_SYSTEM:
-        obuf[0] = CUDA_PACKET;
-        obuf[1] = 0;
-        cuda_send_packet_to_host(s, obuf, 2);
+        cuda_send_packet_to_host(s, obuf, 3);
         qemu_system_reset_request();
         break;
     default: