[PATCH 4/4] ARM: opcodes: Opcode definitions for the Virtualization Extensions
Nicolas Pitre
nicolas.pitre at linaro.org
Thu Mar 15 13:58:28 EDT 2012
On Thu, 15 Mar 2012, Dave Martin wrote:
> For now, this patch just adds a definition for the HVC instruction.
> More can be added here later, as needed.
>
> Now that we have a real example of how to use the opcode injection
> macros properly, this patch also adds a cross-reference from the
> explanation in opcodes.h (since without an example, figuring out
> how to use the macros is not that easy).
>
> Signed-off-by: Dave Martin <dave.martin at linaro.org>
Acked-by: Nicolas Pitre <nico at linaro.org>
Maybe this would be a good idea to document in one of the patch logs why
you didn't go with the assembler macro route like it is done in
unified.h for the various it instructions.
> ---
> arch/arm/include/asm/opcodes-virt.h | 29 +++++++++++++++++++++++++++++
> arch/arm/include/asm/opcodes.h | 2 ++
> 2 files changed, 31 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/include/asm/opcodes-virt.h
>
> diff --git a/arch/arm/include/asm/opcodes-virt.h b/arch/arm/include/asm/opcodes-virt.h
> new file mode 100644
> index 0000000..b85665a
> --- /dev/null
> +++ b/arch/arm/include/asm/opcodes-virt.h
> @@ -0,0 +1,29 @@
> +/*
> + * opcodes-virt.h: Opcode definitions for the ARM virtualization extensions
> + * Copyright (C) 2012 Linaro Limited
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, write to the Free Software Foundation, Inc.,
> + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> + */
> +#ifndef __ASM_ARM_OPCODES_VIRT_H
> +#define __ASM_ARM_OPCODES_VIRT_H
> +
> +#include <asm/opcodes.h>
> +
> +#define __HVC(imm16) __inst_arm_thumb32( \
> + 0xE1400070 | (((imm16) & 0xFFF0) << 4) | ((imm16) & 0x000F), \
> + 0xF7E08000 | (((imm16) & 0xF000) << 4) | ((imm16) & 0x0FFF) \
> +)
> +
> +#endif /* ! __ASM_ARM_OPCODES_VIRT_H */
> diff --git a/arch/arm/include/asm/opcodes.h b/arch/arm/include/asm/opcodes.h
> index 50ef0be..89ff5b9 100644
> --- a/arch/arm/include/asm/opcodes.h
> +++ b/arch/arm/include/asm/opcodes.h
> @@ -193,6 +193,8 @@ extern asmlinkage unsigned int arm_check_condition(u32 opcode, u32 psr);
> * specify the ARM and Thumb alternatives at the same time. This ensures
> * that the correct opcode gets emitted depending on the instruction set
> * used for the kernel build.
> + *
> + * Look at opcodes-virt.h for an example of how to use these macros.
> */
> #include <linux/stringify.h>
>
> --
> 1.7.4.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list