From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH 04/19] xen/arm: its: Move ITS command encode helper functions Date: Mon, 2 Mar 2015 18:00:20 +0530 Message-ID: <1425299435-3278-5-git-send-email-vijay.kilari@gmail.com> References: <1425299435-3278-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1425299435-3278-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian.Campbell@citrix.com, julien.grall@linaro.org, stefano.stabellini@eu.citrix.com, stefano.stabellini@citrix.com, tim@xen.org, xen-devel@lists.xen.org Cc: Prasun.Kapoor@caviumnetworks.com, Vijaya Kumar K , manish.jaggi@caviumnetworks.com, vijay.kilari@gmail.com List-Id: xen-devel@lists.xenproject.org From: Vijaya Kumar K ITS command encode functions are moved to header file gits-its.h and made as inline functions. This will be useful later in virtual its driver Signed-off-by: Vijaya Kumar K --- xen/arch/arm/gic-v3-its.c | 71 +--------------------------- xen/include/asm-arm/gic-its.h | 104 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 70 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index cde0ec0..53850fe 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -39,6 +39,7 @@ #include #include #include +#include #define its_print(lvl, fmt, ...) \ printk(lvl "GIC-ITS:" fmt, ## __VA_ARGS__) @@ -162,82 +163,12 @@ struct its_cmd_desc { }; }; -/* - * The ITS command block, which is what the ITS actually parses. - */ -struct its_cmd_block { - u64 raw_cmd[4]; -}; - #define ITS_CMD_QUEUE_SZ SZ_64K #define ITS_CMD_QUEUE_NR_ENTRIES (ITS_CMD_QUEUE_SZ / sizeof(struct its_cmd_block)) typedef struct its_collection *(*its_cmd_builder_t)(struct its_cmd_block *, struct its_cmd_desc *); -static void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr) -{ - cmd->raw_cmd[0] &= ~0xffULL; - cmd->raw_cmd[0] |= cmd_nr; -} - -static void its_encode_devid(struct its_cmd_block *cmd, u32 devid) -{ - cmd->raw_cmd[0] &= 0xffffffffULL; - cmd->raw_cmd[0] |= ((u64)devid) << 32; -} - -static void its_encode_event_id(struct its_cmd_block *cmd, u32 id) -{ - cmd->raw_cmd[1] &= ~0xffffffffULL; - cmd->raw_cmd[1] |= id; -} - -static void its_encode_phys_id(struct its_cmd_block *cmd, u32 phys_id) -{ - cmd->raw_cmd[1] &= 0xffffffffULL; - cmd->raw_cmd[1] |= ((u64)phys_id) << 32; -} - -static void its_encode_size(struct its_cmd_block *cmd, u8 size) -{ - cmd->raw_cmd[1] &= ~0xffULL; - cmd->raw_cmd[1] |= size; -} - -static void its_encode_itt(struct its_cmd_block *cmd, u64 itt_addr) -{ - cmd->raw_cmd[2] &= ~0xffffffffffffULL; - cmd->raw_cmd[2] |= itt_addr & 0xffffffffff00ULL; -} - -static void its_encode_valid(struct its_cmd_block *cmd, int valid) -{ - cmd->raw_cmd[2] &= ~(1ULL << 63); - cmd->raw_cmd[2] |= ((u64)!!valid) << 63; -} - -static void its_encode_target(struct its_cmd_block *cmd, u64 target_addr) -{ - cmd->raw_cmd[2] &= ~(0xffffffffULL << 16); - cmd->raw_cmd[2] |= (target_addr & (0xffffffffULL << 16)); -} - -static void its_encode_collection(struct its_cmd_block *cmd, u16 col) -{ - cmd->raw_cmd[2] &= ~0xffffULL; - cmd->raw_cmd[2] |= col; -} - -static inline void its_fixup_cmd(struct its_cmd_block *cmd) -{ - /* Let's fixup BE commands */ - cmd->raw_cmd[0] = cpu_to_le64(cmd->raw_cmd[0]); - cmd->raw_cmd[1] = cpu_to_le64(cmd->raw_cmd[1]); - cmd->raw_cmd[2] = cpu_to_le64(cmd->raw_cmd[2]); - cmd->raw_cmd[3] = cpu_to_le64(cmd->raw_cmd[3]); -} - static struct its_collection *its_build_mapd_cmd(struct its_cmd_block *cmd, struct its_cmd_desc *desc) { diff --git a/xen/include/asm-arm/gic-its.h b/xen/include/asm-arm/gic-its.h new file mode 100644 index 0000000..099ed9c --- /dev/null +++ b/xen/include/asm-arm/gic-its.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2013, 2014 ARM Limited, All Rights Reserved. + * Author: Marc Zyngier + * + * Xen changes: + * Vijaya Kumar K + * Copyright (C) 2014, 2015 Cavium Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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, see . + */ + +#ifndef __ASM_ARM_GIC_ITS_H__ +#define __ASM_ARM_GIC_ITS_H__ + +/* + * The ITS command block, which is what the ITS actually parses. + */ +struct its_cmd_block { + u64 raw_cmd[4]; +}; + +static inline void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr) +{ + cmd->raw_cmd[0] &= ~0xffULL; + cmd->raw_cmd[0] |= cmd_nr; +} + +static inline void its_encode_devid(struct its_cmd_block *cmd, u32 devid) +{ + cmd->raw_cmd[0] &= 0xffffffffULL; + cmd->raw_cmd[0] |= ((u64)devid) << 32; +} + +static inline void its_encode_event_id(struct its_cmd_block *cmd, u32 id) +{ + cmd->raw_cmd[1] &= ~0xffffffffULL; + cmd->raw_cmd[1] |= id; +} + +static inline void its_encode_phys_id(struct its_cmd_block *cmd, u32 phys_id) +{ + cmd->raw_cmd[1] &= 0xffffffffULL; + cmd->raw_cmd[1] |= ((u64)phys_id) << 32; +} + +static inline void its_encode_size(struct its_cmd_block *cmd, u8 size) +{ + cmd->raw_cmd[1] &= ~0xffULL; + cmd->raw_cmd[1] |= size; +} + +static inline void its_encode_itt(struct its_cmd_block *cmd, u64 itt_addr) +{ + cmd->raw_cmd[2] &= ~0xffffffffffffULL; + cmd->raw_cmd[2] |= itt_addr & 0xffffffffff00ULL; +} + +static inline void its_encode_valid(struct its_cmd_block *cmd, int valid) +{ + cmd->raw_cmd[2] &= ~(1ULL << 63); + cmd->raw_cmd[2] |= ((u64)!!valid) << 63; +} + +static inline void its_encode_target(struct its_cmd_block *cmd, u64 target_addr) +{ + cmd->raw_cmd[2] &= ~(0xffffffffULL << 16); + cmd->raw_cmd[2] |= (target_addr & (0xffffffffULL << 16)); +} + +static inline void its_encode_collection(struct its_cmd_block *cmd, u16 col) +{ + cmd->raw_cmd[2] &= ~0xffffULL; + cmd->raw_cmd[2] |= col; +} + +static inline void its_fixup_cmd(struct its_cmd_block *cmd) +{ + /* Let's fixup BE commands */ + cmd->raw_cmd[0] = cpu_to_le64(cmd->raw_cmd[0]); + cmd->raw_cmd[1] = cpu_to_le64(cmd->raw_cmd[1]); + cmd->raw_cmd[2] = cpu_to_le64(cmd->raw_cmd[2]); + cmd->raw_cmd[3] = cpu_to_le64(cmd->raw_cmd[3]); +} + +#endif /* __ASM_ARM_GIC_ITS_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 1.7.9.5