qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [PATCH 01/13] cuda: add a framework to handle commands


From: David Gibson
Subject: Re: [Qemu-ppc] [PATCH 01/13] cuda: add a framework to handle commands
Date: Mon, 25 Jan 2016 10:10:57 +1100
User-agent: Mutt/1.5.24 (2015-08-30)

On Sat, Jan 23, 2016 at 09:39:58PM +0100, Hervé Poussineau wrote:
> Next commits will port existing CUDA commands to this framework.
> 
> Signed-off-by: Hervé Poussineau <address@hidden>

Reviewed-by: David Gibson <address@hidden>

> ---
>  hw/misc/macio/cuda.c | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
> 
> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
> index 9db4c64..69f69c2 100644
> --- a/hw/misc/macio/cuda.c
> +++ b/hw/misc/macio/cuda.c
> @@ -534,13 +534,47 @@ static void cuda_adb_poll(void *opaque)
>                     (get_ticks_per_sec() / CUDA_ADB_POLL_FREQ));
>  }
>  
> +/* description of commands */
> +typedef struct CudaCommand {
> +    uint8_t command;
> +    const char *name;
> +    bool (*handler)(CUDAState *s,
> +                    const uint8_t *in_args, int in_len,
> +                    uint8_t *out_args, int *out_len);
> +} CudaCommand;
> +
> +static const CudaCommand handlers[] = {
> +};
> +
>  static void cuda_receive_packet(CUDAState *s,
>                                  const uint8_t *data, int len)
>  {
>      uint8_t obuf[16] = { CUDA_PACKET, 0, data[0] };
>      int autopoll;
> +    int i, out_len = 0;
>      uint32_t ti;
>  
> +    for (i = 0; i < ARRAY_SIZE(handlers); i++) {
> +        const CudaCommand *desc = &handlers[i];
> +        if (desc->command == data[0]) {
> +            CUDA_DPRINTF("handling command %s\n", desc->name);
> +            out_len = 0;
> +            if (desc->handler(s, data + 1, len - 1, obuf + 3, &out_len)) {
> +                cuda_send_packet_to_host(s, obuf, 3 + out_len);
> +            } else {
> +                qemu_log_mask(LOG_GUEST_ERROR,
> +                              "CUDA: %s: wrong parameters %d\n",
> +                              desc->name, len);
> +                obuf[0] = ERROR_PACKET;
> +                obuf[1] = 0x5; /* bad parameters */
> +                obuf[2] = CUDA_PACKET;
> +                obuf[3] = data[0];
> +                cuda_send_packet_to_host(s, obuf, 4);
> +            }
> +            return;
> +        }
> +    }
> +
>      switch(data[0]) {
>      case CUDA_AUTOPOLL:
>          autopoll = (data[1] != 0);

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]