OSDN Git Service

Sparc64: byte swap IO port access
authorBlue Swirl <blauwirbel@gmail.com>
Fri, 29 Jan 2010 18:15:21 +0000 (18:15 +0000)
committerBlue Swirl <blauwirbel@gmail.com>
Fri, 29 Jan 2010 18:15:21 +0000 (18:15 +0000)
This requires an updated OpenBIOS image.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
hw/apb_pci.c

index 7f458c6..2b838ed 100644 (file)
@@ -189,13 +189,13 @@ static void pci_apb_iowriteb (void *opaque, target_phys_addr_t addr,
 static void pci_apb_iowritew (void *opaque, target_phys_addr_t addr,
                                   uint32_t val)
 {
-    cpu_outw(addr & IOPORTS_MASK, val);
+    cpu_outw(addr & IOPORTS_MASK, bswap16(val));
 }
 
 static void pci_apb_iowritel (void *opaque, target_phys_addr_t addr,
                                 uint32_t val)
 {
-    cpu_outl(addr & IOPORTS_MASK, val);
+    cpu_outl(addr & IOPORTS_MASK, bswap32(val));
 }
 
 static uint32_t pci_apb_ioreadb (void *opaque, target_phys_addr_t addr)
@@ -210,7 +210,7 @@ static uint32_t pci_apb_ioreadw (void *opaque, target_phys_addr_t addr)
 {
     uint32_t val;
 
-    val = cpu_inw(addr & IOPORTS_MASK);
+    val = bswap16(cpu_inw(addr & IOPORTS_MASK));
     return val;
 }
 
@@ -218,7 +218,7 @@ static uint32_t pci_apb_ioreadl (void *opaque, target_phys_addr_t addr)
 {
     uint32_t val;
 
-    val = cpu_inl(addr & IOPORTS_MASK);
+    val = bswap32(cpu_inl(addr & IOPORTS_MASK));
     return val;
 }