Commit e918ee04e96dd2d8809cf9d78c14a4d900001211

Authored by ths
1 parent afcc3cdf

Big endian byte swap for serial mmapped interface.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2946 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 18 additions and 4 deletions
hw/serial.c
@@ -384,30 +384,44 @@ void serial_mm_writeb (void *opaque, @@ -384,30 +384,44 @@ void serial_mm_writeb (void *opaque,
384 uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr) 384 uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr)
385 { 385 {
386 SerialState *s = opaque; 386 SerialState *s = opaque;
  387 + uint32_t val;
387 388
388 - return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF; 389 + val = serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
  390 +#ifdef TARGET_WORDS_BIGENDIAN
  391 + val = bswap16(val);
  392 +#endif
  393 + return val;
389 } 394 }
390 395
391 void serial_mm_writew (void *opaque, 396 void serial_mm_writew (void *opaque,
392 target_phys_addr_t addr, uint32_t value) 397 target_phys_addr_t addr, uint32_t value)
393 { 398 {
394 SerialState *s = opaque; 399 SerialState *s = opaque;
395 - 400 +#ifdef TARGET_WORDS_BIGENDIAN
  401 + value = bswap16(value);
  402 +#endif
396 serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF); 403 serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
397 } 404 }
398 405
399 uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr) 406 uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr)
400 { 407 {
401 SerialState *s = opaque; 408 SerialState *s = opaque;
  409 + uint32_t val;
402 410
403 - return serial_ioport_read(s, (addr - s->base) >> s->it_shift); 411 + val = serial_ioport_read(s, (addr - s->base) >> s->it_shift);
  412 +#ifdef TARGET_WORDS_BIGENDIAN
  413 + val = bswap32(val);
  414 +#endif
  415 + return val;
404 } 416 }
405 417
406 void serial_mm_writel (void *opaque, 418 void serial_mm_writel (void *opaque,
407 target_phys_addr_t addr, uint32_t value) 419 target_phys_addr_t addr, uint32_t value)
408 { 420 {
409 SerialState *s = opaque; 421 SerialState *s = opaque;
410 - 422 +#ifdef TARGET_WORDS_BIGENDIAN
  423 + value = bswap32(value);
  424 +#endif
411 serial_ioport_write(s, (addr - s->base) >> s->it_shift, value); 425 serial_ioport_write(s, (addr - s->base) >> s->it_shift, value);
412 } 426 }
413 427