|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] Remove in-tree mini-os directory
commit 7280bb923ad9853f541207f8e1aa1b4f1c513c91
Author: Wei Liu <wei.liu2@xxxxxxxxxx>
AuthorDate: Fri Jan 30 16:03:18 2015 +0000
Commit: Wei Liu <wei.liu2@xxxxxxxxxx>
CommitDate: Fri Feb 27 16:04:54 2015 +0000
Remove in-tree mini-os directory
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
extras/mini-os-intree/COPYING | 36 -
extras/mini-os-intree/Config.mk | 99 --
extras/mini-os-intree/Makefile | 224 ---
extras/mini-os-intree/README | 46 -
extras/mini-os-intree/app.lds | 11 -
extras/mini-os-intree/arch/arm/arm32.S | 294 ----
extras/mini-os-intree/arch/arm/events.c | 31 -
extras/mini-os-intree/arch/arm/hypercalls32.S | 64 -
extras/mini-os-intree/arch/arm/minios-arm32.lds | 83 --
extras/mini-os-intree/arch/arm/mm.c | 139 --
extras/mini-os-intree/arch/arm/panic.c | 98 --
extras/mini-os-intree/arch/arm/sched.c | 47 -
extras/mini-os-intree/arch/arm/setup.c | 119 --
extras/mini-os-intree/arch/arm/time.c | 136 --
extras/mini-os-intree/arch/x86/Makefile | 30 -
extras/mini-os-intree/arch/x86/arch.mk | 22 -
extras/mini-os-intree/arch/x86/events.c | 35 -
extras/mini-os-intree/arch/x86/ioremap.c | 75 -
extras/mini-os-intree/arch/x86/iorw.c | 35 -
extras/mini-os-intree/arch/x86/minios-x86_32.lds | 74 -
extras/mini-os-intree/arch/x86/minios-x86_64.lds | 74 -
extras/mini-os-intree/arch/x86/mm.c | 957 ------------
extras/mini-os-intree/arch/x86/sched.c | 139 --
extras/mini-os-intree/arch/x86/setup.c | 168 ---
extras/mini-os-intree/arch/x86/time.c | 238 ---
extras/mini-os-intree/arch/x86/traps.c | 333 -----
extras/mini-os-intree/arch/x86/x86_32.S | 305 ----
extras/mini-os-intree/arch/x86/x86_64.S | 383 -----
extras/mini-os-intree/blkfront.c | 736 ----------
extras/mini-os-intree/config/MiniOS.mk | 10 -
extras/mini-os-intree/config/StdGNU.mk | 47 -
extras/mini-os-intree/config/arm32.mk | 22 -
extras/mini-os-intree/config/arm64.mk | 19 -
extras/mini-os-intree/config/x86_32.mk | 20 -
extras/mini-os-intree/config/x86_64.mk | 33 -
extras/mini-os-intree/console/console.c | 164 --
extras/mini-os-intree/console/console.h | 2 -
extras/mini-os-intree/console/xenbus.c | 195 ---
extras/mini-os-intree/console/xencons_ring.c | 195 ---
extras/mini-os-intree/daytime.c | 67 -
extras/mini-os-intree/domain_config | 19 -
extras/mini-os-intree/events.c | 269 ----
extras/mini-os-intree/fbfront.c | 710 ---------
extras/mini-os-intree/gntmap.c | 250 ----
extras/mini-os-intree/gnttab.c | 196 ---
extras/mini-os-intree/hypervisor.c | 132 --
extras/mini-os-intree/include/arch/cc.h | 87 --
extras/mini-os-intree/include/arch/perf.h | 15 -
extras/mini-os-intree/include/arch/sys_arch.h | 35 -
extras/mini-os-intree/include/arm/arch_endian.h | 7 -
extras/mini-os-intree/include/arm/arch_limits.h | 9 -
extras/mini-os-intree/include/arm/arch_mm.h | 38 -
extras/mini-os-intree/include/arm/arch_sched.h | 19 -
extras/mini-os-intree/include/arm/arch_spinlock.h | 36 -
.../include/arm/arm32/arch_wordsize.h | 1 -
extras/mini-os-intree/include/arm/gic.h | 1 -
extras/mini-os-intree/include/arm/hypercall-arm.h | 98 --
extras/mini-os-intree/include/arm/os.h | 216 ---
extras/mini-os-intree/include/arm/traps.h | 20 -
extras/mini-os-intree/include/blkfront.h | 54 -
extras/mini-os-intree/include/byteorder.h | 36 -
extras/mini-os-intree/include/byteswap.h | 39 -
extras/mini-os-intree/include/compiler.h | 10 -
extras/mini-os-intree/include/console.h | 89 --
extras/mini-os-intree/include/ctype.h | 60 -
extras/mini-os-intree/include/endian.h | 19 -
extras/mini-os-intree/include/err.h | 31 -
extras/mini-os-intree/include/errno-base.h | 39 -
extras/mini-os-intree/include/errno.h | 122 --
extras/mini-os-intree/include/events.h | 59 -
extras/mini-os-intree/include/fbfront.h | 46 -
extras/mini-os-intree/include/fcntl.h | 99 --
extras/mini-os-intree/include/gntmap.h | 35 -
extras/mini-os-intree/include/gnttab.h | 17 -
extras/mini-os-intree/include/hypervisor.h | 48 -
extras/mini-os-intree/include/ioremap.h | 33 -
extras/mini-os-intree/include/iorw.h | 16 -
extras/mini-os-intree/include/kernel.h | 9 -
extras/mini-os-intree/include/lib-gpl.h | 59 -
extras/mini-os-intree/include/lib.h | 230 ---
extras/mini-os-intree/include/linux/types.h | 5 -
extras/mini-os-intree/include/lwipopts.h | 23 -
.../mini-os-intree/include/minios-external/README | 24 -
.../include/minios-external/bsd-COPYRIGHT | 126 --
.../include/minios-external/bsd-queue.3 | 1044 -------------
.../minios-external/bsd-sys-queue-h-seddery | 72 -
.../include/minios-external/bsd-sys-queue.h | 637 --------
extras/mini-os-intree/include/mm.h | 82 -
extras/mini-os-intree/include/netfront.h | 24 -
extras/mini-os-intree/include/pcifront.h | 29 -
extras/mini-os-intree/include/posix/arpa/inet.h | 7 -
extras/mini-os-intree/include/posix/dirent.h | 24 -
extras/mini-os-intree/include/posix/err.h | 15 -
extras/mini-os-intree/include/posix/fcntl.h | 11 -
extras/mini-os-intree/include/posix/limits.h | 48 -
extras/mini-os-intree/include/posix/net/if.h | 85 --
extras/mini-os-intree/include/posix/netdb.h | 9 -
extras/mini-os-intree/include/posix/netinet/in.h | 7 -
extras/mini-os-intree/include/posix/netinet/tcp.h | 6 -
extras/mini-os-intree/include/posix/poll.h | 1 -
extras/mini-os-intree/include/posix/pthread.h | 64 -
extras/mini-os-intree/include/posix/signal.h | 10 -
extras/mini-os-intree/include/posix/stdlib.h | 8 -
extras/mini-os-intree/include/posix/strings.h | 12 -
extras/mini-os-intree/include/posix/sys/ioctl.h | 16 -
extras/mini-os-intree/include/posix/sys/mman.h | 22 -
extras/mini-os-intree/include/posix/sys/poll.h | 79 -
extras/mini-os-intree/include/posix/sys/select.h | 7 -
extras/mini-os-intree/include/posix/sys/socket.h | 31 -
extras/mini-os-intree/include/posix/sys/stat.h | 7 -
extras/mini-os-intree/include/posix/syslog.h | 37 -
extras/mini-os-intree/include/posix/termios.h | 87 --
extras/mini-os-intree/include/posix/time.h | 11 -
extras/mini-os-intree/include/posix/unistd.h | 16 -
extras/mini-os-intree/include/sched.h | 55 -
extras/mini-os-intree/include/semaphore.h | 110 --
extras/mini-os-intree/include/spinlock.h | 55 -
extras/mini-os-intree/include/sys/lock.h | 52 -
extras/mini-os-intree/include/sys/time.h | 47 -
extras/mini-os-intree/include/time.h | 63 -
extras/mini-os-intree/include/tpm_tis.h | 61 -
extras/mini-os-intree/include/tpmback.h | 104 --
extras/mini-os-intree/include/tpmfront.h | 97 --
extras/mini-os-intree/include/types.h | 74 -
extras/mini-os-intree/include/wait.h | 105 --
extras/mini-os-intree/include/waittypes.h | 32 -
extras/mini-os-intree/include/x86/arch_endian.h | 7 -
extras/mini-os-intree/include/x86/arch_limits.h | 20 -
extras/mini-os-intree/include/x86/arch_mm.h | 233 ---
extras/mini-os-intree/include/x86/arch_sched.h | 25 -
extras/mini-os-intree/include/x86/arch_spinlock.h | 94 --
extras/mini-os-intree/include/x86/os.h | 572 --------
extras/mini-os-intree/include/x86/traps.h | 78 -
.../include/x86/x86_32/arch_wordsize.h | 1 -
.../include/x86/x86_32/hypercall-x86_32.h | 337 -----
.../include/x86/x86_64/arch_wordsize.h | 2 -
.../include/x86/x86_64/hypercall-x86_64.h | 344 -----
extras/mini-os-intree/include/xen/COPYING | 38 -
extras/mini-os-intree/include/xen/arch-arm.h | 432 ------
.../mini-os-intree/include/xen/arch-arm/hvm/save.h | 39 -
extras/mini-os-intree/include/xen/arch-x86/cpuid.h | 90 --
.../mini-os-intree/include/xen/arch-x86/hvm/save.h | 630 --------
.../mini-os-intree/include/xen/arch-x86/xen-mca.h | 440 ------
.../include/xen/arch-x86/xen-x86_32.h | 171 ---
.../include/xen/arch-x86/xen-x86_64.h | 202 ---
extras/mini-os-intree/include/xen/arch-x86/xen.h | 303 ----
extras/mini-os-intree/include/xen/arch-x86_32.h | 27 -
extras/mini-os-intree/include/xen/arch-x86_64.h | 43 -
extras/mini-os-intree/include/xen/callback.h | 121 --
extras/mini-os-intree/include/xen/dom0_ops.h | 120 --
extras/mini-os-intree/include/xen/domctl.h | 1154 ---------------
extras/mini-os-intree/include/xen/elfnote.h | 271 ----
extras/mini-os-intree/include/xen/event_channel.h | 385 -----
extras/mini-os-intree/include/xen/features.h | 114 --
extras/mini-os-intree/include/xen/gcov.h | 115 --
extras/mini-os-intree/include/xen/grant_table.h | 682 ---------
extras/mini-os-intree/include/xen/hvm/e820.h | 34 -
.../include/xen/hvm/hvm_info_table.h | 72 -
extras/mini-os-intree/include/xen/hvm/hvm_op.h | 402 -----
.../include/xen/hvm/hvm_xs_strings.h | 80 -
extras/mini-os-intree/include/xen/hvm/ioreq.h | 129 --
extras/mini-os-intree/include/xen/hvm/params.h | 199 ---
extras/mini-os-intree/include/xen/hvm/pvdrivers.h | 49 -
extras/mini-os-intree/include/xen/hvm/save.h | 111 --
extras/mini-os-intree/include/xen/io/blkif.h | 640 --------
extras/mini-os-intree/include/xen/io/console.h | 51 -
extras/mini-os-intree/include/xen/io/fbif.h | 176 ---
extras/mini-os-intree/include/xen/io/fsif.h | 192 ---
extras/mini-os-intree/include/xen/io/kbdif.h | 132 --
extras/mini-os-intree/include/xen/io/libxenvchan.h | 97 --
extras/mini-os-intree/include/xen/io/netif.h | 305 ----
extras/mini-os-intree/include/xen/io/pciif.h | 125 --
extras/mini-os-intree/include/xen/io/protocols.h | 40 -
extras/mini-os-intree/include/xen/io/ring.h | 312 ----
extras/mini-os-intree/include/xen/io/tpmif.h | 143 --
extras/mini-os-intree/include/xen/io/usbif.h | 150 --
extras/mini-os-intree/include/xen/io/vscsiif.h | 260 ----
extras/mini-os-intree/include/xen/io/xenbus.h | 80 -
extras/mini-os-intree/include/xen/io/xs_wire.h | 149 --
extras/mini-os-intree/include/xen/kexec.h | 249 ----
extras/mini-os-intree/include/xen/mem_event.h | 134 --
extras/mini-os-intree/include/xen/memory.h | 587 --------
extras/mini-os-intree/include/xen/nmi.h | 85 --
extras/mini-os-intree/include/xen/physdev.h | 380 -----
extras/mini-os-intree/include/xen/platform.h | 606 --------
extras/mini-os-intree/include/xen/sched.h | 175 ---
extras/mini-os-intree/include/xen/sysctl.h | 719 ---------
extras/mini-os-intree/include/xen/tmem.h | 152 --
extras/mini-os-intree/include/xen/trace.h | 331 -----
extras/mini-os-intree/include/xen/vcpu.h | 240 ---
extras/mini-os-intree/include/xen/version.h | 96 --
extras/mini-os-intree/include/xen/xen-compat.h | 44 -
extras/mini-os-intree/include/xen/xen.h | 899 ------------
extras/mini-os-intree/include/xen/xencomm.h | 41 -
extras/mini-os-intree/include/xen/xenoprof.h | 152 --
extras/mini-os-intree/include/xen/xsm/flask_op.h | 201 ---
extras/mini-os-intree/include/xenbus.h | 120 --
extras/mini-os-intree/include/xmalloc.h | 44 -
extras/mini-os-intree/kernel.c | 198 ---
extras/mini-os-intree/lib/ctype.c | 29 -
extras/mini-os-intree/lib/math.c | 426 ------
extras/mini-os-intree/lib/printf.c | 786 ----------
extras/mini-os-intree/lib/stack_chk_fail.c | 8 -
extras/mini-os-intree/lib/string.c | 228 ---
extras/mini-os-intree/lib/sys.c | 1550 --------------------
extras/mini-os-intree/lib/xmalloc.c | 319 ----
extras/mini-os-intree/lib/xs.c | 194 ---
extras/mini-os-intree/lock.c | 112 --
extras/mini-os-intree/lwip-arch.c | 293 ----
extras/mini-os-intree/lwip-net.c | 386 -----
extras/mini-os-intree/main.c | 193 ---
extras/mini-os-intree/minios.mk | 76 -
extras/mini-os-intree/mm.c | 441 ------
extras/mini-os-intree/netfront.c | 675 ---------
extras/mini-os-intree/pcifront.c | 616 --------
extras/mini-os-intree/sched.c | 304 ----
extras/mini-os-intree/test.c | 577 --------
extras/mini-os-intree/tpm_tis.c | 1523 -------------------
extras/mini-os-intree/tpmback.c | 1136 --------------
extras/mini-os-intree/tpmfront.c | 631 --------
extras/mini-os-intree/xenbus/xenbus.c | 870 -----------
221 files changed, 0 insertions(+), 40498 deletions(-)
diff --git a/extras/mini-os-intree/COPYING b/extras/mini-os-intree/COPYING
deleted file mode 100644
index 1d9df6c..0000000
--- a/extras/mini-os-intree/COPYING
+++ /dev/null
@@ -1,36 +0,0 @@
-Certain files in this directory are licensed by the GNU
-General Public License version 2 (GPLv2). By default these
-files are not built and linked into MiniOs. Enabling them
-will cause the whole work to become covered by the GPLv2.
-
-The current set of GPLv2 features are:
-CONFIG_TPMFRONT
-CONFIG_TPMBACK
-CONFIG_TPM_TIS
-
-Do not use these if you do not want your MiniOS build to become
-GPL licensed!
-
-Copyright (c) 2009 Citrix Systems, Inc. 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 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 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.
-
diff --git a/extras/mini-os-intree/Config.mk b/extras/mini-os-intree/Config.mk
deleted file mode 100644
index e5d8ade..0000000
--- a/extras/mini-os-intree/Config.mk
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Compare $(1) and $(2) and replace $(2) with $(1) if they differ
-#
-# Typically $(1) is a newly generated file and $(2) is the target file
-# being regenerated. This prevents changing the timestamp of $(2) only
-# due to being auto regenereated with the same contents.
-define move-if-changed
- if ! cmp -s $(1) $(2); then mv -f $(1) $(2); else rm -f $(1); fi
-endef
-
-# cc-option: Check if compiler supports first option, else fall back to second.
-#
-# This is complicated by the fact that unrecognised -Wno-* options:
-# (a) are ignored unless the compilation emits a warning; and
-# (b) even then produce a warning rather than an error
-# To handle this we do a test compile, passing the option-under-test, on a code
-# fragment that will always produce a warning (integer assigned to pointer).
-# We then grep for the option-under-test in the compiler's output, the presence
-# of which would indicate an "unrecognized command-line option" warning/error.
-#
-# Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586)
-cc-option = $(shell if test -z "`echo 'void*p=1;' | \
- $(1) $(2) -S -o /dev/null -x c - 2>&1 | grep -- $(2) -`"; \
- then echo "$(2)"; else echo "$(3)"; fi ;)
-
-# Compatibility with Xen's stubdom build environment. If we are building
-# stubdom, some XEN_ variables are set, set MINIOS_ variables accordingly.
-#
-ifneq ($(XEN_ROOT),)
-MINI-OS_ROOT=$(XEN_ROOT)/extras/mini-os
-else
-MINI-OS_ROOT=$(TOPLEVEL_DIR)
-endif
-export MINI-OS_ROOT
-
-ifneq ($(XEN_TARGET_ARCH),)
-MINIOS_TARGET_ARCH = $(XEN_TARGET_ARCH)
-else
-MINIOS_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
- -e s/i86pc/x86_32/ -e s/amd64/x86_64/ \
- -e s/armv7.*/arm32/ -e s/armv8.*/arm64/ \
- -e s/aarch64/arm64/)
-
-MINIOS_TARGET_ARCH ?= $(MINIOS_COMPILE_ARCH)
-endif
-
-libc = $(stubdom)
-
-XEN_INTERFACE_VERSION := 0x00030205
-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 $(MINIOS_TARGET_ARCH)
-ifeq ($(findstring x86_,$(MINIOS_TARGET_ARCH)),x86_)
-TARGET_ARCH_FAM = x86
-else
-TARGET_ARCH_FAM = $(MINIOS_TARGET_ARCH)
-endif
-
-# The architecture family directory below mini-os.
-TARGET_ARCH_DIR := arch/$(TARGET_ARCH_FAM)
-
-# Export these variables for possible use in architecture dependent makefiles.
-export TARGET_ARCH_DIR
-export TARGET_ARCH_FAM
-
-# This is used for architecture specific links.
-# This can be overwritten from arch specific rules.
-ARCH_LINKS =
-
-# The path pointing to the architecture specific header files.
-ARCH_INC := $(TARGET_ARCH_FAM)
-
-# For possible special header directories.
-# This can be overwritten from arch specific rules.
-EXTRA_INC = $(ARCH_INC)
-
-# Include the architecture family's special makerules.
-# This must be before include minios.mk!
-include $(MINI-OS_ROOT)/$(TARGET_ARCH_DIR)/arch.mk
-
-extra_incl := $(foreach dir,$(EXTRA_INC),-isystem
$(MINI-OS_ROOT)/include/$(dir))
-
-DEF_CPPFLAGS += -isystem $(MINI-OS_ROOT)/include
-DEF_CPPFLAGS += -D__MINIOS__
-
-ifeq ($(libc),y)
-DEF_CPPFLAGS += -DHAVE_LIBC
-DEF_CPPFLAGS += -isystem $(MINI-OS_ROOT)/include/posix
-DEF_CPPFLAGS += -isystem $(XEN_ROOT)/tools/xenstore/include
-endif
-
-ifneq ($(LWIPDIR),)
-lwip=y
-DEF_CPPFLAGS += -DHAVE_LWIP
-DEF_CPPFLAGS += -isystem $(LWIPDIR)/src/include
-DEF_CPPFLAGS += -isystem $(LWIPDIR)/src/include/ipv4
-endif
diff --git a/extras/mini-os-intree/Makefile b/extras/mini-os-intree/Makefile
deleted file mode 100644
index f16520e..0000000
--- a/extras/mini-os-intree/Makefile
+++ /dev/null
@@ -1,224 +0,0 @@
-# Common Makefile for mini-os.
-#
-# Every architecture directory below mini-os/arch has to have a
-# Makefile and a arch.mk.
-#
-
-OBJ_DIR=$(CURDIR)
-TOPLEVEL_DIR=$(CURDIR)
-
-ifeq ($(MINIOS_CONFIG),)
-include Config.mk
-else
-EXTRA_DEPS += $(MINIOS_CONFIG)
-include $(MINIOS_CONFIG)
-endif
-
-include $(MINI-OS_ROOT)/config/MiniOS.mk
-
-# Configuration defaults
-CONFIG_START_NETWORK ?= y
-CONFIG_SPARSE_BSS ?= y
-CONFIG_QEMU_XS_ARGS ?= n
-CONFIG_TEST ?= n
-CONFIG_PCIFRONT ?= n
-CONFIG_BLKFRONT ?= y
-CONFIG_TPMFRONT ?= n
-CONFIG_TPM_TIS ?= n
-CONFIG_TPMBACK ?= n
-CONFIG_NETFRONT ?= y
-CONFIG_FBFRONT ?= y
-CONFIG_KBDFRONT ?= y
-CONFIG_CONSFRONT ?= y
-CONFIG_XENBUS ?= y
-CONFIG_XC ?=y
-CONFIG_LWIP ?= $(lwip)
-
-# Export config items as compiler directives
-flags-$(CONFIG_START_NETWORK) += -DCONFIG_START_NETWORK
-flags-$(CONFIG_SPARSE_BSS) += -DCONFIG_SPARSE_BSS
-flags-$(CONFIG_QEMU_XS_ARGS) += -DCONFIG_QEMU_XS_ARGS
-flags-$(CONFIG_PCIFRONT) += -DCONFIG_PCIFRONT
-flags-$(CONFIG_BLKFRONT) += -DCONFIG_BLKFRONT
-flags-$(CONFIG_TPMFRONT) += -DCONFIG_TPMFRONT
-flags-$(CONFIG_TPM_TIS) += -DCONFIG_TPM_TIS
-flags-$(CONFIG_TPMBACK) += -DCONFIG_TPMBACK
-flags-$(CONFIG_NETFRONT) += -DCONFIG_NETFRONT
-flags-$(CONFIG_KBDFRONT) += -DCONFIG_KBDFRONT
-flags-$(CONFIG_FBFRONT) += -DCONFIG_FBFRONT
-flags-$(CONFIG_CONSFRONT) += -DCONFIG_CONSFRONT
-flags-$(CONFIG_XENBUS) += -DCONFIG_XENBUS
-
-DEF_CFLAGS += $(flags-y)
-
-# Symlinks and headers that must be created before building the C files
-GENERATED_HEADERS := include/list.h $(ARCH_LINKS) include/mini-os
include/$(TARGET_ARCH_FAM)/mini-os
-
-EXTRA_DEPS += $(GENERATED_HEADERS)
-
-# Include common mini-os makerules.
-include minios.mk
-
-# Set tester flags
-# CFLAGS += -DBLKTEST_WRITE
-
-# Define some default flags for linking.
-LDLIBS :=
-APP_LDLIBS :=
-LDARCHLIB := -L$(OBJ_DIR)/$(TARGET_ARCH_DIR) -l$(ARCH_LIB_NAME)
-LDFLAGS_FINAL := -T $(TARGET_ARCH_DIR)/minios-$(MINIOS_TARGET_ARCH).lds
-
-# Prefix for global API names. All other symbols are localised before
-# linking with EXTRA_OBJS.
-GLOBAL_PREFIX := xenos_
-EXTRA_OBJS =
-
-TARGET := mini-os
-
-# Subdirectories common to mini-os
-SUBDIRS := lib xenbus console
-
-src-$(CONFIG_BLKFRONT) += blkfront.c
-src-$(CONFIG_TPMFRONT) += tpmfront.c
-src-$(CONFIG_TPM_TIS) += tpm_tis.c
-src-$(CONFIG_TPMBACK) += tpmback.c
-src-y += daytime.c
-src-y += events.c
-src-$(CONFIG_FBFRONT) += fbfront.c
-src-y += gntmap.c
-src-y += gnttab.c
-src-y += hypervisor.c
-src-y += kernel.c
-src-y += lock.c
-src-y += main.c
-src-y += mm.c
-src-$(CONFIG_NETFRONT) += netfront.c
-src-$(CONFIG_PCIFRONT) += pcifront.c
-src-y += sched.c
-src-$(CONFIG_TEST) += test.c
-
-src-y += lib/ctype.c
-src-y += lib/math.c
-src-y += lib/printf.c
-src-y += lib/stack_chk_fail.c
-src-y += lib/string.c
-src-y += lib/sys.c
-src-y += lib/xmalloc.c
-src-$(CONFIG_XENBUS) += lib/xs.c
-
-src-$(CONFIG_XENBUS) += xenbus/xenbus.c
-
-src-y += console/console.c
-src-y += console/xencons_ring.c
-src-$(CONFIG_CONSFRONT) += console/xenbus.c
-
-# The common mini-os objects to build.
-APP_OBJS :=
-OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(src-y))
-
-.PHONY: default
-default: $(OBJ_DIR)/$(TARGET)
-
-# Create special architecture specific links. The function arch_links
-# has to be defined in arch.mk (see include above).
-ifneq ($(ARCH_LINKS),)
-$(ARCH_LINKS):
- $(arch_links)
-endif
-
-include/list.h: include/minios-external/bsd-sys-queue-h-seddery
include/minios-external/bsd-sys-queue.h
- perl $^ --prefix=minios >$@.new
- $(call move-if-changed,$@.new,$@)
-
-# Used by stubdom's Makefile
-.PHONY: links
-links: $(GENERATED_HEADERS)
-
-include/mini-os:
- ln -sf . $@
-
-include/$(TARGET_ARCH_FAM)/mini-os:
- ln -sf . $@
-
-.PHONY: arch_lib
-arch_lib:
- $(MAKE) --directory=$(TARGET_ARCH_DIR)
OBJ_DIR=$(OBJ_DIR)/$(TARGET_ARCH_DIR) || exit 1;
-
-ifeq ($(CONFIG_LWIP),y)
-# lwIP library
-LWC := $(shell find $(LWIPDIR)/src -type f -name '*.c')
-LWC := $(filter-out %6.c %ip6_addr.c %ethernetif.c, $(LWC))
-LWO := $(patsubst %.c,%.o,$(LWC))
-LWO += $(OBJ_DIR)/lwip-arch.o
-ifeq ($(CONFIG_NETFRONT),y)
-LWO += $(OBJ_DIR)/lwip-net.o
-endif
-
-$(OBJ_DIR)/lwip.a: $(LWO)
- $(RM) $@
- $(AR) cqs $@ $^
-
-OBJS += $(OBJ_DIR)/lwip.a
-endif
-
-OBJS := $(filter-out $(OBJ_DIR)/lwip%.o $(LWO), $(OBJS))
-
-ifeq ($(libc),y)
-ifeq ($(CONFIG_XC),y)
-APP_LDLIBS += -L$(XEN_ROOT)/stubdom/libxc-$(XEN_TARGET_ARCH) -whole-archive
-lxenguest -lxenctrl -no-whole-archive
-endif
-APP_LDLIBS += -lpci
-APP_LDLIBS += -lz
-APP_LDLIBS += -lm
-LDLIBS += -lc
-endif
-
-ifneq ($(APP_OBJS)-$(lwip),-y)
-OBJS := $(filter-out $(OBJ_DIR)/daytime.o, $(OBJS))
-endif
-
-$(OBJ_DIR)/$(TARGET)_app.o: $(APP_OBJS) app.lds
- $(LD) -r -d $(LDFLAGS) -\( $^ -\) $(APP_LDLIBS) --undefined main -o $@
-
-ifneq ($(APP_OBJS),)
-APP_O=$(OBJ_DIR)/$(TARGET)_app.o
-endif
-
-$(OBJ_DIR)/$(TARGET): $(OBJS) $(APP_O) arch_lib
- $(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(APP_O) $(OBJS) $(LDARCHLIB) $(LDLIBS)
-o $@.o
- $(OBJCOPY) -w -G $(GLOBAL_PREFIX)* -G _start $@.o $@.o
- $(LD) $(LDFLAGS) $(LDFLAGS_FINAL) $@.o $(EXTRA_OBJS) -o $@
- gzip -f -9 -c $@ >$@.gz
-
-.PHONY: clean arch_clean
-
-arch_clean:
- $(MAKE) --directory=$(TARGET_ARCH_DIR)
OBJ_DIR=$(OBJ_DIR)/$(TARGET_ARCH_DIR) clean || exit 1;
-
-clean: arch_clean
- for dir in $(addprefix $(OBJ_DIR)/,$(SUBDIRS)); do \
- rm -f $$dir/*.o; \
- done
- rm -f include/list.h
- rm -f $(OBJ_DIR)/*.o *~ $(OBJ_DIR)/core $(OBJ_DIR)/$(TARGET).elf
$(OBJ_DIR)/$(TARGET).raw $(OBJ_DIR)/$(TARGET) $(OBJ_DIR)/$(TARGET).gz
- find . $(OBJ_DIR) -type l | xargs rm -f
- $(RM) $(OBJ_DIR)/lwip.a $(LWO)
- rm -f tags TAGS
-
-
-define all_sources
- ( find . -follow -name SCCS -prune -o -name '*.[chS]' -print )
-endef
-
-.PHONY: cscope
-cscope:
- $(all_sources) > cscope.files
- cscope -k -b -q
-
-.PHONY: tags
-tags:
- $(all_sources) | xargs ctags
-
-.PHONY: TAGS
-TAGS:
- $(all_sources) | xargs etags
diff --git a/extras/mini-os-intree/README b/extras/mini-os-intree/README
deleted file mode 100644
index 7960314..0000000
--- a/extras/mini-os-intree/README
+++ /dev/null
@@ -1,46 +0,0 @@
- Minimal OS
- ----------
-
-This shows some of the stuff that any guest OS will have to set up.
-
-This includes:
-
- * installing a virtual exception table
- * handling virtual exceptions
- * handling asynchronous events
- * enabling/disabling async events
- * parsing start_info struct at start-of-day
- * registering virtual interrupt handlers (for timer interrupts)
- * a simple page and memory allocator
- * minimal libc support
- * minimal Copy-on-Write support
- * network, block, framebuffer support
- * transparent access to FileSystem exports (see tools/fs-back)
-
-- to build it just type make.
-
-- to build it with TCP/IP support, download LWIP 1.3.2 source code and type
-
- make LWIPDIR=/path/to/lwip/source
-
-- to build it with much better libc support, see the stubdom/ directory
-
-- to start it do the following in domain0
- # xl create -c domain_config
-
-This starts the kernel and prints out a bunch of stuff and then once every
-second the system time.
-
-If you have setup a disk in the config file (e.g.
-disk = [ 'file:/tmp/foo,hda,r' ] ), it will loop reading it. If that disk is
-writable (e.g. disk = [ 'file:/tmp/foo,hda,w' ] ), it will write data patterns
-and re-read them.
-
-If you have setup a network in the config file (e.g. vif = [''] ), it will
-print incoming packets.
-
-If you have setup a VFB in the config file (e.g. vfb = ['type=sdl'] ), it will
-show a mouse with which you can draw color squares.
-
-If you have compiled it with TCP/IP support, it will run a daytime server on
-TCP port 13.
diff --git a/extras/mini-os-intree/app.lds b/extras/mini-os-intree/app.lds
deleted file mode 100644
index 4a48cc8..0000000
--- a/extras/mini-os-intree/app.lds
+++ /dev/null
@@ -1,11 +0,0 @@
-SECTIONS
-{
- .app.bss : {
- __app_bss_start = . ;
- *(.bss .bss.*)
- *(COMMON)
- *(.lbss .lbss.*)
- *(LARGE_COMMON)
- __app_bss_end = . ;
- }
-}
diff --git a/extras/mini-os-intree/arch/arm/arm32.S
b/extras/mini-os-intree/arch/arm/arm32.S
deleted file mode 100644
index a08a170..0000000
--- a/extras/mini-os-intree/arch/arm/arm32.S
+++ /dev/null
@@ -1,294 +0,0 @@
-@ Offset of the kernel within the RAM. This is a Linux/zImage convention which
we
-@ rely on for now.
-#define ZIMAGE_KERNEL_OFFSET 0x8000
-
-.section .text
-
-.globl _start
-_start:
- @ zImage header
-.rept 8
- mov r0, r0
-.endr
- b reset
- .word 0x016f2818 @ Magic numbers to help the loader
- .word 0 @ zImage start address (0 = relocatable)
- .word _edata - _start @ zImage end address (excludes bss section)
- @ end of zImage header
-
-@ Called at boot time. Sets up MMU, exception vectors and stack, and then
calls C arch_init() function.
-@ => r2 -> DTB
-@ <= never returns
-@ Note: this boot code needs to be within the first (1MB -
ZIMAGE_KERNEL_OFFSET) of _start.
-reset:
- @ Problem: the C code wants to be at a known address (_start), but Xen
might
- @ load us anywhere. We initialise the MMU (mapping virtual to physical
@ addresses)
- @ so everything ends up where the code expects it to be.
- @
- @ We calculate the offet between where the linker thought _start would
be and where
- @ it actually is and initialise the page tables to have that offset for
every page.
- @
- @ When we turn on the MMU, we're still executing at the old address. We
don't want
- @ the code to disappear from under us. So we have to do the mapping in
stages:
- @
- @ 1. set up a mapping to our current page from both its current and
desired addresses
- @ 2. enable the MMU
- @ 3. jump to the new address
- @ 4. remap all the other pages with the calculated offset
-
- adr r1, _start @ r1 = physical address of _start
- ldr r3, =_start @ r3 = (desired) virtual address of
_start
- sub r9, r1, r3 @ r9 = (physical - virtual) offset
-
- ldr r7, =_page_dir @ r7 = (desired) virtual addr of
translation table
- add r1, r7, r9 @ r1 = physical addr of translation
table
-
- @ Tell the system where our page table is located.
- @ This is the 16 KB top-level translation table, in which
- @ each word maps one 1MB virtual section to a physical section.
- @ Note: We leave TTBCR as 0, meaning that only TTBR0 is used and
- @ we use the short-descriptor format (32-bit physical addresses).
- orr r0, r1, #0b0001011 @ Sharable, Inner/Outer Write-Back
Write-Allocate Cacheable
- mcr p15, 0, r0, c2, c0, 0 @ set TTBR0
-
- @ Set access permission for domains.
- @ Domains are deprecated, but we have to configure them anyway.
- @ We mark every page as being domain 0 and set domain 0 to "client mode"
- @ (client mode = use access flags in page table).
- mov r0, #1 @ 1 = client
- mcr p15, 0, r0, c3, c0, 0 @ DACR
-
- @ Template (flags) for a 1 MB page-table entry.
- @ TEX[2:0] C B = 001 1 1 (outer and inner write-back, write-allocate)
- ldr r8, =(0x2 + /* Section entry */ \
- 0xc + /* C B */ \
- (3 << 10) + /* Read/write */ \
- (1 << 12) + /* TEX */ \
- (1 << 16) + /* Sharable */ \
- (1<<19)) /* Non-secure */
- @ r8 = template page table entry
-
- @ Add an entry for the current physical section, at the old and new
- @ addresses. It's OK if they're the same.
- mov r0, pc, lsr#20
- mov r0, r0, lsl#20 @ r0 = physical address of this code's
section start
- orr r3, r0, r8 @ r3 = table entry for this section
- ldr r4, =_start @ r4 = desired virtual address of this
section
- str r3, [r1, r4, lsr#18] @ map desired virtual section to this
code
- str r3, [r1, r0, lsr#18] @ map current section to this code too
-
- @ Invalidate TLB
- dsb @ Caching is off, but must still
prevent reordering
- mcr p15, 0, r1, c8, c7, 0 @ TLBIALL
-
- @ Enable MMU / SCTLR
- mrc p15, 0, r1, c1, c0, 0 @ SCTLR
- orr r1, r1, #3 << 11 @ enable icache, branch prediction
- orr r1, r1, #4 + 1 @ enable dcache, MMU
- mcr p15, 0, r1, c1, c0, 0 @ SCTLR
- isb
-
- ldr r1, =stage2 @ Virtual address of stage2
- bx r1
-
-@ Called once the MMU is enabled. The boot code and the page table are mapped,
-@ but nothing else is yet.
-@
-@ => r2 -> dtb (physical)
-@ r7 = virtual address of page table
-@ r8 = section entry template (flags)
-@ r9 = desired physical - virtual offset
-@ pc -> somewhere in newly-mapped virtual code section
-stage2:
- @ Invalidate TLB
- mcr p15, 0, r1, c8, c7, 0 @ TLBIALL
- isb
-
- @ The new mapping has now taken effect:
- @ r7 -> page_dir
-
- @ Fill in the whole top-level translation table (at page_dir).
- @ Populate the whole pagedir with 1MB section descriptors.
-
- mov r1, r7 @ r1 -> first section entry
- add r3, r1, #4*4*1024 @ limit (4 GB address space, 4 byte
entries)
- orr r0, r8, r9 @ r0 = entry mapping section zero to
start of physical RAM
-1:
- str r0, [r1],#4 @ write the section entry
- add r0, r0, #1 << 20 @ next physical page (wraps)
- cmp r1, r3
- bne 1b
-
- @ Invalidate TLB
- dsb
- mcr p15, 0, r1, c8, c7, 0 @ TLBIALL
- isb
-
- @ Set VBAR -> exception_vector_table
- @ SCTLR.V = 0
- adr r0, exception_vector_table
- mcr p15, 0, r0, c12, c0, 0
-
- @ Enable hardware floating point:
- @ 1. Access to CP10 and CP11 must be enabled in the Coprocessor Access
- @ Control Register (CP15.CACR):
- mrc p15, 0, r1, c1, c0, 2 @ CACR
- orr r1, r1, #(3 << 20) + (3 << 22) @ full access for CP10 & CP11
- mcr p15, 0, r1, c1, c0, 2
- @ 2. The EN bit in the FPEXC register must be set:
- vmrs r0, FPEXC
- orr r0, r0, #1<<30 @ EN (enable)
- vmsr FPEXC, r0
-
- @ Initialise 16 KB stack
- ldr sp, =_boot_stack_end
-
- sub r0, r2, r9 @ r0 -> device tree (virtual address)
- mov r1, r9 @ r1 = physical_address_offset
-
- b arch_init
-
-.pushsection .bss
-@ Note: calling arch_init zeroes out this region.
-.align 12
-.globl shared_info_page
-shared_info_page:
- .fill (1024), 4, 0x0
-
-.align 3
-.globl irqstack
-.globl irqstack_end
-irqstack:
- .fill (1024), 4, 0x0
-irqstack_end:
-
-fault_dump:
- .fill 18, 4, 0x0 @ On fault, we save the registers +
CPSR + handler address
-
-.popsection
-
-fault:
- cpsid aif @ Disable interrupts
-
- ldr r13, =fault_dump
- stmia r13, {r0-r12} @ Dump the non-banked registers
directly (well, unless from FIQ mode)
- str r14, [r13, #15 << 2] @ Our r14 is the faulting r15
- mov r0, r13
-
- @ Save the caller's CPSR (our SPSR) too.
- mrs r1, SPSR
- str r1, [r13, #16 << 2]
-
- @ Switch to the mode we came from to get r13 and r14.
- @ If coming from user mode, use System mode instead so we're still
- @ privileged.
- and r1, r1, #0x1f @ r1 = SPSR mode
- cmp r1, #0x10 @ If from User mode
- moveq r1, #0x1f @ Then use System mode instead
-
- mrs r3, CPSR @ r3 = our CPSR
- bic r2, r3, #0x1f
- orr r2, r2, r1
- msr CPSR, r2 @ Change to mode r1
-
- @ Save old mode's r13, r14
- str r13, [r0, #13 << 2]
- str r14, [r0, #14 << 2]
-
- msr CPSR, r3 @ Back to fault mode
-
- ldr r1, [r0, #17 << 2]
- sub r1, r1, #12 @ Fix to point at start of handler
- str r1, [r0, #17 << 2]
-
- @ Call C code to format the register dump.
- @ Clobbers the stack, but we're not going to return anyway.
- ldr sp, =_boot_stack_end
- bl dump_registers
- b do_exit
-
-@ We want to store a unique value to identify this handler, without corrupting
-@ any of the registers. So, we store r15 (which will point just after the
branch).
-@ Later, we subtract 12 so the user gets pointed at the start of the exception
-@ handler.
-#define FAULT(name) \
-.globl fault_##name; \
-fault_##name: \
- ldr r13, =fault_dump; \
- str r15, [r13, #17 << 2]; \
- b fault
-
-FAULT(reset)
-FAULT(undefined_instruction)
-FAULT(svc)
-FAULT(prefetch_call)
-FAULT(prefetch_abort)
-FAULT(data_abort)
-
-@ exception base address
-.align 5
-.globl exception_vector_table
-@ Note: remember to call CLREX if returning from an exception:
-@ "The architecture enables the local monitor to treat any exclusive store as
-@ matching a previous LDREX address. For this reason, use of the CLREX
-@ instruction to clear an existing tag is required on context switches."
-@ -- ARM Cortex-A Series Programmerâ??s Guide (Version: 4.0)
-exception_vector_table:
- b fault_reset
- b fault_undefined_instruction
- b fault_svc
- b fault_prefetch_call
- b fault_prefetch_abort
- b fault_data_abort
- b irq_handler @ IRQ
- .word 0xe7f000f0 @ abort on FIQ
-
-@ Call fault_undefined_instruction in "Undefined mode"
-bug:
- .word 0xe7f000f0 @ und/udf - a "Permanently Undefined"
instruction
-
-irq_handler:
- ldr sp, =irqstack_end
- push {r0 - r12, r14}
-
- ldr r0, IRQ_handler
- cmp r0, #0
- beq bug
- blx r0 @ call handler
-
- @ Return from IRQ
- pop {r0 - r12, r14}
- clrex
- subs pc, lr, #4
-
-.globl IRQ_handler
-IRQ_handler:
- .long 0x0
-
-
-.globl __arch_switch_threads
-@ => r0 = &prev->sp
-@ r1 = &next->sp
-@ <= returns to next thread's saved return address
-__arch_switch_threads:
- push {r4-r11} @ Store callee-saved registers to old thread's
stack
- stmia r0, {sp, lr} @ Store current sp and ip to prev's struct
thread
-
- ldmia r1, {sp, lr} @ Load new sp, ip from next's struct thread
- pop {r4-r11} @ Load callee-saved registers from new thread's
stack
-
- bx lr
-
-@ This is called if you try to divide by zero. For now, we make a supervisor
call,
-@ which will make us halt.
-.globl raise
-raise:
- svc 0
-
-.globl arm_start_thread
-arm_start_thread:
- pop {r0, r1}
- @ r0 = user data
- @ r1 -> thread's main function
- ldr lr, =exit_thread
- bx r1
diff --git a/extras/mini-os-intree/arch/arm/events.c
b/extras/mini-os-intree/arch/arm/events.c
deleted file mode 100644
index 441010d..0000000
--- a/extras/mini-os-intree/arch/arm/events.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <mini-os/os.h>
-#include <mini-os/events.h>
-#include <mini-os/hypervisor.h>
-#include <mini-os/console.h>
-
-static void virq_debug(evtchn_port_t port, struct pt_regs *regs, void *params)
-{
- printk("Received a virq_debug event\n");
-}
-
-evtchn_port_t debug_port = -1;
-void arch_init_events(void)
-{
- debug_port = bind_virq(VIRQ_DEBUG, (evtchn_handler_t)virq_debug, 0);
- if(debug_port == -1)
- BUG();
- unmask_evtchn(debug_port);
-}
-
-void arch_unbind_ports(void)
-{
- if(debug_port != -1)
- {
- mask_evtchn(debug_port);
- unbind_evtchn(debug_port);
- }
-}
-
-void arch_fini_events(void)
-{
-}
diff --git a/extras/mini-os-intree/arch/arm/hypercalls32.S
b/extras/mini-os-intree/arch/arm/hypercalls32.S
deleted file mode 100644
index af8e175..0000000
--- a/extras/mini-os-intree/arch/arm/hypercalls32.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/******************************************************************************
- * hypercall.S
- *
- * Xen hypercall wrappers
- *
- * Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>, Citrix, 2012
- *
- * 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.
- */
-
-#include <xen/xen.h>
-
-#define __HVC(imm16) .long ((0xE1400070 | (((imm16) & 0xFFF0) << 4) | ((imm16)
& 0x000F)) & 0xFFFFFFFF)
-
-#define XEN_IMM 0xEA1
-
-#define HYPERCALL_SIMPLE(hypercall) \
-.globl HYPERVISOR_##hypercall; \
-.align 4,0x90; \
-HYPERVISOR_##hypercall: \
- mov r12, #__HYPERVISOR_##hypercall; \
- __HVC(XEN_IMM); \
- mov pc, lr;
-
-#define _hypercall0 HYPERCALL_SIMPLE
-#define _hypercall1 HYPERCALL_SIMPLE
-#define _hypercall2 HYPERCALL_SIMPLE
-#define _hypercall3 HYPERCALL_SIMPLE
-#define _hypercall4 HYPERCALL_SIMPLE
-
-_hypercall2(sched_op);
-_hypercall2(memory_op);
-_hypercall2(event_channel_op);
-_hypercall2(xen_version);
-_hypercall3(console_io);
-_hypercall1(physdev_op);
-_hypercall3(grant_table_op);
-_hypercall3(vcpu_op);
-_hypercall1(sysctl);
-_hypercall1(domctl);
-_hypercall2(hvm_op);
-_hypercall1(xsm_op);
diff --git a/extras/mini-os-intree/arch/arm/minios-arm32.lds
b/extras/mini-os-intree/arch/arm/minios-arm32.lds
deleted file mode 100755
index 9627162..0000000
--- a/extras/mini-os-intree/arch/arm/minios-arm32.lds
+++ /dev/null
@@ -1,83 +0,0 @@
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-SECTIONS
-{
- /* Note: we currently assume that Xen will load the kernel image
- * at start-of-RAM + 0x8000. We use this initial 32 KB for the stack
- * and translation tables.
- */
- _boot_stack = 0x400000; /* 16 KB boot stack */
- _boot_stack_end = 0x404000;
- _page_dir = 0x404000; /* 16 KB translation table */
- . = 0x408000;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.gnu.warning)
- } = 0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) }
- . = ALIGN(4096);
- _erodata = .;
-
- /* newlib initialization functions */
- . = ALIGN(32 / 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 : {
- __CTOR_LIST__ = .;
- *(.ctors)
- CONSTRUCTORS
- LONG(0)
- __CTOR_END__ = .;
- }
-
- .dtors : {
- __DTOR_LIST__ = .;
- *(.dtors)
- LONG(0)
- __DTOR_END__ = .;
- }
-
- .data : { /* Data */
- *(.data)
- }
-
- /* Note: linker will insert any extra sections here, just before .bss */
-
- .bss : {
- _edata = .; /* End of data included in image */
- /* Nothing after here is included in the zImage's size */
-
- __bss_start = .;
- *(.bss)
- *(.app.bss)
- }
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
diff --git a/extras/mini-os-intree/arch/arm/mm.c
b/extras/mini-os-intree/arch/arm/mm.c
deleted file mode 100644
index efecc51..0000000
--- a/extras/mini-os-intree/arch/arm/mm.c
+++ /dev/null
@@ -1,139 +0,0 @@
-#include <mini-os/console.h>
-#include <xen/memory.h>
-#include <arch_mm.h>
-#include <mini-os/hypervisor.h>
-#include <libfdt.h>
-#include <lib.h>
-
-uint32_t physical_address_offset;
-
-unsigned long allocate_ondemand(unsigned long n, unsigned long alignment)
-{
- // FIXME
- BUG();
-}
-
-void arch_init_mm(unsigned long *start_pfn_p, unsigned long *max_pfn_p)
-{
- int memory;
- int prop_len = 0;
- const uint64_t *regs;
-
- printk(" _text: %p(VA)\n", &_text);
- printk(" _etext: %p(VA)\n", &_etext);
- printk(" _erodata: %p(VA)\n", &_erodata);
- printk(" _edata: %p(VA)\n", &_edata);
- printk(" stack start: %p(VA)\n", _boot_stack);
- printk(" _end: %p(VA)\n", &_end);
-
- if (fdt_num_mem_rsv(device_tree) != 0)
- printk("WARNING: reserved memory not supported!\n");
-
- memory = fdt_node_offset_by_prop_value(device_tree, -1, "device_type",
"memory", sizeof("memory"));
- if (memory < 0) {
- printk("No memory found in FDT!\n");
- BUG();
- }
-
- /* Xen will always provide us at least one bank of memory.
- * Mini-OS will use the first bank for the time-being. */
- regs = fdt_getprop(device_tree, memory, "reg", &prop_len);
-
- /* The property must contain at least the start address
- * and size, each of which is 8-bytes. */
- if (regs == NULL || prop_len < 16) {
- printk("Bad 'reg' property: %p %d\n", regs, prop_len);
- BUG();
- }
-
- unsigned int end = (unsigned int) &_end;
- paddr_t mem_base = fdt64_to_cpu(regs[0]);
- uint64_t mem_size = fdt64_to_cpu(regs[1]);
- printk("Found memory at 0x%llx (len 0x%llx)\n",
- (unsigned long long) mem_base, (unsigned long long) mem_size);
-
- BUG_ON(to_virt(mem_base) > (void *) &_text); /* Our image isn't
in our RAM! */
- *start_pfn_p = PFN_UP(to_phys(end));
- uint64_t heap_len = mem_size - (PFN_PHYS(*start_pfn_p) - mem_base);
- *max_pfn_p = *start_pfn_p + PFN_DOWN(heap_len);
-
- printk("Using pages %lu to %lu as free space for heap.\n", *start_pfn_p,
*max_pfn_p);
-
- /* The device tree is probably in memory that we're about to hand over to
the page
- * allocator, so move it to the end and reserve that space.
- */
- uint32_t fdt_size = fdt_totalsize(device_tree);
- void *new_device_tree = to_virt(((*max_pfn_p << PAGE_SHIFT) - fdt_size) &
PAGE_MASK);
- if (new_device_tree != device_tree) {
- memmove(new_device_tree, device_tree, fdt_size);
- }
- device_tree = new_device_tree;
- *max_pfn_p = to_phys(new_device_tree) >> PAGE_SHIFT;
-}
-
-void arch_init_p2m(unsigned long max_pfn)
-{
-}
-
-void arch_init_demand_mapping_area(unsigned long cur_pfn)
-{
-}
-
-/* Get Xen's suggested physical page assignments for the grant table. */
-static paddr_t get_gnttab_base(void)
-{
- int hypervisor;
- int len = 0;
- const uint64_t *regs;
- paddr_t gnttab_base;
-
- hypervisor = fdt_node_offset_by_compatible(device_tree, -1, "xen,xen");
- BUG_ON(hypervisor < 0);
-
- regs = fdt_getprop(device_tree, hypervisor, "reg", &len);
- /* The property contains the address and size, 8-bytes each. */
- if (regs == NULL || len < 16) {
- printk("Bad 'reg' property: %p %d\n", regs, len);
- BUG();
- }
-
- gnttab_base = fdt64_to_cpu(regs[0]);
-
- printk("FDT suggests grant table base %llx\n", (unsigned long long)
gnttab_base);
-
- return gnttab_base;
-}
-
-grant_entry_t *arch_init_gnttab(int nr_grant_frames)
-{
- struct xen_add_to_physmap xatp;
- struct gnttab_setup_table setup;
- xen_pfn_t frames[nr_grant_frames];
- paddr_t gnttab_table;
- int i, rc;
-
- gnttab_table = get_gnttab_base();
-
- for (i = 0; i < nr_grant_frames; i++)
- {
- xatp.domid = DOMID_SELF;
- xatp.size = 0; /* Seems to be unused */
- xatp.space = XENMAPSPACE_grant_table;
- xatp.idx = i;
- xatp.gpfn = (gnttab_table >> PAGE_SHIFT) + i;
- rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
- BUG_ON(rc != 0);
- }
-
- setup.dom = DOMID_SELF;
- setup.nr_frames = nr_grant_frames;
- set_xen_guest_handle(setup.frame_list, frames);
- HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1);
- if (setup.status != 0)
- {
- printk("GNTTABOP_setup_table failed; status = %d\n", setup.status);
- BUG();
- }
-
- return to_virt(gnttab_table);
-}
diff --git a/extras/mini-os-intree/arch/arm/panic.c
b/extras/mini-os-intree/arch/arm/panic.c
deleted file mode 100644
index 0ac49ad..0000000
--- a/extras/mini-os-intree/arch/arm/panic.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************************
- * panic.c
- *
- * Displays a register dump and stack trace for debugging.
- *
- * Copyright (c) 2014, Thomas Leonard
- *
- * 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/console.h>
-#include <arch_mm.h>
-
-extern int irqstack[];
-extern int irqstack_end[];
-
-typedef void handler(void);
-
-extern handler fault_reset;
-extern handler fault_undefined_instruction;
-extern handler fault_svc;
-extern handler fault_prefetch_call;
-extern handler fault_prefetch_abort;
-extern handler fault_data_abort;
-
-void dump_registers(int *saved_registers) {
- static int in_dump = 0;
- int *sp, *stack_top, *x;
- char *fault_name;
- void *fault_handler;
- int i;
-
- if (in_dump)
- {
- printk("Crash while in dump_registers! Not generating a second
report.\n");
- return;
- }
-
- in_dump = 1;
-
- fault_handler = (handler *) saved_registers[17];
- if (fault_handler == fault_reset)
- fault_name = "reset";
- else if (fault_handler == fault_undefined_instruction)
- fault_name = "undefined_instruction";
- else if (fault_handler == fault_svc)
- fault_name = "svc";
- else if (fault_handler == fault_prefetch_call)
- fault_name = "prefetch_call";
- else if (fault_handler == fault_prefetch_abort)
- fault_name = "prefetch_abort";
- else if (fault_handler == fault_data_abort)
- fault_name = "data_abort";
- else
- fault_name = "unknown fault type!";
-
- printk("Fault handler at %p called (%s)\n", fault_handler, fault_name);
-
- for (i = 0; i < 16; i++) {
- printk("r%d = %x\n", i, saved_registers[i]);
- }
- printk("CPSR = %x\n", saved_registers[16]);
-
- printk("Stack dump (innermost last)\n");
- sp = (int *) saved_registers[13];
-
- if (sp >= _boot_stack && sp <= _boot_stack_end)
- stack_top = _boot_stack_end; /* The boot stack */
- else if (sp >= irqstack && sp <= irqstack_end)
- stack_top = irqstack_end; /* The IRQ stack */
- else
- stack_top = (int *) ((((unsigned long) sp) | (__STACK_SIZE-1)) + 1);
/* A normal thread stack */
-
- for (x = stack_top - 1; x >= sp; x--)
- {
- printk(" [%8p] %8x\n", x, *x);
- }
- printk("End of stack\n");
-
- in_dump = 0;
-}
diff --git a/extras/mini-os-intree/arch/arm/sched.c
b/extras/mini-os-intree/arch/arm/sched.c
deleted file mode 100644
index 8091566..0000000
--- a/extras/mini-os-intree/arch/arm/sched.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <mini-os/sched.h>
-#include <mini-os/xmalloc.h>
-#include <mini-os/console.h>
-
-void arm_start_thread(void);
-
-/* The AAPCS requires the callee (e.g. __arch_switch_threads) to preserve
r4-r11. */
-#define CALLEE_SAVED_REGISTERS 8
-
-/* Architecture specific setup of thread creation */
-struct thread* arch_create_thread(char *name, void (*function)(void *),
- void *data)
-{
- struct thread *thread;
-
- thread = xmalloc(struct thread);
- /* We can't use lazy allocation here since the trap handler runs on the
stack */
- thread->stack = (char *)alloc_pages(STACK_SIZE_PAGE_ORDER);
- thread->name = name;
- printk("Thread \"%s\": pointer: 0x%p, stack: 0x%p\n", name, thread,
- thread->stack);
-
- /* Save pointer to the thread on the stack, used by current macro */
- *((unsigned long *)thread->stack) = (unsigned long)thread;
-
- /* Push the details to pass to arm_start_thread onto the stack. */
- int *sp = (int *) (thread->stack + STACK_SIZE);
- *(--sp) = (int) function;
- *(--sp) = (int) data;
-
- /* We leave room for the 8 callee-saved registers which we will
- * try to restore on thread switch, even though they're not needed
- * for the initial switch. */
- thread->sp = (unsigned long) sp - 4 * CALLEE_SAVED_REGISTERS;
-
- thread->ip = (unsigned long) arm_start_thread;
-
- return thread;
-}
-
-void run_idle_thread(void)
-{
- __asm__ __volatile__ ("mov sp, %0; bx %1"::
- "r"(idle_thread->sp + 4 * CALLEE_SAVED_REGISTERS),
- "r"(idle_thread->ip));
- /* Never arrive here! */
-}
diff --git a/extras/mini-os-intree/arch/arm/setup.c
b/extras/mini-os-intree/arch/arm/setup.c
deleted file mode 100644
index 06afe46..0000000
--- a/extras/mini-os-intree/arch/arm/setup.c
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <mini-os/os.h>
-#include <mini-os/kernel.h>
-#include <mini-os/gic.h>
-#include <mini-os/console.h>
-#include <xen/xen.h>
-#include <xen/memory.h>
-#include <xen/hvm/params.h>
-#include <arch_mm.h>
-#include <libfdt.h>
-
-/*
- * This structure contains start-of-day info, such as pagetable base pointer,
- * address of the shared_info structure, and things like that.
- * On x86, the hypervisor passes it to us. On ARM, we fill it in ourselves.
- */
-union start_info_union start_info_union;
-
-/*
- * Shared page for communicating with the hypervisor.
- * Events flags go here, for example.
- */
-shared_info_t *HYPERVISOR_shared_info;
-
-extern char shared_info_page[PAGE_SIZE];
-
-void *device_tree;
-
-static int hvm_get_parameter(int idx, uint64_t *value)
-{
- struct xen_hvm_param xhv;
- int ret;
-
- xhv.domid = DOMID_SELF;
- xhv.index = idx;
- ret = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
- if (ret < 0) {
- BUG();
- }
- *value = xhv.value;
- return ret;
-}
-
-static void get_console(void)
-{
- uint64_t v = -1;
-
- hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN, &v);
- start_info.console.domU.evtchn = v;
-
- hvm_get_parameter(HVM_PARAM_CONSOLE_PFN, &v);
- start_info.console.domU.mfn = v;
-
- printk("Console is on port %d\n", start_info.console.domU.evtchn);
- printk("Console ring is at mfn %lx\n", (unsigned long)
start_info.console.domU.mfn);
-}
-
-void get_xenbus(void)
-{
- uint64_t value;
-
- if (hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &value))
- BUG();
-
- start_info.store_evtchn = (int)value;
-
- if(hvm_get_parameter(HVM_PARAM_STORE_PFN, &value))
- BUG();
- start_info.store_mfn = (unsigned long)value;
-}
-
-/*
- * INITIAL C ENTRY POINT.
- */
-void arch_init(void *dtb_pointer, uint32_t physical_offset)
-{
- struct xen_add_to_physmap xatp;
- int r;
-
- memset(&__bss_start, 0, &_end - &__bss_start);
-
- physical_address_offset = physical_offset;
-
- xprintk("Virtual -> physical offset = %x\n", physical_address_offset);
-
- xprintk("Checking DTB at %p...\n", dtb_pointer);
-
- if ((r = fdt_check_header(dtb_pointer))) {
- xprintk("Invalid DTB from Xen: %s\n", fdt_strerror(r));
- BUG();
- }
- device_tree = dtb_pointer;
-
- /* Map shared_info page */
- xatp.domid = DOMID_SELF;
- xatp.idx = 0;
- xatp.space = XENMAPSPACE_shared_info;
- xatp.gpfn = virt_to_pfn(shared_info_page);
- if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp) != 0)
- BUG();
- HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
-
- /* Fill in start_info */
- get_console();
- get_xenbus();
-
- gic_init();
-
- start_kernel();
-}
-
-void
-arch_fini(void)
-{
-}
-
-void
-arch_do_exit(void)
-{
-}
diff --git a/extras/mini-os-intree/arch/arm/time.c
b/extras/mini-os-intree/arch/arm/time.c
deleted file mode 100644
index a088981..0000000
--- a/extras/mini-os-intree/arch/arm/time.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <mini-os/os.h>
-#include <mini-os/hypervisor.h>
-#include <mini-os/events.h>
-#include <mini-os/traps.h>
-#include <mini-os/types.h>
-#include <mini-os/time.h>
-#include <mini-os/lib.h>
-
-//#define VTIMER_DEBUG
-#ifdef VTIMER_DEBUG
-#define DEBUG(_f, _a...) \
- printk("MINI_OS(file=vtimer.c, line=%d) " _f , __LINE__, ## _a)
-#else
-#define DEBUG(_f, _a...) ((void)0)
-#endif
-
-/************************************************************************
- * Time functions
- *************************************************************************/
-
-static uint64_t cntvct_at_init;
-static uint32_t counter_freq;
-
-/* Compute with 96 bit intermediate result: (a*b)/c */
-uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
-{
- union {
- uint64_t ll;
- struct {
- uint32_t low, high;
- } l;
- } u, res;
- uint64_t rl, rh;
-
- u.ll = a;
- rl = (uint64_t)u.l.low * (uint64_t)b;
- rh = (uint64_t)u.l.high * (uint64_t)b;
- rh += (rl >> 32);
- res.l.high = rh / c;
- res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
- return res.ll;
-}
-
-static inline s_time_t ticks_to_ns(uint64_t ticks)
-{
- return muldiv64(ticks, SECONDS(1), counter_freq);
-}
-
-static inline uint64_t ns_to_ticks(s_time_t ns)
-{
- return muldiv64(ns, counter_freq, SECONDS(1));
-}
-
-/* Wall-clock time is not currently available on ARM, so this is always zero
for now:
- * http://wiki.xenproject.org/wiki/Xen_ARM_TODO#Expose_Wallclock_time_to_guests
- */
-static struct timespec shadow_ts;
-
-static inline uint64_t read_virtual_count(void)
-{
- uint32_t c_lo, c_hi;
- __asm__ __volatile__("mrrc p15, 1, %0, %1, c14":"=r"(c_lo), "=r"(c_hi));
- return (((uint64_t) c_hi) << 32) + c_lo;
-}
-
-/* monotonic_clock(): returns # of nanoseconds passed since time_init()
- * Note: This function is required to return accurate
- * time even in the absence of multiple timer ticks.
- */
-uint64_t monotonic_clock(void)
-{
- return ticks_to_ns(read_virtual_count() - cntvct_at_init);
-}
-
-int gettimeofday(struct timeval *tv, void *tz)
-{
- uint64_t nsec = monotonic_clock();
- nsec += shadow_ts.tv_nsec;
-
- tv->tv_sec = shadow_ts.tv_sec;
- tv->tv_sec += NSEC_TO_SEC(nsec);
- tv->tv_usec = NSEC_TO_USEC(nsec % 1000000000UL);
-
- return 0;
-}
-
-/* Set the timer and mask. */
-void write_timer_ctl(uint32_t value) {
- __asm__ __volatile__(
- "mcr p15, 0, %0, c14, c3, 1\n"
- "isb"::"r"(value));
-}
-
-void set_vtimer_compare(uint64_t value) {
- DEBUG("New CompareValue : %llx\n", value);
-
- __asm__ __volatile__("mcrr p15, 3, %0, %H0, c14"
- ::"r"(value));
-
- /* Enable timer and unmask the output signal */
- write_timer_ctl(1);
-}
-
-void unset_vtimer_compare(void) {
- /* Disable timer and mask the output signal */
- write_timer_ctl(2);
-}
-
-void block_domain(s_time_t until)
-{
- uint64_t until_count = ns_to_ticks(until) + cntvct_at_init;
- ASSERT(irqs_disabled());
- if (read_virtual_count() < until_count)
- {
- set_vtimer_compare(until_count);
- __asm__ __volatile__("wfi");
- unset_vtimer_compare();
-
- /* Give the IRQ handler a chance to handle whatever woke us up. */
- local_irq_enable();
- local_irq_disable();
- }
-}
-
-void init_time(void)
-{
- printk("Initialising timer interface\n");
-
- __asm__ __volatile__("mrc p15, 0, %0, c14, c0, 0":"=r"(counter_freq));
- cntvct_at_init = read_virtual_count();
- printk("Virtual Count register is %llx, freq = %d Hz\n", cntvct_at_init,
counter_freq);
-}
-
-void fini_time(void)
-{
-}
diff --git a/extras/mini-os-intree/arch/x86/Makefile
b/extras/mini-os-intree/arch/x86/Makefile
deleted file mode 100644
index 9f04a93..0000000
--- a/extras/mini-os-intree/arch/x86/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# x86 architecture specific makefiles.
-# It's is used for x86_32, x86_32y and x86_64
-#
-
-TOPLEVEL_DIR = $(CURDIR)/../..
-include ../../Config.mk
-
-# include arch.mk has to be before mini-os.mk!
-
-include arch.mk
-include ../../minios.mk
-
-# Sources here are all *.c *.S without $(MINIOS_TARGET_ARCH).S
-# This is handled in $(HEAD_ARCH_OBJ)
-ARCH_SRCS := $(wildcard *.c)
-
-# The objects built from the sources.
-ARCH_OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(ARCH_SRCS))
-
-all: $(OBJ_DIR)/$(ARCH_LIB)
-
-# $(HEAD_ARCH_OBJ) is only build here, needed on linking
-# in ../../Makefile.
-$(OBJ_DIR)/$(ARCH_LIB): $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
- $(AR) rv $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS)
-
-clean:
- rm -f $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
-
diff --git a/extras/mini-os-intree/arch/x86/arch.mk
b/extras/mini-os-intree/arch/x86/arch.mk
deleted file mode 100644
index 81e8118..0000000
--- a/extras/mini-os-intree/arch/x86/arch.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Architecture special makerules for x86 family
-# (including x86_32, x86_32y and x86_64).
-#
-
-ifeq ($(MINIOS_TARGET_ARCH),x86_32)
-ARCH_CFLAGS := -m32 -march=i686
-ARCH_LDFLAGS := -m elf_i386
-ARCH_ASFLAGS := -m32
-EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
-EXTRA_SRC += arch/$(EXTRA_INC)
-endif
-
-ifeq ($(MINIOS_TARGET_ARCH),x86_64)
-ARCH_CFLAGS := -m64 -mno-red-zone -fno-reorder-blocks
-ARCH_CFLAGS += -fno-asynchronous-unwind-tables
-ARCH_ASFLAGS := -m64
-ARCH_LDFLAGS := -m elf_x86_64
-EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
-EXTRA_SRC += arch/$(EXTRA_INC)
-endif
-
diff --git a/extras/mini-os-intree/arch/x86/events.c
b/extras/mini-os-intree/arch/x86/events.c
deleted file mode 100644
index 5198cf3..0000000
--- a/extras/mini-os-intree/arch/x86/events.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <mini-os/os.h>
-#include <mini-os/mm.h>
-#include <mini-os/events.h>
-
-#if defined(__x86_64__)
-char irqstack[2 * STACK_SIZE];
-
-static struct pda
-{
- int irqcount; /* offset 0 (used in x86_64.S) */
- char *irqstackptr; /* 8 */
-} cpu0_pda;
-#endif
-
-void arch_init_events(void)
-{
-#if defined(__x86_64__)
- asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0));
- wrmsrl(0xc0000101, &cpu0_pda); /* 0xc0000101 is MSR_GS_BASE */
- cpu0_pda.irqcount = -1;
- cpu0_pda.irqstackptr = (void*) (((unsigned long)irqstack + 2 * STACK_SIZE)
- & ~(STACK_SIZE - 1));
-#endif
-}
-
-void arch_unbind_ports(void)
-{
-}
-
-void arch_fini_events(void)
-{
-#if defined(__x86_64__)
- wrmsrl(0xc0000101, NULL); /* 0xc0000101 is MSR_GS_BASE */
-#endif
-}
diff --git a/extras/mini-os-intree/arch/x86/ioremap.c
b/extras/mini-os-intree/arch/x86/ioremap.c
deleted file mode 100644
index 4384b1c..0000000
--- a/extras/mini-os-intree/arch/x86/ioremap.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2009, Netronome Systems, Inc.
- *
- * 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/lib.h>
-#include <mini-os/xmalloc.h>
-#include <mini-os/mm.h>
-#include <mini-os/ioremap.h>
-
-/* Map a physical address range into virtual address space with provided
- * flags. Return a virtual address range it is mapped to. */
-static void *__do_ioremap(unsigned long phys_addr, unsigned long size,
- unsigned long prot)
-{
- unsigned long va;
- unsigned long mfns, mfn;
- unsigned long num_pages, offset;
-
- /* allow non page aligned addresses but for mapping we need to align them
*/
- offset = (phys_addr & ~PAGE_MASK);
- num_pages = (offset + size + PAGE_SIZE - 1) / PAGE_SIZE;
- phys_addr &= PAGE_MASK;
- mfns = mfn = phys_addr >> PAGE_SHIFT;
-
- va = (unsigned long)map_frames_ex(&mfns, num_pages, 0, 1, 1,
- DOMID_IO, NULL, prot);
- return (void *)(va + offset);
-}
-
-void *ioremap(unsigned long phys_addr, unsigned long size)
-{
- return __do_ioremap(phys_addr, size, IO_PROT);
-}
-
-void *ioremap_nocache(unsigned long phys_addr, unsigned long size)
-{
- return __do_ioremap(phys_addr, size, IO_PROT_NOCACHE);
-}
-
-/* Un-map the io-remapped region. Currently no list of existing mappings is
- * maintained, so the caller has to supply the size */
-void iounmap(void *virt_addr, unsigned long size)
-{
- unsigned long num_pages;
- unsigned long va = (unsigned long)virt_addr;
-
- /* work out number of frames to unmap */
- num_pages = ((va & ~PAGE_MASK) + size + PAGE_SIZE - 1) / PAGE_SIZE;
-
- unmap_frames(va & PAGE_MASK, num_pages);
-}
-
-
-
-/* -*- Mode:C; c-basic-offset:4; tab-width:4 indent-tabs-mode:nil -*- */
diff --git a/extras/mini-os-intree/arch/x86/iorw.c
b/extras/mini-os-intree/arch/x86/iorw.c
deleted file mode 100644
index 3080769..0000000
--- a/extras/mini-os-intree/arch/x86/iorw.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <mini-os/iorw.h>
-
-void iowrite8(volatile void* addr, uint8_t val)
-{
- *((volatile uint8_t*)addr) = val;
-}
-void iowrite16(volatile void* addr, uint16_t val)
-{
- *((volatile uint16_t*)addr) = val;
-}
-void iowrite32(volatile void* addr, uint32_t val)
-{
- *((volatile uint32_t*)addr) = val;
-}
-void iowrite64(volatile void* addr, uint64_t val)
-{
- *((volatile uint64_t*)addr) = val;
-}
-
-uint8_t ioread8(volatile void* addr)
-{
- return *((volatile uint8_t*) addr);
-}
-uint16_t ioread16(volatile void* addr)
-{
- return *((volatile uint16_t*) addr);
-}
-uint32_t ioread32(volatile void* addr)
-{
- return *((volatile uint32_t*) addr);
-}
-uint64_t ioread64(volatile void* addr)
-{
- return *((volatile uint64_t*) addr);
-}
diff --git a/extras/mini-os-intree/arch/x86/minios-x86_32.lds
b/extras/mini-os-intree/arch/x86/minios-x86_32.lds
deleted file mode 100644
index f5cabb6..0000000
--- a/extras/mini-os-intree/arch/x86/minios-x86_32.lds
+++ /dev/null
@@ -1,74 +0,0 @@
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
-SECTIONS
-{
- . = 0x0;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.gnu.warning)
- } = 0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) }
- . = ALIGN(4096);
- _erodata = .;
-
- /* newlib initialization functions */
- . = ALIGN(32 / 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 : {
- __CTOR_LIST__ = .;
- *(.ctors)
- CONSTRUCTORS
- LONG(0)
- __CTOR_END__ = .;
- }
-
- .dtors : {
- __DTOR_LIST__ = .;
- *(.dtors)
- LONG(0)
- __DTOR_END__ = .;
- }
-
- .data : { /* Data */
- *(.data)
- }
-
- _edata = .; /* End of data section */
-
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss)
- *(.app.bss)
- }
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
diff --git a/extras/mini-os-intree/arch/x86/minios-x86_64.lds
b/extras/mini-os-intree/arch/x86/minios-x86_64.lds
deleted file mode 100644
index 3da0a9f..0000000
--- a/extras/mini-os-intree/arch/x86/minios-x86_64.lds
+++ /dev/null
@@ -1,74 +0,0 @@
-OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
-OUTPUT_ARCH(i386:x86-64)
-ENTRY(_start)
-SECTIONS
-{
- . = 0x0;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.gnu.warning)
- } = 0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) }
- . = ALIGN(4096);
- _erodata = .;
-
- /* 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 : {
- __CTOR_LIST__ = .;
- *(.ctors)
- CONSTRUCTORS
- QUAD(0)
- __CTOR_END__ = .;
- }
-
- .dtors : {
- __DTOR_LIST__ = .;
- *(.dtors)
- QUAD(0)
- __DTOR_END__ = .;
- }
-
- .data : { /* Data */
- *(.data)
- }
-
- _edata = .; /* End of data section */
-
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss)
- *(.app.bss)
- }
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
diff --git a/extras/mini-os-intree/arch/x86/mm.c
b/extras/mini-os-intree/arch/x86/mm.c
deleted file mode 100644
index 9c6d1b8..0000000
--- a/extras/mini-os-intree/arch/x86/mm.c
+++ /dev/null
@@ -1,957 +0,0 @@
-/*
- ****************************************************************************
- * (C) 2003 - Rolf Neugebauer - Intel Research Cambridge
- * (C) 2005 - Grzegorz Milos - Intel Research Cambridge
- ****************************************************************************
- *
- * File: mm.c
- * Author: Rolf Neugebauer (neugebar@xxxxxxxxxxxxx)
- * Changes: Grzegorz Milos
- *
- * Date: Aug 2003, chages Aug 2005
- *
- * Environment: Xen Minimal OS
- * Description: memory management related functions
- * contains buddy page allocator from Xen.
- *
- ****************************************************************************
- * 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/hypervisor.h>
-#include <mini-os/mm.h>
-#include <mini-os/types.h>
-#include <mini-os/lib.h>
-#include <mini-os/xmalloc.h>
-#include <xen/memory.h>
-
-#ifdef MM_DEBUG
-#define DEBUG(_f, _a...) \
- printk("MINI_OS(file=mm.c, line=%d) " _f "\n", __LINE__, ## _a)
-#else
-#define DEBUG(_f, _a...) ((void)0)
-#endif
-
-unsigned long *phys_to_machine_mapping;
-unsigned long mfn_zero;
-extern char stack[];
-extern void page_walk(unsigned long va);
-
-/*
- * Make pt_pfn a new 'level' page table frame and hook it into the page
- * table at offset in previous level MFN (pref_l_mfn). pt_pfn is a guest
- * PFN.
- */
-static void new_pt_frame(unsigned long *pt_pfn, unsigned long prev_l_mfn,
- unsigned long offset, unsigned long level)
-{
- pgentry_t *tab = (pgentry_t *)start_info.pt_base;
- unsigned long pt_page = (unsigned long)pfn_to_virt(*pt_pfn);
- pgentry_t prot_e, prot_t;
- mmu_update_t mmu_updates[1];
- int rc;
-
- prot_e = prot_t = 0;
- DEBUG("Allocating new L%d pt frame for pfn=%lx, "
- "prev_l_mfn=%lx, offset=%lx",
- level, *pt_pfn, prev_l_mfn, offset);
-
- /* We need to clear the page, otherwise we might fail to map it
- as a page table page */
- memset((void*) pt_page, 0, PAGE_SIZE);
-
- switch ( level )
- {
- case L1_FRAME:
- prot_e = L1_PROT;
- prot_t = L2_PROT;
- break;
- case L2_FRAME:
- prot_e = L2_PROT;
- prot_t = L3_PROT;
- break;
-#if defined(__x86_64__)
- case L3_FRAME:
- prot_e = L3_PROT;
- prot_t = L4_PROT;
- break;
-#endif
- default:
- printk("new_pt_frame() called with invalid level number %d\n", level);
- do_exit();
- break;
- }
-
- /* Make PFN a page table page */
-#if defined(__x86_64__)
- tab = pte_to_virt(tab[l4_table_offset(pt_page)]);
-#endif
- tab = pte_to_virt(tab[l3_table_offset(pt_page)]);
-
- mmu_updates[0].ptr = (tab[l2_table_offset(pt_page)] & PAGE_MASK) +
- sizeof(pgentry_t) * l1_table_offset(pt_page);
- mmu_updates[0].val = (pgentry_t)pfn_to_mfn(*pt_pfn) << PAGE_SHIFT |
- (prot_e & ~_PAGE_RW);
-
- if ( (rc = HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF)) < 0 )
- {
- printk("ERROR: PTE for new page table page could not be updated\n");
- printk(" mmu_update failed with rc=%d\n", rc);
- do_exit();
- }
-
- /* Hook the new page table page into the hierarchy */
- mmu_updates[0].ptr =
- ((pgentry_t)prev_l_mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset;
- mmu_updates[0].val = (pgentry_t)pfn_to_mfn(*pt_pfn) << PAGE_SHIFT | prot_t;
-
- if ( (rc = HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF)) < 0 )
- {
- printk("ERROR: mmu_update failed with rc=%d\n", rc);
- do_exit();
- }
-
- *pt_pfn += 1;
-}
-
-/*
- * Checks if a pagetable frame is needed at 'level' to map a given
- * address. Note, this function is specific to the initial page table
- * building.
- */
-static int need_pt_frame(unsigned long va, int level)
-{
- unsigned long hyp_virt_start = HYPERVISOR_VIRT_START;
-#if defined(__x86_64__)
- unsigned long hyp_virt_end = HYPERVISOR_VIRT_END;
-#else
- unsigned long hyp_virt_end = 0xffffffff;
-#endif
-
- /* In general frames will _not_ be needed if they were already
- allocated to map the hypervisor into our VA space */
-#if defined(__x86_64__)
- if ( level == L3_FRAME )
- {
- if ( l4_table_offset(va) >=
- l4_table_offset(hyp_virt_start) &&
- l4_table_offset(va) <=
- l4_table_offset(hyp_virt_end))
- return 0;
- return 1;
- }
- else
-#endif
-
- if ( level == L2_FRAME )
- {
-#if defined(__x86_64__)
- if ( l4_table_offset(va) >=
- l4_table_offset(hyp_virt_start) &&
- l4_table_offset(va) <=
- l4_table_offset(hyp_virt_end))
-#endif
- if ( l3_table_offset(va) >=
- l3_table_offset(hyp_virt_start) &&
- l3_table_offset(va) <=
- l3_table_offset(hyp_virt_end))
- return 0;
-
- return 1;
- }
- else
- /* Always need l1 frames */
- if ( level == L1_FRAME )
- return 1;
-
- printk("ERROR: Unknown frame level %d, hypervisor %llx,%llx\n",
- level, hyp_virt_start, hyp_virt_end);
- return -1;
-}
-
-/*
- * Build the initial pagetable.
- */
-static void build_pagetable(unsigned long *start_pfn, unsigned long *max_pfn)
-{
- unsigned long start_address, end_address;
- unsigned long pfn_to_map, pt_pfn = *start_pfn;
- static mmu_update_t mmu_updates[L1_PAGETABLE_ENTRIES + 1];
- pgentry_t *tab = (pgentry_t *)start_info.pt_base, page;
- unsigned long pt_mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base));
- unsigned long offset;
- int count = 0;
- int rc;
-
- pfn_to_map =
- (start_info.nr_pt_frames - NOT_L1_FRAMES) * L1_PAGETABLE_ENTRIES;
-
- if ( *max_pfn >= virt_to_pfn(HYPERVISOR_VIRT_START) )
- {
- printk("WARNING: Mini-OS trying to use Xen virtual space. "
- "Truncating memory from %dMB to ",
- ((unsigned long)pfn_to_virt(*max_pfn) -
- (unsigned long)&_text)>>20);
- *max_pfn = virt_to_pfn(HYPERVISOR_VIRT_START - PAGE_SIZE);
- printk("%dMB\n",
- ((unsigned long)pfn_to_virt(*max_pfn) -
- (unsigned long)&_text)>>20);
- }
-
- start_address = (unsigned long)pfn_to_virt(pfn_to_map);
- end_address = (unsigned long)pfn_to_virt(*max_pfn);
-
- /* We worked out the virtual memory range to map, now mapping loop */
- printk("Mapping memory range 0x%lx - 0x%lx\n", start_address, end_address);
-
- while ( start_address < end_address )
- {
- tab = (pgentry_t *)start_info.pt_base;
- pt_mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base));
-
-#if defined(__x86_64__)
- offset = l4_table_offset(start_address);
- /* Need new L3 pt frame */
- if ( !(start_address & L3_MASK) )
- if ( need_pt_frame(start_address, L3_FRAME) )
- new_pt_frame(&pt_pfn, pt_mfn, offset, L3_FRAME);
-
- page = tab[offset];
- pt_mfn = pte_to_mfn(page);
- tab = to_virt(mfn_to_pfn(pt_mfn) << PAGE_SHIFT);
-#endif
- offset = l3_table_offset(start_address);
- /* Need new L2 pt frame */
- if ( !(start_address & L2_MASK) )
- if ( need_pt_frame(start_address, L2_FRAME) )
- new_pt_frame(&pt_pfn, pt_mfn, offset, L2_FRAME);
-
- page = tab[offset];
- pt_mfn = pte_to_mfn(page);
- tab = to_virt(mfn_to_pfn(pt_mfn) << PAGE_SHIFT);
- offset = l2_table_offset(start_address);
- /* Need new L1 pt frame */
- if ( !(start_address & L1_MASK) )
- if ( need_pt_frame(start_address, L1_FRAME) )
- new_pt_frame(&pt_pfn, pt_mfn, offset, L1_FRAME);
-
- page = tab[offset];
- pt_mfn = pte_to_mfn(page);
- offset = l1_table_offset(start_address);
-
- mmu_updates[count].ptr =
- ((pgentry_t)pt_mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset;
- mmu_updates[count].val =
- (pgentry_t)pfn_to_mfn(pfn_to_map++) << PAGE_SHIFT | L1_PROT;
- count++;
- if ( count == L1_PAGETABLE_ENTRIES || pfn_to_map == *max_pfn )
- {
- rc = HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF);
- if ( rc < 0 )
- {
- printk("ERROR: build_pagetable(): PTE could not be updated\n");
- printk(" mmu_update failed with rc=%d\n", rc);
- do_exit();
- }
- count = 0;
- }
- start_address += PAGE_SIZE;
- }
-
- *start_pfn = pt_pfn;
-}
-
-/*
- * Mark portion of the address space read only.
- */
-extern struct shared_info shared_info;
-static void set_readonly(void *text, void *etext)
-{
- unsigned long start_address =
- ((unsigned long) text + PAGE_SIZE - 1) & PAGE_MASK;
- unsigned long end_address = (unsigned long) etext;
- static mmu_update_t mmu_updates[L1_PAGETABLE_ENTRIES + 1];
- pgentry_t *tab = (pgentry_t *)start_info.pt_base, page;
- unsigned long mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base));
- unsigned long offset;
- int count = 0;
- int rc;
-
- printk("setting %p-%p readonly\n", text, etext);
-
- while ( start_address + PAGE_SIZE <= end_address )
- {
- tab = (pgentry_t *)start_info.pt_base;
- mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base));
-
-#if defined(__x86_64__)
- offset = l4_table_offset(start_address);
- page = tab[offset];
- mfn = pte_to_mfn(page);
- tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT);
-#endif
- offset = l3_table_offset(start_address);
- page = tab[offset];
- mfn = pte_to_mfn(page);
- tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT);
- offset = l2_table_offset(start_address);
- page = tab[offset];
- mfn = pte_to_mfn(page);
- tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT);
-
- offset = l1_table_offset(start_address);
-
- if ( start_address != (unsigned long)&shared_info )
- {
- mmu_updates[count].ptr =
- ((pgentry_t)mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset;
- mmu_updates[count].val = tab[offset] & ~_PAGE_RW;
- count++;
- }
- else
- printk("skipped %p\n", start_address);
-
- start_address += PAGE_SIZE;
-
- if ( count == L1_PAGETABLE_ENTRIES ||
- start_address + PAGE_SIZE > end_address )
- {
- rc = HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF);
- if ( rc < 0 )
- {
- printk("ERROR: set_readonly(): PTE could not be updated\n");
- do_exit();
- }
- count = 0;
- }
- }
-
- {
- mmuext_op_t op = {
- .cmd = MMUEXT_TLB_FLUSH_ALL,
- };
- int count;
- HYPERVISOR_mmuext_op(&op, 1, &count, DOMID_SELF);
- }
-}
-
-/*
- * A useful mem testing function. Write the address to every address in the
- * range provided and read back the value. If verbose, print page walk to
- * some VA
- *
- * If we get MEM_TEST_MAX_ERRORS we might as well stop
- */
-#define MEM_TEST_MAX_ERRORS 10
-int mem_test(unsigned long *start_va, unsigned long *end_va, int verbose)
-{
- unsigned long mask = 0x10000;
- unsigned long *pointer;
- int error_count = 0;
-
- /* write values and print page walks */
- if ( verbose && (((unsigned long)start_va) & 0xfffff) )
- {
- printk("MemTest Start: 0x%lx\n", start_va);
- page_walk((unsigned long)start_va);
- }
- for ( pointer = start_va; pointer < end_va; pointer++ )
- {
- if ( verbose && !(((unsigned long)pointer) & 0xfffff) )
- {
- printk("Writing to %lx\n", pointer);
- page_walk((unsigned long)pointer);
- }
- *pointer = (unsigned long)pointer & ~mask;
- }
- if ( verbose && (((unsigned long)end_va) & 0xfffff) )
- {
- printk("MemTest End: %lx\n", end_va-1);
- page_walk((unsigned long)end_va-1);
- }
-
- /* verify values */
- for ( pointer = start_va; pointer < end_va; pointer++ )
- {
- if ( ((unsigned long)pointer & ~mask) != *pointer )
- {
- printk("Read error at 0x%lx. Read: 0x%lx, should read 0x%lx\n",
- (unsigned long)pointer, *pointer,
- ((unsigned long)pointer & ~mask));
- error_count++;
- if ( error_count >= MEM_TEST_MAX_ERRORS )
- {
- printk("mem_test: too many errors\n");
- return -1;
- }
- }
- }
- return 0;
-}
-
-
-/*
- * get the PTE for virtual address va if it exists. Otherwise NULL.
- */
-static pgentry_t *get_pgt(unsigned long va)
-{
- unsigned long mfn;
- pgentry_t *tab;
- unsigned offset;
-
- tab = (pgentry_t *)start_info.pt_base;
- mfn = virt_to_mfn(start_info.pt_base);
-
-#if defined(__x86_64__)
- offset = l4_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- return NULL;
- mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(mfn);
-#endif
- offset = l3_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- return NULL;
- mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(mfn);
- offset = l2_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- return NULL;
- mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(mfn);
- offset = l1_table_offset(va);
- return &tab[offset];
-}
-
-
-/*
- * return a valid PTE for a given virtual address. If PTE does not exist,
- * allocate page-table pages.
- */
-pgentry_t *need_pgt(unsigned long va)
-{
- unsigned long pt_mfn;
- pgentry_t *tab;
- unsigned long pt_pfn;
- unsigned offset;
-
- tab = (pgentry_t *)start_info.pt_base;
- pt_mfn = virt_to_mfn(start_info.pt_base);
-
-#if defined(__x86_64__)
- offset = l4_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- {
- pt_pfn = virt_to_pfn(alloc_page());
- new_pt_frame(&pt_pfn, pt_mfn, offset, L3_FRAME);
- }
- ASSERT(tab[offset] & _PAGE_PRESENT);
- pt_mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(pt_mfn);
-#endif
- offset = l3_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- {
- pt_pfn = virt_to_pfn(alloc_page());
- new_pt_frame(&pt_pfn, pt_mfn, offset, L2_FRAME);
- }
- ASSERT(tab[offset] & _PAGE_PRESENT);
- pt_mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(pt_mfn);
- offset = l2_table_offset(va);
- if ( !(tab[offset] & _PAGE_PRESENT) )
- {
- pt_pfn = virt_to_pfn(alloc_page());
- new_pt_frame(&pt_pfn, pt_mfn, offset, L1_FRAME);
- }
- ASSERT(tab[offset] & _PAGE_PRESENT);
- pt_mfn = pte_to_mfn(tab[offset]);
- tab = mfn_to_virt(pt_mfn);
-
- offset = l1_table_offset(va);
- return &tab[offset];
-}
-
-/*
- * Reserve an area of virtual address space for mappings and Heap
- */
-static unsigned long demand_map_area_start;
-#ifdef __x86_64__
-#define DEMAND_MAP_PAGES ((128ULL << 30) / PAGE_SIZE)
-#else
-#define DEMAND_MAP_PAGES ((2ULL << 30) / PAGE_SIZE)
-#endif
-
-#ifndef HAVE_LIBC
-#define HEAP_PAGES 0
-#else
-unsigned long heap, brk, heap_mapped, heap_end;
-#ifdef __x86_64__
-#define HEAP_PAGES ((128ULL << 30) / PAGE_SIZE)
-#else
-#define HEAP_PAGES ((1ULL << 30) / PAGE_SIZE)
-#endif
-#endif
-
-void arch_init_demand_mapping_area(unsigned long cur_pfn)
-{
- cur_pfn++;
-
- demand_map_area_start = (unsigned long) pfn_to_virt(cur_pfn);
- cur_pfn += DEMAND_MAP_PAGES;
- printk("Demand map pfns at %lx-%lx.\n",
- demand_map_area_start, pfn_to_virt(cur_pfn));
-
-#ifdef HAVE_LIBC
- cur_pfn++;
- heap_mapped = brk = heap = (unsigned long) pfn_to_virt(cur_pfn);
- cur_pfn += HEAP_PAGES;
- heap_end = (unsigned long) pfn_to_virt(cur_pfn);
- printk("Heap resides at %lx-%lx.\n", brk, heap_end);
-#endif
-}
-
-unsigned long allocate_ondemand(unsigned long n, unsigned long alignment)
-{
- unsigned long x;
- unsigned long y = 0;
-
- /* Find a properly aligned run of n contiguous frames */
- for ( x = 0;
- x <= DEMAND_MAP_PAGES - n;
- x = (x + y + 1 + alignment - 1) & ~(alignment - 1) )
- {
- unsigned long addr = demand_map_area_start + x * PAGE_SIZE;
- pgentry_t *pgt = get_pgt(addr);
- for ( y = 0; y < n; y++, addr += PAGE_SIZE )
- {
- if ( !(addr & L1_MASK) )
- pgt = get_pgt(addr);
- if ( pgt )
- {
- if ( *pgt & _PAGE_PRESENT )
- break;
- pgt++;
- }
- }
- if ( y == n )
- break;
- }
- if ( y != n )
- {
- printk("Failed to find %ld frames!\n", n);
- return 0;
- }
- return demand_map_area_start + x * PAGE_SIZE;
-}
-
-/*
- * Map an array of MFNs contiguously into virtual address space starting at
- * va. map f[i*stride]+i*increment for i in 0..n-1.
- */
-#define MAP_BATCH ((STACK_SIZE / 2) / sizeof(mmu_update_t))
-void do_map_frames(unsigned long va,
- const unsigned long *mfns, unsigned long n,
- unsigned long stride, unsigned long incr,
- domid_t id, int *err, unsigned long prot)
-{
- pgentry_t *pgt = NULL;
- unsigned long done = 0;
- unsigned long i;
- int rc;
-
- if ( !mfns )
- {
- printk("do_map_frames: no mfns supplied\n");
- return;
- }
- DEBUG("va=%p n=0x%lx, mfns[0]=0x%lx stride=0x%lx incr=0x%lx prot=0x%lx\n",
- va, n, mfns[0], stride, incr, prot);
-
- if ( err )
- memset(err, 0x00, n * sizeof(int));
- while ( done < n )
- {
- unsigned long todo;
-
- if ( err )
- todo = 1;
- else
- todo = n - done;
-
- if ( todo > MAP_BATCH )
- todo = MAP_BATCH;
-
- {
- mmu_update_t mmu_updates[todo];
-
- for ( i = 0; i < todo; i++, va += PAGE_SIZE, pgt++)
- {
- if ( !pgt || !(va & L1_MASK) )
- pgt = need_pgt(va);
-
- mmu_updates[i].ptr = virt_to_mach(pgt) | MMU_NORMAL_PT_UPDATE;
- mmu_updates[i].val = ((pgentry_t)(mfns[(done + i) * stride] +
- (done + i) * incr)
- << PAGE_SHIFT) | prot;
- }
-
- rc = HYPERVISOR_mmu_update(mmu_updates, todo, NULL, id);
- if ( rc < 0 )
- {
- if (err)
- err[done * stride] = rc;
- else {
- printk("Map %ld (%lx, ...) at %p failed: %d.\n",
- todo, mfns[done * stride] + done * incr, va, rc);
- do_exit();
- }
- }
- }
- done += todo;
- }
-}
-
-/*
- * Map an array of MFNs contiguous into virtual address space. Virtual
- * addresses are allocated from the on demand area.
- */
-void *map_frames_ex(const unsigned long *mfns, unsigned long n,
- unsigned long stride, unsigned long incr,
- unsigned long alignment,
- domid_t id, int *err, unsigned long prot)
-{
- unsigned long va = allocate_ondemand(n, alignment);
-
- if ( !va )
- return NULL;
-
- do_map_frames(va, mfns, n, stride, incr, id, err, prot);
-
- return (void *)va;
-}
-
-/*
- * Unmap nun_frames frames mapped at virtual address va.
- */
-#define UNMAP_BATCH ((STACK_SIZE / 2) / sizeof(multicall_entry_t))
-int unmap_frames(unsigned long va, unsigned long num_frames)
-{
- int n = UNMAP_BATCH;
- multicall_entry_t call[n];
- int ret;
- int i;
-
- ASSERT(!((unsigned long)va & ~PAGE_MASK));
-
- DEBUG("va=%p, num=0x%lx\n", va, num_frames);
-
- while ( num_frames ) {
- if ( n > num_frames )
- n = num_frames;
-
- for ( i = 0; i < n; i++ )
- {
- int arg = 0;
- /* simply update the PTE for the VA and invalidate TLB */
- call[i].op = __HYPERVISOR_update_va_mapping;
- call[i].args[arg++] = va;
- call[i].args[arg++] = 0;
-#ifdef __i386__
- call[i].args[arg++] = 0;
-#endif
- call[i].args[arg++] = UVMF_INVLPG;
-
- va += PAGE_SIZE;
- }
-
- ret = HYPERVISOR_multicall(call, n);
- if ( ret )
- {
- printk("update_va_mapping hypercall failed with rc=%d.\n", ret);
- return -ret;
- }
-
- for ( i = 0; i < n; i++ )
- {
- if ( call[i].result )
- {
- printk("update_va_mapping failed for with rc=%d.\n", ret);
- return -(call[i].result);
- }
- }
- num_frames -= n;
- }
- return 0;
-}
-
-/*
- * Allocate pages which are contiguous in machine memory.
- * Returns a VA to where they are mapped or 0 on failure.
- *
- * addr_bits indicates if the region has restrictions on where it is
- * located. Typical values are 32 (if for example PCI devices can't access
- * 64bit memory) or 0 for no restrictions.
- *
- * Allocated pages can be freed using the page allocators free_pages()
- * function.
- *
- * based on Linux function xen_create_contiguous_region()
- */
-#define MAX_CONTIG_ORDER 9 /* 2MB */
-unsigned long alloc_contig_pages(int order, unsigned int addr_bits)
-{
- unsigned long in_va, va;
- unsigned long in_frames[1UL << order], out_frames, mfn;
- multicall_entry_t call[1UL << order];
- unsigned int i, num_pages = 1UL << order;
- int ret, exch_success;
-
- /* pass in num_pages 'extends' of size 1 and
- * request 1 extend of size 'order */
- struct xen_memory_exchange exchange = {
- .in = {
- .nr_extents = num_pages,
- .extent_order = 0,
- .domid = DOMID_SELF
- },
- .out = {
- .nr_extents = 1,
- .extent_order = order,
- .address_bits = addr_bits,
- .domid = DOMID_SELF
- },
- .nr_exchanged = 0
- };
-
- if ( order > MAX_CONTIG_ORDER )
- {
- printk("alloc_contig_pages: order too large 0x%x > 0x%x\n",
- order, MAX_CONTIG_ORDER);
- return 0;
- }
-
- /* Allocate some potentially discontiguous pages */
- in_va = alloc_pages(order);
- if ( !in_va )
- {
- printk("alloc_contig_pages: could not get enough pages (order=0x%x\n",
- order);
- return 0;
- }
-
- /* set up arguments for exchange hyper call */
- set_xen_guest_handle(exchange.in.extent_start, in_frames);
- set_xen_guest_handle(exchange.out.extent_start, &out_frames);
-
- /* unmap current frames, keep a list of MFNs */
- for ( i = 0; i < num_pages; i++ )
- {
- int arg = 0;
-
- va = in_va + (PAGE_SIZE * i);
- in_frames[i] = virt_to_mfn(va);
-
- /* update P2M mapping */
- phys_to_machine_mapping[virt_to_pfn(va)] = INVALID_P2M_ENTRY;
-
- /* build multi call */
- call[i].op = __HYPERVISOR_update_va_mapping;
- call[i].args[arg++] = va;
- call[i].args[arg++] = 0;
-#ifdef __i386__
- call[i].args[arg++] = 0;
-#endif
- call[i].args[arg++] = UVMF_INVLPG;
- }
-
- ret = HYPERVISOR_multicall(call, i);
- if ( ret )
- {
- printk("Odd, update_va_mapping hypercall failed with rc=%d.\n", ret);
- return 0;
- }
-
- /* try getting a contig range of MFNs */
- out_frames = virt_to_pfn(in_va); /* PFNs to populate */
- ret = HYPERVISOR_memory_op(XENMEM_exchange, &exchange);
- if ( ret ) {
- printk("mem exchanged order=0x%x failed with rc=%d, nr_exchanged=%d\n",
- order, ret, exchange.nr_exchanged);
- /* we still need to return the allocated pages above to the pool
- * ie. map them back into the 1:1 mapping etc. so we continue but
- * in the end return the pages to the page allocator and return 0. */
- exch_success = 0;
- }
- else
- exch_success = 1;
-
- /* map frames into 1:1 and update p2m */
- for ( i = 0; i < num_pages; i++ )
- {
- int arg = 0;
- pte_t pte;
-
- va = in_va + (PAGE_SIZE * i);
- mfn = i < exchange.nr_exchanged ? (out_frames + i) : in_frames[i];
- pte = __pte(mfn << PAGE_SHIFT | L1_PROT);
-
- /* update P2M mapping */
- phys_to_machine_mapping[virt_to_pfn(va)] = mfn;
-
- /* build multi call */
- call[i].op = __HYPERVISOR_update_va_mapping;
- call[i].args[arg++] = va;
-#ifdef __x86_64__
- call[i].args[arg++] = (pgentry_t)pte.pte;
-#else
- call[i].args[arg++] = pte.pte_low;
- call[i].args[arg++] = pte.pte_high;
-#endif
- call[i].args[arg++] = UVMF_INVLPG;
- }
- ret = HYPERVISOR_multicall(call, i);
- if ( ret )
- {
- printk("update_va_mapping hypercall no. 2 failed with rc=%d.\n", ret);
- return 0;
- }
-
- if ( !exch_success )
- {
- /* since the exchanged failed we just free the pages as well */
- free_pages((void *) in_va, order);
- return 0;
- }
-
- return in_va;
-}
-
-/*
- * Clear some of the bootstrap memory
- */
-static void clear_bootstrap(void)
-{
- pte_t nullpte = { };
- int rc;
-
- /* Use first page as the CoW zero page */
_______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |