From: Alexander Graf <agraf@suse.de>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-ppc@nongnu.org
Cc: programmingkidx@gmail.com, mark.cave-ayland@ilande.co.uk,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 3/5] PPC: mac_nvram: Allow 2 and 4 byte accesses
Date: Mon, 14 Jul 2014 12:32:41 +0200 [thread overview]
Message-ID: <53C3B1C9.9000106@suse.de> (raw)
In-Reply-To: <53C37B86.20904@redhat.com>
On 14.07.14 08:41, Paolo Bonzini wrote:
> Il 13/07/2014 18:17, Alexander Graf ha scritto:
>> The NVRAM in our Core99 machine really supports 2byte and 4byte accesses
>> just as well as 1byte accesses. In fact, Mac OS X uses those.
>>
>> Add support for higher register size granularities.
>>
>> Signed-off-by: Alexander Graf <agraf@suse.de>
>> ---
>> hw/nvram/mac_nvram.c | 43 ++++++++++++++++++++++++++++++++-----------
>> 1 file changed, 32 insertions(+), 11 deletions(-)
>>
>> diff --git a/hw/nvram/mac_nvram.c b/hw/nvram/mac_nvram.c
>> index bcff074..0a6df44 100644
>> --- a/hw/nvram/mac_nvram.c
>> +++ b/hw/nvram/mac_nvram.c
>> @@ -40,32 +40,53 @@
>> #define DEF_SYSTEM_SIZE 0xc10
>>
>> /* macio style NVRAM device */
>> -static void macio_nvram_writeb(void *opaque, hwaddr addr,
>> - uint64_t value, unsigned size)
>> +static void macio_nvram_write(void *opaque, hwaddr addr,
>> + uint64_t value, unsigned size)
>> {
>> MacIONVRAMState *s = opaque;
>>
>> addr = (addr >> s->it_shift) & (s->size - 1);
>> - s->data[addr] = value;
>> - NVR_DPRINTF("writeb addr %04" PHYS_PRIx " val %" PRIx64 "\n",
>> addr, value);
>> + switch (size) {
>> + case 1:
>> + s->data[addr] = value;
>> + break;
>> + case 2:
>> + stw_be_p(&s->data[addr], value);
>> + break;
>> + case 4:
>> + stl_be_p(&s->data[addr], value);
>> + break;
>> + }
>> + NVR_DPRINTF("write%d addr %04" PRIx64 " val %" PRIx64 "\n",
>> size, addr,
>> + value);
>> }
>>
>> -static uint64_t macio_nvram_readb(void *opaque, hwaddr addr,
>> - unsigned size)
>> +static uint64_t macio_nvram_read(void *opaque, hwaddr addr,
>> + unsigned size)
>> {
>> MacIONVRAMState *s = opaque;
>> - uint32_t value;
>> + uint32_t value = 0;
>>
>> addr = (addr >> s->it_shift) & (s->size - 1);
>> - value = s->data[addr];
>> - NVR_DPRINTF("readb addr %04x val %x\n", (int)addr, value);
>> + switch (size) {
>> + case 1:
>> + value = s->data[addr];
>> + break;
>> + case 2:
>> + value = lduw_be_p(&s->data[addr]);
>> + break;
>> + case 4:
>> + value = ldl_be_p(&s->data[addr]);
>> + break;
>> + }
>> + NVR_DPRINTF("read%d addr %04x val %x\n", size, (int)addr, value);
>>
>> return value;
>> }
>>
>> static const MemoryRegionOps macio_nvram_ops = {
>> - .read = macio_nvram_readb,
>> - .write = macio_nvram_writeb,
>> + .read = macio_nvram_read,
>> + .write = macio_nvram_write,
>> .endianness = DEVICE_BIG_ENDIAN,
>> };
>>
>>
>
> I think this ought to be enough:
>
> static const MemoryRegionOps test_ioport_byte_ops = {
> .read = macio_nvram_readb,
> .write = macio_nvram_writeb,
> + .valid.min_access_size = 1,
> + .valid.max_access_size = 4,
> + .impl.min_access_size = 1,
> + .impl.max_access_size = 1,
> .endianness = DEVICE_BIG_ENDIAN,
> };
Heh - I knew there had to be a trick to this :). That's certainly a lot
cleaner.
Alex
next prev parent reply other threads:[~2014-07-14 10:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-13 16:17 [Qemu-devel] [PATCH 0/5] PPC: Mac99 emulation fixes Alexander Graf
2014-07-13 16:17 ` [Qemu-devel] [PATCH 1/5] PPC: mac99: Fix core99 timer frequency Alexander Graf
2014-07-13 16:17 ` [Qemu-devel] [PATCH 2/5] PPC: mac_nvram: Remove unused functions Alexander Graf
2014-07-13 16:17 ` [Qemu-devel] [PATCH 3/5] PPC: mac_nvram: Allow 2 and 4 byte accesses Alexander Graf
2014-07-14 6:41 ` Paolo Bonzini
2014-07-14 10:32 ` Alexander Graf [this message]
2014-07-14 10:37 ` [Qemu-devel] [PATCH v2 " Alexander Graf
2014-07-13 16:17 ` [Qemu-devel] [PATCH 4/5] PPC: mac_nvram: Split NVRAM into OF and OSX parts Alexander Graf
2014-07-13 16:17 ` [Qemu-devel] [PATCH 5/5] PPC: mac99: Expose NVRAM linearly Alexander Graf
2014-07-13 17:51 ` [Qemu-devel] [PATCH 0/5] PPC: Mac99 emulation fixes Programmingkid
2014-07-13 18:01 ` Alexander Graf
2014-07-14 13:58 ` Mark Cave-Ayland
2014-07-14 14:00 ` Alexander Graf
2014-07-14 14:07 ` Mark Cave-Ayland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53C3B1C9.9000106@suse.de \
--to=agraf@suse.de \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=pbonzini@redhat.com \
--cc=programmingkidx@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.