[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: |
Blue Swirl |
Subject: |
[Qemu-devel] Re: [PATCH 2/2] serial: Declare as little endian |
Date: |
Mon, 20 Dec 2010 18:26:34 +0000 |
On Sun, Dec 19, 2010 at 3:25 PM, Alexander Graf <address@hidden> wrote:
>
> 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.
At least the serial console on Sparc64 still works.