[Top][All Lists]
[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