[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 15/27] arm: mmio handlers
Basic infrastructure to emulate mmio reads and writes. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> --- xen/arch/arm/io.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ xen/arch/arm/io.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 0 deletions(-) create mode 100644 xen/arch/arm/io.c create mode 100644 xen/arch/arm/io.h diff --git a/xen/arch/arm/io.c b/xen/arch/arm/io.c new file mode 100644 index 0000000..8789705 --- /dev/null +++ b/xen/arch/arm/io.c @@ -0,0 +1,50 @@ +/* + * xen/arch/arm/io.h + * + * ARM I/O handlers + * + * Copyright (c) 2011 Citrix Systems. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <xen/config.h> +#include <xen/lib.h> +#include <asm/current.h> + +#include "io.h" + +static const struct mmio_handler *const mmio_handlers[] = +{ +}; +#define MMIO_HANDLER_NR ARRAY_SIZE(mmio_handlers) + +int handle_mmio(mmio_info_t *info) +{ + struct vcpu *v = current; + int i; + + for ( i = 0; i < MMIO_HANDLER_NR; i++ ) + if ( mmio_handlers[i]->check_handler(v, info->gpa) ) + return info->dabt.write ? + mmio_handlers[i]->write_handler(v, info) : + mmio_handlers[i]->read_handler(v, info); + + return 0; +} +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/arch/arm/io.h b/xen/arch/arm/io.h new file mode 100644 index 0000000..d7847e3 --- /dev/null +++ b/xen/arch/arm/io.h @@ -0,0 +1,53 @@ +/* + * xen/arch/arm/io.h + * + * ARM I/O handlers + * + * Copyright (c) 2011 Citrix Systems. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __ARCH_ARM_IO_H__ +#define __ARCH_ARM_IO_H__ + +#include <xen/lib.h> +#include <asm/processor.h> + +typedef struct +{ + struct hsr_dabt dabt; + uint32_t gva; + paddr_t gpa; +} mmio_info_t; + +typedef int (*mmio_read_t)(struct vcpu *v, mmio_info_t *info); +typedef int (*mmio_write_t)(struct vcpu *v, mmio_info_t *info); +typedef int (*mmio_check_t)(struct vcpu *v, paddr_t addr); + +struct mmio_handler { + mmio_check_t check_handler; + mmio_read_t read_handler; + mmio_write_t write_handler; +}; + +extern int handle_mmio(mmio_info_t *info); + +#endif + +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |