Message ID | 1445608598-24485-6-git-send-email-mark.cave-ayland@ilande.co.uk |
---|---|
State | New |
Headers | show |
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:
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 --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:
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(-)