From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39670) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WXmlq-0007Z0-Sh for qemu-devel@nongnu.org; Wed, 09 Apr 2014 03:18:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WXmlk-00010x-8I for qemu-devel@nongnu.org; Wed, 09 Apr 2014 03:18:06 -0400 Received: from mail-pa0-f54.google.com ([209.85.220.54]:39408) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WXmlk-00010r-3I for qemu-devel@nongnu.org; Wed, 09 Apr 2014 03:18:00 -0400 Received: by mail-pa0-f54.google.com with SMTP id lf10so2149028pab.13 for ; Wed, 09 Apr 2014 00:17:59 -0700 (PDT) Sender: Peter Crosthwaite From: Peter Crosthwaite Date: Wed, 9 Apr 2014 00:17:26 -0700 Message-Id: <1037f76d874b55d8ad838a5004affc1e900b67ae.1397024123.git.peter.crosthwaite@xilinx.com> In-Reply-To: References: Subject: [Qemu-devel] [PATCH v4 4/6] register: Add support for decoding information List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, kraxel@redhat.com, edgar.iglesias@gmail.com Allow defining of optional address decoding information in register definitions. This is useful for clients that want to associate registers with specific addresses. Signed-off-by: Peter Crosthwaite --- include/hw/register.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/hw/register.h b/include/hw/register.h index c595ed6..d7f602f 100644 --- a/include/hw/register.h +++ b/include/hw/register.h @@ -15,6 +15,7 @@ typedef struct RegisterInfo RegisterInfo; typedef struct RegisterAccessInfo RegisterAccessInfo; +typedef struct RegisterDecodeInfo RegisterDecodeInfo; /** * A register access error message @@ -54,6 +55,11 @@ typedef struct RegisterAccessError { * allowing this function to modify the value before return to the client. */ +#define REG_DECODE_READ (1 << 0) +#define REG_DECODE_WRITE (1 << 1) +#define REG_DECODE_EXECUTE (1 << 2) +#define REG_DECODE_RW (REG_DECODE_READ | REG_DECODE_WRITE) + struct RegisterAccessInfo { const char *name; uint64_t ro; @@ -71,6 +77,14 @@ struct RegisterAccessInfo { void (*post_write)(RegisterInfo *reg, uint64_t val); uint64_t (*post_read)(RegisterInfo *reg, uint64_t val); + + size_t storage; + int data_size; + + struct { + hwaddr addr; + uint8_t flags; + } decode; }; /** @@ -108,6 +122,13 @@ struct RegisterInfo { MemoryRegion mem; }; + +struct RegisterDecodeInfo { + RegisterInfo *reg; + hwaddr addr; + unsigned len; +}; + /** * write a value to a register, subject to its restrictions * @reg: register to write to -- 1.9.1.1.gbb9f595