qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 2/2] serial: Declare as little endian


From: Alexander Graf
Subject: [Qemu-devel] Re: [PATCH 2/2] serial: Declare as little endian
Date: Sun, 19 Dec 2010 16:25:21 +0100

On 19.12.2010, at 11:46, Blue Swirl wrote:

> This patch replaces explicit bswaps with endianness hints to the
> mmio layer.
> 
> CC: Alexander Graf <address@hidden>
> Signed-off-by: Blue Swirl <address@hidden>
> ---
> hw/serial.c |   86 ++++++++++++----------------------------------------------
> 1 files changed, 18 insertions(+), 68 deletions(-)
> 
> diff --git a/hw/serial.c b/hw/serial.c
> index 2c4af61..70ae26a 100644
> --- a/hw/serial.c
> +++ b/hw/serial.c
> @@ -839,53 +839,24 @@ static void serial_mm_writeb(void *opaque,
> target_phys_addr_t addr,
>     serial_ioport_write(s, addr >> s->it_shift, value & 0xFF);
> }
> 
> -static uint32_t serial_mm_readw_be(void *opaque, target_phys_addr_t addr)
> +static uint32_t serial_mm_readw(void *opaque, target_phys_addr_t addr)
> {
>     SerialState *s = opaque;
>     uint32_t val;
> 
>     val = serial_ioport_read(s, addr >> s->it_shift) & 0xFFFF;
> -    val = bswap16(val);
>     return val;
> }
> 
> -static uint32_t serial_mm_readw_le(void *opaque, target_phys_addr_t addr)
> -{
> -    SerialState *s = opaque;
> -    uint32_t val;
> -
> -    val = serial_ioport_read(s, addr >> s->it_shift) & 0xFFFF;
> -    return val;
> -}
> -
> -static void serial_mm_writew_be(void *opaque, target_phys_addr_t addr,
> -                                uint32_t value)
> -{
> -    SerialState *s = opaque;
> -
> -    value = bswap16(value);
> -    serial_ioport_write(s, addr >> s->it_shift, value & 0xFFFF);
> -}
> -
> -static void serial_mm_writew_le(void *opaque, target_phys_addr_t addr,
> -                                uint32_t value)
> +static void serial_mm_writew(void *opaque, target_phys_addr_t addr,
> +                             uint32_t value)
> {
>     SerialState *s = opaque;
> 
>     serial_ioport_write(s, addr >> s->it_shift, value & 0xFFFF);
> }
> 
> -static uint32_t serial_mm_readl_be(void *opaque, target_phys_addr_t addr)
> -{
> -    SerialState *s = opaque;
> -    uint32_t val;
> -
> -    val = serial_ioport_read(s, addr >> s->it_shift);
> -    val = bswap32(val);
> -    return val;
> -}
> -
> -static uint32_t serial_mm_readl_le(void *opaque, target_phys_addr_t addr)
> +static uint32_t serial_mm_readl(void *opaque, target_phys_addr_t addr)
> {
>     SerialState *s = opaque;
>     uint32_t val;
> @@ -894,45 +865,24 @@ static uint32_t serial_mm_readl_le(void *opaque,
> target_phys_addr_t addr)
>     return val;
> }
> 
> -static void serial_mm_writel_be(void *opaque, target_phys_addr_t addr,
> -                                uint32_t value)
> -{
> -    SerialState *s = opaque;
> -
> -    value = bswap32(value);
> -    serial_ioport_write(s, addr >> s->it_shift, value);
> -}
> -
> -static void serial_mm_writel_le(void *opaque, target_phys_addr_t addr,
> -                                uint32_t value)
> +static void serial_mm_writel(void *opaque, target_phys_addr_t addr,
> +                             uint32_t value)
> {
>     SerialState *s = opaque;
> 
>     serial_ioport_write(s, addr >> s->it_shift, value);
> }
> 
> -static CPUReadMemoryFunc * const serial_mm_read_be[] = {
> -    &serial_mm_readb,
> -    &serial_mm_readw_be,
> -    &serial_mm_readl_be,
> -};
> -
> -static CPUWriteMemoryFunc * const serial_mm_write_be[] = {
> -    &serial_mm_writeb,
> -    &serial_mm_writew_be,
> -    &serial_mm_writel_be,
> -};
> -
> -static CPUReadMemoryFunc * const serial_mm_read_le[] = {
> +static CPUReadMemoryFunc * const serial_mm_read[] = {
>     &serial_mm_readb,
> -    &serial_mm_readw_le,
> -    &serial_mm_readl_le,
> +    &serial_mm_readw,
> +    &serial_mm_readl,
> };
> 
> -static CPUWriteMemoryFunc * const serial_mm_write_le[] = {
> +static CPUWriteMemoryFunc * const serial_mm_write[] = {
>     &serial_mm_writeb,
> -    &serial_mm_writew_le,
> -    &serial_mm_writel_le,
> +    &serial_mm_writew,
> +    &serial_mm_writel,
> };
> 
> SerialState *serial_mm_init (target_phys_addr_t base, int it_shift,
> @@ -955,13 +905,13 @@ SerialState *serial_mm_init (target_phys_addr_t
> base, int it_shift,
> 
>     if (ioregister) {
>         if (be) {
> -            s_io_memory = cpu_register_io_memory(serial_mm_read_be,
> -                                                 serial_mm_write_be, s,
> -                                                 DEVICE_NATIVE_ENDIAN);
> +            s_io_memory = cpu_register_io_memory(serial_mm_read,
> +                                                 serial_mm_write, s,
> +                                                 DEVICE_BIG_ENDIAN);

Have you verified that this works as intended? Usually the be flags in init 
code are bogus and define the guest endianness.


Alex




reply via email to

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