All of lore.kernel.org
 help / color / mirror / Atom feed
From: KONRAD Frederic <fred.konrad@greensocs.com>
To: Alistair Francis <alistair.francis@xilinx.com>, qemu-devel@nongnu.org
Cc: edgar.iglesias@xilinx.com, peter.maydell@linaro.org,
	crosthwaitepeter@gmail.com, afaerber@suse.de,
	edgar.iglesias@gmail.com
Subject: Re: [Qemu-devel] [PATCH v2 07/16] register: Add block initialise helper
Date: Wed, 27 Jan 2016 16:17:12 +0100	[thread overview]
Message-ID: <56A8DF78.2060905@greensocs.com> (raw)
In-Reply-To: <c79e28d0a2c9672629f9839a1377501770c59d9e.1453237258.git.alistair.francis@xilinx.com>



Le 19/01/2016 23:35, Alistair Francis a écrit :
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Add a helper that will scan a static RegisterAccessInfo Array
> and populate a container MemoryRegion with registers as defined.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
> V2:
>   - Use memory_region_add_subregion_no_print()
>
>   hw/core/register.c    | 29 +++++++++++++++++++++++++++++
>   include/hw/register.h | 21 +++++++++++++++++++++
>   2 files changed, 50 insertions(+)
>
> diff --git a/hw/core/register.c b/hw/core/register.c
> index 000b87f..116fd0b 100644
> --- a/hw/core/register.c
> +++ b/hw/core/register.c
> @@ -255,6 +255,35 @@ uint64_t register_read_memory_le(void *opaque, hwaddr addr, unsigned size)
>       return register_read_memory(opaque, addr, size, false);
>   }
>   
> +void register_init_block32(DeviceState *owner, const RegisterAccessInfo *rae,
> +                           int num, RegisterInfo *ri, uint32_t *data,
> +                           MemoryRegion *container, const MemoryRegionOps *ops,
> +                           bool debug_enabled)
> +{
> +    const char *debug_prefix = object_get_typename(OBJECT(owner));
> +    int i;
> +
> +    for (i = 0; i < num; i++) {
> +        int index = rae[i].decode.addr / 4;
> +        RegisterInfo *r = &ri[index];
> +
> +        *r = (RegisterInfo) {
> +            .data = &data[index],
> +            .data_size = sizeof(uint32_t),
> +            .access = &rae[i],
> +            .debug = debug_enabled,
> +            .prefix = debug_prefix,
> +            .opaque = owner,
> +        };
> +        register_init(r);
> +
> +        memory_region_init_io(&r->mem, OBJECT(owner), ops, r, r->access->name,
> +                              sizeof(uint32_t));
> +        memory_region_add_subregion_no_print(container,
> +                                             r->access->decode.addr, &r->mem);
> +    }
> +}
> +
>   static const TypeInfo register_info = {
>       .name  = TYPE_REGISTER,
>       .parent = TYPE_DEVICE,
> diff --git a/include/hw/register.h b/include/hw/register.h
> index 6677dee..f3e4c2c 100644
> --- a/include/hw/register.h
> +++ b/include/hw/register.h
> @@ -186,6 +186,27 @@ void register_write_memory_le(void *opaque, hwaddr addr, uint64_t value,
>   uint64_t register_read_memory_be(void *opaque, hwaddr addr, unsigned size);
>   uint64_t register_read_memory_le(void *opaque, hwaddr addr, unsigned size);
>   
> +/**
> + * Init a block of consecutive registers into a container MemoryRegion. A
> + * number of constant register definitions are parsed to create a corresponding
> + * array of RegisterInfo's.
> + *
> + * @owner: device owning the registers
> + * @rae: Register definitions to init
> + * @num: number of registers to init (length of @rae)
> + * @ri: Register array to init
> + * @data: Array to use for register data
> + * @container: Memory region to contain new registers
> + * @ops: Memory region ops to use to access registers. Opaque data of handler
> + * with be a RegisterInfo * (from @ri)
typo here

Fred

> + * @debug enabled: turn on/off verbose debug information
> + */
> +
> +void register_init_block32(DeviceState *owner, const RegisterAccessInfo *rae,
> +                           int num, RegisterInfo *ri, uint32_t *data,
> +                           MemoryRegion *container, const MemoryRegionOps *ops,
> +                           bool debug_enabled);
> +
>   /* Define constants for a 32 bit register */
>   #define REG32(reg, addr)                                                  \
>       enum { A_ ## reg = (addr) };                                          \

  reply	other threads:[~2016-01-27 15:17 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-19 22:34 [Qemu-devel] [PATCH v2 00/16] data-driven device registers Alistair Francis
2016-01-19 22:34 ` [Qemu-devel] [PATCH v2 01/16] memory: Allow subregions to not be printed by info mtree Alistair Francis
2016-01-27 15:05   ` KONRAD Frederic
2016-01-19 22:34 ` [Qemu-devel] [PATCH v2 02/16] register: Add Register API Alistair Francis
2016-01-27 14:46   ` KONRAD Frederic
2016-01-28 21:57     ` Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 03/16] register: Add Memory API glue Alistair Francis
2016-01-27 14:51   ` KONRAD Frederic
2016-01-30  0:25     ` Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 04/16] register: Add support for decoding information Alistair Francis
2016-01-27 15:09   ` KONRAD Frederic
2016-01-29 23:30     ` Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 05/16] register: Define REG and FIELD macros Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 06/16] register: QOMify Alistair Francis
2016-01-27 15:14   ` KONRAD Frederic
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 07/16] register: Add block initialise helper Alistair Francis
2016-01-27 15:17   ` KONRAD Frederic [this message]
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 08/16] bitops: Add ONES macro Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 09/16] dma: Add Xilinx Zynq devcfg device model Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 10/16] xilinx_zynq: add devcfg to machine model Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 11/16] qdev: Define qdev_get_gpio_out Alistair Francis
2016-01-28 15:44   ` Frederic Konrad
2016-01-30  0:23     ` Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 12/16] qdev: Add qdev_pass_all_gpios API Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 13/16] irq: Add opaque setter routine Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 14/16] register: Add GPIO API Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 15/16] misc: Introduce ZynqMP IOU SLCR Alistair Francis
2016-01-19 22:35 ` [Qemu-devel] [PATCH v2 16/16] xlnx-zynqmp: Connect the " Alistair Francis
2016-01-21  1:42 ` [Qemu-devel] [PATCH v2 00/16] data-driven device registers Alistair Francis

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=56A8DF78.2060905@greensocs.com \
    --to=fred.konrad@greensocs.com \
    --cc=afaerber@suse.de \
    --cc=alistair.francis@xilinx.com \
    --cc=crosthwaitepeter@gmail.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=edgar.iglesias@xilinx.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@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.