diff mbox

[07/13] cuda.c: implement dummy IIC access commands

Message ID 1445608598-24485-8-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
These are used by MacOS 9 on boot. Here we return an error except for 4-byte
commands which write to the IIC bus.

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

Comments

David Gibson Nov. 4, 2015, 3:17 a.m. UTC | #1
On Fri, Oct 23, 2015 at 02:56:32PM +0100, Mark Cave-Ayland wrote:
> These are used by MacOS 9 on boot. Here we return an error except for 4-byte
> commands which write to the IIC bus.

A bit of rationale about why some of these give errors and some don't
would be nice.

> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/macio/cuda.c |   18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
> index 4fe901b..d3ec58a 100644
> --- a/hw/misc/macio/cuda.c
> +++ b/hw/misc/macio/cuda.c
> @@ -529,6 +529,24 @@ static void cuda_receive_packet(CUDAState *s,
>          cuda_send_packet_to_host(s, obuf, 3);
>          qemu_system_reset_request();
>          break;
> +    case CUDA_COMBINED_FORMAT_IIC:
> +        obuf[0] = ERROR_PACKET;
> +        obuf[1] = 0x5;
> +        obuf[2] = CUDA_PACKET;
> +        obuf[3] = data[0];
> +        cuda_send_packet_to_host(s, obuf, 4);
> +        break;
> +    case CUDA_GET_SET_IIC:
> +        if (len == 4) {
> +            cuda_send_packet_to_host(s, obuf, 3);
> +        } else {
> +            obuf[0] = ERROR_PACKET;
> +            obuf[1] = 0x2;
> +            obuf[2] = CUDA_PACKET;
> +            obuf[3] = data[0];
> +            cuda_send_packet_to_host(s, obuf, 4);
> +        }
> +        break;
>      default:
>          break;
>      }
Mark Cave-Ayland Nov. 4, 2015, 11:03 p.m. UTC | #2
On 04/11/15 03:17, David Gibson wrote:

> On Fri, Oct 23, 2015 at 02:56:32PM +0100, Mark Cave-Ayland wrote:
>> These are used by MacOS 9 on boot. Here we return an error except for 4-byte
>> commands which write to the IIC bus.
> 
> A bit of rationale about why some of these give errors and some don't
> would be nice.

This was another change inspired by the relevant code in MOL. There are
comments suggesting that the 3 byte packet format is a (iicAddr, iicReg,
iicData) tuple which I could add in if required? Then again it seems the
MacOS 9 code just needs to receive some kind of reply in order for boot
to proceed, rather than the values actually doing anything.

>>
>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>> ---
>>  hw/misc/macio/cuda.c |   18 ++++++++++++++++++
>>  1 file changed, 18 insertions(+)
>>
>> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
>> index 4fe901b..d3ec58a 100644
>> --- a/hw/misc/macio/cuda.c
>> +++ b/hw/misc/macio/cuda.c
>> @@ -529,6 +529,24 @@ static void cuda_receive_packet(CUDAState *s,
>>          cuda_send_packet_to_host(s, obuf, 3);
>>          qemu_system_reset_request();
>>          break;
>> +    case CUDA_COMBINED_FORMAT_IIC:
>> +        obuf[0] = ERROR_PACKET;
>> +        obuf[1] = 0x5;
>> +        obuf[2] = CUDA_PACKET;
>> +        obuf[3] = data[0];
>> +        cuda_send_packet_to_host(s, obuf, 4);
>> +        break;
>> +    case CUDA_GET_SET_IIC:
>> +        if (len == 4) {
>> +            cuda_send_packet_to_host(s, obuf, 3);
>> +        } else {
>> +            obuf[0] = ERROR_PACKET;
>> +            obuf[1] = 0x2;
>> +            obuf[2] = CUDA_PACKET;
>> +            obuf[3] = data[0];
>> +            cuda_send_packet_to_host(s, obuf, 4);
>> +        }
>> +        break;
>>      default:
>>          break;
>>      }
> 

ATB,

Mark.
diff mbox

Patch

diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 4fe901b..d3ec58a 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -529,6 +529,24 @@  static void cuda_receive_packet(CUDAState *s,
         cuda_send_packet_to_host(s, obuf, 3);
         qemu_system_reset_request();
         break;
+    case CUDA_COMBINED_FORMAT_IIC:
+        obuf[0] = ERROR_PACKET;
+        obuf[1] = 0x5;
+        obuf[2] = CUDA_PACKET;
+        obuf[3] = data[0];
+        cuda_send_packet_to_host(s, obuf, 4);
+        break;
+    case CUDA_GET_SET_IIC:
+        if (len == 4) {
+            cuda_send_packet_to_host(s, obuf, 3);
+        } else {
+            obuf[0] = ERROR_PACKET;
+            obuf[1] = 0x2;
+            obuf[2] = CUDA_PACKET;
+            obuf[3] = data[0];
+            cuda_send_packet_to_host(s, obuf, 4);
+        }
+        break;
     default:
         break;
     }