xen/arm: Add helpers ioreadl/iowritel

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
Julien Grall authored and Ian Campbell committed 2013-05-13 11:59:57 +01:00
1 parent 4e67146864
commit 11eedee7cc
3 files changed
+92

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
/*
* Based on linux arch/arm/include/asm/io.h
*
* Copyright (C) 1996-2000 Russell King
*
* 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.
*
* Modifications:
* 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both
* constant addresses and variable addresses.
* 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture
* specific IO header files.
* 27-Mar-1999 PJB Second parameter of memcpy_toio is const..
* 04-Apr-1999 PJB Added check_signature.
* 12-Dec-1999 RMK More cleanups
* 18-Jun-2000 RMK Removed virt_to_* and friends definitions
* 05-Oct-2004 BJD Moved memory string functions to use void __iomem
*/
#ifndef _ARM_ARM32_IO_H
#define _ARM_ARM32_IO_H
#include <asm/system.h>
static inline uint32_t ioreadl(const volatile void __iomem *addr)
{
uint32_t val;
asm volatile("ldr %1, %0"
: "+Qo" (*(volatile uint32_t __force *)addr),
"=r" (val));
dsb();
return val;
}
static inline void iowritel(const volatile void __iomem *addr, uint32_t val)
{
dsb();
asm volatile("str %1, %0"
: "+Qo" (*(volatile uint32_t __force *)addr)
: "r" (val));
}
#endif /* _ARM_ARM32_IO_H */
+38
View File
@@ -0,0 +1,38 @@
/*
* Based on linux arch/arm64/include/asm/io.h
*
* Copyright (C) 1996-2000 Russell King
* Copyright (C) 2012 ARM Ltd.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef _ARM_ARM64_IO_H
#define _ARM_ARM64_IO_H
static inline uint32_t ioreadl(const volatile void __iomem *addr)
{
uint32_t val;
asm volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr));
dsb();
return val;
}
static inline void iowritel(const volatile void __iomem *addr, uint32_t val)
{
dsb();
asm volatile("str %w0, [%1]" : : "r" (val), "r" (addr));
}
#endif /* _ARM_ARM64_IO_H */
+8
View File
@@ -6,6 +6,14 @@
#include <asm/page.h>
#include <public/xen.h>
#if defined(CONFIG_ARM_32)
# include <asm/arm32/io.h>
#elif defined(CONFIG_ARM_64)
# include <asm/arm64/io.h>
#else
# error "unknown ARM variant"
#endif
/* Align Xen to a 2 MiB boundary. */
#define XEN_PADDR_ALIGN (1 << 21)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.