qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH] mipsnet incorrect device ID fix


From: Vijay Kumar
Subject: [Qemu-devel] [PATCH] mipsnet incorrect device ID fix
Date: Fri, 22 Feb 2008 06:16:25 +0530
User-agent: Icedove 1.5.0.12 (X11/20070607)

The mipsnet device returns wrong values for device ID, since it returns the contents of the pointer rather that the contents of the device ID string. Also the contents of the string is returned such that the order is host endianess dependent. The patch fixes both these issues.

Signed-off-by: Vijay Kumar B. <address@hidden>

--- qemu-orig/hw/mipsnet.c      2007-12-27 11:18:52.000000000 +0530
+++ qemu-mod/hw/mipsnet.c       2008-02-20 20:23:44.000000000 +0530
@@ -101,6 +101,19 @@
     mipsnet_update_irq(s);
 }

+static uint32_t bytes_to_int32(const unsigned char *arr)
+{
+    int i;
+    uint32_t ret = 0;
+    int nbytes = sizeof(int32_t);
+
+    for (i = 0; i < nbytes; i++) {
+       ret = ret << 8 | arr[nbytes - 1 - i];
+    }
+
+    return ret;
+}
+
 static uint32_t mipsnet_ioport_read(void *opaque, uint32_t addr)
 {
     MIPSnetState *s = opaque;
@@ -110,10 +123,10 @@
     addr &= 0x3f;
     switch (addr) {
     case MIPSNET_DEV_ID:
-       ret = *((uint32_t *)&devid);
+       ret = bytes_to_int32(devid);
         break;
     case MIPSNET_DEV_ID + 4:
-       ret = *((uint32_t *)(&devid + 4));
+       ret = bytes_to_int32(devid + 4);
         break;
     case MIPSNET_BUSY:
        ret = s->busy;




reply via email to

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