[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] tools: drop ia64 support
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1347468927 -3600 # Node ID 485e6db28b93d69e33628635eb562ea6f5179c90 # Parent a1bd69b08e9eb4a5dca1b0408e34d49fda767b81 tools: drop ia64 support Removed support from libxc and mini-os. This also took me under xen/include/public via various symlinks. Dropped tools/debugger/xenitp entirely, it was described upon commit as: "Xenitp is a low-level debugger for ia64" and doesn't appear to be linked into the build anywhere. 99 files changed, 14 insertions(+), 32361 deletions(-) Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/Config.mk --- a/extras/mini-os/Config.mk Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/Config.mk Wed Sep 12 17:55:27 2012 +0100 @@ -9,7 +9,7 @@ export XEN_INTERFACE_VERSION # Try to find out the architecture family TARGET_ARCH_FAM. # First check whether x86_... is contained (for x86_32, x86_32y, x86_64). -# If not x86 then use $(XEN_TARGET_ARCH) -> for ia64, ... +# If not x86 then use $(XEN_TARGET_ARCH) ifeq ($(findstring x86_,$(XEN_TARGET_ARCH)),x86_) TARGET_ARCH_FAM = x86 else diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/Makefile --- a/extras/mini-os/arch/ia64/Makefile Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -# -# Special makefile for ia64. -# - -XEN_ROOT = $(CURDIR)/../../../.. -include $(XEN_ROOT)/Config.mk - -include ../../Config.mk - -include arch.mk -include ../../minios.mk - -ARCH_SRCS := sal.c -ARCH_SRCS += efi.c -ARCH_SRCS += time.c -ARCH_SRCS += ivt.S -ARCH_SRCS += fw.S -ARCH_SRCS += common.c -ARCH_SRCS += time.c -ARCH_SRCS += mm.c -ARCH_SRCS += debug.c -ARCH_SRCS += sched.c -ARCH_SRCS += xencomm.c -ARCH_SRCS += __umoddi3.S -ARCH_SRCS += __udivdi3.S -ARCH_SRCS += __divdi3.S - -ARCH_OBJS := sal.o -ARCH_OBJS += efi.o -ARCH_OBJS += time.o -ARCH_OBJS += ivt.o -ARCH_OBJS += fw.o -ARCH_OBJS += common.o -ARCH_OBJS += time.o -ARCH_OBJS += mm.o -ARCH_OBJS += debug.o -ARCH_OBJS += sched.o -ARCH_OBJS += xencomm.o -ARCH_OBJS += __umoddi3.o -ARCH_OBJS += __udivdi3.o -ARCH_OBJS += __udivsi3.o -ARCH_OBJS += __divdi3.o -ARCH_OBJS := $(addprefix $(OBJ_DIR)/,$(ARCH_OBJS)) - -GEN_OFF_SRC := gen_off.c -GEN_OFF_ASM := gen_off.s -GEN_OFF_H := $(MINI-OS_ROOT)/include/$(ARCH_INC)/offsets.h - -all: $(OBJ_DIR)/$(ARCH_LIB) - -$(GEN_OFF_ASM): $(GEN_OFF_SRC) - $(CC) -S -o $@ $(CPPFLAGS) $< - -$(GEN_OFF_H): $(GEN_OFF_ASM) - sed -ne "/^->/ {s/->/#define /; p}" < $< > $@ - -$(OBJ_DIR)/$(ARCH_LIB): $(GEN_OFF_H) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ) - $(AR) rv $(ARCH_LIB) $(ARCH_OBJS) - -clean: - rm -f $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ) - rm -f $(GEN_OFF_ASM) - rm -f $(GEN_OFF_H) diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/__divdi3.S --- a/extras/mini-os/arch/ia64/__divdi3.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -.file "__divdi3.s" - -// $FreeBSD: src/sys/libkern/ia64/__divdi3.S,v 1.1 2000/10/04 17:53:03 dfr Exp $ -// -// Copyright (c) 2000, Intel Corporation -// All rights reserved. -// -// Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, -// Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, -// Intel Corporation. -// -// WARRANTY DISCLAIMER -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// - -.section .text -.proc __divdi3# -.align 32 -.global __divdi3# -.align 32 - -// 64-bit signed integer divide - -__divdi3: - -{ .mii - alloc r31=ar.pfs,2,0,0,0 - nop.i 0 - nop.i 0;; -} { .mmi - - // 64-BIT SIGNED INTEGER DIVIDE BEGINS HERE - - setf.sig f8=r32 - setf.sig f9=r33 - nop.i 0;; -} { .mfb - nop.m 0 - fcvt.xf f6=f8 - nop.b 0 -} { .mfb - nop.m 0 - fcvt.xf f7=f9 - nop.b 0;; -} { .mfi - nop.m 0 - // Step (1) - // y0 = 1 / b in f8 - frcpa.s1 f8,p6=f6,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (2) - // e0 = 1 - b * y0 in f9 - (p6) fnma.s1 f9=f7,f8,f1 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // q0 = a * y0 in f10 - (p6) fma.s1 f10=f6,f8,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (4) - // e1 = e0 * e0 in f11 - (p6) fma.s1 f11=f9,f9,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (5) - // q1 = q0 + e0 * q0 in f10 - (p6) fma.s1 f10=f9,f10,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (6) - // y1 = y0 + e0 * y0 in f8 - (p6) fma.s1 f8=f9,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // q2 = q1 + e1 * q1 in f9 - (p6) fma.s1 f9=f11,f10,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // y2 = y1 + e1 * y1 in f8 - (p6) fma.s1 f8=f11,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (9) - // r2 = a - b * q2 in f10 - (p6) fnma.s1 f10=f7,f9,f6 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (10) - // q3 = q2 + r2 * y2 in f8 - (p6) fma.s1 f8=f10,f8,f9 - nop.i 0;; -} { .mfb - nop.m 0 - // Step (11) - // q = trunc (q3) - fcvt.fx.trunc.s1 f8=f8 - nop.b 0;; -} { .mmi - // quotient will be in r8 (if b != 0) - getf.sig r8=f8 - nop.m 0 - nop.i 0;; -} - - // 64-BIT SIGNED INTEGER DIVIDE ENDS HERE - -{ .mmb - nop.m 0 - nop.m 0 - br.ret.sptk b0;; -} - -.endp __divdi3 diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/__udivdi3.S --- a/extras/mini-os/arch/ia64/__udivdi3.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,142 +0,0 @@ -.file "__udivdi3.s" - -// $FreeBSD: src/sys/libkern/ia64/__udivdi3.S,v 1.1 2000/10/04 17:53:03 dfr Exp $ -// -// Copyright (c) 2000, Intel Corporation -// All rights reserved. -// -// Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, -// Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, -// Intel Corporation. -// -// WARRANTY DISCLAIMER -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// - -.section .text -.proc __udivdi3# -.align 32 -.global __udivdi3# -.align 32 - -// 64-bit unsigned integer divide - -__udivdi3: - -{ .mii - alloc r31=ar.pfs,2,0,0,0 - nop.i 0 - nop.i 0;; -} - -{ .mmi - - // 64-BIT UNSIGNED INTEGER DIVIDE BEGINS HERE - - setf.sig f8=r32 - setf.sig f9=r33 - nop.i 0;; -} { .mfb - nop.m 0 - fma.s1 f6=f8,f1,f0 - nop.b 0 -} { .mfb - nop.m 0 - fma.s1 f7=f9,f1,f0 - nop.b 0;; -} { .mfi - nop.m 0 - // Step (1) - // y0 = 1 / b in f8 - frcpa.s1 f8,p6=f6,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (2) - // e0 = 1 - b * y0 in f9 - (p6) fnma.s1 f9=f7,f8,f1 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // q0 = a * y0 in f10 - (p6) fma.s1 f10=f6,f8,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (4) - // e1 = e0 * e0 in f11 - (p6) fma.s1 f11=f9,f9,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (5) - // q1 = q0 + e0 * q0 in f10 - (p6) fma.s1 f10=f9,f10,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (6) - // y1 = y0 + e0 * y0 in f8 - (p6) fma.s1 f8=f9,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // q2 = q1 + e1 * q1 in f9 - (p6) fma.s1 f9=f11,f10,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // y2 = y1 + e1 * y1 in f8 - (p6) fma.s1 f8=f11,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (9) - // r2 = a - b * q2 in f10 - (p6) fnma.s1 f10=f7,f9,f6 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (10) - // q3 = q2 + r2 * y2 in f8 - (p6) fma.s1 f8=f10,f8,f9 - nop.i 0;; -} { .mfb - nop.m 0 - // (11) q = trunc(q3) - fcvt.fxu.trunc.s1 f8=f8 - nop.b 0;; -} { .mmi - // quotient will be in r8 (if b != 0) - getf.sig r8=f8 - nop.m 0 - nop.i 0;; -} - - // 64-BIT UNSIGNED INTEGER DIVIDE ENDS HERE - -{ .mmb - nop.m 0 - nop.m 0 - br.ret.sptk b0;; -} - -.endp __udivdi3 diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/__udivsi3.S --- a/extras/mini-os/arch/ia64/__udivsi3.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -.file "__udivsi3.s" - -// $FreeBSD: src/sys/libkern/ia64/__udivsi3.S,v 1.1.8.1 2005/01/31 23:26:21 imp Exp $ - -//- -// Copyright (c) 2000, Intel Corporation -// All rights reserved. -// -// Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, -// Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, -// Intel Corporation. -// -// WARRANTY DISCLAIMER -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// - -.section .text - -// 32-bit unsigned integer divide - -.proc __udivsi3# -.align 32 -.global __udivsi3# -.align 32 - -__udivsi3: - -{ .mii - alloc r31=ar.pfs,2,0,0,0 - nop.i 0 - nop.i 0;; -} { .mii - nop.m 0 - - // 32-BIT UNSIGNED INTEGER DIVIDE BEGINS HERE - - // general register used: - // r32 - 32-bit unsigned integer dividend - // r33 - 32-bit unsigned integer divisor - // r8 - 32-bit unsigned integer result - // r2 - scratch register - // floating-point registers used: f6, f7, f8, f9 - // predicate registers used: p6 - - zxt4 r32=r32 - zxt4 r33=r33;; -} { .mmb - setf.sig f6=r32 - setf.sig f7=r33 - nop.b 0;; -} { .mfi - nop.m 0 - fcvt.xf f6=f6 - nop.i 0 -} { .mfi - nop.m 0 - fcvt.xf f7=f7 - mov r2 = 0x0ffdd;; -} { .mfi - setf.exp f9 = r2 - // (1) y0 - frcpa.s1 f8,p6=f6,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // (2) q0 = a * y0 - (p6) fma.s1 f6=f6,f8,f0 - nop.i 0 -} { .mfi - nop.m 0 - // (3) e0 = 1 - b * y0 - (p6) fnma.s1 f7=f7,f8,f1 - nop.i 0;; -} { .mfi - nop.m 0 - // (4) q1 = q0 + e0 * q0 - (p6) fma.s1 f6=f7,f6,f6 - nop.i 0 -} { .mfi - nop.m 0 - // (5) e1 = e0 * e0 + 2^-34 - (p6) fma.s1 f7=f7,f7,f9 - nop.i 0;; -} { .mfi - nop.m 0 - // (6) q2 = q1 + e1 * q1 - (p6) fma.s1 f8=f7,f6,f6 - nop.i 0;; -} { .mfi - nop.m 0 - // (7) q = trunc(q2) - fcvt.fxu.trunc.s1 f8=f8 - nop.i 0;; -} { .mmi - // quotient will be in the least significant 32 bits of r8 (if b != 0) - getf.sig r8=f8 - nop.m 0 - nop.i 0;; -} - - // 32-BIT UNSIGNED INTEGER DIVIDE ENDS HERE - -{ .mmb - nop.m 0 - nop.m 0 - br.ret.sptk b0;; -} - -.endp __udivsi3 diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/__umoddi3.S --- a/extras/mini-os/arch/ia64/__umoddi3.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -.file "__umoddi3.s" - -// $FreeBSD: src/sys/libkern/ia64/__umoddi3.S,v 1.3 2003/02/11 20:15:11 schweikh Exp $ -// -// Copyright (c) 2000, Intel Corporation -// All rights reserved. -// -// Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, -// Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, -// Intel Corporation. -// -// WARRANTY DISCLAIMER -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// - -.section .text - - // 64-bit unsigned integer remainder - -.proc __umoddi3# -.align 32 -.global __umoddi3# -.align 32 - -__umoddi3: - -{ .mii - alloc r31=ar.pfs,3,0,0,0 - nop.i 0 - nop.i 0 -} { .mmb - - // 64-BIT UNSIGNED INTEGER REMAINDER BEGINS HERE - - // general register used: - // r32 - 64-bit unsigned integer dividend, called a below - // r33 - 64-bit unsigned integer divisor, called b below - // r8 - 64-bit unsigned integer result - // floating-point registers used: f6, f7, f8, f9, f10, f11, f12 - // predicate registers used: p6 - - setf.sig f12=r32 // holds a in integer form - setf.sig f7=r33 - nop.b 0;; -} { .mfi - // get 2s complement of b - sub r33=r0,r33 - fcvt.xuf.s1 f6=f12 - nop.i 0 -} { .mfi - nop.m 0 - fcvt.xuf.s1 f7=f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (1) - // y0 = 1 / b in f8 - frcpa.s1 f8,p6=f6,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (2) - // q0 = a * y0 in f10 - (p6) fma.s1 f10=f6,f8,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // e0 = 1 - b * y0 in f9 - (p6) fnma.s1 f9=f7,f8,f1 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (4) - // q1 = q0 + e0 * q0 in f10 - (p6) fma.s1 f10=f9,f10,f10 - nop.i 0 -} { .mfi - nop.m 0 - // Step (5) - // e1 = e0 * e0 in f11 - (p6) fma.s1 f11=f9,f9,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (6) - // y1 = y0 + e0 * y0 in f8 - (p6) fma.s1 f8=f9,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // q2 = q1 + e1 * q1 in f9 - (p6) fma.s1 f9=f11,f10,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // y2 = y1 + e1 * y1 in f8 - (p6) fma.s1 f8=f11,f8,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (9) - // r2 = a - b * q2 in f10 - (p6) fnma.s1 f10=f7,f9,f6 - nop.i 0;; -} { .mfi - // f7=-b - setf.sig f7=r33 - // Step (10) - // q3 = q2 + r2 * y2 in f8 - (p6) fma.s1 f8=f10,f8,f9 - nop.i 0;; -} { .mfi - nop.m 0 - // (11) q = trunc(q3) - fcvt.fxu.trunc.s1 f8=f8 - nop.i 0;; -} { .mfi - nop.m 0 - // (12) r = a + (-b) * q - xma.l f8=f8,f7,f12 - nop.i 0;; -} { .mib - getf.sig r8=f8 - nop.i 0 - nop.b 0 -} - - // 64-BIT UNSIGNED INTEGER REMAINDER ENDS HERE - -{ .mib - nop.m 0 - nop.i 0 - br.ret.sptk b0;; -} - -.endp __umoddi3 diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/arch.mk --- a/extras/mini-os/arch/ia64/arch.mk Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - -ARCH_CFLAGS := -mfixed-range=f2-f5,f12-f15,f32-f127 -mconstant-gp -ARCH_CFLAGS += -O2 -ARCH_ASFLAGS := -x assembler-with-cpp -ARCH_ASFLAGS += -mfixed-range=f2-f5,f12-f15,f32-f127 -fomit-frame-pointer -ARCH_ASFLAGS += -fno-builtin -fno-common -fno-strict-aliasing -mconstant-gp - -ARCH_LDFLAGS = -warn-common - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/common.c --- a/extras/mini-os/arch/ia64/common.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,266 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - **************************************************************************** - * - * Parts are taken from FreeBSD. - * - */ - - -#include <mini-os/os.h> -#include <mini-os/types.h> -#include <mini-os/lib.h> -#include <mini-os/page.h> -#include <xen/xen.h> -#include <mini-os/privop.h> -#include <xen/callback.h> -#include <mini-os/ia64_cpu.h> -#include <mini-os/hypervisor.h> -#include <mini-os/events.h> -#include <mini-os/console.h> -#include <mini-os/time.h> -#include <mini-os/xmalloc.h> - - -/* For more console boot messages. */ -int bootverbose; - -/* - * This structure contains start-of-day info, such as pagetable base pointer, - * address of the shared_info structure, and things like that. - */ -union start_info_union start_info_union; - -shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)XSI_BASE; - -struct machine_fw machineFwG; - -/* This pointer is initialized in ia64.S with the address of the boot param - * area passed by the bootloader. */ -struct xen_ia64_boot_param* ia64_boot_paramP; - -struct xen_ia64_boot_param ia64BootParamG; -char boot_cmd_line[COMMAND_LINE_SIZE+1]; - - -void -ia64_write_itr_i(ia64_pte_t* pteP, uint32_t reg, uint64_t vAddr, - uint64_t ps, uint64_t pk) -{ - /* The virtual address. */ - __asm __volatile("mov cr.ifa=%0" :: "r"(vAddr)); - /* The page size */ - __asm __volatile("mov cr.itir=%0;;" :: "r"((ps << IA64_ITIR_PS)|(pk << IA64_ITIR_KEY))); - /* Put pte into instruction translation register. */ - __asm __volatile("itr.i itr[%0]=%1" :: "r"(reg), "r"(*(uint64_t*)pteP)); - /* Serialization */ - __asm __volatile("srlz.i"); -} - -void -map_pal_code(void) -{ - ia64_pte_t pte; - - xen_set_virtual_psr_ic(0); - memset(&pte, 0, sizeof(pte)); /* Prepare the pte */ - pte.pte_p = 1; /* present bit */ - pte.pte_ma = PTE_MA_WB; /* memory attribute */ - pte.pte_a = 1; /* accessed bit */ - pte.pte_d = 1; /* dirty bit */ - pte.pte_pl = PTE_PL_KERN; /* privilege level */ - pte.pte_ar = PTE_AR_RWX; /* access rights */ - pte.pte_ppn = ((uint64_t) __pa(machineFwG.ia64_pal_base)) >> 14; - pte.pte_ed = 0; /* exception deferral */ - - /* - * Must purge here because a itc/dtc with the same address - * may be in the tlb! - */ - ia64_ptc_l(machineFwG.ia64_pal_base, PTE_PS_16K); - ia64_write_itr_i(&pte, IA64_TR_PAL, - (uint64_t)machineFwG.ia64_pal_base, - PTE_PS_16K, IA64_KEY_REG7); - xen_set_virtual_psr_ic(1); -} - -/* In ivt.S */ -extern char hypervisor_callback; - -static void -registerCallback(void) -{ - struct callback_register event = - { - .type = CALLBACKTYPE_event, - .address = (unsigned long)&hypervisor_callback, - }; - HYPERVISOR_callback_op(CALLBACKOP_register, &event); -} - -static void -init_start_info(start_info_t* xen_start_info) -{ - /* Make a copy of the start_info structure */ - start_info.nr_pages = xen_start_info->nr_pages; - start_info.shared_info = xen_start_info->shared_info; - start_info.flags = xen_start_info->flags; - start_info.store_mfn = xen_start_info->store_mfn; - start_info.store_evtchn = xen_start_info->store_evtchn; - start_info.console.domU.mfn = xen_start_info->console.domU.mfn; - start_info.console.domU.evtchn = - xen_start_info->console.domU.evtchn; - start_info.pt_base = xen_start_info->pt_base; - start_info.nr_pt_frames = xen_start_info->nr_pt_frames; - start_info.mfn_list = xen_start_info->mfn_list; - start_info.mod_start = xen_start_info->mod_start; - start_info.mod_len = xen_start_info->mod_len; -} - -static void -init_boot_params(void) -{ - ia64BootParamG.command_line = ia64_boot_paramP->command_line; - ia64BootParamG.efi_systab = ia64_boot_paramP->efi_systab; - ia64BootParamG.efi_memmap = ia64_boot_paramP->efi_memmap; - ia64BootParamG.efi_memmap_size = ia64_boot_paramP->efi_memmap_size; - ia64BootParamG.efi_memdesc_size = ia64_boot_paramP->efi_memdesc_size; - ia64BootParamG.efi_memdesc_version = - ia64_boot_paramP->efi_memdesc_version; - ia64BootParamG.console_info.num_cols = - ia64_boot_paramP->console_info.num_cols; - ia64BootParamG.console_info.num_rows = - ia64_boot_paramP->console_info.num_rows; - ia64BootParamG.console_info.orig_x = - ia64_boot_paramP->console_info.orig_x; - ia64BootParamG.console_info.orig_y = - ia64_boot_paramP->console_info.orig_y; - ia64BootParamG.fpswa = ia64_boot_paramP->fpswa; - ia64BootParamG.initrd_start = ia64_boot_paramP->initrd_start; - ia64BootParamG.initrd_size = ia64_boot_paramP->initrd_size; - ia64BootParamG.domain_start = ia64_boot_paramP->domain_start; - ia64BootParamG.domain_size = ia64_boot_paramP->domain_size; - - /* - * Copy and parse the boot command line. - * Currently only a check of bootverbose is done. - */ - memset(boot_cmd_line, 0, sizeof(boot_cmd_line)); - strncpy(boot_cmd_line, - (char*)__va(ia64BootParamG.command_line), COMMAND_LINE_SIZE); - boot_cmd_line[COMMAND_LINE_SIZE - 1] = '\0'; - - /* Look for bootverbose. */ - if (strstr(boot_cmd_line, "bootverbose")) - bootverbose = 1; -} - -static void -set_opt_feature(void) -{ - struct xen_ia64_opt_feature optf; - - optf.cmd = XEN_IA64_OPTF_IDENT_MAP_REG7; - optf.on = XEN_IA64_OPTF_ON; - optf.pgprot = ((1 << PTE_OFF_P) | (1 << PTE_OFF_A) | (1 << PTE_OFF_D) | - (PTE_MA_WB << PTE_OFF_MA) | - (PTE_PL_KERN << PTE_OFF_PL) | - (PTE_AR_RW << PTE_OFF_AR)); - optf.key = IA64_KEY_REG7; - HYPERVISOR_opt_feature(&optf); -} - -void -arch_init(start_info_t *si) -{ - efi_time_t tm; - static int initialized; - - if (initialized) - return; - - init_start_info(si); - - init_boot_params(); - - init_efi(); - - map_pal_code(); - - ia64_sal_init(machineFwG.ia64_sal_tableP); - - if (efi_get_time(&tm)) { - printk("EFI-SystemTime: %d.%d.%d %d:%d:%d", - tm.Day, tm.Month, tm.Year, - tm.Hour, tm.Minute, tm.Second); - - if (tm.TimeZone == EFI_UNSPECIFIED_TIMEZONE) - printk(" Timezone not specified!\n"); - else - printk(" TimeZone: %d Daylight: 0x%x\n", - tm.TimeZone, tm.Daylight); - } else - printk("efi_get_time() failed\n"); - - registerCallback(); - - set_opt_feature(); - - initialized = 1; -} - -void -arch_fini(void) -{ - /* TODO */ -} - -void -arch_print_info(void) -{ - int major, minor; - - minor = HYPERVISOR_xen_version(XENVER_version, 0); - major = minor >> 16; - minor &= ~0xffffffff; - printk("Running on Xen version: %d.%d\n", major, minor); -#if 0 - printk("machine addr of shared_info_t : 0x%lx\n", - start_info.shared_info); - printk("machine page number of shared page: 0x%lx\n", - start_info.store_mfn); - printk("evtchn for store communication : %d\n", - start_info.store_evtchn); - printk("MACHINE address of console page: 0x%lx\n", - start_info.console.domU.mfn); - printk("evtchn for console messages : %d\n", - start_info.console.domU.evtchn); -#endif - if(strlen(boot_cmd_line) > 0) - printk("xen_guest_cmdline : %s\n", boot_cmd_line); -} - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/debug.c --- a/extras/mini-os/arch/ia64/debug.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -/* - **************************************************************************** - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx - * - * Description: ia64 specific part of the mini-os - * Prints debug information on a crash of mini-os - * - * Parts are taken from FreeBSD. - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include <mini-os/os.h> - -static const char *ia64_vector_names[] = { - "VHPT Translation", /* 0 */ - "Instruction TLB", /* 1 */ - "Data TLB", /* 2 */ - "Alternate Instruction TLB", /* 3 */ - "Alternate Data TLB", /* 4 */ - "Data Nested TLB", /* 5 */ - "Instruction Key Miss", /* 6 */ - "Data Key Miss", /* 7 */ - "Dirty-Bit", /* 8 */ - "Instruction Access-Bit", /* 9 */ - "Data Access-Bit", /* 10 */ - "Break Instruction", /* 11 */ - "External Interrupt", /* 12 */ - "Reserved 13", /* 13 */ - "Reserved 14", /* 14 */ - "Reserved 15", /* 15 */ - "Reserved 16", /* 16 */ - "Reserved 17", /* 17 */ - "Reserved 18", /* 18 */ - "Reserved 19", /* 19 */ - "Page Not Present", /* 20 */ - "Key Permission", /* 21 */ - "Instruction Access Rights", /* 22 */ - "Data Access Rights", /* 23 */ - "General Exception", /* 24 */ - "Disabled FP-Register", /* 25 */ - "NaT Consumption", /* 26 */ - "Speculation", /* 27 */ - "Reserved 28", /* 28 */ - "Debug", /* 29 */ - "Unaligned Reference", /* 30 */ - "Unsupported Data Reference", /* 31 */ - "Floating-point Fault", /* 32 */ - "Floating-point Trap", /* 33 */ - "Lower-Privilege Transfer Trap", /* 34 */ - "Taken Branch Trap", /* 35 */ - "Single Step Trap", /* 36 */ - "Reserved 37", /* 37 */ - "Reserved 38", /* 38 */ - "Reserved 39", /* 39 */ - "Reserved 40", /* 40 */ - "Reserved 41", /* 41 */ - "Reserved 42", /* 42 */ - "Reserved 43", /* 43 */ - "Reserved 44", /* 44 */ - "IA-32 Exception", /* 45 */ - "IA-32 Intercept", /* 46 */ - "IA-32 Interrupt", /* 47 */ - "Reserved 48", /* 48 */ - "Reserved 49", /* 49 */ - "Reserved 50", /* 50 */ - "Reserved 51", /* 51 */ - "Reserved 52", /* 52 */ - "Reserved 53", /* 53 */ - "Reserved 54", /* 54 */ - "Reserved 55", /* 55 */ - "Reserved 56", /* 56 */ - "Reserved 57", /* 57 */ - "Reserved 58", /* 58 */ - "Reserved 59", /* 59 */ - "Reserved 60", /* 60 */ - "Reserved 61", /* 61 */ - "Reserved 62", /* 62 */ - "Reserved 63", /* 63 */ - "Reserved 64", /* 64 */ - "Reserved 65", /* 65 */ - "Reserved 66", /* 66 */ - "Reserved 67", /* 67 */ -}; - -typedef struct -{ - uint64_t sof :7; /* 0-6 size of frame */ - uint64_t sol :7; /* 7-13 size of locals (in + loc) */ - uint64_t sor :4; - uint64_t rrb_gr :7; - uint64_t rrb_fr :7; - uint64_t rrb_pr :6; - uint64_t res :25; /* reserved */ - uint64_t v :1; /* The v bit */ -} ifs_t; - -void -do_trap_error(trap_frame_t* tf) -{ - ifs_t curIfs; - - printk("TRAP in mini-os:\n"); - printk(" trap: %d (%s)\n", tf->trap_num, - ia64_vector_names[tf->trap_num]); - printk(" iip : 0x%.16lx ifa: 0x%.16lx\n", tf->iip, tf->ifa); - printk(" ipsr: 0x%.16lx ifs: 0x%.16lx\n", tf->ipsr, tf->ifs); - printk(" isr : 0x%.16lx\n", tf->isr); - printk(" gp : 0x%.16lx sp : 0x%.16lx\n", tf->gp, tf->sp); - printk(" rp : 0x%.16lx tp : 0x%.16lx\n", tf->b0, tf->tp); - printk(" b6 : 0x%.16lx b7 : 0x%.16lx\n", tf->b6, tf->b7); - printk(" r8 : 0x%.16lx\n", tf->r8); - printk(" bsp : 0x%.16lx rsc: 0x%.16lx\n", tf->bsp, tf->rsc); - printk(" r14 : 0x%.16lx r15: 0x%.16lx\n", tf->r14, tf->r15); - printk(" r16 : 0x%.16lx r17: 0x%.16lx\n", tf->r16, tf->r17); - printk(" r18 : 0x%.16lx r19: 0x%.16lx\n", tf->r18, tf->r19); - printk(" r20 : 0x%.16lx r21: 0x%.16lx\n", tf->r20, tf->r21); - printk(" r22 : 0x%.16lx r23: 0x%.16lx\n", tf->r22, tf->r23); - printk(" r24 : 0x%.16lx r25: 0x%.16lx\n", tf->r24, tf->r25); - printk(" r26 : 0x%.16lx r27: 0x%.16lx\n", tf->r26, tf->r27); - printk(" r28 : 0x%.16lx r29: 0x%.16lx\n", tf->r28, tf->r29); - printk(" r30 : 0x%.16lx r31: 0x%.16lx\n", tf->r30, tf->r31); - - __asm __volatile("flushrs;;"); - curIfs = *((ifs_t*)((void*)(&tf->ifs))); - if (!curIfs.v) - printk(" ifs.v = 0"); - else { - uint64_t* regP; - uint32_t i; - - printk(" cfm.sof: %d cfm.sol: %d\n", curIfs.sof, curIfs.sol); - regP = (uint64_t *)(tf->bsp + tf->ndirty); - for (i = curIfs.sof; i != 0; ) { - if (i <= (((uint64_t)regP & 0x000001f8) >> 3)) { - regP -= i; - i = 0; - break; - } - i -= ((uint64_t)regP & 0x000001f8) >> 3; - regP = (uint64_t *)((uint64_t)regP & ~0x000001ff) - 1; - } - for (i = 0; i < curIfs.sof; i++) { - if (((uint64_t)regP & 0x000001f8) == 0x000001f8) - regP++; - printk(" r%d: 0x%lx\n", i+32, *regP); - regP++; - } - } - HYPERVISOR_shutdown(SHUTDOWN_poweroff); -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/efi.c --- a/extras/mini-os/arch/ia64/efi.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * The code is partly taken from FreeBSD. - * - *************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - - -#include <mini-os/os.h> -#include <mini-os/efi.h> -#include <mini-os/page.h> -#include <mini-os/lib.h> -#include <mini-os/console.h> - - -/* The implementation is in fw.S. */ -extern uint64_t -ia64_call_efi_func(uint64_t funcP,uint64_t a,uint64_t b,uint64_t c,uint64_t d); - -int -efi_get_time(efi_time_t* tmP) -{ - memset(tmP, 0, sizeof(efi_time_t)); - if (ia64_call_efi_func((uint64_t)machineFwG.efi.getTimeF, - (uint64_t)tmP, - (uint64_t)NULL, 0, 0) != EFI_SUCCESS) { - printk("efi.getTime() failed\n"); - return 0; - } - return 1; -} - -/* - * The function compares two efi_guid_t and returns 0 on equality, otherwise 1. - */ -static int -efi_guid_cmp(efi_guid_t* a_le, efi_guid_t* b) -{ - return memcmp(a_le, b, sizeof(efi_guid_t)); -} - -void -init_efi(void) -{ - efi_system_table_t* efiSysTableP; - int mdcnt, i, numConvMem; - efi_memory_descriptor_t *memdP, *mdP; - efi_status_t status; - char fwVendor[100] = "unknown"; - efi_char16_t* fwP; - efi_runtime_services_t* rsP; - - efi_configuration_table_t* confP = (efi_configuration_table_t*)0; - efi_guid_t sal = SAL_SYSTEM_TABLE_GUID; - efi_guid_t acpi = ACPI_TABLE_GUID; - efi_guid_t acpi20 = ACPI_20_TABLE_GUID; - - memset(&machineFwG, 0, sizeof(machineFwG)); - /* Read the efi_system_table. */ - efiSysTableP = (efi_system_table_t*)__va(ia64BootParamG.efi_systab); - machineFwG.efi.efiSysTableP = efiSysTableP; - PRINT_BV("EfiSystemTable at: %p\n", efiSysTableP); - fwP = (uint16_t*) __va(efiSysTableP->FirmwareVendor); - if (fwP) { - for (i = 0; i < (int)sizeof(fwVendor) - 1 && *fwP; ++i) - fwVendor[i] = *fwP++; - fwVendor[i] = '\0'; - } - PRINT_BV(" EFI-FirmwareVendor : %s\n", fwVendor); - PRINT_BV(" EFI-FirmwareRevision : %d\n", - efiSysTableP->FirmwareRevision); - PRINT_BV(" EFI-SystemTable-Revision : %d.%d\n", - efiSysTableP->Hdr.Revision >> 16, - efiSysTableP->Hdr.Revision & 0xffff); - rsP = (efi_runtime_services_t*) - __va(efiSysTableP->RuntimeServices); - mdcnt = ia64BootParamG.efi_memmap_size / - ia64BootParamG.efi_memdesc_size; - memdP = (efi_memory_descriptor_t*) __va(ia64BootParamG.efi_memmap); - - PRINT_BV("EFI-Memorydescriptors: %d\n", mdcnt); - - for (i = numConvMem = 0, mdP = memdP; i < mdcnt; i++, - mdP = NextMemoryDescriptor(mdP, ia64BootParamG.efi_memdesc_size)) { - /* Relocate runtime memory segments for firmware. */ - PRINT_BV(" %d. Type: %x Attributes: 0x%lx\n", - i, mdP->Type, mdP->Attribute); - PRINT_BV(" PhysStart: 0x%lx NumPages: 0x%lx\n", - mdP->PhysicalStart, mdP->NumberOfPages); - switch (mdP->Type) { - case EfiRuntimeServicesData: - PRINT_BV(" -> EfiRuntimeServicesData\n"); - break; - case EfiACPIReclaimMemory: - PRINT_BV(" -> EfiACPIReclaimMemory\n"); - break; - case EfiACPIMemoryNVS: - PRINT_BV(" -> EfiACPIMemoryNVS\n"); - break; - case EfiConventionalMemory: - PRINT_BV(" -> EfiConventionalMemory\n"); - PRINT_BV(" start: 0x%lx end: 0x%lx\n", - mdP->PhysicalStart, - mdP->PhysicalStart + - mdP->NumberOfPages * EFI_PAGE_SIZE); - if (numConvMem) { - printk(" Currently only one efi " - "memory chunk supported !!!\n"); - break; - } - machineFwG.mach_mem_start = mdP->PhysicalStart; - machineFwG.mach_mem_size = - mdP->NumberOfPages * EFI_PAGE_SIZE; - numConvMem++; - break; - case EfiMemoryMappedIOPortSpace: - PRINT_BV(" -> EfiMemMappedIOPortSpace\n"); - break; - case EfiPalCode: - machineFwG.ia64_pal_base = - __va(mdP->PhysicalStart); - PRINT_BV(" -> EfiPalCode\n" - " start : %p\n", - machineFwG.ia64_pal_base); - break; - } - /* I have to setup the VirtualStart address of every - * RUNTIME-area in preparing the later call of - * SetVirtualAddressMap() therewidth the efi stuff uses - * virtual addressing and the efi runtime functions - * may be called directly. - */ - if (mdP->Attribute & EFI_MEMORY_RUNTIME) { - if (mdP->Attribute & EFI_MEMORY_WB) - mdP->VirtualStart = __va(mdP->PhysicalStart); - else { - if (mdP->Attribute & EFI_MEMORY_UC) - printk("efi_init: RuntimeMemory with " - "UC attribute !!!!!!\n"); - /* - mdP->VirtualStart = - IA64_PHYS_TO_RR6(mdP->PhysicalStart); - */ - } - } - } - /* Now switch efi runtime stuff to virtual addressing. */ - status = ia64_call_efi_physical( - (void*)__va((uint64_t)rsP->SetVirtualAddressMap), - ia64BootParamG.efi_memmap_size, - ia64BootParamG.efi_memdesc_size, - ia64BootParamG.efi_memdesc_version, - ia64BootParamG.efi_memmap); - status = EFI_SUCCESS; - if (status != EFI_SUCCESS) { - printk("warning: unable to switch EFI into virtual " - "(status=%lu)\n", status); - return; - } - /* Getting efi function pointer for getEfiTime. */ - machineFwG.efi.getTimeF = - (efi_get_time_t)__va((uint64_t)rsP->GetTime); - /* Getting efi function pointer for resetSystem. */ - machineFwG.efi.resetSystemF = - (efi_reset_system_t)__va((uint64_t)rsP->ResetSystem); - - /* Scanning the Configuration table of the EfiSystemTable. */ - PRINT_BV("NumberOfConfigTableEntries: %ld\n", - efiSysTableP->NumberOfTableEntries); - - confP = (efi_configuration_table_t*) - __va(efiSysTableP->ConfigurationTable); - for (i = 0; i < efiSysTableP->NumberOfTableEntries; i++) { - if (!efi_guid_cmp(&confP[i].VendorGuid, &sal)) { - machineFwG.ia64_sal_tableP = (sal_system_table_t*) - __va((uint64_t) confP[i].VendorTable); - PRINT_BV(" Found SalSystemTable at: 0x%lx\n", - (uint64_t) machineFwG.ia64_sal_tableP); - continue; - } - if (!efi_guid_cmp(&confP[i].VendorGuid, &acpi)) { - machineFwG.ia64_efi_acpi_table = - __va((uint64_t) confP[i].VendorTable); - PRINT_BV(" Found AcpiTable at: 0x%lx\n", - (uint64_t) machineFwG.ia64_efi_acpi_table); - continue; - } - if (!efi_guid_cmp(&confP[i].VendorGuid, &acpi20)) { - machineFwG.ia64_efi_acpi20_table = - __va((uint64_t) confP[i].VendorTable); - PRINT_BV(" Found Acpi20Table at: 0x%lx\n", - (uint64_t) machineFwG.ia64_efi_acpi20_table); - continue; - } - } -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/fw.S --- a/extras/mini-os/arch/ia64/fw.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,499 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * Parts taken from FreeBSD. - * - *************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - - -#include <mini-os/asm.h> -#include <mini-os/page.h> -#include <mini-os/ia64_cpu.h> -#include <mini-os/ia64_fpu.h> -#include <mini-os/offsets.h> -#include <mini-os/xen/xen.h> - - -/* - * ia64_change_mode: change mode to/from physical mode - * - * Arguments: - * r14 psr for desired mode - * - * Modifies: - * r15-r20 scratch - * ar.bsp translated to new mode - * sp translated to new mode - * iip translated to new mode - */ -ENTRY(ia64_change_mode) - rsm psr.i | psr.ic - mov r19=ar.rsc // save rsc while we change mode - tbit.nz p8,p9=r14,17 // Uses psr.dt-physical or virtual ? - // p8 == true: switch to virtual - // p9 == true: switch to physical - ;; - mov ar.rsc=IA64_RSE_LAZY // turn off RSE - mov r16=rp - ;; - flushrs // clean the rse - srlz.i - ;; -1: mov r15=ip - mov r17=ar.bsp - mov r18=ar.rnat - ;; - add r15=2f-1b,r15 // address to rfi to - /* !!! must be the same like in minios-ia64.lds */ -(p8) movl r20=(KERNEL_START - (1<<KERNEL_PHYS_START_SHIFT)) - ;; - // (p8): switch to virtual - // (p9): switch to physical - - // from virtual to physical -(p9) tpa r15=r15 // ip -(p9) tpa r16=r16 // rp -(p9) tpa r17=r17 // ar.bsp -(p9) tpa sp=sp // sp - ;; /* Needed only for assembler violate ... warnings. */ - // from physical to virtual -(p8) add r15=r20,r15 // ip -(p8) add r16=r20,r16 // rp -(p8) add r17=r20,r17 // ar.bsp -(p8) add sp=r20,sp // sp - ;; - mov ar.bspstore=r17 - mov rp=r16 - ;; - mov ar.rnat=r18 - mov cr.iip=r15 - mov cr.ipsr=r14 // psr for new mode - mov cr.ifs=r0 - ;; - rfi - ;; -2: mov ar.rsc=r19 // restore ar.rsc - ;; - br.ret.sptk.few rp // now in new mode -END(ia64_change_mode) - -/* - * ia64_physical_mode: change mode to physical mode - * - * Return: - * ret0 psr to restore - * - * Modifies: - * r15-r18 scratch - * ar.bsp tranlated to physical mode - * psr.i cleared - */ -ENTRY(ia64_physical_mode) - mov r14=psr - movl r15=(IA64_PSR_I|IA64_PSR_IT|IA64_PSR_DT| \ - IA64_PSR_RT|IA64_PSR_DFL|IA64_PSR_DFH) - ;; - mov ret0=r14 - movl r16=IA64_PSR_BN - ;; - andcm r14=r14,r15 // clear various xT bits - ;; - or r14=r14,r16 // make sure BN=1 - or ret0=ret0,r16 // make sure BN=1 - ;; - br.cond.sptk.many ia64_change_mode -END(ia64_physical_mode) - -/* - * ia64_call_efi_physical: call an EFI procedure in physical mode - * - * Arguments: - * in0 Address of EFI procedure descriptor - * in1-in5 Arguments to EFI procedure - * - * Return: - * ret0-ret3 return values from EFI - * - */ -ENTRY(ia64_call_efi_physical) - .prologue - .regstk 6,4,5,0 - .save ar.pfs,loc0 - alloc loc0=ar.pfs,6,4,5,0 - ;; - .save rp,loc1 - mov loc1=rp - ;; - .body - br.call.sptk.many rp=ia64_physical_mode - ;; - - mov loc2=r8 // psr to restore mode - mov loc3=gp // save kernel gp - ld8 r14=[in0],8 // function address - ;; - ld8 gp=[in0] // function gp value - mov out0=in1 - mov out1=in2 - mov out2=in3 - mov out3=in4 - mov out4=in5 - mov b6=r14 - ;; - br.call.sptk.many rp=b6 // call EFI procedure - mov gp=loc3 // restore kernel gp - mov r14=loc2 // psr to restore mode - ;; - br.call.sptk.many rp=ia64_change_mode - ;; - mov rp=loc1 - mov ar.pfs=loc0 - ;; - br.ret.sptk.many rp -END(ia64_call_efi_physical) - - -/* - * struct ia64_pal_result ia64_call_pal_static(uint64_t proc, - * uint64_t arg1, uint64_t arg2, uint64_t arg3) - */ -ENTRY(ia64_call_pal_static) - - .regstk 4,5,0,0 -palret = loc0 -entry = loc1 -rpsave = loc2 -pfssave = loc3 -psrsave = loc4 - - alloc pfssave=ar.pfs,4,5,0,0 - ;; - mov rpsave=rp - - movl entry=@gprel(ia64_pal_entry) -1: mov palret=ip // for return address - ;; - add entry=entry,gp - mov psrsave=psr - mov r28=in0 // procedure number - ;; - ld8 entry=[entry] // read entry point - mov r29=in1 // copy arguments - mov r30=in2 - mov r31=in3 - ;; - mov b6=entry - add palret=2f-1b,palret // calculate return address - ;; - mov b0=palret - rsm psr.i // disable interrupts - ;; - br.cond.sptk b6 // call into firmware - ;; - ssm psr.i // enable interrupts - ;; -2: mov psr.l=psrsave - mov rp=rpsave - mov ar.pfs=pfssave - ;; - srlz.d - br.ret.sptk rp - -END(ia64_call_pal_static) - -/* - * Call a efi function. - * in0: func descriptor - * in1: param1 - * ... - * in5: param5 - */ -ENTRY(ia64_call_efi_func) - alloc loc0=ar.pfs,6,3,5,0 - - mov loc1=gp - mov loc2=rp - - mov out0=in1 - mov out1=in2 - mov out2=in3 - mov out3=in4 - mov out4=in5 - - ld8 r14=[in0],8 // get function address - ;; - ld8 gp=[in0] // function gp value - ;; - mov b6=r14 - br.call.sptk.many rp=b6 // call EFI procedure - - mov ar.pfs=loc0 - mov gp=loc1 - mov rp=loc2 - br.ret.sptk rp - -END(ia64_call_efi_func) - - -/* Restore the context from the thread context. - */ -ENTRY(restore_context) -{ .mmi - invala - mov ar.rsc=IA64_RSE_LAZY - add r29=SW_SP,in0 -} - add r30=SW_RP,in0 - add r31=SW_PR,in0 - ;; - ld8 r12=[r29],SW_LC-SW_SP // load sp - ld8 r16=[r30],SW_BSP-SW_RP // load rp - ;; - ld8 r17=[r31],SW_RNAT-SW_PR // load pr - ld8 r18=[r30],SW_PFS-SW_BSP // load bsp - mov rp=r16 - ;; - ld8 r16=[r31],SW_R4-SW_RNAT // load rnat - mov pr=r17,-1 // set pr - mov ar.bspstore=r18 - ;; - ld8 r18=[r30],SW_UNATA-SW_PFS // load pfs - ld8 r17=[r29],SW_UNATB-SW_LC // load lc - mov ar.rnat=r16 - ;; - ld8 r16=[r30],SW_R5-SW_UNATA // load unat_a - mov ar.pfs=r18 - mov ar.lc=r17 - ;; - ld8.fill r4=[r31],SW_R6-SW_R4 // load r4 - mov ar.unat=r16 - ;; - ld8.fill r5=[r30],SW_R7-SW_R5 // load r5 - ld8 r16=[r29],SW_B3-SW_UNATB // load unat_b - mov ar.rsc=IA64_RSE_EAGER - ;; - ld8.fill r6=[r31],SW_B1-SW_R6 // load r6 - ld8.fill r7=[r30],SW_B2-SW_R7 // load r7 - ;; - ld8 r17=[r31],SW_B4-SW_B1 // load b1 - ld8 r18=[r30],SW_B5-SW_B2 // load b2 - mov ar.unat=r16 // unat_b - ;; - ld8 r16=[r29],SW_F2-SW_B3 // load b3 - mov b1=r17 - mov b2=r18 - ;; - ld8 r17=[r31],SW_F3-SW_B4 // load b4 - ld8 r18=[r30],SW_F4-SW_B5 // load b5 - mov b3=r16 - ;; - ldf.fill f2=[r29] // load f2 - mov b4=r17 - mov b5=r18 - ;; - ldf.fill f3=[r31],SW_F5-SW_F3 // load f3 - ldf.fill f4=[r30],SW_F4-SW_F2 // load f4 - ;; - ldf.fill f5=[r31],SW_F5-SW_F3 // load f5 - ldf.fill f16=[r30],SW_F4-SW_F2 // load f16 - ;; - ldf.fill f17=[r31],SW_F5-SW_F3 // load f17 - ldf.fill f18=[r30],SW_F4-SW_F2 // load f18 - ;; - ldf.fill f19=[r31],SW_F5-SW_F3 // load f19 - ldf.fill f20=[r30],SW_F4-SW_F2 // load f20 - ;; - ldf.fill f21=[r31],SW_F5-SW_F3 // load f21 - ldf.fill f22=[r30],SW_F4-SW_F2 // load f22 - ;; - ldf.fill f23=[r31],SW_F5-SW_F3 // load f23 - ldf.fill f24=[r30],SW_F4-SW_F2 // load f24 - ;; - ldf.fill f25=[r31],SW_F5-SW_F3 // load f25 - ldf.fill f26=[r30],SW_F4-SW_F2 // load f26 - ;; - ldf.fill f27=[r31],SW_F5-SW_F3 // load f27 - ldf.fill f28=[r30],SW_F4-SW_F2 // load f28 - ;; - ldf.fill f29=[r31],SW_F5-SW_F3 // load f29 - ldf.fill f30=[r30],SW_F4-SW_F2 // load f30 - ;; - ldf.fill f31=[r30],SW_F4-SW_F2 // load f31 - add r8=1,r0 - br.ret.sptk rp - ;; -END(restore_context) - -/* - * void switch_context(struct thread* old, struct thread* new) - */ -ENTRY(switch_context) - - mov ar.rsc=IA64_RSE_LAZY - mov r16=ar.unat - add r31=SW_UNATB,in0 - add r30=SW_SP,in0 - ;; -{ .mmi - flushrs - st8 [r30]=sp,SW_RP-SW_SP // sp - mov r17=rp - ;; -} - st8 [r31]=r16,SW_PR-SW_UNATB // unat (before) - st8 [r30]=r17,SW_BSP-SW_RP // rp - mov r16=pr - ;; - st8 [r31]=r16,SW_PFS-SW_PR // pr - mov r17=ar.bsp - mov r16=ar.pfs - ;; - st8 [r31]=r16,SW_RNAT-SW_PFS // save pfs - st8 [r30]=r17,SW_R4-SW_BSP // save bsp - mov r16=ar.rnat - ;; - st8 [r31]=r16,SW_R5-SW_RNAT // save rnat - mov ar.rsc=IA64_RSE_EAGER - ;; -{ .mmi - .mem.offset 8,0 - st8.spill [r30]=r4,SW_R6-SW_R4 // r4 - .mem.offset 16,0 - st8.spill [r31]=r5,SW_R7-SW_R5 // r5 - mov r16=b1 - ;; -} -{ .mmi - .mem.offset 8,0 - st8.spill [r30]=r4,SW_B1-SW_R6 // r6 - .mem.offset 16,0 - st8.spill [r31]=r5,SW_B2-SW_R7 // r7 - mov r17=b2 - ;; -} - st8 [r30]=r16,SW_UNATA-SW_B1 // b1 - st8 [r31]=r17,SW_B3-SW_B2 // b2 - mov r18=ar.unat - mov r19=b3 - mov r20=b4 - mov r21=b5 - ;; - st8 [r30]=r18,SW_B4-SW_UNATA // unat (after) - st8 [r31]=r19,SW_B5-SW_B3 // b3 - ;; - st8 [r30]=r20,SW_LC-SW_B4 // b4 - st8 [r31]=r21,SW_F2-SW_B5 // b5 - mov r17=ar.lc - ;; - st8 [r30]=r17,SW_F3-SW_LC // ar.lc - stf.spill [r31]=f2,SW_F4-SW_F2 - ;; - stf.spill [r30]=f3,SW_F5-SW_F3 - stf.spill [r31]=f4,SW_F4-SW_F2 - ;; - stf.spill [r30]=f5,SW_F5-SW_F3 - stf.spill [r31]=f16,SW_F4-SW_F2 - ;; - stf.spill [r30]=f17,SW_F5-SW_F3 - stf.spill [r31]=f18,SW_F4-SW_F2 - ;; - stf.spill [r30]=f19,SW_F5-SW_F3 - stf.spill [r31]=f20,SW_F4-SW_F2 - ;; - stf.spill [r30]=f21,SW_F5-SW_F3 - stf.spill [r31]=f22,SW_F4-SW_F2 - ;; - stf.spill [r30]=f23,SW_F5-SW_F3 - stf.spill [r31]=f24,SW_F4-SW_F2 - ;; - stf.spill [r30]=f25,SW_F5-SW_F3 - stf.spill [r31]=f26,SW_F4-SW_F2 - ;; - stf.spill [r30]=f27,SW_F5-SW_F3 - stf.spill [r31]=f28,SW_F4-SW_F2 - ;; - stf.spill [r30]=f29,SW_F4-SW_F2 - stf.spill [r31]=f30 - ;; - stf.spill [r30]=f31 - add r8=0,r0 - mf -// br.ret.sptk rp - -{ .mfb - mov r32=r33 - nop 0 - br.sptk restore_context - ;; -} - -END(switch_context) - -/* - * The function is used to start a new thread. - */ -ENTRY(thread_starter) - - .prologue - .save ar.pfs,loc0 - alloc loc0=ar.pfs,0,1,1,0 - ;; - .body - ;; - mov b7=r4 // the function pointer - mov out0=r6 // the argument - ;; - br.call.sptk.many rp=b7 // Call the thread function - ;; - br.call.sptk.many rp=exit_thread // call exit_thread - ;; -END(thread_starter) - -ENTRY(__hypercall) - mov r2=r37 - break 0x1000 - br.ret.sptk.many b0 - ;; -END(__hypercall) - -/* - * Stub for suspend. - * Just force the stacked registers to be written in memory. - */ -ENTRY(xencomm_arch_hypercall_suspend) - ;; - alloc r20=ar.pfs,0,0,6,0 - mov r2=__HYPERVISOR_sched_op - ;; - /* We don't want to deal with RSE. */ - flushrs - mov r33=r32 - mov r32=2 // SCHEDOP_shutdown - ;; - break 0x1000 - ;; - br.ret.sptk.many b0 -END(xencomm_arch_hypercall_suspend) - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/gen_off.c --- a/extras/mini-os/arch/ia64/gen_off.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2007 Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - ****************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#include <mini-os/types.h> -#include <mini-os/sched.h> -#include <xen/xen.h> -#include <xen/arch-ia64.h> - -#define DEFINE(sym, val) \ - asm volatile("\n->" sym " %0 /* " #val " */": : "i" (val)) -#define DEFINE_STR2(sym, pfx, val) \ - asm volatile("\n->" sym " " pfx "%0" : : "i"(val)); - -#define SZ(st,e) sizeof(((st *)0)->e) -#define OFF(st,e,d,o) \ - DEFINE(#d, offsetof(st, e) + o); \ - DEFINE(#d "_sz", SZ(st,e )); \ - DEFINE_STR2(#d "_ld", "ld", SZ(st, e)); \ - DEFINE_STR2(#d "_st", "st", SZ(st, e)); - -#define TFOFF(e,d) OFF(trap_frame_t, e, d, 0) -#define SIZE(st,d) DEFINE(#d, sizeof(st)) - -#define SWOFF(e,d) OFF(struct thread, e, d, 0) - -/* shared_info_t from xen/xen.h */ -#define SI_OFF(e, d) OFF(shared_info_t, e, d,0) -/* mapped_regs_t from xen/arch-ia64.h */ -#define MR_OFF(e, d) OFF(mapped_regs_t, e, d, XMAPPEDREGS_OFS) - -int -main(int argc, char ** argv) -{ - TFOFF(cfm, TF_CFM); - TFOFF(pfs, TF_PFS); - TFOFF(bsp, TF_BSP); - TFOFF(rnat, TF_RNAT); - TFOFF(csd, TF_CSD); - TFOFF(ccv, TF_CCV); - TFOFF(unat, TF_UNAT); - TFOFF(fpsr, TF_FPSR); - TFOFF(pr, TF_PR); - - TFOFF(sp, TF_SP); - TFOFF(gp, TF_GP); - TFOFF(tp, TF_TP); - - TFOFF(r2, TF_GREG2); - TFOFF(r3, TF_GREG3); - TFOFF(r16, TF_GREG16); - TFOFF(r17, TF_GREG17); - - TFOFF(b0, TF_BREG0); - TFOFF(b6, TF_BREG6); - TFOFF(b7, TF_BREG7); - - TFOFF(f6, TF_FREG6); - TFOFF(f7, TF_FREG7); - - TFOFF(rsc, TF_RSC); - TFOFF(ndirty, TF_NDIRTY); - TFOFF(ssd, TF_SSD); - TFOFF(iip, TF_IIP); - TFOFF(ipsr, TF_IPSR); - TFOFF(ifs, TF_IFS); - TFOFF(trap_num, TF_TRAP_NUM); - - TFOFF(ifa, TF_IFA); - TFOFF(isr, TF_ISR); - TFOFF(iim, TF_IIM); - - SIZE(trap_frame_t, TF_SIZE); - - SIZE(struct thread, SW_SIZE); - SWOFF(regs.unat_b, SW_UNATB); - SWOFF(regs.sp, SW_SP); - SWOFF(regs.rp, SW_RP); - SWOFF(regs.pr, SW_PR); - SWOFF(regs.pfs, SW_PFS); - SWOFF(regs.bsp, SW_BSP); - SWOFF(regs.rnat, SW_RNAT); - SWOFF(regs.lc, SW_LC); - //SWOFF(regs.fpsr, SW_FPSR); - //SWOFF(regs.psr, SW_PSR); - //SWOFF(regs.gp, SW_GP); - SWOFF(regs.unat_a, SW_UNATA); - SWOFF(regs.r4, SW_R4); - SWOFF(regs.r5, SW_R5); - SWOFF(regs.r6, SW_R6); - SWOFF(regs.r7, SW_R7); - SWOFF(regs.b1, SW_B1); - SWOFF(regs.b2, SW_B2); - SWOFF(regs.b3, SW_B3); - SWOFF(regs.b4, SW_B4); - SWOFF(regs.b5, SW_B5); - SWOFF(regs.f2, SW_F2); - SWOFF(regs.f3, SW_F3); - SWOFF(regs.f4, SW_F4); - SWOFF(regs.f5, SW_F5); - - SI_OFF(arch.start_info_pfn, START_INFO_PFN); - MR_OFF(interrupt_mask_addr, XSI_PSR_I_ADDR_OFS); - MR_OFF(interrupt_collection_enabled, XSI_PSR_IC_OFS); - MR_OFF(ipsr, XSI_IPSR_OFS); - MR_OFF(iip, XSI_IIP_OFS); - MR_OFF(ifs, XSI_IFS_OFS); - MR_OFF(ifa, XSI_IFA_OFS); - MR_OFF(iim, XSI_IIM_OFS); - MR_OFF(iim, XSI_IIM_OFS); - MR_OFF(iipa, XSI_IIPA_OFS); - MR_OFF(isr, XSI_ISR_OFS); - MR_OFF(banknum, XSI_BANKNUM_OFS); - MR_OFF(bank1_regs[0], XSI_BANK1_R16_OFS); - MR_OFF(precover_ifs, XSI_PRECOVER_IFS_OFS); - - return 0; -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/ia64.S --- a/extras/mini-os/arch/ia64/ia64.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2007 Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - ***************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - - -#include <mini-os/asm.h> -#include <mini-os/page.h> -#include <mini-os/ia64_cpu.h> -#include <mini-os/ia64_fpu.h> -#include <mini-os/privop.h> -#include <mini-os/offsets.h> - - - - /* - * Allocate kernel stack area. - * This is used for stack pointer (goes down from kstack+PAGE_SIZE) and - * RSE (goes up from kstack). - */ - .section .data.start,"aw" - .global kstack - .align PAGE_SIZE -kstack: .space KSTACK_PAGES * PAGE_SIZE - - .text - - /* - * Start the kernel. - * r28 points to the address of the boot parameter area, given - * from the bootloader. - * Execution reaches here in physical mode. - */ -ENTRY(_start) - .prologue - .save rp, r0 // terminate unwind chain with a NULL rp - .body - - alloc loc0=ar.pfs,0,1,1,0 - - rsm psr.i | psr.ic - ;; - srlz.i - ;; - - /* - * Initialize mini-os region registers: - * Currently only region registers 5 and 7 are used for addressing. - * rr[5] : virtual kernel address space - * rr[7] : directly mapped physically addresses. - */ - movl r2=0<<IA64_RR_IDX_POS - movl r3=1<<IA64_RR_IDX_POS - ;; - mov rr[r2]=r0 - mov rr[r3]=r0 - ;; - movl r2=2<<IA64_RR_IDX_POS - movl r3=3<<IA64_RR_IDX_POS - ;; - mov rr[r2]=r0 - mov rr[r3]=r0 - ;; - movl r2=4<<IA64_RR_IDX_POS - movl r3=6<<IA64_RR_IDX_POS - ;; - mov rr[r2]=r0 - mov rr[r3]=r0 - ;; - // Wired memory for kernel data and text. - movl r2=IA64_RR_VAL(KERNEL_TR_PAGE_SIZE,0) - movl r3=5<<IA64_RR_IDX_POS // region 5 - ;; - mov rr[r3]=r2 - ;; - /* - * Region 7 addresses are only for directly mapped physically - * addresses. - */ - movl r2=IA64_RR_VAL(PTE_PS_16K,0) - movl r3=7<<IA64_RR_IDX_POS // region 7 - ;; - mov rr[r3]=r2 - ;; - /* - * Setup protection keys for region 5 and 7. - */ - mov r2=(IA64_KEY_REG5 << IA64_PKR_KEY) | IA64_PKR_VALID - mov r3=(IA64_KEY_REG7 << IA64_PKR_KEY) | IA64_PKR_VALID - mov r14=0x1 - ;; - mov pkr[r0]=r2 /* Region 5 */ - mov pkr[r14]=r3 /* Region 7 */ - ;; - /* - * Now pin mappings into the TLB for kernel text and data - */ - mov r18=(KERNEL_TR_PAGE_SIZE<<IA64_ITIR_PS)| \ - (IA64_KEY_REG5<<IA64_ITIR_KEY) - movl r17=KERNEL_START - ;; - mov cr.itir=r18 - mov cr.ifa=r17 - mov r16=IA64_TR_KERNEL - mov r3=ip - movl r18=PTE_KERNEL_ATTR - ;; - dep r2=0,r3,0,KERNEL_TR_PAGE_SIZE - ;; - or r18=r2,r18 - ;; - srlz.i - ;; - itr.i itr[r16]=r18 - ;; - itr.d dtr[r16]=r18 - ;; - srlz.i - - /* Switch into virtual mode */ - movl r16=STARTUP_PSR - ;; - mov cr.ipsr=r16 - movl r17=1f - ;; - mov cr.iip=r17 - mov cr.ifs=r0 - ;; - rfi - ;; -1: /* now we are in virtual mode */ - - movl r3=ia64_trap_table - ;; - mov cr.iva=r3 - ;; - - movl r2=IA64_FPSR_DEFAULT - movl r3=IA64_DCR_DEFAULT - ;; - srlz.i - movl gp=__gp - - mov ar.fpsr=r2 - mov cr.dcr=r3 - ;; - movl r2=kstack - movl r5=KSTACK_PAGES * PAGE_SIZE - 16 - mov ar.rsc=0 // place RSE in enforced lazy mode - ;; - loadrs // clear the dirty partition - ;; - mov ar.bspstore=r2 // establish the new RSE stack - add sp=r2,r5 - ;; - mov ar.rsc=IA64_RSE_EAGER // place RSE in eager mode - - ;; - movl r2=ia64_boot_paramP - mov r3=7 // make address virtual region 7. - ;; - dep r28=r3,r28,61,3 - ;; - // save the address of the boot param area - // passed by the bootloader - st8 [r2]=r28 - ;; - - /* Set xsi base. I use here XSI_BASE. */ -#define FW_HYPERCALL_SET_SHARED_INFO_VA 0x600 - mov r2=FW_HYPERCALL_SET_SHARED_INFO_VA - movl r28=XSI_BASE - ;; - break 0x1000 - ;; - /* - * I set up here the pointer to the global start_info structure. - * This structure will be initialized in arch_init(). - */ - movl out0=start_info_union - // Prepare out0 - the pointer to start_info_t. - movl r14=XSI_BASE - ;; - add r15=START_INFO_PFN,r14 // add offset to XSI_BASE - ;; - START_INFO_PFN_ld r14=[r15] // load the start_info_pfn - add r16=7, r0 - ;; - shl r15=r14,PAGE_SHIFT_XEN_16K // pfn << PAGE_SHIFT_XEN_16K - shl r16=r16,IA64_RR_IDX_POS // (7<<IA64_RR_IDX_POS) - ;; - or out0=r16, r15 // make a region 7 address - ;; - ssm psr.i | psr.ic - ;; - srlz.i - ;; - br.call.sptk.many rp=start_kernel - ;; - add r2=3,r0 - ;; - ld8 r3=[r2] - ;; - -self: hint @pause - br.sptk.many self // endless loop -END(_start) - - -ENTRY(do_nop) - nop 0x01 - add r15=1,r15 - br.ret.sptk.many rp -END(do_nop) diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/ivt.S --- a/extras/mini-os/arch/ia64/ivt.S Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,774 +0,0 @@ -/* - * Copyright (c) 2007 Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * Description: ia64 specific trap handling. - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - - -#include <mini-os/asm.h> -#include <mini-os/page.h> -#include <mini-os/ia64_cpu.h> -#include <mini-os/privop.h> -#include <mini-os/offsets.h> - - -/* General register usage in interrupt handling: - * r16, r17, ... are used for input parameters of sub-routines - * r29: used to access memory which may raise nested TLB fault - * r30: b0 save register - * r31: predicates save register - * p30,p31: used for TLB stuff: (0,1)=data, (1,0)=instruction - */ - - -#define FILL_FP_PAIR(f1, f2, b1, b2) \ - ldf.fill f1=[b1],32 ;\ - ldf.fill f2=[b2],32 ;\ - ;; - -#define SPILL_FP_PAIR(f1, f2, b1, b2) \ - stf.spill [b1]=f1,32 ;\ - stf.spill [b2]=f2,32 ;\ - ;; - -#define FILL_REG_PAIR(r1, r2, b1, b2) \ - ld8.fill r1=[b1],16 ;\ - ld8.fill r2=[b2],16 ;\ - ;; - -#define SPILL_REG_PAIR(r1, r2, b1, b2) \ - .mem.offset 0,0 ;\ - st8.spill [b1]=r1,16 ;\ - .mem.offset 8,0 ;\ - st8.spill [b2]=r2,16 ;\ - ;; - - -/** - * The function does a store of the current processor context - * to the given exception frame address. - * These are some special and the scratch registers for calling - * C-functions later. - * The bspstore will be the same. A clean RSE is made with the - * cover instruction. - * - * The return is done through a jump to the next bundle after ip (r16). - * - * Used register: r16, r18, r19, r20, r21, r22 of bank 0 - * - * @param: r16 ip of the bundle with the jump. - * @param: r18 pointer to the trap frame. - * @param: r23 trap number/err val - * - */ - -ENTRY(save_tf_rse_switch) - movl r21=XSI_IPSR // XEN !! - movl r22=XSI_IIP // XEN !! - ;; - ld8 r21=[r21] // XEN.ipsr - ld8 r22=[r22];; // XEN.iip - add r19=TF_IPSR,r18 - add r20=TF_IIP,r18 - ;; - st8 [r19]=r21 // store cr.ipsr - st8 [r20]=r22 // store cr.iip - ;; - //// r16 return jump pointer, r18 - trap frame base, - add r19=TF_UNAT,r18 - mov r20=ar.unat - ;; - st8 [r19]=r20 // store scratch unat - ;; - - add r19=TF_GP,r18 - add r20=TF_SP,r18 - ;; - st8 [r19]=gp,TF_TP-TF_GP // store gp - st8 [r20]=sp,TF_PR-TF_SP // store sp - mov r21=pr - ;; - st8 [r19]=r13 // store tp - st8 [r20]=r21 // store pr - ;; - add r19=TF_GREG2,r18 // Now first general regs. - add r20=TF_GREG3,r18 - ;; - SPILL_REG_PAIR( r2, r3,r19,r20) - SPILL_REG_PAIR( r8, r9,r19,r20) - SPILL_REG_PAIR(r10,r11,r19,r20) - SPILL_REG_PAIR(r14,r15,r19,r20) - ;; - mov r14=r18 // move trap frame base for bsw - mov r15=r16 // save return address - ;; - //bsw.1 // switch to bank 1 for saving these registers. - movl r30=XSI_BANKNUM // Switch to bank 1. - mov r31=1;; - st4 [r30]=r31 - ;; - /* - * On XEN the hypervisor has stored the bank 1 registers - * r16-r31. I must reload these registers here to get - * access. - */ - movl r30=XSI_BANK1_R16; - movl r31=XSI_BANK1_R16+8;; - ld8 r16=[r30],16; ld8 r17=[r31],16;; - ld8 r18=[r30],16; ld8 r19=[r31],16;; - ld8 r20=[r30],16; ld8 r21=[r31],16;; - ld8 r22=[r30],16; ld8 r23=[r31],16;; - ld8 r24=[r30],16; ld8 r25=[r31],16;; - ld8 r26=[r30],16; ld8 r27=[r31],16;; - ld8 r28=[r30],16; ld8 r29=[r31],16;; - ld8 r30=[r30]; ld8 r31=[r31];; - add r2=TF_GREG16,r14 - add r3=TF_GREG17,r14 - ;; - SPILL_REG_PAIR(r16,r17,r2,r3) - SPILL_REG_PAIR(r18,r19,r2,r3) - SPILL_REG_PAIR(r20,r21,r2,r3) - SPILL_REG_PAIR(r22,r23,r2,r3) - SPILL_REG_PAIR(r24,r25,r2,r3) - SPILL_REG_PAIR(r26,r27,r2,r3) - SPILL_REG_PAIR(r28,r29,r2,r3) - SPILL_REG_PAIR(r30,r31,r2,r3) - ;; - //bsw.0 // back to interrupt bank 0 - movl r2=XSI_BANKNUM;; - st4 [r2]=r0 - ;; - mov r18=r14 // restore context pointer - mov r16=r15 // restore return address - ;; - //// r16 return jump pointer, r18 - trap frame base, - add r19=TF_CCV,r18 - add r20=TF_CSD,r18 - mov r21=ar.ccv - mov r22=ar.csd - ;; - st8 [r19]=r21 // ar.ccv - st8 [r20]=r22 // ar.csd - ;; - add r19=TF_SSD,r18 - mov r21=ar.ssd - ;; - st8 [r19]=r21 // ar.ssd - ;; - add r19=TF_FREG6,r18 - add r20=TF_FREG7,r18 - ;; - SPILL_FP_PAIR(f6, f7, r19, r20) - SPILL_FP_PAIR(f8, f9, r19, r20) - SPILL_FP_PAIR(f10, f11, r19, r20) - - add r19=TF_BREG0,r18 // b0, b6, b7 - add r20=TF_BREG6,r18 - mov r21=b0 - mov r22=b6 - ;; - st8 [r19]=r21,TF_BREG7-TF_BREG0 // store b0 - st8 [r20]=r22,16 // store b6 - ;; - mov r21=b7 - ;; - st8 [r19]=r21 // store b7 - - //// r16 return jump pointer, r18 - trap frame base, - - // Read and save RSC, PFS - add r19=TF_PFS,r18 - add r20=TF_RSC,r18 - mov r21=ar.pfs - mov r22=ar.rsc - ;; -{ .mmb - st8 [r19]=r21 // store ar.pfs - st8 [r20]=r22 // store ar.rsc - // Issue cover instruction - cover // must be the last instruction in bundle - //XEN_HYPER_COVER - ;; -} - // Read and save IFS - add r19=TF_IFS,r18 - add r20=TF_CFM,r18 - /* xen special handling for possibly lazy cover */ - movl r8=XSI_PRECOVER_IFS; - ;; - ld8 r21=[r8] - ;; - st8 [r19]=r21 // store cr.ifs - dep.z r22=r21,0,38 // copy ifm part from ifs.ifm - ;; - st8 [r20]=r22 // store cfm - // RSE in enforced lazy mode - mov ar.rsc=IA64_RSE_LAZY - ;; - // Read and save BSPSTORE and RNAT - add r19=TF_BSP,r18 - add r20=TF_RNAT,r18 - mov r21=ar.bspstore - mov r22=ar.rnat - ;; - st8 [r19]=r21 // store ar.bspstore - st8 [r20]=r22 // store ar.rnat - ;; - // Write new BSPSTORE - //mov r21=ar.bsp - //;; - mov r22=r21 // new bspstore equal to old - ;; - mov ar.bspstore=r22 // the new bspstore - ;; - // Read and save the new BSP for calculating number of dirty regs. - mov r21=ar.bsp - ;; - sub r21=r21,r22 // r21 -> ndirty - add r19=TF_NDIRTY-TF_BSP,r19 // TF_NDIRTY pos in r19 - ;; - st8 [r19]=r21 // store ndirty - ;; - mov ar.rsc=IA64_RSE_EAGER // RSE on again - ;; - add r19=TF_FPSR,r18 - ;; - mov r21=ar.fpsr - ;; - st8 [r19]=r21 // ar.fpsr - ;; - //// r16 return jump pointer, r18 - trap frame base, - // Load the gp with our module __gp - movl gp=__gp - ;; - add r16=16,r16 // for jump to next bundle - ;; - mov b7=r16 - ;; - -{ .mfb - srlz.d - nop 0 - br.sptk b7 - ;; -} - -END(save_tf_rse_switch) - - -/** - * The function reloads the processor context stored in - * save_tf_rse_switch(). - * - * On calling the function the bank 0 must be activ. - * The return is done through a rfi. - * Used register: b7, r16, r18, r19, r20, r21, r22 of bank 0 - * - * @param: r18 pointer to the exception frame - * - */ -ENTRY(restore_tf_rse_switch) - add r19=TF_IPSR,r18 - add r20=TF_IIP,r18 - ;; - ld8 r21=[r19] // load cr.ipsr - ld8 r22=[r20] // load cr.iip - movl r16=XSI_IPSR // XEN !! - ;; - st8 [r16]=r21,XSI_IIP_OFS-XSI_IPSR_OFS // XEN.ipsr - mov r2=r21 // save for fp stuff below - ;; - st8 [r16]=r22 // XEN.iip - ;; - //// r18 - trap frame base - // Allocate a zero sized frame - alloc r30=ar.pfs,0,0,0,0 // discard current frame - ;; - // calc number of dirty regs and put this into rsc.loardrs - add r19=TF_NDIRTY,r18 - ;; - ld8 r22=[r19] // ndirty - ;; - shl r21=r22,16 // value for ar.rsc - ;; - mov ar.rsc=r21 // setup for loadrs - ;; - // Issue a loadrs instruction -{ .mmi - loadrs // must be the first instruction - ;; - nop 0x0 - nop 0x0 -} - // Restore BSPSTORE from interrupted context - add r19=TF_BSP,r18 - add r20=TF_RNAT,r18 - ;; - ld8 r21=[r19] // load ar.bspstore - ld8 r22=[r20] // load ar.rnat - ;; - mov ar.bspstore=r21 // set ar.bspstore - ;; - // Restore RNAT - mov ar.rnat=r22 // set ar.rnat - ;; - // Restore PFS and IFS - add r19=TF_PFS,r18 - add r20=TF_IFS,r18 - movl r16=XSI_IFS // XEN !! - ;; - ld8 r21=[r19] // load ar.pfs - ld8 r22=[r20] // load cr.ifs - ;; - add r19=TF_RSC,r18 - mov ar.pfs=r21 - st8 [r16]=r22 // XEN.ifs - ;; - // Restore RSC - ld8 r21=[r19] // load ar.rsc - ;; - mov ar.rsc=r21 // set ar.rsc - //// r18 - trap frame base - add r19=TF_GP,r18 - add r20=TF_SP,r18 - ;; - ld8 gp=[r19],TF_TP-TF_GP // load gp - ld8 sp=[r20],TF_PR-TF_SP // load sp - ;; - ld8 r13=[r19] // load tp - ld8 r21=[r20] // load pr - ;; - mov pr=r21,-1 // set pr - ;; - add r19=TF_BREG0,r18 - add r20=TF_BREG6,r18 - ;; - ld8 r21=[r19],TF_BREG7-TF_BREG0 // load b0 - ld8 r22=[r20],16 // load b6 - ;; - mov b0=r21 - mov b6=r22 - ;; - ld8 r21=[r19] // load b7 - ld8 r22=[r20],16 // load b3 - ;; - mov b7=r21 - //// r18 - trap frame base - mov r14=r18 // Save the context pointer - ;; - // bsw.1 - movl r30=XSI_BANKNUM // Switch to bank 1. - mov r31=1;; - st4 [r30]=r31 - ;; - add r2=TF_GREG16,r14 - add r3=TF_GREG17,r14 - ;; - FILL_REG_PAIR(r16,r17,r2,r3) - FILL_REG_PAIR(r18,r19,r2,r3) - FILL_REG_PAIR(r20,r21,r2,r3) - FILL_REG_PAIR(r22,r23,r2,r3) - FILL_REG_PAIR(r24,r25,r2,r3) - FILL_REG_PAIR(r26,r27,r2,r3) - FILL_REG_PAIR(r28,r29,r2,r3) - FILL_REG_PAIR(r30,r31,r2,r3) - - /* - * On XEN I have to store the bank 1 register into the - * global XSI_... area. - */ - // r16-r31 all now hold bank1 values - movl r2=XSI_BANK1_R16 - movl r3=XSI_BANK1_R16+8 - ;; - .mem.offset 0,0; st8.spill [r2]=r16,16 - .mem.offset 8,0; st8.spill [r3]=r17,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r18,16 - .mem.offset 8,0; st8.spill [r3]=r19,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r20,16 - .mem.offset 8,0; st8.spill [r3]=r21,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r22,16 - .mem.offset 8,0; st8.spill [r3]=r23,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r24,16 - .mem.offset 8,0; st8.spill [r3]=r25,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r26,16 - .mem.offset 8,0; st8.spill [r3]=r27,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r28,16 - .mem.offset 8,0; st8.spill [r3]=r29,16 - ;; - .mem.offset 0,0; st8.spill [r2]=r30,16 - .mem.offset 8,0; st8.spill [r3]=r31,16 - ;; - // bsw.0 - movl r2=XSI_BANKNUM;; - st4 [r2]=r0; - - mov r18=r14 // Move back the context pointer - ;; - add r19=TF_GREG2,r18 - add r20=TF_GREG3,r18 - ;; - FILL_REG_PAIR( r2, r3,r19,r20) - FILL_REG_PAIR( r8, r9,r19,r20) - FILL_REG_PAIR(r10,r11,r19,r20) - FILL_REG_PAIR(r14,r15,r19,r20) - - //// r18 - trap frame base, - - add r19=TF_CCV,r18 - add r20=TF_CSD,r18 - ;; - ld8 r21=[r19] // ar.ccv - ld8 r22=[r20] // ar.csd - ;; - mov ar.ccv=r21 - mov ar.csd=r22 - add r19=TF_SSD,r18 - ;; - ld8 r21=[r19] // ar.ssd - ;; - mov ar.ssd=r21 - add r19=TF_FREG6,r18 - add r20=TF_FREG7,r18 - ;; - FILL_FP_PAIR(f6, f7, r19, r20) - FILL_FP_PAIR(f8, f9, r19, r20) - FILL_FP_PAIR(f10, f11, r19, r20) - add r19=TF_FPSR,r18 - ;; - ld8 r21=[r19] // ar.fpsr - ;; - mov ar.fpsr=r21 - add r19=TF_UNAT,r18 - ;; - ld8 r21=[r19] - ;; - mov ar.unat=r21 - ;; - srlz.i - ;; - //rfi - XEN_HYPER_RFI; - ;; -END(restore_tf_rse_switch) - - -ENTRY(save_special_regs) - alloc loc0=ar.pfs,1,7,0,0 - movl loc1=XSI_IFA // XEN !! - movl loc2=XSI_ISR // XEN !! - ;; - ld8 loc3=[loc1],XSI_IIM_OFS-XSI_IFA_OFS // load XEN.ifa - ld8 loc4=[loc2],XSI_IIPA_OFS-XSI_ISR_OFS // load XEN.isr - add loc5=TF_IFA,in0 - add loc6=TF_ISR,in0 - ;; - st8 [loc5]=loc3,TF_IIM-TF_IFA // store cr.ifa - st8 [loc6]=loc4 // store cr.isr - ;; - ld8 loc3=[loc1] // load XEN.iim - ;; - st8 [loc5]=loc3 // store cr.iim - ;; - mov ar.pfs=loc0 - ;; - br.ret.sptk.few rp -END(save_special_regs) - - -ENTRY(hypervisor_callback) - /* - * Use the thread stack here for storing the trap frame. - * It's not wired mapped, so nested data tlb faults may occur! - */ - add r18=-TF_SIZE,sp - ;; -{ .mib - nop 0x02 - mov r16=ip // for jump back from save_tf_rse_switch - br.sptk save_tf_rse_switch - ;; -} - add sp=-16,r18 // the new stack - alloc r15=ar.pfs,0,0,1,0 // 1 out for do_hypervisor_callback - ;; - mov out0=r18 // the trap frame - movl r22=XSI_PSR_IC - mov r23=1;; - st8 [r22]=r23 // ssm psr.ic - ;; - br.call.sptk.few rp = do_hypervisor_callback - - movl r22=XSI_PSR_IC - ;; - st4 [r22]=r0 // rsm psr.ic - add r18=16,sp // load EF-pointer again - ;; - // must have r18-efp, calls rfi at the end. - br.sptk restore_tf_rse_switch - ;; -END(hypervisor_callback) - - /* - * In: r30 - trap number - */ -ENTRY(trap_error) - // Calculate the stack address for storing. - add r18=-TF_SIZE,sp - ;; - add r20=TF_TRAP_NUM,r18 - ;; - st2 [r20]=r30 // save trap number - ;; - -{ .mib - nop 0x02 - mov r16=ip // for jumping back from save_tf_rse_switch - // Used register: r16, r18, r19, r20, r21, r22 of bank 0 - br.sptk save_tf_rse_switch - ;; -} - - alloc r15=ar.pfs,0,0,1,0 // 1 out for do_trap_error - ;; - mov out0=r18 // the trap frame - add sp=-16,r18 // C-call abi - ;; - movl r30=XSI_BANKNUM // bsw.1 - mov r31=1;; - st4 [r30]=r31;; - - /* Save extra interrupt registers to the trap frame. */ - br.call.sptk.few rp = save_special_regs - ;; - - movl r22=XSI_PSR_IC - movl r23=XSI_PSR_I_ADDR - ;; - ld8 r23=[r23] - mov r25=1 - ;; - st4 [r22]=r25 // ssm psr.ic - st1 [r23]=r0 // ssm psr.i - ;; - - br.call.sptk.few rp = do_trap_error - ;; - // --> currently not reached!!! - movl r23=XSI_PSR_I_ADDR - movl r22=XSI_PSR_IC - ;; - ld8 r23=[r23] - mov r25=1 - ;; - st1 [r23]=r25 - st4 [r22]=r0 // note: clears both vpsr.i and vpsr.ic! - ;; - bsw.0 - ;; - add r18=16,sp // load EF-pointer again - ;; - mov sp=r18 - // must have r18-efp, calls rfi at the end. - br.sptk restore_tf_rse_switch - ;; -END(trap_error) - - -/* - * The trap handler stuff. - */ - -#define TRAP_ERR(num) \ - mov r30 = num; \ - ;; ; \ - br.sptk trap_error \ - ;; - -#define IVT_ENTRY(name, offset) \ - .org ia64_trap_table + offset; \ - .global hivt_##name; \ - .proc hivt_##name; \ - .prologue; \ - .body; \ -hivt_##name: - -#define IVT_END(name) \ - .endp hivt_##name; \ - .align 0x100 - -#define IVT_ERR(name, num, offset) \ - IVT_ENTRY(name, offset); \ - TRAP_ERR(num); \ - IVT_END(name) -/* - * The IA64 Interrupt Vector Table (IVT) contains 20 slots with 64 - * bundles per vector and 48 slots with 16 bundles per vector. - */ - - .section .text.hivt,"ax" - .align 32768 - .global ia64_trap_table - .size ia64_trap_table, 32768 -ia64_trap_table: - -IVT_ERR(VHPT_Translation, 0, 0x0) -IVT_ERR(Instruction_TLB, 1, 0x0400) -IVT_ERR(Data_TLB, 2, 0x0800) -IVT_ERR(Alternate_Instruction_TLB, 3, 0x0c00) - - -IVT_ENTRY(Alternate_Data_TLB, 0x1000) - mov r30=4 // trap number -adt_common: - mov r16=cr.ifa // where did it happen - mov r31=pr // save predicates - ;; - extr.u r17=r16,IA64_RR_IDX_POS,3 // get region number - ;; - cmp.eq p14,p15=7,r17 - ;; -//(p14) br.sptk adt_regf_addr // Check for region 7 - phys addresses -// ;; -// br.sptk trap_error -// // No return -// -//adt_regf_addr: -// extr.u r17=r16,60,4 // get region number -// ;; -// cmp.eq p14,p15=0xf,r17 -// ;; -(p14) br.sptk adt_reg7_addr // Check for region 7 - phys addresses - ;; - br.sptk trap_error - -adt_reg7_addr: - /* - * region 7 addresses are only directly mapped physically - * addresses. Currently I don't do a check. - */ - movl r20=~((7 << IA64_RR_IDX_POS) | 0xfff) - movl r18=((PTE_PS_16K<<IA64_ITIR_PS)|(IA64_KEY_REG7<<IA64_ITIR_KEY)) - ;; - movl r19= ((1<<PTE_OFF_P) | (PTE_MA_WB<<PTE_OFF_MA) | \ - (1<<PTE_OFF_A) | (1<<PTE_OFF_D) | \ - (PTE_PL_KERN<<PTE_OFF_PL) | (PTE_AR_RW<<PTE_OFF_AR)) - // clear the region bits and 0-11 - // extract the pfn from the ifa - mov cr.itir=r18 - and r20=r20, r16 - ;; - or r20=r20,r19 // put pfn into pte - ;; - mov pr=r31,-1 // restore predicates - itc.d r20 - ;; - XEN_HYPER_RFI; - ;; - -IVT_END(Alternate_Data_TLB) - -/* - * Handling of nested data tlb is needed, because in hypervisor_callback() - * the stack is used to store the register trap frame. This stack is allocated - * dynamically (as identity mapped address) and therewidth no tr mapped page! - */ -IVT_ENTRY(Data_Nested_TLB, 0x1400) - - mov r30=5 // trap number - add r28=-TF_SIZE,sp // r28 is never used in trap handling - ;; - mov cr.ifa=r28 - ;; - br.sptk adt_common -IVT_END(Data_Nested_TLB) - - - -IVT_ERR(Instruction_Key_Miss, 6, 0x1800) -IVT_ERR(Data_Key_Miss, 7, 0x1c00) -IVT_ERR(Dirty_Bit, 8, 0x2000) -IVT_ERR(Instruction_Access_Bit, 9, 0x2400) -IVT_ERR(Data_Access_Bit, 10, 0x2800) -IVT_ERR(Break_Instruction, 11, 0x2c00) -IVT_ERR(External_Interrupt, 12, 0x3000) -IVT_ERR(Reserved_3400, 13, 0x3400) -IVT_ERR(Reserved_3800, 14, 0x3800) -IVT_ERR(Reserved_3c00, 15, 0x3c00) -IVT_ERR(Reserved_4000, 16, 0x4000) -IVT_ERR(Reserved_4400, 17, 0x4400) -IVT_ERR(Reserved_4800, 18, 0x4800) -IVT_ERR(Reserved_4c00, 19, 0x4c00) -IVT_ERR(Page_Not_Present, 20, 0x5000) -IVT_ERR(Key_Permission, 21, 0x5100) -IVT_ERR(Instruction_Access_Rights, 22, 0x5200) -IVT_ERR(Data_Access_Rights, 23, 0x5300) -IVT_ERR(General_Exception, 24, 0x5400) -IVT_ERR(Disabled_FP_Register, 25, 0x5500) -IVT_ERR(NaT_Consumption, 26, 0x5600) -IVT_ERR(Speculation, 27, 0x5700) -IVT_ERR(Reserved_5800, 28, 0x5800) -IVT_ERR(Debug, 29, 0x5900) -IVT_ERR(Unaligned_Reference, 30, 0x5a00) -IVT_ERR(Unsupported_Data_Reference, 31, 0x5b00) -IVT_ERR(Floating_Point_Fault, 32, 0x5c00) -IVT_ERR(Floating_Point_Trap, 33, 0x5d00) -IVT_ERR(Lower_Privilege_Transfer_Trap, 34, 0x5e00) -IVT_ERR(Taken_Branch_Trap, 35, 0x5f00) -IVT_ERR(Single_Step_Trap, 36, 0x6000) -IVT_ERR(Reserved_6100, 37, 0x6100) -IVT_ERR(Reserved_6200, 38, 0x6200) -IVT_ERR(Reserved_6300, 39, 0x6300) -IVT_ERR(Reserved_6400, 40, 0x6400) -IVT_ERR(Reserved_6500, 41, 0x6500) -IVT_ERR(Reserved_6600, 42, 0x6600) -IVT_ERR(Reserved_6700, 43, 0x6700) -IVT_ERR(Reserved_6800, 44, 0x6800) -IVT_ERR(IA_32_Exception, 45, 0x6900) -IVT_ERR(IA_32_Intercept, 46, 0x6a00) -IVT_ERR(IA_32_Interrupt, 47, 0x6b00) -IVT_ERR(Reserved_6c00, 48, 0x6c00) -IVT_ERR(Reserved_6d00, 49, 0x6d00) -IVT_ERR(Reserved_6e00, 50, 0x6e00) -IVT_ERR(Reserved_6f00, 51, 0x6f00) -IVT_ERR(Reserved_7000, 52, 0x7000) -IVT_ERR(Reserved_7100, 53, 0x7100) -IVT_ERR(Reserved_7200, 54, 0x7200) -IVT_ERR(Reserved_7300, 55, 0x7300) -IVT_ERR(Reserved_7400, 56, 0x7400) -IVT_ERR(Reserved_7500, 57, 0x7500) -IVT_ERR(Reserved_7600, 58, 0x7600) -IVT_ERR(Reserved_7700, 59, 0x7700) -IVT_ERR(Reserved_7800, 60, 0x7800) -IVT_ERR(Reserved_7900, 61, 0x7900) -IVT_ERR(Reserved_7a00, 62, 0x7a00) -IVT_ERR(Reserved_7b00, 63, 0x7b00) -IVT_ERR(Reserved_7c00, 64, 0x7c00) -IVT_ERR(Reserved_7d00, 65, 0x7d00) -IVT_ERR(Reserved_7e00, 66, 0x7e00) -IVT_ERR(Reserved_7f00, 67, 0x7f00) diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/minios-ia64.lds --- a/extras/mini-os/arch/ia64/minios-ia64.lds Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -OUTPUT_FORMAT("elf64-ia64-little") -OUTPUT_ARCH(ia64) - -ENTRY(phys_start) - -PHDRS -{ - code PT_LOAD; - data PT_LOAD; -} - -SECTIONS -{ - - phys_start = _start - (((5<<(61))+0x100000000) - (1 << 20)); - - code : { } :code - . = ((5<<(61))+0x100000000); - - _text = .; - - .text : AT(ADDR(.text) - (((5<<(61))+0x100000000) - (1 << 20))) - { - *(.text) - } - - _etext = .; - - data : { } :data - .data : AT(ADDR(.data) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.data) - } - - .sdata : AT(ADDR(.sdata) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.sdata) *(.sdata1) *(.srdata) } - - .rodata : AT(ADDR(.rodata) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.rodata) } - - .rodata.str1.8 : AT(ADDR(.rodata.str1.8) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.rodata.str1.8) } - - /* newlib initialization functions */ - . = ALIGN(64 / 8); - PROVIDE (__preinit_array_start = .); - .preinit_array : { *(.preinit_array) } - PROVIDE (__preinit_array_end = .); - PROVIDE (__init_array_start = .); - .init_array : { *(.init_array) } - PROVIDE (__init_array_end = .); - PROVIDE (__fini_array_start = .); - .fini_array : { *(.fini_array) } - PROVIDE (__fini_array_end = .); - - .ctors : AT(ADDR(.ctors) - (((5<<(61))+0x100000000) - (1 << 20))) - { - __CTOR_LIST__ = .; - *(.ctors) - CONSTRUCTORS - QUAD(0) - __CTOR_END__ = .; - } - - .dtors : AT(ADDR(.dtors) - (((5<<(61))+0x100000000) - (1 << 20))) - { - __DTOR_LIST__ = .; - *(.dtors) - QUAD(0) - __DTOR_END__ = .; - } - - .IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.IA_64.unwind_info) } - - .IA_64.unwind : AT(ADDR(.IA_64.unwind) - (((5<<(61))+0x100000000) - (1 << 20))) - { *(.IA_64.unwind) } - - .bss : AT(ADDR(.bss) - (((5<<(61))+0x100000000) - (1 << 20))) - { - *(.bss) - *(.app.bss) - } - - _end = .; - -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/mm.c --- a/extras/mini-os/arch/ia64/mm.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - * Description: Special ia64 memory management. - * Parts are taken from FreeBSD. - * - **************************************************************************** - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - -#include <mini-os/os.h> -#include <mini-os/mm.h> - - -#define MAX_MEM_AREA 5 -paddr_t phys_avail[MAX_MEM_AREA * 2]; -int phys_avail_cnt; -uint64_t physmem; - -/* - * These variables are defined in the linker script minios_ia64.lds - * to get the size of the kernel. - */ -extern uint64_t _text[], _etext[], _end[], kstack[], phys_start[]; - -uint64_t kernstart, kernend, kernsize, kernpstart, kernpend; - -#ifdef HAVE_LIBC -uint8_t _heap[512 * 1024]; -unsigned long heap = (unsigned long)_heap, - brk = (unsigned long)_heap, - heap_mapped = (unsigned long)_heap + sizeof(_heap), - heap_end = (unsigned long)_heap + sizeof(_heap); -#endif - -/* Print the available memory chunks. */ -static void -print_phys_avail(void) -{ - int i; - - printk("Physical memory chunk(s):\n"); - for (i = 0; phys_avail[i + 1] != 0; i += 2) { - int size = phys_avail[i + 1] - phys_avail[i]; - printk("0x%08lx - 0x%08lx, %d bytes (%d pages)\n", - phys_avail[i], phys_avail[i + 1] - 1, - size, size / PAGE_SIZE); - } -} - -void -arch_init_mm(unsigned long* start_pfn_p, unsigned long* max_pfn_p) -{ - uint64_t ms, me; - int i, j; - uint64_t m, n; - - kernstart = trunc_page(_text); - kernend = roundup_page(_end); - - kernpstart = trunc_page(ia64_tpa(kernstart)); - kernpend = roundup_page(kernpstart + (kernend - kernstart)); - kernsize = kernpend - kernpstart; - - ms = roundup_page(machineFwG.mach_mem_start); - me = trunc_page(machineFwG.mach_mem_start+machineFwG.mach_mem_size); - memset((void*)phys_avail, 0, sizeof(phys_avail)); - /* 1. Check where the kernel lies in physical memory. */ - physmem = me - ms; - if ((ms <= kernpend) && (kernpstart <= me)) { - if (ms < kernpstart) { /* There is a part before the kernel. */ - PRINT_BV(" Found chunk before kernel: 0x%lx - 0x%lx\n", - ms, kernpstart); - phys_avail[phys_avail_cnt] = ms; - phys_avail[phys_avail_cnt+1] = kernpstart; - phys_avail_cnt += 2; - } - if (kernpend < me) { /* There is a part behind the kernel. */ - PRINT_BV(" Found chunk behind kernel: 0x%lx - 0x%lx\n", - kernpend, me); - phys_avail[phys_avail_cnt] = kernpend; - phys_avail[phys_avail_cnt+1] = me; - phys_avail_cnt += 2; - } - } else { /* One big chunk */ - PRINT_BV(" Found big chunk: 0x%lx - 0x%lx\n", ms, me); - phys_avail[phys_avail_cnt] = ms; - phys_avail[phys_avail_cnt + 1] = me; - phys_avail_cnt += 2; - } - phys_avail[phys_avail_cnt] = 0; - - print_phys_avail(); - /* - * In this first version I only look for the biggest mem area. - */ - for (i = j = m = n = 0; i < phys_avail_cnt; i += 2) { - n = page_to_pfn(phys_avail[i + 1]) - page_to_pfn(phys_avail[i]); - if (n > m) { - m = n; - j = i; - } - } - *start_pfn_p = page_to_pfn(phys_avail[j]); - *max_pfn_p = page_to_pfn(phys_avail[j +1 ]); -} - -/* Currently only a dummy function. */ -void -arch_init_demand_mapping_area(unsigned long max_pfn) -{ - max_pfn = max_pfn; -} - -unsigned long allocate_ondemand(unsigned long n, unsigned long alignment) -{ - return 0; -} - -/* Helper function used in gnttab.c. */ -void do_map_frames(unsigned long addr, - const unsigned long *f, unsigned long n, unsigned long stride, - unsigned long increment, domid_t id, int *err, unsigned long prot) -{ - /* TODO */ - ASSERT(0); -} - -void* -map_frames_ex(const unsigned long* frames, unsigned long n, unsigned long stride, - unsigned long increment, unsigned long alignment, domid_t id, - int *err, unsigned long prot) -{ - /* TODO: incomplete! */ - ASSERT(n == 1 || (stride == 0 && increment == 1)); - ASSERT(id == DOMID_SELF); - ASSERT(prot == 0); - return (void*) __va(frames[0] << PAGE_SHIFT); -} - -int unmap_frames(unsigned long virt_addr, unsigned long num_frames) -{ - /* TODO */ - ASSERT(0); -} - -unsigned long alloc_contig_pages(int order, unsigned int addr_bits) -{ - /* TODO */ - ASSERT(0); -} - -void arch_init_p2m(unsigned long max_pfn) -{ - printk("Warn: p2m map not implemented.\n"); -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/sal.c --- a/extras/mini-os/arch/ia64/sal.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * Mostly taken from FreeBSD. - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include <mini-os/os.h> -#include <mini-os/lib.h> -#include <mini-os/console.h> -#include <mini-os/page.h> - - -static struct ia64_fdesc sal_fdesc; -uint64_t ia64_pal_entry; /* PAL_PROC entrypoint */ - - -struct ia64_sal_result -ia64_sal_call(uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, - uint64_t a5, uint64_t a6, uint64_t a7, uint64_t a8) -{ - return ia64_sal_entry(a1, a2, a3, a4, a5, a6, a7, a8); -} - -static struct ia64_sal_result -fake_sal(uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, - uint64_t a5, uint64_t a6, uint64_t a7, uint64_t a8) -{ - struct ia64_sal_result res; - res.sal_status = -3; - res.sal_result[0] = 0; - res.sal_result[1] = 0; - res.sal_result[2] = 0; - return res; -} - -/* - * Currently only the SAL_DESC_ENTRYPOINT is checked to get - * the entry points the pal and sal functions. - */ -void -ia64_sal_init(struct sal_system_table *saltab) -{ - static int sizes[6] = { 48, 32, 16, 32, 16, 16 }; - uint8_t *p; - int i; - - PRINT_BV("Reading SALtable:\n"); - ia64_sal_entry = fake_sal; - - if (memcmp((void*)(uint64_t)(saltab->sal_signature), SAL_SIGNATURE, 4)) - { - printk("Bad signature for SAL System Table\n"); - return; - } - p = (uint8_t *) (saltab + 1); - for (i = 0; i < saltab->sal_entry_count; i++) { - switch (*p) { - case SAL_DESC_ENTRYPOINT: // 0 - { - struct sal_entrypoint_descriptor *dp; - - dp = (struct sal_entrypoint_descriptor*)p; - ia64_pal_entry = - IA64_PHYS_TO_RR7(dp->sale_pal_proc); - PRINT_BV(" PAL Proc at 0x%lx\n", ia64_pal_entry); - sal_fdesc.func = - IA64_PHYS_TO_RR7(dp->sale_sal_proc); - sal_fdesc.gp = IA64_PHYS_TO_RR7(dp->sale_sal_gp); - PRINT_BV(" SAL Proc at 0x%lx, GP at 0x%lx\n", - sal_fdesc.func, sal_fdesc.gp); - ia64_sal_entry = (sal_entry_t *) &sal_fdesc; - break; - } - default: - break; - } - p += sizes[*p]; - } -} - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/sched.c --- a/extras/mini-os/arch/ia64/sched.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx - * - * Description: ia64 specific part of the scheduler for mini-os - * - **************************************************************************** - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - -#include <mini-os/types.h> -#include <mini-os/sched.h> -#include <mini-os/lib.h> -#include <mini-os/xmalloc.h> -#include <mini-os/mm.h> - -/* The function is implemented in fw.S */ -extern void thread_starter(void); - -void stack_walk(void) -{ - /* TODO */ -} - -struct thread* -arch_create_thread(char *name, void (*function)(void *), void *data) -{ - struct thread* _thread; - - _thread = (struct thread*)_xmalloc(sizeof(struct thread), 16); - /* Allocate pages for stack, stack will be aligned */ - _thread->stack = (char *)alloc_pages(STACK_SIZE_PAGE_ORDER); - _thread->name = name; - memset((void*)&(_thread->regs), 0, sizeof(_thread->regs)); - _thread->regs.sp = ((uint64_t)_thread->stack) + STACK_SIZE - 16; - _thread->regs.bsp = ((uint64_t)_thread->stack) + 0x10; - _thread->regs.rp = FDESC_FUNC(thread_starter); - _thread->regs.pfs = 0x82; - _thread->regs.r4 = FDESC_FUNC(function); - _thread->regs.r6 = (uint64_t)data; - return _thread; -} - -extern void restore_context(struct thread*); -extern int switch_context(struct thread*, struct thread*); - -void -arch_switch_threads(struct thread* prev, struct thread* next) -{ - ia64_set_r13((uint64_t)next); - switch_context(prev, next); -} - -/* Everything initialised, start idle thread */ -void -run_idle_thread(void) -{ - //do_busy_loop(); - ia64_set_r13((uint64_t)idle_thread); - restore_context(idle_thread); - printk("%s: restore_context() returned - bad!\n", __func__); -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/time.c --- a/extras/mini-os/arch/ia64/time.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * Description: simple ia64 specific time handling - * Parts are taken from FreeBSD. - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <mini-os/os.h> -#include <mini-os/console.h> -#include <mini-os/time.h> -#include <mini-os/efi.h> -#include <mini-os/events.h> - -struct timespec os_time; -static uint64_t itc_alt; /* itc on last update. */ -static uint64_t itc_at_boot; /* itc on boot */ -static uint64_t itc_frequency; -static uint64_t processor_frequency; -static uint64_t itm_val; - -static int is_leap_year(int year) -{ - if( year % 4 == 0 ) - { - if( year % 100 == 0 ) - { - if( year % 400 == 0 ) return 1; - else return 0; - } - return 1; - } - return 0; -} - -static int count_leap_years(int epoch, int year) -{ - int i, result = 0; - for( i = epoch ; i < year ; i++ ) if( is_leap_year(i) ) result++; - return result; -} - -static int get_day(int year, int mon, int day) { - int result; - switch(mon) - { - case 0: result = 0; break; - case 1: result = 31; break; /* 1: 31 */ - case 2: result = 59; break; /* 2: 31+28 */ - case 3: result = 90; break; /* 3: 59+31 */ - case 4: result = 120;break; /* 4: 90+30 */ - case 5: result = 151;break; /* 5: 120+31 */ - case 6: result = 181;break; /* 6: 151+30 */ - case 7: result = 212;break; /* 7: 181+31 */ - case 8: result = 243;break; /* 8: 212+31 */ - case 9: result = 273;break; /* 9: 243+30 */ - case 10:result = 304;break; /* 10:273+31 */ - case 11:result = 334;break; /* 11:304+30 */ - default: break; - } - if( is_leap_year(year) && mon > 2 ) result++; - result += day - 1; - return result; -} - -/* - * Converts Gregorian date to seconds since 1970-01-01 00:00:00. - * Assumes input in normal date format, i.e. 1980-12-31 23:59:59 - * => year=1980, mon=12, day=31, hour=23, min=59, sec=59. - * - * WARNING: this function will overflow on 2106-02-07 06:28:16 on - * machines were long is 32-bit! (However, as time_t is signed, we - * will already get problems at other places on 2038-01-19 03:14:08) - */ -static unsigned long _mktime(const unsigned int year, const unsigned int mon, - const unsigned int day, const unsigned int hour, - const unsigned int min, const unsigned int sec) -{ - unsigned long result = 0; - - result = sec; - result += min * 60; - result += hour * 3600; - result += get_day(year, mon - 1, day) * 86400; - result += (year - 1970) * 31536000; - result += count_leap_years(1970, year) * 86400; - - return result; -} - -static inline uint64_t -ns_from_cycles(uint64_t cycles) -{ - return (cycles * (1000000000 / itc_frequency)); -} - -static inline uint64_t -ns_to_cycles(uint64_t ns) -{ - return (ns * (itc_frequency / 1000000000)); -} - -/* - * Block the domain until until(nanoseconds) is over. - * If block is called no timerinterrupts are delivered from xen! - */ -void -block_domain(s_time_t until) -{ - struct ia64_pal_result pal_res; - uint64_t c, new; - - c = ns_to_cycles(until); - new = ia64_get_itc() + c - NOW(); - ia64_set_itm(new); /* Reload cr.itm */ - /* - * PAL_HALT_LIGHT returns on every external interrupt, - * including timer interrupts. - */ - pal_res = ia64_call_pal_static(PAL_HALT_LIGHT, 0, 0, 0); - if (pal_res.pal_status != 0) - printk("%s: PAL_HALT_LIGHT returns an error\n"); - /* Reload the normal timer interrupt match. */ - new = ia64_get_itc() + itm_val; - ia64_set_itm(new); -} - -static void -calculate_time(void) -{ - uint64_t itc_new, new; - - itc_new = ia64_get_itc(); - if (itc_new < itc_alt) - new = ~0 - itc_alt + itc_new; - else - new = itc_new - itc_alt; - itc_alt = itc_new; - new = ns_from_cycles(new); - os_time.tv_nsec += new; - if (os_time.tv_nsec > 1000000000) { /* On overflow. */ - os_time.tv_sec++; - os_time.tv_nsec -= 1000000000; - } -} - -void -timer_interrupt(evtchn_port_t port, struct pt_regs* regsP, void *data) -{ - uint64_t new; - - calculate_time(); - new = ia64_get_itc() + itm_val; - ia64_set_itm(new); -} - -/* - * monotonic_clock(): returns # of nanoseconds passed since time_init() - */ -uint64_t -monotonic_clock(void) -{ - uint64_t delta; - - delta = ia64_get_itc() - itc_at_boot; - delta = ns_from_cycles(delta); - return delta; -} - -int -gettimeofday(struct timeval *tv, void *tz) -{ - calculate_time(); - tv->tv_sec = os_time.tv_sec; /* seconds */ - tv->tv_usec = NSEC_TO_USEC(os_time.tv_nsec); /* microseconds */ - return 0; -}; - -/* - * Read the clock frequencies from pal and sal for calculating - * the clock interrupt. - */ -static void -calculate_frequencies(void) -{ - struct ia64_sal_result sal_res; - struct ia64_pal_result pal_res; - - pal_res = ia64_call_pal_static(PAL_FREQ_RATIOS, 0, 0, 0); - sal_res = ia64_sal_entry(SAL_FREQ_BASE, 0, 0, 0, 0, 0, 0, 0); - - if (sal_res.sal_status == 0 && pal_res.pal_status == 0) { - processor_frequency = - sal_res.sal_result[0] * (pal_res.pal_result[0] >> 32) - / (pal_res.pal_result[0] & ((1L << 32) - 1)); - itc_frequency = - sal_res.sal_result[0] * (pal_res.pal_result[2] >> 32) - / (pal_res.pal_result[2] & ((1L << 32) - 1)); - PRINT_BV("Reading clock frequencies:\n"); - PRINT_BV(" Platform clock frequency %ld Hz\n", - sal_res.sal_result[0]); - PRINT_BV(" Processor ratio %ld/%ld, Bus ratio %ld/%ld, " - " ITC ratio %ld/%ld\n", - pal_res.pal_result[0] >> 32, - pal_res.pal_result[0] & ((1L << 32) - 1), - pal_res.pal_result[1] >> 32, - pal_res.pal_result[1] & ((1L << 32) - 1), - pal_res.pal_result[2] >> 32, - pal_res.pal_result[2] & ((1L << 32) - 1)); - - printk(" ITC frequency %ld\n", itc_frequency); - } else { - itc_frequency = 1000000000; - processor_frequency = 0; - printk("Reading clock frequencies failed!!! Using: %ld\n", - itc_frequency); - } -} - - -//#define HZ 1 -#define HZ 1000 // 1000 clock ticks per sec -#define IA64_TIMER_VECTOR 0xef - -void -init_time(void) -{ - uint64_t new; - efi_time_t tm; - evtchn_port_t port = 0; - - printk("Initialising time\n"); - calculate_frequencies(); - - itm_val = (itc_frequency + HZ/2) / HZ; - printk(" itm_val: %ld\n", itm_val); - - os_time.tv_sec = 0; - os_time.tv_nsec = 0; - - if (efi_get_time(&tm)) { - printk(" EFI-Time: %d.%d.%d %d:%d:%d\n", tm.Day, - tm.Month, tm.Year, tm.Hour, tm.Minute, tm.Second); - os_time.tv_sec = _mktime(tm.Year, tm.Month, - tm.Day, tm.Hour, tm.Minute, tm.Second); - os_time.tv_nsec = tm.Nanosecond; - } else - printk("efi_get_time() failed\n"); - - port = bind_virq(VIRQ_ITC, timer_interrupt, NULL); - if (port == -1) { - printk("XEN timer request chn bind failed %i\n", port); - return; - } - unmask_evtchn(port); - itc_alt = ia64_get_itc(); - itc_at_boot = itc_alt; - new = ia64_get_itc() + itm_val; - ia64_set_itv(IA64_TIMER_VECTOR); - ia64_set_itm(new); - ia64_srlz_d(); -} - -void -fini_time(void) -{ - /* TODO */ -} diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/arch/ia64/xencomm.c --- a/extras/mini-os/arch/ia64/xencomm.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,394 +0,0 @@ -/* - * Copyright (C) 2006 Hollis Blanchard <hollisb@xxxxxxxxxx>, IBM Corporation - * Tristan Gingold <tristan.gingold@xxxxxxxx> - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * This code is mostly taken from ia64-xen files xcom_mini.c and xencomm.c. - * Changes: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx - */ - - -#include <mini-os/os.h> -#include <mini-os/errno.h> -#include <mini-os/lib.h> -#include <mini-os/hypervisor.h> -#include <xen/xencomm.h> -#include <xen/grant_table.h> - - -#define XENCOMM_MINI_ADDRS 3 -struct xencomm_mini -{ - struct xencomm_desc _desc; - uint64_t address[XENCOMM_MINI_ADDRS]; -}; - -#define xen_guest_handle(hnd) ((hnd).p) - -struct xencomm_handle; - -/* Translate virtual address to physical address. */ -uint64_t -xencomm_vaddr_to_paddr(uint64_t vaddr) -{ - if (IA64_RR_EXTR(vaddr) == 5) - return KERN_VIRT_2_PHYS(vaddr); - - if (IA64_RR_EXTR(vaddr) == 7) - return __pa(vaddr); - - return 0; -} - -/* Inline version. To be used only on linear space (kernel space). */ -static struct xencomm_handle * -xencomm_create_inline(void *buffer) -{ - unsigned long paddr; - - paddr = xencomm_vaddr_to_paddr((unsigned long)buffer); - return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG); -} - -#define min(a,b) (((a) < (b)) ? (a) : (b)) -static int -xencomm_init_desc(struct xencomm_desc *desc, void *buffer, unsigned long bytes) -{ - unsigned long recorded = 0; - int i = 0; - - if ((buffer == NULL) && (bytes > 0)) - BUG(); - - /* record the physical pages used */ - if (buffer == NULL) - desc->nr_addrs = 0; - - while ((recorded < bytes) && (i < desc->nr_addrs)) { - unsigned long vaddr = (unsigned long)buffer + recorded; - unsigned long paddr; - int offset; - int chunksz; - - offset = vaddr % PAGE_SIZE; /* handle partial pages */ - chunksz = min(PAGE_SIZE - offset, bytes - recorded); - - paddr = xencomm_vaddr_to_paddr(vaddr); - if (paddr == ~0UL) { - printk("%s: couldn't translate vaddr %lx\n", - __func__, vaddr); - return -EINVAL; - } - - desc->address[i++] = paddr; - recorded += chunksz; - } - if (recorded < bytes) { - printk("%s: could only translate %ld of %ld bytes\n", - __func__, recorded, bytes); - return -ENOSPC; - } - - /* mark remaining addresses invalid (just for safety) */ - while (i < desc->nr_addrs) - desc->address[i++] = XENCOMM_INVALID; - desc->magic = XENCOMM_MAGIC; - return 0; -} - -static void * -xencomm_alloc_mini(struct xencomm_mini *area, int *nbr_area) -{ - unsigned long base; - unsigned int pageoffset; - - while (*nbr_area >= 0) { - /* Allocate an area. */ - (*nbr_area)--; - - base = (unsigned long)(area + *nbr_area); - pageoffset = base % PAGE_SIZE; - - /* If the area does not cross a page, use it. */ - if ((PAGE_SIZE - pageoffset) >= sizeof(struct xencomm_mini)) - return &area[*nbr_area]; - } - /* No more area. */ - return NULL; -} - -int -xencomm_create_mini(struct xencomm_mini *area, int *nbr_area, - void *buffer, unsigned long bytes, - struct xencomm_handle **ret) -{ - struct xencomm_desc *desc; - int rc; - unsigned long res; - - desc = xencomm_alloc_mini(area, nbr_area); - if (!desc) - return -ENOMEM; - desc->nr_addrs = XENCOMM_MINI_ADDRS; - - rc = xencomm_init_desc(desc, buffer, bytes); - if (rc) - return rc; - - res = xencomm_vaddr_to_paddr((unsigned long)desc); - if (res == ~0UL) - return -EINVAL; - - *ret = (struct xencomm_handle*)res; - return 0; -} - -static int -xencommize_mini_grant_table_op(struct xencomm_mini *xc_area, int *nbr_area, - unsigned int cmd, void *op, unsigned int count, - struct xencomm_handle **desc) -{ - struct xencomm_handle *desc1; - unsigned int argsize=0; - int rc; - - switch (cmd) { - case GNTTABOP_map_grant_ref: - argsize = sizeof(struct gnttab_map_grant_ref); - break; - case GNTTABOP_unmap_grant_ref: - argsize = sizeof(struct gnttab_unmap_grant_ref); - break; - case GNTTABOP_setup_table: - { - struct gnttab_setup_table *setup = op; - - argsize = sizeof(*setup); - - if (count != 1) - return -EINVAL; - rc = xencomm_create_mini - (xc_area, nbr_area, - (void*)(uint64_t) xen_guest_handle(setup->frame_list), - setup->nr_frames - * sizeof(*xen_guest_handle(setup->frame_list)), - &desc1); - if (rc) - return rc; - set_xen_guest_handle(setup->frame_list, - (void *)(uint64_t)desc1); - break; - } - case GNTTABOP_dump_table: - argsize = sizeof(struct gnttab_dump_table); - break; - case GNTTABOP_transfer: - argsize = sizeof(struct gnttab_transfer); - break; - case GNTTABOP_copy: - argsize = sizeof(struct gnttab_copy); - break; - default: - printk("%s: unknown mini grant table op %d\n", __func__, cmd); - BUG(); - } - - rc = xencomm_create_mini(xc_area, nbr_area, op, count * argsize, desc); - - return rc; -} - -static inline int -xencomm_arch_hypercall_grant_table_op(unsigned int cmd, - struct xencomm_handle *uop, - unsigned int count) -{ - return _hypercall3(int, grant_table_op, cmd, uop, count); -} - -int -xencomm_mini_hypercall_grant_table_op(unsigned int cmd, void *op, - unsigned int count) -{ - int rc; - struct xencomm_handle *desc; - int nbr_area = 2; - struct xencomm_mini xc_area[2]; - - rc = xencommize_mini_grant_table_op(xc_area, &nbr_area, - cmd, op, count, &desc); - if (rc) - return rc; - return xencomm_arch_hypercall_grant_table_op(cmd, desc, count); -} - -static void -gnttab_map_grant_ref_pre(struct gnttab_map_grant_ref *uop) -{ - uint32_t flags; - - flags = uop->flags; - - if (flags & GNTMAP_host_map) { - if (flags & GNTMAP_application_map) { - printk("GNTMAP_application_map is not supported yet: " - "flags 0x%x\n", flags); - BUG(); - } - if (flags & GNTMAP_contains_pte) { - printk("GNTMAP_contains_pte is not supported yet flags " - "0x%x\n", flags); - BUG(); - } - } else if (flags & GNTMAP_device_map) { - printk("GNTMAP_device_map is not supported yet 0x%x\n", flags); - BUG();//XXX not yet. actually this flag is not used. - } else { - BUG(); - } -} - -int -HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count) -{ - if (cmd == GNTTABOP_map_grant_ref) { - unsigned int i; - for (i = 0; i < count; i++) { - gnttab_map_grant_ref_pre( - (struct gnttab_map_grant_ref*)uop + i); - } - } - return xencomm_mini_hypercall_grant_table_op(cmd, uop, count); -} - - /* In fw.S */ -extern int xencomm_arch_hypercall_suspend(struct xencomm_handle *arg); -int -HYPERVISOR_suspend(unsigned long srec) -{ - struct sched_shutdown arg; - - arg.reason = (uint32_t)SHUTDOWN_suspend; - - return xencomm_arch_hypercall_suspend(xencomm_create_inline(&arg)); -} - -int -HYPERVISOR_event_channel_op(int cmd, void *arg) -{ - int rc; - struct xencomm_handle *newArg; - - newArg = xencomm_create_inline(arg); - rc = _hypercall2(int, event_channel_op, cmd, newArg); - if (unlikely(rc == -ENOSYS)) { - struct evtchn_op op; - - op.cmd = cmd; - memcpy(&op.u, arg, sizeof(op.u)); - rc = _hypercall1(int, event_channel_op_compat, &op); - } - return rc; -} - -static int -xencomm_arch_xen_version(int cmd, struct xencomm_handle *arg) -{ - return _hypercall2(int, xen_version, cmd, arg); -} - -static int -xencomm_arch_xen_feature(int cmd, struct xencomm_handle *arg) -{ - struct xencomm_handle *newArg; - - newArg = xencomm_create_inline(arg); - return _hypercall2(int, xen_version, cmd, newArg); -} - -int -HYPERVISOR_xen_version(int cmd, void *arg) -{ - switch(cmd) { - case XENVER_version: - return xencomm_arch_xen_version(cmd, 0); - case XENVER_get_features: - return xencomm_arch_xen_feature(cmd, arg); - default: - return -1; - } -} - -int -HYPERVISOR_console_io(int cmd, int count, char *str) -{ - struct xencomm_handle *newStr; - - newStr = xencomm_create_inline(str); - return _hypercall3(int, console_io, cmd, count, newStr); -} - -int -HYPERVISOR_sched_op_compat(int cmd, unsigned long arg) -{ - return _hypercall2(int, sched_op_compat, cmd, arg); -} - -int -HYPERVISOR_sched_op(int cmd, void *arg) -{ - struct xencomm_handle *newArg; - - newArg = xencomm_create_inline(arg); - return _hypercall2(int, sched_op, cmd, newArg); -} - -int -HYPERVISOR_callback_op(int cmd, void *arg) -{ - struct xencomm_handle *newArg; - - newArg = xencomm_create_inline(arg); - return _hypercall2(int, callback_op, cmd, newArg); -} - -int -HYPERVISOR_opt_feature(void *arg) -{ - struct xencomm_handle *new_arg; - - new_arg = xencomm_create_inline(arg); - - return _hypercall1(int, opt_feature, new_arg); -} - -int -HYPERVISOR_shutdown(unsigned int reason) -{ - struct sched_shutdown sched_shutdown = { - .reason = reason - }; - - int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); - - if (rc == -ENOSYS) - rc = HYPERVISOR_sched_op_compat(SCHEDOP_shutdown, reason); - - return rc; -} - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/gnttab.c --- a/extras/mini-os/gnttab.c Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/gnttab.c Wed Sep 12 17:55:27 2012 +0100 @@ -23,11 +23,7 @@ #define NR_RESERVED_ENTRIES 8 /* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */ -#ifdef __ia64__ -#define NR_GRANT_FRAMES 1 -#else #define NR_GRANT_FRAMES 4 -#endif #define NR_GRANT_ENTRIES (NR_GRANT_FRAMES * PAGE_SIZE / sizeof(grant_entry_t)) static grant_entry_t *gnttab_table; diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/hypervisor.h --- a/extras/mini-os/include/hypervisor.h Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/include/hypervisor.h Wed Sep 12 17:55:27 2012 +0100 @@ -7,7 +7,6 @@ * Copyright (c) 2002, K A Fraser * Copyright (c) 2005, Grzegorz Milos * Updates: Aravindh Puthiyaparambil <aravindh.puthiyaparambil@xxxxxxxxxx> - * Updates: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> for ia64 */ #ifndef _HYPERVISOR_H_ @@ -19,8 +18,6 @@ #include <hypercall-x86_32.h> #elif defined(__x86_64__) #include <hypercall-x86_64.h> -#elif defined(__ia64__) -#include <hypercall-ia64.h> #else #error "Unsupported architecture" #endif diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/arch_limits.h --- a/extras/mini-os/include/ia64/arch_limits.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - -#ifndef __ARCH_LIMITS_H__ -#define __ARCH_LIMITS_H__ - -/* Commonly 16K pages are used. */ -#define __PAGE_SHIFT 14 /* 16K pages */ -#define __PAGE_SIZE (1<<(__PAGE_SHIFT)) - -#define __STACK_SIZE_PAGE_ORDER 2 -#define __STACK_SIZE (__PAGE_SIZE * (1 << __STACK_SIZE_PAGE_ORDER)) - -#endif /* __ARCH_LIMITS_H__ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/arch_mm.h --- a/extras/mini-os/include/ia64/arch_mm.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2007 - Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ARCH_MM_H__ -#define __ARCH_MM_H__ - -#include "page.h" -#include "ia64_cpu.h" - -#define PFN_PHYS(x) (pfn_to_page(x)) -#define PHYS_PFN(x) (page_to_pfn(x)) -#define to_virt(x) __va(x) -#define to_phys(x) __pa(x) - -#define virt_to_mfn(x) virt_to_pfn(x) -#define virtual_to_mfn(x) (ia64_tpa((uint64_t)(x)) >> PAGE_SHIFT) - -#define map_frames(f, n) map_frames_ex(f, n, 1, 0, 1, DOMID_SELF, NULL, 0) -/* TODO */ -#define map_zero(n, a) map_frames_ex(NULL, n, 0, 0, a, DOMID_SELF, NULL, 0) -#define do_map_zero(start, n) ASSERT(n == 0) - -#endif /* __ARCH_MM_H__ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/arch_sched.h --- a/extras/mini-os/include/ia64/arch_sched.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2006 Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * All rights reserved. - * - * The file contains ia64 specific scheduler declarations. - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ARCH_SCHED_H__ -#define __ARCH_SCHED_H__ - -#include "os.h" - -struct thread; /* Only declaration */ - -struct thread_regs -{ - unsigned long unat_b; /* NaT before spilling */ - unsigned long sp; - unsigned long rp; - unsigned long pr; - unsigned long bsp; - unsigned long pfs; - unsigned long rnat; - unsigned long lc; - - unsigned long unat_a; /* NaT after spilling. */ - unsigned long r4; - unsigned long r5; - unsigned long r6; - unsigned long r7; - - unsigned long b1; - unsigned long b2; - unsigned long b3; - unsigned long b4; - unsigned long b5; - - ia64_fpreg_t f2; - ia64_fpreg_t f3; - ia64_fpreg_t f4; - ia64_fpreg_t f5; - ia64_fpreg_t f16; - ia64_fpreg_t f17; - ia64_fpreg_t f18; - ia64_fpreg_t f19; - ia64_fpreg_t f20; - ia64_fpreg_t f21; - ia64_fpreg_t f22; - ia64_fpreg_t f23; - ia64_fpreg_t f24; - ia64_fpreg_t f25; - ia64_fpreg_t f26; - ia64_fpreg_t f27; - ia64_fpreg_t f28; - ia64_fpreg_t f29; - ia64_fpreg_t f30; - ia64_fpreg_t f31; -}; - -typedef struct thread_regs thread_regs_t; - -void arch_switch_threads(struct thread* prev, struct thread* next); - -static inline struct thread* get_current(void) -{ - register struct thread *current asm("r13"); - return current; -} - - -#endif /* __ARCH_SCHED_H__ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/arch_spinlock.h --- a/extras/mini-os/include/ia64/arch_spinlock.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx - * The file contains ia64 special spinlock stuff. - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef _ARCH_SPINLOCK_H_ -#define _ARCH_SPINLOCK_H_ - -#include "atomic.h" - -#define ARCH_SPIN_LOCK_UNLOCKED { 0 } - -#define SPIN_LOCK_UNUSED 0 -#define SPIN_LOCK_USED 1 - - -static inline void -_raw_spin_lock(spinlock_t* lck) -{ - uint32_t ret; - do { - ret = ia64_cmpxchg_acq_32(&(lck->slock), - SPIN_LOCK_UNUSED, SPIN_LOCK_USED); - } while (ret == SPIN_LOCK_USED); -} - -static inline void -_raw_spin_unlock(spinlock_t *lck) -{ - asm volatile ("st4.rel.nta [%0] = r0\n\t" :: "r"(&(lck->slock)) - : "memory" ); -} - -static inline uint32_t -_raw_spin_trylock(spinlock_t* lck) -{ - uint32_t ret; - ret = ia64_cmpxchg_acq_32(&(lck->slock), SPIN_LOCK_USED, SPIN_LOCK_USED); - return (ret == SPIN_LOCK_USED); -} - -#endif /* _ARCH_SPINLOCK_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/asm.h --- a/extras/mini-os/include/ia64/asm.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx - */ - -#if !defined(_ASM_H_) -#define _ASM_H_ - -#define ENTRY(_name_) \ - .global _name_; \ - .align 16; \ - .proc _name_; \ -_name_:; \ - - -#define END(_name_) \ - .endp _name_ - -#endif /* !defined(_ASM_H_) */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/atomic.h --- a/extras/mini-os/include/ia64/atomic.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,504 +0,0 @@ -/* - * This code is mostly taken from FreeBSD machine/atomic.h - * Changes: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * Copyright (c) 1998 Doug Rabson - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _MACHINE_ATOMIC_H_ -#define _MACHINE_ATOMIC_H_ - -/* - * Various simple arithmetic on memory which is atomic in the presence - * of interrupts and SMP safe. - */ - -#if !defined(__ASSEMBLY__) - -#include <mini-os/types.h> - - -/* - * Everything is built out of cmpxchg. - */ -#define IA64_CMPXCHG(sz, sem, p, cmpval, newval, ret) \ - __asm __volatile ( \ - "mov ar.ccv=%2;;\n\t" \ - "cmpxchg" #sz "." #sem " %0=%4,%3,ar.ccv\n\t" \ - : "=r" (ret), "=m" (*p) \ - : "r" (cmpval), "r" (newval), "m" (*p) \ - : "memory") - - -/* - * Some common forms of cmpxch. - */ - -static __inline uint8_t -ia64_cmpxchg_acq_8(volatile uint8_t* p, uint8_t cmpval, uint8_t newval) -{ - uint8_t ret; - - IA64_CMPXCHG(1, acq, p, cmpval, newval, ret); - return (ret); -} - -static __inline uint16_t -ia64_cmpxchg_acq_16(volatile uint16_t* p, uint16_t cmpval, uint16_t newval) -{ - uint16_t ret; - - IA64_CMPXCHG(2, acq, p, cmpval, newval, ret); - return (ret); -} - -static __inline uint32_t -ia64_cmpxchg_acq_32(volatile uint32_t* p, uint32_t cmpval, uint32_t newval) -{ - uint32_t ret; - - IA64_CMPXCHG(4, acq, p, cmpval, newval, ret); - return (ret); -} - -static __inline uint32_t -ia64_cmpxchg_rel_32(volatile uint32_t* p, uint32_t cmpval, uint32_t newval) -{ - uint32_t ret; - - IA64_CMPXCHG(4, rel, p, cmpval, newval, ret); - return (ret); -} - -static __inline uint64_t -ia64_cmpxchg_acq_64(volatile uint64_t* p, uint64_t cmpval, uint64_t newval) -{ - uint64_t ret; - - IA64_CMPXCHG(8, acq, p, cmpval, newval, ret); - return (ret); -} - -static __inline uint64_t -ia64_cmpxchg_rel_64(volatile uint64_t* p, uint64_t cmpval, uint64_t newval) -{ - uint64_t ret; - - IA64_CMPXCHG(8, rel, p, cmpval, newval, ret); - return (ret); -} - -#define ATOMIC_STORE_LOAD(type, width, size) \ -static __inline uint##width##_t \ -ia64_ld_acq_##width(volatile uint##width##_t* p) \ -{ \ - uint##width##_t v; \ - \ - __asm __volatile ("ld" size ".acq %0=%1" \ - : "=r" (v) \ - : "m" (*p) \ - : "memory"); \ - return (v); \ -} \ - \ -static __inline uint##width##_t \ -atomic_load_acq_##width(volatile uint##width##_t* p) \ -{ \ - uint##width##_t v; \ - \ - __asm __volatile ("ld" size ".acq %0=%1" \ - : "=r" (v) \ - : "m" (*p) \ - : "memory"); \ - return (v); \ -} \ - \ -static __inline uint##width##_t \ -atomic_load_acq_##type(volatile uint##width##_t* p) \ -{ \ - uint##width##_t v; \ - \ - __asm __volatile ("ld" size ".acq %0=%1" \ - : "=r" (v) \ - : "m" (*p) \ - : "memory"); \ - return (v); \ -} \ - \ -static __inline void \ -ia64_st_rel_##width(volatile uint##width##_t* p, uint##width##_t v)\ -{ \ - __asm __volatile ("st" size ".rel %0=%1" \ - : "=m" (*p) \ - : "r" (v) \ - : "memory"); \ -} \ - \ -static __inline void \ -atomic_store_rel_##width(volatile uint##width##_t* p, uint##width##_t v)\ -{ \ - __asm __volatile ("st" size ".rel %0=%1" \ - : "=m" (*p) \ - : "r" (v) \ - : "memory"); \ -} \ - \ -static __inline void \ -atomic_store_rel_##type(volatile uint##width##_t* p, uint##width##_t v)\ -{ \ - __asm __volatile ("st" size ".rel %0=%1" \ - : "=m" (*p) \ - : "r" (v) \ - : "memory"); \ -} - -ATOMIC_STORE_LOAD(char, 8, "1") -ATOMIC_STORE_LOAD(short, 16, "2") -ATOMIC_STORE_LOAD(int, 32, "4") -ATOMIC_STORE_LOAD(long, 64, "8") - -#undef ATOMIC_STORE_LOAD - -#define IA64_ATOMIC(sz, type, name, width, op) \ - \ -static __inline type \ -atomic_##name##_acq_##width(volatile type *p, type v) \ -{ \ - type old, ret; \ - do { \ - old = *p; \ - IA64_CMPXCHG(sz, acq, p, old, old op v, ret); \ - } while (ret != old); \ - return(ret); \ -} \ - \ -static __inline type \ -atomic_##name##_rel_##width(volatile type *p, type v) \ -{ \ - type old, ret; \ - do { \ - old = *p; \ - IA64_CMPXCHG(sz, rel, p, old, old op v, ret); \ - } while (ret != old); \ - return(ret); \ -} - -IA64_ATOMIC(1, uint8_t, set, 8, |) -IA64_ATOMIC(2, uint16_t, set, 16, |) -IA64_ATOMIC(4, uint32_t, set, 32, |) -IA64_ATOMIC(8, uint64_t, set, 64, |) - -IA64_ATOMIC(1, uint8_t, clear, 8, &~) -IA64_ATOMIC(2, uint16_t, clear, 16, &~) -IA64_ATOMIC(4, uint32_t, clear, 32, &~) -IA64_ATOMIC(8, uint64_t, clear, 64, &~) - -IA64_ATOMIC(1, uint8_t, add, 8, +) -IA64_ATOMIC(2, uint16_t, add, 16, +) -IA64_ATOMIC(4, uint32_t, add, 32, +) -IA64_ATOMIC(8, uint64_t, add, 64, +) - -IA64_ATOMIC(1, uint8_t, subtract, 8, -) -IA64_ATOMIC(2, uint16_t, subtract, 16, -) -IA64_ATOMIC(4, uint32_t, subtract, 32, -) -IA64_ATOMIC(8, uint64_t, subtract, 64, -) - -#undef IA64_ATOMIC -#undef IA64_CMPXCHG - -#define atomic_set_8 atomic_set_acq_8 -#define atomic_clear_8 atomic_clear_acq_8 -#define atomic_add_8 atomic_add_acq_8 -#define atomic_subtract_8 atomic_subtract_acq_8 - -#define atomic_set_16 atomic_set_acq_16 -#define atomic_clear_16 atomic_clear_acq_16 -#define atomic_add_16 atomic_add_acq_16 -#define atomic_subtract_16 atomic_subtract_acq_16 - -#define atomic_set_32 atomic_set_acq_32 -#define atomic_clear_32 atomic_clear_acq_32 -#define atomic_add_32 atomic_add_acq_32 -#define atomic_subtract_32 atomic_subtract_acq_32 - -#define atomic_set_64 atomic_set_acq_64 -#define atomic_clear_64 atomic_clear_acq_64 -#define atomic_add_64 atomic_add_acq_64 -#define atomic_subtract_64 atomic_subtract_acq_64 - -#define atomic_set_char atomic_set_8 -#define atomic_clear_char atomic_clear_8 -#define atomic_add_char atomic_add_8 -#define atomic_subtract_char atomic_subtract_8 -#define atomic_set_acq_char atomic_set_acq_8 -#define atomic_clear_acq_char atomic_clear_acq_8 -#define atomic_add_acq_char atomic_add_acq_8 -#define atomic_subtract_acq_char atomic_subtract_acq_8 -#define atomic_set_rel_char atomic_set_rel_8 -#define atomic_clear_rel_char atomic_clear_rel_8 -#define atomic_add_rel_char atomic_add_rel_8 -#define atomic_subtract_rel_char atomic_subtract_rel_8 - -#define atomic_set_short atomic_set_16 -#define atomic_clear_short atomic_clear_16 -#define atomic_add_short atomic_add_16 -#define atomic_subtract_short atomic_subtract_16 -#define atomic_set_acq_short atomic_set_acq_16 -#define atomic_clear_acq_short atomic_clear_acq_16 -#define atomic_add_acq_short atomic_add_acq_16 -#define atomic_subtract_acq_short atomic_subtract_acq_16 -#define atomic_set_rel_short atomic_set_rel_16 -#define atomic_clear_rel_short atomic_clear_rel_16 -#define atomic_add_rel_short atomic_add_rel_16 -#define atomic_subtract_rel_short atomic_subtract_rel_16 - -#define atomic_set_int atomic_set_32 -#define atomic_clear_int atomic_clear_32 -#define atomic_add_int atomic_add_32 -#define atomic_subtract_int atomic_subtract_32 -#define atomic_set_acq_int atomic_set_acq_32 -#define atomic_clear_acq_int atomic_clear_acq_32 -#define atomic_add_acq_int atomic_add_acq_32 -#define atomic_subtract_acq_int atomic_subtract_acq_32 -#define atomic_set_rel_int atomic_set_rel_32 -#define atomic_clear_rel_int atomic_clear_rel_32 -#define atomic_add_rel_int atomic_add_rel_32 -#define atomic_subtract_rel_int atomic_subtract_rel_32 - -#define atomic_set_long atomic_set_64 -#define atomic_clear_long atomic_clear_64 -#define atomic_add_long atomic_add_64 -#define atomic_subtract_long atomic_subtract_64 -#define atomic_set_acq_long atomic_set_acq_64 -#define atomic_clear_acq_long atomic_clear_acq_64 -#define atomic_add_acq_long atomic_add_acq_64 -#define atomic_subtract_acq_long atomic_subtract_acq_64 -#define atomic_set_rel_long atomic_set_rel_64 -#define atomic_clear_rel_long atomic_clear_rel_64 -#define atomic_add_rel_long atomic_add_rel_64 -#define atomic_subtract_rel_long atomic_subtract_rel_64 - -/* - * Atomically compare the value stored at *p with cmpval and if the - * two values are equal, update the value of *p with newval. Returns - * zero if the compare failed, nonzero otherwise. - */ -static __inline int -atomic_cmpset_acq_32(volatile uint32_t* p, uint32_t cmpval, uint32_t newval) -{ - return ia64_cmpxchg_acq_32(p, cmpval, newval) == cmpval; -} - -static __inline int -atomic_cmpset_rel_32(volatile uint32_t* p, uint32_t cmpval, uint32_t newval) -{ - return ia64_cmpxchg_rel_32(p, cmpval, newval) == cmpval; -} - -/* - * Atomically compare the value stored at *p with cmpval and if the - * two values are equal, update the value of *p with newval. Returns - * zero if the compare failed, nonzero otherwise. - */ -static __inline int -atomic_cmpset_acq_64(volatile uint64_t* p, uint64_t cmpval, uint64_t newval) -{ - return ia64_cmpxchg_acq_64(p, cmpval, newval) == cmpval; -} - -static __inline int -atomic_cmpset_rel_64(volatile uint64_t* p, uint64_t cmpval, uint64_t newval) -{ - return ia64_cmpxchg_rel_64(p, cmpval, newval) == cmpval; -} - -#define atomic_cmpset_32 atomic_cmpset_acq_32 -#define atomic_cmpset_64 atomic_cmpset_acq_64 -#define atomic_cmpset_int atomic_cmpset_32 -#define atomic_cmpset_long atomic_cmpset_64 -#define atomic_cmpset_acq_int atomic_cmpset_acq_32 -#define atomic_cmpset_rel_int atomic_cmpset_rel_32 -#define atomic_cmpset_acq_long atomic_cmpset_acq_64 -#define atomic_cmpset_rel_long atomic_cmpset_rel_64 - -static __inline int -atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src) -{ - return atomic_cmpset_acq_long((volatile u_long *)dst, - (u_long)exp, (u_long)src); -} - -static __inline int -atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src) -{ - return atomic_cmpset_rel_long((volatile u_long *)dst, - (u_long)exp, (u_long)src); -} - -#define atomic_cmpset_ptr atomic_cmpset_acq_ptr - -static __inline void * -atomic_load_acq_ptr(volatile void *p) -{ - return (void *)atomic_load_acq_long((volatile u_long *)p); -} - -static __inline void -atomic_store_rel_ptr(volatile void *p, void *v) -{ - atomic_store_rel_long((volatile u_long *)p, (u_long)v); -} - -#define IA64_ATOMIC_PTR(NAME) \ -static __inline void \ -atomic_##NAME##_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_long((volatile u_long *)p, v); \ -} \ - \ -static __inline void \ -atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_acq_long((volatile u_long *)p, v);\ -} \ - \ -static __inline void \ -atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_rel_long((volatile u_long *)p, v);\ -} - -IA64_ATOMIC_PTR(set) -IA64_ATOMIC_PTR(clear) -IA64_ATOMIC_PTR(add) -IA64_ATOMIC_PTR(subtract) - -#undef IA64_ATOMIC_PTR - -static __inline uint32_t -atomic_readandclear_32(volatile uint32_t* p) -{ - uint32_t val; - do { - val = *p; - } while (!atomic_cmpset_32(p, val, 0)); - return val; -} - -static __inline uint64_t -atomic_readandclear_64(volatile uint64_t* p) -{ - uint64_t val; - do { - val = *p; - } while (!atomic_cmpset_64(p, val, 0)); - return val; -} - -#define atomic_readandclear_int atomic_readandclear_32 -#define atomic_readandclear_long atomic_readandclear_64 - - -/* Some bit operations */ - -static inline void -set_bit(int num, volatile void *addr) -{ - uint32_t bit, old, new; - volatile uint32_t *p; - p = (volatile uint32_t *) addr + (num >> 5); - bit = 1 << (num & 31); - do - { - old = *p; - new = old | bit; - } while(ia64_cmpxchg_acq_32(p, old, new) != old); -} - -static __inline__ void -clear_bit(int num, volatile void *addr) -{ - uint32_t mask, old, new; - volatile uint32_t *p; - p = (volatile uint32_t *) addr + (num >> 5); - mask = ~(1 << (num & 31)); - do { - old = *p; - new = old & mask; - } while (ia64_cmpxchg_acq_32(p, old, new) != old); -} - -static __inline__ int -test_bit(int num, const volatile void *addr) -{ - uint32_t val = 1; - return val & (((const volatile uint32_t *) addr)[num >> 5] >> (num & 31)); -} - -/* - * test_and_set_bit - Set a bit and return its old value - * num: Bit to set - * addr: Address to count from - */ -static inline int -test_and_set_bit (int num, volatile void *addr) -{ - uint32_t bit, old, new; - volatile uint32_t *m; - - m = (volatile uint32_t *) addr + (num >> 5); - bit = 1 << (num & 31); - do { - old = *m; - new = old | bit; - } while (ia64_cmpxchg_acq_32(m, old, new) != old); - return (old & bit) != 0; -} - -/* - * test_and_clear_bit - Clear a bit and return its old value - * num: Bit to set - * addr: Address to count from - */ -static -inline int test_and_clear_bit(int num, volatile unsigned long * addr) -{ - uint32_t bit, old, new; - volatile uint32_t* a; - - a = (volatile uint32_t *) addr + (num >> 5); - bit = ~(1 << (num & 31)); - do { - old = *a; - new = old & bit; - } while (ia64_cmpxchg_acq_32(a, old, new) != old); - return (old & ~bit) != 0; -} - - -#endif /* !defined(__ASSEMBLY__) */ - -#endif /* ! _MACHINE_ATOMIC_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/efi.h --- a/extras/mini-os/include/ia64/efi.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,396 +0,0 @@ -/* - * This is a short summary of declarations and definitions from different - * efi header files of Intels' EFI_Toolkit_1.10.14.62 - * used for the minimal implementation in mini-os. - * Changes: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * Copyright (C) 2001-2004, Intel Corporation. - * THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO WARRANTIES WHATSOEVER, - * INCLUDING ANY WARRANTY OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR - * ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE ARISING OUT OF ANY - * PROPOSAL, SPECIFICATION OR SAMPLE. Except for a limited copyright license - * to copy this specification for internal use only, no license, express or - * implied, by estoppel or otherwise, to any intellectual property rights is - * granted herein. Intel disclaims all liability, including liability for - * infringement of any proprietary rights, relating to implementation of - * information in this specification. Intel does not warrant or represent - * that such implementation(s) will not infringe such rights. Designers must - * not rely on the absence or characteristics of any features or instructions - * marked "reserved" or "undefined." Intel reserves these for future - * definition and shall have no responsibility whatsoever for conflicts or - * incompatibilities arising from future changes to them. - * This document is an intermediate draft for comment only and is subject to - * change without notice. Readers should not design products based on this - * document. - * Intel, the Intel logo, and Itanium are trademarks or registered trademarks - * of Intel Corporation or its subsidiaries in the United States and other - * countries. - * Other names and brands may be claimed as the property of others. - */ - -#ifndef _EFI_H_ -#define _EFI_H_ - -#include <mini-os/types.h> - - -#define EFIWARN(a) (a) -#define EFI_ERROR(a) (((int64_t) a) < 0) - - -#define EFI_SUCCESS 0 -#define EFI_LOAD_ERROR EFIERR(1) -#define EFI_INVALID_PARAMETER EFIERR(2) -#define EFI_UNSUPPORTED EFIERR(3) -#define EFI_BAD_BUFFER_SIZE EFIERR(4) -#define EFI_BUFFER_TOO_SMALL EFIERR(5) -#define EFI_NOT_READY EFIERR(6) -#define EFI_DEVICE_ERROR EFIERR(7) -#define EFI_WRITE_PROTECTED EFIERR(8) -#define EFI_OUT_OF_RESOURCES EFIERR(9) -#define EFI_VOLUME_CORRUPTED EFIERR(10) -#define EFI_VOLUME_FULL EFIERR(11) -#define EFI_NO_MEDIA EFIERR(12) -#define EFI_MEDIA_CHANGED EFIERR(13) -#define EFI_NOT_FOUND EFIERR(14) -#define EFI_ACCESS_DENIED EFIERR(15) -#define EFI_NO_RESPONSE EFIERR(16) -#define EFI_NO_MAPPING EFIERR(17) -#define EFI_TIMEOUT EFIERR(18) -#define EFI_NOT_STARTED EFIERR(19) -#define EFI_ALREADY_STARTED EFIERR(20) -#define EFI_ABORTED EFIERR(21) -#define EFI_ICMP_ERROR EFIERR(22) -#define EFI_TFTP_ERROR EFIERR(23) -#define EFI_PROTOCOL_ERROR EFIERR(24) - -#define EFI_WARN_UNKOWN_GLYPH EFIWARN(1) -#define EFI_WARN_DELETE_FAILURE EFIWARN(2) -#define EFI_WARN_WRITE_FAILURE EFIWARN(3) -#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4) - - -typedef uint64_t efi_status_t; -typedef void* efi_handle_t; -typedef void* efi_event_t; -typedef uint16_t efi_char16_t; - - -/* - * Standard EFI table header - */ - -struct efi_table_header -{ - uint64_t Signature; - // Revision of EFI table specification, - // upper 16 bit - major revision number - // lower 16 bit - minor revision number - uint32_t Revision; - uint32_t HeaderSize; - uint32_t CRC32; - uint32_t Reserved; -}; -typedef struct efi_table_header efi_table_header_t; - -/* - * EFI Time - */ -typedef struct -{ - uint16_t Year; /* 1998 - 20XX */ - uint8_t Month; /* 1 - 12 */ - uint8_t Day; /* 1 - 31 */ - uint8_t Hour; /* 0 - 23 */ - uint8_t Minute; /* 0 - 59 */ - uint8_t Second; /* 0 - 59 */ - uint8_t Pad1; - uint32_t Nanosecond; /* 0 - 999,999,999 */ - int16_t TimeZone; /* -1440 to 1440 or 2047 */ - uint8_t Daylight; - uint8_t Pad2; -} efi_time_t; - -/* Bit definitions for efi_time_t.Daylight */ -#define EFI_TIME_ADJUST_DAYLIGHT 0x01 -#define EFI_TIME_IN_DAYLIGHT 0x02 - -/* Value definition for efi_time_t.TimeZone */ -#define EFI_UNSPECIFIED_TIMEZONE 0x07FF - - - -typedef struct -{ - uint32_t Resolution; /* 1e-6 parts per million */ - uint32_t Accuracy; /* hertz */ - uint8_t SetsToZero; /* Set clears sub-second time */ -} efi_time_capabilities_t; - - -typedef efi_status_t (*efi_get_time_t) (efi_time_t*, efi_time_capabilities_t*); -typedef efi_status_t (*efi_set_time_t) (efi_time_t*); -typedef efi_status_t (*efi_get_wakeup_time_t) (uint8_t*, uint8_t*, efi_time_t*); -typedef efi_status_t (*efi_set_wakeup_time_t) (uint8_t, efi_time_t*); - -/* - * Memory - * Preseve the attr on any range supplied. - * ConventialMemory must have WB,SR,SW when supplied. - * When allocating from ConventialMemory always make it WB,SR,SW - * When returning to ConventialMemory always make it WB,SR,SW - * When getting the memory map, or on RT for runtime types - */ - -typedef enum { - EfiReservedMemoryType, /* 0 */ - EfiLoaderCode, - EfiLoaderData, - EfiBootServicesCode, - EfiBootServicesData, - EfiRuntimeServicesCode, - EfiRuntimeServicesData, /* 6 */ - EfiConventionalMemory, /* 7 */ - EfiUnusableMemory, - EfiACPIReclaimMemory, /* 9 */ - EfiACPIMemoryNVS, /* 10, a */ - EfiMemoryMappedIO, - EfiMemoryMappedIOPortSpace, /* 12, c */ - EfiPalCode, /* 13, d */ - EfiMaxMemoryType /* 14, e */ -} efi_memory_type_t; - -/* possible caching types for the memory range */ -#define EFI_MEMORY_UC 0x0000000000000001 -#define EFI_MEMORY_WC 0x0000000000000002 -#define EFI_MEMORY_WT 0x0000000000000004 -#define EFI_MEMORY_WB 0x0000000000000008 -#define EFI_MEMORY_UCE 0x0000000000000010 -/* physical memory protection on range */ -#define EFI_MEMORY_WP 0x0000000000001000 -#define EFI_MEMORY_RP 0x0000000000002000 -#define EFI_MEMORY_XP 0x0000000000004000 -/* range requires a runtime mapping */ -#define EFI_MEMORY_RUNTIME 0x8000000000000000 - -#define EFI_MEMORY_DESCRIPTOR_VERSION 1 - -typedef uint64_t efi_phys_addr_t; -typedef uint64_t efi_virt_addr_t; - -typedef struct -{ - uint32_t Type; /* 32 bit padding */ - efi_phys_addr_t PhysicalStart; - efi_virt_addr_t VirtualStart; - uint64_t NumberOfPages; - uint64_t Attribute; -} efi_memory_descriptor_t; - -#define NextMemoryDescriptor(Ptr,Size) ((efi_memory_descriptor_t*) (((uint8_t*) Ptr) + Size)) - - -typedef efi_status_t (*efi_set_virtual_address_map_t) - ( - uint64_t MemoryMapSize, - uint64_t DescriptorSize, - uint32_t DescriptorVersion, - efi_memory_descriptor_t* VirtualMap - ); - -typedef efi_status_t (*efi_convert_pointer_t) - ( - uint64_t DebugDisposition, - void** Address - ); - -/* - * A GUID - */ - -typedef struct -{ - uint32_t Data1; - uint16_t Data2; - uint16_t Data3; - uint8_t Data4[8]; -} efi_guid_t; - -/* - * EFI Configuration Table and GUID definitions - */ - -#define MPS_TABLE_GUID \ - { 0xeb9d2d2f, 0x2d88, 0x11d3, \ - { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } - -#define ACPI_TABLE_GUID \ - { 0xeb9d2d30, 0x2d88, 0x11d3, \ - { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } - -#define ACPI_20_TABLE_GUID \ - { 0x8868e871, 0xe4f1, 0x11d3, \ - { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } - -#define SMBIOS_TABLE_GUID \ - { 0xeb9d2d31, 0x2d88, 0x11d3, \ - { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } - -#define SAL_SYSTEM_TABLE_GUID \ - { 0xeb9d2d32, 0x2d88, 0x11d3, \ - { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } - -/* DIG64 Headless Console & Debug Port Table. */ -#define HCDP_TABLE_GUID \ - {0xf951938d, 0x620b, 0x42ef, \ - {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98 } } - - -typedef struct efi_configuration_table -{ - efi_guid_t VendorGuid; - void* VendorTable; -} efi_configuration_table_t; - - -/* - * EFI platform variables - */ - -#define EFI_GLOBAL_VARIABLE \ - { 0x8BE4DF61, 0x93CA, 0x11d2, 0xAA, 0x0D, 0x00, \ - 0xE0, 0x98, 0x03, 0x2B, 0x8C } - -/* Variable attributes */ -#define EFI_VARIABLE_NON_VOLATILE 0x00000001 -#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 -#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 - -/* Variable size limitation */ -#define EFI_MAXIMUM_VARIABLE_SIZE 1024 - -typedef efi_status_t (*efi_get_variable_t) - ( - efi_char16_t* VariableName, - efi_guid_t *VendorGuid, - uint32_t* Attributes, - uint64_t* DataSize, - void* Data - ); - -typedef -efi_status_t (*efi_get_next_variable_name_t) - ( - uint64_t* VariableNameSize, - efi_char16_t* VariableName, - efi_guid_t* VendorGuid - ); - -typedef efi_status_t (*efi_set_variable_t) - ( - efi_char16_t* VariableName, - efi_guid_t* VendorGuid, - uint32_t Attributes, - uint64_t DataSize, - void* Data - ); - -/* - * Misc - */ - -typedef enum -{ - EfiResetCold, - EfiResetWarm, - EfiResetShutdown -} efi_reset_type_t; - - -typedef efi_status_t (*efi_reset_system_t) - ( - efi_reset_type_t ResetType, - efi_status_t ResetStatus, - uint64_t DataSize, - efi_char16_t* ResetData - ); - -typedef efi_status_t (*efi_get_next_high_mono_count_t) (uint32_t* HighCount); - - -/* - * EFI Runtime Serivces Table - */ - -#define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL -#define EFI_RUNTIME_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION<<16) \ - | (EFI_SPECIFICATION_MINOR_REVISION)) - -typedef struct -{ - efi_table_header_t Hdr; - /* Time services */ - efi_get_time_t GetTime; - efi_set_time_t SetTime; - efi_get_wakeup_time_t GetWakeupTime; - efi_set_wakeup_time_t SetWakeupTime; - /* Virtual memory services */ - efi_set_virtual_address_map_t SetVirtualAddressMap; - efi_convert_pointer_t ConvertPointer; - /* Variable serviers */ - efi_get_variable_t GetVariable; - efi_get_next_variable_name_t GetNextVariableName; - efi_set_variable_t SetVariable; - /* Misc */ - efi_get_next_high_mono_count_t GetNextHighMonotonicCount; - efi_reset_system_t ResetSystem; - -} efi_runtime_services_t; - - -#define EFI_SPECIFICATION_MAJOR_REVISION 1 -#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 -#define EFI_SYSTEM_TABLE_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION<<16) \ - | (EFI_SPECIFICATION_MINOR_REVISION)) - -struct efi_system_table -{ - efi_table_header_t Hdr; - - uint64_t FirmwareVendor; // phys addr of CHAR16 - uint32_t FirmwareRevision; // Firmware vendor specific - - efi_handle_t ConsoleInHandle; - uint64_t ConIn; - - efi_handle_t ConsoleOutHandle; - uint64_t ConOut; - - efi_handle_t StandardErrorHandle; - uint64_t StdErr; - - uint64_t RuntimeServices; // phys addr - uint64_t BootServices; // phys addr - - uint64_t NumberOfTableEntries; // Number of entries in Config - uint64_t ConfigurationTable; // phys addr of ConfigTable -}; - -typedef struct efi_system_table efi_system_table_t; - - -#define EFI_PAGE_SIZE 4096 -#define EFI_PAGE_MASK 0xFFF -#define EFI_PAGE_SHIFT 12 - -#define EFI_SIZE_TO_PAGES(a) \ - ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) ) - - -void init_efi(void); -int efi_get_time(efi_time_t* tmP); -efi_status_t ia64_call_efi_physical(void *, ...); - - -#endif /* _EFI_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/hypercall-ia64.h --- a/extras/mini-os/include/ia64/hypercall-ia64.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/****************************************************************************** - * hypercall.h - * - * Mini-OS-specific hypervisor handling for ia64. - * - * Copyright (c) 2002-2004, K A Fraser - * Changes: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxx> - * - * 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; or, when distributed - * separately from the Linux kernel or incorporated into other - * software packages, subject to the following license: - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this source file (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, modify, - * merge, publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef __HYPERCALL_H__ -#define __HYPERCALL_H__ - -#include <xen/event_channel.h> -#include <xen/sched.h> -#include <xen/version.h> - -#ifndef _HYPERVISOR_H_ -# error "please don't include this file directly" -#endif - -// See linux/compiler.h -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - -extern unsigned long __hypercall(unsigned long a1, unsigned long a2, - unsigned long a3, unsigned long a4, - unsigned long a5, unsigned long cmd); -/* - * Assembler stubs for hyper-calls. - */ - -#define _hypercall0(type, name) \ -({ \ - long __res; \ - __res = __hypercall(0, 0, 0, 0, 0, \ - __HYPERVISOR_##name); \ - (type)__res; \ -}) - -#define _hypercall1(type, name, a1) \ -({ \ - long __res; \ - __res = __hypercall((unsigned long)a1, \ - 0, 0, 0, 0, __HYPERVISOR_##name); \ - (type)__res; \ -}) - -#define _hypercall2(type, name, a1, a2) \ -({ \ - long __res; \ - __res = __hypercall((unsigned long)a1, \ - (unsigned long)a2, \ - 0, 0, 0, __HYPERVISOR_##name); \ - (type)__res; \ -}) - -#define _hypercall3(type, name, a1, a2, a3) \ -({ \ - long __res; \ - __res = __hypercall((unsigned long)a1, \ - (unsigned long)a2, \ - (unsigned long)a3, \ - 0, 0, __HYPERVISOR_##name); \ - (type)__res; \ -}) - -#define _hypercall4(type, name, a1, a2, a3, a4) \ -({ \ - long __res; \ - __res = __hypercall((unsigned long)a1, \ - (unsigned long)a2, \ - (unsigned long)a3, \ - (unsigned long)a4, \ - 0, __HYPERVISOR_##name); \ - (type)__res; \ -}) - -#define _hypercall5(type, name, a1, a2, a3, a4, a5) \ -({ \ - long __res; \ - __res = __hypercall((unsigned long)a1, \ - (unsigned long)a2, \ - (unsigned long)a3, \ - (unsigned long)a4, \ - (unsigned long)a5, \ - __HYPERVISOR_##name); \ - (type)__res; \ -}) - - -int HYPERVISOR_event_channel_op(int cmd, void *arg); - -int HYPERVISOR_xen_version(int cmd, void *arg); - -int HYPERVISOR_console_io(int cmd, int count, char *str); - -int HYPERVISOR_sched_op_compat(int cmd, unsigned long arg); - -int HYPERVISOR_sched_op(int cmd, void *arg); - -int HYPERVISOR_callback_op(int cmd, void *arg); - -int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count); - -int HYPERVISOR_opt_feature(void *arg); - -int HYPERVISOR_suspend(unsigned long srec); - -int HYPERVISOR_shutdown(unsigned int reason); - -#endif /* __HYPERCALL_H__ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/ia64_cpu.h --- a/extras/mini-os/include/ia64/ia64_cpu.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,738 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * This code is mostly taken from FreeBSD. - * - * - **************************************************************************** - * Copyright (c) 2000 Doug Rabson - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#ifndef _IA64_CPU_H_ -#define _IA64_CPU_H_ - -#include "ia64_fpu.h" - -/* - * Definition of Region Register bits (RR) - * - * RR bit field positions - */ -#define IA64_RR_VE 0 -#define IA64_RR_MBZ0 1 -#define IA64_RR_PS 2 -#define IA64_RR_PS_LEN 6 -#define IA64_RR_RID 8 -#define IA64_RR_RID_LEN 24 -#define IA64_RR_MBZ1 32 - -#define IA64_RR_IDX_POS 61 - -#define IA64_RR_VAL(size,rid) (((size) << IA64_RR_PS) | ((rid) << IA64_RR_RID)) - -/* - * Define Protection Key Register (PKR) - * - * PKR bit field positions - */ -#define IA64_PKR_V 0 -#define IA64_PKR_WD 1 -#define IA64_PKR_RD 2 -#define IA64_PKR_XD 3 -#define IA64_PKR_MBZ0 4 -#define IA64_PKR_KEY 8 -#define IA64_PKR_KEY_LEN 24 -#define IA64_PKR_MBZ1 32 - -#define IA64_PKR_VALID (1 << IA64_PKR_V) - - -/* - * ITIR bit field positions - */ - -#define IA64_ITIR_MBZ0 0 -#define IA64_ITIR_PS 2 -#define IA64_ITIR_PS_LEN 6 -#define IA64_ITIR_KEY 8 -#define IA64_ITIR_KEY_LEN 24 -#define IA64_ITIR_MBZ1 32 -#define IA64_ITIR_MBZ1_LEN 16 -#define IA64_ITIR_PPN 48 -#define IA64_ITIR_PPN_LEN 15 -#define IA64_ITIR_MBZ2 63 - -/* - * Definition of PSR and IPSR bits. - */ -#define IA64_PSR_BE 0x0000000000000002 -#define IA64_PSR_UP 0x0000000000000004 -#define IA64_PSR_AC 0x0000000000000008 -#define IA64_PSR_MFL 0x0000000000000010 -#define IA64_PSR_MFH_BIT 5 -#define IA64_PSR_MFH (1 << IA64_PSR_MFH_BIT) -#define IA64_PSR_UMASK (IA64_PSR_BE | IA64_PSR_UP | \ - IA64_PSR_AC | IA64_PSR_MFL | \ - IA64_PSR_MFH) -#define IA64_PSR_IC_BIT 13 -#define IA64_PSR_IC (1<<IA64_PSR_IC_BIT) /*0x0000000000002000*/ -#define IA64_PSR_I_BIT 14 -#define IA64_PSR_I (1<<IA64_PSR_I_BIT) /*0x0000000000004000*/ -#define IA64_PSR_PK 0x0000000000008000 -#define IA64_PSR_DT 0x0000000000020000 -#define IA64_PSR_DFL 0x0000000000040000 -#define IA64_PSR_DFH 0x0000000000080000 -#define IA64_PSR_SP 0x0000000000100000 -#define IA64_PSR_PP 0x0000000000200000 -#define IA64_PSR_DI 0x0000000000400000 -#define IA64_PSR_SI 0x0000000000800000 -#define IA64_PSR_DB 0x0000000001000000 -#define IA64_PSR_LP 0x0000000002000000 -#define IA64_PSR_TB 0x0000000004000000 -#define IA64_PSR_RT 0x0000000008000000 -#define IA64_PSR_CPL 0x0000000300000000 -#define IA64_PSR_CPL_KERN 0x0000000000000000 -#define IA64_PSR_CPL_1 0x0000000100000000 -#define IA64_PSR_CPL_2 0x0000000200000000 -#define IA64_PSR_CPL_USER 0x0000000300000000 -#define IA64_PSR_IS 0x0000000400000000 -#define IA64_PSR_MC 0x0000000800000000 -#define IA64_PSR_IT 0x0000001000000000 -#define IA64_PSR_ID 0x0000002000000000 -#define IA64_PSR_DA 0x0000004000000000 -#define IA64_PSR_DD 0x0000008000000000 -#define IA64_PSR_SS 0x0000010000000000 -#define IA64_PSR_RI 0x0000060000000000 -#define IA64_PSR_RI_0 0x0000000000000000 -#define IA64_PSR_RI_1 0x0000020000000000 -#define IA64_PSR_RI_2 0x0000040000000000 -#define IA64_PSR_RI_SHIFT 41 -#define IA64_PSR_ED 0x0000080000000000 -#define IA64_PSR_BN 0x0000100000000000 -#define IA64_PSR_IA 0x0000200000000000 - - -#define STARTUP_PSR (IA64_PSR_IT | IA64_PSR_PK | \ - IA64_PSR_DT | IA64_PSR_RT | \ - IA64_PSR_BN | IA64_PSR_CPL_KERN | IA64_PSR_AC) - -#define MOS_SYS_PSR (IA64_PSR_IC | IA64_PSR_I | IA64_PSR_IT | \ - IA64_PSR_DT | IA64_PSR_RT | \ - IA64_PSR_BN | IA64_PSR_CPL_KERN | IA64_PSR_AC) - -#define MOS_USR_PSR (IA64_PSR_IC | IA64_PSR_I | IA64_PSR_IT | \ - IA64_PSR_DT | IA64_PSR_RT | \ - IA64_PSR_BN | IA64_PSR_CPL_USER | IA64_PSR_AC) - -/* - * Definition of ISR bits. - */ -#define IA64_ISR_CODE 0x000000000000ffff -#define IA64_ISR_VECTOR 0x0000000000ff0000 -#define IA64_ISR_X 0x0000000100000000 -#define IA64_ISR_W 0x0000000200000000 -#define IA64_ISR_R 0x0000000400000000 -#define IA64_ISR_NA 0x0000000800000000 -#define IA64_ISR_SP 0x0000001000000000 -#define IA64_ISR_RS 0x0000002000000000 -#define IA64_ISR_IR 0x0000004000000000 -#define IA64_ISR_NI 0x0000008000000000 -#define IA64_ISR_SO 0x0000010000000000 -#define IA64_ISR_EI 0x0000060000000000 -#define IA64_ISR_EI_0 0x0000000000000000 -#define IA64_ISR_EI_1 0x0000020000000000 -#define IA64_ISR_EI_2 0x0000040000000000 -#define IA64_ISR_ED 0x0000080000000000 - -/* - * DCR bit positions - */ -#define IA64_DCR_PP 0 -#define IA64_DCR_BE 1 -#define IA64_DCR_LC 2 -#define IA64_DCR_MBZ0 4 -#define IA64_DCR_MBZ0_V 0xf -#define IA64_DCR_DM 8 -#define IA64_DCR_DP 9 -#define IA64_DCR_DK 10 -#define IA64_DCR_DX 11 -#define IA64_DCR_DR 12 -#define IA64_DCR_DA 13 -#define IA64_DCR_DD 14 -#define IA64_DCR_DEFER_ALL 0x7f00 -#define IA64_DCR_MBZ1 2 -#define IA64_DCR_MBZ1_V 0xffffffffffffULL - - -#define IA64_DCR_DEFAULT (IA64_DCR_BE) - -/* - * Vector numbers for various ia64 interrupts. - */ -#define IA64_VEC_VHPT 0 -#define IA64_VEC_ITLB 1 -#define IA64_VEC_DTLB 2 -#define IA64_VEC_ALT_ITLB 3 -#define IA64_VEC_ALT_DTLB 4 -#define IA64_VEC_NESTED_DTLB 5 -#define IA64_VEC_IKEY_MISS 6 -#define IA64_VEC_DKEY_MISS 7 -#define IA64_VEC_DIRTY_BIT 8 -#define IA64_VEC_INST_ACCESS 9 -#define IA64_VEC_DATA_ACCESS 10 -#define IA64_VEC_BREAK 11 -#define IA64_VEC_EXT_INTR 12 -#define IA64_VEC_PAGE_NOT_PRESENT 20 -#define IA64_VEC_KEY_PERMISSION 21 -#define IA64_VEC_INST_ACCESS_RIGHTS 22 -#define IA64_VEC_DATA_ACCESS_RIGHTS 23 -#define IA64_VEC_GENERAL_EXCEPTION 24 -#define IA64_VEC_DISABLED_FP 25 -#define IA64_VEC_NAT_CONSUMPTION 26 -#define IA64_VEC_SPECULATION 27 -#define IA64_VEC_DEBUG 29 -#define IA64_VEC_UNALIGNED_REFERENCE 30 -#define IA64_VEC_UNSUPP_DATA_REFERENCE 31 -#define IA64_VEC_FLOATING_POINT_FAULT 32 -#define IA64_VEC_FLOATING_POINT_TRAP 33 -#define IA64_VEC_LOWER_PRIVILEGE_TRANSFER 34 -#define IA64_VEC_TAKEN_BRANCH_TRAP 35 -#define IA64_VEC_SINGLE_STEP_TRAP 36 -#define IA64_VEC_IA32_EXCEPTION 45 -#define IA64_VEC_IA32_INTERCEPT 46 -#define IA64_VEC_IA32_INTERRUPT 47 - -/* - * Define hardware RSE Configuration Register - * - * RS Configuration (RSC) bit field positions - */ - -#define IA64_RSC_MODE 0 -#define IA64_RSC_PL 2 -#define IA64_RSC_BE 4 -#define IA64_RSC_MBZ0 5 -#define IA64_RSC_MBZ0_V 0x3ff -#define IA64_RSC_LOADRS 16 -#define IA64_RSC_LOADRS_LEN 14 -#define IA64_RSC_MBZ1 30 -#define IA64_RSC_MBZ1_V 0x3ffffffffULL - -/* - * RSC modes - */ -#define IA64_RSC_MODE_LY (0x0) /* Lazy */ -#define IA64_RSC_MODE_SI (0x1) /* Store intensive */ -#define IA64_RSC_MODE_LI (0x2) /* Load intensive */ -#define IA64_RSC_MODE_EA (0x3) /* Eager */ - -#define IA64_RSE_EAGER (IA64_RSC_MODE_EA<<IA64_RSC_MODE) -#define IA64_RSE_LAZY (IA64_RSC_MODE_LY<<IA64_RSC_MODE) - - - -#ifndef __ASSEMBLY__ - -/* ia64 function descriptor and global pointer */ -struct ia64_fdesc -{ - uint64_t func; - uint64_t gp; -}; -typedef struct ia64_fdesc ia64_fdesc_t; - -#define FDESC_FUNC(fn) (((struct ia64_fdesc *) fn)->func) -#define FDESC_GP(fn) (((struct ia64_fdesc *) fn)->gp) - - -/* - * Various special ia64 instructions. - */ - -/* - * Memory Fence. - */ -static __inline void -ia64_mf(void) -{ - __asm __volatile("mf" ::: "memory"); -} - -static __inline void -ia64_mf_a(void) -{ - __asm __volatile("mf.a"); -} - -/* - * Flush Cache. - */ -static __inline void -ia64_fc(uint64_t va) -{ - __asm __volatile("fc %0" :: "r"(va)); -} - -/* - * Sync instruction stream. - */ -static __inline void -ia64_sync_i(void) -{ - __asm __volatile("sync.i"); -} - -/* - * Calculate address in VHPT for va. - */ -static __inline uint64_t -ia64_thash(uint64_t va) -{ - uint64_t result; - __asm __volatile("thash %0=%1" : "=r" (result) : "r" (va)); - return result; -} - -/* - * Calculate VHPT tag for va. - */ -static __inline uint64_t -ia64_ttag(uint64_t va) -{ - uint64_t result; - __asm __volatile("ttag %0=%1" : "=r" (result) : "r" (va)); - return result; -} - -/* - * Convert virtual address to physical. - */ -static __inline uint64_t -ia64_tpa(uint64_t va) -{ - uint64_t result; - __asm __volatile("tpa %0=%1" : "=r" (result) : "r" (va)); - return result; -} - -/* - * Generate a ptc.e instruction. - */ -static __inline void -ia64_ptc_e(uint64_t v) -{ - __asm __volatile("ptc.e %0;; srlz.d;;" :: "r"(v)); -} - -/* - * Generate a ptc.g instruction. - */ -static __inline void -ia64_ptc_g(uint64_t va, uint64_t size) -{ - __asm __volatile("ptc.g %0,%1;; srlz.d;;" :: "r"(va), "r"(size<<2)); -} - -/* - * Generate a ptc.ga instruction. - */ -static __inline void -ia64_ptc_ga(uint64_t va, uint64_t size) -{ - __asm __volatile("ptc.ga %0,%1;; srlz.d;;" :: "r"(va), "r"(size<<2)); -} - -/* - * Generate a ptc.l instruction. - */ -static __inline void -ia64_ptc_l(uint64_t va, uint64_t size) -{ - __asm __volatile("ptc.l %0,%1;; srlz.d;;" :: "r"(va), "r"(size<<2)); -} - -/* - * Read the value of psr. - */ -static __inline uint64_t -ia64_get_psr(void) -{ - uint64_t result; - __asm __volatile("mov %0=psr;;" : "=r" (result)); - return result; -} - -static __inline void -ia64_set_psr(uint64_t v) -{ - __asm __volatile("mov psr.l=%0" :: "r" (v)); -} - -static __inline void -ia64_srlz_d(void) -{ - __asm __volatile("srlz.d;;"); -} - -static __inline void -disable_intr(void) -{ - __asm __volatile ("rsm psr.ic|psr.i"); -} - -static __inline void -enable_intr(void) -{ - __asm __volatile ("ssm psr.ic|psr.i"); -} - -/* - * Define accessors for application registers. - */ - -#define IA64_AR(name) \ - \ -static __inline uint64_t \ -ia64_get_##name(void) \ -{ \ - uint64_t result; \ - __asm __volatile(";;mov %0=ar." #name ";;" : "=r" (result)); \ - return result; \ -} \ - \ -static __inline void \ -ia64_set_##name(uint64_t v) \ -{ \ - __asm __volatile("mov ar." #name "=%0" :: "r" (v)); \ -} - -IA64_AR(k0) -IA64_AR(k1) -IA64_AR(k2) -IA64_AR(k3) -IA64_AR(k4) -IA64_AR(k5) -IA64_AR(k6) -IA64_AR(k7) - -IA64_AR(rsc) -IA64_AR(bsp) -IA64_AR(bspstore) -IA64_AR(rnat) - -IA64_AR(fcr) - -IA64_AR(eflag) -IA64_AR(csd) -IA64_AR(ssd) -IA64_AR(cflg) -IA64_AR(fsr) -IA64_AR(fir) -IA64_AR(fdr) - -IA64_AR(ccv) - -IA64_AR(unat) - -IA64_AR(fpsr) - -IA64_AR(itc) - -IA64_AR(pfs) -IA64_AR(lc) -IA64_AR(ec) - -/* - * Define accessors for control registers. - */ - -#define IA64_CR(name) \ - \ -static __inline uint64_t \ -ia64_get_##name(void) \ -{ \ - uint64_t result; \ - __asm __volatile("mov %0=cr." #name : "=r" (result)); \ - return result; \ -} \ - \ -static __inline void \ -ia64_set_##name(uint64_t v) \ -{ \ - __asm __volatile("mov cr." #name "=%0" :: "r" (v)); \ -} - -IA64_CR(dcr) -IA64_CR(itm) -IA64_CR(iva) - -IA64_CR(pta) - -IA64_CR(ipsr) -IA64_CR(isr) - -IA64_CR(iip) -IA64_CR(ifa) -IA64_CR(itir) -IA64_CR(iipa) -IA64_CR(ifs) -IA64_CR(iim) -IA64_CR(iha) - -IA64_CR(lid) -IA64_CR(ivr) -IA64_CR(tpr) -IA64_CR(eoi) -IA64_CR(irr0) -IA64_CR(irr1) -IA64_CR(irr2) -IA64_CR(irr3) -IA64_CR(itv) -IA64_CR(pmv) -IA64_CR(cmcv) - -IA64_CR(lrr0) -IA64_CR(lrr1) - -#define IA64_GR(name) \ - \ -static __inline uint64_t \ -ia64_get_##name(void) \ -{ \ - uint64_t result; \ - __asm __volatile("mov %0=" #name : "=r" (result)); \ - return result; \ -} \ - \ -static __inline void \ -ia64_set_##name(uint64_t v) \ -{ \ - __asm __volatile("mov " #name "=%0" :: "r" (v)); \ -} - -IA64_GR(sp) -IA64_GR(b0) -IA64_GR(r13) // tp - - -/* - * Write a region register. - */ -static __inline void -ia64_set_rr(uint64_t rrbase, uint64_t v) -{ - __asm __volatile("mov rr[%0]=%1;; srlz.d;;" - :: "r"(rrbase), "r"(v) : "memory"); -} - -/* - * Read a region register. - */ -static __inline uint64_t -ia64_get_rr(uint64_t rrbase) -{ - uint64_t v; - __asm __volatile("mov %1=rr[%0];;" - : "=r" (v) : "r"(rrbase) : "memory"); - return v; -} - - -/* - * Read a CPUID register. - */ -static __inline uint64_t -ia64_get_cpuid(int i) -{ - uint64_t result; - __asm __volatile("mov %0=cpuid[%1]" - : "=r" (result) : "r"(i)); - return result; -} - - -struct trap_frame -{ - uint64_t rsc; - uint64_t ndirty; /* number of dirty regs */ - uint64_t ssd; - uint64_t iip; /* interrupted ip */ - uint64_t ipsr; /* interrupted psr */ - uint64_t ifs; /* interruption func status register */ - - uint16_t trap_num; /* Trap num, index in trap_vec */ - uint64_t cfm; /* current frame marker */ - uint64_t pfs; /* previous function state ar64 */ - uint64_t bsp; /* backing store pointer ar17 */ - uint64_t rnat; /* rse nat collection ar19 */ - uint64_t csd; /* comp and store data reg ar25 */ - uint64_t ccv; /* comp and xchange val reg ar32 */ - uint64_t unat; /* */ - uint64_t fpsr; /* floating point state reg ar40 */ - uint64_t pr; /* predicate regs 0-63 */ - - uint64_t gp; /* the gp pointer */ - uint64_t sp; /* stack pointer */ - uint64_t tp; /* thread pointer */ - - uint64_t r2; /* global reg 2 */ - uint64_t r3; - uint64_t r8; - uint64_t r9; - uint64_t r10; - uint64_t r11; - uint64_t r14; - uint64_t r15; - uint64_t r16; - uint64_t r17; - uint64_t r18; - uint64_t r19; - uint64_t r20; - uint64_t r21; - uint64_t r22; - uint64_t r23; - uint64_t r24; - uint64_t r25; - uint64_t r26; - uint64_t r27; - uint64_t r28; - uint64_t r29; - uint64_t r30; - uint64_t r31; - - uint64_t b0; - uint64_t b6; - uint64_t b7; - - ia64_fpreg_t f6; /* floating point register 6 */ - ia64_fpreg_t f7; - ia64_fpreg_t f8; - ia64_fpreg_t f9; - ia64_fpreg_t f10; - ia64_fpreg_t f11; - - uint64_t ifa; /* interruption faulting address */ - uint64_t isr; /* interruption status register */ - uint64_t iim; /* interruption immediate register */ -}; - -typedef struct trap_frame trap_frame_t; - - -#endif /* __ASSEMBLY__ */ - -/* Page access parameters. */ -#define PTE_P_SHIFT 0 -#define PTE_P 1 - -#define PTE_MA_SHIFT 2 -#define PTE_MA_WB 0 - -#define PTE_A_SHIFT 5 -#define PTE_A 1 -#define PTE_D_SHIFT 6 -#define PTE_D 1 - -#define PTE_AR_SHIFT 9 -#define PTE_AR_R 0 -#define PTE_AR_RX 1 -#define PTE_AR_RW 2 -#define PTE_AR_RWX 3 -#define PTE_AR_R_RW 4 -#define PTE_AR_RX_RWX 5 -#define PTE_AR_RWX_RW 6 -/* privilege level */ -#define PTE_PL_SHIFT 7 -#define PTE_PL_KERN 0 /* used for kernel */ -/* page size */ -#define PTE_PS_4K 12 -#define PTE_PS_8K 13 -#define PTE_PS_16K 14 -#define PTE_PS_64K 16 -#define PTE_PS_256K 18 -#define PTE_PS_1M 20 -#define PTE_PS_4M 22 -#define PTE_PS_16M 24 -#define PTE_PS_64M 26 -#define PTE_PS_256M 28 - - - /* Some offsets for ia64_pte_t. */ -#define PTE_OFF_P 0 -#define PTE_OFF_MA 3 -#define PTE_OFF_A 5 -#define PTE_OFF_D 6 -#define PTE_OFF_PL 7 -#define PTE_OFF_AR 9 -#define PTE_OFF_PPN 12 -#define PTE_OFF_ED 52 - -#if !defined(_ASM) && !defined(__ASSEMBLY__) -/* - * A short-format VHPT entry. Also matches the TLB insertion format. - */ -typedef struct -{ - uint64_t pte_p :1; /* bits 0..0 */ - uint64_t pte_rv1:1; /* bits 1..1 */ - uint64_t pte_ma :3; /* bits 2..4 */ - uint64_t pte_a :1; /* bits 5..5 */ - uint64_t pte_d :1; /* bits 6..6 */ - uint64_t pte_pl :2; /* bits 7..8 */ - uint64_t pte_ar :3; /* bits 9..11 */ - uint64_t pte_ppn:38; /* bits 12..49 */ - uint64_t pte_rv2:2; /* bits 50..51 */ - uint64_t pte_ed :1; /* bits 52..52 */ - uint64_t pte_ig :11; /* bits 53..63 */ -} ia64_pte_t; - - -/* - * A long-format VHPT entry. - */ -typedef struct -{ - uint64_t pte_p :1; /* bits 0..0 */ - uint64_t pte_rv1 :1; /* bits 1..1 */ - uint64_t pte_ma :3; /* bits 2..4 */ - uint64_t pte_a :1; /* bits 5..5 */ - uint64_t pte_d :1; /* bits 6..6 */ - uint64_t pte_pl :2; /* bits 7..8 */ - uint64_t pte_ar :3; /* bits 9..11 */ - uint64_t pte_ppn :38; /* bits 12..49 */ - uint64_t pte_rv2 :2; /* bits 50..51 */ - uint64_t pte_ed :1; /* bits 52..52 */ - uint64_t pte_ig :11; /* bits 53..63 */ - uint64_t pte_rv3 :2; /* bits 0..1 */ - uint64_t pte_ps :6; /* bits 2..7 */ - uint64_t pte_key :24; /* bits 8..31 */ - uint64_t pte_rv4 :32; /* bits 32..63 */ - uint64_t pte_tag; /* includes ti */ - uint64_t pte_chain; /* pa of collision chain */ -} ia64_lpte_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* _IA64_CPU_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/ia64_fpu.h --- a/extras/mini-os/include/ia64/ia64_fpu.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * This code is mostly taken from FreeBSD. - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#ifndef _IA64_FPU_H_ -#define _IA64_FPU_H_ - -#include "os.h" - -/* - * Floating point status register bits. - */ -#define IA64_FPSR_TRAP_VD UL_CONST(0x0000000000000001) -#define IA64_FPSR_TRAP_DD UL_CONST(0x0000000000000002) -#define IA64_FPSR_TRAP_ZD UL_CONST(0x0000000000000004) -#define IA64_FPSR_TRAP_OD UL_CONST(0x0000000000000008) -#define IA64_FPSR_TRAP_UD UL_CONST(0x0000000000000010) -#define IA64_FPSR_TRAP_ID UL_CONST(0x0000000000000020) -#define IA64_FPSR_SF(i,v) ((v) << ((i)*13+6)) - -#define IA64_SF_FTZ UL_CONST(0x0001) -#define IA64_SF_WRE UL_CONST(0x0002) -#define IA64_SF_PC UL_CONST(0x000c) -#define IA64_SF_PC_0 UL_CONST(0x0000) -#define IA64_SF_PC_1 UL_CONST(0x0004) -#define IA64_SF_PC_2 UL_CONST(0x0008) -#define IA64_SF_PC_3 UL_CONST(0x000c) -#define IA64_SF_RC UL_CONST(0x0030) -#define IA64_SF_RC_NEAREST UL_CONST(0x0000) -#define IA64_SF_RC_NEGINF UL_CONST(0x0010) -#define IA64_SF_RC_POSINF UL_CONST(0x0020) -#define IA64_SF_RC_TRUNC UL_CONST(0x0030) -#define IA64_SF_TD UL_CONST(0x0040) -#define IA64_SF_V UL_CONST(0x0080) -#define IA64_SF_D UL_CONST(0x0100) -#define IA64_SF_Z UL_CONST(0x0200) -#define IA64_SF_O UL_CONST(0x0400) -#define IA64_SF_U UL_CONST(0x0800) -#define IA64_SF_I UL_CONST(0x1000) - -#define IA64_SF_DEFAULT (IA64_SF_PC_3 | IA64_SF_RC_NEAREST) - -#define IA64_FPSR_DEFAULT (IA64_FPSR_TRAP_VD \ - | IA64_FPSR_TRAP_DD \ - | IA64_FPSR_TRAP_ZD \ - | IA64_FPSR_TRAP_OD \ - | IA64_FPSR_TRAP_UD \ - | IA64_FPSR_TRAP_ID \ - | IA64_FPSR_SF(0, IA64_SF_DEFAULT) \ - | IA64_FPSR_SF(1, (IA64_SF_DEFAULT \ - | IA64_SF_TD \ - | IA64_SF_WRE)) \ - | IA64_FPSR_SF(2, (IA64_SF_DEFAULT \ - | IA64_SF_TD)) \ - | IA64_FPSR_SF(3, (IA64_SF_DEFAULT \ - | IA64_SF_TD))) - - -#ifndef __ASSEMBLY__ - - /* This is from sys/cdefs.h in FreeBSD */ -#define __aligned(x) __attribute__((__aligned__(x))) - - /* A single Floating Point register. */ -struct ia64_fpreg -{ - uint8_t fpr_bits[16]; -} __aligned(16); - -typedef struct ia64_fpreg ia64_fpreg_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* _IA64_FPU_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/os.h --- a/extras/mini-os/include/ia64/os.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* - * Copyright (C) 2007 - Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - -#if !defined(__OS_H__) -#define __OS_H__ - -#if !defined(__ASSEMBLY__) - -#include <mini-os/types.h> -#include "ia64_cpu.h" -#include "atomic.h" -#include "efi.h" -#include "sal.h" -#include "pal.h" -#include <mini-os/hypervisor.h> -#include <mini-os/kernel.h> - - -typedef uint64_t paddr_t; /* Physical address. */ -#ifndef HAVE_LIBC -typedef uint64_t caddr_t; /* rr7/kernel memory address. */ -#endif - -#include "page.h" -#include "mm.h" - - -void arch_init(start_info_t *si); /* in common.c */ -void arch_print_info(void); /* in common.c */ -void arch_fini(void); - - -/* Size of xen_ia64_boot_param.command_line */ -#define COMMAND_LINE_SIZE 512 - -extern struct xen_ia64_boot_param* ia64_boot_paramP; -extern struct xen_ia64_boot_param ia64BootParamG; -extern char boot_cmd_line[]; -extern efi_system_table_t* efiSysTableP; -extern int bootverbose; - -extern void ia64_probe_sapics(void); - - - -/* Contains the needed stuff from efi. */ -struct efi -{ - - efi_system_table_t* efiSysTableP; - efi_set_virtual_address_map_t setVirtAddrMapF; - efi_get_time_t getTimeF; - efi_reset_system_t resetSystemF; - -}; - -struct machine_fw -{ - struct efi efi; - - uint64_t ia64_port_base; /* physical address */ - uint64_t ia64_pal_base; /* virtual rr7 address */ - - sal_system_table_t* ia64_sal_tableP; - sal_entry_t* ia64_sal_entryP; /* SAL_PROC entrypoint */ - - uint64_t ia64_efi_acpi_table; /* physical address */ - uint64_t ia64_efi_acpi20_table; /* physical address */ - - uint64_t mach_mem_start; /* phys start addr of machine memory */ - uint64_t mach_mem_size; /* size of machine memory */ - - uint64_t kernstart; /* virt address of kern text start */ - uint64_t kernend; - uint64_t kernpstart; /* phys address of kern text start */ - uint64_t kernpend; -}; - -extern struct machine_fw machineFwG; - -#define ia64_sal_entry machineFwG.ia64_sal_entryP - -#define smp_processor_id() 0 - -static inline uint64_t -xchg8(uint64_t* ptr, uint64_t x) \ -{ - uint64_t oldVal; - asm volatile ("xchg8 %0=[%1],%2" : "=r" (oldVal) - : "r" (ptr), "r" (x) : "memory"); - return oldVal; -} -#define xchg xchg8 - -// Counts the number of 1-bits in x. -#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# define get_popcnt(x) __builtin_popcountl(x) -#else -# define get_popcnt(x) \ - ({ \ - uint64_t num; \ - asm ("popcnt %0=%1" : "=r" (num) : "r" (x)); \ - num; \ - }) -#endif - -/** - * __ffs - find first bit in word. - * @x: The word to search - * - * Undefined if no bit exists, so code should check against 0 first. - */ -static inline unsigned long -__ffs (unsigned long x) -{ - unsigned long result; - - result = get_popcnt((x-1) & ~x); - return result; -} - - -static inline void -synch_clear_bit(int num, volatile void *addr) -{ - clear_bit(num, addr); -} - -static inline void -synch_set_bit(int num, volatile void *addr) -{ - set_bit(num, addr); -} - -static inline int -synch_test_bit(int nr, const volatile void *addr) -{ - return test_bit(nr, addr); -} - -static inline int -synch_test_and_set_bit(int num, volatile void * addr) -{ - return test_and_set_bit(num, addr); -} - - -#define synch_cmpxchg(ptr, old, new) \ -((__typeof__(*(ptr)))__synch_cmpxchg((ptr),\ - (unsigned long)(old), \ - (unsigned long)(new), \ - sizeof(*(ptr)))) - -static inline unsigned long -__synch_cmpxchg(volatile void *ptr, uint64_t old, uint64_t new, int size) -{ - switch (size) - { - case 1: - return ia64_cmpxchg_acq_8(ptr, old, new); - case 2: - return ia64_cmpxchg_acq_16(ptr, old, new); - case 4: - return ia64_cmpxchg_acq_32(ptr, old, new); - case 8: - return ia64_cmpxchg_acq_64(ptr, old, new); - } - return ia64_cmpxchg_acq_64(ptr, old, new); -} - -extern shared_info_t *HYPERVISOR_shared_info; - - -/* - * This code is from the originally os.h and should be put in a - * common header file! - */ - -/* - * The use of 'barrier' in the following reflects their use as local-lock - * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following - * critical operations are executed. All critical operations must complete - * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also - * includes these barriers, for example. - */ - -#define __cli() \ -do { \ - vcpu_info_t *_vcpu; \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ - _vcpu->evtchn_upcall_mask = 1; \ - barrier(); \ -} while (0) - -#define __sti() \ -do { \ - vcpu_info_t *_vcpu; \ - barrier(); \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ - _vcpu->evtchn_upcall_mask = 0; \ - barrier(); /* unmask then check (avoid races) */ \ - if (unlikely(_vcpu->evtchn_upcall_pending)) \ - force_evtchn_callback(); \ -} while (0) - -#define __save_flags(x) \ -do { \ - vcpu_info_t *_vcpu; \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ - (x) = _vcpu->evtchn_upcall_mask; \ -} while (0) - -#define __restore_flags(x) \ -do { \ - vcpu_info_t *_vcpu; \ - barrier(); \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ - if ((_vcpu->evtchn_upcall_mask = (x)) == 0) { \ - barrier(); /* unmask then check (avoid races) */ \ - if ( unlikely(_vcpu->evtchn_upcall_pending) ) \ - force_evtchn_callback(); \ - }\ -} while (0) - -#define safe_halt() ((void)0) - -#define __save_and_cli(x) \ -do { \ - vcpu_info_t *_vcpu; \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ - (x) = _vcpu->evtchn_upcall_mask; \ - _vcpu->evtchn_upcall_mask = 1; \ - barrier(); \ -} while (0) - -#define local_irq_save(x) __save_and_cli(x) -#define local_irq_restore(x) __restore_flags(x) -#define local_save_flags(x) __save_flags(x) -#define local_irq_disable() __cli() -#define local_irq_enable() __sti() - -#define irqs_disabled() \ - (HYPERVISOR_shared_info->vcpu_info[smp_processor_id()].evtchn_upcall_mask) - -/* This is a barrier for the compiler only, NOT the processor! */ -#define barrier() __asm__ __volatile__("": : :"memory") - -#define mb() ia64_mf() -#define rmb() mb() -#define wmb() mb() - - -#define BUG() \ - { printk("mini-os BUG at %s:%d!\n", __FILE__, __LINE__); do_exit(); } - -#define PRINT_BV(_fmt, _params...) \ - if (bootverbose) \ - printk(_fmt , ## _params) - -#endif /* !defined(__ASSEMBLY__) */ - -#if defined(__ASSEMBLY__) - -#define UL_CONST(x) x -#define UL_TYPE(x) x - -#else /* defined(__ASSEMBLY__) */ - -#define UL_CONST(x) x##UL -#define UL_TYPE(x) ((uint64_t)x) - -#endif /* defined(__ASSEMBLY__) */ - -#endif /* !defined(__OS_H__) */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/page.h --- a/extras/mini-os/include/ia64/page.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * Common stuff for memory and page handling. - * Parts are taken from FreeBSD. - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - -#if !defined(_PAGE_H_) -#define _PAGE_H_ - -#include "os.h" -#include "ia64_cpu.h" - -#define PTE_KERNEL_ATTR ((PTE_P<<PTE_P_SHIFT) |\ - (PTE_MA_WB<<PTE_MA_SHIFT) |\ - (PTE_D<<PTE_D_SHIFT) |\ - (PTE_A<<PTE_A_SHIFT) |\ - (PTE_PL_KERN<<PTE_PL_SHIFT) |\ - (PTE_AR_RWX<<PTE_AR_SHIFT)) - - -/* The kernel tr page size for text and data. */ -#define KERNEL_TR_PAGE_SIZE PTE_PS_1M -/* The efi-pal page size for text and data. */ -#define PAL_TR_PAGE_SIZE PTE_PS_1M - -#include "arch_limits.h" -#define PAGE_SHIFT __PAGE_SHIFT -#define PAGE_SIZE __PAGE_SIZE -#define PAGE_MASK (~(PAGE_SIZE-1)) - -#define KSTACK_PAGES 4 /* 4 pages for the kernel stack + bsp */ - -#define IA64_TR_KERNEL 0 /* itr0, dtr0: maps kernel image (code) */ -#define IA64_TR_PAL 1 /* itr1: maps pal code */ - -/* - * Manipulating region bits of an address. - */ -#define IA64_RR_BASE(n) ((UL_TYPE(n)) << 61) -#define IA64_RR_MASK(x) ((UL_TYPE(x)) & ((1L << 61) - 1)) -#define IA64_RR_EXTR(x) ((x) >> 61) - -#define IA64_PHYS_TO_RR5(x) ((x) | IA64_RR_BASE(5)) -#define IA64_PHYS_TO_RR7(x) ((x) | IA64_RR_BASE(7)) - -#define __pa(x) IA64_RR_MASK(x) -#define __va(x) IA64_PHYS_TO_RR7(x) - -#define roundup_page(x) ((((unsigned long)(x)) + PAGE_SIZE -1) & PAGE_MASK) -#define trunc_page(x) ((unsigned long)(x) & PAGE_MASK) - - -#if !defined(__ASSEMBLY__) - -/* Contains the parts of the physically memory. */ -extern paddr_t phys_avail[]; - -#define page_to_pfn(page) ((uint64_t)(page) >> PAGE_SHIFT) -#define pfn_to_page(pfn) ((uint64_t)pfn << PAGE_SHIFT) -/* Get phyiscal address of page of virtual address. */ -#define virt_to_page(addr) ((uint64_t)__pa(addr) & PAGE_MASK) -#define virt_to_pfn(addr) (page_to_pfn(virt_to_page(addr))) - - -#endif /* __ASSEMBLY__ */ - - -/* For both see minios-ia64.lds. */ -/* This is where the kernel virtually starts. */ -#define KERNEL_START IA64_PHYS_TO_RR5(0x100000000) -/* !!!!! - * For physical start of kernel - * Currently used in arch/ia64/fw.S. - * !!!!! - */ -#define KERNEL_PHYS_START_SHIFT 20 - -/* A region 5 address to physical address */ -#define KERN_VIRT_2_PHYS(x) (((x) - KERNEL_START) + \ - (1 << KERNEL_PHYS_START_SHIFT)) - -/* Some protection keys for region 5 and 7 addresses. */ -#define IA64_KEY_REG7 0x234 /* Region 7 - identity mapped addresses */ -#define IA64_KEY_REG5 0x89a /* Region 5 - kernel addresses */ - -// This is xen specific ! -#define PAGE_SHIFT_XEN_16K 14 // For 16KB page size -#define mfn_to_virt(mfn) ((void*)__va((mfn) << PAGE_SHIFT_XEN_16K)) - -#endif /* !defined(_PAGE_H_) */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/pal.h --- a/extras/mini-os/include/ia64/pal.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * The code is mostly taken from FreeBSD. - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#ifndef _PAL_H_ -#define _PAL_H_ - -/* - * Architected static calling convention procedures. - */ -#define PAL_CACHE_FLUSH 1 -#define PAL_CACHE_INFO 2 -#define PAL_CACHE_INIT 3 -#define PAL_CACHE_SUMMARY 4 -#define PAL_MEM_ATTRIB 5 -#define PAL_PTCE_INFO 6 -#define PAL_VM_INFO 7 -#define PAL_VM_SUMMARY 8 -#define PAL_BUS_GET_FEATURES 9 -#define PAL_BUS_SET_FEATURES 10 -#define PAL_DEBUG_INFO 11 -#define PAL_FIXED_ADDR 12 -#define PAL_FREQ_BASE 13 -#define PAL_FREQ_RATIOS 14 -#define PAL_PERF_MON_INFO 15 -#define PAL_PLATFORM_ADDR 16 -#define PAL_PROC_GET_FEATURE 17 -#define PAL_PROC_SET_FEATURE 18 -#define PAL_RSE_INFO 19 -#define PAL_VERSION 20 -#define PAL_MC_CLEAR_LOG 21 -#define PAL_MC_DRAIN 22 -#define PAL_MC_DYNAMIC_STATE 24 -#define PAL_MC_ERROR_INFO 25 -#define PAL_MC_EXPECTED 23 -#define PAL_MC_REGISTER_MEM 27 -#define PAL_MC_RESUME 26 -#define PAL_HALT 28 -#define PAL_HALT_LIGHT 29 -#define PAL_COPY_INFO 30 -#define PAL_CACHE_LINE_INIT 31 -#define PAL_PMI_ENTRYPOINT 32 -#define PAL_ENTER_IA_32_ENV 33 -#define PAL_VM_PAGE_SIZE 34 -#define PAL_MEM_FOR_TEST 37 -#define PAL_CACHE_PROT_INFO 38 -#define PAL_REGISTER_INFO 39 -#define PAL_SHUTDOWN 40 -#define PAL_PREFETCH_VISIBILITY 41 - - -struct ia64_pal_result -{ - int64_t pal_status; - uint64_t pal_result[3]; -}; - -extern struct ia64_pal_result - ia64_call_pal_static(uint64_t proc, uint64_t arg1, - uint64_t arg2, uint64_t arg3); - -#endif /* _PAL_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/privop.h --- a/extras/mini-os/include/ia64/privop.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ - -/* - * Copyright (C) 2005 Hewlett-Packard Co - * Dan Magenheimer <dan.magenheimer@xxxxxx> - * - * Paravirtualizations of privileged operations for Xen/ia64 - * - */ - -#ifndef _PRIVOP_H_ -#define _PRIVOP_H_ - -#include <xen/arch-ia64.h> - -#define IA64_PARAVIRTUALIZED - -/* At 1 MB, before per-cpu space but still addressable using addl instead - of movl. */ -#define XSI_BASE 0xfffffffffff00000 - -/* Address of mapped regs. */ -#define XMAPPEDREGS_BASE (XSI_BASE + XSI_SIZE) - -#ifdef __ASSEMBLY__ -#define XEN_HYPER_RFI break HYPERPRIVOP_RFI -#define XEN_HYPER_RSM_PSR_DT break HYPERPRIVOP_RSM_DT -#define XEN_HYPER_SSM_PSR_DT break HYPERPRIVOP_SSM_DT -#define XEN_HYPER_COVER break HYPERPRIVOP_COVER -#define XEN_HYPER_ITC_D break HYPERPRIVOP_ITC_D -#define XEN_HYPER_ITC_I break HYPERPRIVOP_ITC_I -#define XEN_HYPER_SSM_I break HYPERPRIVOP_SSM_I -#define XEN_HYPER_GET_IVR break HYPERPRIVOP_GET_IVR -#define XEN_HYPER_GET_TPR break HYPERPRIVOP_GET_TPR -#define XEN_HYPER_SET_TPR break HYPERPRIVOP_SET_TPR -#define XEN_HYPER_EOI break HYPERPRIVOP_EOI -#define XEN_HYPER_SET_ITM break HYPERPRIVOP_SET_ITM -#define XEN_HYPER_THASH break HYPERPRIVOP_THASH -#define XEN_HYPER_PTC_GA break HYPERPRIVOP_PTC_GA -#define XEN_HYPER_ITR_D break HYPERPRIVOP_ITR_D -#define XEN_HYPER_GET_RR break HYPERPRIVOP_GET_RR -#define XEN_HYPER_SET_RR break HYPERPRIVOP_SET_RR -#define XEN_HYPER_SET_KR break HYPERPRIVOP_SET_KR -#define XEN_HYPER_FC break HYPERPRIVOP_FC -#define XEN_HYPER_GET_CPUID break HYPERPRIVOP_GET_CPUID -#define XEN_HYPER_GET_PMD break HYPERPRIVOP_GET_PMD -#define XEN_HYPER_GET_EFLAG break HYPERPRIVOP_GET_EFLAG -#define XEN_HYPER_SET_EFLAG break HYPERPRIVOP_SET_EFLAG -#define XEN_HYPER_RSM_BE break HYPERPRIVOP_RSM_BE -#define XEN_HYPER_GET_PSR break HYPERPRIVOP_GET_PSR - -#define XSI_IFS (XSI_BASE + XSI_IFS_OFS) -#define XSI_PRECOVER_IFS (XSI_BASE + XSI_PRECOVER_IFS_OFS) -#define XSI_INCOMPL_REGFR (XSI_BASE + XSI_INCOMPL_REGFR_OFS) -#define XSI_IFA (XSI_BASE + XSI_IFA_OFS) -#define XSI_ISR (XSI_BASE + XSI_ISR_OFS) -#define XSI_IIM (XSI_BASE + XSI_IIM_OFS) -#define XSI_ITIR (XSI_BASE + XSI_ITIR_OFS) -#define XSI_PSR_I_ADDR (XSI_BASE + XSI_PSR_I_ADDR_OFS) -#define XSI_PSR_IC (XSI_BASE + XSI_PSR_IC_OFS) -#define XSI_IPSR (XSI_BASE + XSI_IPSR_OFS) -#define XSI_IIP (XSI_BASE + XSI_IIP_OFS) -#define XSI_BANK1_R16 (XSI_BASE + XSI_BANK1_R16_OFS) -#define XSI_BANKNUM (XSI_BASE + XSI_BANKNUM_OFS) -#define XSI_IHA (XSI_BASE + XSI_IHA_OFS) -#endif - -#ifndef __ASSEMBLY__ -#define XEN_HYPER_SSM_I asm("break %0" : : "i" (HYPERPRIVOP_SSM_I)) -#define XEN_HYPER_GET_IVR asm("break %0" : : "i" (HYPERPRIVOP_GET_IVR)) - -/************************************************/ -/* Instructions paravirtualized for performance */ -/************************************************/ - -/* Xen uses memory-mapped virtual privileged registers for access to many - * performance-sensitive privileged registers. Some, like the processor - * status register (psr), are broken up into multiple memory locations. - * Others, like "pend", are abstractions based on privileged registers. - * "Pend" is guaranteed to be set if reading cr.ivr would return a - * (non-spurious) interrupt. */ -#define XEN_MAPPEDREGS ((struct mapped_regs *)XMAPPEDREGS_BASE) -#define XSI_PSR_I \ - (*XEN_MAPPEDREGS->interrupt_mask_addr) -#define xen_get_virtual_psr_i() \ - (!XSI_PSR_I) -#define xen_set_virtual_psr_i(_val) \ - ({ XSI_PSR_I = (uint8_t)(_val) ? 0 : 1; }) -#define xen_get_virtual_psr_ic() \ - ( XEN_MAPPEDREGS->interrupt_collection_enabled ) -#define xen_set_virtual_psr_ic(_val) \ - ({ XEN_MAPPEDREGS->interrupt_collection_enabled = _val ? 1 : 0; }) -#define xen_get_virtual_pend() (XEN_MAPPEDREGS->pending_interruption) - -#endif /* __ASSEMBLY__ */ - -#endif /* _PRIVOP_H_ */ - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/sal.h --- a/extras/mini-os/include/ia64/sal.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * The code is mostly taken from FreeBSD. - * - **************************************************************************** - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - - -/* - * The SAL System Table starts with a header which is described in - * sal_system_table_t. - * Table header will be followed by a variable number of variable length - * entries. The first byte of each entry will identify the entry type and - * the entries shall be in ascending order by the entry type. Each entry - * type will have a known fixed length. The total length of this table - * depends upon the configuration of the system. Operating system software - * must step through each entry until it reaches the ENTRY_COUNT. The entries - * are sorted on entry type in ascending order. - * Unless otherwise stated, there is one entry per entry type. - */ - -#ifndef _SAL_H_ -#define _SAL_H_ - -typedef uint64_t u_int64_t; -typedef uint32_t u_int32_t; -typedef uint16_t u_int16_t; -typedef uint8_t u_int8_t; - -struct sal_system_table { - char sal_signature[4]; -#define SAL_SIGNATURE "SST_" - uint32_t sal_length; - uint8_t sal_rev[2]; /* Byte 8 - Minor, Byte 0 - Major */ - uint16_t sal_entry_count; // num entries in var part - uint8_t sal_checksum; - uint8_t sal_reserved1[7]; - uint8_t sal_a_version[2]; // like sal_rev - uint8_t sal_b_version[2]; // like sal_rev - char sal_oem_id[32]; // Ascii - manufacturer of HW - char sal_product_id[32]; // ascii - identification - uint8_t sal_reserved2[8]; -}; - -typedef struct sal_system_table sal_system_table_t; - -#define SAL_DESC_ENTRYPOINT 0 -#define SAL_DESC_ENTRYPOINT_LENGTH 48 -#define SAL_DESC_MEMORY 1 -#define SAL_DESC_MEMORY_LENGTH 32 -#define SAL_DESC_PLATFORM 2 -#define SAL_DESC_PLATFORM_LENGT 16 -#define SAL_DESC_TR_REG 3 -#define SAL_DESC_TR_REG_LENGTH 32 -#define SAL_DESC_PURGE_TR_CACHE 4 -#define SAL_DESC_PURGE_TR_CACHE_LENGTH 16 -#define SAL_DESC_AP_WAKEUP 5 -#define SAL_DESC_AP_WAKEUP_LENGTH 16 - - -struct sal_entrypoint_descriptor -{ - uint8_t sale_type; /* == 0 */ - uint8_t sale_reserved1[7]; - uint64_t sale_pal_proc; /* PAL_PROC entry point */ - uint64_t sale_sal_proc; /* SAL_PROC entry point */ - uint64_t sale_sal_gp; /* gp for SAL_PROC, PAL_PROC */ - uint8_t sale_reserved2[16]; -}; - -struct sal_memory_descriptor -{ - uint8_t sale_type; /* == 1 */ - uint8_t sale_need_virtual; - uint8_t sale_current_attribute; - uint8_t sale_access_rights; - uint8_t sale_supported_attributes; - uint8_t sale_reserved1; - uint8_t sale_memory_type[2]; - uint64_t sale_physical_address; - uint32_t sale_length; - uint8_t sale_reserved2[12]; -}; - -struct sal_platform_descriptor -{ - uint8_t sale_type; /* == 2 */ - uint8_t sale_features; - uint8_t sale_reserved[14]; -}; - -struct sal_tr_descriptor -{ - u_int8_t sale_type; /* == 3 */ - u_int8_t sale_register_type; - u_int8_t sale_register_number; - u_int8_t sale_reserved1[5]; - u_int64_t sale_virtual_address; - u_int64_t sale_page_size; - u_int8_t sale_reserved2[8]; -}; - -struct sal_ptc_cache_descriptor -{ - uint8_t sale_type; /* == 4 */ - uint8_t sale_reserved[3]; - uint32_t sale_domains; - uint64_t sale_address; -}; - -struct sal_ap_wakeup_descriptor -{ - uint8_t sale_type; /* == 5 */ - uint8_t sale_mechanism; - uint8_t sale_reserved[6]; - uint64_t sale_vector; -}; - -/* - * SAL Procedure numbers. - */ - -#define SAL_SET_VECTORS 0x01000000 -#define SAL_GET_STATE_INFO 0x01000001 -#define SAL_GET_STATE_INFO_SIZE 0x01000002 -#define SAL_CLEAR_STATE_INFO 0x01000003 -#define SAL_MC_RENDEZ 0x01000004 -#define SAL_MC_SET_PARAMS 0x01000005 -#define SAL_REGISTER_PHYSICAL_ADDR 0x01000006 -#define SAL_CACHE_FLUSH 0x01000008 -#define SAL_CACHE_INIT 0x01000009 -#define SAL_PCI_CONFIG_READ 0x01000010 -#define SAL_PCI_CONFIG_WRITE 0x01000011 -#define SAL_FREQ_BASE 0x01000012 -#define SAL_UPDATE_PAL 0x01000020 - -/* SAL_SET_VECTORS event handler types */ -#define SAL_OS_MCA 0 -#define SAL_OS_INIT 1 -#define SAL_OS_BOOT_RENDEZ 2 - -/* SAL_GET_STATE_INFO, SAL_GET_STATE_INFO_SIZE types */ -#define SAL_INFO_MCA 0 -#define SAL_INFO_INIT 1 -#define SAL_INFO_CMC 2 -#define SAL_INFO_CPE 3 -#define SAL_INFO_TYPES 4 /* number of types we know about */ - -struct ia64_sal_result -{ - int64_t sal_status; - uint64_t sal_result[3]; -}; -typedef struct ia64_sal_result ia64_sal_result_t; - -typedef ia64_sal_result_t sal_entry_t - ( uint64_t, uint64_t, uint64_t, uint64_t, - uint64_t, uint64_t, uint64_t, uint64_t - ); - -extern ia64_sal_result_t ia64_sal_call(uint64_t, uint64_t, uint64_t, uint64_t, - uint64_t, uint64_t, uint64_t, uint64_t); - -extern void ia64_sal_init(sal_system_table_t *saltab); - -#endif /* _SAL_H_ */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/ia64/traps.h --- a/extras/mini-os/include/ia64/traps.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Done by Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx> - * - **************************************************************************** - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#if !defined(_TRAPS_H_) -#define _TRAPS_H_ - -#if !defined(__ASSEMBLY__) - -/* See ia64_cpu.h */ -struct trap_frame; - -#define pt_regs trap_frame - -/* - * A dummy function, which is currently not supported. - */ -inline static void trap_init(void) -{ - //printk("trap_init() until now not needed!\n"); -} -inline static void trap_fini(void) -{ - //printk("trap_fini() until now not needed!\n"); -} - - -#endif /* !defined(__ASSEMBLY__) */ - -#include "ia64_cpu.h" - -void stack_walk(void); - -#endif /* !defined(_TRAPS_H_) */ - diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/mm.h --- a/extras/mini-os/include/mm.h Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/include/mm.h Wed Sep 12 17:55:27 2012 +0100 @@ -29,8 +29,6 @@ #include <xen/arch-x86_32.h> #elif defined(__x86_64__) #include <xen/arch-x86_64.h> -#elif defined(__ia64__) -#include <xen/arch-ia64.h> #else #error "Unsupported architecture" #endif diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/posix/limits.h --- a/extras/mini-os/include/posix/limits.h Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/include/posix/limits.h Wed Sep 12 17:55:27 2012 +0100 @@ -25,7 +25,7 @@ #define SHRT_MAX 0x7fff #define USHRT_MAX 0xffff -#if defined(__x86_64__) || defined(__ia64__) +#if defined(__x86_64__) # define LONG_MAX 0x7fffffffffffffffL # define ULONG_MAX 0xffffffffffffffffUL #else diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/sched.h --- a/extras/mini-os/include/sched.h Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/include/sched.h Wed Sep 12 17:55:27 2012 +0100 @@ -12,13 +12,9 @@ struct thread { char *name; char *stack; -#if !defined(__ia64__) /* keep in that order */ unsigned long sp; /* Stack pointer */ unsigned long ip; /* Instruction pointer */ -#else /* !defined(__ia64__) */ - thread_regs_t regs; -#endif /* !defined(__ia64__) */ MINIOS_TAILQ_ENTRY(struct thread) thread_list; uint32_t flags; s_time_t wakeup_time; diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/include/types.h --- a/extras/mini-os/include/types.h Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/include/types.h Wed Sep 12 17:55:27 2012 +0100 @@ -33,7 +33,7 @@ typedef unsigned long long u_quad_t; typedef struct { unsigned long pte_low, pte_high; } pte_t; -#elif defined(__x86_64__) || defined(__ia64__) +#elif defined(__x86_64__) typedef long quad_t; typedef unsigned long u_quad_t; @@ -54,7 +54,7 @@ typedef struct { unsigned long pte; } pt #ifdef __i386__ typedef unsigned int uintptr_t; typedef int intptr_t; -#elif defined(__x86_64__) || defined(__ia64__) +#elif defined(__x86_64__) typedef unsigned long uintptr_t; typedef long intptr_t; #endif /* __i386__ || __x86_64__ */ @@ -67,7 +67,7 @@ typedef signed int int32_t; #ifdef __i386__ typedef signed long long int64_t; typedef unsigned long long uint64_t; -#elif defined(__x86_64__) || defined(__ia64__) +#elif defined(__x86_64__) typedef signed long int64_t; typedef unsigned long uint64_t; #endif diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/lib/math.c --- a/extras/mini-os/lib/math.c Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/lib/math.c Wed Sep 12 17:55:27 2012 +0100 @@ -50,10 +50,6 @@ #include <mini-os/lib.h> #include <mini-os/time.h> - /* On ia64 these functions lead to crashes. These are replaced by - * assembler functions. */ -#if !defined(__ia64__) - /* XXX RN: Yuck hardcoded endianess :) */ #define _QUAD_HIGHWORD 1 #define _QUAD_LOWWORD 0 @@ -428,7 +424,6 @@ __moddi3(quad_t a, quad_t b) (void)__qdivrem(ua, ub, &ur); return (neg ? -ur : ur); } -#endif /* !defined(__ia64__) */ #ifndef HAVE_LIBC /* Should be random enough for our uses */ diff -r a1bd69b08e9e -r 485e6db28b93 extras/mini-os/mm.c --- a/extras/mini-os/mm.c Wed Sep 12 16:12:42 2012 +0100 +++ b/extras/mini-os/mm.c Wed Sep 12 17:55:27 2012 +0100 @@ -361,7 +361,6 @@ void free_pages(void *pointer, int order } -#ifndef __ia64__ int free_physical_pages(xen_pfn_t *mfns, int n) { struct xen_memory_reservation reservation; @@ -372,7 +371,6 @@ int free_physical_pages(xen_pfn_t *mfns, reservation.domid = DOMID_SELF; return HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation); } -#endif #ifdef HAVE_LIBC void *sbrk(ptrdiff_t increment) diff -r a1bd69b08e9e -r 485e6db28b93 tools/debugger/xenitp/Makefile --- a/tools/debugger/xenitp/Makefile Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -XEN_ROOT=$(CURDIR)/../../.. -include $(XEN_ROOT)/tools/Rules.mk - -#CFLAGS += -Werror -g -O0 - -CFLAGS += $(CFLAGS_libxenctrl) - -LIBBIN = - -ifeq ($(XEN_TARGET_ARCH),ia64) -LIBBIN += xenitp -endif - -.PHONY: all -all: build - -.PHONY: build -build: $(LIBBIN) - -.PHONY: install -install: build - [ -z "$(LIBBIN)" ] || $(INSTALL_DIR) $(DESTDIR)$(PRIVATE_BINDIR) - [ -z "$(LIBBIN)" ] || $(INSTALL_PROG) $(LIBBIN) $(DESTDIR)$(PRIVATE_BINDIR) - -.PHONY: clean -clean: - $(RM) *.a *.so *.o *.rpm $(LIBBIN) - -XENITP_OBJS=xenitp.o ia64-dis.o ia64-opc.o cpu-ia64-opc.o - -xenitp: $(XENITP_OBJS) - $(CC) $(CFLAGS) -o $@ $(XENITP_OBJS) $(LDLIBS_libxenctrl) diff -r a1bd69b08e9e -r 485e6db28b93 tools/debugger/xenitp/README --- a/tools/debugger/xenitp/README Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -xenitp README -************* - - -Xenitp is a low-level, non-symbolic debugger. It only works on ia64. - -* Building xenitp -First do 'make tools' at the top level to build libxc and includes. Then -cd to tools/debugger/xenitp and do make. - -* Using xenitp -Usage is: xenitp DOM -DOM is a domain number. -'help' shows all the command available. -When the domain is running, C-c stops it. - -* Source origin -All these files come from binutils: -cpu-ia64-opc.c -dis-asm.h -ia64-asmtab.c -ia64-asmtab.h -ia64-dis.c -ia64-gen.c -ia64.h -ia64-opc-a.c -ia64-opc-b.c -ia64-opc.c -ia64-opc-d.c -ia64-opc-f.c -ia64-opc.h -ia64-opc-i.c -ia64-opc-m.c -ia64-opc-x.c - -xenitp.c is based on xenctxt.c diff -r a1bd69b08e9e -r 485e6db28b93 tools/debugger/xenitp/cpu-ia64-opc.c --- a/tools/debugger/xenitp/cpu-ia64-opc.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,615 +0,0 @@ -/* Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 - Free Software Foundation, Inc. - Contributed by David Mosberger-Tang <davidm@xxxxxxxxxx> - -This file is part of BFD, the Binary File Descriptor library. - -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. */ - -/* Logically, this code should be part of libopcode but since some of - the operand insertion/extraction functions help bfd to implement - relocations, this code is included as part of cpu-ia64.c. This - avoids circular dependencies between libopcode and libbfd and also - obviates the need for applications to link in libopcode when all - they really want is libbfd. - - --davidm Mon Apr 13 22:14:02 1998 */ - -#include "ia64-opc.h" - -#define NELEMS(a) ((int) (sizeof (a) / sizeof ((a)[0]))) - -static const char* -ins_rsvd (const struct ia64_operand *self ATTRIBUTE_UNUSED, - ia64_insn value ATTRIBUTE_UNUSED, ia64_insn *code ATTRIBUTE_UNUSED) -{ - return "internal error---this shouldn't happen"; -} - -static const char* -ext_rsvd (const struct ia64_operand *self ATTRIBUTE_UNUSED, - ia64_insn code ATTRIBUTE_UNUSED, ia64_insn *valuep ATTRIBUTE_UNUSED) -{ - return "internal error---this shouldn't happen"; -} - -static const char* -ins_const (const struct ia64_operand *self ATTRIBUTE_UNUSED, - ia64_insn value ATTRIBUTE_UNUSED, ia64_insn *code ATTRIBUTE_UNUSED) -{ - return 0; -} - -static const char* -ext_const (const struct ia64_operand *self ATTRIBUTE_UNUSED, - ia64_insn code ATTRIBUTE_UNUSED, ia64_insn *valuep ATTRIBUTE_UNUSED) -{ - return 0; -} - -static const char* -ins_reg (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - if (value >= 1u << self->field[0].bits) - return "register number out of range"; - - *code |= value << self->field[0].shift; - return 0; -} - -static const char* -ext_reg (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - *valuep = ((code >> self->field[0].shift) - & ((1u << self->field[0].bits) - 1)); - return 0; -} - -static const char* -ins_immu (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - ia64_insn new = 0; - int i; - - for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) - { - new |= ((value & ((((ia64_insn) 1) << self->field[i].bits) - 1)) - << self->field[i].shift); - value >>= self->field[i].bits; - } - if (value) - return "integer operand out of range"; - - *code |= new; - return 0; -} - -static const char* -ext_immu (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - BFD_HOST_U_64_BIT value = 0; - int i, bits = 0, total = 0; - - for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) - { - bits = self->field[i].bits; - value |= ((code >> self->field[i].shift) - & ((((BFD_HOST_U_64_BIT) 1) << bits) - 1)) << total; - total += bits; - } - *valuep = value; - return 0; -} - -static const char* -ins_immu5b (const struct ia64_operand *self, ia64_insn value, - ia64_insn *code) -{ - if (value < 32 || value > 63) - return "value must be between 32 and 63"; - return ins_immu (self, value - 32, code); -} - -static const char* -ext_immu5b (const struct ia64_operand *self, ia64_insn code, - ia64_insn *valuep) -{ - const char *result; - - result = ext_immu (self, code, valuep); - if (result) - return result; - - *valuep = *valuep + 32; - return 0; -} - -static const char* -ins_immus8 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - if (value & 0x7) - return "value not an integer multiple of 8"; - return ins_immu (self, value >> 3, code); -} - -static const char* -ext_immus8 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - const char *result; - - result = ext_immu (self, code, valuep); - if (result) - return result; - - *valuep = *valuep << 3; - return 0; -} - -static const char* -ins_imms_scaled (const struct ia64_operand *self, ia64_insn value, - ia64_insn *code, int scale) -{ - BFD_HOST_64_BIT svalue = value, sign_bit = 0; - ia64_insn new = 0; - int i; - - svalue >>= scale; - - for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) - { - new |= ((svalue & ((((ia64_insn) 1) << self->field[i].bits) - 1)) - << self->field[i].shift); - sign_bit = (svalue >> (self->field[i].bits - 1)) & 1; - svalue >>= self->field[i].bits; - } - if ((!sign_bit && svalue != 0) || (sign_bit && svalue != -1)) - return "integer operand out of range"; - - *code |= new; - return 0; -} - -static const char* -ext_imms_scaled (const struct ia64_operand *self, ia64_insn code, - ia64_insn *valuep, int scale) -{ - int i, bits = 0, total = 0; - BFD_HOST_64_BIT val = 0, sign; - - for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) - { - bits = self->field[i].bits; - val |= ((code >> self->field[i].shift) - & ((((BFD_HOST_U_64_BIT) 1) << bits) - 1)) << total; - total += bits; - } - /* sign extend: */ - sign = (BFD_HOST_64_BIT) 1 << (total - 1); - val = (val ^ sign) - sign; - - *valuep = (val << scale); - return 0; -} - -static const char* -ins_imms (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - return ins_imms_scaled (self, value, code, 0); -} - -static const char* -ins_immsu4 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - value = ((value & 0xffffffff) ^ 0x80000000) - 0x80000000; - - return ins_imms_scaled (self, value, code, 0); -} - -static const char* -ext_imms (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - return ext_imms_scaled (self, code, valuep, 0); -} - -static const char* -ins_immsm1 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - --value; - return ins_imms_scaled (self, value, code, 0); -} - -static const char* -ins_immsm1u4 (const struct ia64_operand *self, ia64_insn value, - ia64_insn *code) -{ - value = ((value & 0xffffffff) ^ 0x80000000) - 0x80000000; - - --value; - return ins_imms_scaled (self, value, code, 0); -} - -static const char* -ext_immsm1 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - const char *res = ext_imms_scaled (self, code, valuep, 0); - - ++*valuep; - return res; -} - -static const char* -ins_imms1 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - return ins_imms_scaled (self, value, code, 1); -} - -static const char* -ext_imms1 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - return ext_imms_scaled (self, code, valuep, 1); -} - -static const char* -ins_imms4 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - return ins_imms_scaled (self, value, code, 4); -} - -static const char* -ext_imms4 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - return ext_imms_scaled (self, code, valuep, 4); -} - -static const char* -ins_imms16 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - return ins_imms_scaled (self, value, code, 16); -} - -static const char* -ext_imms16 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - return ext_imms_scaled (self, code, valuep, 16); -} - -static const char* -ins_cimmu (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - ia64_insn mask = (((ia64_insn) 1) << self->field[0].bits) - 1; - return ins_immu (self, value ^ mask, code); -} - -static const char* -ext_cimmu (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - const char *result; - ia64_insn mask; - - mask = (((ia64_insn) 1) << self->field[0].bits) - 1; - result = ext_immu (self, code, valuep); - if (!result) - { - mask = (((ia64_insn) 1) << self->field[0].bits) - 1; - *valuep ^= mask; - } - return result; -} - -static const char* -ins_cnt (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - --value; - if (value >= ((BFD_HOST_U_64_BIT) 1) << self->field[0].bits) - return "count out of range"; - - *code |= value << self->field[0].shift; - return 0; -} - -static const char* -ext_cnt (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - *valuep = ((code >> self->field[0].shift) - & ((((BFD_HOST_U_64_BIT) 1) << self->field[0].bits) - 1)) + 1; - return 0; -} - -static const char* -ins_cnt2b (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - --value; - - if (value > 2) - return "count must be in range 1..3"; - - *code |= value << self->field[0].shift; - return 0; -} - -static const char* -ext_cnt2b (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - *valuep = ((code >> self->field[0].shift) & 0x3) + 1; - return 0; -} - -static const char* -ins_cnt2c (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - switch (value) - { - case 0: value = 0; break; - case 7: value = 1; break; - case 15: value = 2; break; - case 16: value = 3; break; - default: return "count must be 0, 7, 15, or 16"; - } - *code |= value << self->field[0].shift; - return 0; -} - -static const char* -ext_cnt2c (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - ia64_insn value; - - value = (code >> self->field[0].shift) & 0x3; - switch (value) - { - case 0: value = 0; break; - case 1: value = 7; break; - case 2: value = 15; break; - case 3: value = 16; break; - } - *valuep = value; - return 0; -} - -static const char* -ins_inc3 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) -{ - BFD_HOST_64_BIT val = value; - BFD_HOST_U_64_BIT sign = 0; - - if (val < 0) - { - sign = 0x4; - value = -value; - } - switch (value) - { - case 1: value = 3; break; - case 4: value = 2; break; - case 8: value = 1; break; - case 16: value = 0; break; - default: return "count must be +/- 1, 4, 8, or 16"; - } - *code |= (sign | value) << self->field[0].shift; - return 0; -} - -static const char* -ext_inc3 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) -{ - BFD_HOST_64_BIT val; - int negate; - - val = (code >> self->field[0].shift) & 0x7; - negate = val & 0x4; - switch (val & 0x3) - { - case 0: val = 16; break; - case 1: val = 8; break; - case 2: val = 4; break; - case 3: val = 1; break; - } - if (negate) - val = -val; - - *valuep = val; - return 0; -} - -#define CST IA64_OPND_CLASS_CST -#define REG IA64_OPND_CLASS_REG -#define IND IA64_OPND_CLASS_IND -#define ABS IA64_OPND_CLASS_ABS -#define REL IA64_OPND_CLASS_REL - -#define SDEC IA64_OPND_FLAG_DECIMAL_SIGNED -#define UDEC IA64_OPND_FLAG_DECIMAL_UNSIGNED - -const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT] = - { - /* constants: */ - { CST, ins_const, ext_const, "NIL", {{ 0, 0}}, 0, "<none>" }, - { CST, ins_const, ext_const, "ar.csd", {{ 0, 0}}, 0, "ar.csd" }, - { CST, ins_const, ext_const, "ar.ccv", {{ 0, 0}}, 0, "ar.ccv" }, - { CST, ins_const, ext_const, "ar.pfs", {{ 0, 0}}, 0, "ar.pfs" }, - { CST, ins_const, ext_const, "1", {{ 0, 0}}, 0, "1" }, - { CST, ins_const, ext_const, "8", {{ 0, 0}}, 0, "8" }, - { CST, ins_const, ext_const, "16", {{ 0, 0}}, 0, "16" }, - { CST, ins_const, ext_const, "r0", {{ 0, 0}}, 0, "r0" }, - { CST, ins_const, ext_const, "ip", {{ 0, 0}}, 0, "ip" }, - { CST, ins_const, ext_const, "pr", {{ 0, 0}}, 0, "pr" }, - { CST, ins_const, ext_const, "pr.rot", {{ 0, 0}}, 0, "pr.rot" }, - { CST, ins_const, ext_const, "psr", {{ 0, 0}}, 0, "psr" }, - { CST, ins_const, ext_const, "psr.l", {{ 0, 0}}, 0, "psr.l" }, - { CST, ins_const, ext_const, "psr.um", {{ 0, 0}}, 0, "psr.um" }, - - /* register operands: */ - { REG, ins_reg, ext_reg, "ar", {{ 7, 20}}, 0, /* AR3 */ - "an application register" }, - { REG, ins_reg, ext_reg, "b", {{ 3, 6}}, 0, /* B1 */ - "a branch register" }, - { REG, ins_reg, ext_reg, "b", {{ 3, 13}}, 0, /* B2 */ - "a branch register"}, - { REG, ins_reg, ext_reg, "cr", {{ 7, 20}}, 0, /* CR */ - "a control register"}, - { REG, ins_reg, ext_reg, "f", {{ 7, 6}}, 0, /* F1 */ - "a floating-point register" }, - { REG, ins_reg, ext_reg, "f", {{ 7, 13}}, 0, /* F2 */ - "a floating-point register" }, - { REG, ins_reg, ext_reg, "f", {{ 7, 20}}, 0, /* F3 */ - "a floating-point register" }, - { REG, ins_reg, ext_reg, "f", {{ 7, 27}}, 0, /* F4 */ - "a floating-point register" }, - { REG, ins_reg, ext_reg, "p", {{ 6, 6}}, 0, /* P1 */ - "a predicate register" }, - { REG, ins_reg, ext_reg, "p", {{ 6, 27}}, 0, /* P2 */ - "a predicate register" }, - { REG, ins_reg, ext_reg, "r", {{ 7, 6}}, 0, /* R1 */ - "a general register" }, - { REG, ins_reg, ext_reg, "r", {{ 7, 13}}, 0, /* R2 */ - "a general register" }, - { REG, ins_reg, ext_reg, "r", {{ 7, 20}}, 0, /* R3 */ - "a general register" }, - { REG, ins_reg, ext_reg, "r", {{ 2, 20}}, 0, /* R3_2 */ - "a general register r0-r3" }, - - /* memory operands: */ - { IND, ins_reg, ext_reg, "", {{7, 20}}, 0, /* MR3 */ - "a memory address" }, - - /* indirect operands: */ - { IND, ins_reg, ext_reg, "cpuid", {{7, 20}}, 0, /* CPUID_R3 */ - "a cpuid register" }, - { IND, ins_reg, ext_reg, "dbr", {{7, 20}}, 0, /* DBR_R3 */ - "a dbr register" }, - { IND, ins_reg, ext_reg, "dtr", {{7, 20}}, 0, /* DTR_R3 */ - "a dtr register" }, - { IND, ins_reg, ext_reg, "itr", {{7, 20}}, 0, /* ITR_R3 */ - "an itr register" }, - { IND, ins_reg, ext_reg, "ibr", {{7, 20}}, 0, /* IBR_R3 */ - "an ibr register" }, - { IND, ins_reg, ext_reg, "msr", {{7, 20}}, 0, /* MSR_R3 */ - "an msr register" }, - { IND, ins_reg, ext_reg, "pkr", {{7, 20}}, 0, /* PKR_R3 */ - "a pkr register" }, - { IND, ins_reg, ext_reg, "pmc", {{7, 20}}, 0, /* PMC_R3 */ - "a pmc register" }, - { IND, ins_reg, ext_reg, "pmd", {{7, 20}}, 0, /* PMD_R3 */ - "a pmd register" }, - { IND, ins_reg, ext_reg, "rr", {{7, 20}}, 0, /* RR_R3 */ - "an rr register" }, - - /* immediate operands: */ - { ABS, ins_cimmu, ext_cimmu, 0, {{ 5, 20 }}, UDEC, /* CCNT5 */ - "a 5-bit count (0-31)" }, - { ABS, ins_cnt, ext_cnt, 0, {{ 2, 27 }}, UDEC, /* CNT2a */ - "a 2-bit count (1-4)" }, - { ABS, ins_cnt2b, ext_cnt2b, 0, {{ 2, 27 }}, UDEC, /* CNT2b */ - "a 2-bit count (1-3)" }, - { ABS, ins_cnt2c, ext_cnt2c, 0, {{ 2, 30 }}, UDEC, /* CNT2c */ - "a count (0, 7, 15, or 16)" }, - { ABS, ins_immu, ext_immu, 0, {{ 5, 14}}, UDEC, /* CNT5 */ - "a 5-bit count (0-31)" }, - { ABS, ins_immu, ext_immu, 0, {{ 6, 27}}, UDEC, /* CNT6 */ - "a 6-bit count (0-63)" }, - { ABS, ins_cimmu, ext_cimmu, 0, {{ 6, 20}}, UDEC, /* CPOS6a */ - "a 6-bit bit pos (0-63)" }, - { ABS, ins_cimmu, ext_cimmu, 0, {{ 6, 14}}, UDEC, /* CPOS6b */ - "a 6-bit bit pos (0-63)" }, - { ABS, ins_cimmu, ext_cimmu, 0, {{ 6, 31}}, UDEC, /* CPOS6c */ - "a 6-bit bit pos (0-63)" }, - { ABS, ins_imms, ext_imms, 0, {{ 1, 36}}, SDEC, /* IMM1 */ - "a 1-bit integer (-1, 0)" }, - { ABS, ins_immu, ext_immu, 0, {{ 2, 13}}, UDEC, /* IMMU2 */ - "a 2-bit unsigned (0-3)" }, - { ABS, ins_immu5b, ext_immu5b, 0, {{ 5, 14}}, UDEC, /* IMMU5b */ - "a 5-bit unsigned (32 + (0-31))" }, - { ABS, ins_immu, ext_immu, 0, {{ 7, 13}}, 0, /* IMMU7a */ - "a 7-bit unsigned (0-127)" }, - { ABS, ins_immu, ext_immu, 0, {{ 7, 20}}, 0, /* IMMU7b */ - "a 7-bit unsigned (0-127)" }, - { ABS, ins_immu, ext_immu, 0, {{ 7, 13}}, UDEC, /* SOF */ - "a frame size (register count)" }, - { ABS, ins_immu, ext_immu, 0, {{ 7, 20}}, UDEC, /* SOL */ - "a local register count" }, - { ABS, ins_immus8,ext_immus8,0, {{ 4, 27}}, UDEC, /* SOR */ - "a rotating register count (integer multiple of 8)" }, - { ABS, ins_imms, ext_imms, 0, /* IMM8 */ - {{ 7, 13}, { 1, 36}}, SDEC, - "an 8-bit integer (-128-127)" }, - { ABS, ins_immsu4, ext_imms, 0, /* IMM8U4 */ - {{ 7, 13}, { 1, 36}}, SDEC, - "an 8-bit signed integer for 32-bit unsigned compare (-128-127)" }, - { ABS, ins_immsm1, ext_immsm1, 0, /* IMM8M1 */ - {{ 7, 13}, { 1, 36}}, SDEC, - "an 8-bit integer (-127-128)" }, - { ABS, ins_immsm1u4, ext_immsm1, 0, /* IMM8M1U4 */ - {{ 7, 13}, { 1, 36}}, SDEC, - "an 8-bit integer for 32-bit unsigned compare (-127-(-1),1-128,0x100000000)" }, - { ABS, ins_immsm1, ext_immsm1, 0, /* IMM8M1U8 */ - {{ 7, 13}, { 1, 36}}, SDEC, - "an 8-bit integer for 64-bit unsigned compare (-127-(-1),1-128,0x10000000000000000)" }, - { ABS, ins_immu, ext_immu, 0, {{ 2, 33}, { 7, 20}}, 0, /* IMMU9 */ - "a 9-bit unsigned (0-511)" }, - { ABS, ins_imms, ext_imms, 0, /* IMM9a */ - {{ 7, 6}, { 1, 27}, { 1, 36}}, SDEC, - "a 9-bit integer (-256-255)" }, - { ABS, ins_imms, ext_imms, 0, /* IMM9b */ - {{ 7, 13}, { 1, 27}, { 1, 36}}, SDEC, - "a 9-bit integer (-256-255)" }, - { ABS, ins_imms, ext_imms, 0, /* IMM14 */ - {{ 7, 13}, { 6, 27}, { 1, 36}}, SDEC, - "a 14-bit integer (-8192-8191)" }, - { ABS, ins_imms1, ext_imms1, 0, /* IMM17 */ - {{ 7, 6}, { 8, 24}, { 1, 36}}, 0, - "a 17-bit integer (-65536-65535)" }, - { ABS, ins_immu, ext_immu, 0, {{20, 6}, { 1, 36}}, 0, /* IMMU21 */ - "a 21-bit unsigned" }, - { ABS, ins_imms, ext_imms, 0, /* IMM22 */ - {{ 7, 13}, { 9, 27}, { 5, 22}, { 1, 36}}, SDEC, - "a 22-bit signed integer" }, - { ABS, ins_immu, ext_immu, 0, /* IMMU24 */ - {{21, 6}, { 2, 31}, { 1, 36}}, 0, - "a 24-bit unsigned" }, - { ABS, ins_imms16,ext_imms16,0, {{27, 6}, { 1, 36}}, 0, /* IMM44 */ - "a 44-bit unsigned (least 16 bits ignored/zeroes)" }, - { ABS, ins_rsvd, ext_rsvd, 0, {{0, 0}}, 0, /* IMMU62 */ - "a 62-bit unsigned" }, - { ABS, ins_rsvd, ext_rsvd, 0, {{0, 0}}, 0, /* IMMU64 */ - "a 64-bit unsigned" }, - { ABS, ins_inc3, ext_inc3, 0, {{ 3, 13}}, SDEC, /* INC3 */ - "an increment (+/- 1, 4, 8, or 16)" }, - { ABS, ins_cnt, ext_cnt, 0, {{ 4, 27}}, UDEC, /* LEN4 */ - "a 4-bit length (1-16)" }, - { ABS, ins_cnt, ext_cnt, 0, {{ 6, 27}}, UDEC, /* LEN6 */ - "a 6-bit length (1-64)" }, - { ABS, ins_immu, ext_immu, 0, {{ 4, 20}}, 0, /* MBTYPE4 */ - "a mix type (@rev, @mix, @shuf, @alt, or @brcst)" }, - { ABS, ins_immu, ext_immu, 0, {{ 8, 20}}, 0, /* MBTYPE8 */ - "an 8-bit mix type" }, - { ABS, ins_immu, ext_immu, 0, {{ 6, 14}}, UDEC, /* POS6 */ - "a 6-bit bit pos (0-63)" }, - { REL, ins_imms4, ext_imms4, 0, {{ 7, 6}, { 2, 33}}, 0, /* TAG13 */ - "a branch tag" }, - { REL, ins_imms4, ext_imms4, 0, {{ 9, 24}}, 0, /* TAG13b */ - "a branch tag" }, - { REL, ins_imms4, ext_imms4, 0, {{20, 6}, { 1, 36}}, 0, /* TGT25 */ - "a branch target" }, - { REL, ins_imms4, ext_imms4, 0, /* TGT25b */ - {{ 7, 6}, {13, 20}, { 1, 36}}, 0, - "a branch target" }, - { REL, ins_imms4, ext_imms4, 0, {{20, 13}, { 1, 36}}, 0, /* TGT25c */ - "a branch target" }, - { REL, ins_rsvd, ext_rsvd, 0, {{0, 0}}, 0, /* TGT64 */ - "a branch target" }, - - { ABS, ins_const, ext_const, 0, {{0, 0}}, 0, /* LDXMOV */ - "ldxmov target" }, - }; diff -r a1bd69b08e9e -r 485e6db28b93 tools/debugger/xenitp/dis-asm.h --- a/tools/debugger/xenitp/dis-asm.h Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,548 +0,0 @@ -/* Interface between the opcode library and its callers. - - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - 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, 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. - - Written by Cygnus Support, 1993. - - The opcode library (libopcodes.a) provides instruction decoders for - a large variety of instruction sets, callable with an identical - interface, for making instruction-processing programs more independent - of the instruction set being processed. */ - -#ifndef DIS_ASM_H -#define DIS_ASM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <inttypes.h> - -#define PARAMS(x) x -typedef void *PTR; -typedef uint64_t bfd_vma; -typedef int64_t bfd_signed_vma; -typedef uint8_t bfd_byte; -typedef int bfd_boolean; -#define BFD_HOST_U_64_BIT unsigned long -#define BFD_HOST_64_BIT long -#define sprintf_vma(s,x) sprintf (s, "%0" PRIx64, x) - -extern unsigned long bfd_getl64 (const bfd_byte *addr); - -#define BFD64 -#define ATTRIBUTE_FPTR_PRINTF_2 -#define ATTRIBUTE_UNUSED __attribute__((unused)) - -enum bfd_flavour { - bfd_target_unknown_flavour, - bfd_target_aout_flavour, - bfd_target_coff_flavour, - bfd_target_ecoff_flavour, - bfd_target_elf_flavour, - bfd_target_ieee_flavour, - bfd_target_nlm_flavour, - bfd_target_oasys_flavour, - bfd_target_tekhex_flavour, - bfd_target_srec_flavour, - bfd_target_ihex_flavour, - bfd_target_som_flavour, - bfd_target_os9k_flavour, - bfd_target_versados_flavour, - bfd_target_msdos_flavour, - bfd_target_evax_flavour -}; - -enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; - -enum bfd_architecture -{ - bfd_arch_unknown, /* File arch not known */ - bfd_arch_obscure, /* Arch known, not one of these */ - bfd_arch_m68k, /* Motorola 68xxx */ -#define bfd_mach_m68000 1 -#define bfd_mach_m68008 2 -#define bfd_mach_m68010 3 -#define bfd_mach_m68020 4 -#define bfd_mach_m68030 5 -#define bfd_mach_m68040 6 -#define bfd_mach_m68060 7 -#define bfd_mach_cpu32 8 -#define bfd_mach_mcf5200 9 -#define bfd_mach_mcf5206e 10 -#define bfd_mach_mcf5307 11 -#define bfd_mach_mcf5407 12 -#define bfd_mach_mcf528x 13 -#define bfd_mach_mcfv4e 14 -#define bfd_mach_mcf521x 15 -#define bfd_mach_mcf5249 16 -#define bfd_mach_mcf547x 17 -#define bfd_mach_mcf548x 18 - bfd_arch_vax, /* DEC Vax */ - bfd_arch_i960, /* Intel 960 */ - /* The order of the following is important. - lower number indicates a machine type that - only accepts a subset of the instructions - available to machines with higher numbers. - The exception is the "ca", which is - incompatible with all other machines except - "core". */ - -#define bfd_mach_i960_core 1 -#define bfd_mach_i960_ka_sa 2 -#define bfd_mach_i960_kb_sb 3 -#define bfd_mach_i960_mc 4 -#define bfd_mach_i960_xa 5 -#define bfd_mach_i960_ca 6 -#define bfd_mach_i960_jx 7 -#define bfd_mach_i960_hx 8 - - bfd_arch_a29k, /* AMD 29000 */ - bfd_arch_sparc, /* SPARC */ -#define bfd_mach_sparc 1 -/* The difference between v8plus and v9 is that v9 is a true 64 bit env. */ -#define bfd_mach_sparc_sparclet 2 -#define bfd_mach_sparc_sparclite 3 -#define bfd_mach_sparc_v8plus 4 -#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */ -#define bfd_mach_sparc_sparclite_le 6 -#define bfd_mach_sparc_v9 7 -#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ -#define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ -#define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ -/* Nonzero if MACH has the v9 instruction set. */ -#define bfd_mach_sparc_v9_p(mach) \ - ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ - && (mach) != bfd_mach_sparc_sparclite_le) - bfd_arch_mips, /* MIPS Rxxxx */ -#define bfd_mach_mips3000 3000 -#define bfd_mach_mips3900 3900 -#define bfd_mach_mips4000 4000 -#define bfd_mach_mips4010 4010 -#define bfd_mach_mips4100 4100 -#define bfd_mach_mips4300 4300 -#define bfd_mach_mips4400 4400 -#define bfd_mach_mips4600 4600 -#define bfd_mach_mips4650 4650 -#define bfd_mach_mips5000 5000 -#define bfd_mach_mips6000 6000 -#define bfd_mach_mips8000 8000 -#define bfd_mach_mips10000 10000 -#define bfd_mach_mips16 16 - bfd_arch_i386, /* Intel 386 */ -#define bfd_mach_i386_i386 0 -#define bfd_mach_i386_i8086 1 -#define bfd_mach_i386_i386_intel_syntax 2 -#define bfd_mach_x86_64 3 -#define bfd_mach_x86_64_intel_syntax 4 - bfd_arch_we32k, /* AT&T WE32xxx */ - bfd_arch_tahoe, /* CCI/Harris Tahoe */ - bfd_arch_i860, /* Intel 860 */ - bfd_arch_romp, /* IBM ROMP PC/RT */ - bfd_arch_alliant, /* Alliant */ - bfd_arch_convex, /* Convex */ - bfd_arch_m88k, /* Motorola 88xxx */ - bfd_arch_pyramid, /* Pyramid Technology */ - bfd_arch_h8300, /* Hitachi H8/300 */ -#define bfd_mach_h8300 1 -#define bfd_mach_h8300h 2 -#define bfd_mach_h8300s 3 - bfd_arch_powerpc, /* PowerPC */ -#define bfd_mach_ppc 0 -#define bfd_mach_ppc64 1 -#define bfd_mach_ppc_403 403 -#define bfd_mach_ppc_403gc 4030 -#define bfd_mach_ppc_505 505 -#define bfd_mach_ppc_601 601 -#define bfd_mach_ppc_602 602 -#define bfd_mach_ppc_603 603 -#define bfd_mach_ppc_ec603e 6031 -#define bfd_mach_ppc_604 604 -#define bfd_mach_ppc_620 620 -#define bfd_mach_ppc_630 630 -#define bfd_mach_ppc_750 750 -#define bfd_mach_ppc_860 860 -#define bfd_mach_ppc_a35 35 -#define bfd_mach_ppc_rs64ii 642 -#define bfd_mach_ppc_rs64iii 643 -#define bfd_mach_ppc_7400 7400 - bfd_arch_rs6000, /* IBM RS/6000 */ - bfd_arch_hppa, /* HP PA RISC */ - bfd_arch_d10v, /* Mitsubishi D10V */ - bfd_arch_z8k, /* Zilog Z8000 */ -#define bfd_mach_z8001 1 -#define bfd_mach_z8002 2 - bfd_arch_h8500, /* Hitachi H8/500 */ - bfd_arch_sh, /* Hitachi SH */ -#define bfd_mach_sh 1 -#define bfd_mach_sh2 0x20 -#define bfd_mach_sh_dsp 0x2d -#define bfd_mach_sh2a 0x2a -#define bfd_mach_sh2a_nofpu 0x2b -#define bfd_mach_sh2e 0x2e -#define bfd_mach_sh3 0x30 -#define bfd_mach_sh3_nommu 0x31 -#define bfd_mach_sh3_dsp 0x3d -#define bfd_mach_sh3e 0x3e -#define bfd_mach_sh4 0x40 -#define bfd_mach_sh4_nofpu 0x41 -#define bfd_mach_sh4_nommu_nofpu 0x42 -#define bfd_mach_sh4a 0x4a -#define bfd_mach_sh4a_nofpu 0x4b -#define bfd_mach_sh4al_dsp 0x4d -#define bfd_mach_sh5 0x50 - bfd_arch_alpha, /* Dec Alpha */ -#define bfd_mach_alpha 1 - bfd_arch_arm, /* Advanced Risc Machines ARM */ -#define bfd_mach_arm_2 1 -#define bfd_mach_arm_2a 2 -#define bfd_mach_arm_3 3 -#define bfd_mach_arm_3M 4 -#define bfd_mach_arm_4 5 -#define bfd_mach_arm_4T 6 - bfd_arch_ns32k, /* National Semiconductors ns32000 */ - bfd_arch_w65, /* WDC 65816 */ - bfd_arch_tic30, /* Texas Instruments TMS320C30 */ - bfd_arch_v850, /* NEC V850 */ -#define bfd_mach_v850 0 - bfd_arch_arc, /* Argonaut RISC Core */ -#define bfd_mach_arc_base 0 - bfd_arch_m32r, /* Mitsubishi M32R/D */ -#define bfd_mach_m32r 0 /* backwards compatibility */ - bfd_arch_mn10200, /* Matsushita MN10200 */ - bfd_arch_mn10300, /* Matsushita MN10300 */ - bfd_arch_last - }; - -typedef struct symbol_cache_entry -{ - const char *name; - union - { - PTR p; - bfd_vma i; - } udata; -} asymbol; - -typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2; - -enum dis_insn_type { - dis_noninsn, /* Not a valid instruction */ - dis_nonbranch, /* Not a branch instruction */ - dis_branch, /* Unconditional branch */ - dis_condbranch, /* Conditional branch */ - dis_jsr, /* Jump to subroutine */ - dis_condjsr, /* Conditional jump to subroutine */ - dis_dref, /* Data reference instruction */ - dis_dref2 /* Two data references in instruction */ -}; - -/* This struct is passed into the instruction decoding routine, - and is passed back out into each callback. The various fields are used - for conveying information from your main routine into your callbacks, - for passing information into the instruction decoders (such as the - addresses of the callback functions), or for passing information - back from the instruction decoders to their callers. - - It must be initialized before it is first passed; this can be done - by hand, or using one of the initialization macros below. */ - -typedef struct disassemble_info { - fprintf_ftype fprintf_func; - void *stream; - void *application_data; - - /* Target description. We could replace this with a pointer to the bfd, - but that would require one. There currently isn't any such requirement - so to avoid introducing one we record these explicitly. */ - /* The bfd_flavour. This can be bfd_target_unknown_flavour. */ - enum bfd_flavour flavour; - /* The bfd_arch value. */ - enum bfd_architecture arch; - /* The bfd_mach value. */ - unsigned long mach; - /* Endianness (for bi-endian cpus). Mono-endian cpus can ignore this. */ - enum bfd_endian endian; - /* An arch/mach-specific bitmask of selected instruction subsets, mainly - for processors with run-time-switchable instruction sets. The default, - zero, means that there is no constraint. CGEN-based opcodes ports - may use ISA_foo masks. */ - void *insn_sets; - - /* Some targets need information about the current section to accurately - display insns. If this is NULL, the target disassembler function - will have to make its best guess. */ - //asection *section; - - /* An array of pointers to symbols either at the location being disassembled - or at the start of the function being disassembled. The array is sorted - so that the first symbol is intended to be the one used. The others are - present for any misc. purposes. This is not set reliably, but if it is - not NULL, it is correct. */ - asymbol **symbols; - /* Number of symbols in array. */ - int num_symbols; - - /* For use by the disassembler. - The top 16 bits are reserved for public use (and are documented here). - The bottom 16 bits are for the internal use of the disassembler. */ - unsigned long flags; -#define INSN_HAS_RELOC 0x80000000 - void *private_data; - - /* Function used to get bytes to disassemble. MEMADDR is the - address of the stuff to be disassembled, MYADDR is the address to - put the bytes in, and LENGTH is the number of bytes to read. - INFO is a pointer to this struct. - Returns an errno value or 0 for success. */ - int (*read_memory_func) - (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, - struct disassemble_info *info); - - /* Function which should be called if we get an error that we can't - recover from. STATUS is the errno value from read_memory_func and - MEMADDR is the address that we were trying to read. INFO is a - pointer to this struct. */ - void (*memory_error_func) - (int status, bfd_vma memaddr, struct disassemble_info *info); - - /* Function called to print ADDR. */ - void (*print_address_func) - (bfd_vma addr, struct disassemble_info *info); - - /* Function called to determine if there is a symbol at the given ADDR. - If there is, the function returns 1, otherwise it returns 0. - This is used by ports which support an overlay manager where - the overlay number is held in the top part of an address. In - some circumstances we want to include the overlay number in the - address, (normally because there is a symbol associated with - that address), but sometimes we want to mask out the overlay bits. */ - int (* symbol_at_address_func) - (bfd_vma addr, struct disassemble_info * info); - - /* Function called to check if a SYMBOL is can be displayed to the user. - This is used by some ports that want to hide special symbols when - displaying debugging outout. */ - bfd_boolean (* symbol_is_valid) - (asymbol *, struct disassemble_info * info); - - /* These are for buffer_read_memory. */ - bfd_byte *buffer; - bfd_vma buffer_vma; - unsigned int buffer_length; - - /* This variable may be set by the instruction decoder. It suggests - the number of bytes objdump should display on a single line. If - the instruction decoder sets this, it should always set it to - the same value in order to get reasonable looking output. */ - int bytes_per_line; - - /* The next two variables control the way objdump displays the raw data. */ - /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */ - /* output will look like this: - 00: 00000000 00000000 - with the chunks displayed according to "display_endian". */ - int bytes_per_chunk; - enum bfd_endian display_endian; - - /* Number of octets per incremented target address - Normally one, but some DSPs have byte sizes of 16 or 32 bits. */ - unsigned int octets_per_byte; - - /* The number of zeroes we want to see at the end of a section before we - start skipping them. */ - unsigned int skip_zeroes; - - /* The number of zeroes to skip at the end of a section. If the number - of zeroes at the end is between SKIP_ZEROES_AT_END and SKIP_ZEROES, - they will be disassembled. If there are fewer than - SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic - attempt to avoid disassembling zeroes inserted by section - alignment. */ - unsigned int skip_zeroes_at_end; - - /* Whether the disassembler always needs the relocations. */ - bfd_boolean disassembler_needs_relocs; - - /* Results from instruction decoders. Not all decoders yet support - this information. This info is set each time an instruction is - decoded, and is only valid for the last such instruction. - - To determine whether this decoder supports this information, set - insn_info_valid to 0, decode an instruction, then check it. */ - - char insn_info_valid; /* Branch info has been set. */ - char branch_delay_insns; /* How many sequential insn's will run before - a branch takes effect. (0 = normal) */ - char data_size; /* Size of data reference in insn, in bytes */ - enum dis_insn_type insn_type; /* Type of instruction */ - bfd_vma target; /* Target address of branch or dref, if known; - zero if unknown. */ - bfd_vma target2; /* Second target address for dref2 */ - - /* Command line options specific to the target disassembler. */ - char * disassembler_options; - -} disassemble_info; - - -/* Standard disassemblers. Disassemble one instruction at the given - target address. Return number of octets processed. */ -typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *); - -extern int print_insn_big_mips (bfd_vma, disassemble_info *); -extern int print_insn_little_mips (bfd_vma, disassemble_info *); -extern int print_insn_i386 (bfd_vma, disassemble_info *); -extern int print_insn_i386_att (bfd_vma, disassemble_info *); -extern int print_insn_i386_intel (bfd_vma, disassemble_info *); -extern int print_insn_ia64 (bfd_vma, disassemble_info *); -extern int print_insn_i370 (bfd_vma, disassemble_info *); -extern int print_insn_m68hc11 (bfd_vma, disassemble_info *); -extern int print_insn_m68hc12 (bfd_vma, disassemble_info *); -extern int print_insn_m68k (bfd_vma, disassemble_info *); -extern int print_insn_z80 (bfd_vma, disassemble_info *); -extern int print_insn_z8001 (bfd_vma, disassemble_info *); -extern int print_insn_z8002 (bfd_vma, disassemble_info *); -extern int print_insn_h8300 (bfd_vma, disassemble_info *); -extern int print_insn_h8300h (bfd_vma, disassemble_info *); -extern int print_insn_h8300s (bfd_vma, disassemble_info *); -extern int print_insn_h8500 (bfd_vma, disassemble_info *); -extern int print_insn_alpha (bfd_vma, disassemble_info *); -extern int print_insn_big_arm (bfd_vma, disassemble_info *); -extern int print_insn_little_arm (bfd_vma, disassemble_info *); -extern int print_insn_sparc (bfd_vma, disassemble_info *); -extern int print_insn_avr (bfd_vma, disassemble_info *); -extern int print_insn_bfin (bfd_vma, disassemble_info *); -extern int print_insn_d10v (bfd_vma, disassemble_info *); -extern int print_insn_d30v (bfd_vma, disassemble_info *); -extern int print_insn_dlx (bfd_vma, disassemble_info *); -extern int print_insn_fr30 (bfd_vma, disassemble_info *); -extern int print_insn_hppa (bfd_vma, disassemble_info *); -extern int print_insn_i860 (bfd_vma, disassemble_info *); -extern int print_insn_i960 (bfd_vma, disassemble_info *); -extern int print_insn_ip2k (bfd_vma, disassemble_info *); -extern int print_insn_m32r (bfd_vma, disassemble_info *); -extern int print_insn_m88k (bfd_vma, disassemble_info *); -extern int print_insn_maxq_little (bfd_vma, disassemble_info *); -extern int print_insn_maxq_big (bfd_vma, disassemble_info *); -extern int print_insn_mcore (bfd_vma, disassemble_info *); -extern int print_insn_mmix (bfd_vma, disassemble_info *); -extern int print_insn_mn10200 (bfd_vma, disassemble_info *); -extern int print_insn_mn10300 (bfd_vma, disassemble_info *); -extern int print_insn_mt (bfd_vma, disassemble_info *); -extern int print_insn_msp430 (bfd_vma, disassemble_info *); -extern int print_insn_ns32k (bfd_vma, disassemble_info *); -extern int print_insn_crx (bfd_vma, disassemble_info *); -extern int print_insn_openrisc (bfd_vma, disassemble_info *); -extern int print_insn_big_or32 (bfd_vma, disassemble_info *); -extern int print_insn_little_or32 (bfd_vma, disassemble_info *); -extern int print_insn_pdp11 (bfd_vma, disassemble_info *); -extern int print_insn_pj (bfd_vma, disassemble_info *); -extern int print_insn_big_powerpc (bfd_vma, disassemble_info *); -extern int print_insn_little_powerpc (bfd_vma, disassemble_info *); -extern int print_insn_rs6000 (bfd_vma, disassemble_info *); -extern int print_insn_s390 (bfd_vma, disassemble_info *); -extern int print_insn_sh (bfd_vma, disassemble_info *); -extern int print_insn_tic30 (bfd_vma, disassemble_info *); -extern int print_insn_tic4x (bfd_vma, disassemble_info *); -extern int print_insn_tic54x (bfd_vma, disassemble_info *); -extern int print_insn_tic80 (bfd_vma, disassemble_info *); -extern int print_insn_v850 (bfd_vma, disassemble_info *); -extern int print_insn_vax (bfd_vma, disassemble_info *); -extern int print_insn_w65 (bfd_vma, disassemble_info *); -extern int print_insn_xstormy16 (bfd_vma, disassemble_info *); -extern int print_insn_xtensa (bfd_vma, disassemble_info *); -extern int print_insn_sh64 (bfd_vma, disassemble_info *); -extern int print_insn_sh64x_media (bfd_vma, disassemble_info *); -extern int print_insn_frv (bfd_vma, disassemble_info *); -extern int print_insn_iq2000 (bfd_vma, disassemble_info *); -extern int print_insn_xc16x (bfd_vma, disassemble_info *); -extern int print_insn_m32c (bfd_vma, disassemble_info *); - -extern disassembler_ftype arc_get_disassembler (void *); -//extern disassembler_ftype cris_get_disassembler (bfd *); - -extern void print_mips_disassembler_options (FILE *); -extern void print_ppc_disassembler_options (FILE *); -extern void print_arm_disassembler_options (FILE *); -extern void parse_arm_disassembler_option (char *); -extern int get_arm_regname_num_options (void); -extern int set_arm_regname_option (int); -extern int get_arm_regnames (int, const char **, const char **, const char *const **); -extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *); - -/* Fetch the disassembler for a given BFD, if that support is available. */ -//extern disassembler_ftype disassembler (bfd *); - -/* Amend the disassemble_info structure as necessary for the target architecture. - Should only be called after initialising the info->arch field. */ -extern void disassemble_init_for_target (struct disassemble_info * info); - -/* Document any target specific options available from the disassembler. */ -extern void disassembler_usage (FILE *); - - -/* This block of definitions is for particular callers who read instructions - into a buffer before calling the instruction decoder. */ - -/* Here is a function which callers may wish to use for read_memory_func. - It gets bytes from a buffer. */ -extern int buffer_read_memory - (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *); - -/* This function goes with buffer_read_memory. - It prints a message using info->fprintf_func and info->stream. */ -extern void perror_memory (int, bfd_vma, struct disassemble_info *); - - -/* Just print the address in hex. This is included for completeness even - though both GDB and objdump provide their own (to print symbolic - addresses). */ -extern void generic_print_address - (bfd_vma, struct disassemble_info *); - -/* Always true. */ -extern int generic_symbol_at_address - (bfd_vma, struct disassemble_info *); - -/* Also always true. */ -extern bfd_boolean generic_symbol_is_valid - (asymbol *, struct disassemble_info *); - -/* Method to initialize a disassemble_info struct. This should be - called by all applications creating such a struct. */ -extern void init_disassemble_info (struct disassemble_info *info, void *stream, - fprintf_ftype fprintf_func); - -/* For compatibility with existing code. */ -#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \ - init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC)) -#define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \ - init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC)) - - -#ifdef __cplusplus -} -#endif - -#endif /* ! defined (DIS_ASM_H) */ diff -r a1bd69b08e9e -r 485e6db28b93 tools/debugger/xenitp/ia64-asmtab.c --- a/tools/debugger/xenitp/ia64-asmtab.c Wed Sep 12 16:12:42 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8774 +0,0 @@ -/* This file is automatically generated by ia64-gen. Do not edit! */ -static const char * const ia64_strings[] = { - "", "0", "1", "a", "acq", "add", "addl", "addp4", "adds", "alloc", "and", - "andcm", "b", "bias", "br", "break", "brl", "brp", "bsw", "c", "call", - "cexit", "chk", "cloop", "clr", "clrrrb", "cmp", "cmp4", "cmp8xchg16", - "cmpxchg1", "cmpxchg2", "cmpxchg4", "cmpxchg8", "cond", "cover", "ctop", - "czx1", "czx2", "d", "dep", "dpnt", "dptk", "e", "epc", "eq", "excl", - "exit", "exp", "extr", "f", "fabs", "fadd", "famax", "famin", "fand", - "fandcm", "fault", "fc", "fchkf", "fclass", "fclrf", "fcmp", "fcvt", - "fetchadd4", "fetchadd8", "few", "fill", "flushrs", "fma", "fmax", - "fmerge", "fmin", "fmix", "fmpy", "fms", "fneg", "fnegabs", "fnma", - "fnmpy", "fnorm", "for", "fpabs", "fpack", "fpamax", "fpamin", "fpcmp", - "fpcvt", "fpma", "fpmax", "fpmerge", "fpmin", "fpmpy", "fpms", "fpneg", - "fpnegabs", "fpnma", "fpnmpy", "fprcpa", "fprsqrta", "frcpa", "frsqrta", - "fselect", "fsetc", "fsub", "fswap", "fsxt", "fwb", "fx", "fxor", "fxu", - "g", "ga", "ge", "getf", "geu", "gt", "gtu", "h", "hint", "hu", "i", "ia", - "imp", "invala", "itc", "itr", "l", "ld1", "ld16", "ld2", "ld4", "ld8", - "ldf", "ldf8", "ldfd", "ldfe", "ldfp8", "ldfpd", "ldfps", "ldfs", "le", - "leu", "lfetch", "loadrs", "loop", "lr", "lt", "ltu", "lu", "m", "many", - "mf", "mix1", "mix2", "mix4", "mov", "movl", "mux1", "mux2", "nc", "ne", - "neq", "nge", "ngt", "nl", "nle", "nlt", "nm", "nop", "nr", "ns", "nt1", - "nt2", "nta", "nz", "or", "orcm", "ord", "pack2", "pack4", "padd1", - "padd2", "padd4", "pavg1", "pavg2", "pavgsub1", "pavgsub2", "pcmp1", - "pcmp2", "pcmp4", "pmax1", "pmax2", "pmin1", "pmin2", "pmpy2", "pmpyshr2", - "popcnt", "pr", "probe", "psad1", "pshl2", "pshl4", "pshladd2", "pshr2", - "pshr4", "pshradd2", "psub1", "psub2", "psub4", "ptc", "ptr", "r", "raz", - "rel", "ret", "rfi", "rsm", "rum", "rw", "s", "s0", "s1", "s2", "s3", - "sa", "se", "setf", "shl", "shladd", "shladdp4", "shr", "shrp", "sig", - "spill", "spnt", "sptk", "srlz", "ssm", "sss", "st1", "st16", "st2", - "st4", "st8", "stf", "stf8", "stfd", "stfe", "stfs", "sub", "sum", "sxt1", - "sxt2", "sxt4", "sync", "tak", "tbit", "tf", "thash", "tnat", "tpa", - "trunc", "ttag", "u", "unc", "unord", "unpack1", "unpack2", "unpack4", - "uss", "uus", "uuu", "vmsw", "w", "wexit", "wtop", "x", "xchg1", "xchg2", - "xchg4", "xchg8", "xf", "xma", "xmpy", "xor", "xuf", "z", "zxt1", "zxt2", - "zxt4", -}; - -static const struct ia64_dependency -dependencies[] = { - { "ALAT", 0, 0, 0, -1, NULL, }, - { "AR[BSP]", 26, 0, 2, 17, NULL, }, - { "AR[BSPSTORE]", 26, 0, 2, 18, NULL, }, - { "AR[CCV]", 26, 0, 2, 32, NULL, }, - { "AR[CFLG]", 26, 0, 2, 27, NULL, }, - { "AR[CSD]", 26, 0, 2, 25, NULL, }, - { "AR[EC]", 26, 0, 2, 66, NULL, }, - { "AR[EFLAG]", 26, 0, 2, 24, NULL, }, - { "AR[FCR]", 26, 0, 2, 21, NULL, }, - { "AR[FDR]", 26, 0, 2, 30, NULL, }, - { "AR[FIR]", 26, 0, 2, 29, NULL, }, - { "AR[FPSR].sf0.controls", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf1.controls", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf2.controls", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf3.controls", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf0.flags", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf1.flags", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf2.flags", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].sf3.flags", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].traps", 30, 0, 2, -1, NULL, }, - { "AR[FPSR].rv", 30, 0, 2, -1, NULL, }, - { "AR[FSR]", 26, 0, 2, 28, NULL, }, - { "AR[ITC]", 26, 0, 2, 44, NULL, }, - { "AR[K%], % in 0 - 7", 1, 0, 2, -1, NULL, }, - { "AR[LC]", 26, 0, 2, 65, NULL, }, - { "AR[PFS]", 26, 0, 2, 64, NULL, }, - { "AR[PFS]", 26, 0, 2, 64, NULL, }, - { "AR[PFS]", 26, 0, 0, 64, NULL, }, - { "AR[RNAT]", 26, 0, 2, 19, NULL, }, - { "AR[RSC]", 26, 0, 2, 16, NULL, }, - { "AR[SSD]", 26, 0, 2, 26, NULL, }, - { "AR[UNAT]{%}, % in 0 - 63", 2, 0, 2, -1, NULL, }, - { "AR%, % in 8-15, 20, 22-23, 31, 33-35, 37-39, 41-43, 45-47, 67-111", 3, 0, 0, -1, NULL, }, - { "AR%, % in 48-63, 112-127", 4, 0, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 0, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 0, 0, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 0, 2, -1, NULL, }, - { "CFM", 6, 0, 2, -1, NULL, }, - { "CFM", 6, 0, 2, -1, NULL, }, - { "CFM", 6, 0, 2, -1, NULL, }, - { "CFM", 6, 0, 2, -1, NULL, }, - { "CFM", 6, 0, 0, -1, NULL, }, - { "CPUID#", 7, 0, 5, -1, NULL, }, - { "CR[CMCV]", 27, 0, 3, 74, NULL, }, - { "CR[DCR]", 27, 0, 3, 0, NULL, }, - { "CR[EOI]", 27, 0, 7, 67, "SC Section 5.8.3.4, \"End of External Interrupt Register (EOI Ð CR67)\" on page 2:119", }, - { "CR[GPTA]", 27, 0, 3, 9, NULL, }, - { "CR[IFA]", 27, 0, 1, 20, NULL, }, - { "CR[IFA]", 27, 0, 3, 20, NULL, }, - { "CR[IFS]", 27, 0, 3, 23, NULL, }, - { "CR[IFS]", 27, 0, 1, 23, NULL, }, - { "CR[IFS]", 27, 0, 1, 23, NULL, }, - { "CR[IHA]", 27, 0, 3, 25, NULL, }, - { "CR[IIM]", 27, 0, 3, 24, NULL, }, - { "CR[IIP]", 27, 0, 3, 19, NULL, }, - { "CR[IIP]", 27, 0, 1, 19, NULL, }, - { "CR[IIPA]", 27, 0, 3, 22, NULL, }, - { "CR[IPSR]", 27, 0, 3, 16, NULL, }, - { "CR[IPSR]", 27, 0, 1, 16, NULL, }, - { "CR[IRR%], % in 0 - 3", 8, 0, 3, -1, NULL, }, - { "CR[ISR]", 27, 0, 3, 17, NULL, }, - { "CR[ITIR]", 27, 0, 3, 21, NULL, }, - { "CR[ITIR]", 27, 0, 1, 21, NULL, }, - { "CR[ITM]", 27, 0, 3, 1, NULL, }, - { "CR[ITV]", 27, 0, 3, 72, NULL, }, - { "CR[IVA]", 27, 0, 4, 2, NULL, }, - { "CR[IVR]", 27, 0, 7, 65, "SC Section 5.8.3.2, \"External Interrupt Vector Register (IVR Ð CR65)\" on page 2:118", }, - { "CR[LID]", 27, 0, 7, 64, "SC Section 5.8.3.1, \"Local ID (LID Ð CR64)\" on page 2:117", }, - { "CR[LRR%], % in 0 - 1", 9, 0, 3, -1, NULL, }, - { "CR[PMV]", 27, 0, 3, 73, NULL, }, - { "CR[PTA]", 27, 0, 3, 8, NULL, }, - { "CR[TPR]", 27, 0, 3, 66, NULL, }, - { "CR[TPR]", 27, 0, 7, 66, "SC Section 5.8.3.3, \"Task Priority Register (TPR Ð CR66)\" on page 2:119", }, - { "CR[TPR]", 27, 0, 1, 66, NULL, }, - { "CR%, % in 3-7, 10-15, 18, 26-63, 75-79, 82-127", 10, 0, 0, -1, NULL, }, - { "DBR#", 11, 0, 2, -1, NULL, }, - { "DBR#", 11, 0, 3, -1, NULL, }, - { "DTC", 0, 0, 3, -1, NULL, }, - { "DTC", 0, 0, 2, -1, NULL, }, - { "DTC", 0, 0, 0, -1, NULL, }, - { "DTC", 0, 0, 2, -1, NULL, }, - { "DTC_LIMIT*", 0, 0, 2, -1, NULL, }, - { "DTR", 0, 0, 3, -1, NULL, }, - { "DTR", 0, 0, 2, -1, NULL, }, - { "DTR", 0, 0, 3, -1, NULL, }, - { "DTR", 0, 0, 0, -1, NULL, }, - { "DTR", 0, 0, 2, -1, NULL, }, - { "FR%, % in 0 - 1", 12, 0, 0, -1, NULL, }, - { "FR%, % in 2 - 127", 13, 0, 2, -1, NULL, }, - { "FR%, % in 2 - 127", 13, 0, 0, -1, NULL, }, - { "GR0", 14, 0, 0, -1, NULL, }, - { "GR%, % in 1 - 127", 15, 0, 0, -1, NULL, }, - { "GR%, % in 1 - 127", 15, 0, 2, -1, NULL, }, - { "IBR#", 16, 0, 2, -1, NULL, }, - { "InService*", 17, 0, 3, -1, NULL, }, - { "InService*", 17, 0, 2, -1, NULL, }, - { "InService*", 17, 0, 2, -1, NULL, }, - { "IP", 0, 0, 0, -1, NULL, }, - { "ITC", 0, 0, 4, -1, NULL, }, - { "ITC", 0, 0, 2, -1, NULL, }, - { "ITC", 0, 0, 0, -1, NULL, }, - { "ITC", 0, 0, 4, -1, NULL, }, - { "ITC", 0, 0, 2, -1, NULL, }, - { "ITC_LIMIT*", 0, 0, 2, -1, NULL, }, - { "ITR", 0, 0, 2, -1, NULL, }, - { "ITR", 0, 0, 4, -1, NULL, }, - { "ITR", 0, 0, 2, -1, NULL, }, - { "ITR", 0, 0, 0, -1, NULL, }, - { "ITR", 0, 0, 4, -1, NULL, }, - { "memory", 0, 0, 0, -1, NULL, }, - { "MSR#", 18, 0, 5, -1, NULL, }, - { "PKR#", 19, 0, 3, -1, NULL, }, - { "PKR#", 19, 0, 0, -1, NULL, }, - { "PKR#", 19, 0, 2, -1, NULL, }, - { "PKR#", 19, 0, 2, -1, NULL, }, - { "PMC#", 20, 0, 2, -1, NULL, }, - { "PMC#", 20, 0, 7, -1, "SC Section 7.2.1, \"Generic Performance Counter Registers\" for PMC[0].fr on page 2:150", }, - { "PMD#", 21, 0, 2, -1, NULL, }, - { "PR0", 0, 0, 0, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 0, 2, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 0, 2, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 0, 0, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 0, 2, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 0, 2, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 0, 0, -1, NULL, }, - { "PR63", 24, 0, 2, -1, NULL, }, - { "PR63", 24, 0, 2, -1, NULL, }, - { "PR63", 24, 0, 0, -1, NULL, }, - { "PSR.ac", 28, 0, 1, 3, NULL, }, - { "PSR.ac", 28, 0, 3, 3, NULL, }, - { "PSR.ac", 28, 0, 2, 3, NULL, }, - { "PSR.ac", 28, 0, 2, 3, NULL, }, - { "PSR.be", 28, 0, 1, 1, NULL, }, - { "PSR.be", 28, 0, 3, 1, NULL, }, - { "PSR.be", 28, 0, 2, 1, NULL, }, - { "PSR.be", 28, 0, 2, 1, NULL, }, - { "PSR.bn", 28, 0, 2, 44, NULL, }, - { "PSR.cpl", 28, 0, 1, 32, NULL, }, - { "PSR.cpl", 28, 0, 2, 32, NULL, }, - { "PSR.da", 28, 0, 2, 38, NULL, }, - { "PSR.db", 28, 0, 3, 24, NULL, }, - { "PSR.db", 28, 0, 2, 24, NULL, }, - { "PSR.db", 28, 0, 2, 24, NULL, }, - { "PSR.dd", 28, 0, 2, 39, NULL, }, - { "PSR.dfh", 28, 0, 3, 19, NULL, }, - { "PSR.dfh", 28, 0, 2, 19, NULL, }, - { "PSR.dfh", 28, 0, 2, 19, NULL, }, - { "PSR.dfl", 28, 0, 3, 18, NULL, }, - { "PSR.dfl", 28, 0, 2, 18, NULL, }, - { "PSR.dfl", 28, 0, 2, 18, NULL, }, - { "PSR.di", 28, 0, 3, 22, NULL, }, - { "PSR.di", 28, 0, 2, 22, NULL, }, - { "PSR.di", 28, 0, 2, 22, NULL, }, - { "PSR.dt", 28, 0, 3, 17, NULL, }, - { "PSR.dt", 28, 0, 2, 17, NULL, }, - { "PSR.dt", 28, 0, 2, 17, NULL, }, - { "PSR.ed", 28, 0, 2, 43, NULL, }, - { "PSR.i", 28, 0, 2, 14, NULL, }, - { "PSR.ia", 28, 0, 0, 14, NULL, }, - { "PSR.ic", 28, 0, 2, 13, NULL, }, - { "PSR.ic", 28, 0, 3, 13, NULL, }, - { "PSR.ic", 28, 0, 2, 13, NULL, }, - { "PSR.id", 28, 0, 0, 14, NULL, }, - { "PSR.is", 28, 0, 0, 14, NULL, }, - { "PSR.it", 28, 0, 2, 14, NULL, }, - { "PSR.lp", 28, 0, 2, 25, NULL, }, - { "PSR.lp", 28, 0, 3, 25, NULL, }, - { "PSR.lp", 28, 0, 2, 25, NULL, }, - { "PSR.mc", 28, 0, 2, 35, NULL, }, - { "PSR.mfh", 28, 0, 2, 5, NULL, }, - { "PSR.mfl", 28, 0, 2, 4, NULL, }, - { "PSR.pk", 28, 0, 3, 15, NULL, }, - { "PSR.pk", 28, 0, 2, 15, NULL, }, - { "PSR.pk", 28, 0, 2, 15, NULL, }, - { "PSR.pp", 28, 0, 2, 21, NULL, }, - { "PSR.ri", 28, 0, 0, 41, NULL, }, - { "PSR.rt", 28, 0, 2, 27, NULL, }, - { "PSR.rt", 28, 0, 3, 27, NULL, }, - { "PSR.rt", 28, 0, 2, 27, NULL, }, - { "PSR.si", 28, 0, 2, 23, NULL, }, - { "PSR.si", 28, 0, 3, 23, NULL, }, - { "PSR.si", 28, 0, 2, 23, NULL, }, - { "PSR.sp", 28, 0, 2, 20, NULL, }, - { "PSR.sp", 28, 0, 3, 20, NULL, }, - { "PSR.sp", 28, 0, 2, 20, NULL, }, - { "PSR.ss", 28, 0, 2, 40, NULL, }, - { "PSR.tb", 28, 0, 3, 26, NULL, }, - { "PSR.tb", 28, 0, 2, 26, NULL, }, - { "PSR.tb", 28, 0, 2, 26, NULL, }, - { "PSR.up", 28, 0, 2, 2, NULL, }, - { "PSR.vm", 28, 0, 1, 46, NULL, }, - { "PSR.vm", 28, 0, 2, 46, NULL, }, - { "RR#", 25, 0, 3, -1, NULL, }, - { "RR#", 25, 0, 2, -1, NULL, }, - { "RSE", 29, 0, 2, -1, NULL, }, - { "ALAT", 0, 1, 0, -1, NULL, }, - { "AR[BSP]", 26, 1, 2, 17, NULL, }, - { "AR[BSPSTORE]", 26, 1, 2, 18, NULL, }, - { "AR[CCV]", 26, 1, 2, 32, NULL, }, - { "AR[CFLG]", 26, 1, 2, 27, NULL, }, - { "AR[CSD]", 26, 1, 2, 25, NULL, }, - { "AR[EC]", 26, 1, 2, 66, NULL, }, - { "AR[EFLAG]", 26, 1, 2, 24, NULL, }, - { "AR[FCR]", 26, 1, 2, 21, NULL, }, - { "AR[FDR]", 26, 1, 2, 30, NULL, }, - { "AR[FIR]", 26, 1, 2, 29, NULL, }, - { "AR[FPSR].sf0.controls", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf1.controls", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf2.controls", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf3.controls", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf0.flags", 30, 1, 0, -1, NULL, }, - { "AR[FPSR].sf0.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf0.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf1.flags", 30, 1, 0, -1, NULL, }, - { "AR[FPSR].sf1.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf1.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf2.flags", 30, 1, 0, -1, NULL, }, - { "AR[FPSR].sf2.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf2.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf3.flags", 30, 1, 0, -1, NULL, }, - { "AR[FPSR].sf3.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].sf3.flags", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].rv", 30, 1, 2, -1, NULL, }, - { "AR[FPSR].traps", 30, 1, 2, -1, NULL, }, - { "AR[FSR]", 26, 1, 2, 28, NULL, }, - { "AR[ITC]", 26, 1, 2, 44, NULL, }, - { "AR[K%], % in 0 - 7", 1, 1, 2, -1, NULL, }, - { "AR[LC]", 26, 1, 2, 65, NULL, }, - { "AR[PFS]", 26, 1, 0, 64, NULL, }, - { "AR[PFS]", 26, 1, 2, 64, NULL, }, - { "AR[PFS]", 26, 1, 2, 64, NULL, }, - { "AR[RNAT]", 26, 1, 2, 19, NULL, }, - { "AR[RSC]", 26, 1, 2, 16, NULL, }, - { "AR[SSD]", 26, 1, 2, 26, NULL, }, - { "AR[UNAT]{%}, % in 0 - 63", 2, 1, 2, -1, NULL, }, - { "AR%, % in 8-15, 20, 22-23, 31, 33-35, 37-39, 41-43, 45-47, 67-111", 3, 1, 0, -1, NULL, }, - { "AR%, % in 48 - 63, 112-127", 4, 1, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 1, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 1, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 1, 2, -1, NULL, }, - { "BR%, % in 0 - 7", 5, 1, 0, -1, NULL, }, - { "CFM", 6, 1, 2, -1, NULL, }, - { "CPUID#", 7, 1, 0, -1, NULL, }, - { "CR[CMCV]", 27, 1, 2, 74, NULL, }, - { "CR[DCR]", 27, 1, 2, 0, NULL, }, - { "CR[EOI]", 27, 1, 7, 67, "SC Section 5.8.3.4, \"End of External Interrupt Register (EOI Ð CR67)\" on page 2:119", }, - { "CR[GPTA]", 27, 1, 2, 9, NULL, }, - { "CR[IFA]", 27, 1, 2, 20, NULL, }, - { "CR[IFS]", 27, 1, 2, 23, NULL, }, - { "CR[IHA]", 27, 1, 2, 25, NULL, }, - { "CR[IIM]", 27, 1, 2, 24, NULL, }, - { "CR[IIP]", 27, 1, 2, 19, NULL, }, - { "CR[IIPA]", 27, 1, 2, 22, NULL, }, - { "CR[IPSR]", 27, 1, 2, 16, NULL, }, - { "CR[IRR%], % in 0 - 3", 8, 1, 2, -1, NULL, }, - { "CR[ISR]", 27, 1, 2, 17, NULL, }, - { "CR[ITIR]", 27, 1, 2, 21, NULL, }, - { "CR[ITM]", 27, 1, 2, 1, NULL, }, - { "CR[ITV]", 27, 1, 2, 72, NULL, }, - { "CR[IVA]", 27, 1, 2, 2, NULL, }, - { "CR[IVR]", 27, 1, 7, 65, "SC", }, - { "CR[LID]", 27, 1, 7, 64, "SC", }, - { "CR[LRR%], % in 0 - 1", 9, 1, 2, -1, NULL, }, - { "CR[PMV]", 27, 1, 2, 73, NULL, }, - { "CR[PTA]", 27, 1, 2, 8, NULL, }, - { "CR[TPR]", 27, 1, 2, 66, NULL, }, - { "CR%, % in 3-7, 10-15, 18, 26-63, 75-79, 82-127", 10, 1, 0, -1, NULL, }, - { "DBR#", 11, 1, 2, -1, NULL, }, - { "DTC", 0, 1, 0, -1, NULL, }, - { "DTC", 0, 1, 2, -1, NULL, }, - { "DTC", 0, 1, 2, -1, NULL, }, - { "DTC_LIMIT*", 0, 1, 2, -1, NULL, }, - { "DTR", 0, 1, 2, -1, NULL, }, - { "DTR", 0, 1, 2, -1, NULL, }, - { "DTR", 0, 1, 2, -1, NULL, }, - { "DTR", 0, 1, 0, -1, NULL, }, - { "FR%, % in 0 - 1", 12, 1, 0, -1, NULL, }, - { "FR%, % in 2 - 127", 13, 1, 2, -1, NULL, }, - { "GR0", 14, 1, 0, -1, NULL, }, - { "GR%, % in 1 - 127", 15, 1, 2, -1, NULL, }, - { "IBR#", 16, 1, 2, -1, NULL, }, - { "InService*", 17, 1, 7, -1, "SC", }, - { "IP", 0, 1, 0, -1, NULL, }, - { "ITC", 0, 1, 0, -1, NULL, }, - { "ITC", 0, 1, 2, -1, NULL, }, - { "ITC", 0, 1, 2, -1, NULL, }, - { "ITR", 0, 1, 2, -1, NULL, }, - { "ITR", 0, 1, 2, -1, NULL, }, - { "ITR", 0, 1, 0, -1, NULL, }, - { "memory", 0, 1, 0, -1, NULL, }, - { "MSR#", 18, 1, 7, -1, "SC", }, - { "PKR#", 19, 1, 0, -1, NULL, }, - { "PKR#", 19, 1, 0, -1, NULL, }, - { "PKR#", 19, 1, 2, -1, NULL, }, - { "PMC#", 20, 1, 2, -1, NULL, }, - { "PMD#", 21, 1, 2, -1, NULL, }, - { "PR0", 0, 1, 0, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 1, 0, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 1, 0, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 1, 2, -1, NULL, }, - { "PR%, % in 1 - 15", 22, 1, 2, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 1, 0, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 1, 0, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 1, 2, -1, NULL, }, - { "PR%, % in 16 - 62", 23, 1, 2, -1, NULL, }, - { "PR63", 24, 1, 0, -1, NULL, }, - { "PR63", 24, 1, 0, -1, NULL, }, - { "PR63", 24, 1, 2, -1, NULL, }, - { "PR63", 24, 1, 2, -1, NULL, }, - { "PSR.ac", 28, 1, 2, 3, NULL, }, - { "PSR.be", 28, 1, 2, 1, NULL, }, - { "PSR.bn", 28, 1, 2, 44, NULL, }, - { "PSR.cpl", 28, 1, 2, 32, NULL, }, - { "PSR.da", 28, 1, 2, 38, NULL, }, - { "PSR.db", 28, 1, 2, 24, NULL, }, - { "PSR.dd", 28, 1, 2, 39, NULL, }, - { "PSR.dfh", 28, 1, 2, 19, NULL, }, - { "PSR.dfl", 28, 1, 2, 18, NULL, }, - { "PSR.di", 28, 1, 2, 22, NULL, }, - { "PSR.dt", 28, 1, 2, 17, NULL, }, - { "PSR.ed", 28, 1, 2, 43, NULL, }, - { "PSR.i", 28, 1, 2, 14, NULL, }, - { "PSR.ia", 28, 1, 2, 14, NULL, }, - { "PSR.ic", 28, 1, 2, 13, NULL, }, - { "PSR.id", 28, 1, 2, 14, NULL, }, - { "PSR.is", 28, 1, 2, 14, NULL, }, - { "PSR.it", 28, 1, 2, 14, NULL, }, - { "PSR.lp", 28, 1, 2, 25, NULL, }, - { "PSR.mc", 28, 1, 2, 35, NULL, }, - { "PSR.mfh", 28, 1, 0, 5, NULL, }, - { "PSR.mfh", 28, 1, 2, 5, NULL, }, - { "PSR.mfh", 28, 1, 2, 5, NULL, }, - { "PSR.mfl", 28, 1, 0, 4, NULL, }, - { "PSR.mfl", 28, 1, 2, 4, NULL, }, - { "PSR.mfl", 28, 1, 2, 4, NULL, }, - { "PSR.pk", 28, 1, 2, 15, NULL, }, - { "PSR.pp", 28, 1, 2, 21, NULL, }, - { "PSR.ri", 28, 1, 2, 41, NULL, }, - { "PSR.rt", 28, 1, 2, 27, NULL, }, - { "PSR.si", 28, 1, 2, 23, NULL, }, - { "PSR.sp", 28, 1, 2, 20, NULL, }, - { "PSR.ss", 28, 1, 2, 40, NULL, }, - { "PSR.tb", 28, 1, 2, 26, NULL, }, - { "PSR.up", 28, 1, 2, 2, NULL, }, - { "PSR.vm", 28, 1, 2, 46, NULL, }, - { "RR#", 25, 1, 2, -1, NULL, }, - { "RSE", 29, 1, 2, -1, NULL, }, - { "PR63", 24, 2, 6, -1, NULL, }, -}; - -static const unsigned short dep0[] = { - 97, 282, 2140, 2327, -}; - -static const unsigned short dep1[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2327, 4135, 20616, -}; - -static const unsigned short dep2[] = { - 97, 282, 2166, 2167, 2169, 2170, 2172, 2173, 2175, 2344, 2347, 2348, 2351, - 2352, 2355, 2356, -}; - -static const unsigned short dep3[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 20616, -}; - -static const unsigned short dep4[] = { - 97, 282, 22646, 22647, 22649, 22650, 22652, 22653, 22655, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep5[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 4135, 20616, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep6[] = { - 97, 282, 2166, 2167, 2169, 2170, 2172, 2173, 2175, 2344, 2345, 2347, 2349, - 2351, 2353, 2355, -}; - -static const unsigned short dep7[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2344, 2345, 2348, 2349, 2352, 2353, 2356, 4135, 20616, -}; - -static const unsigned short dep8[] = { - 97, 282, 2166, 2167, 2169, 2170, 2172, 2173, 2175, 2344, 2346, 2348, 2350, - 2352, 2354, 2356, -}; - -static const unsigned short dep9[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2344, 2346, 2347, 2350, 2351, 2354, 2355, 4135, 20616, -}; - -static const unsigned short dep10[] = { - 97, 282, 2166, 2167, 2169, 2170, 2172, 2173, 2175, 2344, 2345, 2346, 2347, - 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, -}; - -static const unsigned short dep11[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, - 4135, 20616, -}; - -static const unsigned short dep12[] = { - 97, 282, 2395, -}; - -static const unsigned short dep13[] = { - 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2082, 2083, 2166, 2168, - 2169, 2171, 2172, 2174, 2175, 4135, -}; - -static const unsigned short dep14[] = { - 97, 163, 282, 325, 2395, 28866, 29018, -}; - -static const unsigned short dep15[] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 40, 41, 97, 150, 152, 158, 162, - 164, 175, 185, 186, 188, 282, 325, 2082, 2083, 2166, 2168, 2169, 2171, 2172, - 2174, 2175, 4135, 28866, 29018, -}; - -static const unsigned short dep16[] = { - 1, 6, 40, 97, 137, 196, 201, 241, 282, 312, 2395, 28866, 29018, -}; - -static const unsigned short dep17[] = { - 1, 25, 27, 38, 40, 41, 97, 158, 162, 164, 166, 167, 175, 185, 186, 188, 196, - 201, 241, 282, 312, 2082, 2083, 2166, 2168, 2169, 2171, 2172, 2174, 2175, - 4135, 28866, 29018, -}; - -static const unsigned short dep18[] = { - 1, 40, 51, 97, 196, 241, 248, 282, 28866, 29018, -}; - -static const unsigned short dep19[] = { - 1, 38, 40, 41, 97, 158, 160, 161, 162, 175, 185, 190, 191, 196, 241, 248, - 282, 4135, 28866, 29018, -}; - -static const unsigned short dep20[] = { - 40, 97, 241, 282, -}; - -static const unsigned short dep21[] = { - 97, 158, 162, 175, 185, 241, 282, -}; - -static const unsigned short dep22[] = { - 1, 40, 97, 131, 135, 136, 138, 139, 142, 143, 146, 149, 152, 155, 156, 157, - 158, 161, 162, 163, 164, 167, 168, 169, 170, 173, 174, 175, 178, 181, 184, - 185, 188, 189, 191, 196, 241, 282, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 28866, 29018, -}; - -static const unsigned short dep23[] = { - 1, 38, 40, 41, 50, 51, 55, 58, 73, 97, 137, 138, 158, 162, 175, 185, 190, - 191, 196, 241, 282, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 4135, 28866, 29018, -}; - -static const unsigned short dep24[] = { - 97, 136, 282, 311, -}; - -static const unsigned short dep25[] = { - 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 311, -}; - -static const unsigned short dep26[] = { - 97, 137, 282, 312, -}; - -static const unsigned short dep27[] = { - 25, 26, 97, 98, 101, 105, 108, 137, 138, 158, 162, 164, 175, 185, 282, 312, - -}; - -static const unsigned short dep28[] = { - 97, 190, 282, 344, -}; - -static const unsigned short dep29[] = { - 97, 98, 101, 105, 108, 137, 138, 158, 162, 164, 175, 185, 282, 344, -}; - -static const unsigned short dep30[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2168, 2169, 2171, 2172, 2174, 2175, - 4135, -}; - -static const unsigned short dep31[] = { - 1, 25, 40, 97, 196, 228, 229, 241, 282, 2082, 2285, 2288, 2395, 28866, 29018, - -}; - -static const unsigned short dep32[] = { - 1, 6, 38, 40, 41, 97, 137, 138, 158, 162, 164, 175, 185, 186, 188, 196, 228, - 230, 241, 282, 2082, 2083, 2166, 2168, 2169, 2171, 2172, 2174, 2175, 2286, - 2288, 4135, 28866, 29018, -}; - -static const unsigned short dep33[] = { - 97, 282, -}; - -static const unsigned short dep34[] = { - 97, 158, 162, 175, 185, 282, 2082, 2084, -}; - -static const unsigned short dep35[] = { - 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, 2168, 2169, 2171, - 2172, 2174, 2175, 4135, -}; - -static const unsigned short dep36[] = { - 6, 37, 38, 39, 97, 125, 126, 201, 241, 282, 307, 308, 2395, -}; - -static const unsigned short dep37[] = { - 6, 37, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 201, 241, 282, 307, - 308, 347, 2166, 2168, 2169, 2171, 2172, 2174, 2175, 4135, -}; - -static const unsigned short dep38[] = { - 24, 97, 227, 282, 2395, -}; - -static const unsigned short dep39[] = { - 24, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 227, 282, 2166, 2168, 2169, - 2171, 2172, 2174, 2175, 4135, -}; - -static const unsigned short dep40[] = { - 6, 24, 37, 38, 39, 97, 125, 126, 201, 227, 241, 282, 307, 308, 2395, -}; - -static const unsigned short dep41[] = { - 6, 24, 37, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 201, 227, 241, 282, - 307, 308, 347, 2166, 2168, 2169, 2171, 2172, 2174, 2175, 4135, -}; - -static const unsigned short dep42[] = { - 1, 6, 38, 40, 41, 97, 137, 138, 158, 162, 164, 175, 185, 186, 188, 196, 228, - 230, 241, 282, 2166, 2168, 2169, 2171, 2172, 2174, 2175, 2286, 2288, 4135, - 28866, 29018, -}; - -static const unsigned short dep43[] = { - 97, 158, 162, 175, 185, 282, -}; - -static const unsigned short dep44[] = { - 15, 97, 210, 211, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, 22831, - 22832, 22835, 22836, -}; - -static const unsigned short dep45[] = { - 11, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep46[] = { - 15, 16, 17, 18, 97, 210, 211, 213, 214, 216, 217, 219, 220, 282, 2136, 2325, - 18601, 18602, 18761, 18762, 18764, 18765, 22646, 22647, 22648, 22650, 22651, - 22653, 22654, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep47[] = { - 11, 12, 13, 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 213, 215, - 216, 218, 219, 221, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, 2325, 4135, - 16528, 16530, 16531, 16533, 18761, 18763, 18764, 18766, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep48[] = { - 16, 97, 213, 214, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, 22831, - 22832, 22835, 22836, -}; - -static const unsigned short dep49[] = { - 12, 19, 20, 40, 41, 97, 158, 162, 175, 185, 213, 215, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep50[] = { - 17, 97, 216, 217, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, 22831, - 22832, 22835, 22836, -}; - -static const unsigned short dep51[] = { - 13, 19, 20, 40, 41, 97, 158, 162, 175, 185, 216, 218, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep52[] = { - 18, 97, 219, 220, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, 22831, - 22832, 22835, 22836, -}; - -static const unsigned short dep53[] = { - 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 219, 221, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep54[] = { - 15, 97, 210, 211, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - -}; - -static const unsigned short dep55[] = { - 11, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, -}; - -static const unsigned short dep56[] = { - 15, 16, 17, 18, 97, 210, 211, 213, 214, 216, 217, 219, 220, 282, 2136, 2325, - 18601, 18602, 18761, 18762, 18764, 18765, -}; - -static const unsigned short dep57[] = { - 11, 12, 13, 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 213, 215, - 216, 218, 219, 221, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, 2325, 4135, - 16528, 16530, 16531, 16533, 18761, 18763, 18764, 18766, -}; - -static const unsigned short dep58[] = { - 16, 97, 213, 214, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - -}; - -static const unsigned short dep59[] = { - 12, 19, 20, 40, 41, 97, 158, 162, 175, 185, 213, 215, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, -}; - -static const unsigned short dep60[] = { - 17, 97, 216, 217, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - -}; - -static const unsigned short dep61[] = { - 13, 19, 20, 40, 41, 97, 158, 162, 175, 185, 216, 218, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, -}; - -static const unsigned short dep62[] = { - 18, 97, 219, 220, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, - -}; - -static const unsigned short dep63[] = { - 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 219, 221, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, - 18764, 18766, -}; - -static const unsigned short dep64[] = { - 97, 282, 2136, 2325, 18601, 18602, 18761, 18762, 18764, 18765, -}; - -static const unsigned short dep65[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, - 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, 18764, 18766, -}; - -static const unsigned short dep66[] = { - 11, 97, 206, 282, -}; - -static const unsigned short dep67[] = { - 11, 40, 41, 97, 158, 162, 175, 185, 206, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep68[] = { - 11, 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep69[] = { - 12, 97, 207, 282, -}; - -static const unsigned short dep70[] = { - 11, 40, 41, 97, 158, 162, 175, 185, 207, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep71[] = { - 13, 97, 208, 282, -}; - -static const unsigned short dep72[] = { - 11, 40, 41, 97, 158, 162, 175, 185, 208, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep73[] = { - 14, 97, 209, 282, -}; - -static const unsigned short dep74[] = { - 11, 40, 41, 97, 158, 162, 175, 185, 209, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep75[] = { - 15, 97, 211, 212, 282, -}; - -static const unsigned short dep76[] = { - 40, 41, 97, 158, 162, 175, 185, 211, 212, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep77[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep78[] = { - 16, 97, 214, 215, 282, -}; - -static const unsigned short dep79[] = { - 40, 41, 97, 158, 162, 175, 185, 214, 215, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep80[] = { - 17, 97, 217, 218, 282, -}; - -static const unsigned short dep81[] = { - 40, 41, 97, 158, 162, 175, 185, 217, 218, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep82[] = { - 18, 97, 220, 221, 282, -}; - -static const unsigned short dep83[] = { - 40, 41, 97, 158, 162, 175, 185, 220, 221, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep84[] = { - 15, 19, 20, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, 2167, - 2170, 2173, 4135, -}; - -static const unsigned short dep85[] = { - 15, 16, 19, 20, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, - 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep86[] = { - 15, 17, 19, 20, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, - 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep87[] = { - 15, 18, 19, 20, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, - 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep88[] = { - 15, 97, 210, 211, 282, -}; - -static const unsigned short dep89[] = { - 11, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 282, 2166, 2167, 2170, - 2173, 4135, -}; - -static const unsigned short dep90[] = { - 15, 16, 17, 18, 97, 210, 211, 213, 214, 216, 217, 219, 220, 282, -}; - -static const unsigned short dep91[] = { - 11, 12, 13, 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 213, 215, - 216, 218, 219, 221, 282, 2166, 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep92[] = { - 16, 97, 213, 214, 282, -}; - -static const unsigned short dep93[] = { - 12, 19, 20, 40, 41, 97, 158, 162, 175, 185, 213, 215, 282, 2166, 2167, 2170, - 2173, 4135, -}; - -static const unsigned short dep94[] = { - 17, 97, 216, 217, 282, -}; - -static const unsigned short dep95[] = { - 13, 19, 20, 40, 41, 97, 158, 162, 175, 185, 216, 218, 282, 2166, 2167, 2170, - 2173, 4135, -}; - -static const unsigned short dep96[] = { - 18, 97, 219, 220, 282, -}; - -static const unsigned short dep97[] = { - 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 219, 221, 282, 2166, 2167, 2170, - 2173, 4135, -}; - -static const unsigned short dep98[] = { - 15, 97, 210, 211, 282, 2166, 2167, 2168, 2170, 2171, 2173, 2174, 2344, 2347, - 2348, 2351, 2352, 2355, 2356, -}; - -static const unsigned short dep99[] = { - 11, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 16528, - 16530, 16531, 16533, -}; - -static const unsigned short dep100[] = { - 15, 16, 17, 18, 97, 210, 211, 213, 214, 216, 217, 219, 220, 282, 2166, 2167, - 2168, 2170, 2171, 2173, 2174, 2344, 2347, 2348, 2351, 2352, 2355, 2356, -}; - -static const unsigned short dep101[] = { - 11, 12, 13, 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 213, 215, - 216, 218, 219, 221, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, 2344, 2347, - 2348, 2351, 2352, 2355, 2356, 4135, 16528, 16530, 16531, 16533, -}; - -static const unsigned short dep102[] = { - 16, 97, 213, 214, 282, 2166, 2167, 2168, 2170, 2171, 2173, 2174, 2344, 2347, - 2348, 2351, 2352, 2355, 2356, -}; - -static const unsigned short dep103[] = { - 12, 19, 20, 40, 41, 97, 158, 162, 175, 185, 213, 215, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 16528, - 16530, 16531, 16533, -}; - -static const unsigned short dep104[] = { - 17, 97, 216, 217, 282, 2166, 2167, 2168, 2170, 2171, 2173, 2174, 2344, 2347, - 2348, 2351, 2352, 2355, 2356, -}; - -static const unsigned short dep105[] = { - 13, 19, 20, 40, 41, 97, 158, 162, 175, 185, 216, 218, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 16528, - 16530, 16531, 16533, -}; - -static const unsigned short dep106[] = { - 18, 97, 219, 220, 282, 2166, 2167, 2168, 2170, 2171, 2173, 2174, 2344, 2347, - 2348, 2351, 2352, 2355, 2356, -}; - -static const unsigned short dep107[] = { - 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 219, 221, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 16528, - 16530, 16531, 16533, -}; - -static const unsigned short dep108[] = { - 15, 97, 210, 211, 282, 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, - 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep109[] = { - 11, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 4135, 16528, 16530, 16531, 16533, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep110[] = { - 15, 16, 17, 18, 97, 210, 211, 213, 214, 216, 217, 219, 220, 282, 22646, 22647, - 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, 22831, 22832, 22835, - 22836, -}; - -static const unsigned short dep111[] = { - 11, 12, 13, 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 210, 212, 213, 215, - 216, 218, 219, 221, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, 4135, 16528, - 16530, 16531, 16533, 22824, 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep112[] = { - 16, 97, 213, 214, 282, 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, - 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep113[] = { - 12, 19, 20, 40, 41, 97, 158, 162, 175, 185, 213, 215, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 4135, 16528, 16530, 16531, 16533, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep114[] = { - 17, 97, 216, 217, 282, 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, - 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep115[] = { - 13, 19, 20, 40, 41, 97, 158, 162, 175, 185, 216, 218, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 4135, 16528, 16530, 16531, 16533, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep116[] = { - 18, 97, 219, 220, 282, 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, - 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep117[] = { - 14, 19, 20, 40, 41, 97, 158, 162, 175, 185, 219, 221, 282, 2135, 2136, 2137, - 2166, 2167, 2170, 2173, 4135, 16528, 16530, 16531, 16533, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep118[] = { - 97, 282, 2166, 2167, 2168, 2170, 2171, 2173, 2174, 2344, 2347, 2348, 2351, - 2352, 2355, 2356, -}; - -static const unsigned short dep119[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, - 2344, 2347, 2348, 2351, 2352, 2355, 2356, 4135, 16528, 16530, 16531, 16533, - -}; - -static const unsigned short dep120[] = { - 97, 282, 22646, 22647, 22648, 22650, 22651, 22653, 22654, 22824, 22827, 22828, - 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep121[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2135, 2136, 2137, 2166, 2167, 2170, 2173, - 4135, 16528, 16530, 16531, 16533, 22824, 22827, 22828, 22831, 22832, 22835, - 22836, -}; - -static const unsigned short dep122[] = { - 19, 20, 40, 41, 97, 158, 162, 175, 185, 282, 2135, 2136, 2137, 2166, 2167, - 2170, 2173, 2325, 4135, 16528, 16530, 16531, 16533, 18761, 18763, 18764, 18766, - -}; - -static const unsigned short dep123[] = { - 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2138, 2139, 2140, 2166, - 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep124[] = { - 97, 282, 2083, 2084, 2286, 2287, -}; - -static const unsigned short dep125[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2285, 2287, 4135, 20616, -}; - -static const unsigned short dep126[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2082, 2084, 2166, 2167, 2170, 2173, 2327, - 4135, 20616, -}; - -static const unsigned short dep127[] = { - 97, 282, 14455, 14457, 14458, 14460, 14461, 14463, 14635, 14636, 14639, 14640, - 14643, 14644, -}; - -static const unsigned short dep128[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 4135, 14635, 14636, - 14639, 14640, 14643, 14644, 20616, 24694, 24695, 24698, 24701, -}; - -static const unsigned short dep129[] = { - 97, 122, 124, 125, 127, 282, 303, 304, 307, 308, -}; - -static const unsigned short dep130[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 303, 304, 307, 308, 4135, 24694, 24695, - 24698, 24701, -}; - -static const unsigned short dep131[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 2327, 4135, 20616, - -}; - -static const unsigned short dep132[] = { - 40, 41, 97, 119, 122, 125, 158, 162, 175, 185, 282, 2327, 4135, 20616, 24694, - -}; - -static const unsigned short dep133[] = { - 6, 24, 26, 27, 97, 201, 227, 230, 282, 2081, 2284, -}; - -static const unsigned short dep134[] = { - 40, 41, 97, 158, 162, 175, 185, 201, 227, 229, 282, 2138, 2139, 2140, 2166, - 2167, 2170, 2173, 2284, 4135, 20616, -}; - -static const unsigned short dep135[] = { - 6, 24, 25, 26, 40, 41, 97, 158, 162, 175, 185, 282, 2081, 2166, 2167, 2170, - 2173, 2327, 4135, 20616, -}; - -static const unsigned short dep136[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 2344, 2347, 2348, - 2351, 2352, 2355, 2356, 4135, -}; - -static const unsigned short dep137[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 4135, 22824, - 22827, 22828, 22831, 22832, 22835, 22836, -}; - -static const unsigned short dep138[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 2344, 2345, 2348, - 2349, 2352, 2353, 2356, 4135, -}; - -static const unsigned short dep139[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 2344, 2346, 2347, - 2350, 2351, 2354, 2355, 4135, -}; - -static const unsigned short dep140[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2166, 2167, 2170, 2173, 2344, 2345, 2346, - 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 4135, -}; - -static const unsigned short dep141[] = { - 0, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 282, 2166, 2167, 2170, 2173, - 4135, -}; - -static const unsigned short dep142[] = { - 0, 97, 195, 282, -}; - -static const unsigned short dep143[] = { - 0, 40, 41, 97, 158, 162, 164, 175, 185, 186, 188, 195, 282, 2166, 2167, 2170, - 2173, 4135, -}; - -static const unsigned short dep144[] = { - 40, 41, 97, 158, 162, 175, 185, 195, 282, 2166, 2167, 2170, 2173, 4135, -}; - -static const unsigned short dep145[] = { - 2, 28, 97, 197, 231, 282, 28866, 29018, -}; - -static const unsigned short dep146[] = { - 1, 2, 28, 29, 97, 158, 162, 175, 177, 178, 185, 197, 231, 282, 28866, 29018, - -}; - -static const unsigned short dep147[] = { - 1, 28, 29, 38, 40, 41, 97, 158, 162, 175, 177, 178, 185, 197, 231, 282, 4135, - 28866, 29018, -}; - -static const unsigned short dep148[] = { - 0, 40, 41, 97, 158, 162, 175, 185, 195, 282, 2166, 2167, 2170, 2173, 4135, - -}; - -static const unsigned short dep149[] = { - 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 28, 29, 30, 31, 97, 196, 197, 198, 199, 200, 202, 203, 204, 205, 206, 207, - 208, 209, 211, 212, 214, 215, 217, 218, 220, 221, 222, 223, 224, 225, 231, - 232, 233, 234, 282, 2071, 2081, 2274, 2284, 28866, 29018, -}; - -static const unsigned short dep150[] = { - 29, 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 196, 197, 198, 199, - 200, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 214, 215, 217, 218, - 220, 221, 222, 223, 224, 225, 231, 232, 233, 234, 282, 2138, 2139, 2140, 2166, - 2167, 2170, 2173, 2274, 2284, 4135, 20616, 28866, 29018, -}; - -static const unsigned short dep151[] = { - 97, 282, 14464, 14466, 14468, 14470, 14505, 14506, 14525, 14645, 14646, 14666, - 14667, 14669, 14670, 14679, -}; - -static const unsigned short dep152[] = { - 40, 41, 97, 158, 162, 175, 183, 184, 185, 282, 2166, 2167, 2170, 2173, 4135, - 14645, 14646, 14666, 14667, 14669, 14670, 14679, -}; - -static const unsigned short dep153[] = { - 14464, 14466, 14468, 14470, 14505, 14506, 14525, 14645, 14646, 14666, 14667, - 14669, 14670, 14679, -}; - -static const unsigned short dep154[] = { - 183, 184, 14645, 14646, 14666, 14667, 14669, 14670, 14679, -}; - -static const unsigned short dep155[] = { - 97, 282, 14465, 14466, 14469, 14470, 14480, 14481, 14483, 14484, 14486, 14487, - 14489, 14490, 14493, 14495, 14496, 14505, 14506, 14507, 14508, 14510, 14515, - 14516, 14518, 14519, 14525, 14645, 14646, 14652, 14653, 14654, 14655, 14657, - 14659, 14666, 14667, 14669, 14670, 14671, 14672, 14675, 14676, 14679, -}; - -static const unsigned short dep156[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2166, 2167, 2170, - 2173, 4135, 14645, 14646, 14652, 14653, 14654, 14655, 14657, 14659, 14666, - 14667, 14669, 14670, 14671, 14672, 14675, 14676, 14679, 34888, -}; - -static const unsigned short dep157[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2166, 2167, 2170, - 2173, 4135, 14645, 14646, 14652, 14653, 14654, 14655, 14657, 14659, 14666, - 14667, 14669, 14670, 14671, 14672, 14675, 14676, 14679, -}; - -static const unsigned short dep158[] = { - 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 28, 29, 30, 31, 40, 41, 97, 137, 138, 158, 162, 175, 180, 181, 185, 190, 191, - 282, 2071, 2081, 2166, 2167, 2170, 2173, 2327, 4135, 20616, 28866, -}; - -static const unsigned short dep159[] = { - 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, - 64, 65, 67, 69, 70, 71, 72, 73, 94, 96, 97, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 255, 256, 257, 258, 259, 261, 263, 264, 265, 281, - 282, 2116, 2310, -}; - -static const unsigned short dep160[] = { - 40, 41, 96, 97, 137, 138, 158, 160, 161, 162, 175, 185, 190, 191, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259, 261, - 263, 264, 265, 281, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, 2310, 4135, - 20616, -}; - -static const unsigned short dep161[] = { - 59, 95, 97, 254, 281, 282, 2140, 2327, -}; - -static const unsigned short dep162[] = { - 40, 41, 43, 44, 46, 48, 49, 51, 52, 53, 54, 56, 57, 60, 61, 63, 64, 65, 66, - 67, 69, 70, 71, 94, 95, 97, 137, 138, 158, 160, 161, 162, 175, 185, 190, 191, - 254, 281, 282, 2107, 2116, 2166, 2167, 2170, 2173, 2327, 4135, 20616, -}; - -static const unsigned short dep163[] = { - 2, 28, 41, 97, 197, 231, 241, 282, 2140, 2327, 28866, 29018, -}; - -static const unsigned short dep164[] = { - 2, 25, 26, 28, 29, 38, 40, 41, 97, 158, 162, 175, 177, 178, 185, 197, 231, - 241, 282, 2327, 4135, 20616, 28866, 29018, -}; - -static const unsigned short dep165[] = { - 97, 129, 130, 133, 134, 140, 141, 144, 145, 147, 148, 150, 151, 153, 154, - 157, 159, 160, 165, 166, 169, 170, 171, 172, 174, 176, 177, 179, 180, 182, - 183, 186, 187, 189, 282, 309, 310, 314, 316, 317, 318, 319, 321, 323, 327, - 330, 331, 333, 334, 335, 336, 338, 339, 340, 342, 343, -}; - -static const unsigned short dep166[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 309, 310, 314, 316, - 317, 318, 319, 321, 323, 327, 330, 331, 333, 334, 335, 336, 338, 339, 340, - 342, 343, 2138, 2139, 2140, 2166, 2167, 2170, 2173, 4135, 20616, 34888, -}; - -static const unsigned short dep167[] = { - 97, 128, 130, 132, 134, 169, 170, 189, 282, 309, 310, 330, 331, 333, 334, - 343, -}; - -static const unsigned short dep168[] = { - 40, 41, 97, 158, 162, 175, 183, 184, 185, 282, 309, 310, 330, 331, 333, 334, - 343, 2138, 2139, 2140, 2166, 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep169[] = { - 40, 41, 97, 130, 131, 134, 135, 137, 138, 141, 142, 145, 146, 148, 149, 151, - 152, 154, 155, 157, 158, 159, 161, 162, 164, 165, 167, 168, 169, 170, 172, - 173, 174, 175, 176, 178, 179, 181, 182, 184, 185, 187, 188, 189, 190, 191, - 282, 2166, 2167, 2170, 2173, 2327, 4135, 20616, -}; - -static const unsigned short dep170[] = { - 40, 41, 97, 130, 131, 134, 135, 158, 162, 169, 170, 175, 185, 189, 282, 2166, - 2167, 2170, 2173, 2327, 4135, 20616, -}; - -static const unsigned short dep171[] = { - 40, 41, 70, 76, 77, 82, 84, 97, 111, 137, 138, 153, 155, 158, 162, 171, 173, - 175, 185, 192, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, 2327, 4135, - 20616, -}; - -static const unsigned short dep172[] = { - 40, 41, 70, 76, 77, 82, 84, 97, 111, 137, 138, 139, 140, 142, 143, 153, 155, - 158, 162, 171, 173, 175, 185, 192, 282, 2138, 2139, 2140, 2166, 2167, 2170, - 2173, 4135, 20616, -}; - -static const unsigned short dep173[] = { - 77, 78, 97, 101, 102, 269, 270, 282, 284, 285, -}; - -static const unsigned short dep174[] = { - 40, 41, 47, 62, 78, 80, 86, 97, 99, 102, 137, 138, 158, 160, 161, 162, 175, - 185, 190, 191, 192, 269, 270, 282, 284, 285, 2138, 2139, 2140, 2166, 2167, - 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep175[] = { - 40, 41, 47, 62, 78, 80, 97, 99, 102, 104, 106, 137, 138, 158, 160, 161, 162, - 175, 185, 190, 191, 192, 269, 270, 282, 284, 285, 2138, 2139, 2140, 2166, - 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep176[] = { - 97, 282, 12480, 12481, 12633, -}; - -static const unsigned short dep177[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 12633, 20616, -}; - -static const unsigned short dep178[] = { - 97, 282, 6219, 6220, 6411, -}; - -static const unsigned short dep179[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 6411, 20616, -}; - -static const unsigned short dep180[] = { - 97, 282, 6237, 6424, -}; - -static const unsigned short dep181[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 6424, 20616, -}; - -static const unsigned short dep182[] = { - 97, 282, 6255, 6256, 6257, 6258, 6435, 6437, 8484, -}; - -static const unsigned short dep183[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 6258, 6436, 6437, 8304, 8483, 20616, -}; - -static const unsigned short dep184[] = { - 97, 282, 6259, 6260, 6438, -}; - -static const unsigned short dep185[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 6438, 20616, -}; - -static const unsigned short dep186[] = { - 97, 282, 6261, 6439, -}; - -static const unsigned short dep187[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 6439, 20616, -}; - -static const unsigned short dep188[] = { - 97, 282, 10350, 10530, -}; - -static const unsigned short dep189[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 10530, 20616, -}; - -static const unsigned short dep190[] = { - 77, 78, 82, 83, 97, 101, 102, 269, 270, 272, 273, 282, 284, 285, -}; - -static const unsigned short dep191[] = { - 40, 41, 47, 62, 78, 80, 83, 86, 97, 99, 102, 137, 138, 158, 160, 161, 162, - 175, 185, 190, 191, 192, 269, 270, 272, 274, 282, 284, 285, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep192[] = { - 77, 78, 97, 101, 102, 104, 105, 269, 270, 282, 284, 285, 286, 287, -}; - -static const unsigned short dep193[] = { - 40, 41, 47, 62, 78, 80, 97, 99, 102, 104, 106, 137, 138, 158, 160, 161, 162, - 175, 185, 190, 191, 192, 269, 270, 282, 284, 285, 286, 287, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep194[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 12481, 20616, -}; - -static const unsigned short dep195[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 6219, 20616, -}; - -static const unsigned short dep196[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 6237, 20616, -}; - -static const unsigned short dep197[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 6257, 8303, 20616, -}; - -static const unsigned short dep198[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 6259, 20616, -}; - -static const unsigned short dep199[] = { - 40, 41, 97, 137, 138, 158, 162, 175, 183, 184, 185, 282, 2138, 2139, 2140, - 2166, 2167, 2170, 2173, 2327, 4135, 6260, 6261, 20616, -}; - -static const unsigned short dep200[] = { - 40, 41, 97, 158, 162, 175, 185, 282, 2138, 2139, 2140, 2166, 2167, 2170, 2173, - 2327, 4135, 10350, 20616, -}; - -static const unsigned short dep201[] = { - 40, 41, 97, 158, 162, 175, 185, 190, 191, 282, 2138, 2139, 2140, 2166, 2167, - 2170, 2173, 2327, 4135, 6186, 20616, -}; - -static const unsigned short dep202[] = { - 77, 79, 80, 97, 98, 99, 100, 268, 269, 282, 283, 284, -}; - -static const unsigned short dep203[] = { - 40, 41, 78, 79, 83, 85, 97, 100, 102, 104, 107, 137, 138, 158, 162, 175, 185, - 190, 191, 192, 268, 270, 282, 283, 285, 2138, 2139, 2140, 2166, 2167, 2170, - 2173, 4135, 20616, -}; - -static const unsigned short dep204[] = { - 77, 79, 80, 81, 97, 98, 99, 100, 103, 268, 269, 271, 282, 283, 284, -}; - -static const unsigned short dep205[] = { - 40, 41, 78, 79, 81, 83, 85, 97, 100, 102, 103, 104, 107, 137, 138, 158, 162, - 175, 185, 190, 191, 192, 268, 270, 271, 282, 283, 285, 2138, 2139, 2140, 2166, - 2167, 2170, 2173, 4135, 20616, -}; - -static const unsigned short dep206[] = { - 77, 79, 80, 84, 85, 86, 97, 98, 99, 100, 268, 269, 274, 275, 282, 283, 284, - -}; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |