Merge branch 'arrakis'
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Fri, 14 Aug 2015 06:46:05 +0000 (08:46 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Fri, 14 Aug 2015 06:46:05 +0000 (08:46 +0200)
Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

297 files changed:
devices/Hakefile
devices/apm88xxxx/apm88xxxx_pc16550.dev [new file with mode: 0644]
devices/cpuid.dev
devices/cpuid_amd.dev [new file with mode: 0644]
devices/cpuid_intel.dev [new file with mode: 0644]
errors/errno.fugu
hake/ARMv8.hs [new file with mode: 0644]
hake/ArchDefaults.hs
hake/Args.hs
hake/K1om.hs
hake/RuleDefs.hs
hake/menu.lst.k1om
hake/symbolic_targets.mk
if/arch/armv8.if [new file with mode: 0644]
if/intermon.if
if/monitor.if
if/pci.if
if/platform/armv8.if [new file with mode: 0644]
if/spawn.if
include/arch/aarch64/barrelfish/bulk_transfer_arch.h [moved from include/arch/k1om/barrelfish/bulk_transfer_arch.h with 61% similarity]
include/arch/aarch64/barrelfish/core_state_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/cpu_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/curdispatcher_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/dispatcher_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/invocations_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/lmp_chan_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/pmap_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish/syscall_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/asm_inlines_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/cpu_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/dispatcher_shared_arch.h [moved from include/arch/k1om/barrelfish_kpi/dispatcher_shared_arch.h with 54% similarity]
include/arch/aarch64/barrelfish_kpi/flags_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/generic_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/lmp_arch.h [moved from include/arch/k1om/barrelfish_kpi/lmp_arch.h with 52% similarity]
include/arch/aarch64/barrelfish_kpi/paging_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/registers_arch.h [new file with mode: 0644]
include/arch/aarch64/barrelfish_kpi/spinlocks_arch.h [moved from include/arch/k1om/barrelfish_kpi/generic_arch.h with 51% similarity]
include/arch/aarch64/barrelfish_kpi/unknown_arch.h [new file with mode: 0644]
include/arch/aarch64/bench/bench_arch.h [new file with mode: 0644]
include/arch/aarch64/float.h [new file with mode: 0644]
include/arch/aarch64/machine/_limits.h [moved from include/arch/k1om/machine/_limits.h with 100% similarity]
include/arch/arm/barrelfish/cpu_arch.h
include/arch/arm/barrelfish/invocations_arch.h
include/arch/arm/barrelfish_kpi/paging_arch.h
include/arch/arm/barrelfish_kpi/registers_arch.h
include/arch/k1om/_fpmath.h [deleted file]
include/arch/k1om/arch/inttypes.h [deleted file]
include/arch/k1om/arch/setjmp.h [deleted file]
include/arch/k1om/arch/stdint.h [deleted file]
include/arch/k1om/barrelfish/core_state_arch.h [deleted file]
include/arch/k1om/barrelfish/cpu_arch.h [deleted file]
include/arch/k1om/barrelfish/curdispatcher_arch.h [deleted file]
include/arch/k1om/barrelfish/dispatcher_arch.h [deleted file]
include/arch/k1om/barrelfish/invocations_arch.h [deleted file]
include/arch/k1om/barrelfish/ldt.h [deleted file]
include/arch/k1om/barrelfish/lmp_chan_arch.h [deleted file]
include/arch/k1om/barrelfish/pmap_arch.h [deleted file]
include/arch/k1om/barrelfish/syscall_arch.h [deleted file]
include/arch/k1om/barrelfish_kpi/asm_inlines_arch.h
include/arch/k1om/barrelfish_kpi/cpu_arch.h [deleted file]
include/arch/k1om/barrelfish_kpi/eflags_arch.h [deleted file]
include/arch/k1om/barrelfish_kpi/paging_arch.h [deleted file]
include/arch/k1om/barrelfish_kpi/registers_arch.h [deleted file]
include/arch/k1om/bench/bench_arch.h [deleted file]
include/arch/k1om/concurrent/arch/cas.h [deleted file]
include/arch/k1om/fenv.h [deleted file]
include/arch/k1om/float.h [deleted file]
include/arch/k1om/machine/asm.h [deleted file]
include/arch/k1om/machine/endian.h [deleted file]
include/arch/k1om/machine/fpu.h [deleted file]
include/arch/k1om/machine/types.h [deleted file]
include/arch/x86/barrelfish_kpi/asm_inlines_arch.h
include/arch/x86_32/barrelfish/invocations_arch.h
include/arch/x86_32/barrelfish_kpi/registers_arch.h
include/arch/x86_64/barrelfish/invocations_arch.h
include/arch/x86_64/barrelfish_kpi/registers_arch.h
include/barrelfish/monitor_client.h
include/barrelfish/spawn_client.h
include/barrelfish/ump_impl.h
include/barrelfish/vregion.h
include/barrelfish/vspace_mmu_aware.h
include/barrelfish_kpi/capabilities.h
include/barrelfish_kpi/init.h
include/bitmap.h
include/concurrent/linked_list.h
include/cpuid/cpuid.h
include/cpuid/cpuid_spaces.h
include/mdb/mdb_tree.h
include/numa.h
include/pci/mem.h
include/target/aarch64/barrelfish/dispatcher_target.h [new file with mode: 0644]
include/target/aarch64/barrelfish/pmap_target.h [new file with mode: 0644]
include/target/aarch64/barrelfish_kpi/dispatcher_shared_target.h [new file with mode: 0644]
include/target/aarch64/barrelfish_kpi/paging_arm_v8.h [new file with mode: 0644]
include/target/arm/barrelfish/pmap_target.h
include/target/k1om/barrelfish/dispatcher_target.h [deleted file]
include/target/k1om/barrelfish/pmap_target.h [deleted file]
include/target/k1om/barrelfish_kpi/cpu_target.h [deleted file]
include/target/k1om/barrelfish_kpi/dispatcher_shared_target.h [deleted file]
include/target/k1om/barrelfish_kpi/paging_target.h [deleted file]
include/target/k1om/barrelfish_kpi/registers_target.h [deleted file]
include/target/x86_32/barrelfish_kpi/paging_target.h
include/tftp/tftp.h [new file with mode: 0644]
include/thc/thcinternal.h
include/trace/trace.h
include/xeon_phi/xeon_phi.h
kernel/Hakefile
kernel/arch/apm88xxxx/boot.S [new file with mode: 0644]
kernel/arch/apm88xxxx/init.c [new file with mode: 0644]
kernel/arch/apm88xxxx/paging.c [new file with mode: 0644]
kernel/arch/apm88xxxx/uart.c [new file with mode: 0644]
kernel/arch/arm/exec.c
kernel/arch/arm/exn.c
kernel/arch/arm/phys_mmap.c
kernel/arch/arm/syscall.c
kernel/arch/arm_gem5/init.c
kernel/arch/arm_gem5/startup_arch.c
kernel/arch/armv5/init.c
kernel/arch/armv5/paging.c
kernel/arch/armv5/startup_arch.c
kernel/arch/armv7-m/paging.c
kernel/arch/armv7/paging.c
kernel/arch/armv8/exceptions.S [new file with mode: 0644]
kernel/arch/armv8/exec.c [new file with mode: 0644]
kernel/arch/armv8/exn.c [new file with mode: 0644]
kernel/arch/armv8/irq.c [new file with mode: 0644]
kernel/arch/armv8/kludges.c [new file with mode: 0644]
kernel/arch/armv8/kputchar.c [new file with mode: 0644]
kernel/arch/armv8/linker.lds.in [new file with mode: 0644]
kernel/arch/armv8/misc.c [new file with mode: 0644]
kernel/arch/k1om/init.c
kernel/arch/k1om/startup_arch.c
kernel/arch/omap44xx/init.c
kernel/arch/omap44xx/startup_arch.c
kernel/arch/x86/startup_x86.c
kernel/arch/x86_32/init.c
kernel/arch/x86_32/page_mappings_arch.c
kernel/arch/x86_32/syscall.c
kernel/arch/x86_64/exec.c
kernel/arch/x86_64/init.c
kernel/arch/x86_64/page_mappings_arch.c
kernel/arch/x86_64/syscall.c
kernel/cap_delete.c
kernel/capabilities.c
kernel/dispatch.c
kernel/include/arch/aarch64/aarch64.h [moved from include/arch/k1om/barrelfish_kpi/spinlocks_arch.h with 62% similarity]
kernel/include/arch/aarch64/global.h [new file with mode: 0644]
kernel/include/arch/armv5/cp15.h
kernel/include/arch/armv8/arch_gdb_stub.h [new file with mode: 0644]
kernel/include/arch/armv8/arm_hal.h [new file with mode: 0644]
kernel/include/arch/armv8/exceptions.h [new file with mode: 0644]
kernel/include/arch/armv8/init.h [new file with mode: 0644]
kernel/include/arch/armv8/irq.h [new file with mode: 0644]
kernel/include/arch/armv8/kputchar.h [new file with mode: 0644]
kernel/include/arch/armv8/misc.h [new file with mode: 0644]
kernel/include/arch/armv8/offsets.h [new file with mode: 0644]
kernel/include/arch/armv8/paging_kernel_arch.h [new file with mode: 0644]
kernel/include/arch/armv8/sysreg.h [new file with mode: 0644]
kernel/include/arch/k1om/arch_gdb_stub.h [deleted file]
kernel/include/arch/k1om/cpuid_spaces.h [deleted file]
kernel/include/arch/k1om/fpu.h [deleted file]
kernel/include/arch/k1om/init.h
kernel/include/arch/k1om/irq.h [deleted file]
kernel/include/arch/k1om/kernel_multiboot.h [deleted file]
kernel/include/arch/k1om/misc.h [deleted file]
kernel/include/arch/k1om/paging_kernel_arch.h [deleted file]
kernel/include/arch/k1om/vmkit.h [deleted file]
kernel/include/arch/x86/startup_x86.h
kernel/include/capabilities.h
kernel/include/dispatch.h
kernel/include/multiboot.h
kernel/include/paging_generic.h
kernel/include/sys_debug.h [new file with mode: 0644]
kernel/include/target/x86_32/paging_kernel_target.h
kernel/include/target/x86_64/paging_kernel_target.h
kernel/include/uefi_mmap.h [new file with mode: 0644]
kernel/paging_generic.c
kernel/startup.c
kernel/sys_debug.c [new file with mode: 0644]
lib/barrelfish/Hakefile
lib/barrelfish/arch/arm/pmap_arch.c
lib/barrelfish/arch/arm/sys_debug.c
lib/barrelfish/arch/arm/syscalls.c
lib/barrelfish/arch/x86/sys_debug.c [new file with mode: 0644]
lib/barrelfish/arch/x86_32/sys_debug.c
lib/barrelfish/arch/x86_32/syscalls.c
lib/barrelfish/arch/x86_64/ldt.c
lib/barrelfish/arch/x86_64/sys_debug.c
lib/barrelfish/arch/x86_64/syscalls.c
lib/barrelfish/dispatch.c
lib/barrelfish/include/arch/aarch64/arch/registers.h [new file with mode: 0644]
lib/barrelfish/include/arch/aarch64/arch/threads.h [moved from lib/barrelfish/include/arch/k1om/arch/threads.h with 64% similarity]
lib/barrelfish/include/arch/k1om/arch/fpu.h [deleted file]
lib/barrelfish/include/arch/k1om/arch/ldt.h [deleted file]
lib/barrelfish/include/arch/k1om/arch/registers.h [deleted file]
lib/barrelfish/include/target/k1om/registers_target.h [deleted file]
lib/barrelfish/monitor_client.c
lib/barrelfish/morecore.c
lib/barrelfish/slot_alloc/multi_slot_alloc.c
lib/barrelfish/spawn_client.c
lib/barrelfish/sys_debug.c [new file with mode: 0644]
lib/barrelfish/syscalls.c [new file with mode: 0644]
lib/barrelfish/target/x86/pmap_x86.c
lib/barrelfish/target/x86_32/pmap_target.c
lib/barrelfish/target/x86_64/pmap_target.c
lib/barrelfish/threads.c
lib/barrelfish/vspace/memobj_anon.c
lib/barrelfish/vspace/memobj_numa.c
lib/barrelfish/vspace/memobj_one_frame.c
lib/barrelfish/vspace/mmu_aware.c
lib/bitmap/bitmap.c
lib/bomp_new/bomp_node.c
lib/cpuid/Hakefile [moved from tools/weever/creator/Hakefile with 54% similarity]
lib/cpuid/cpuid_amd.c [new file with mode: 0644]
lib/cpuid/cpuid_amd.h [new file with mode: 0644]
lib/cpuid/cpuid_generic.c [new file with mode: 0644]
lib/cpuid/cpuid_intel.c [new file with mode: 0644]
lib/cpuid/cpuid_intel.h [new file with mode: 0644]
lib/cpuid/cpuid_internal.h [new file with mode: 0644]
lib/crt/arch/aarch64/crt0.S [new file with mode: 0644]
lib/dma/dma_bench.c
lib/mdb/mdb_tree.c
lib/numa/alloc.c
lib/numa/numa.c
lib/numa/numa_internal.h
lib/numa/utilities.c
lib/pci/pci_client.c
lib/tftp/Hakefile [new file with mode: 0644]
lib/tftp/client.c [new file with mode: 0644]
lib/tftp/common.c [new file with mode: 0644]
lib/tftp/server.c [new file with mode: 0644]
lib/tftp/tftp_internal.h [new file with mode: 0644]
tools/asmoffsets/asmoffsets.c
tools/flounder/AHCI.hs
tools/flounder/Arch.hs
tools/flounder/MsgFragments.hs
tools/flounder/Parser.hs
tools/flounder/Syntax.lhs
tools/harness/barrelfish.py
tools/harness/builds.py
tools/harness/machines/eth.py
tools/harness/machines/eth_machinedata.py
tools/harness/tests/xeonphi.py [new file with mode: 0644]
tools/weever/Hakefile
tools/weever/creator/weever_creator.c [deleted file]
tools/weever/install.sh [deleted file]
tools/weever/loader.c
tools/weever/mbi.h [deleted file]
tools/weever/multiboot/Hakefile [deleted file]
tools/weever/multiboot/build_data_files.sh [deleted file]
tools/weever/multiboot/weever_multiboot.c [deleted file]
usr/bench/dma/dma_bench.c
usr/bench/xeon_phi_ump/common.c
usr/bench/xeon_phi_ump/main_card.c
usr/bench/xeon_phi_ump/main_inter_card.c
usr/bench/xomp_bench/work_bench.c
usr/drivers/cpuboot/Hakefile
usr/drivers/cpuboot/x86boot.c
usr/drivers/xeon_phi/Hakefile
usr/drivers/xeon_phi/boot.c
usr/drivers/xeon_phi/interphi.c
usr/drivers/xeon_phi/main_card.c
usr/drivers/xeon_phi/main_host.c
usr/drivers/xeon_phi/service.c
usr/drivers/xeon_phi/xeon_phi_internal.h
usr/fish/fish_common.c
usr/init/init.c
usr/init/spawn.c
usr/kaluga/driver_startup.c
usr/kaluga/kaluga.h
usr/kaluga/main.c
usr/mem_serv/mem_serv.c
usr/mem_serv_dist/mem_serv.h
usr/monitor/capops/internal.h
usr/monitor/capops/retrieve.c
usr/monitor/capops/revoke.c
usr/monitor/include/arch/aarch64/monitor_invocations_arch.h [new file with mode: 0644]
usr/monitor/main.c
usr/monitor/monitor_rpc_server.c
usr/monitor/monitor_server.c
usr/monitor/spawn.c
usr/pci/pci.c
usr/pci/pci.h
usr/pci/pci_service.c
usr/skb/measurement/Hakefile
usr/skb/measurement/cpuid.c
usr/skb/programs/device_db.pl
usr/spawnd/service.c
usr/tests/large_page/Hakefile
usr/tests/large_page/malloc_test.c
usr/tests/large_page/map_test_32.c
usr/tests/nkm/modify_flags.c
usr/tests/numa/numatest.c
usr/tests/testconcurrent/testconcurrent.c
usr/tests/xeon_phi_test/main_card.c
usr/tests/xeon_phi_test/main_inter_card.c
usr/tests/xeon_phi_test/nameservice_test.c

index fce57bd..8b42744 100644 (file)
@@ -17,6 +17,8 @@
 [ mackerel2 (options arch) f
   | f <- [ "ac97_base_audio",
            "ac97_ext_audio",
+           "cpuid_intel",
+           "cpuid_amd",
            "ac97_ext_codec",
            "ac97_ext_modem",
            "ahci_hba",
@@ -62,6 +64,7 @@
            "ti_i2c",
            "ti_twl6030",
            "sdhc",
+           "apm88xxxx/apm88xxxx_pc16550",
            "omap/ehci",
            "omap/ohci",
            "omap/omap_uart",
diff --git a/devices/apm88xxxx/apm88xxxx_pc16550.dev b/devices/apm88xxxx/apm88xxxx_pc16550.dev
new file mode 100644 (file)
index 0000000..76bc360
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2015, ETH Zurich. All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+/*
+ * apm88xxxx/apm88xxxx_pc16550.dev
+ *
+ * DESCRIPTION: APM88xxxx PC16550 UART
+ *
+ * This is derived from:
+ *
+ * APM88xx0x Processor Family Register Reference -- Volume 1
+ * Document Issue 0.98 (APM 2012-0052-1)
+ *
+ * This file only incorporates the parts relevant for UART operation.
+ * Registers relevant for IrDA, CIR, and other modes are not yet
+ * described. 
+ */
+device apm88xxxx_pc16550 msbfirst (addr base) "APM88xxxx UART" {
+
+    constants data_len "Data Length" {
+        bits5   = 0b00   "5 Bits";
+        bits6   = 0b01   "6 Bits";
+        bits7   = 0b10   "7 Bits";
+        bits8   = 0b11   "8 Bits";
+    };
+
+    register RBR ro addr (base, 0x0) "Receive Buffer" {
+        _       24;
+        rbr     8 ro        "Receive buffer register";
+    };
+
+    register THR wo also addr (base, 0x0) "Transmit Register" {
+        _       24;
+        thr     8 wo        "Transmit register";
+    };
+
+    register IIR ro addr (base, 0x8) "Interrupt Identity" type(uint32);
+
+    register lcr rw addr (base, 0xc) "Line control" {
+        _       24;
+        dlab    1           "Divisor latch access bit";
+        bc      1           "Break control bit";
+        sp      1 rsvd      "Stick parity";
+        eps     1           "Even parity select";
+        pen     1           "Parity enable";
+        stop    1           "stop bit";
+        dls     2 type(data_len) "Data length select";
+    };
+
+    register LSR ro addr (base, 0x14) "Line Status" {
+        _       24;
+        rfe      1          "Receive FIFO error";
+        temt     1          "Transmitter empty";
+        thre     1          "Transmit holding register empty";
+        bi       1          "Break interrupt";
+        fe       1          "Framing error";
+        pe       1          "Parity error";
+        oe       1          "Overrun error";
+        dr       1          "Data ready";
+    };
+
+
+};
index 19b320d..d153079 100644 (file)
@@ -231,7 +231,7 @@ device cpuid lsbfirst () "ia32 / Intel64 CPUID instruction results" {
     // EAX=0x04 : Deterministic cache parameters leaf (Intel only)
     //
 
-    constants intel_cache_type "Intel cache type field" {
+    constants intel_cachetype "Intel cache type field" {
        ct_null         = 0 "Null, no more caches";
        ct_data         = 1 "Data cache";
        ct_instruction  = 2 "Instruction cache";
@@ -240,7 +240,7 @@ device cpuid lsbfirst () "ia32 / Intel64 CPUID instruction results" {
 
     space dcpa(i) valuewise "Deterministic cache parameters leaf A";
     regarray cache_type ro dcpa(0x00)[4] "Cache type information" {
-       ctf             5 type(intel_cache_type) "Cache type";
+       ctf             5 type(intel_cachetype) "Cache type";
        level           3 "Cache level (starts at 1)";
        self_init       1 "Self initializing";
        fully_assoc     1 "Fully associative";
diff --git a/devices/cpuid_amd.dev b/devices/cpuid_amd.dev
new file mode 100644 (file)
index 0000000..b0f2a54
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 2015, ETH Zurich. All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+/*
+ * cpuid_amd.dev
+ *
+ * DESCRIPTION: ia32 CPU ID instruction results
+ * 
+ * See
+ *   AMD CPUID Specification, Rev. 2.28, Pub.#25481, April 2008
+ */
+
+device cpuid_amd lsbfirst () "ia32 / Intel64 CPUID instruction results" {
+    
+    /*
+     *============================================================================
+     * Basic Information. 
+     *============================================================================
+     */
+    
+    /*
+     * CPUID(0, _)
+     * --------------------------------------------------------------------------- 
+     */
+    datatype basic lsbfirst (32) "" {
+        max_cpuid 32 rw "Maximum Input Value for Basic CPUID Information";
+        vendor0   32 rw "Vendor string part 1";
+        vendor2   32 rw "Vendor string part 3";
+        vendor1   32 rw "Vendor string part 2";
+    };
+    
+    /*
+     * CPUID(1, _)
+     * --------------------------------------------------------------------------- 
+     */
+     
+    datatype family lsbfirst(32) "family information in eax register" {        
+        stepping    4 rw  "Processor Stepping ID";
+        model       4 rw  "Processor Model";
+        family      4 rw  "Processor Family";
+        _           4 mbz "Reserved";
+        extmodel    4 rw "Extended Model ID";
+        extfamily   8 rw "Extended Family ID";
+        _           4 mbz "Reserved";
+    };
+    
+    datatype miscinfo lsbfirst(32) "info returned in ebx register" {
+        brand_idx    8 rw "Brand index";
+        cflush_sz    8 rw "CLFLUSH line size (Value * 8 = cache line size in bytes)";
+        max_log_proc 8 rw "LogicalProcessorCount is the number of cores per processor"; 
+        init_apicid  8 rw  "Initial APIC ID";
+    };
+    
+    datatype features lsbfirst(32) "features returned in {ecx, edx}" {
+        /* Feature Information (see Figure 3-6 and Table 3-19) */
+        sse3        1 rw "Streaming SIMD Extensions 3 (SSE3). ";
+        pclmulqdq   1 rw "PCLMULQDQ.";
+        dtes64      1 rw "64-bit DS Area";
+        monitor     1 rw "MONITOR/MWAIT"; 
+        ds_cpl      1 rw "CPL Qualified Debug Store. ";
+        vmx         1 rw "Virtual Machine Extensions";
+        smx         1 rw "Safer Mode Extensions. ";
+        eist        1 rw "Enhanced Intel SpeedStep(r) technology. ";
+        tm2         1 rw "Thermal Monitor 2";
+        ssse3       1 rw "Supplemental Streaming SIMD Extensions 3 (SSSE3)";
+        cntx_id     1 rw "L1 Context ID. A";
+        sdbg        1 rw "IA32_DEBUG_INTERFACE MSR ";
+        fma         1 rw "FMA extensions using YMM state.";
+        cmpxchg16b  1 rw "CMPXCHG16B Available";
+        xtpr        1 rw "xTPR Update Control";
+        pdcm        1 rw "Perfmon and Debug Capability";
+        _           1 mbz "";
+        pcid        1 rw "Process-context identifiers";
+        dca         1 rw "ability to prefetch data from a memory mapped device.";
+        sse4_1      1 rw "supports SSE4.1. ";
+        sse4_2      1 rw "supports SSE4.2. ";
+        x2apic      1 rw "supports x2APIC feature";
+        movbe       1 rw "supports MOVBE instruction";
+        popcnt      1 rw "supports the POPCNT instruction.";
+        tsc_one     1 rw "local APIC timer supports one-shot operation ";
+        aesni       1 rw " AESNI instruction extensions";
+        xsave       1 rw " XSAVE/XRSTOR processor ";
+        osxsave     1 rw "OS has set CR4.OSXSAVE[bit 18] to enable XSETBV/XGETBV instruction";
+        avx         1 rw "AVX instruction extensions";
+        f16c        1 rw "16-bit floating-point conversion instructions.";
+        rdrand      1 rw "supports RDRAND instruction.";
+        _           1 mbz "";
+    
+        /* Feature Information (see Figure 3-7 and Table 3-20) */
+        fpu         1 rw "Floating Point Unit On-Chip";
+        vme         1 rw "Virtual 8086 Mode Enhancements";
+        de          1 rw "Debugging Extensions. ";
+        pse         1 rw "Page Size Extension";
+        tsc         1 rw "Time Stamp Counter.";
+        msr         1 rw "Model Specific Registers RDMSR and WRMSR Instructions";
+        pae         1 rw "Physical Address Extension";
+        mce         1 rw "Machine Check Exception. ";
+        cx8         1 rw "CMPXCHG8B Instruction.";
+        apic        1 rw "APIC On-Chip. ";
+        _           1 mbz "";
+        sep         1 rw "SYSENTER and SYSEXIT Instructions.";
+        mtrr        1 rw "Memory Type Range Registers";
+        pge         1 rw "Page Global Bit";
+        mca         1 rw "Machine Check Architecture.";
+        cmov        1 rw "Conditional Move Instructions";
+        pat         1 rw "Page Attribute Table";
+        pse36       1 rw "36-Bit Page Size Extension";
+        psn         1 rw "Processor Serial Number. ";
+        clfsh       1 rw "CLFLUSH Instruction";
+        _           1 rw "";
+        ds          1 rw "Debug Store";
+        acpi        1 rw "Thermal Monitor and Software Controlled Clock Facilities";
+        mmx         1 rw "Intel MMX Technology";
+        fxsr        1 rw "FXSAVE and FXRSTOR Instructions";
+        sse         1 rw "SSE1";
+        sse2        1 rw "SSE2";
+        ss          1 rw "Self Snoop";
+        htt         1 rw "Max APIC IDs reserved field is Valid";
+        tm          1 rw "Thermal Monitor";
+        _           1 mbz "";
+        pbe         1 rw "Pending Break Enable. ";
+    };
+    
+    /*
+     * CPUID(0x80000008, _)
+     * --------------------------------------------------------------------------- 
+     */
+    datatype addrspace lsbfirst(32) " Long Mode Address Size Identifiers (eax)" {
+        physical    8 rw  "Maximum physical byte address size in bits";
+        linear      8 rw  "Maximum linear byte address size in bits. ";  
+        guest       8 rw  " maximum guest physical byte address size in bits";
+        _           8 mbz "reserved";
+    };
+    
+    datatype apicid lsbfirst(32) "APIC ID Size and Core Count (ecx)" {
+        ncores     8 rw  "number of physical cores - 1";
+        _          4 mbz "Reserved";  
+        apic_sz    4 rw  "APIC ID size";
+        _         16 mbz "reserved";
+    };    
+    
+    /*
+     * CPUID(0x80000005, _) L1 Cache and TLB Identifiers
+     * --------------------------------------------------------------------------- 
+     */
+    datatype tlb_l1 lsbfirst(32) "" {
+        itlb_sz     8 rw  "L2 instruction TLB number of entries for 2/4MB pages ";
+        itlb_assoc  8 rw  "L2 instruction TLB associativity for 2/4MB pages ";
+        dtlb_sz     8 rw  "L2 data TLB number of entries for 2/4MB pages ";  
+        dtlb_assoc  8 rw  "L2 data TLB associativity for 2/4MB pages";
+    }; 
+     
+    datatype l1_2m_tlb lsbfirst(32) "Fn8000_0005_EAX L1 Cache and TLB Identifiers" {
+        itlb_sz     8 rw  "L2 instruction TLB number of entries for 2/4MB pages ";
+        itlb_assoc  8 rw  "L2 instruction TLB associativity for 2/4MB pages ";
+        dtlb_sz     8 rw  "L2 data TLB number of entries for 2/4MB pages ";  
+        dtlb_assoc  8 rw  "L2 data TLB associativity for 2/4MB pages";
+    }; 
+    
+    datatype l1_4k_tlb lsbfirst(32) "Fn8000_0005_EBX L1 Cache and TLB Identifiers" {
+        itlb_sz     8 rw  "L2 instruction TLB number of entries for 4 KB pages. ";
+        itlb_assoc  8 rw  "L2 instruction TLB associativity for 4 KB pages ";
+        dtlb_sz     8 rw  "L2 data TLB number of entries for 4 KB pages ";  
+        dtlb_assoc  8 rw  "L2 data TLB associativity for 4 KB pages";
+    };  
+
+    datatype l1_dcache lsbfirst(32) " Fn8000_0005_ECX L1 Cache and TLB Identifiers" {
+        linesize      8 rw  "L1 cache line size in bytes. ";
+        lines_per_tag 8 rw  "L1 cache lines per tag. ";
+        assoc         8 rw  "L1 cache associativity. See Table 4.";
+        size          8 rw  "L1 cache size in KB.";
+    };
+    
+    datatype l1_icache lsbfirst(32) "Fn8000_0005_EDX L1 Cache and TLB Identifiers" {
+        linesize      8 rw  "L1 cache line size in bytes. ";
+        lines_per_tag 8 rw  "L1 cache lines per tag. ";
+        assoc         8 rw  "L1 cache associativity. See Table 4.";  
+        size          8 rw  "L1 cache size in KB.";
+    };       
+    
+    /*
+     * CPUID(0x80000006, _) TLB and L2/L3 cache information
+     * --------------------------------------------------------------------------- 
+     */
+          
+     constants cache_assoc "AMD cache associativity values" {
+        cache_assoc_disabled = 0x0 "";
+        cache_assoc_direct   = 0x1 "";
+        cache_assoc_2way     = 0x2 "";
+        cache_assoc_4way     = 0x4 "";
+        cache_assoc_8way     = 0x6 "";  
+        cache_assoc_16way    = 0x8 ""; 
+        cache_assoc_32way    = 0xa "";
+        cache_assoc_48way    = 0xb "";
+        cache_assoc_64way    = 0xc "";
+        cache_assoc_96way    = 0xd "";
+        cache_assoc_128way   = 0xe ""; 
+        cache_assoc_fully    = 0xf "";
+     };
+    
+    datatype tlb_l2 lsbfirst(32) "Fn8000_0006_EAX L2 TLB Identifiers" {
+        itlb_sz    12 rw  "L2 instruction TLB number of entries for 2/4MB pages ";
+        itlb_assoc  4 rw  "L2 instruction TLB associativity for 2/4MB pages ";
+        dtlb_sz    12 rw  "L2 data TLB number of entries for 2/4MB pages ";  
+        dtlb_assoc  4 rw  "L2 data TLB associativity for 2/4MB pages";
+    }; 
+     
+    datatype l2_2m_tlb lsbfirst(32) "Fn8000_0006_EAX L2 TLB Identifiers" {
+        itlb_sz    12 rw  "L2 instruction TLB number of entries for 2/4MB pages ";
+        itlb_assoc  4 rw  "L2 instruction TLB associativity for 2/4MB pages ";
+        dtlb_sz    12 rw  "L2 data TLB number of entries for 2/4MB pages ";  
+        dtlb_assoc  4 rw  "L2 data TLB associativity for 2/4MB pages";
+    }; 
+     
+    datatype l2_4k_tlb lsbfirst(32) " Fn8000_0006_EBX L2 TLB Identifiers" {
+        itlb_sz    12 rw  "L2 instruction TLB number of entries for 4 KB pages. ";
+        itlb_assoc  4 rw  "L2 instruction TLB associativity for 4 KB pages ";
+        dtlb_sz    12 rw  "L2 data TLB number of entries for 4 KB pages ";
+        dtlb_assoc  4 rw  "L2 data TLB associativity for 4 KB pages";
+    };      
+     
+    datatype l2_cache lsbfirst(32) "Fn8000_0006_ECX L2 Cache Identifiers" {
+        linesize      8 rw  "L2 cache line size in bytes. ";
+        lines_per_tag 4 rw  "L2 cache lines per tag. ";
+        assoc         4 rw  "L2 cache associativity. See Table 4.";  
+        size         16 rw  "L2 cache size in KB.";
+    };     
+     
+     
+    datatype l3_cache lsbfirst(32) "Fn8000_0006_EDX L3 Cache Identifiers" {
+        linesize      8 rw  "L3 cache line size in bytes. ";
+        lines_per_tag 4 rw  "L3 cache lines per tag. ";
+        assoc         4 rw  "L3 cache associativity. See Table 4.";  
+        _             2 mbz "Reserved";
+        size         14 rw  "Specifies the L3 cache size in 512kb blocks";
+    };       
+    
+    /*
+     * CPUID(0x80000019, _) TLB for 1G Pages
+     * --------------------------------------------------------------------------- 
+     */
+    datatype tlb_1g_l1 lsbfirst(32) "TLB 1GB Page Identifiers eax" {
+        itlb_sz     12 "L1 instruction TLB number of entries for 1 GB pages";
+        itlb_assoc   4 "L1 instruction TLB associativity for 1 GB pages. See Table 4";
+        dtlb_sz     12 "L1 data TLB number of entries for 1 GB pages";
+        dtlb_assoc   4 "L1 data TLB associativity for 1 GB pages. See Table 4.";
+    };    
+    
+    datatype tlb_1g_l2 lsbfirst(32) "TLB 1GB Page Identifiers ebx" {
+        itlb_sz     12 "L2 instruction TLB number of entries for 1 GB pages";
+        itlb_assoc   4 "L2 instruction TLB associativity for 1 GB pages. See Table 4";
+        dtlb_sz     12 "L2 data TLB number of entries for 1 GB pages";
+        dtlb_assoc   4 "L2 data TLB associativity for 1 GB pages. See Table 4.";
+    }; 
+    
+    /*
+     * CPUID(0x8000001D, _)
+     * --------------------------------------------------------------------------- 
+     */
+     constants cache_type "AMD Cache Type values" {
+        cache_type_null     = 0x0 "No more caches";
+        cache_type_data     = 0x1 "data cache";
+        cache_type_instr    = 0x2 "Instruction Cache";
+        cache_type_unified  = 0x3 "Unified Cache";
+     };
+     
+     /* EAX */
+     datatype cache_info_eax lsbfirst (32) "" {
+        ctype        5 "Cache Type Field";
+        level        3 "Cache Level (starts at 1)";
+        selfinit     1 "Self Initializing cache level (does not need SW initialization)";
+        fullyassoc   1 "Fully Associative cache";
+        _            4 "Reserved";
+        num_sharing 12 "number of cores sharing cache - 1";
+        _            6 "";
+     };
+    
+    datatype cache_info_ebx lsbfirst (32) "" {
+       cachelinesize  12 "cache line size in bytes - 1";
+       partitions     10 "cache physical line partitions - 1";
+       assoc          10 "cache number of ways - 1";
+    };
+    
+    datatype cache_info_ecx lsbfirst (32) "" {
+       num_sets    32 "The number of Sets - 1";
+    };
+    
+    datatype cache_info_edx lsbfirst (32) "" {
+       wb_inv     1  "Write-Back Invalidate/Invalidate";
+       inclusive  1 "Cache Inclusiveness";
+       _         30 "reserved";
+    };
+     
+    /*
+     * CPUID(0x8000001E, _) topology extensions
+     * --------------------------------------------------------------------------- 
+     */     
+    datatype ext_apic lsbfirst (32) "register eax" {
+       extended_apicid 32  "extended APIC ID";
+    };
+    
+    datatype cuid lsbfirst (32) "Fn8000_001E_EBX Compute Unit Identifiers" {
+       cuid    8 "compute unit id";
+       ncores  2 "Number of cores per compute unit - 1";
+       _      22 "Reserved";
+    };
+    
+    datatype nid lsbfirst (32) "Fn8000_001E_ECX Node Identifiers" {
+       nodeid  8 "Specifies the node ID";
+       nnodeds 3 "Number of nodes per processor - 1";
+       _      21 "Reserved";
+    };     
+};
+
+    
+           
+
+    
+    
+       
diff --git a/devices/cpuid_intel.dev b/devices/cpuid_intel.dev
new file mode 100644 (file)
index 0000000..9b7dd44
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+ * Copyright (c) 2015, ETH Zurich. All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+/*
+ * cpuid_intel.dev
+ *
+ * DESCRIPTION: ia32 CPU ID instruction results
+ * 
+ * See:
+ *   Intel Architecture Manual, Volume 2A, pp. 3-163 - ff., April 2015
+ *   Table 3-17. Information Returned by CPUID Instruction  
+ */
+
+device cpuid_intel lsbfirst () "ia32 / Intel64 CPUID instruction results" {
+   
+    /*
+     *============================================================================
+     * Basic Information. 
+     *============================================================================
+     */
+    
+    /*
+     * CPUID(0, _)
+     * --------------------------------------------------------------------------- 
+     */
+    datatype basic0 lsbfirst (32) "" {
+        max_cpuid 32 rw "Maximum Input Value for Basic CPUID Information";
+        vendor0   32 rw "Vendor string part 1";
+        vendor2   32 rw "Vendor string part 3";
+        vendor1   32 rw "Vendor string part 2";
+    };
+    
+    /*
+     * CPUID(1, _)
+     * --------------------------------------------------------------------------- 
+     */
+    constants proc_type width(2) "" {
+        original = 0x00 "Original OEM Processor";
+        overdrive= 0x01 "Intel OverDrive(r) Processor";
+        dual     = 0x02 "Dual processor (not applicable to Intel486 processors)";
+        reserved = 0x03 "Intel reserved";
+    };
+    
+    datatype family lsbfirst(32) "" {
+        /* Version Information: Type, Family, Model, and Stepping ID (see Figure 3-5) */
+        
+        stepping    4 rw  "Processor Stepping ID";
+        model       4 rw  "Processor Model";
+        family      4 rw  "Processor Family";
+        proctype    2 rw  "Processor Type";
+        _           2 mbz "Reserved";
+        extmodel    4 rw "Extended Model ID";
+        extfamily   8 rw "Extended Family ID";
+        _           4 mbz "Reserved";
+    };
+    
+    /* EAX=1 */
+    
+    datatype miscinfo lsbfirst(32) "" {
+        
+        brand_idx    8 rw "Brand index";
+        cflush_sz    8 rw "CLFLUSH line size (Value * 8 = cache line size in bytes)";
+        max_log_proc 8 rw "Maximum number of addressable IDs for logical processors"; 
+                           /*in this physical package. 
+                           The nearest power-of-2 integer that is not smaller than 
+                           EBX[23:16] is the number of unique initial APIC IDs 
+                           reserved for addressing different logical processors in a 
+                           physical package. */ 
+        init_apicid  8 rw  "Initial APIC ID";
+    };
+    
+    datatype features lsbfirst(32) "" {
+        /* Feature Information (see Figure 3-6 and Table 3-19) */
+        sse3        1 rw "Streaming SIMD Extensions 3 (SSE3). ";
+        pclmulqdq   1 rw "PCLMULQDQ.";
+        dtes64      1 rw "64-bit DS Area";
+        monitor     1 rw "MONITOR/MWAIT"; 
+        ds_cpl      1 rw "CPL Qualified Debug Store. ";
+        vmx         1 rw "Virtual Machine Extensions";
+        smx         1 rw "Safer Mode Extensions. ";
+        eist        1 rw "Enhanced Intel SpeedStep(r) technology. ";
+        tm2         1 rw "Thermal Monitor 2";
+        ssse3       1 rw "Supplemental Streaming SIMD Extensions 3 (SSSE3)";
+        cntx_id     1 rw "L1 Context ID. A";
+        sdbg        1 rw "IA32_DEBUG_INTERFACE MSR ";
+        fma         1 rw "FMA extensions using YMM state.";
+        cmpxchg16b  1 rw "CMPXCHG16B Available";
+        xtpr        1 rw "xTPR Update Control";
+        pdcm        1 rw "Perfmon and Debug Capability";
+        _           1 mbz "";
+        pcid        1 rw "Process-context identifiers";
+        dca         1 rw "ability to prefetch data from a memory mapped device.";
+        sse4_1      1 rw "supports SSE4.1. ";
+        sse4_2      1 rw "supports SSE4.2. ";
+        x2apic      1 rw "supports x2APIC feature";
+        movbe       1 rw "supports MOVBE instruction";
+        popcnt      1 rw "supports the POPCNT instruction.";
+        tsc_one     1 rw "local APIC timer supports one-shot operation ";
+        aesni       1 rw " AESNI instruction extensions";
+        xsave       1 rw " XSAVE/XRSTOR processor ";
+        osxsave     1 rw "OS has set CR4.OSXSAVE[bit 18] to enable XSETBV/XGETBV instruction";
+        avx         1 rw "AVX instruction extensions";
+        f16c        1 rw "16-bit floating-point conversion instructions.";
+        rdrand      1 rw "supports RDRAND instruction.";
+        _           1 mbz "";
+    
+        /* Feature Information (see Figure 3-7 and Table 3-20) */
+        fpu         1 rw "Floating Point Unit On-Chip";
+        vme         1 rw "Virtual 8086 Mode Enhancements";
+        de          1 rw "Debugging Extensions. ";
+        pse         1 rw "Page Size Extension";
+        tsc         1 rw "Time Stamp Counter.";
+        msr         1 rw "Model Specific Registers RDMSR and WRMSR Instructions";
+        pae         1 rw "Physical Address Extension";
+        mce         1 rw "Machine Check Exception. ";
+        cx8         1 rw "CMPXCHG8B Instruction.";
+        apic        1 rw "APIC On-Chip. ";
+        _           1 mbz "";
+        sep         1 rw "SYSENTER and SYSEXIT Instructions.";
+        mtrr        1 rw "Memory Type Range Registers";
+        pge         1 rw "Page Global Bit";
+        mca         1 rw "Machine Check Architecture.";
+        cmov        1 rw "Conditional Move Instructions";
+        pat         1 rw "Page Attribute Table";
+        pse36       1 rw "36-Bit Page Size Extension";
+        psn         1 rw "Processor Serial Number. ";
+        clfsh       1 rw "CLFLUSH Instruction";
+        _           1 rw "";
+        ds          1 rw "Debug Store";
+        acpi        1 rw "Thermal Monitor and Software Controlled Clock Facilities";
+        mmx         1 rw "Intel MMX Technology";
+        fxsr        1 rw "FXSAVE and FXRSTOR Instructions";
+        sse         1 rw "SSE1";
+        sse2        1 rw "SSE2";
+        ss          1 rw "Self Snoop";
+        htt         1 rw "Max APIC IDs reserved field is Valid";
+        tm          1 rw "Thermal Monitor";
+        _           1 mbz "";
+        pbe         1 rw "Pending Break Enable. ";
+    };
+    
+   
+    /* EAX=2 */
+    datatype cache_info lsbfirst (32) "" {
+        d0      8  "ignored, always 0x01";
+        d1      8  "Descriptor 01";
+        d2      8  "Descriptor 02";
+        d3      7  "Descriptor 03";
+        v0      1 "Contains valid descriptors";                     
+    };
+    
+    /* EAX=3 */
+    /* not used post P3 */
+    
+    /*
+     *---------------------------------------------------------------------
+     * Deterministic Cache Parameters EAX=4, ECX=idx
+     *---------------------------------------------------------------------
+     */
+     
+     constants cache_type "Intel Cache Type values" {
+        cache_type_null     = 0x0 "No more caches";
+        cache_type_data     = 0x1 "data cache";
+        cache_type_instr    = 0x2 "Instruction Cache";
+        cache_type_unified  = 0x3 "Unified Cache";
+     };
+     
+     /* EAX */
+     datatype cache_info_basic lsbfirst (32) "" {
+        ctype        5 "Cache Type Field";
+        level       3 "Cache Level (starts at 1)";
+        selfinit    1 "Self Initializing cache level (does not need SW initialization)";
+        fullyassoc  1 "Fully Associative cache";
+        _           4 "Reserved";
+        maxlog      12 "Maximum number of addressable IDs for logical processors sharing this cache - 1";
+        maxphys     6 "Maximum number of addressable IDs for processor cores in the physical package - 1";     
+     };
+    
+    datatype cache_info_ebx lsbfirst (32) "" {
+       coherency  12 "System Coherency Line Size - 1";
+       partitions 10 "Physical Line partitions - 1";
+       assoc      10 "Ways of associativity - 1";
+    };
+    
+    datatype cache_info_ecx lsbfirst (32) "" {
+       num_sets    32 "The number of Sets - 1";
+    };
+    
+    datatype cache_info_edx lsbfirst (32) "" {
+       wb_inv     1  "Write-Back Invalidate/Invalidate";
+       inclusive  1 "Cache Inclusiveness";
+       cpx_idx    1 "Complex Cache Indexing";
+       _         29 "";
+    };
+    
+    /*
+     * CPUID(0x16, _)  Processor Frequency Information Leaf
+     * --------------------------------------------------------------------------- 
+     */
+     datatype frequency lsbfirst (32) "" {
+        mhz 16 "Processor frequency in mhz";
+        _   16 "Reserved";
+     };
+     
+    /*
+     *---------------------------------------------------------------------
+     * Extended Information
+     *---------------------------------------------------------------------
+     */
+    
+    /* extended topology enumaration leaf, eax = 0xb */
+    datatype topology_eax lsbfirst (32) "" {
+        x2apic_shift 5  "";
+        _            27 "";
+    };
+    datatype topology_ebx lsbfirst (32) "" {
+        logical_proc 16  "";
+        _            16 "";
+    };
+    datatype topology_ecx lsbfirst (32) "" {
+        level_number 8 "";
+        level_type   8 "";
+        _            16 "";
+    };
+    datatype topology_edx lsbfirst (32) "" {
+        x2apic 32 "";
+    };
+    
+    constants topology_level "Intel Cache Type values" {
+        topology_level_invalid     = 0x0 "Invalid";
+        topology_level_smt         = 0x1 "SMT";
+        topology_level_core        = 0x2 "Core";
+        topology_level_package     = 0x3 "Package";
+     };
+    
+        
+    /*
+     * CPUID(0x80000001, _)  Extended Function CPUID Informatio
+     * --------------------------------------------------------------------------- 
+     */
+     datatype features_ext_edx "" {
+        _       11 "";
+        syscall  1 "SYSCALL/SYSRET available in 64-bit mode";
+        _        8 "";
+        nx       1 "Execute Disable Bit available";
+        _        5 "";
+        page1G   1 "1-GByte pages are available if 1";
+        rdtscp   1 "RDTSCP and IA32_TSC_AUX are available if 1";
+        _        1 "";
+        lm       1 "Intel 64 Architecture available if 1";
+        _        2 "";
+     }; 
+     
+    
+    
+    /*
+     * CPUID(0x80000008, _)
+     * --------------------------------------------------------------------------- 
+     */
+    datatype addrspace lsbfirst(32) " Long Mode Address Size Identifiers (eax)" {
+        physical    8 rw  "Maximum physical byte address size in bits";
+        linear      8 rw  "Maximum linear byte address size in bits. ";  
+        _          16 mbz "reserved";
+    };
+};
+
+    
+           
+
+    
+    
+       
index 957ce2d..e792e7a 100755 (executable)
@@ -275,6 +275,7 @@ errors libbarrelfish LIB_ERR_ {
     failure PMAP_EXISTING_MAPPING "Cannot replace existing mapping, unmap first",
     failure PMAP_FRAME_SIZE "Given Frame to small to fulfil mapping request",
     failure PMAP_FRAME_IDENTIFY "Frame could not be identified",
+    failure PMAP_NOT_MAPPED "No mapping in given address range",
 
     failure OUT_OF_VIRTUAL_ADDR  "Out of virtual address",
 
@@ -1153,3 +1154,9 @@ errors numa NUMA_ERR_ {
     failure NODEID_INVALID        "Invalid node ID",
     failure COREID_INVALID        "Invalid core ID",
 };
+
+errors cpuid CPUID_ERR_ {
+    failure UNSUPPORTED_FUNCTION    "This function is not valid on this CPU.",
+    failure UNKNOWN_VENDOR          "The CPU vendor is not supported",
+    failure INVALID_INDEX           "There is no leaf with this index",
+};
diff --git a/hake/ARMv8.hs b/hake/ARMv8.hs
new file mode 100644 (file)
index 0000000..5f7c437
--- /dev/null
@@ -0,0 +1,186 @@
+--------------------------------------------------------------------------
+-- Copyright (c) 2007-2010, ETH Zurich.
+-- All rights reserved.
+--
+-- This file is distributed under the terms in the attached LICENSE file.
+-- If you do not find this file, copies can be found by writing to:
+-- ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+--
+-- Architectural definitions for Barrelfish on ARMv5 ISA.
+--
+-- The build target is the integratorcp board on QEMU with the default
+-- ARM926EJ-S cpu.
+--
+--------------------------------------------------------------------------
+
+module ARMv8 where
+
+import HakeTypes
+import Path
+import qualified Config
+import qualified ArchDefaults
+
+-------------------------------------------------------------------------
+--
+-- Architecture specific definitions for ARM
+--
+-------------------------------------------------------------------------
+
+arch = "armv8"
+archFamily = "aarch64"
+
+toolprefix = "aarch64-none-elf-"
+
+compiler = toolprefix ++ "gcc"
+objcopy  = toolprefix ++ "objcopy"
+objdump  = toolprefix ++ "objdump"
+ar       = toolprefix ++ "ar"
+ranlib   = toolprefix ++ "ranlib"
+cxxcompiler = toolprefix ++ "g++"
+
+ourCommonFlags = [ Str "-fno-unwind-tables",
+                   Str "-Wno-packed-bitfield-compat",
+                   Str "-fno-stack-protector",
+                   Str "-mcpu=cortex-a57",
+                   Str "-march=armv8-a",
+                   Str "-mabi=lp64",
+                   Str "-DPIC_REGISTER=X10",
+                   Str "-fPIE",
+                   Str "-ffixed-r9",
+                   Str "-DTHREAD_REGISTER=X9",
+                   Str "-D__ARM_CORTEX__",
+                   Str "-D__ARM_ARCH_8A__",
+                   Str "-Wno-unused-but-set-variable",
+                   Str "-Wno-format"
+ ]
+
+cFlags = ArchDefaults.commonCFlags 
+         ++ ArchDefaults.commonFlags
+         ++ ourCommonFlags
+
+cxxFlags = ArchDefaults.commonCxxFlags
+           ++ ArchDefaults.commonFlags
+           ++ ourCommonFlags
+
+cDefines = ArchDefaults.cDefines options
+
+ourLdFlags = [ Str "-Wl,-section-start,.text=0x400000",
+               Str "-Wl,-section-start,.data=0x600000",
+               Str "-Wl,--build-id=none" ]
+
+ldFlags = ArchDefaults.ldFlags arch ++ ourLdFlags
+ldCxxFlags = ArchDefaults.ldCxxFlags arch ++ ourLdFlags
+
+stdLibs = ArchDefaults.stdLibs arch ++ [ Str "-lgcc" ]
+
+options = (ArchDefaults.options arch archFamily) { 
+            optFlags = cFlags,
+            optCxxFlags = cxxFlags,
+            optDefines = cDefines,
+            optDependencies = 
+                [ PreDep InstallTree arch "/include/trace_definitions/trace_defs.h",
+                  PreDep InstallTree arch "/include/errors/errno.h",
+                  PreDep InstallTree arch "/include/barrelfish_kpi/capbits.h",
+                  PreDep InstallTree arch "/include/asmoffsets.h"
+                   ],
+            optLdFlags = ldFlags,
+            optLdCxxFlags = ldCxxFlags,
+            optLibs = stdLibs,
+            optInterconnectDrivers = ["lmp", "ump"],
+            optFlounderBackends = ["lmp", "ump"]
+          }
+
+--
+-- Compilers
+--
+cCompiler = ArchDefaults.cCompiler arch compiler
+cxxCompiler = ArchDefaults.cxxCompiler arch cxxcompiler
+makeDepend = ArchDefaults.makeDepend arch compiler
+makeCxxDepend  = ArchDefaults.makeCxxDepend arch cxxcompiler
+cToAssembler = ArchDefaults.cToAssembler arch compiler
+assembler = ArchDefaults.assembler arch compiler
+archive = ArchDefaults.archive arch
+linker = ArchDefaults.linker arch compiler
+cxxlinker = ArchDefaults.cxxlinker arch cxxcompiler
+
+
+--
+-- The kernel is "different"
+--
+
+kernelCFlags = [ Str s | s <- [ "-fno-builtin",
+                                "-fno-unwind-tables",
+                                "-nostdinc",
+                                "-std=c99",
+                                "-mcpu=cortex-a57",
+                                "-march=armv8-a",
+                                "-mabi=lp64",
+                                "-fPIE",
+                                "-U__linux__",
+                                "-Wall",
+                                "-Wshadow",
+                                "-Wstrict-prototypes",
+                                "-Wold-style-definition",
+                                "-Wmissing-prototypes",
+                                "-Wmissing-declarations",
+                                "-Wmissing-field-initializers",
+                                "-Wredundant-decls",
+                                "-Werror",
+                                "-imacros deputy/nodeputy.h",
+                                "-fno-stack-check",
+                                "-ffreestanding",
+                                "-fomit-frame-pointer",
+                                "-Wmissing-noreturn",
+                                "-ffixed-r9",
+                                "-DTHREAD_REGISTER=X9",
+                                "-D__ARM_CORTEX__",
+                                "-D__ARM_ARCH_8A__",
+                                "-Wno-unused-but-set-variable",
+                                "-Wno-format"
+                              ]]
+
+kernelLdFlags = [ Str "-Wl,-N",
+                  Str "-fno-builtin",
+                  Str "-nostdlib",
+                  Str "-pie",
+                  Str "-Wl,--fatal-warnings"
+                ]
+
+
+--
+-- Link the kernel (CPU Driver)
+--
+linkKernel :: Options -> [String] -> [String] -> String -> HRule
+linkKernel opts objs libs name =
+    let linkscript = "/kernel/" ++ name ++ ".lds"
+        kernelmap  = "/kernel/" ++ name ++ ".map"
+        kasmdump   = "/kernel/" ++ name ++ ".asm"
+        kbinary    = "/sbin/" ++ name
+        kbootable  = kbinary ++ ".bin"
+    in
+        Rules [ Rule ([ Str compiler, Str Config.cOptFlags,
+                      NStr "-T", In BuildTree arch linkscript,
+                      Str "-o", Out arch kbinary,
+                      NStr "-Wl,-Map,", Out arch kernelmap
+                    ]
+                    ++ (optLdFlags opts)
+                    ++
+                    [ In BuildTree arch o | o <- objs ]
+                    ++
+                    [ In BuildTree arch l | l <- libs ]
+                    ++
+                    [ Str "-lgcc" ]
+                   ),
+              -- Generate kernel assembly dump
+              Rule [ Str objdump, 
+                     Str "-d", 
+                     Str "-M reg-names-raw",
+                     In BuildTree arch kbinary, 
+                     Str ">", Out arch kasmdump ],
+              Rule [ Str "cpp",
+                     NStr "-I", NoDep SrcTree "src" "/kernel/include/arch/armv8",
+                     Str "-D__ASSEMBLER__",
+                     Str "-P", In SrcTree "src" "/kernel/arch/armv8/linker.lds.in",
+                     Out arch linkscript
+                   ]
+            ]
index 521a21a..49d4ef2 100644 (file)
@@ -143,7 +143,7 @@ options arch archFamily = Options {
 -- C compiler
 --
 cCompiler arch compiler opts phase src obj = 
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraFlags opts ]
@@ -159,7 +159,7 @@ cCompiler arch compiler opts phase src obj =
 -- the C preprocessor, like C compiler but with -E
 --
 cPreprocessor arch compiler opts phase src obj = 
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraFlags opts ]
@@ -177,7 +177,7 @@ cPreprocessor arch compiler opts phase src obj =
 -- C++ compiler
 --
 cxxCompiler arch cxxcompiler opts phase src obj = 
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optCxxFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraCxxFlags opts ]
@@ -194,7 +194,7 @@ cxxCompiler arch cxxcompiler opts phase src obj =
 -- Create C file dependencies
 --
 makeDepend arch compiler opts phase src obj depfile =
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraFlags opts ]
@@ -214,7 +214,7 @@ makeDepend arch compiler opts phase src obj depfile =
 -- Create C++ file dependencies
 --
 makeCxxDepend arch cxxcompiler opts phase src obj depfile =
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optCxxFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraCxxFlags opts ]
@@ -235,7 +235,7 @@ makeCxxDepend arch cxxcompiler opts phase src obj depfile =
 --
 cToAssembler :: String -> String -> Options -> String -> String -> String -> String -> [ RuleToken ]
 cToAssembler arch compiler  opts phase src afile objdepfile =
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraFlags opts ]
@@ -253,7 +253,7 @@ cToAssembler arch compiler  opts phase src afile objdepfile =
 --
 assembler :: String -> String -> Options -> String -> String -> [ RuleToken ]
 assembler arch compiler opts src obj = 
-    let incls = (optIncludes opts) ++ (extraIncludes opts)
+    let incls = (extraIncludes opts) ++ (optIncludes opts)
         flags = (optFlags opts) 
                 ++ (optDefines opts)
                 ++ [ Str f | f <- extraFlags opts ]
index 90d9389..673efe8 100644 (file)
@@ -70,7 +70,7 @@ defaultArgs = Args {
       architectures = allArchitectures
 }
 
-allArchitectures = [ "x86_64", "x86_32", "armv5", "arm11mp", "scc", "xscale", "armv7", "armv7-m", "k1om" ]
+allArchitectures = [ "x86_64", "x86_32", "armv5", "arm11mp", "scc", "xscale", "armv7", "armv7-m", "armv8", "k1om" ]
 allArchitectureFamilies = [ "x86_64", "x86_32", "arm", "scc", "k1om" ]
 -- architectures that currently support THC
 thcArchitectures = ["x86_64", "x86_32", "scc"]
index 2be496e..abb5a31 100644 (file)
@@ -84,6 +84,11 @@ ourLdFlags = [ Str "-Wl,-z,max-page-size=0x1000",
 ldFlags = ArchDefaults.ldFlags arch ++ ourLdFlags
 ldCxxFlags = ArchDefaults.ldCxxFlags arch ++ ourLdFlags
 
+-- adding x86_64 includes to the K1OM architecture
+kernelOptIncludes = [NoDep SrcTree "src" ("/kernel/include/arch/x86_64"),
+                     NoDep SrcTree "src" ("/include/target/x86_64"), 
+                     NoDep SrcTree "src" ("/include/arch/x86_64")] 
+
 options = (ArchDefaults.options arch archFamily) { 
             optFlags = cFlags,
             optCxxFlags = cxxFlags,
@@ -91,7 +96,11 @@ options = (ArchDefaults.options arch archFamily) {
             optLdFlags = ldFlags,
             optLdCxxFlags = ldCxxFlags,
             optInterconnectDrivers = ["lmp", "ump", "multihop"],
-            optFlounderBackends = ["lmp", "ump", "multihop"]
+            optFlounderBackends = ["lmp", "ump", "multihop"],
+            optIncludes = ArchDefaults.cStdIncs arch archFamily
+                          ++
+                          [NoDep SrcTree "src" ("/include/target/x86_64"), 
+                           NoDep SrcTree "src" ("/include/arch/x86_64")]
           }
 
 --
index 0914ade..b7a84fe 100644 (file)
@@ -23,6 +23,7 @@ import qualified ARM11MP
 import qualified XScale
 import qualified ARMv7
 import qualified ARMv7_M
+import qualified ARMv8
 import HakeTypes
 import qualified Args
 import qualified Config
@@ -87,6 +88,7 @@ options "arm11mp" = ARM11MP.options
 options "xscale" = XScale.options
 options "armv7" = ARMv7.options
 options "armv7-m" = ARMv7_M.options
+options "armv8" = ARMv8.options
 
 kernelCFlags "x86_64" = X86_64.kernelCFlags
 kernelCFlags "k1om" = K1om.kernelCFlags
@@ -97,6 +99,7 @@ kernelCFlags "arm11mp" = ARM11MP.kernelCFlags
 kernelCFlags "xscale" = XScale.kernelCFlags
 kernelCFlags "armv7" = ARMv7.kernelCFlags
 kernelCFlags "armv7-m" = ARMv7_M.kernelCFlags
+kernelCFlags "armv8" = ARMv8.kernelCFlags
 
 kernelLdFlags "x86_64" = X86_64.kernelLdFlags
 kernelLdFlags "k1om" = K1om.kernelLdFlags
@@ -107,6 +110,7 @@ kernelLdFlags "arm11mp" = ARM11MP.kernelLdFlags
 kernelLdFlags "xscale" = XScale.kernelLdFlags
 kernelLdFlags "armv7" = ARMv7.kernelLdFlags
 kernelLdFlags "armv7-m" = ARMv7_M.kernelLdFlags
+kernelLdFlags "armv8" = ARMv8.kernelLdFlags
 
 archFamily :: String -> String
 archFamily arch = optArchFamily (options arch)
@@ -117,6 +121,11 @@ archFamily arch = optArchFamily (options arch)
 --
 -------------------------------------------------------------------------
 
+kernelOptIncludes :: String -> [ RuleToken ]
+kernelOptIncludes arch
+    | arch == "k1om"  = K1om.kernelOptIncludes
+    | otherwise = [ ]
+
 kernelIncludes arch = [ NoDep BuildTree arch f | f <- [
                     "/include" ]]
                  ++
@@ -129,6 +138,7 @@ kernelIncludes arch = [ NoDep BuildTree arch f | f <- [
                     Config.libcInc,
                     "/include/c",
                     "/include/target" ./. archFamily arch]]
+                 ++ kernelOptIncludes arch
 
 kernelOptions arch = Options {
             optArch = arch,
@@ -183,6 +193,7 @@ cCompiler opts phase src obj
     | optArch opts == "xscale" = XScale.cCompiler opts phase src obj
     | optArch opts == "armv7" = ARMv7.cCompiler opts phase src obj
     | optArch opts == "armv7-m" = ARMv7_M.cCompiler opts phase src obj
+    | optArch opts == "armv8" = ARMv8.cCompiler opts phase src obj
     | otherwise = [ ErrorMsg ("no C compiler for " ++ (optArch opts)) ]
 
 cPreprocessor :: Options -> String -> String -> String -> [ RuleToken ]
@@ -222,6 +233,8 @@ makeDepend opts phase src obj depfile
         ARMv7.makeDepend opts phase src obj depfile
     | optArch opts == "armv7-m" = 
         ARMv7_M.makeDepend opts phase src obj depfile
+    | optArch opts == "armv8" = 
+        ARMv8.makeDepend opts phase src obj depfile
     | otherwise = [ ErrorMsg ("no dependency generator for " ++ (optArch opts)) ]
 
 makeCxxDepend :: Options -> String -> String -> String -> String -> [ RuleToken ]
@@ -243,6 +256,7 @@ cToAssembler opts phase src afile objdepfile
     | optArch opts == "xscale" = XScale.cToAssembler opts phase src afile objdepfile
     | optArch opts == "armv7" = ARMv7.cToAssembler opts phase src afile objdepfile
     | optArch opts == "armv7-m" = ARMv7_M.cToAssembler opts phase src afile objdepfile
+    | optArch opts == "armv8" = ARMv8.cToAssembler opts phase src afile objdepfile
     | otherwise = [ ErrorMsg ("no C compiler for " ++ (optArch opts)) ]
 
 --
@@ -259,6 +273,7 @@ assembler opts src obj
     | optArch opts == "xscale" = XScale.assembler opts src obj
     | optArch opts == "armv7" = ARMv7.assembler opts src obj
     | optArch opts == "armv7-m" = ARMv7_M.assembler opts src obj
+    | optArch opts == "armv8" = ARMv8.assembler opts src obj
     | otherwise = [ ErrorMsg ("no assembler for " ++ (optArch opts)) ]
 
 archive :: Options -> [String] -> [String] -> String -> String -> [ RuleToken ]
@@ -272,6 +287,7 @@ archive opts objs libs name libname
     | optArch opts == "xscale" = XScale.archive opts objs libs name libname
     | optArch opts == "armv7" = ARMv7.archive opts objs libs name libname
     | optArch opts == "armv7-m" = ARMv7_M.archive opts objs libs name libname
+    | optArch opts == "armv8" = ARMv8.archive opts objs libs name libname
     | otherwise = [ ErrorMsg ("Can't build a library for " ++ (optArch opts)) ]
 
 linker :: Options -> [String] -> [String] -> String -> [RuleToken]
@@ -285,6 +301,7 @@ linker opts objs libs bin
     | optArch opts == "xscale" = XScale.linker opts objs libs bin
     | optArch opts == "armv7" = ARMv7.linker opts objs libs bin
     | optArch opts == "armv7-m" = ARMv7_M.linker opts objs libs bin
+    | optArch opts == "armv8" = ARMv8.linker opts objs libs bin
     | otherwise = [ ErrorMsg ("Can't link executables for " ++ (optArch opts)) ]
 
 cxxlinker :: Options -> [String] -> [String] -> String -> [RuleToken]
@@ -780,6 +797,7 @@ linkKernel opts name objs libs
     | optArch opts == "xscale" = XScale.linkKernel opts objs [libraryPath l | l <- libs ] ("/sbin" ./. name)
     | optArch opts == "armv7" = ARMv7.linkKernel opts objs [libraryPath l | l <- libs ] name
     | optArch opts == "armv7-m" = ARMv7_M.linkKernel opts objs [libraryPath l | l <- libs ] name
+    | optArch opts == "armv8" = ARMv8.linkKernel opts objs [libraryPath l | l <- libs ] name
     | otherwise = Rule [ Str ("Error: Can't link kernel for '" ++ (optArch opts) ++ "'") ]
 
 --
index ef07dad..863673e 100644 (file)
@@ -27,7 +27,7 @@ module  /k1om/sbin/spawnd boot
 module  /k1om/sbin/startd boot
 
 # drivers
-module /k1om/sbin/corectrl boot 1:10
+module /k1om/sbin/corectrl auto
 
 # GDDR Memory we have 6GB on our Xeon PHi
 mmap map 0x0000000000 0x00FEE00000 1
index 4ad2b6b..c060e9e 100644 (file)
@@ -26,8 +26,6 @@ ARM_GCC?=arm-linux-gnueabi-gcc
 ARM_OBJCOPY?=arm-linux-gnueabi-objcopy
 K1OM_OBJCOPY?=k1om-mpss-linux-objcopy
 
-# upload Xeon Phi images to nfs share (leave blank to cancel)
-BARRELFISH_NFS_DIR ?="emmentaler.ethz.ch:/mnt/local/nfs/barrelfish/xeon_phi"
 
 # All binaries of the RCCE LU benchmark
 BIN_RCCE_LU= \
@@ -172,7 +170,7 @@ BENCH_k1om=\
        sbin/benchmarks/xomp_spawn \
        sbin/benchmarks/xomp_work \
        sbin/benchmarks/xphi_ump_bench \
-       sbin/benchmarks/xphi_xump_bench
+       sbin/benchmarks/xphi_xump_bench 
 
 
 # Default list of modules to build/install for all enabled architectures
@@ -250,8 +248,7 @@ MODULES_k1om= \
        sbin/weever \
        sbin/cpu \
        sbin/xeon_phi \
-       sbin/corectrl \
-       xeon_phi_multiboot \
+       sbin/corectrl 
 
 # the following are broken in the newidc system
 MODULES_x86_64_broken= \
@@ -363,23 +360,14 @@ install: $(MODULES)
        for m in ${MODULES}; do \
          if [ ! -f ${INSTALL_PREFIX}/$$m ] || \
              [ $$(stat -c%Y $$m) -ne $$(stat -c%Y ${INSTALL_PREFIX}/$$m) ]; then \
-              if [ "$$m" != "k1om/xeon_phi_multiboot" ]; then \
                 do_update=1; \
                 echo "  > Installing $$m" ; \
                 mkdir -p ${INSTALL_PREFIX}/$$(dirname $$m); \
                 install -p $$m ${INSTALL_PREFIX}/$$m; \
-              fi; \
          fi; \
        done; \
        if [ ! $$do_update ]; then \
                echo "  > All up to date" ; \
-       else \
-               if [ -f "k1om/xeon_phi_multiboot" ] && [ $(BARRELFISH_NFS_DIR)  ]; then \
-                       echo ""; \
-                       echo "Uploading to NFS share $(BARRELFISH_NFS_DIR) ..." ; \
-                       scp k1om/xeon_phi_multiboot $(BARRELFISH_NFS_DIR); \
-                       scp     k1om/sbin/weever $(BARRELFISH_NFS_DIR); \
-               fi; \
        fi; \
        echo ""; \
        echo "done." ; \
@@ -590,35 +578,9 @@ schedsim-check: $(wildcard $(SRCDIR)/tools/schedsim/*.cfg)
 #
 ######################################################################
 
-# we have to filter out the moduels that are generated below
-MODULES_k1om_filtered = $(filter-out xeon_phi_multiboot, \
-                                               $(filter-out sbin/weever,$(MODULES_k1om)))
-
-# Intel Xeon Phi-specific modules
-XEON_PHI_MODULES =\
-       $(foreach m,$(MODULES_COMMON),k1om/$(m)) \
-       $(foreach m,$(MODULES_k1om_filtered),k1om/$(m)) \
-       $(foreach m,$(BENCH_COMMON),k1om/$(m)) \
-       $(foreach m,$(TESTS_COMMON),k1om/$(m)) \
-       $(foreach m,$(BENCH_k1om),k1om/$(m)) \
-       $(foreach m,$(TESTS_k1om),k1om/$(m))
-
-menu.lst.k1om: $(SRCDIR)/hake/menu.lst.k1om
-       cp $< $@
-
-k1om/tools/weever/mbi.c: tools/bin/weever_multiboot \
-                                                k1om/xeon_phi_multiboot \
-                                                k1om/tools/weever/.marker
-       tools/bin/weever_multiboot k1om/multiboot.menu.lst.k1om k1om/tools/weever/mbi.c
-
-k1om/sbin/weever: k1om/sbin/weever.bin tools/bin/weever_creator
-       tools/bin/weever_creator ./k1om/sbin/weever.bin > ./k1om/sbin/weever
-
-k1om/sbin/weever.bin: k1om/sbin/weever_elf
-       $(K1OM_OBJCOPY) -O binary -R .note -R .comment -S k1om/sbin/weever_elf ./k1om/sbin/weever.bin
+k1om/sbin/weever: k1om/sbin/weever_elf
+       $(K1OM_OBJCOPY) -O binary -R .note -R .comment -S k1om/sbin/weever_elf ./k1om/sbin/weever
 
-k1om/xeon_phi_multiboot: $(XEON_PHI_MODULES) menu.lst.k1om
-       $(SRCDIR)/tools/weever/multiboot/build_data_files.sh menu.lst.k1om k1om
 
 
 #######################################################################
diff --git a/if/arch/armv8.if b/if/arch/armv8.if
new file mode 100644 (file)
index 0000000..5b6cf42
--- /dev/null
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+alias errval uint64;
+alias cycles uint64;
index ba3bd5c..8fa45f9 100644 (file)
 interface intermon "The Interface between monitors" {
 
     /* XXX Aliases for base system types */
-    alias coreid_t uint8;
-    alias chanid_t uint32;
+    alias coreid uint8;
+    alias chanid uint32;
 
     /* Types which we may need to change at some point, especially
        on a heterogeneous platform, or 32-bit only platform */
-    alias con_id_t uint64;
-    alias mon_id_t uint64;
-    alias state_id_t uint64;
-    alias vci_t uint64;
-
-    alias capid_t uint32;
-    alias capaddr_t uint32;
-    alias capbits_t uint8;
-    alias capslot_t uint32;
+    alias con_id uint64;
+    alias mon_id uint64;
+    alias state_id uint64;
+    alias vci uint64;
+
+    alias capid uint32;
+    alias capaddr uint32;
+    alias capbits uint8;
+    alias capslot uint32;
     alias capop_st uint64;
 
     /* XXX depends on MAX_COREID and definition of coremask_t in types.h */
@@ -38,9 +38,9 @@ interface intermon "The Interface between monitors" {
     } caprep;
 
     typedef struct {
-        capaddr_t cnptr;
-        capbits_t cnbits;
-        capslot_t slot;
+        capaddr cnptr;
+        capbits cnbits;
+        capslot slot;
     } captx;
 
     message spawnd_image_request();
@@ -72,46 +72,46 @@ interface intermon "The Interface between monitors" {
      */
     message capops_ready();
     message monitor_initialized();
-    message new_monitor_notify(coreid_t core_id);
-    message bind_monitor_proxy(coreid_t dst_core_id, caprep cap);
-    call bind_monitor_request(coreid_t core_id, caprep cap);
+    message new_monitor_notify(coreid core_id);
+    message bind_monitor_proxy(coreid dst_core_id, caprep cap);
+    call bind_monitor_request(coreid core_id, caprep cap);
     response bind_monitor_reply(errval err);
 
-    message bind_monitor_request_scc(coreid_t core_id,
+    message bind_monitor_request_scc(coreid core_id,
                                      caprep cap,
-                                     chanid_t chan_id,
-                                     coreid_t from_core_id);
+                                     chanid chan_id,
+                                     coreid from_core_id);
     message bind_monitor_reply_scc(errval err,
-                                   chanid_t chan_id,
-                                   coreid_t core_id);
-    message bind_monitor_proxy_scc(coreid_t dst_core_id,
+                                   chanid chan_id,
+                                   coreid core_id);
+    message bind_monitor_proxy_scc(coreid dst_core_id,
                                    caprep cap,
-                                   chanid_t chan_id,
-                                   coreid_t core_id);
+                                   chanid chan_id,
+                                   coreid core_id);
     message bind_ump_request(iref iref,
-                             mon_id_t mon_id,
+                             mon_id mon_id,
                              uint32 channel_length_in,
                              uint32 channel_length_out,
                              genpaddr framebase,
                              uint8 framebits,
                              caprep notify);
-    message bind_ump_reply(con_id_t con_id,
-                           mon_id_t mon_id,
+    message bind_ump_reply(con_id con_id,
+                           mon_id mon_id,
                            errval err,
                            caprep notify);
 
-    message cap_send_request(con_id_t con_id,
-                             capid_t capid,
+    message cap_send_request(con_id con_id,
+                             capid capid,
                              captx cap);
 
-    message span_domain_request(state_id_t state_id,
+    message span_domain_request(state_id state_id,
                                 genpaddr vnodebase,
                                 genpaddr framebase,
                                 uint8      framebits);
-    message span_domain_reply(state_id_t state_id, errval err);
+    message span_domain_reply(state_id state_id, errval err);
 
     // Resource control
-    message rsrc_join(rsrcid id, coreid_t coreid);
+    message rsrc_join(rsrcid id, coreid coreid);
     message rsrc_join_complete(rsrcid id);
     message rsrc_phase_data(rsrcid id, uint32 phase, uint8 data[len]);
     message rsrc_timer_sync(uint64 timestamp);
@@ -136,20 +136,20 @@ interface intermon "The Interface between monitors" {
     message multihop_routing_table_grow(coreid forwarder, coreid destinations[len]);
 
     // set up a new multihop virtual circuit
-    message bind_multihop_intermon_request(iref iref, vci_t sender_vci,
+    message bind_multihop_intermon_request(iref iref, vci sender_vci,
                                            coreid core_id);
-    message bind_multihop_intermon_reply(vci_t receiver_vci, vci_t sender_vci,
+    message bind_multihop_intermon_reply(vci receiver_vci, vci sender_vci,
                                          errval err);
 
-    message multihop_message(vci_t vci, uint8 direction, uint8 flags, uint32 ack,
+    message multihop_message(vci vci, uint8 direction, uint8 flags, uint32 ack,
                              uint8 payload[size]);
-    message multihop_cap_send(vci_t vci, uint8 direction, capid_t capid, errval err,
+    message multihop_cap_send(vci vci, uint8 direction, capid capid, errval err,
                               caprep cap, bool null_cap, coreid owner);
 
     // cap operation messages
     message capops_request_copy(coreid dest, caprep cap, capop_st st);
     message capops_recv_copy(caprep cap, uint8 owner_relations, capop_st st);
-    message capops_recv_copy_result(errval status, capaddr_t cap, capbits_t bits, capslot_t slot, capop_st st);
+    message capops_recv_copy_result(errval status, capaddr cap, capbits bits, capslot slot, capop_st st);
 
     message capops_move_request(caprep cap, uint8 relations, capop_st st);
     message capops_move_result(errval status, capop_st st);
@@ -189,7 +189,7 @@ interface intermon "The Interface between monitors" {
 
     // Notify core 0 that you want to make a time measurement (Network Time
     // Protocol). The origin core is the one who initiated the trace preparation.
-    call trace_measure(coreid_t origin_core, uint64 t0);
+    call trace_measure(coreid origin_core, uint64 t0);
 
     // The response to a measurement call from a core.
     response trace_measure_ack(coreid origin_core, uint64 t0, uint64 t1, uint64 t2);
index 23af894..3fbe686 100644 (file)
@@ -8,8 +8,8 @@
  */
 
 interface monitor "The monitor to client Interface" {
-    alias vci_t uint64;
-    alias capid_t uint32;
+    alias vci uint64;
+    alias capid uint32;
 
     call alloc_iref_request(
         uintptr service_id);
@@ -119,16 +119,16 @@ interface monitor "The monitor to client Interface" {
     call cap_send_request(
         uintptr mon_id,
         cap cap,
-        capid_t capid);
+        capid capid);
     call cap_move_request(
         uintptr mon_id,
         give_away_cap cap,
-        capid_t capid);
+        capid capid);
     response cap_receive_request(
         uintptr conn_id,
         errval err,
         give_away_cap cap,
-        capid_t capid);
+        capid capid);
 
     call span_domain_request(
         uintptr domain_id,
@@ -164,22 +164,22 @@ interface monitor "The monitor to client Interface" {
     call multihop_routing_table_set(coreid from, coreid to[len]);
 
     // Connection set-up between monitor and client
-    call multihop_bind_client_request(iref iref, vci_t sender_vci);
-    response multihop_bind_client_reply(vci_t receiver_vci, vci_t sender_vci,
+    call multihop_bind_client_request(iref iref, vci sender_vci);
+    response multihop_bind_client_reply(vci receiver_vci, vci sender_vci,
                                         errval err);
 
     // Connection set-up between monitor and service
-    call multihop_bind_service_request(uintptr service_id, vci_t sender_vci);
-    response multihop_bind_service_reply(vci_t receiver_vci , vci_t sender_vci,
+    call multihop_bind_service_request(uintptr service_id, vci sender_vci);
+    response multihop_bind_service_reply(vci receiver_vci , vci sender_vci,
                                          errval err);
 
     // user message
-    message multihop_message(vci_t vci, uint8 direction, uint8 flags, uint32 ack,
+    message multihop_message(vci vci, uint8 direction, uint8 flags, uint32 ack,
                              uint8 payload[size]);
 
     // cap transfer
-    call multihop_cap_send(vci_t vci, uint8 direction, errval err, cap cap,
-                           capid_t capid);
+    call multihop_cap_send(vci vci, uint8 direction, errval err, cap cap,
+                           capid capid);
 
     /* Tracing Framework */
 
@@ -199,4 +199,7 @@ interface monitor "The monitor to client Interface" {
     response bfscope_flush_ack();
 
     message migrate_dispatcher(uintptr domain_id);
+
+    // Capability debugging
+    message debug_print_capabilities();
 };
index c5496d2..331e5ed 100644 (file)
--- a/if/pci.if
+++ b/if/pci.if
@@ -36,7 +36,7 @@ interface pci "The PCI Interface" {
 
     /* request the cap for a previously-initialised device */
     rpc get_cap(in uint32 idx, in uint32 cap_nr,
-                out errval err, out cap cap, out uint8 type);
+                out errval err, out cap cap, out uint8 type, out uint8 bar_nr);
 
     /* reregister interrupt for a previously-initialized device */
     rpc reregister_interrupt(in uint32 class_code,
diff --git a/if/platform/armv8.if b/if/platform/armv8.if
new file mode 100644 (file)
index 0000000..1dee072
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+alias genpaddr uint64;
+alias genvaddr uint64;
+alias rsrcid   uint32;
index 81cedc4..2c2e4aa 100644 (file)
@@ -36,4 +36,7 @@ interface spawn "Interface to spawn domains" {
 
     rpc status(in domainid domain_id, out ps_entry ps_entry, out char argv[len],
               out errval err);
+
+    // Capability debugging
+    rpc dump_capabilities(in domainid domain_id, out errval err);
 };
  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
  */
 
-#include <arch/x86/barrelfish/bulk_transfer_arch.h>
+#ifndef ARCH_BULK_TRANSFER_H
+#define ARCH_BULK_TRANSFER_H
+
+static inline void bulk_arch_prepare_send(void *mem, size_t size)
+{
+    // No-op
+}
+
+static inline void bulk_arch_prepare_recv(void *mem, size_t size)
+{
+    // No-op
+}
+
+#endif
diff --git a/include/arch/aarch64/barrelfish/core_state_arch.h b/include/arch/aarch64/barrelfish/core_state_arch.h
new file mode 100644 (file)
index 0000000..2d6717d
--- /dev/null
@@ -0,0 +1,40 @@
+/**
+ * \file
+ * \brief
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_CORESTATE_H
+#define ARCH_AARCH64_BARRELFISH_CORESTATE_H
+
+#include <barrelfish/core_state.h>
+
+struct vspace_state {
+    struct vspace vspace;
+    struct pmap_aarch64 pmap;
+};
+
+struct pinned_state {
+    struct thread_mutex mutex;
+    struct memobj_pinned memobj;
+    struct vregion vregion;
+    lvaddr_t offset;
+    struct slab_allocator vregion_list_slab;
+    struct slab_allocator frame_list_slab;
+};
+
+struct core_state_arch {
+    struct core_state_generic c;
+    struct vspace_state vspace_state;
+    struct pinned_state pinned_state;
+};
+
+#endif
diff --git a/include/arch/aarch64/barrelfish/cpu_arch.h b/include/arch/aarch64/barrelfish/cpu_arch.h
new file mode 100644 (file)
index 0000000..648f53c
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * \file
+ * \brief Architecture specific CPU bits.
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef AARCH64_BARRELFISH_CPU_H
+#define AARCH64_BARRELFISH_CPU_H
+
+#if __ARM_ARCH_8A__
+#define CURRENT_CPU_TYPE CPU_AARCH648
+#else
+#error "must define CURRENT_CPU_TYPE"
+#endif
+
+#endif
diff --git a/include/arch/aarch64/barrelfish/curdispatcher_arch.h b/include/arch/aarch64/barrelfish/curdispatcher_arch.h
new file mode 100644 (file)
index 0000000..3f3e362
--- /dev/null
@@ -0,0 +1,39 @@
+/**
+ * \file
+ * \brief Dispatcher architecture-specific code
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_CURDISPATCHER_H
+#define ARCH_AARCH64_BARRELFISH_CURDISPATCHER_H
+
+#include <barrelfish_kpi/dispatcher_handle.h>
+
+//
+// Helpers for pasting #defined values into inline assembler.
+//
+#define STR(x) #x
+#define XTR(x) STR(x)
+
+/**
+ * \brief Returns pointer to current dispatcher, using thread register
+ */
+static inline dispatcher_handle_t curdispatcher(void)
+{
+    // TODO: XXX: check this!
+    dispatcher_handle_t ret = 0;
+    __asm (
+        "mov %[ret]," XTR(THREAD_REGISTER) :  [ret] "=r" (ret)
+          );
+    return ret;
+}
+
+#endif // ARCH_AARCH64_BARRELFISH_CURDISPATCHER_H
diff --git a/include/arch/aarch64/barrelfish/dispatcher_arch.h b/include/arch/aarch64/barrelfish/dispatcher_arch.h
new file mode 100644 (file)
index 0000000..344c850
--- /dev/null
@@ -0,0 +1,32 @@
+/**
+ * \file
+ * \brief Architecture specific dispatcher structure private to the user
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_DISPATCHER_H
+#define ARCH_AARCH64_BARRELFISH_DISPATCHER_H
+
+#include <target/aarch64/barrelfish/dispatcher_target.h>
+
+static inline struct dispatcher_generic*
+get_dispatcher_generic(dispatcher_handle_t handle)
+{
+    struct dispatcher_aarch64 *disp = (struct dispatcher_aarch64*)handle;
+    return &disp->generic;
+}
+
+static inline size_t get_dispatcher_size(void)
+{
+    return sizeof(struct dispatcher_aarch64);
+}
+
+#endif // ARCH_AARCH64_BARRELFISH_DISPATCHER_H
diff --git a/include/arch/aarch64/barrelfish/invocations_arch.h b/include/arch/aarch64/barrelfish/invocations_arch.h
new file mode 100644 (file)
index 0000000..b01c2d0
--- /dev/null
@@ -0,0 +1,649 @@
+/**
+ * \file
+ * \brief Low-level capability invocations
+ */
+
+/*
+ * Copyright (c) 2007, 2008, 2009, 2010, 2012, 2013, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef INCLUDEBARRELFISH_INVOCATIONS_ARCH_H
+#define INCLUDEBARRELFISH_INVOCATIONS_ARCH_H
+
+#include <barrelfish/syscall_arch.h> // for sys_invoke and cap_invoke
+#include <barrelfish_kpi/dispatcher_shared.h>
+#include <barrelfish_kpi/distcaps.h>            // for distcap_state_t
+#include <barrelfish_kpi/syscalls.h>
+#include <barrelfish/caddr.h>
+#include <barrelfish_kpi/paging_arch.h>
+#include <barrelfish/debug.h> // for USER_PANIC()
+
+/**
+ * capability invocation syscall wrapper, copied from x86_32 version
+ */
+static inline struct sysret cap_invoke(struct capref to, uintptr_t argc, uintptr_t cmd,
+                                       uintptr_t arg2, uintptr_t arg3,
+                                       uintptr_t arg4, uintptr_t arg5,
+                                       uintptr_t arg6, uintptr_t arg7,
+                                       uintptr_t arg8, uintptr_t arg9,
+                                       uintptr_t arg10, uintptr_t arg11)
+{
+    // XXX: TODO
+    USER_PANIC("NYI");
+    uint8_t invoke_bits = get_cap_valid_bits(to);
+    capaddr_t invoke_cptr = get_cap_addr(to) >> (CPTR_BITS - invoke_bits);
+
+    assert(cmd < 0xFF);
+    assert(invoke_bits < 0xFF);
+    // flags << 24 | invoke_bits << 16 | cmd << 8 | syscall_invoke
+    // ^ used for LMP
+    uint32_t invocation = ((invoke_bits << 16) | (cmd << 8) | SYSCALL_INVOKE);
+
+    switch (argc) {
+        case 0:
+        return syscall2(invocation, invoke_cptr);
+        case 1:
+        return syscall3(invocation, invoke_cptr, arg2);
+        case 2:
+        return syscall4(invocation, invoke_cptr, arg2, arg3);
+        case 3:
+        return syscall5(invocation, invoke_cptr, arg2, arg3, arg4);
+        case 4:
+        return syscall6(invocation, invoke_cptr, arg2, arg3, arg4, arg5);
+        case 5:
+        return syscall7(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6);
+        case 6:
+        return syscall8(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6,
+                        arg7);
+        case 7:
+        return syscall9(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6,
+                        arg7, arg8);
+        case 8:
+        return syscall10(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6,
+                        arg7, arg8, arg9);
+        case 9:
+        return syscall11(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6,
+                         arg7, arg8, arg9, arg10);
+        case 10:
+        return syscall12(invocation, invoke_cptr, arg2, arg3, arg4, arg5, arg6,
+                         arg7, arg8, arg9, arg10, arg11);
+        default:
+        return SYSRET(SYS_ERR_ILLEGAL_INVOCATION);
+    }
+    assert(!"reached");
+}
+
+#define cap_invoke11(to, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k)   \
+    cap_invoke(to, 10, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k)
+#define cap_invoke10(to, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j)   \
+    cap_invoke(to, 9, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, 0)
+#define cap_invoke9(to, _a, _b, _c, _d, _e, _f, _g, _h, _i)        \
+    cap_invoke(to, 8, _a, _b, _c, _d, _e, _f, _g, _h, _i, 0, 0)
+#define cap_invoke8(to, _a, _b, _c, _d, _e, _f, _g, _h)    \
+    cap_invoke(to, 7, _a, _b, _c, _d, _e, _f, _g, _h, 0, 0, 0)
+#define cap_invoke7(to, _a, _b, _c, _d, _e, _f, _g)    \
+    cap_invoke(to, 6, _a, _b, _c, _d, _e, _f, _g, 0, 0, 0, 0)
+#define cap_invoke6(to, _a, _b, _c, _d, _e, _f)        \
+    cap_invoke(to, 5, _a, _b, _c, _d, _e, _f, 0, 0, 0, 0, 0)
+#define cap_invoke5(to, _a, _b, _c, _d, _e)            \
+    cap_invoke(to, 4, _a, _b, _c, _d, _e, 0, 0, 0, 0, 0, 0)
+#define cap_invoke4(to, _a, _b, _c, _d)                \
+    cap_invoke(to, 3, _a, _b, _c, _d, 0, 0, 0, 0, 0, 0, 0)
+#define cap_invoke3(to, _a, _b, _c)                    \
+    cap_invoke(to, 2, _a, _b, _c, 0, 0, 0, 0, 0, 0, 0, 0)
+#define cap_invoke2(to, _a, _b)                        \
+    cap_invoke(to, 1, _a, _b, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+#define cap_invoke1(to, _a)                            \
+    cap_invoke(to, 0, _a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+/**
+ * \brief Retype a capability.
+ *
+ * Retypes CPtr 'cap' into 2^'objbits' caps of type 'newtype' and places them
+ * into slots starting at slot 'slot' in the CNode, addressed by 'to', with
+ * 'bits' address bits of 'to' valid.
+ *
+ * See also cap_retype(), which wraps this.
+ *
+ * \param root          Capability of the CNode to invoke
+ * \param cap           Address of cap to retype.
+ * \param newtype       Kernel object type to retype to.
+ * \param objbits       Size of created objects, for variable-sized types
+ * \param to            Address of CNode cap to place retyped caps into.
+ * \param slot          Slot in CNode cap to start placement.
+ * \param bits          Number of valid address bits in 'to'.
+ *
+ * \return Error code
+ */
+static inline errval_t invoke_cnode_retype(struct capref root, capaddr_t cap,
+                                           enum objtype newtype, int objbits,
+                                           capaddr_t to, capaddr_t slot, int bits)
+{
+    assert(cap != CPTR_NULL);
+
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(newtype <= 0xffff);
+    assert(objbits <= 0xff);
+    assert(bits <= 0xff);
+    return syscall6((invoke_bits << 16) | (CNodeCmd_Retype << 8) | SYSCALL_INVOKE, invoke_cptr, cap,
+                    (newtype << 16) | (objbits << 8) | bits,
+                    to, slot).error;
+}
+
+/**
+ * \brief Create a capability.
+ *
+ * Create a new capability of type 'type' and size 'objbits'. The new cap will
+ * be placed in the slot 'dest_slot' of the CNode located at 'dest_cnode_cptr'
+ * in the address space rooted at 'root'.
+ *
+ * See also cap_create(), which wraps this.
+ *
+ * \param root            Capability of the CNode to invoke.
+ * \param type            Kernel object type to create.
+ * \param objbits         Size of created object
+ *                        (ignored for fixed-size objects)
+ * \param dest_cnode_cptr Address of CNode cap, where newly created cap will be
+ *                        placed into.
+ * \param dest_slot       Slot in CNode cap to place new cap.
+ * \param dest_vbits      Number of valid address bits in 'dest_cnode_cptr'.
+ *
+ * \return Error code
+ */
+static inline errval_t invoke_cnode_create(struct capref root,
+                                           enum objtype type, uint8_t objbits,
+                                           capaddr_t dest_cnode_cptr,
+                                           capaddr_t dest_slot,
+                                           uint8_t dest_vbits)
+{
+    /* Pack arguments */
+    assert(dest_cnode_cptr != CPTR_NULL);
+
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(type <= 0xffff);
+    assert(objbits <= 0xff);
+    assert(dest_vbits <= 0xff);
+
+    return syscall5((invoke_bits << 16) | (CNodeCmd_Create << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, (type << 16) | (objbits << 8) | dest_vbits,
+                    dest_cnode_cptr, dest_slot).error;
+}
+
+/**
+ * \brief "Mint" a capability.
+ *
+ * Copies CPtr 'from' into slot 'slot' in the CNode, addressed by 'to', within
+ * the address space, rooted at 'root' and with 'tobits' and 'frombits' address
+ * bits of 'to' and 'from' valid, respectively.
+ *
+ * See also cap_mint(), which wraps this.
+ *
+ * \param root          Capability of the CNode to invoke
+ * \param to            CNode to place copy into.
+ * \param slot          Slot in CNode cap to place copy into.
+ * \param from          Address of cap to copy.
+ * \param tobits        Number of valid address bits in 'to'.
+ * \param frombits      Number of valid address bits in 'from'.
+ * \param param1        1st cap-dependent parameter.
+ * \param param2        2nd cap-dependent parameter.
+ *
+ * \return Error code
+ */
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_cnode_mint(struct capref root, capaddr_t to,
+               capaddr_t slot, capaddr_t from, int tobits,
+               int frombits, uintptr_t param1,
+               uintptr_t param2)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(slot <= 0xffff);
+    assert(tobits <= 0xff);
+    assert(frombits <= 0xff);
+
+    return syscall7((invoke_bits << 16) | (CNodeCmd_Mint << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, to, from,
+                    (slot << 16) | (tobits << 8) | frombits,
+                    param1, param2).error;
+}
+
+/**
+ * \brief Copy a capability.
+ *
+ * Copies CPtr 'from' into slot 'slot' in the CNode, addressed by 'to', within
+ * the address space, rooted at 'root' and with 'tobits' and 'frombits' address
+ * bits of 'to' and 'from' valid, respectively.
+ *
+ * See also cap_copy(), which wraps this.
+ *
+ * \param root          Capability of the CNode to invoke
+ * \param to            CNode to place copy into.
+ * \param slot          Slot in CNode cap to place copy into.
+ * \param from          Address of cap to copy.
+ * \param tobits        Number of valid address bits in 'to'.
+ * \param frombits      Number of valid address bits in 'from'.
+ *
+ * \return Error code
+ */
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_cnode_copy(struct capref root, capaddr_t to,
+                                         capaddr_t slot, capaddr_t from, int tobits,
+                                         int frombits)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(slot <= 0xffff);
+    assert(tobits <= 0xff);
+    assert(frombits <= 0xff);
+
+    return syscall5((invoke_bits << 16) | (CNodeCmd_Copy << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, to, from,
+                    (slot << 16) | (tobits << 8) | frombits).error;
+}
+
+/**
+ * \brief Delete a capability.
+ *
+ * Delete the capability pointed to by 'cap', with 'bits' address bits
+ * of it valid, from the address space rooted at 'root'.
+ *
+ * \param root  Capability of the CNode to invoke
+ * \param cap   Address of cap to delete.
+ * \param bits  Number of valid bits within 'cap'.
+ *
+ * \return Error code
+ */
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_cnode_delete(struct capref root, capaddr_t cap,
+                                           int bits)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(bits <= 0xff);
+
+    return syscall4((invoke_bits << 16) | (CNodeCmd_Delete << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, cap, bits).error;
+}
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_cnode_revoke(struct capref root, capaddr_t cap,
+                                           int bits)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert(bits <= 0xff);
+
+    return syscall4((invoke_bits << 16) | (CNodeCmd_Revoke << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, cap, bits).error;
+}
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_cnode_get_state(struct capref root, capaddr_t cap,
+                                              int bits, distcap_state_t *ret)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(root);
+    capaddr_t invoke_cptr = get_cap_addr(root) >> (CPTR_BITS - invoke_bits);
+
+    assert (bits <= 0xff);
+
+    struct sysret sysret =
+        syscall4((invoke_bits << 16) | (CNodeCmd_GetState << 8) | SYSCALL_INVOKE,
+                invoke_cptr, cap, bits);
+
+    assert(ret != NULL);
+    if (err_is_ok(sysret.error)) {
+        *ret = sysret.value;
+    }
+    else {
+        *ret = 0;
+    }
+    return sysret.error;
+}
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_vnode_map(struct capref ptable, capaddr_t slot, capaddr_t from,
+                 int frombits, uintptr_t flags, uintptr_t offset,
+                 uintptr_t pte_count)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(ptable);
+    capaddr_t invoke_cptr = get_cap_addr(ptable) >> (CPTR_BITS - invoke_bits);
+
+    assert(slot <= 0xffff);
+    assert(frombits <= 0xff);
+
+    // XXX: needs check of flags, offset, and pte_count sizes
+    return syscall7((invoke_bits << 16) | (VNodeCmd_Map << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, from, (slot << 16) | frombits,
+                    flags, offset, pte_count).error;
+}
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_vnode_unmap(struct capref cap, capaddr_t mapping_cptr, int mapping_bits,
+                   size_t entry, size_t pte_count)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(cap);
+    capaddr_t invoke_cptr = get_cap_addr(cap) >> (CPTR_BITS - invoke_bits);
+
+    pte_count -= 1;
+
+    assert(entry < 1024);
+    assert(pte_count < 1024);
+    assert(mapping_bits <= 0xff);
+
+    return syscall4((invoke_bits << 16) | (VNodeCmd_Unmap << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, mapping_cptr,
+                    ((mapping_bits & 0xff)<<20) | ((pte_count & 0x3ff)<<10) |
+                     (entry & 0x3ff)).error;
+}
+
+/**
+ * \brief Return the physical address and size of a frame capability
+ *
+ * \param frame    CSpace address of frame capability
+ * \param ret      frame_identity struct filled in with relevant data
+ *
+ * \return Error code
+ */
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_frame_identify (struct capref frame, struct frame_identity *ret)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(frame);
+    capaddr_t invoke_cptr = get_cap_addr(frame) >> (CPTR_BITS - invoke_bits);
+
+    uintptr_t arg1 = ((uintptr_t)invoke_bits) << 16;
+    arg1 |= ((uintptr_t)FrameCmd_Identify<<8);
+    arg1 |= (uintptr_t)SYSCALL_INVOKE;
+    struct sysret sysret =
+        syscall2(arg1, //(invoke_bits << 16) | (FrameCmd_Identify << 8) | SYSCALL_INVOKE,
+                 invoke_cptr);
+
+    assert(ret != NULL);
+    if (err_is_ok(sysret.error)) {
+        ret->base = sysret.value & (~BASE_PAGE_MASK);
+        ret->bits = sysret.value & BASE_PAGE_MASK;
+        return sysret.error;
+    }
+
+    ret->base = 0;
+    ret->bits = 0;
+    return sysret.error;
+}
+
+/**
+ * \brief Return the physical address and size of a frame capability
+ *
+ * \param frame    CSpace address of frame capability
+ * \param ret      frame_identity struct filled in with relevant data
+ *
+ * \return Error code
+ */
+
+//XXX: workaround for inline bug of arm-gcc 4.6.1 and lower
+#if defined(__ARM_ARCH_7A__) && defined(__GNUC__) \
+       && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && __GNUC_PATCHLEVEL__ <= 1
+static __attribute__((noinline, unused)) errval_t
+#else
+static inline errval_t
+#endif
+invoke_frame_modify_flags (struct capref frame, uintptr_t offset,
+               uintptr_t pages, uintptr_t flags)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(frame);
+    capaddr_t invoke_cptr = get_cap_addr(frame) >> (CPTR_BITS - invoke_bits);
+
+    uintptr_t arg1 = ((uintptr_t)invoke_bits) << 16;
+    arg1 |= ((uintptr_t)FrameCmd_ModifyFlags<<8);
+    arg1 |= (uintptr_t)SYSCALL_INVOKE;
+
+    return syscall5(arg1, invoke_cptr, offset, pages, flags).error;
+}
+
+static inline errval_t invoke_iocap_in(struct capref iocap, enum io_cmd cmd,
+                                       uint16_t port, uint32_t *data)
+{
+    // Not strictly applicable on ARM
+//    USER_PANIC("NYI");
+    return LIB_ERR_NOT_IMPLEMENTED;
+}
+
+static inline errval_t invoke_iocap_out(struct capref iocap, enum io_cmd cmd,
+                                        uint16_t port, uint32_t data)
+{
+    // Not strictly applicable on ARM
+//    USER_PANIC("NYI");
+    return LIB_ERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * \brief Setup a dispatcher, possibly making it runnable
+ *
+ * \param dispatcher    Address of dispatcher capability
+ * \param domdispatcher Address of existing dispatcher for domain ID
+ * \param cspace_root   Root of CSpace for new dispatcher
+ * \param cspace_root_bits  Number of valid bits in cspace_root
+ * \param vspace_root   Root of VSpace for new dispatcher
+ * \param dispatcher_frame Frame capability for dispatcher structure
+ * \param run           Make runnable if true
+ *
+ * Any arguments of CPTR_NULL are ignored.
+ *
+ * \return Error code
+ */
+static inline errval_t
+invoke_dispatcher(struct capref dispatcher, struct capref domdispatcher,
+                  struct capref cspace, struct capref vspace,
+                  struct capref dispframe, bool run)
+{
+    uint8_t root_vbits = get_cap_valid_bits(cspace);
+    capaddr_t root_caddr = get_cap_addr(cspace) >> (CPTR_BITS - root_vbits);
+    capaddr_t vtree_caddr = get_cap_addr(vspace);
+    capaddr_t disp_caddr = get_cap_addr(dispframe);
+    capaddr_t dd_caddr = get_cap_addr(domdispatcher);
+    uint8_t invoke_bits = get_cap_valid_bits(dispatcher);
+    capaddr_t invoke_cptr = get_cap_addr(dispatcher) >> (CPTR_BITS - invoke_bits);
+
+    assert(root_vbits <= 0xff);
+
+    return syscall7((invoke_bits << 16) | (DispatcherCmd_Setup << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, dd_caddr, root_caddr,
+                    (run << 8) | (root_vbits & 0xff), vtree_caddr,
+                    disp_caddr).error;
+}
+
+/**
+ * \brief Setup a VM guest DCB
+ *
+ * \param dcb       Dispatcher capability
+ */
+static inline errval_t invoke_dispatcher_setup_guest(struct capref dispatcher,
+                                                     capaddr_t ep_cap,
+                                                     capaddr_t vnode,
+                                                     capaddr_t vmkit_guest,
+                                                     capaddr_t guest_control_cap)
+{
+    return LIB_ERR_NOT_IMPLEMENTED;
+}
+
+static inline errval_t invoke_irqtable_alloc_vector(struct capref irqcap, int *retirq)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(irqcap);
+    capaddr_t invoke_cptr = get_cap_addr(irqcap) >> (CPTR_BITS - invoke_bits);
+
+    struct sysret ret = syscall2(
+                    (invoke_bits << 16) | (IRQTableCmd_Alloc << 8) | SYSCALL_INVOKE,
+                    invoke_cptr);
+    if (err_is_ok(ret.error)) {
+        *retirq = ret.value;
+    } else {
+        *retirq = 0;
+    }
+    return ret.error;
+}
+
+static inline errval_t invoke_irqtable_set(struct capref irqcap, int irq,
+                                           struct capref ep)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(irqcap);
+    capaddr_t invoke_cptr = get_cap_addr(irqcap) >> (CPTR_BITS - invoke_bits);
+
+    return syscall4((invoke_bits << 16) | (IRQTableCmd_Set << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, irq, get_cap_addr(ep)).error;
+}
+
+static inline errval_t invoke_irqtable_delete(struct capref irqcap, int irq)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(irqcap);
+    capaddr_t invoke_cptr = get_cap_addr(irqcap) >> (CPTR_BITS - invoke_bits);
+
+    return syscall3((invoke_bits << 16) | (IRQTableCmd_Delete << 8) | SYSCALL_INVOKE,
+                    invoke_cptr, irq).error;
+}
+
+static inline errval_t invoke_kernel_get_core_id(struct capref kern_cap,
+                                                 coreid_t *core_id)
+{
+    assert(core_id != NULL);
+
+    uint8_t invoke_bits = get_cap_valid_bits(kern_cap);
+    capaddr_t invoke_cptr = get_cap_addr(kern_cap) >> (CPTR_BITS - invoke_bits);
+
+    struct sysret sysret =
+        syscall2((invoke_bits << 16) | (KernelCmd_Get_core_id << 8) | SYSCALL_INVOKE,
+                 invoke_cptr);
+
+    if (sysret.error == SYS_ERR_OK) {
+        *core_id = sysret.value;
+    }
+
+    return sysret.error;
+}
+
+static inline errval_t invoke_dispatcher_dump_ptables(struct capref dispcap)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(dispcap);
+    capaddr_t invoke_cptr = get_cap_addr(dispcap) >> (CPTR_BITS - invoke_bits);
+
+    return syscall2((invoke_bits << 16) | (DispatcherCmd_DumpPTables << 8) |
+            SYSCALL_INVOKE, invoke_cptr).error;
+}
+
+static inline errval_t
+invoke_dispatcher_properties(
+    struct capref dispatcher,
+    enum task_type type, unsigned long deadline,
+    unsigned long wcet, unsigned long period,
+    unsigned long release, unsigned short weight
+                            )
+{
+    uint8_t invoke_bits = get_cap_valid_bits(dispatcher);
+    capaddr_t invoke_cptr = get_cap_addr(dispatcher) >> (CPTR_BITS - invoke_bits);
+
+    if (weight > 0xffff)
+    {
+        weight = 0xffff;
+    }
+
+    return syscall7((invoke_bits << 16) | (DispatcherCmd_Properties << 8) | SYSCALL_INVOKE,
+                    invoke_cptr,
+                    (type << 16) | weight,
+                    deadline, wcet, period, release).error;
+}
+
+static inline errval_t
+invoke_idcap_identify(
+    struct capref idcap,
+    idcap_id_t *id
+                      )
+{
+    assert(id != NULL);
+
+    uint8_t invoke_bits = get_cap_valid_bits(idcap);
+    capaddr_t invoke_cptr = get_cap_addr(idcap) >> (CPTR_BITS - invoke_bits);
+
+    // user-space pointer 'id' is directly written to by kernel.
+    struct sysret sysret =
+        syscall3((invoke_bits << 16) | (IDCmd_Identify << 8) | SYSCALL_INVOKE,
+                 invoke_cptr, (uintptr_t) id);
+
+    return sysret.error;
+}
+
+static inline errval_t invoke_get_global_paddr(struct capref kernel_cap, genpaddr_t* global)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(kernel_cap);
+    capaddr_t invoke_cptr = get_cap_addr(kernel_cap) >> (CPTR_BITS - invoke_bits);
+    uintptr_t invocation = (invoke_bits << 16)
+                         | (KernelCmd_GetGlobalPhys << 8)
+                         | SYSCALL_INVOKE;
+    struct sysret sysret = syscall2(invocation, invoke_cptr);
+    if (err_is_ok(sysret.error)) {
+        *global = sysret.value;
+    }
+
+    return sysret.error;
+}
+
+#endif
diff --git a/include/arch/aarch64/barrelfish/lmp_chan_arch.h b/include/arch/aarch64/barrelfish/lmp_chan_arch.h
new file mode 100644 (file)
index 0000000..d490817
--- /dev/null
@@ -0,0 +1,121 @@
+/**
+ * \file
+ * \brief
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_LMP_CHAN_H
+#define ARCH_AARCH64_BARRELFISH_LMP_CHAN_H
+
+#include <barrelfish/syscall_arch.h>
+#include <barrelfish/caddr.h>
+#include <barrelfish/debug.h> // for USER_PANIC()
+#include <barrelfish_kpi/lmp.h>
+#include <barrelfish_kpi/syscalls.h>
+
+/**
+ * \brief Send a message on the given LMP channel, if possible
+ *
+ * Non-blocking, may fail if there is no space in the receiver's endpoint.
+ *
+ * \param ep Remote endpoint cap
+ * \param flags LMP send flags
+ * \param send_cap (Optional) capability to send with the message
+ * \param length_words Length of the message in words; payload beyond this
+ *                      size will not be delivered
+ * \param arg1..N Message payload
+ */
+static inline errval_t
+lmp_ep_send(
+    struct capref ep,
+    lmp_send_flags_t flags,
+    struct capref send_cap,
+    uint8_t length_words,
+    uintptr_t arg1,
+    uintptr_t arg2,
+    uintptr_t arg3,
+    uintptr_t arg4,
+    uintptr_t arg5,
+    uintptr_t arg6,
+    uintptr_t arg7,
+    uintptr_t arg8,
+    uintptr_t arg9
+    )
+{
+    USER_PANIC("NYI!");
+    uint8_t invoke_bits = get_cap_valid_bits(ep);
+    capaddr_t invoke_cptr = get_cap_addr(ep) >> (CPTR_BITS - invoke_bits);
+
+    uint8_t send_bits = get_cap_valid_bits(send_cap);
+    capaddr_t send_cptr = get_cap_addr(send_cap) >> (CPTR_BITS - send_bits);
+
+    assert(length_words <= LMP_MSG_LENGTH);
+
+    return syscall12((length_words << 28) | ((flags & 0xf) << 24) |
+                     (invoke_bits << 16) | (send_bits << 8) | SYSCALL_INVOKE,
+                     invoke_cptr, send_cptr,
+                     arg1, arg2, arg3,
+                     arg4, arg5, arg6,
+                     arg7, arg8, arg9).error;
+}
+
+#define lmp_ep_send9(ep, flags, send_cap, a, b, c, d, e, f, g, h, i)   \
+    lmp_ep_send((ep),(flags),(send_cap),9,(a),(b),(c),(d),(e),(f),(g),(h),(i))
+#define lmp_ep_send8(ep, flags, send_cap, a, b, c, d, e, f, g, h, i)    \
+    lmp_ep_send((ep),(flags),(send_cap),8,(a),(b),(c),(d),(e),(f),(g),(h),0)
+#define lmp_ep_send7(ep, flags, send_cap, a, b, c, d, e, f, g)          \
+    lmp_ep_send((ep),(flags),(send_cap),7,(a),(b),(c),(d),(e),(f),(g),0,0)
+#define lmp_ep_send6(ep,flags,send_cap,a,b,c,d,e,f)                     \
+    lmp_ep_send((ep),(flags),(send_cap),6,(a),(b),(c),(d),(e),(f),0,0,0)
+#define lmp_ep_send5(ep,flags,send_cap,a,b,c,d,e)                       \
+    lmp_ep_send((ep),(flags),(send_cap),5,(a),(b),(c),(d),(e),0,0,0,0)
+#define lmp_ep_send4(ep,flags,send_cap,a,b,c,d)                         \
+    lmp_ep_send((ep),(flags),(send_cap),4,(a),(b),(c),(d),0,0,0,0,0)
+#define lmp_ep_send3(ep,flags,send_cap,a,b,c)                           \
+    lmp_ep_send((ep),(flags),(send_cap),3,(a),(b),(c),0,0,0,0,0,0)
+#define lmp_ep_send2(ep,flags,send_cap,a,b)                             \
+    lmp_ep_send((ep),(flags),(send_cap),2,(a),(b),0,0,0,0,0,0,0)
+#define lmp_ep_send1(ep,flags,send_cap,a)                               \
+    lmp_ep_send((ep),(flags),(send_cap),1,(a),0,0,0,0,0,0,0,0)
+#define lmp_ep_send0(ep,flags,send_cap)                                 \
+    lmp_ep_send((ep),(flags),(send_cap),0,0,0,0,0,0,0,0,0,0)
+
+#define lmp_chan_send(lc,flags,send_cap,len,a,b,c,d,e,f,g,h,i)          \
+    lmp_ep_send((lc)->remote_cap,(flags),(send_cap),(len),              \
+                (a),(b),(c),(d),(e),(f),(g),(h),(i))
+
+#define lmp_chan_send9(lc,flags,send_cap,a,b,c,d,e,f,g,h,i)             \
+    lmp_ep_send9((lc)->remote_cap,(flags),(send_cap),                   \
+                 (a),(b),(c),(d),(e),(f),(g),(h),(i))
+#define lmp_chan_send8(lc,flags,send_cap,a,b,c,d,e,f,g,h)               \
+    lmp_ep_send8((lc)->remote_cap,(flags),(send_cap),                   \
+                 (a),(b),(c),(d),(e),(f),(g),(h))
+#define lmp_chan_send7(lc,flags,send_cap,a,b,c,d,e,f,g)                 \
+    lmp_ep_send7((lc)->remote_cap,(flags),(send_cap),                   \
+                 (a),(b),(c),(d),(e),(f),(g))
+#define lmp_chan_send6(lc,flags,send_cap,a,b,c,d,e,f)                   \
+    lmp_ep_send6((lc)->remote_cap,(flags),(send_cap),                   \
+                 (a),(b),(c),(d),(e),(f))
+#define lmp_chan_send5(lc,flags,send_cap,a,b,c,d,e)                     \
+    lmp_ep_send5((lc)->remote_cap,(flags),(send_cap),                   \
+                 (a),(b),(c),(d),(e))
+#define lmp_chan_send4(lc,flags,send_cap,a,b,c,d)                       \
+    lmp_ep_send4((lc)->remote_cap,(flags),(send_cap), (a),(b),(c),(d))
+#define lmp_chan_send3(lc,flags,send_cap,a,b,c)                         \
+    lmp_ep_send3((lc)->remote_cap,(flags),(send_cap), (a),(b),(c))
+#define lmp_chan_send2(lc,flags,send_cap,a,b)                           \
+    lmp_ep_send2((lc)->remote_cap,(flags),(send_cap), (a),(b))
+#define lmp_chan_send1(lc,flags,send_cap,a)                             \
+    lmp_ep_send1((lc)->remote_cap,(flags),(send_cap),(a))
+#define lmp_chan_send0(lc,flags,send_cap)                               \
+    lmp_ep_send0((lc)->remote_cap,(flags),(send_cap))
+
+#endif
diff --git a/include/arch/aarch64/barrelfish/pmap_arch.h b/include/arch/aarch64/barrelfish/pmap_arch.h
new file mode 100644 (file)
index 0000000..a69585a
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * \file
+ * \brief pmap management wrappers
+ */
+
+/*
+ * Copyright (c) 2010, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_PMAP_H
+#define ARCH_AARCH64_BARRELFISH_PMAP_H
+
+#include <target/aarch64/barrelfish/pmap_target.h>
+
+#define ARCH_DEFAULT_PMAP_SIZE sizeof(struct pmap_aarch64)
+
+errval_t pmap_init(struct pmap *p, struct vspace *v, struct capref vnode,
+                   struct slot_allocator *opt_slot_alloc);
+errval_t pmap_current_init(bool);
+
+#endif // ARCH_AARCH64_BARRELFISH_PMAP_H
diff --git a/include/arch/aarch64/barrelfish/syscall_arch.h b/include/arch/aarch64/barrelfish/syscall_arch.h
new file mode 100644 (file)
index 0000000..0d97b2f
--- /dev/null
@@ -0,0 +1,85 @@
+/**
+ * \file
+ * \brief User-side system call implementation
+ */
+
+/*
+ * Copyright (c) 2007, 2008, 2009, 2010, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_SYSCALL_H
+#define ARCH_AARCH64_BARRELFISH_SYSCALL_H
+
+//
+// This is the actual system call function. Because the return
+// value is a structure, r0 is setup point to the return
+// structure.  The first system call argument supplied at end of
+// argument list and moved to r0 before use in syscall. This
+// simplifies the amount of swizzling involved therein as r1 =
+// arg1, r2 = arg2, r3 = arg3, and the remaining args including
+// arg0 are on the stack.
+//
+extern struct sysret
+syscall(uintptr_t b, uintptr_t c, uintptr_t d, uintptr_t e,
+        uintptr_t f, uintptr_t g, uintptr_t h, uintptr_t i,
+        uintptr_t j, uintptr_t k, uintptr_t l, uintptr_t a);
+
+#define syscallx(a,b,c,d,e,f,g,h,i,j,k,l)                               \
+    syscall(b,c,d,e,f,g,h,i,j,k,l,a)
+
+//
+// System call argument 0 is encoded thus:
+//
+// arg[3:0]  = syscall ordinal (e.g. SYSCALL_YIELD)
+// arg[7:4]  = number of system call arguments (for sanity checking)
+// arg[31:8] = SYSCALL_INVOKE arguments | do_not_care
+//
+
+//C_ASSERT(SYSCALL_COUNT <= 0xf);
+#define sysord(a,n) (a) | ((n) << 4)
+
+// The following macros add the argument count to arg0
+
+#define syscall12(a,b,c,d,e,f,g,h,i,j,k,l)                              \
+    syscallx(sysord(a,10),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l))
+
+#define syscall11(a,b,c,d,e,f,g,h,i,j,k)                                \
+    syscallx(sysord(a,10),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k),0)
+
+#define syscall10(a,b,c,d,e,f,g,h,i,j)                                  \
+    syscallx(sysord(a,10),(b),(c),(d),(e),(f),(g),(h),(i),(j),0,0)
+
+#define syscall9(a,b,c,d,e,f,g,h,i)                                     \
+    syscallx(sysord(a,9),(b),(c),(d),(e),(f),(g),(h),(i),0,0,0)
+
+#define syscall8(a,b,c,d,e,f,g,h)                                       \
+    syscallx(sysord(a,8),(b),(c),(d),(e),(f),(g),(h),0,0,0,0)
+
+#define syscall7(a,b,c,d,e,f,g)                                         \
+    syscallx(sysord(a,7),(b),(c),(d),(e),(f),(g),0,0,0,0,0)
+
+#define syscall6(a,b,c,d,e,f)                                           \
+    syscallx(sysord(a,6),(b),(c),(d),(e),(f),0,0,0,0,0,0)
+
+#define syscall5(a,b,c,d,e)                                             \
+    syscallx(sysord(a,5),(b),(c),(d),(e),0,0,0,0,0,0,0)
+
+#define syscall4(a,b,c,d)                                               \
+    syscallx(sysord(a,4),(b),(c),(d),0,0,0,0,0,0,0,0)
+
+#define syscall3(a,b,c)                                                 \
+    syscallx(sysord(a,3),(b),(c),0,0,0,0,0,0,0,0,0)
+
+#define syscall2(a,b)                                                   \
+    syscallx(sysord(a,2),(b),0,0,0,0,0,0,0,0,0,0)
+
+#define syscall1(a)                                                     \
+    syscallx(sysord(a,1),0,0,0,0,0,0,0,0,0,0,0)
+
+
+#endif
diff --git a/include/arch/aarch64/barrelfish_kpi/asm_inlines_arch.h b/include/arch/aarch64/barrelfish_kpi/asm_inlines_arch.h
new file mode 100644 (file)
index 0000000..10f0791
--- /dev/null
@@ -0,0 +1,18 @@
+/**
+ * \file
+ * \brief
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_ASM_INLINES_H
+#define ARCH_AARCH64_BARRELFISH_KPI_ASM_INLINES_H
+
+#endif // ARCH_AARCH64_BARRELFISH_KPI_ASM_INLINES_H
diff --git a/include/arch/aarch64/barrelfish_kpi/cpu_arch.h b/include/arch/aarch64/barrelfish_kpi/cpu_arch.h
new file mode 100644 (file)
index 0000000..4900545
--- /dev/null
@@ -0,0 +1,21 @@
+/**
+ * \file
+ * \brief Arch specific CPU declarations
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_CPU_H
+#define ARCH_AARCH64_BARRELFISH_KPI_CPU_H
+
+/// This CPU supports lazy FPU context switching?
+#undef FPU_LAZY_CONTEXT_SWITCH
+
+#endif
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (c) 2010, 2011, ETH Zurich.
+ * Copyright (c) 2010, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
  */
 
-#ifndef ARCH_X86_64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
-#define ARCH_X86_64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
+#define ARCH_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
 
-#include <target/k1om/barrelfish_kpi/dispatcher_shared_target.h>
+#include <target/aarch64/barrelfish_kpi/dispatcher_shared_target.h>
 
 /**
  * \brief Returns whether dispatcher is currently disabled, given IP.
 static inline bool dispatcher_is_disabled_ip(dispatcher_handle_t handle,
                                              uintptr_t rip)
 {
-    /* one crit_pc pair */
     struct dispatcher_shared_generic *disp =
         get_dispatcher_shared_generic(handle);
-    struct dispatcher_shared_x86_64 *disp64 =
-        get_dispatcher_shared_x86_64(handle);
+    /* one crit_pc pair */
+    struct dispatcher_shared_aarch64 *dispaarch64 =
+        get_dispatcher_shared_aarch64(handle);
     return disp->disabled ||
-        (disp64->crit_pc_low <= rip && rip < disp64->crit_pc_high);
+        (dispaarch64->crit_pc_low <= rip && rip < dispaarch64->crit_pc_high);
 }
 
 static inline arch_registers_state_t*
 dispatcher_get_enabled_save_area(dispatcher_handle_t handle)
 {
-    return dispatcher_x86_64_get_enabled_save_area(handle);
+    return &((struct dispatcher_shared_aarch64 *)handle)->enabled_save_area;
 }
 
 static inline arch_registers_state_t*
 dispatcher_get_disabled_save_area(dispatcher_handle_t handle)
 {
-    return dispatcher_x86_64_get_disabled_save_area(handle);
+    return &((struct dispatcher_shared_aarch64 *)handle)->disabled_save_area;
 }
 
 static inline arch_registers_state_t*
 dispatcher_get_trap_save_area(dispatcher_handle_t handle)
 {
-    return dispatcher_x86_64_get_trap_save_area(handle);
-}
-
-static inline arch_registers_fpu_state_t*
-dispatcher_get_enabled_fpu_save_area(dispatcher_handle_t handle)
-{
-    return dispatcher_x86_64_get_enabled_fpu_save_area(handle);
-}
-
-static inline arch_registers_fpu_state_t*
-dispatcher_get_disabled_fpu_save_area(dispatcher_handle_t handle)
-{
-    return dispatcher_x86_64_get_disabled_fpu_save_area(handle);
+    return &((struct dispatcher_shared_aarch64 *)handle)->trap_save_area;
 }
 
-#endif // ARCH_X86_64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
+#endif // ARCH_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_ARCH_H
diff --git a/include/arch/aarch64/barrelfish_kpi/flags_arch.h b/include/arch/aarch64/barrelfish_kpi/flags_arch.h
new file mode 100644 (file)
index 0000000..25f7143
--- /dev/null
@@ -0,0 +1,33 @@
+/**
+ * \file
+ * \brief
+ */
+
+/*
+ * Copyright (c) 2010, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_FLAGS_H
+#define ARCH_AARCH64_BARRELFISH_KPI_FLAGS_H
+
+// XXX: TODO: fix these for aarch64
+#define ARM_MODE_USR    0x10
+#define ARM_MODE_FIQ    0x11
+#define ARM_MODE_IRQ    0x12
+#define ARM_MODE_SVC    0x13
+#define ARM_MODE_ABT    0x17
+#define ARM_MODE_UND    0x1b
+#define ARM_MODE_SYS    0x1f
+#define ARM_MODE_MASK   0x1f
+#define ARM_MODE_PRIV   0x0f
+
+#define CPSR_IF_MASK    0xc0
+#define CPSR_I_MASK     0x80
+#define CPSR_F_MASK     0x40
+
+#endif // ARCH_AARCH64_BARRELFISH_KPI_FLAGS_H
diff --git a/include/arch/aarch64/barrelfish_kpi/generic_arch.h b/include/arch/aarch64/barrelfish_kpi/generic_arch.h
new file mode 100644 (file)
index 0000000..9eea949
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * \file
+ * \brief Generic include for a bunch of arch specific files
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_GENERIC_H
+#define ARCH_AARCH64_BARRELFISH_KPI_GENERIC_H
+
+#include <barrelfish_kpi/flags_arch.h>
+#include <barrelfish_kpi/spinlocks_arch.h>
+#include <barrelfish_kpi/unknown_arch.h>
+
+#endif // ARCH_ARM_BARRELFISH_KPI_GENERIC_H
similarity index 52%
rename from include/arch/k1om/barrelfish_kpi/lmp_arch.h
rename to include/arch/aarch64/barrelfish_kpi/lmp_arch.h
index 5c02376..01da61e 100644 (file)
@@ -4,23 +4,24 @@
  */
 
 /*
- * Copyright (c) 2010, ETH Zurich.
+ * Copyright (c) 2015, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
  * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
  */
 
-#ifndef ARCH_X86_64_BARRELFISH_KPI_LMP_H
-#define ARCH_X86_64_BARRELFISH_KPI_LMP_H
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_LMP_H
+#define ARCH_AARCH64_BARRELFISH_KPI_LMP_H
 
 /**
  * \brief Maximum total length of LMP and LRPC messages (payload)
  *
  * Determined by number of registers available to transfer messages.
+ * XXX: TODO: figure out numbers here
  */
-#define LMP_MSG_LENGTH          10
-#define LRPC_MSG_LENGTH         4
+#define LMP_MSG_LENGTH          9
+#define LRPC_MSG_LENGTH         0
 
-#endif // ARCH_X86_64_BARRELFISH_KPI_LMP_H
+#endif // ARCH_AARCH64_BARRELFISH_KPI_LMP_H
diff --git a/include/arch/aarch64/barrelfish_kpi/paging_arch.h b/include/arch/aarch64/barrelfish_kpi/paging_arch.h
new file mode 100644 (file)
index 0000000..02cb275
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * \file
+ * \brief Arch specific paging definitions
+ */
+
+/*
+ * Copyright (c) 2010, 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_PAGING_H
+#define ARCH_AARCH64_BARRELFISH_KPI_PAGING_H
+
+#if defined(__ARM_ARCH_8A__)
+#include <target/aarch64/barrelfish_kpi/paging_arm_v8.h>
+#else
+#error "Missing ARM Paging header file"
+#endif
+
+#endif // ARCH_ARM_BARRELFISH_KPI_PAGING_H
diff --git a/include/arch/aarch64/barrelfish_kpi/registers_arch.h b/include/arch/aarch64/barrelfish_kpi/registers_arch.h
new file mode 100644 (file)
index 0000000..e7ee18c
--- /dev/null
@@ -0,0 +1,162 @@
+/**
+ * \file
+ * \brief architecture-specific registers code
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_REGISTERS_H
+#define ARCH_AARCH64_BARRELFISH_KPI_REGISTERS_H
+
+// TODO: update for aarch64
+
+#ifndef __ASSEMBLER__
+#include<stddef.h> // for offsetof
+//#include <barrelfish/curdispatcher_arch.h> // XXX For curdispatcher()
+#include <barrelfish_kpi/types.h> // for lvaddr_t
+#endif
+
+//
+// Offsets of saved registers in save area.
+//
+#define CPSR_REG  0
+#define X0_REG    1
+#define X1_REG    2
+#define X2_REG    3
+#define X3_REG    4
+#define X4_REG    5
+#define X5_REG    6
+#define X6_REG    7
+#define X7_REG    8
+#define X8_REG    9
+#define X9_REG   10
+#define X10_REG  11
+#define X11_REG  12
+#define X12_REG  13
+#define X13_REG  14
+#define X14_REG  15
+#define X15_REG  16
+#define X16_REG  17
+#define X17_REG  18
+#define X18_REG  19
+#define X19_REG  20
+#define X20_REG  21
+#define X21_REG  22
+#define X22_REG  23
+#define X23_REG  24
+#define X24_REG  25
+#define X25_REG  26
+#define X26_REG  27
+#define X27_REG  28
+#define X28_REG  29
+#define X29_REG  30
+#define SP_REG   31
+#define LR_REG   32
+#define PC_REG   33
+
+#define NUM_REGS 34            /* cpsr, x0-x30, sp, pc */
+#define NUM_FPU_REGS 0
+#define ARCH_NUMREGS NUM_REGS
+
+#define RIP_REG  PC_REG        /* pc == rip.x86_64 */
+#define RSP_REG  SP_REG        /* sp == rsp.x86_64 */
+
+/// Register used in system calls to encode function and arg count
+#define SYSCALL_REG       0
+
+//
+// Helpers for pasting system reserved register names
+//
+#define REG_OFFSET_CONCAT(x)    x ## _REG
+#define REG_OFFSET(name)        REG_OFFSET_CONCAT(name)
+
+#define REG_NAME(ord)
+
+#ifndef __ASSEMBLER__
+
+union registers_aarch64 {
+    struct registers_aarch64_named {
+        uint64_t cpsr;
+        uint64_t r0, r1, r2, r3;
+        uint64_t r4, r5, r6, r7, r8;
+        uint64_t rtls;  // r9 is thread local storage
+        uint64_t r10;   // r10 is for global offset table base.
+        uint64_t r11, r12, r13, r14;
+        uint64_t r15, r16, r17, r18;
+        uint64_t r19, r20, r21, r22;
+        uint64_t r23, r24, r25, r26;
+        uint64_t r27, r28, r29;
+        uint64_t stack; // sp
+        uint64_t link;  // x30
+        uint64_t pc;    // pc
+    } named;
+    struct registers_aarch64_syscall_args {
+        uint64_t cpsr;
+        uint64_t arg0, arg1, arg2, arg3;
+        uint64_t arg4, arg5, arg6, arg7, arg8;
+        uint64_t arg9;
+        uint64_t arg10;
+        uint64_t fp;
+        uint64_t arg11, arg12, arg13, arg14;
+        uint64_t arg15, arg16, arg17, arg18;
+        uint64_t arg19, arg20, arg21, arg22;
+        uint64_t arg23, arg24, arg25, arg26;
+        uint64_t arg27, arg28;
+        uint64_t stack;
+        uint64_t link;
+        uint64_t pc;
+    } syscall_args;
+    uint64_t regs[sizeof(struct registers_aarch64_named) / sizeof(uint64_t)];
+};
+
+STATIC_ASSERT_SIZEOF(union registers_aarch64, NUM_REGS * sizeof(uint64_t));
+
+STATIC_ASSERT((REG_OFFSET(THREAD_REGISTER) * sizeof(uint64_t)) == offsetof(struct registers_aarch64_named, rtls), "Thread register conflict");
+
+
+///< Opaque handle for the register state
+typedef union registers_aarch64 arch_registers_state_t;
+
+///< Opaque handle for the FPU register state
+typedef void *arch_registers_fpu_state_t;
+
+static inline void
+registers_set_entry(arch_registers_state_t *regs, lvaddr_t entry)
+{
+    regs->named.pc = (uint64_t)entry;
+}
+
+static inline void
+registers_set_param(arch_registers_state_t *regs, uint64_t param)
+{
+    regs->named.r0 = param;
+}
+
+static inline void
+registers_get_param(arch_registers_state_t *regs, uint64_t *param)
+{
+    *param = regs->named.r0;
+}
+
+static inline uint64_t
+registers_get_ip(arch_registers_state_t *regs)
+{
+    return regs->named.pc;
+}
+
+static inline uint64_t
+registers_get_sp(arch_registers_state_t *regs)
+{
+    return regs->named.stack;
+}
+
+#endif // __ASSEMBLER__
+
+#endif // ARCH_AARCH64_BARRELFISH_KPI_REGISTERS_H
@@ -1,6 +1,6 @@
 /**
  * \file
- * \brief Generic include for a bunch of arch specific files
+ * \brief
  */
 
 /*
  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
  */
 
-#ifndef ARCH_X86_64_BARRELFISH_KPI_GENERIC_H
-#define ARCH_X86_64_BARRELFISH_KPI_GENERIC_H
+#ifndef ARCH_ARM_BARRELFISH_KPI_SPINLOCKS_H
+#define ARCH_ARM_BARRELFISH_KPI_SPINLOCKS_H
 
-#include <barrelfish_kpi/eflags_arch.h>
 #include <barrelfish_kpi/asm_inlines_arch.h>
-#include <arch/k1om/barrelfish_kpi/asm_inlines_arch.h>
 
-#endif // ARCH_X86_64_BARRELFISH_KPI_GENERIC_H
+typedef volatile uint32_t spinlock_t;
+
+static inline void acquire_spinlock(spinlock_t *spinlock)
+{
+    // TODO
+}
+
+static inline void release_spinlock(spinlock_t *spinlock)
+{
+    // TODO
+}
+
+#endif // ARCH_ARM_BARRELFISH_KPI_SPINLOCKS_H
diff --git a/include/arch/aarch64/barrelfish_kpi/unknown_arch.h b/include/arch/aarch64/barrelfish_kpi/unknown_arch.h
new file mode 100644 (file)
index 0000000..97af45a
--- /dev/null
@@ -0,0 +1,45 @@
+/**
+ * \file
+ * \brief Not sure where to put these definitions
+ */
+
+/*
+ * Copyright (c) 2010, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_KPI_UNKNOWN_H
+#define ARCH_AARCH64_BARRELFISH_KPI_UNKNOWN_H
+
+#ifndef IN_KERNEL
+
+// XXX: this code shouldn't be in the KPI, and it should be living behind a clean portability layer!
+// required for lib/lwip/src/barrelfish/idc_barrelfish.c
+
+#include <assert.h>
+
+static inline void mfence(void)
+{
+    assert(!"mfence() NYI for ARM");
+}
+
+static inline void cache_flush_range(void *base, size_t len)
+{
+    assert(!"cache_flush_range() NYI for ARM");
+}
+
+
+static inline uint64_t rdtsc(void)
+{
+    assert(!"rdtsc() NYI for ARM");
+    return 0;
+}
+
+
+#endif
+
+#endif // ARCH_ARM_BARRELFISH_KPI_UNKNOWN_H
diff --git a/include/arch/aarch64/bench/bench_arch.h b/include/arch/aarch64/bench/bench_arch.h
new file mode 100644 (file)
index 0000000..a6ae8be
--- /dev/null
@@ -0,0 +1,41 @@
+/**
+ * \file
+ * \brief Arch specific bench include.
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef ARCH_AARCH64_BARRELFISH_BENCH_H
+#define ARCH_AARCH64_BARRELFISH_BENCH_H
+
+#include <barrelfish/sys_debug.h>
+#include <bench/bench.h>
+#include <stdio.h>
+
+extern uint64_t tsc_hz;
+void bench_arch_init(void);
+
+
+/**
+ * \brief Take a timestamp
+ */
+static inline cycles_t bench_tsc(void)
+{
+    STATIC_ASSERT_SIZEOF(cycles_t, sizeof(uintptr_t));
+    cycles_t tsc;
+    sys_debug_hardware_timer_read((uintptr_t *)&tsc);
+    return tsc;
+}
+
+uint64_t bench_tsc_to_ms(cycles_t tsc);
+uint64_t bench_tsc_to_us(cycles_t tsc);
+uint64_t bench_tsc_per_us(void);
+uint64_t bench_tsc_per_ms(void);
+#endif // ARCH_AARCH64_BARRELFISH_BENCH_H
diff --git a/include/arch/aarch64/float.h b/include/arch/aarch64/float.h
new file mode 100644 (file)
index 0000000..3fb0af3
--- /dev/null
@@ -0,0 +1,83 @@
+/*      $NetBSD: float.h,v 1.6 2005/12/11 12:16:47 christos Exp $       */\r
+/*      $NetBSD: float_ieee754.h,v 1.8 2005/12/11 12:25:20 christos Exp $       */\r
+\r
+/*\r
+ * Copyright (c) 1992, 1993\r
+ *      The Regents of the University of California.  All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the University nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ *      @(#)float.h     8.1 (Berkeley) 6/10/93\r
+ */\r
+\r
+#ifndef _ARM_FLOAT_H_\r
+#define _ARM_FLOAT_H_\r
+\r
+#include <sys/cdefs.h>\r
+\r
+#ifndef FLT_ROUNDS\r
+__BEGIN_DECLS\r
+extern int __flt_rounds(void);\r
+__END_DECLS\r
+#define FLT_ROUNDS      -1 /* __flt_rounds() */\r
+#endif\r
+\r
+#define FLT_EVAL_METHOD (-1)            /* XXX */\r
+\r
+#define LDBL_MANT_DIG   64\r
+#define LDBL_EPSILON    1.0842021724855044340E-19L\r
+#define LDBL_DIG        18\r
+#define LDBL_MIN_EXP    (-16381)\r
+#define LDBL_MIN        1.6810515715560467531E-4932L\r
+#define LDBL_MIN_10_EXP (-4931)\r
+#define LDBL_MAX_EXP    16384\r
+#define LDBL_MAX        1.1897314953572317650E+4932L\r
+#define LDBL_MAX_10_EXP 4932\r
+\r
+#define FLT_RADIX       2               /* b */\r
+\r
+#define FLT_MANT_DIG    24              /* p */\r
+#define FLT_EPSILON     1.19209290E-7F  /* b**(1-p) */\r
+#define FLT_DIG         6               /* floor((p-1)*log10(b))+(b == 10) */\r
+#define FLT_MIN_EXP     (-125)          /* emin */\r
+#define FLT_MIN         1.17549435E-38F /* b**(emin-1) */\r
+#define FLT_MIN_10_EXP  (-37)           /* ceil(log10(b**(emin-1))) */\r
+#define FLT_MAX_EXP     128             /* emax */\r
+#define FLT_MAX         3.40282347E+38F /* (1-b**(-p))*b**emax */\r
+#define FLT_MAX_10_EXP  38              /* floor(log10((1-b**(-p))*b**emax)) */\r
+\r
+#define DBL_MANT_DIG    53\r
+#define DBL_EPSILON     2.2204460492503131E-16\r
+#define DBL_DIG         15\r
+#define DBL_MIN_EXP     (-1021)\r
+#define DBL_MIN         2.2250738585072014E-308\r
+#define DBL_MIN_10_EXP  (-307)\r
+#define DBL_MAX_EXP     1024\r
+#define DBL_MAX         1.7976931348623157E+308\r
+#define DBL_MAX_10_EXP  308\r
+\r
+#define DECIMAL_DIG     17              /* ceil((1+p*log10(b))-(b==10) */\r
+\r
+#endif /* !_ARM_FLOAT_H_ */\r
index c0e2e8d..cf5d4bc 100644 (file)
@@ -20,6 +20,8 @@
 #define CURRENT_CPU_TYPE CPU_ARM7
 #elif __ARM_ARCH_5__
 #define CURRENT_CPU_TYPE CPU_ARM5
+#elif __ARM_ARCH_8A__
+#define CURRENT_CPU_TYPE CPU_ARM8
 #else
 #error "must define CURRENT_CPU_TYPE"
 #endif
index 036e528..c0a84d8 100644 (file)
@@ -378,14 +378,14 @@ invoke_vnode_unmap(struct capref cap, capaddr_t mapping_cptr, int mapping_bits,
 
     pte_count -= 1;
 
-    assert(entry < 1024);
-    assert(pte_count < 1024);
+    assert(entry < 4096);
+    assert(pte_count < 4096);
     assert(mapping_bits <= 0xff);
 
     return syscall4((invoke_bits << 16) | (VNodeCmd_Unmap << 8) | SYSCALL_INVOKE,
                     invoke_cptr, mapping_cptr,
-                    ((mapping_bits & 0xff)<<20) | ((pte_count & 0x3ff)<<10) |
-                     (entry & 0x3ff)).error;
+                    ((mapping_bits & 0xff)<<24) | ((pte_count & 0xfff)<<12) |
+                     (entry & 0xfff)).error;
 }
 
 /**
@@ -587,6 +587,15 @@ static inline errval_t invoke_dispatcher_dump_ptables(struct capref dispcap)
             SYSCALL_INVOKE, invoke_cptr).error;
 }
 
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(dispcap);
+    capaddr_t invoke_cptr = get_cap_addr(dispcap) >> (CPTR_BITS - invoke_bits);
+
+    return syscall2((invoke_bits << 16) | (DispatcherCmd_DumpCapabilities << 8) |
+            SYSCALL_INVOKE, invoke_cptr).error;
+}
+
 static inline errval_t
 invoke_dispatcher_properties(
     struct capref dispatcher,
index f54daed..7a05247 100644 (file)
@@ -4,12 +4,12 @@
  */
 
 /*
- * Copyright (c) 2010, ETH Zurich.
+ * Copyright (c) 2010, 2015, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
  * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
  */
 
 #ifndef ARCH_ARM_BARRELFISH_KPI_PAGING_H
@@ -23,6 +23,8 @@
 #include <target/arm/barrelfish_kpi/paging_arm_v7.h>
 #elif defined(__ARM_ARCH_7M__)
 #include <target/arm/barrelfish_kpi/paging_arm_v7m.h>
+#elif defined(__ARM_ARCH_8A__)
+#include <target/arm/barrelfish_kpi/paging_arm_v8.h>
 #else
 #error "Missing ARM Paging header file"
 #endif
index d6213fa..a7fe793 100644 (file)
@@ -113,7 +113,7 @@ registers_set_param(arch_registers_state_t *regs, uint32_t param)
 }
 
 static inline void
-registers_get_param(arch_registers_state_t *regs, uint32_t *param)
+registers_get_param(arch_registers_state_t *regs, uintptr_t *param)
 {
     *param = regs->named.r0;
 }
diff --git a/include/arch/k1om/_fpmath.h b/include/arch/k1om/_fpmath.h
deleted file mode 100644 (file)
index 41b01c3..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG>
- * 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.
- *
- * $FreeBSD: src/lib/libc/amd64/_fpmath.h,v 1.7 2008/01/17 16:39:06 bde Exp $
- */
-
-union IEEEl2bits {
-       long double     e;
-       struct {
-               unsigned int    manl    :32;
-               unsigned int    manh    :32;
-               unsigned int    exp     :15;
-               unsigned int    sign    :1;
-               unsigned int    junkl   :16;
-               unsigned int    junkh   :32;
-       } bits;
-       struct {
-               unsigned long   man     :64;
-               unsigned int    expsign :16;
-               unsigned long   junk    :48;
-       } xbits;
-};
-
-#define        LDBL_NBIT       0x80000000
-#define        mask_nbit_l(u)  ((u).bits.manh &= ~LDBL_NBIT)
-
-#define        LDBL_MANH_SIZE  32
-#define        LDBL_MANL_SIZE  32
-
-#define        LDBL_TO_ARRAY32(u, a) do {                      \
-       (a)[0] = (uint32_t)(u).bits.manl;               \
-       (a)[1] = (uint32_t)(u).bits.manh;               \
-} while (0)
diff --git a/include/arch/k1om/arch/inttypes.h b/include/arch/k1om/arch/inttypes.h
deleted file mode 100644 (file)
index 73ee8f7..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Australian Public Licence B (OZPLB)
- *
- * Version 1-0
- *
- * Copyright (c) 2004 National ICT Australia
- *
- * All rights reserved.
- *
- * Developed by: Embedded, Real-time and Operating Systems Program (ERTOS)
- *               National ICT Australia
- *               http://www.ertos.nicta.com.au
- *
- * Permission is granted by National ICT Australia, free of charge, to
- * any person obtaining a copy of this software and any associated
- * documentation files (the "Software") to deal with the Software without
- * restriction, including (without limitation) the rights to use, copy,
- * modify, adapt, merge, publish, distribute, communicate to the public,
- * sublicense, and/or sell, lend or rent out copies of the Software, and
- * to permit persons to whom the Software is furnished to do so, subject
- * to the following conditions:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimers.
- *
- *     * Redistributions in binary form must reproduce the above
- *       copyright notice, this list of conditions and the following
- *       disclaimers in the documentation and/or other materials provided
- *       with the distribution.
- *
- *     * Neither the name of National ICT Australia, nor the names of its
- *       contributors, may be used to endorse or promote products derived
- *       from this Software without specific prior written permission.
- *
- * EXCEPT AS EXPRESSLY STATED IN THIS LICENCE AND TO THE FULL EXTENT
- * PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS-IS", AND
- * NATIONAL ICT AUSTRALIA AND ITS CONTRIBUTORS MAKE NO REPRESENTATIONS,
- * WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS
- * REGARDING THE CONTENTS OR ACCURACY OF THE SOFTWARE, OR OF TITLE,
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT,
- * THE ABSENCE OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF
- * ERRORS, WHETHER OR NOT DISCOVERABLE.
- *
- * TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
- * NATIONAL ICT AUSTRALIA OR ITS CONTRIBUTORS BE LIABLE ON ANY LEGAL
- * THEORY (INCLUDING, WITHOUT LIMITATION, IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHERWISE) FOR ANY CLAIM, LOSS, DAMAGES OR OTHER
- * LIABILITY, INCLUDING (WITHOUT LIMITATION) LOSS OF PRODUCTION OR
- * OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS
- * OF ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR
- * OTHER ECONOMIC LOSS; OR ANY SPECIAL, INCIDENTAL, INDIRECT,
- * CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES, ARISING OUT OF OR IN
- * CONNECTION WITH THIS LICENCE, THE SOFTWARE OR THE USE OF OR OTHER
- * DEALINGS WITH THE SOFTWARE, EVEN IF NATIONAL ICT AUSTRALIA OR ITS
- * CONTRIBUTORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH CLAIM, LOSS,
- * DAMAGES OR OTHER LIABILITY.
- *
- * If applicable legislation implies representations, warranties, or
- * conditions, or imposes obligations or liability on National ICT
- * Australia or one of its contributors in respect of the Software that
- * cannot be wholly or partly excluded, restricted or modified, the
- * liability of National ICT Australia or the contributor is limited, to
- * the full extent permitted by the applicable legislation, at its
- * option, to:
- * a.  in the case of goods, any one or more of the following:
- * i.  the replacement of the goods or the supply of equivalent goods;
- * ii.  the repair of the goods;
- * iii. the payment of the cost of replacing the goods or of acquiring
- *  equivalent goods;
- * iv.  the payment of the cost of having the goods repaired; or
- * b.  in the case of services:
- * i.  the supplying of the services again; or
- * ii.  the payment of the cost of having the services supplied again.
- *
- * The construction, validity and performance of this licence is governed
- * by the laws in force in New South Wales, Australia.
- */
-#ifndef _ARCH_IA32_INT_TYPES
-#define _ARCH_IA32_INT_TYPES
-
-#define __LENGTH_8_MOD "hh"
-#define __LENGTH_16_MOD "h"
-#define __LENGTH_32_MOD
-#define __LENGTH_64_MOD "l"
-#define __LENGTH_MAX_MOD "l"
-#define __LENGTH_PTR_MOD "l"
-
-#endif
diff --git a/include/arch/k1om/arch/setjmp.h b/include/arch/k1om/arch/setjmp.h
deleted file mode 100644 (file)
index e606c8f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Australian Public Licence B (OZPLB)
- * 
- * Version 1-0
- * 
- * Copyright (c) 2004 National ICT Australia
- * 
- * All rights reserved. 
- * 
- * Developed by: Embedded, Real-time and Operating Systems Program (ERTOS)
- *               National ICT Australia
- *               http://www.ertos.nicta.com.au
- * 
- * Permission is granted by National ICT Australia, free of charge, to
- * any person obtaining a copy of this software and any associated
- * documentation files (the "Software") to deal with the Software without
- * restriction, including (without limitation) the rights to use, copy,
- * modify, adapt, merge, publish, distribute, communicate to the public,
- * sublicense, and/or sell, lend or rent out copies of the Software, and
- * to permit persons to whom the Software is furnished to do so, subject
- * to the following conditions:
- * 
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimers.
- * 
- *     * Redistributions in binary form must reproduce the above
- *       copyright notice, this list of conditions and the following
- *       disclaimers in the documentation and/or other materials provided
- *       with the distribution.
- * 
- *     * Neither the name of National ICT Australia, nor the names of its
- *       contributors, may be used to endorse or promote products derived
- *       from this Software without specific prior written permission.
- * 
- * EXCEPT AS EXPRESSLY STATED IN THIS LICENCE AND TO THE FULL EXTENT
- * PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS-IS", AND
- * NATIONAL ICT AUSTRALIA AND ITS CONTRIBUTORS MAKE NO REPRESENTATIONS,
- * WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS
- * REGARDING THE CONTENTS OR ACCURACY OF THE SOFTWARE, OR OF TITLE,
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT,
- * THE ABSENCE OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF
- * ERRORS, WHETHER OR NOT DISCOVERABLE.
- * 
- * TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
- * NATIONAL ICT AUSTRALIA OR ITS CONTRIBUTORS BE LIABLE ON ANY LEGAL
- * THEORY (INCLUDING, WITHOUT LIMITATION, IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHERWISE) FOR ANY CLAIM, LOSS, DAMAGES OR OTHER
- * LIABILITY, INCLUDING (WITHOUT LIMITATION) LOSS OF PRODUCTION OR
- * OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS
- * OF ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR
- * OTHER ECONOMIC LOSS; OR ANY SPECIAL, INCIDENTAL, INDIRECT,
- * CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES, ARISING OUT OF OR IN
- * CONNECTION WITH THIS LICENCE, THE SOFTWARE OR THE USE OF OR OTHER
- * DEALINGS WITH THE SOFTWARE, EVEN IF NATIONAL ICT AUSTRALIA OR ITS
- * CONTRIBUTORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH CLAIM, LOSS,
- * DAMAGES OR OTHER LIABILITY.
- * 
- * If applicable legislation implies representations, warranties, or
- * conditions, or imposes obligations or liability on National ICT
- * Australia or one of its contributors in respect of the Software that
- * cannot be wholly or partly excluded, restricted or modified, the
- * liability of National ICT Australia or the contributor is limited, to
- * the full extent permitted by the applicable legislation, at its
- * option, to:
- * a.  in the case of goods, any one or more of the following:
- * i.  the replacement of the goods or the supply of equivalent goods;
- * ii.  the repair of the goods;
- * iii. the payment of the cost of replacing the goods or of acquiring
- *  equivalent goods;
- * iv.  the payment of the cost of having the goods repaired; or
- * b.  in the case of services:
- * i.  the supplying of the services again; or
- * ii.  the payment of the cost of having the services supplied again.
- * 
- * The construction, validity and performance of this licence is governed
- * by the laws in force in New South Wales, Australia.
- */
-/*
-  Author: Alex Webster
-*/
-
-typedef unsigned long jmp_buf[8];
diff --git a/include/arch/k1om/arch/stdint.h b/include/arch/k1om/arch/stdint.h
deleted file mode 100644 (file)
index f37fbb3..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Modifications Copyright (c) 2008, ETH Zurich.
- */
-/*
- * Australian Public Licence B (OZPLB)
- * 
- * Version 1-0
- * 
- * Copyright (c) 2004 National ICT Australia
- * 
- * All rights reserved. 
- * 
- * Developed by: Embedded, Real-time and Operating Systems Program (ERTOS)
- *               National ICT Australia
- *               http://www.ertos.nicta.com.au
- * 
- * Permission is granted by National ICT Australia, free of charge, to
- * any person obtaining a copy of this software and any associated
- * documentation files (the "Software") to deal with the Software without
- * restriction, including (without limitation) the rights to use, copy,
- * modify, adapt, merge, publish, distribute, communicate to the public,
- * sublicense, and/or sell, lend or rent out copies of the Software, and
- * to permit persons to whom the Software is furnished to do so, subject
- * to the following conditions:
- * 
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimers.
- * 
- *     * Redistributions in binary form must reproduce the above
- *       copyright notice, this list of conditions and the following
- *       disclaimers in the documentation and/or other materials provided
- *       with the distribution.
- * 
- *     * Neither the name of National ICT Australia, nor the names of its
- *       contributors, may be used to endorse or promote products derived
- *       from this Software without specific prior written permission.
- * 
- * EXCEPT AS EXPRESSLY STATED IN THIS LICENCE AND TO THE FULL EXTENT
- * PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS-IS", AND
- * NATIONAL ICT AUSTRALIA AND ITS CONTRIBUTORS MAKE NO REPRESENTATIONS,
- * WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS
- * REGARDING THE CONTENTS OR ACCURACY OF THE SOFTWARE, OR OF TITLE,
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT,
- * THE ABSENCE OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF
- * ERRORS, WHETHER OR NOT DISCOVERABLE.
- * 
- * TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
- * NATIONAL ICT AUSTRALIA OR ITS CONTRIBUTORS BE LIABLE ON ANY LEGAL
- * THEORY (INCLUDING, WITHOUT LIMITATION, IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHERWISE) FOR ANY CLAIM, LOSS, DAMAGES OR OTHER
- * LIABILITY, INCLUDING (WITHOUT LIMITATION) LOSS OF PRODUCTION OR
- * OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS
- * OF ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR
- * OTHER ECONOMIC LOSS; OR ANY SPECIAL, INCIDENTAL, INDIRECT,
- * CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES, ARISING OUT OF OR IN
- * CONNECTION WITH THIS LICENCE, THE SOFTWARE OR THE USE OF OR OTHER
- * DEALINGS WITH THE SOFTWARE, EVEN IF NATIONAL ICT AUSTRALIA OR ITS
- * CONTRIBUTORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH CLAIM, LOSS,
- * DAMAGES OR OTHER LIABILITY.
- * 
- * If applicable legislation implies representations, warranties, or
- * conditions, or imposes obligations or liability on National ICT
- * Australia or one of its contributors in respect of the Software that
- * cannot be wholly or partly excluded, restricted or modified, the
- * liability of National ICT Australia or the contributor is limited, to
- * the full extent permitted by the applicable legislation, at its
- * option, to:
- * a.  in the case of goods, any one or more of the following:
- * i.  the replacement of the goods or the supply of equivalent goods;
- * ii.  the repair of the goods;
- * iii. the payment of the cost of replacing the goods or of acquiring
- *  equivalent goods;
- * iv.  the payment of the cost of having the goods repaired; or
- * b.  in the case of services:
- * i.  the supplying of the services again; or
- * ii.  the payment of the cost of having the services supplied again.
- * 
- * The construction, validity and performance of this licence is governed
- * by the laws in force in New South Wales, Australia.
- */
-#ifndef _ARCH_IA32_STD_INT
-#define _ARCH_IA32_STD_INT
-
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long uint64_t;
-
-#define __PTR_SIZE 64
-
-#endif
diff --git a/include/arch/k1om/barrelfish/core_state_arch.h b/include/arch/k1om/barrelfish/core_state_arch.h
deleted file mode 100644 (file)
index 2ae7733..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \file
- * \brief
- */
-
-/*
- * Copyright (c) 2008, 2009, 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_CORESTATE_H
-#define ARCH_X86_64_BARRELFISH_CORESTATE_H
-
-#include <arch/x86/barrelfish/core_state_arch.h>
-
-#endif
diff --git a/include/arch/k1om/barrelfish/cpu_arch.h b/include/arch/k1om/barrelfish/cpu_arch.h
deleted file mode 100644 (file)
index 3500f13..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \file
- * \brief Architecture specific CPU bits.
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef X86_64_BARRELFISH_CPU_H
-#define X86_64_BARRELFISH_CPU_H
-
-#define CURRENT_CPU_TYPE CPU_K1OM
-
-#endif
diff --git a/include/arch/k1om/barrelfish/curdispatcher_arch.h b/include/arch/k1om/barrelfish/curdispatcher_arch.h
deleted file mode 100644 (file)
index 96deceb..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * \file
- * \brief Implementation of curdispatcher
- */
-
-/*
- * Copyright (c) 2007, 2008, 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_CURDISPATCHER_H
-#define ARCH_X86_64_BARRELFISH_CURDISPATCHER_H
-
-/**
- * \brief Returns pointer to current dispatcher, using thread register
- */
-static inline dispatcher_handle_t curdispatcher(void)
-{
-    dispatcher_handle_t ret;
-
-    __asm("movq %%fs:8, %[ret]" // XXX: assume offsetof(struct thread, disp) == 8
-          : [ret] "=r" (ret));
-
-    return ret;
-}
-
-#endif // ARCH_X86_64_BARRELFISH_CURDISPATCHER_H
diff --git a/include/arch/k1om/barrelfish/dispatcher_arch.h b/include/arch/k1om/barrelfish/dispatcher_arch.h
deleted file mode 100644 (file)
index 82165e2..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * \file
- * \brief Architecture specific dispatcher structure private to the user
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_DISPATCHER_H
-#define ARCH_X86_64_BARRELFISH_DISPATCHER_H
-
-#include <target/k1om/barrelfish/dispatcher_target.h>
-
-static inline struct dispatcher_generic*
-get_dispatcher_generic(dispatcher_handle_t handle)
-{
-    return get_dispatcher_generic_x86_64(handle);
-}
-
-static inline size_t get_dispatcher_size(void)
-{
-    return sizeof(struct dispatcher_x86_64);
-}
-
-#endif // ARCH_X86_64_BARRELFISH_DISPATCHER_H
diff --git a/include/arch/k1om/barrelfish/invocations_arch.h b/include/arch/k1om/barrelfish/invocations_arch.h
deleted file mode 100644 (file)
index 337def4..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-/**
- * \file
- * \brief Low-level capability invocations
- */
-
-/*
- * Copyright (c) 2007, 2008, 2009, 2010, 2012, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef INVOCATIONS_ARCH_H
-#define INVOCATIONS_ARCH_H
-
-#include <barrelfish/syscall_arch.h>
-#include <barrelfish_kpi/dispatcher_shared.h>
-#include <barrelfish_kpi/distcaps.h>
-#include <barrelfish/caddr.h>
-#include <barrelfish_kpi/paging_arch.h>
-
-static inline struct sysret cap_invoke(struct capref to, uintptr_t arg1,
-                                       uintptr_t arg2, uintptr_t arg3,
-                                       uintptr_t arg4, uintptr_t arg5,
-                                       uintptr_t arg6, uintptr_t arg7,
-                                       uintptr_t arg8, uintptr_t arg9,
-                                       uintptr_t arg10)
-{
-    uint8_t invoke_bits = get_cap_valid_bits(to);
-    capaddr_t invoke_cptr = get_cap_addr(to) >> (CPTR_BITS - invoke_bits);
-
-    return syscall(SYSCALL_INVOKE, (uint64_t)invoke_cptr << 32 |
-                   (uint64_t)invoke_bits << 16 | 10 << 8, 0,
-                   arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
-                   arg10);
-}
-
-#define cap_invoke10(to, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j)   \
-    cap_invoke(to, _a, _b, _c, _d, _e, _f, _g, _h, _i, _j)
-#define cap_invoke9(to, _a, _b, _c, _d, _e, _f, _g, _h, _i)        \
-    cap_invoke10(to, _a, _b, _c, _d, _e, _f, _g, _h, _i, 0)
-#define cap_invoke8(to, _a, _b, _c, _d, _e, _f, _g, _h)    \
-    cap_invoke9(to, _a, _b, _c, _d, _e, _f, _g, _h, 0)
-#define cap_invoke7(to, _a, _b, _c, _d, _e, _f, _g)    \
-    cap_invoke8(to, _a, _b, _c, _d, _e, _f, _g, 0)
-#define cap_invoke6(to, _a, _b, _c, _d, _e, _f)        \
-    cap_invoke7(to, _a, _b, _c, _d, _e, _f, 0)
-#define cap_invoke5(to, _a, _b, _c, _d, _e)            \
-    cap_invoke6(to, _a, _b, _c, _d, _e, 0)
-#define cap_invoke4(to, _a, _b, _c, _d)                \
-    cap_invoke5(to, _a, _b, _c, _d, 0)
-#define cap_invoke3(to, _a, _b, _c)                    \
-    cap_invoke4(to, _a, _b, _c, 0)
-#define cap_invoke2(to, _a, _b)                        \
-    cap_invoke3(to, _a, _b, 0)
-#define cap_invoke1(to, _a)                            \
-    cap_invoke2(to, _a, 0)
-
-
-/**
- * \brief Retype a capability.
- *
- * Retypes CPtr 'cap' into 2^'objbits' caps of type 'newtype' and places them
- * into slots starting at slot 'slot' in the CNode, addressed by 'to', with
- * 'bits' address bits of 'to' valid.
- *
- * See also cap_retype(), which wraps this.
- *
- * \param root          Capability of the CNode to invoke
- * \param cap           Address of cap to retype.
- * \param newtype       Kernel object type to retype to.
- * \param objbits       Size of created objects, for variable-sized types
- * \param to            Address of CNode cap to place retyped caps into.
- * \param slot          Slot in CNode cap to start placement.
- * \param bits          Number of valid address bits in 'to'.
- *
- * \return Error code
- */
-static inline errval_t invoke_cnode_retype(struct capref root, capaddr_t cap,
-                                           enum objtype newtype, int objbits,
-                                           capaddr_t to, capaddr_t slot, int bits)
-{
-    assert(cap != CPTR_NULL);
-    return cap_invoke7(root, CNodeCmd_Retype, cap, newtype, objbits, to,
-                       slot, bits).error;
-}
-
-/**
- * \brief Create a capability.
- *
- * Create a new capability of type 'type' and size 'objbits'. The new cap will
- * be placed in the slot 'dest_slot' of the CNode located at 'dest_cnode_cptr'
- * in the address space rooted at 'root'.
- *
- * See also cap_create(), which wraps this.
- *
- * \param root            Capability of the CNode to invoke.
- * \param type            Kernel object type to create.
- * \param objbits         Size of created object
- *                        (ignored for fixed-size objects)
- * \param dest_cnode_cptr Address of CNode cap, where newly created cap will be
- *                        placed into.
- * \param dest_slot       Slot in CNode cap to place new cap.
- * \param dest_vbits      Number of valid address bits in 'dest_cnode_cptr'.
- *
- * \return Error code
- */
-static inline errval_t invoke_cnode_create(struct capref root,
-                                           enum objtype type, uint8_t objbits,
-                                           capaddr_t dest_cnode_cptr,
-                                           capaddr_t dest_slot,
-                                           uint8_t dest_vbits)
-{
-    assert(dest_cnode_cptr != CPTR_NULL);
-    return cap_invoke6(root, CNodeCmd_Create, type, objbits, dest_cnode_cptr,
-                       dest_slot, dest_vbits).error;
-}
-
-/**
- * \brief "Mint" a capability.
- *
- * Copies CPtr 'from' into slot 'slot' in the CNode, addressed by 'to', within
- * the address space, rooted at 'root' and with 'tobits' and 'frombits' address
- * bits of 'to' and 'from' valid, respectively.
- *
- * See also cap_mint(), which wraps this.
- *
- * \param root          Capability of the CNode to invoke
- * \param to            CNode to place copy into.
- * \param slot          Slot in CNode cap to place copy into.
- * \param from          Address of cap to copy.
- * \param tobits        Number of valid address bits in 'to'.
- * \param frombits      Number of valid address bits in 'from'.
- * \param param1        1st cap-dependent parameter.
- * \param param2        2nd cap-dependent parameter.
- *
- * \return Error code
- */
-static inline errval_t invoke_cnode_mint(struct capref root, capaddr_t to,
-                                         capaddr_t slot, capaddr_t from, int tobits,
-                                         int frombits, uint64_t param1,
-                                         uint64_t param2)
-{
-    return cap_invoke8(root, CNodeCmd_Mint, to, slot, from, tobits, frombits,
-                       param1, param2).error;
-}
-
-/**
- * \brief Copy a capability.
- *
- * Copies CPtr 'from' into slot 'slot' in the CNode, addressed by 'to', within
- * the address space, rooted at 'root' and with 'tobits' and 'frombits' address
- * bits of 'to' and 'from' valid, respectively.
- *
- * See also cap_copy(), which wraps this.
- *
- * \param root          Capability of the CNode to invoke
- * \param to            CNode to place copy into.
- * \param slot          Slot in CNode cap to place copy into.
- * \param from          Address of cap to copy.
- * \param tobits        Number of valid address bits in 'to'.
- * \param frombits      Number of valid address bits in 'from'.
- *
- * \return Error code
- */
-static inline errval_t invoke_cnode_copy(struct capref root, capaddr_t to,
-                                         capaddr_t slot, capaddr_t from, int tobits,
-                                         int frombits)
-{
-    return cap_invoke6(root, CNodeCmd_Copy, to, slot, from,
-                       tobits, frombits).error;
-}
-
-/**
- * \brief Delete a capability.
- *
- * Delete the capability pointed to by 'cap', with 'bits' address bits
- * of it valid, from the address space rooted at 'root'.
- *
- * \param root  Capability of the CNode to invoke
- * \param cap   Address of cap to delete.
- * \param bits  Number of valid bits within 'cap'.
- *
- * \return Error code
- */
-static inline errval_t invoke_cnode_delete(struct capref root, capaddr_t cap,
-                                           int bits)
-{
-    return cap_invoke3(root, CNodeCmd_Delete, cap, bits).error;
-}
-
-static inline errval_t invoke_cnode_revoke(struct capref root, capaddr_t cap,
-                                           int bits)
-{
-    return cap_invoke3(root, CNodeCmd_Revoke, cap, bits).error;
-}
-
-static inline errval_t invoke_cnode_get_state(struct capref root, capaddr_t cap,
-                                              int bits, distcap_state_t *ret)
-{
-    struct sysret sysret = cap_invoke3(root, CNodeCmd_GetState, cap, bits);
-
-    assert(ret != NULL);
-    if (err_is_ok(sysret.error)) {
-        *ret = sysret.value;
-    }
-    else {
-        *ret = 0;
-    }
-    return sysret.error;
-}
-
-static inline errval_t invoke_vnode_map(struct capref ptable, capaddr_t slot,
-                                        capaddr_t src, int frombits, size_t flags,
-                                        size_t offset, size_t pte_count)
-{
-    return cap_invoke7(ptable, VNodeCmd_Map, slot, src, frombits, flags, offset, pte_count).error;
-}
-
-static inline errval_t invoke_vnode_unmap(struct capref cap, capaddr_t mapping_addr,
-                                          int bits, size_t entry, size_t num_pages)
-{
-    return cap_invoke5(cap, VNodeCmd_Unmap, mapping_addr, bits, entry, num_pages).error;
-}
-
-/**
- * \brief Return the physical address and size of a frame capability
- *
- * \param frame    CSpace address of frame capability
- * \param ret      frame_identity struct filled in with relevant data
- *
- * \return Error code
- */
-static inline errval_t invoke_frame_identify(struct capref frame,
-                                             struct frame_identity *ret)
-{
-    struct sysret sysret = cap_invoke1(frame, FrameCmd_Identify);
-
-    assert(ret != NULL);
-    if (err_is_ok(sysret.error)) {
-        ret->base = sysret.value & (~BASE_PAGE_MASK);
-        ret->bits = sysret.value & BASE_PAGE_MASK;
-        return sysret.error;
-    }
-
-    ret->base = 0;
-    ret->bits = 0;
-    return sysret.error;
-}
-
-/**
- * \brief Modify mapping flags on parts of a mapped frame
- *
- * \param frame    CSpace address of frame capability
- * \param off      Offset (in #pages) of the first page to get new set of flags
- *                 from the first page in the mapping identified by `frame`
- * \param pages    Number of pages that should get new set of flags
- * \param flags    New set of flags
- *
- * \return Error code
- */
-static inline errval_t invoke_frame_modify_flags(struct capref frame,
-                                                 size_t offset,
-                                                 size_t pages,
-                                                 size_t flags)
-{
-    return cap_invoke4(frame, FrameCmd_ModifyFlags, offset, pages, flags).error;
-}
-
-static inline errval_t invoke_iocap_in(struct capref iocap, enum io_cmd cmd,
-                                       uint16_t port, uint32_t *data)
-{
-    struct sysret sysret = cap_invoke2(iocap, cmd, port);
-
-    if (err_is_ok(sysret.error)) {
-        assert(data != NULL);
-        *data = sysret.value;
-    }
-    return sysret.error;
-}
-
-static inline errval_t invoke_iocap_out(struct capref iocap, enum io_cmd cmd,
-                                        uint16_t port, uint32_t data)
-{
-    return cap_invoke3(iocap, cmd, port, data).error;
-}
-
-/**
- * \brief Setup a dispatcher, possibly making it runnable
- *
- * \param dispatcher    Address of dispatcher capability
- * \param domdispatcher Address of existing dispatcher for domain ID
- * \param cspace_root   Root of CSpace for new dispatcher
- * \param cspace_root_bits  Number of valid bits in cspace_root
- * \param vspace_root   Root of VSpace for new dispatcher
- * \param dispatcher_frame Frame capability for dispatcher structure
- * \param run           Make runnable if true
- *
- * Any arguments of CPTR_NULL are ignored.
- *
- * \return Error code
- */
-static inline errval_t
-invoke_dispatcher(struct capref dispatcher, struct capref domdispatcher,
-                  struct capref cspace, struct capref vspace,
-                  struct capref dispframe, bool run)
-{
-    uint8_t root_vbits = get_cap_valid_bits(cspace);
-    capaddr_t root_caddr = get_cap_addr(cspace) >> (CPTR_BITS - root_vbits);
-    capaddr_t vtree_caddr = get_cap_addr(vspace);
-    capaddr_t disp_caddr = get_cap_addr(dispframe);
-    capaddr_t dd_caddr = get_cap_addr(domdispatcher);
-
-    return cap_invoke7(dispatcher, DispatcherCmd_Setup, root_caddr,
-                       root_vbits, vtree_caddr, disp_caddr, run,
-                       dd_caddr).error;
-}
-
-/**
- * \brief Setup a VM guest DCB
- *
- * \param dcb       Dispatcher capability
- */
-static inline errval_t
-invoke_dispatcher_setup_guest(struct capref dispatcher,
-                              struct capref ep_cap,
-                              struct capref vnode,
-                              struct capref vmkit_guest,
-                              struct capref guest_control_cap)
-{
-    return cap_invoke5(dispatcher, DispatcherCmd_SetupGuest,
-                       get_cap_addr(ep_cap), get_cap_addr(vnode),
-                       get_cap_addr(vmkit_guest),
-                       get_cap_addr(guest_control_cap)).error;
-}
-
-
-static inline errval_t invoke_irqtable_alloc_vector(struct capref irqcap, int *retirq)
-{
-    struct sysret ret = cap_invoke1(irqcap, IRQTableCmd_Alloc);
-    if (err_is_ok(ret.error)) {
-        *retirq = ret.value;
-    } else {
-        *retirq = 0;
-    }
-    return ret.error;
-}
-
-static inline errval_t invoke_irqtable_set(struct capref irqcap, int irq,
-                                           struct capref ep)
-{
-    return cap_invoke3(irqcap, IRQTableCmd_Set, irq, get_cap_addr(ep)).error;
-}
-
-static inline errval_t invoke_irqtable_delete(struct capref irqcap, int irq)
-{
-    return cap_invoke2(irqcap, IRQTableCmd_Delete, irq).error;
-}
-
-/**
- * \brief do a kernel cap invocation to get the core id
- */
-static inline errval_t invoke_kernel_get_core_id(struct capref kern_cap,
-                                                 coreid_t *core_id)
-{
-    assert(core_id != NULL);
-
-    struct sysret sysret = cap_invoke1(kern_cap, KernelCmd_Get_core_id);
-    if (sysret.error == SYS_ERR_OK) {
-        *core_id = sysret.value;
-    }
-    return sysret.error;
-}
-
-static inline errval_t invoke_dispatcher_dump_ptables(struct capref dispcap)
-{
-    return cap_invoke1(dispcap, DispatcherCmd_DumpPTables).error;
-}
-
-static inline errval_t invoke_perfmon_activate(struct capref perfmon_cap,
-                                               uint8_t event, uint8_t perf_umask,
-                                               bool kernel, uint8_t counter_id,
-                                               uint64_t counter_value,
-                                               capaddr_t ep_addr)
-{
-    return cap_invoke7(perfmon_cap, PerfmonCmd_Activate,
-                       event, perf_umask, counter_id, kernel,
-                       counter_value, ep_addr).error;
-}
-
-static inline errval_t invoke_perfmon_write(struct capref perfmon_cap,
-                                                  uint8_t counter_id,
-                                                  uint64_t counter_value)
-{
-    return cap_invoke3(perfmon_cap, PerfmonCmd_Write, counter_id, counter_value).error;
-}
-
-static inline errval_t invoke_perfmon_deactivate(struct capref perfmon_cap)
-{
-    return cap_invoke1(perfmon_cap, PerfmonCmd_Deactivate).error;
-}
-
-static inline errval_t
-invoke_dispatcher_properties(struct capref dispatcher,
-                             enum task_type type, unsigned long deadline,
-                             unsigned long wcet, unsigned long period,
-                             unsigned long release, unsigned short weight)
-{
-    return cap_invoke7(dispatcher, DispatcherCmd_Properties, type, deadline,
-                       wcet, period, release, weight).error;
-}
-
-static inline errval_t invoke_ipi_notify_send(struct capref notify_cap)
-{
-    return cap_invoke1(notify_cap, NotifyCmd_Send).error;
-}
-
-/**
- * \brief Return the system-wide unique ID of the passed ID capability.
- *
- * \param idcap ID capability to invoke.
- * \param id    Filled-in with system-wide unique ID of ID cap.
- *
- * \return      Error code
- */
-static inline errval_t invoke_idcap_identify(struct capref idcap,
-                                             idcap_id_t *id)
-{
-    assert(id != NULL);
-
-    struct sysret sysret = cap_invoke1(idcap, IDCmd_Identify);
-
-    if (err_is_ok(sysret.error)) {
-        *id = sysret.value;
-    }
-
-    return sysret.error;
-}
-
-static inline errval_t invoke_send_init_ipi(struct capref ipi_cap, coreid_t core_id)
-{
-    return cap_invoke2(ipi_cap, IPICmd_Send_Init,
-                       core_id).error;
-}
-
-static inline errval_t invoke_send_start_ipi(struct capref ipi_cap, coreid_t core_id, forvaddr_t entry)
-{
-    return cap_invoke3(ipi_cap, IPICmd_Send_Start,
-                       core_id, entry).error;
-}
-
-static inline errval_t invoke_get_global_paddr(struct capref kernel_cap, genpaddr_t* global)
-{ 
-    struct sysret sr = cap_invoke1(kernel_cap, KernelCmd_GetGlobalPhys);
-    if (err_is_ok(sr.error)) {
-        *global = sr.value;
-    }
-
-    return sr.error;
-}
-
-#endif
diff --git a/include/arch/k1om/barrelfish/ldt.h b/include/arch/k1om/barrelfish/ldt.h
deleted file mode 100644 (file)
index 5f9f145..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * \file
- * \brief "Public" interface to Barrelfish userland LDT
- */
-
-/*
- * Copyright (c) 2011, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef _BARRELFISH_X86_64_LDT_H
-#define _BARRELFISH_X86_64_LDT_H
-
-errval_t ldt_alloc_segment(void *segbase, uint16_t *ret_selector);
-errval_t ldt_update_segment(uint16_t selector, void *segbase);
-errval_t ldt_free_segment(uint16_t selector);
-
-#endif
diff --git a/include/arch/k1om/barrelfish/lmp_chan_arch.h b/include/arch/k1om/barrelfish/lmp_chan_arch.h
deleted file mode 100644 (file)
index f714d6c..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * \file
- * \brief
- */
-
-/*
- * Copyright (c) 2007, 2008, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_K1OM_BARRELFISH_LMP_CHAN_H
-#define ARCH_K1OM_BARRELFISH_LMP_CHAN_H
-
-#include <barrelfish/syscall_arch.h>
-#include <barrelfish/caddr.h>
-#include <barrelfish/cspace.h>
-#include <barrelfish_kpi/lmp.h>
-
-/**
- * \brief Send a message on the given LMP endpoint, if possible
- *
- * Non-blocking, may fail if there is no space in the receiver's endpoint.
- *
- * \param ep Remote endpoint
- * \param flags LMP send flags
- * \param send_cap (Optional) capability to send with the message
- * \param length_words Length of the message in words; payload beyond this
- *                      size will not be delivered
- * \param arg1..N Message payload
- */
-static inline errval_t lmp_ep_send(struct capref ep, lmp_send_flags_t flags,
-                                   struct capref send_cap, uint8_t length_words,
-                                   uint64_t arg1, uint64_t arg2, uint64_t arg3,
-                                   uint64_t arg4, uint64_t arg5, uint64_t arg6,
-                                   uint64_t arg7, uint64_t arg8, uint64_t arg9,
-                                   uint64_t arg10)
-{
-    uint8_t send_bits = get_cap_valid_bits(send_cap);
-    capaddr_t send_cptr = get_cap_addr(send_cap) >> (CPTR_BITS - send_bits);
-
-#ifndef TRACE_DISABLE_LRPC
-    // Do an LRPC if possible
-    if (send_cptr == 0 && send_bits == 0          // Not sending a cap
-        && ep.cnode.address == CPTR_ROOTCN        // EP in rootcn
-        && (flags & LMP_FLAG_SYNC) != 0           // sync option
-        && length_words <= LRPC_MSG_LENGTH) {     // Check length
-
-        assert(LRPC_MSG_LENGTH == 4);
-        return syscall6(SYSCALL_LRPC, ep.slot, arg1, arg2, arg3, arg4).error;
-    }
-#endif
-
-    uint8_t invoke_bits = get_cap_valid_bits(ep);
-    capaddr_t invoke_cptr = get_cap_addr(ep) >> (CPTR_BITS - invoke_bits);
-
-    return syscall(SYSCALL_INVOKE,
-                   (uint64_t)invoke_cptr << 32 | (uint64_t)send_bits << 24 |
-                   (uint64_t)invoke_bits << 16 | (uint64_t)length_words << 8 |
-                   flags, send_cptr,
-                   arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
-                   arg10).error;
-}
-
-#define lmp_ep_send10(ep, flags, send_cap, a, b, c, d, e, f, g, h, i, j) \
-  lmp_ep_send((ep), (flags), (send_cap), 10, (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))
-#define lmp_ep_send9(ep, flags, send_cap, a, b, c, d, e, f, g, h, i) \
-  lmp_ep_send((ep), (flags), (send_cap), 9, (a), (b), (c), (d), (e), (f), (g), (h), (i), 0)
-#define lmp_ep_send8(ep, flags, send_cap, a, b, c, d, e, f, g, h) \
-  lmp_ep_send((ep), (flags), (send_cap), 8, (a), (b), (c), (d), (e), (f), (g), (h), 0, 0)
-#define lmp_ep_send7(ep, flags, send_cap, a, b, c, d, e, f, g) \
-  lmp_ep_send((ep), (flags), (send_cap), 7, (a), (b), (c), (d), (e), (f), (g), 0, 0, 0)
-#define lmp_ep_send6(ep, flags, send_cap, a, b, c, d, e, f) \
-  lmp_ep_send((ep), (flags), (send_cap), 6, (a), (b), (c), (d), (e), (f), 0, 0, 0, 0)
-#define lmp_ep_send5(ep, flags, send_cap, a, b, c, d, e) \
-  lmp_ep_send((ep), (flags), (send_cap), 5, (a), (b), (c), (d), (e), 0, 0, 0, 0, 0)
-#define lmp_ep_send4(ep, flags, send_cap, a, b, c, d) \
-  lmp_ep_send((ep), (flags), (send_cap), 4, (a), (b), (c), (d), 0, 0, 0, 0, 0, 0)
-#define lmp_ep_send3(ep, flags, send_cap, a, b, c) \
-  lmp_ep_send((ep), (flags), (send_cap), 3, (a), (b), (c), 0, 0, 0, 0, 0, 0, 0)
-#define lmp_ep_send2(ep, flags, send_cap, a, b) \
-  lmp_ep_send((ep), (flags), (send_cap), 2, (a), (b), 0, 0, 0, 0, 0, 0, 0, 0)
-#define lmp_ep_send1(ep, flags, send_cap, a) \
-  lmp_ep_send((ep), (flags), (send_cap), 1, (a), 0, 0, 0, 0, 0, 0, 0, 0, 0)
-#define lmp_ep_send0(ep, flags, send_cap) \
-  lmp_ep_send((ep), (flags), (send_cap), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-
-#define lmp_chan_send(lc, flags, send_cap, len, a, b, c, d, e, f, g, h, i, j) \
-  lmp_ep_send((lc)->remote_cap, (flags), (send_cap), (len), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))
-
-#define lmp_chan_send10(lc, flags, send_cap, a, b, c, d, e, f, g, h, i, j) \
-  lmp_ep_send10((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))
-#define lmp_chan_send9(lc, flags, send_cap, a, b, c, d, e, f, g, h, i) \
-  lmp_ep_send9((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e), (f), (g), (h), (i))
-#define lmp_chan_send8(lc, flags, send_cap, a, b, c, d, e, f, g, h) \
-  lmp_ep_send8((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e), (f), (g), (h))
-#define lmp_chan_send7(lc, flags, send_cap, a, b, c, d, e, f, g) \
-  lmp_ep_send7((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e), (f), (g))
-#define lmp_chan_send6(lc, flags, send_cap, a, b, c, d, e, f) \
-  lmp_ep_send6((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e), (f))
-#define lmp_chan_send5(lc, flags, send_cap, a, b, c, d, e) \
-  lmp_ep_send5((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d), (e))
-#define lmp_chan_send4(lc, flags, send_cap, a, b, c, d) \
-  lmp_ep_send4((lc)->remote_cap, (flags), (send_cap), (a), (b), (c), (d))
-#define lmp_chan_send3(lc, flags, send_cap, a, b, c) \
-  lmp_ep_send3((lc)->remote_cap, (flags), (send_cap), (a), (b), (c))
-#define lmp_chan_send2(lc, flags, send_cap, a, b) \
-  lmp_ep_send2((lc)->remote_cap, (flags), (send_cap), (a), (b))
-#define lmp_chan_send1(lc, flags, send_cap, a) \
-  lmp_ep_send1((lc)->remote_cap, (flags), (send_cap), (a))
-#define lmp_chan_send0(lc, flags, send_cap) \
-  lmp_ep_send0((lc)->remote_cap, (flags), (send_cap))
-
-#endif // ARCH_K1OM_BARRELFISH_LMP_CHAN_H
diff --git a/include/arch/k1om/barrelfish/pmap_arch.h b/include/arch/k1om/barrelfish/pmap_arch.h
deleted file mode 100644 (file)
index 2616a43..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * \file
- * \brief pmap management wrappers
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_PMAP_H
-#define ARCH_X86_64_BARRELFISH_PMAP_H
-
-#include <target/k1om/barrelfish/pmap_target.h>
-
-#define ARCH_DEFAULT_PMAP_SIZE sizeof(struct pmap_x86)
-
-static inline errval_t pmap_init(struct pmap *pmap, struct vspace *vspace,
-                                 struct capref vnode,
-                                 struct slot_allocator *opt_slot_alloc)
-{
-    return pmap_x86_64_init(pmap, vspace, vnode, opt_slot_alloc);
-}
-
-static inline errval_t pmap_current_init(bool init_domain)
-{
-    return pmap_x86_64_current_init(init_domain);
-}
-
-#endif // ARCH_X86_64_BARRELFISH_PMAP_H
diff --git a/include/arch/k1om/barrelfish/syscall_arch.h b/include/arch/k1om/barrelfish/syscall_arch.h
deleted file mode 100644 (file)
index 1452f09..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * \file
- * \brief User-side system call implementation
- */
-
-/*
- * Copyright (c) 2007, 2008, 2009, 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_SYSCALL_H
-#define ARCH_X86_64_BARRELFISH_SYSCALL_H
-
-#include <barrelfish_kpi/syscalls.h>  // for struct sysret.
-
-/*
- * Introduction to the syscall macros, or "what the hell is going on here"?
- *
- * The macros here are collectively used to expand the body of the inlined
- * function syscall() that implements all syscalls except for cap_invoke(),
- * which is a special case, due to the thread_invoke_cap_and_exit() hack.
- *
- * First, BF_SYSCALL_BODY sets up the register arguments to be passed into the
- * syscall, then BF_SYSCALL_ASM contains the asm code that includes the actual
- * syscall. This macro has a "label" argument which can be used to emit an
- * arbitrary bit of assembly code after the syscall instruction. This is used
- * by cap_invoke() to insert a label immediately following the syscall, so that
- * the threads package can tell if a thread that was about to do an invocation
- * actually reached the syscall instruction. Note that this can't be inserted
- * in the syscall code unconditionally, because we want it to be inlined, and
- * that would result in multiple definitions of the symbol.
- *
- * If you can think of a better way to do this, by all means clean it up! :)
- */
-
-/* FIXME: the first version of this code is optimal, and works when we are
- * compiling either with optimisation on (-O) or at any optimisation level
- * without a frame pointer (-fomit-frame-pointer), however not for the
- * standard unoptimised GCC, which insists on using RBP.
- */
-#if 0 /* was if defined(NDEBUG), but gcc is still screwing this up -- AB */
-// XXX: Need to update this to the new syscall ABI before it will work again
-# define BF_SYSCALL_ASM(arg11, label) \
-    register uint64_t a11 __asm("rbp") = arg11;     \
-    __asm volatile("syscall\n\t"                    \
-                   label                            \
-        : "+r" (a10_ret1), "+r" (a2_ret2)           \
-        : "r" (a1), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7), \
-          "r" (a8), "r" (a9), "r" (a11), "r" (a12), "r" (syscall_num) \
-        : "r11", "rcx");
-#else /* DEBUG */
-# define BF_SYSCALL_ASM(arg11, label) \
-    __asm volatile("pushq %%rbp             \n\t"   \
-                   "movq %%rcx, %%rbp       \n\t"   \
-                   "syscall                 \n\t"   \
-                   label                            \
-                   "popq %%rbp              \n\t"   \
-        : "+a" (a10_ret1), "+c" (arg11), "+d" (a2_ret2), "+r" (a1), \
-          "+r" (a3), "+r" (a4), "+r" (a5), "+r" (syscall_num)  \
-        : "r" (a6), "r" (a7), "r" (a8), "r" (a9), "r" (a12) \
-        : "r11");
-#endif
-
-/* NB: We use a10_ret (in the rax register) as both input and output
- * register, because some versions of GCC (eg. 4.2.3) fail to use rax as
- * both an input and separately as an output register
- */
-#define BF_SYSCALL_BODY(num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, \
-                        arg9, arg10, arg11, arg12, label) \
-    register uint64_t syscall_num __asm("rdi") = num;   \
-    register uint64_t a1 __asm("rsi") = arg1;           \
-    register uint64_t a2_ret2 __asm("rdx") = arg2;           \
-    register uint64_t a3 __asm("r10") = arg3;           \
-    register uint64_t a4 __asm("r8") = arg4;            \
-    register uint64_t a5 __asm("r9") = arg5;            \
-    register uint64_t a6 __asm("r12") = arg6;           \
-    register uint64_t a7 __asm("r13") = arg7;           \
-    register uint64_t a8 __asm("r14") = arg8;           \
-    register uint64_t a9 __asm("r15") = arg9;           \
-    register uint64_t a12 __asm("rbx") = arg12;         \
-    register uint64_t a10_ret1 __asm("rax") = arg10;     \
-    BF_SYSCALL_ASM(arg11, label)
-
-
-static inline struct sysret syscall(uint64_t num, uint64_t arg1, uint64_t arg2,
-                 uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6,
-                 uint64_t arg7, uint64_t arg8, uint64_t arg9, uint64_t arg10,
-                 uint64_t arg11, uint64_t arg12)
-{
-    BF_SYSCALL_BODY(num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
-                    arg10, arg11, arg12, "");
-    return (struct sysret){/*error*/ a10_ret1, /*value*/ a2_ret2};
-}
-
-#define syscall12(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l) \
-       syscall(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, 0)
-#define syscall11(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k) \
-       syscall12(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, 0)
-#define syscall10(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j) \
-       syscall11(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, 0)
-#define syscall9(_a, _b, _c, _d, _e, _f, _g, _h, _i) \
-       syscall10(_a, _b, _c, _d, _e, _f, _g, _h, _i, 0)
-#define syscall8(_a, _b, _c, _d, _e, _f, _g, _h) \
-       syscall9(_a, _b, _c, _d, _e, _f, _g, _h, 0)
-#define syscall7(_a, _b, _c, _d, _e, _f, _g) \
-       syscall8(_a, _b, _c, _d, _e, _f, _g, 0)
-#define syscall6(_a, _b, _c, _d, _e, _f) \
-       syscall7(_a, _b, _c, _d, _e, _f, 0)
-#define syscall5(_a, _b, _c, _d, _e) \
-       syscall6(_a, _b, _c, _d, _e, 0)
-#define syscall4(_a, _b, _c, _d) \
-       syscall5(_a, _b, _c, _d, 0)
-#define syscall3(_a, _b, _c) \
-       syscall4(_a, _b, _c, 0)
-#define syscall2(_a, _b) \
-       syscall3(_a, _b, 0)
-#define syscall1(_a) \
-       syscall2(_a, 0)
-
-static inline errval_t sys_x86_fpu_trap_on(void)
-{
-    return syscall1(SYSCALL_X86_FPU_TRAP_ON).error;
-}
-
-static inline errval_t sys_x86_reload_ldt(void)
-{
-    return syscall1(SYSCALL_X86_RELOAD_LDT).error;
-}
-
-#endif
index d00d190..91bd431 100644 (file)
@@ -1,10 +1,6 @@
-/**
- * \file
- * \brief
- */
 
 /*
- * Copyright (c) 2007, 2008, 2009, 2010, 2011, ETH Zurich.
+ * Copyright (c) 2015, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
  */
 
-#ifndef ARCH_X86_64_BARRELFISH_KPI_ASM_INLINES_H
-#define ARCH_X86_64_BARRELFISH_KPI_ASM_INLINES_H
+#ifndef ARCH_K1OM_BARRELFISH_KPI_ASM_INLINES_H
+#define ARCH_K1OM_BARRELFISH_KPI_ASM_INLINES_H 1
 
 #ifndef __ASSEMBLER__
 
-#include <target/k1om/barrelfish_kpi/registers_target.h>
+#include <target/x86_64/barrelfish_kpi/registers_target.h>
 
 #define CLOCK_PER_MS 1046008
 
@@ -44,6 +40,8 @@ delay_ms(uint32_t ms)
     return;
 }
 
+
+
 /*
  * some functions require to have the register ECX set to a specific value
  * and will produce wrong results if the value in register ECX is out of range.
@@ -92,49 +90,43 @@ cpuid(uint32_t function,
  *
  * Note, dest should point to a 128bit structure that is to be overwritten
  */
-static inline int
-cmpxchg128(volatile uint64_t dest[2],
-           uint64_t old_top,
-           uint64_t old_bot,
-           uint64_t new_top,
-           uint64_t new_bot)
+static inline int cmpxchg128(volatile uint64_t dest[2], uint64_t old_top, uint64_t old_bot, uint64_t new_top, uint64_t new_bot)
 {
     uint8_t ret;
 
     __asm volatile (
-            "lock cmpxchg16b %1\n\t"
-            "setz %0\n\t"
-            : "=a"(ret), "=m"(*dest)  //, "=d"(old_top), "=a"(old_bot)
-            : "a"(old_top), "d"(old_bot), "b"(new_top), "c"(new_bot), "m"(*dest)
-            : "memory");
+        "lock cmpxchg16b %1\n\t"
+        "setz %0\n\t"
+        : "=a"(ret), "=m"(*dest)//, "=d"(old_top), "=a"(old_bot)
+        : "a"(old_top), "d"(old_bot), "b"(new_top), "c"(new_bot), "m"(*dest)
+        : "memory");
 
     return ret;
 }
 
-static inline void
-fpu_init(void)
+static inline void fpu_init(void)
 {
     __asm volatile ("fninit");
 }
 
-static inline void
-fpu_save(struct registers_fpu_x86_64 *fpustate)
+static inline void fpu_save(struct registers_fpu_x86_64 *fpustate)
 {
     uint8_t *regs = fpustate->registers;
-    regs += 16 - ((uintptr_t) regs % 16);
+    regs += 16 - ((uintptr_t)regs % 16);
 
     __asm volatile("fxsaveq %0" : "=m" (*regs));
 }
 
-static inline void
-fpu_restore(struct registers_fpu_x86_64 *fpustate)
+static inline void fpu_restore(struct registers_fpu_x86_64 *fpustate)
 {
     uint8_t *regs = fpustate->registers;
-    regs += 16 - ((uintptr_t) regs % 16);
+    regs += 16 - ((uintptr_t)regs % 16);
 
     __asm volatile ("fxrstorq %0" :: "m" (*regs));
 }
 
+#if 0
+
 /** \brief This code reads the cycle counter */
 static inline uint64_t
 rdtsc(void)
@@ -219,7 +211,7 @@ static inline void cache_flush_range(void *base, size_t len)
     }while (line < (uint8_t *)base + len);
 }
 #endif
-
+#endif
 #endif // __ASSEMBLER__
 
-#endif // ARCH_X86_64_BARRELFISH_KPI_ASM_INLINES_H
+#endif // ARCH_K1OM_BARRELFISH_KPI_ASM_INLINES_H
diff --git a/include/arch/k1om/barrelfish_kpi/cpu_arch.h b/include/arch/k1om/barrelfish_kpi/cpu_arch.h
deleted file mode 100644 (file)
index b005071..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * \file
- * \brief Arch specific CPU declarations
- */
-
-/*
- * Copyright (c) 2010, 2011, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_KPI_CPU_H
-#define ARCH_X86_64_BARRELFISH_KPI_CPU_H
-
-/// This CPU supports lazy FPU context switching
-#define FPU_LAZY_CONTEXT_SWITCH
-
-/*
- * Entries in the Interrupt Descriptor Table (IDT)
- */
-#define IDT_DE          0       /* #DE: Divide Error */
-#define IDT_DB          1       /* #DB: Debug */
-#define IDT_NMI         2       /* Nonmaskable External Interrupt */
-#define IDT_BP          3       /* #BP: Breakpoint */
-#define IDT_OF          4       /* #OF: Overflow */
-#define IDT_BR          5       /* #BR: Bound Range Exceeded */
-#define IDT_UD          6       /* #UD: Undefined/Invalid Opcode */
-#define IDT_NM          7       /* #NM: No Math Coprocessor */
-#define IDT_DF          8       /* #DF: Double Fault */
-#define IDT_FPUGP       9       /* Coprocessor Segment Overrun */
-#define IDT_TS          10      /* #TS: Invalid TSS */
-#define IDT_NP          11      /* #NP: Segment Not Present */
-#define IDT_SS          12      /* #SS: Stack Segment Fault */
-#define IDT_GP          13      /* #GP: General Protection Fault */
-#define IDT_PF          14      /* #PF: Page Fault */
-#define IDT_MF          16      /* #MF: FPU Floating-Point Error */
-#define IDT_AC          17      /* #AC: Alignment Check */
-#define IDT_MC          18      /* #MC: Machine Check */
-#define IDT_XF          19      /* #XF: SIMD Floating-Point Exception */
-
-#endif
diff --git a/include/arch/k1om/barrelfish_kpi/eflags_arch.h b/include/arch/k1om/barrelfish_kpi/eflags_arch.h
deleted file mode 100644 (file)
index 4fffc24..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * \file
- * \brief
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_KPI_EFLAGS_H
-#define ARCH_X86_64_BARRELFISH_KPI_EFLAGS_H
-
-/**
- * State of EFLAGS when executing a user-space program: Enable interrupts
- */
-#define USER_CS                         0x23
-#define USER_SS                         0x1b
-#define USER_EFLAGS                     0x202
-
-#endif // ARCH_X86_64_BARRELFISH_KPI_EFLAGS_H
diff --git a/include/arch/k1om/barrelfish_kpi/paging_arch.h b/include/arch/k1om/barrelfish_kpi/paging_arch.h
deleted file mode 100644 (file)
index 4b57c82..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * \file
- * \brief Define generics for arch specific definitions
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_KPI_PAGING_H
-#define ARCH_X86_64_BARRELFISH_KPI_PAGING_H
-
-#include <target/k1om/barrelfish_kpi/paging_target.h>
-
-/**
- * Information about page sizes
- */
-#define BASE_PAGE_BITS      X86_64_BASE_PAGE_BITS
-#define BASE_PAGE_SIZE      X86_64_BASE_PAGE_SIZE
-#define BASE_PAGE_MASK      X86_64_BASE_PAGE_MASK
-#define BASE_PAGE_OFFSET    X86_64_BASE_PAGE_OFFSET
-
-#define LARGE_PAGE_BITS      X86_64_LARGE_PAGE_BITS
-#define LARGE_PAGE_SIZE      X86_64_LARGE_PAGE_SIZE
-#define LARGE_PAGE_MASK      X86_64_LARGE_PAGE_MASK
-#define LARGE_PAGE_OFFSET    X86_64_LARGE_PAGE_OFFSET
-
-/**
- * Bits within the various page directories and tables.
- */
-#define PTABLE_EXECUTE_DISABLE  X86_64_PTABLE_EXECUTE_DISABLE
-#define PTABLE_GLOBAL_PAGE      X86_64_PTABLE_GLOBAL_PAGE
-#define PTABLE_ATTR_INDEX       X86_64_PTABLE_ATTR_INDEX
-#define PTABLE_DIRTY            X86_64_PTABLE_DIRTY
-#define PTABLE_ACCESSED         X86_64_PTABLE_ACCESSED
-#define PTABLE_CACHE_DISABLED   X86_64_PTABLE_CACHE_DISABLED
-#define PTABLE_WRITE_THROUGH    X86_64_PTABLE_WRITE_THROUGH
-#define PTABLE_USER_SUPERVISOR  X86_64_PTABLE_USER_SUPERVISOR
-#define PTABLE_READ_WRITE       X86_64_PTABLE_READ_WRITE
-#define PTABLE_PRESENT          X86_64_PTABLE_PRESENT
-
-#define PTABLE_SIZE             X86_64_PTABLE_SIZE
-#define PTABLE_MASK             X86_64_PTABLE_MASK
-#define PTABLE_CLEAR            X86_64_PTABLE_CLEAR
-
-#define PTABLE_ACCESS_DEFAULT   X86_64_PTABLE_ACCESS_DEFAULT
-#define PTABLE_ACCESS_READONLY  X86_64_PTABLE_ACCESS_READONLY
-
-#define PTABLE_ENTRY_SIZE       X86_64_PTABLE_ENTRY_SIZE
-
-#endif // ARCH_X86_64_BARRELFISH_KPI_PAGING_H
diff --git a/include/arch/k1om/barrelfish_kpi/registers_arch.h b/include/arch/k1om/barrelfish_kpi/registers_arch.h
deleted file mode 100644 (file)
index dc10664..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * \file
- * \brief Arch independent accessor functions for use in generic code
- * Generic include for kernel
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_KPI_REGISTERS_H
-#define ARCH_X86_64_BARRELFISH_KPI_REGISTERS_H
-
-#include <barrelfish_kpi/types.h> // for lvaddr_t
-#include <target/k1om/barrelfish_kpi/registers_target.h>
-
-///< Opaque handle for the register state
-typedef struct registers_x86_64 arch_registers_state_t;
-
-///< Opaque handle for the FPU register state
-typedef struct registers_fpu_x86_64 arch_registers_fpu_state_t;
-
-static inline void
-registers_set_entry(arch_registers_state_t *regs, lvaddr_t entry)
-{
-    registers_x86_64_set_entry(regs, entry);
-}
-
-static inline void
-registers_set_param(arch_registers_state_t *regs, uint64_t param)
-{
-    registers_x86_64_set_param(regs, param);
-}
-
-static inline void
-registers_get_param(arch_registers_state_t *regs, uint64_t *param)
-{
-    registers_x86_64_get_param(regs, param);
-}
-
-static inline uint64_t
-registers_get_ip(arch_registers_state_t *regs)
-{
-    return registers_x86_64_get_ip(regs);
-}
-
-static inline uint64_t
-registers_get_sp(arch_registers_state_t *regs)
-{
-    return registers_x86_64_get_sp(regs);
-}
-
-#endif // ARCH_X86_64_BARRELFISH_KPI_REGISTERS_H
diff --git a/include/arch/k1om/bench/bench_arch.h b/include/arch/k1om/bench/bench_arch.h
deleted file mode 100644 (file)
index fc41255..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \file
- * \brief Arch specific bench include.
- */
-
-/*
- * Copyright (c) 2010, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ARCH_X86_64_BARRELFISH_BENCH_H
-#define ARCH_X86_64_BARRELFISH_BENCH_H
-
-#include <arch/x86/bench/bench_arch.h>
-
-#endif
diff --git a/include/arch/k1om/concurrent/arch/cas.h b/include/arch/k1om/concurrent/arch/cas.h
deleted file mode 100644 (file)
index 5eabeef..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/** \file
- *  \brief compare and set (cas) implementations
- */
-
-/*
- * Copyright (c) 2009, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef CAS_H_
-#define CAS_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-
-/*
- * \brief compare and set. If the value at address
- *        equals old, set it to new otherwise don't write to address.
- *        Returns the actual previous value at the address.
- */
-static inline uintptr_t cas_ret_act(volatile uintptr_t *address, uintptr_t old,
-        uintptr_t new)
-{
-    register uintptr_t res;
-    __asm volatile("lock; cmpxchgq %2,%0    \n\t"
-                   : "+m" (*address), "=a" (res)
-                   : "r" (new), "a" (old)
-                   : "memory");
-    return res;
-}
-
-/*
- * \brief compare and set. If the value at address
- *        equals old, set it to new and return true,
- *        otherwise don't write to address and return false
- */
-static inline bool cas(volatile uintptr_t *address, uintptr_t old,
-        uintptr_t new)
-{
-    register bool res;
-    __asm volatile("lock; cmpxchgq %2,%0     \n\t"
-                   "setz %1                  \n\t"
-                   : "+m" (*address), "=q" (res)
-                   : "r" (new), "a" (old)
-                   : "memory");
-    return res;
-}
-
-#endif /* CAS_H_ */
diff --git a/include/arch/k1om/fenv.h b/include/arch/k1om/fenv.h
deleted file mode 100644 (file)
index 1d150db..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*-
- * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
- * 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.
- *
- * $FreeBSD: src/lib/msun/amd64/fenv.h,v 1.6 2007/01/06 21:46:23 das Exp $
- */
-
-#ifndef        _FENV_H_
-#define        _FENV_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-
-typedef struct {
-       struct {
-               __uint32_t      __control;
-               __uint32_t      __status;
-               __uint32_t      __tag;
-               char            __other[16];
-       } __x87;
-       __uint32_t              __mxcsr;
-} fenv_t;
-
-typedef        __uint16_t      fexcept_t;
-
-/* Exception flags */
-#define        FE_INVALID      0x01
-#define        FE_DENORMAL     0x02
-#define        FE_DIVBYZERO    0x04
-#define        FE_OVERFLOW     0x08
-#define        FE_UNDERFLOW    0x10
-#define        FE_INEXACT      0x20
-#define        FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \
-                        FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
-
-/* Rounding modes */
-#define        FE_TONEAREST    0x0000
-#define        FE_DOWNWARD     0x0400
-#define        FE_UPWARD       0x0800
-#define        FE_TOWARDZERO   0x0c00
-#define        _ROUND_MASK     (FE_TONEAREST | FE_DOWNWARD | \
-                        FE_UPWARD | FE_TOWARDZERO)
-
-/*
- * As compared to the x87 control word, the SSE unit's control word
- * has the rounding control bits offset by 3 and the exception mask
- * bits offset by 7.
- */
-#define        _SSE_ROUND_SHIFT        3
-#define        _SSE_EMASK_SHIFT        7
-
-__BEGIN_DECLS
-
-/* Default floating-point environment */
-extern const fenv_t    __fe_dfl_env;
-#define        FE_DFL_ENV      (&__fe_dfl_env)
-
-#define        __fldcw(__cw)           __asm __volatile("fldcw %0" : : "m" (__cw))
-#define        __fldenv(__env)         __asm __volatile("fldenv %0" : : "m" (__env))
-#define        __fldenvx(__env)        __asm __volatile("fldenv %0" : : "m" (__env)  \
-                               : "st", "st(1)", "st(2)", "st(3)", "st(4)",   \
-                               "st(5)", "st(6)", "st(7)")
-#define        __fnclex()              __asm __volatile("fnclex")
-#define        __fnstenv(__env)        __asm __volatile("fnstenv %0" : "=m" (*(__env)))
-#define        __fnstcw(__cw)          __asm __volatile("fnstcw %0" : "=m" (*(__cw)))
-//according to
-//http://www.nabble.com/The-Linux-binutils-2.18.50.0.4-is-released-td15360254.html
-//we need to use %ax now...
-//#define      __fnstsw(__sw)          __asm __volatile("fnstsw %0" : "=am" (*(__sw)))
-#define __fnstsw(__sw)      __asm __volatile("fnstsw %%ax" : "=am" (*(__sw)))
-#define        __fwait()               __asm __volatile("fwait")
-#define        __ldmxcsr(__csr)        __asm __volatile("ldmxcsr %0" : : "m" (__csr))
-#define        __stmxcsr(__csr)        __asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
-
-static __inline int
-feclearexcept(int __excepts)
-{
-       fenv_t __env;
-
-       if (__excepts == FE_ALL_EXCEPT) {
-               __fnclex();
-       } else {
-               __fnstenv(&__env.__x87);
-               __env.__x87.__status &= ~__excepts;
-               __fldenv(__env.__x87);
-       }
-       __stmxcsr(&__env.__mxcsr);
-       __env.__mxcsr &= ~__excepts;
-       __ldmxcsr(__env.__mxcsr);
-       return (0);
-}
-
-static __inline int
-fegetexceptflag(fexcept_t *__flagp, int __excepts)
-{
-       int __mxcsr, __status;
-
-       __stmxcsr(&__mxcsr);
-       __fnstsw(&__status);
-       *__flagp = (__mxcsr | __status) & __excepts;
-       return (0);
-}
-
-int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
-int feraiseexcept(int __excepts);
-
-static __inline int
-fetestexcept(int __excepts)
-{
-       int __mxcsr, __status;
-
-       __stmxcsr(&__mxcsr);
-       __fnstsw(&__status);
-       return ((__status | __mxcsr) & __excepts);
-}
-
-static __inline int
-fegetround(void)
-{
-       int __control;
-
-       /*
-        * We assume that the x87 and the SSE unit agree on the
-        * rounding mode.  Reading the control word on the x87 turns
-        * out to be about 5 times faster than reading it on the SSE
-        * unit on an Opteron 244.
-        */
-       __fnstcw(&__control);
-       return (__control & _ROUND_MASK);
-}
-
-static __inline int
-fesetround(int __round)
-{
-       int __mxcsr, __control;
-
-       if (__round & ~_ROUND_MASK)
-               return (-1);
-
-       __fnstcw(&__control);
-       __control &= ~_ROUND_MASK;
-       __control |= __round;
-       __fldcw(__control);
-
-       __stmxcsr(&__mxcsr);
-       __mxcsr &= ~(_ROUND_MASK << _SSE_ROUND_SHIFT);
-       __mxcsr |= __round << _SSE_ROUND_SHIFT;
-       __ldmxcsr(__mxcsr);
-
-       return (0);
-}
-
-int fegetenv(fenv_t *__envp);
-int feholdexcept(fenv_t *__envp);
-
-static __inline int
-fesetenv(const fenv_t *__envp)
-{
-
-       /*
-        * XXX Using fldenvx() instead of fldenv() tells the compiler that this
-        * instruction clobbers the i387 register stack.  This happens because
-        * we restore the tag word from the saved environment.  Normally, this
-        * would happen anyway and we wouldn't care, because the ABI allows
-        * function calls to clobber the i387 regs.  However, fesetenv() is
-        * inlined, so we need to be more careful.
-        */
-       __fldenvx(__envp->__x87);
-       __ldmxcsr(__envp->__mxcsr);
-       return (0);
-}
-
-int feupdateenv(const fenv_t *__envp);
-
-#if __BSD_VISIBLE
-
-int feenableexcept(int __mask);
-int fedisableexcept(int __mask);
-
-static __inline int
-fegetexcept(void)
-{
-       int __control;
-
-       /*
-        * We assume that the masks for the x87 and the SSE unit are
-        * the same.
-        */
-       __fnstcw(&__control);
-       return (~__control & FE_ALL_EXCEPT);
-}
-
-#endif /* __BSD_VISIBLE */
-
-__END_DECLS
-
-#endif /* !_FENV_H_ */
diff --git a/include/arch/k1om/float.h b/include/arch/k1om/float.h
deleted file mode 100644 (file)
index d700e29..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * Copyright (c) 1989 Regents of the University of California.
- * 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.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     from: @(#)float.h       7.1 (Berkeley) 5/8/90
- * $FreeBSD: src/sys/amd64/include/float.h,v 1.16 2008/01/17 13:12:46 bde Exp $
- */
-
-#ifndef _MACHINE_FLOAT_H_
-#define _MACHINE_FLOAT_H_ 1
-
-#include <sys/cdefs.h>
-
-#ifdef CONFIG_OLDC
-__BEGIN_DECLS
-extern int __flt_rounds(void);
-__END_DECLS
-#define FLT_ROUNDS  __flt_rounds()
-#else
-#define FLT_ROUNDS  1
-#endif /* CONFIGOLDC */
-
-#define FLT_RADIX      2               /* b */
-#if __ISO_C_VISIBLE >= 1999
-#define        FLT_EVAL_METHOD 0               /* no promotions */
-#define        DECIMAL_DIG     21              /* max precision in decimal digits */
-#endif
-
-#define FLT_MANT_DIG   24              /* p */
-#define FLT_EPSILON    1.19209290E-07F /* b**(1-p) */
-#define FLT_DIG                6               /* floor((p-1)*log10(b))+(b == 10) */
-#define FLT_MIN_EXP    (-125)          /* emin */
-#define FLT_MIN                1.17549435E-38F /* b**(emin-1) */
-#define FLT_MIN_10_EXP (-37)           /* ceil(log10(b**(emin-1))) */
-#define FLT_MAX_EXP    128             /* emax */
-#define FLT_MAX                3.40282347E+38F /* (1-b**(-p))*b**emax */
-#define FLT_MAX_10_EXP 38              /* floor(log10((1-b**(-p))*b**emax)) */
-
-#define DBL_MANT_DIG   53
-#define DBL_EPSILON    2.2204460492503131E-16
-#define DBL_DIG                15
-#define DBL_MIN_EXP    (-1021)
-#define DBL_MIN                2.2250738585072014E-308
-#define DBL_MIN_10_EXP (-307)
-#define DBL_MAX_EXP    1024
-#define DBL_MAX                1.7976931348623157E+308
-#define DBL_MAX_10_EXP 308
-
-#define LDBL_MANT_DIG  64
-#define LDBL_EPSILON   1.0842021724855044340E-19L
-#define LDBL_DIG       18
-#define LDBL_MIN_EXP   (-16381)
-#define LDBL_MIN       3.3621031431120935063E-4932L
-#define LDBL_MIN_10_EXP        (-4931)
-#define LDBL_MAX_EXP   16384
-#define LDBL_MAX       1.1897314953572317650E+4932L
-#define LDBL_MAX_10_EXP        4932
-#endif /* _MACHINE_FLOAT_H_ */
diff --git a/include/arch/k1om/machine/asm.h b/include/arch/k1om/machine/asm.h
deleted file mode 100644 (file)
index 7efd642..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * 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.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     from: @(#)DEFS.h        5.1 (Berkeley) 4/23/90
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_ASM_H_
-#define        _MACHINE_ASM_H_
-
-#include <sys/cdefs.h>
-
-#ifdef PIC
-#define        PIC_PLT(x)      x@PLT
-#define        PIC_GOT(x)      x@GOTPCREL(%rip)
-#else
-#define        PIC_PLT(x)      x
-#define        PIC_GOT(x)      x
-#endif
-
-/*
- * CNAME and HIDENAME manage the relationship between symbol names in C
- * and the equivalent assembly language names.  CNAME is given a name as
- * it would be used in a C program.  It expands to the equivalent assembly
- * language name.  HIDENAME is given an assembly-language name, and expands
- * to a possibly-modified form that will be invisible to C programs.
- */
-#define CNAME(csym)            csym
-#define HIDENAME(asmsym)       .asmsym
-
-#define _START_ENTRY   .text; .p2align 4,0x90
-
-#define _ENTRY(x)      _START_ENTRY; \
-                       .globl CNAME(x); .type CNAME(x),@function; CNAME(x):
-
-#ifdef PROF
-#define        ALTENTRY(x)     _ENTRY(x); \
-                       pushq %rbp; movq %rsp,%rbp; \
-                       call PIC_PLT(HIDENAME(mcount)); \
-                       popq %rbp; \
-                       jmp 9f
-#define        ENTRY(x)        _ENTRY(x); \
-                       pushq %rbp; movq %rsp,%rbp; \
-                       call PIC_PLT(HIDENAME(mcount)); \
-                       popq %rbp; \
-                       9:
-#else
-#define        ALTENTRY(x)     _ENTRY(x)
-#define        ENTRY(x)        _ENTRY(x)
-#endif
-
-#define        END(x)          .size x, . - x
-
-#define RCSID(x)       .text; .asciz x
-
-#undef __FBSDID
-#if !defined(lint) && !defined(STRIP_FBSDID)
-#define __FBSDID(s)    .ident s
-#else
-#define __FBSDID(s)    /* nothing */
-#endif /* not lint and not STRIP_FBSDID */
-
-#endif /* !_MACHINE_ASM_H_ */
diff --git a/include/arch/k1om/machine/endian.h b/include/arch/k1om/machine/endian.h
deleted file mode 100644 (file)
index 5455cbe..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*-
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * 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.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)endian.h    7.8 (Berkeley) 4/3/91
- * $FreeBSD: src/sys/amd64/include/endian.h,v 1.8 2005/03/11 21:46:01 peter Exp $
- */
-
-#ifndef _MACHINE_ENDIAN_H_
-#define        _MACHINE_ENDIAN_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define        _QUAD_HIGHWORD 1
-#define        _QUAD_LOWWORD 0
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define        _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
-#define        _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
-#define        _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
-
-#define        _BYTE_ORDER     _LITTLE_ENDIAN
-
-/*
- * Deprecated variants that don't have enough underscores to be useful in more
- * strict namespaces.
- */
-#if __BSD_VISIBLE
-#define        LITTLE_ENDIAN   _LITTLE_ENDIAN
-#define        BIG_ENDIAN      _BIG_ENDIAN
-#define        PDP_ENDIAN      _PDP_ENDIAN
-#define        BYTE_ORDER      _BYTE_ORDER
-#endif
-
-#if defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE_BUILTIN_CONSTANT_P)
-
-#define __word_swap_int_var(x) \
-__extension__ ({ register __uint32_t __X = (x); \
-   __asm ("rorl $16, %0" : "+r" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define        __word_swap_int_const(x) \
-       ((((x) & 0xffff0000) >> 16) | \
-        (((x) & 0x0000ffff) << 16))
-#define        __word_swap_int(x) (__builtin_constant_p(x) ? \
-       __word_swap_int_const(x) : __word_swap_int_var(x))
-
-#else  /* __OPTIMIZE__ */
-
-#define        __word_swap_int(x) __word_swap_int_var(x)
-
-#endif /* __OPTIMIZE__ */
-
-#define __byte_swap_int_var(x) \
-__extension__ ({ register __uint32_t __X = (x); \
-   __asm ("bswap %0" : "+r" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define        __byte_swap_int_const(x) \
-       ((((x) & 0xff000000) >> 24) | \
-        (((x) & 0x00ff0000) >>  8) | \
-        (((x) & 0x0000ff00) <<  8) | \
-        (((x) & 0x000000ff) << 24))
-#define        __byte_swap_int(x) (__builtin_constant_p(x) ? \
-       __byte_swap_int_const(x) : __byte_swap_int_var(x))
-
-#else  /* __OPTIMIZE__ */
-
-#define        __byte_swap_int(x) __byte_swap_int_var(x)
-
-#endif /* __OPTIMIZE__ */
-
-#define __byte_swap_long_var(x) \
-__extension__ ({ register __uint64_t __X = (x); \
-   __asm ("bswap %0" : "+r" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define        __byte_swap_long_const(x) \
-       (((x >> 56) | \
-        ((x >> 40) & 0xff00) | \
-        ((x >> 24) & 0xff0000) | \
-        ((x >> 8) & 0xff000000) | \
-        ((x << 8) & (0xfful << 32)) | \
-        ((x << 24) & (0xfful << 40)) | \
-        ((x << 40) & (0xfful << 48)) | \
-        ((x << 56))))
-
-#define        __byte_swap_long(x) (__builtin_constant_p(x) ? \
-       __byte_swap_long_const(x) : __byte_swap_long_var(x))
-
-#else  /* __OPTIMIZE__ */
-
-#define        __byte_swap_long(x) __byte_swap_long_var(x)
-
-#endif /* __OPTIMIZE__ */
-
-#define __byte_swap_word_var(x) \
-__extension__ ({ register __uint16_t __X = (x); \
-   __asm ("xchgb %h0, %b0" : "+Q" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define        __byte_swap_word_const(x) \
-       ((((x) & 0xff00) >> 8) | \
-        (((x) & 0x00ff) << 8))
-
-#define        __byte_swap_word(x) (__builtin_constant_p(x) ? \
-       __byte_swap_word_const(x) : __byte_swap_word_var(x))
-
-#else  /* __OPTIMIZE__ */
-
-#define        __byte_swap_word(x) __byte_swap_word_var(x)
-
-#endif /* __OPTIMIZE__ */
-
-static __inline __uint64_t
-__bswap64(__uint64_t _x)
-{
-
-       return (__byte_swap_long(_x));
-}
-
-static __inline __uint32_t
-__bswap32(__uint32_t _x)
-{
-
-       return (__byte_swap_int(_x));
-}
-
-static __inline __uint16_t
-__bswap16(__uint16_t _x)
-{
-
-       return (__byte_swap_word(_x));
-}
-
-#define        __htonl(x)      __bswap32(x)
-#define        __htons(x)      __bswap16(x)
-#define        __ntohl(x)      __bswap32(x)
-#define        __ntohs(x)      __bswap16(x)
-
-#else /* !(__GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P) */
-
-/*
- * No optimizations are available for this compiler.  Fall back to
- * non-optimized functions by defining the constant usually used to prevent
- * redefinition.
- */
-#define        _BYTEORDER_FUNC_DEFINED
-
-#endif /* __GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_MACHINE_ENDIAN_H_ */
diff --git a/include/arch/k1om/machine/fpu.h b/include/arch/k1om/machine/fpu.h
deleted file mode 100644 (file)
index 04b205b..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * 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.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     from: @(#)npx.h 5.3 (Berkeley) 1/18/91
- * $FreeBSD: src/sys/amd64/include/fpu.h,v 1.33 2004/04/05 21:25:51 imp Exp $
- */
-
-/*
- * Floating Point Data Structures and Constants
- * W. Jolitz 1/90
- */
-
-#ifndef _MACHINE_FPU_H_
-#define        _MACHINE_FPU_H_
-
-/* Contents of each x87 floating point accumulator */
-struct fpacc87 {
-       u_char  fp_bytes[10];
-};
-
-/* Contents of each SSE extended accumulator */
-struct  xmmacc {
-       u_char  xmm_bytes[16];
-};
-
-struct  envxmm {
-       u_int16_t       en_cw;          /* control word (16bits) */
-       u_int16_t       en_sw;          /* status word (16bits) */
-       u_int8_t        en_tw;          /* tag word (8bits) */
-       u_int8_t        en_zero;
-       u_int16_t       en_opcode;      /* opcode last executed (11 bits ) */
-       u_int64_t       en_rip;         /* floating point instruction pointer */
-       u_int64_t       en_rdp;         /* floating operand pointer */
-       u_int32_t       en_mxcsr;       /* SSE sontorol/status register */
-       u_int32_t       en_mxcsr_mask;  /* valid bits in mxcsr */
-};
-
-struct  savefpu {
-       struct  envxmm  sv_env;
-       struct {
-               struct fpacc87  fp_acc;
-               u_char          fp_pad[6];      /* padding */
-       } sv_fp[8];
-       struct xmmacc   sv_xmm[16];
-       u_char sv_pad[96];
-} __aligned(16);
-
-/*
- * The hardware default control word for i387's and later coprocessors is
- * 0x37F, giving:
- *
- *     round to nearest
- *     64-bit precision
- *     all exceptions masked.
- *
- * FreeBSD/i386 uses 53 bit precision for things like fadd/fsub/fsqrt etc
- * because of the difference between memory and fpu register stack arguments.
- * If its using an intermediate fpu register, it has 80/64 bits to work
- * with.  If it uses memory, it has 64/53 bits to work with.  However,
- * gcc is aware of this and goes to a fair bit of trouble to make the
- * best use of it.
- *
- * This is mostly academic for AMD64, because the ABI prefers the use
- * SSE2 based math.  For FreeBSD/amd64, we go with the default settings.
- */
-#define        __INITIAL_FPUCW__       0x037F
-#define        __INITIAL_MXCSR__       0x1F80
-#define        __INITIAL_MXCSR_MASK__  0xFFBF
-
-#ifdef _KERNEL
-int    fpudna(void);
-void   fpudrop(void);
-void   fpuexit(struct thread *td);
-int    fpuformat(void);
-int    fpugetregs(struct thread *td, struct savefpu *addr);
-void   fpuinit(void);
-void   fpusetregs(struct thread *td, struct savefpu *addr);
-int    fputrap(void);
-#endif
-
-#endif /* !_MACHINE_FPU_H_ */
diff --git a/include/arch/k1om/machine/types.h b/include/arch/k1om/machine/types.h
deleted file mode 100644 (file)
index 5072a88..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef        _MACHTYPES_H_
-#define        _MACHTYPES_H_
-
-/*
- *  The following section is RTEMS specific and is needed to more
- *  closely match the types defined in the BSD machine/types.h.
- *  This is needed to let the RTEMS/BSD TCP/IP stack compile.
- */
-#if defined(__rtems__)
-#include <machine/_types.h>
-#endif
-
-#define        _CLOCK_T_       __clock_t               /* clock() */
-#define        _TIME_T_        long                    /* time() */
-#define _CLOCKID_T_    unsigned long
-#define _TIMER_T_      unsigned long
-
-#ifndef _HAVE_SYSTYPES
-typedef long int __off_t;
-typedef int __pid_t;
-#ifdef __GNUC__
-__extension__ typedef long long int __loff_t;
-#else
-typedef long int __loff_t;
-#endif
-#endif
-
-#endif /* _MACHTYPES_H_ */
-
-
index 9607f1b..f0475db 100644 (file)
@@ -25,6 +25,7 @@ static inline uint64_t rdtsc(void)
     return ((uint64_t)edx << 32) | eax;
 }
 
+#ifndef __k1om__
 /** \brief This code reads the cycle counter -- flushing the
     instruction pipeline first. Throws away the processor ID information. */
 static inline uint64_t rdtscp(void)
@@ -33,6 +34,13 @@ static inline uint64_t rdtscp(void)
     __asm volatile ("rdtscp" : "=a" (eax), "=d" (edx) :: "ecx");
     return ((uint64_t)edx << 32) | eax;
 }
+#else
+static inline uint64_t rdtscp(void)
+{
+    /* K1OM does not support rdtscp */
+    return rdtsc();
+}
+#endif
 
 static inline uint64_t rdpmc(uint32_t counter)
 {
index a2a683c..deb5261 100644 (file)
@@ -349,13 +349,11 @@ static inline errval_t invoke_frame_identify(struct capref frame,
 static inline errval_t invoke_frame_modify_flags(struct capref frame,
                                                  size_t offset,
                                                  size_t pages,
-                                                 size_t flags)
+                                                 size_t flags,
+                                                 genvaddr_t va_hint)
 {
-    uint8_t invoke_bits = get_cap_valid_bits(frame);
-    capaddr_t invoke_cptr = get_cap_addr(frame) >> (CPTR_BITS - invoke_bits);
-
-    return syscall5((invoke_bits << 16) | (FrameCmd_ModifyFlags << 8) |
-                    SYSCALL_INVOKE, invoke_cptr, offset, pages, flags).error;
+    return cap_invoke5(frame, FrameCmd_ModifyFlags, offset,
+                       pages, flags, va_hint).error;
 }
 
 
@@ -542,6 +540,15 @@ static inline errval_t invoke_dispatcher_dump_ptables(struct capref dispcap)
             SYSCALL_INVOKE, invoke_cptr).error;
 }
 
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+    uint8_t invoke_bits = get_cap_valid_bits(dispcap);
+    capaddr_t invoke_cptr = get_cap_addr(dispcap) >> (CPTR_BITS - invoke_bits);
+
+    return syscall2((invoke_bits << 16) | (DispatcherCmd_DumpCapabilities << 8) |
+            SYSCALL_INVOKE, invoke_cptr).error;
+}
+
 static inline errval_t invoke_ipi_notify_send(struct capref notify_cap)
 {
     uint8_t invoke_bits = get_cap_valid_bits(notify_cap);
index d1b5889..ae8bda5 100644 (file)
@@ -38,7 +38,7 @@ registers_set_param(arch_registers_state_t *regs, uint32_t param)
 }
 
 static inline void
-registers_get_param(arch_registers_state_t *regs, uint32_t *param)
+registers_get_param(arch_registers_state_t *regs, uintptr_t *param)
 {
     registers_x86_32_get_param(regs, param);
 }
index 95ff4c0..38ed895 100644 (file)
@@ -275,15 +275,18 @@ static inline errval_t invoke_vnode_identify(struct capref vnode,
  *                 from the first page in the mapping identified by `frame`
  * \param pages    Number of pages that should get new set of flags
  * \param flags    New set of flags
+ * \param va_hint  Hint for selective TLB flushing
  *
  * \return Error code
  */
 static inline errval_t invoke_frame_modify_flags(struct capref frame,
                                                  size_t offset,
                                                  size_t pages,
-                                                 size_t flags)
+                                                 size_t flags,
+                                                 genvaddr_t va_hint)
 {
-    return cap_invoke4(frame, FrameCmd_ModifyFlags, offset, pages, flags).error;
+    return cap_invoke5(frame, FrameCmd_ModifyFlags, offset,
+                       pages, flags, va_hint).error;
 }
 
 static inline errval_t invoke_iocap_in(struct capref iocap, enum io_cmd cmd,
@@ -451,6 +454,11 @@ static inline errval_t invoke_dispatcher_dump_ptables(struct capref dispcap)
     return cap_invoke1(dispcap, DispatcherCmd_DumpPTables).error;
 }
 
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+    return cap_invoke1(dispcap, DispatcherCmd_DumpCapabilities).error;
+}
+
 static inline errval_t invoke_perfmon_activate(struct capref perfmon_cap,
                                                uint8_t event, uint8_t perf_umask,
                                                bool kernel, uint8_t counter_id,
index 85f8109..f19e976 100644 (file)
@@ -38,7 +38,7 @@ registers_set_param(arch_registers_state_t *regs, uint64_t param)
 }
 
 static inline void
-registers_get_param(arch_registers_state_t *regs, uint64_t *param)
+registers_get_param(arch_registers_state_t *regs, uintptr_t *param)
 {
     registers_x86_64_get_param(regs, param);
 }
index 482e3de..e03d7f1 100644 (file)
@@ -47,6 +47,8 @@ errval_t monitor_client_blocking_rpc_init(void);
 
 errval_t monitor_cap_set_remote(struct capref cap, bool remote);
 
+errval_t monitor_debug_print_cababilities(void);
+
 __END_DECLS
 
 #endif // BARRELFISH_MONITOR_CLIENT_H
index b90a1a3..3a83a09 100644 (file)
@@ -59,6 +59,7 @@ errval_t alloc_inheritcn_with_caps(struct capref *inheritcn_capp,
                                    struct capref sidcap,
                                    struct capref kernelcap);
 
+errval_t spawn_dump_capabilities(domainid_t domainid);
 __END_DECLS
 
 #endif // BARRELFISH_SPAWN_CLIENT_H
index fa78d5e..627d4fe 100644 (file)
@@ -36,6 +36,9 @@ __BEGIN_DECLS
 # endif
 #elif defined(__arm__)
 #  define CACHELINE_BYTES 32
+#elif defined(__aarch64__)
+// XXX: is this true?
+#  define CACHELINE_BYTES 64
 #else
 # error set CACHELINE_BYTES appropriately
 #endif
index 9342c4c..486971e 100644 (file)
@@ -30,7 +30,8 @@ __BEGIN_DECLS
 // XXX: figure out how to do this arch-independent(?) -SG, 2014-06-16
 #define VREGION_FLAGS_LARGE    0x40 // Map large pages, if possible
 #define VREGION_FLAGS_HUGE     0x80 // Map huge pages, if possible
-#define VREGION_FLAGS_MASK     0xff // Mask of all individual VREGION_FLAGS
+#define VREGION_FLAGS_WRITE_COMBINING   0x100 // Write-combining caching
+#define VREGION_FLAGS_MASK     0x1ff // Mask of all individual VREGION_FLAGS
 #define VREGION_FLAGS_VTD_SNOOP  0x800 // Snooping (for pages) allowed by VT-d
 
 #define VREGION_FLAGS_READ_WRITE \
index 064231b..9db6188 100644 (file)
@@ -31,6 +31,7 @@ struct vspace_mmu_aware {
     size_t size;
     size_t alignment;
     size_t consumed;
+    struct slot_allocator *slot_alloc; ///< slot allocator
     struct vregion vregion;           ///< Needs just one vregion
     struct memobj_anon memobj;        ///< Needs just one memobj
     lvaddr_t offset;    ///< Offset of free space in anon
@@ -38,13 +39,15 @@ struct vspace_mmu_aware {
 };
 
 errval_t vspace_mmu_aware_init(struct vspace_mmu_aware *state, size_t size);
+void vspace_mmu_aware_set_slot_alloc(struct vspace_mmu_aware *state,
+                                     struct slot_allocator *slot_allocator);
 errval_t vspace_mmu_aware_init_aligned(struct vspace_mmu_aware *state,
+                                       struct slot_allocator *slot_alloc,
                                        size_t size, size_t alignment,
                                        vregion_flags_t flags);
 errval_t vspace_mmu_aware_reset(struct vspace_mmu_aware *state,
                                 struct capref frame, size_t size);
-errval_t vspace_mmu_aware_map(struct vspace_mmu_aware *state,
-                              struct capref frame, size_t req_size,
+errval_t vspace_mmu_aware_map(struct vspace_mmu_aware *state, size_t req_size,
                               void **retbuf, size_t *retsize);
 errval_t vspace_mmu_aware_unmap(struct vspace_mmu_aware *state,
                                 lvaddr_t base, size_t bytes);
index 8f93685..b980be0 100644 (file)
@@ -220,6 +220,7 @@ enum dispatcher_cmd {
     DispatcherCmd_PerfMon,          ///< Performance monitoring
     DispatcherCmd_SetupGuest,       ///< Set up the DCB of a guest domain
     DispatcherCmd_DumpPTables,      ///< Dump hw page tables of dispatcher
+    DispatcherCmd_DumpCapabilities  ///< Dump capabilities of dispatcher
     DispatcherCmd_Vmread,           ///< Execute vmread on the current and active VMCS      
     DispatcherCmd_Vmwrite,          ///< Execute vmwrite on the current and active VMCS
     DispatcherCmd_Vmptrld,          ///< Make VMCS clear and inactive
index 2928270..5ee12bd 100644 (file)
@@ -97,7 +97,8 @@
 #define ROOTCN_SLOT_SLOT_ALLOC1  8   ///< Root of slot alloc1
 #define ROOTCN_SLOT_SLOT_ALLOC2  9   ///< Root of slot alloc2
 #define ROOTCN_SLOT_ARGCN        10  ///< Argcn slot in root cnode
-#define ROOTCN_SLOTS_USER        11  ///< First free slot in root cnode for user
+#define ROOTCN_SLOT_BSPKCB       11  ///< BSP KCB cap to fix reverse lookup issues
+#define ROOTCN_SLOTS_USER        12  ///< First free slot in root cnode for user
 
 /* Size of CNodes in Root CNode if not the default size */
 #define SLOT_ALLOC_CNODE_BITS   (DEFAULT_CNODE_BITS * 2)
index 8a8dc8d..496eafe 100644 (file)
@@ -35,7 +35,7 @@ extern "C" {
 ///< bitmap structure public declaration
 struct bitmap;
 
-typedef uint32_t bitmap_bit_t;
+typedef int32_t bitmap_bit_t;
 
 ///< value returned if the bits are invalid.
 #define BITMAP_BIT_NONE ((bitmap_bit_t)-1)
index 76f6b8e..74ec5ad 100644 (file)
@@ -13,6 +13,7 @@
 #ifndef LINKED_LIST_H_
 #define LINKED_LIST_H_
 
+#include <stdbool.h>
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
index 4c1d76d..683b97f 100644 (file)
 /*
- * Copyright (c) 2007, 2008, 2009, ETH Zurich.
+ * Copyright (c) 2015, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
  * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+ * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
  */
 
 #ifndef CPUID_H_
 #define CPUID_H_
 
-#define CPUID(offset, reg)      __asm volatile("cpuid" : reg : "a" (offset))
 
-#include <barrelfish/barrelfish.h>
+/*
+ * ===============================================================================
+ * functions and definitions for accessing the raw cpuid output
+ * ===============================================================================
+ */
 
-static inline uint32_t cpuid_eax_read_32(cpuid_t *dev, size_t offset)
+///< struct representing the registers used for the cpuid instruction
+struct cpuid_regs
 {
-    uint32_t eax;
-    CPUID(offset, "=a" (eax));
-    return eax;
-}
+    uint32_t eax;   ///< eax register [in: function, out: return value]
+    uint32_t ebx;   ///< ebx register [in: none,     out: return value]
+    uint32_t ecx;   ///< ecx register [in: argument, out: return value]
+    uint32_t edx;   ///< edx register [in: none,     out: return value]
+};
+
+///< macro declaration for initializing the cpuid_regs struct
+#define CPUID_REGS_INITIAL(_EAX, _ECX) {_EAX, 0, _ECX, 0}
 
-static inline uint32_t cpuid_ebx_read_32(cpuid_t *dev, size_t offset)
+
+/**
+ * \brief executes the cpuid instruction and stores the result in the struct
+ *
+ * \param reg   cpuid_regs struct to store the result value
+ *
+ * the reg parameter is used to supply the function & argument information and
+ * returning the values
+ */
+static inline void cpuid_exec(struct cpuid_regs *reg)
 {
-    uint32_t ebx;
-    CPUID(offset, "=b" (ebx));
-    return ebx;
+    if (reg == NULL) {
+        return;
+    }
+
+    __asm volatile("cpuid"
+                   : "=a" (reg->eax), "=b" (reg->ebx),
+                     "=c" (reg->ecx), "=d" (reg->edx)
+                   : "a" (reg->eax), "c" (reg->ecx)
+                  );
 }
 
-static inline uint32_t cpuid_ecx_read_32(cpuid_t *dev, size_t offset)
+
+/*
+ * ===============================================================================
+ * library initialization
+ * ===============================================================================
+ */
+
+/**
+ * \brief initializes the cpuid library to handle vendor specific stuff
+ */
+errval_t cpuid_init(void);
+
+
+/*
+ * ===============================================================================
+ * vendor information
+ * ===============================================================================
+ */
+
+///< vendor string for Intel cpus as stored in {ebx, ecx, edx}
+#define CPUID_VENDOR_STRING_INTEL   "GenuntelineI"  //"GenuineIntel"
+
+///< vendor string for AMD cpus as stored in {ebx, ecx, edx}
+#define CPUID_VENDOR_STRING_AMD     "AuthcAMDenti"  //“AuthenticAMD”
+
+///< maximum size of the vendor string
+#define CPUID_VENDOR_STRING_LENGTH (3 * sizeof(uint32_t))
+
+///< type declaration for recognized cpu vendors
+typedef enum cpuid_vendor
 {
-    uint32_t ecx;
-    CPUID(offset, "=c" (ecx));
-    return ecx;
-}
+    CPUID_VENDOR_UNKNOWN = 0, ///< the CPU has an unknown vendor
+    CPUID_VENDOR_AMD     = 1, ///< the CPU is an AuthenticAMD
+    CPUID_VENDOR_INTEL   = 2, ///< the CPU is GenuineIntel
+} cpuid_vendor_t;
+
+/**
+ * \brief reads the CPU vendor string and returns the vendor information
+ *
+ * \return CPU vendor information CPUID_VENDOR_*
+ */
+cpuid_vendor_t cpuid_vendor(void);
+
+/**
+ * \brief returns a string representation of the vendor
+ *
+ * \return string representation of the vendor
+ */
+char *cpuid_vendor_string(void);
 
-static inline uint32_t cpuid_edx_read_32(cpuid_t *dev, size_t offset)
+/*
+ * ===============================================================================
+ * basic processor information
+ * ===============================================================================
+ */
+
+///< maximum length the processor name can have
+#define CPUID_PROC_NAME_LENGTH (3 * 4 * sizeof(uint32_t))
+
+///< represents the processor family information of the cpu
+struct cpuid_proc_family
 {
-    uint32_t edx;
-    CPUID(offset, "=d" (edx));
-    return edx;
-}
+    uint16_t model;     ///< processor model
+    uint16_t family;    ///< processor family
+    uint8_t  stepping;  ///< processor stepping
+    uint8_t  type;      ///< processor type
+};
 
-static inline uint32_t cpuid_dcpa_read_32(cpuid_t *dev, size_t offset)
+///< processor frequency information
+struct cpuid_freqinfo
 {
-    return 0;
-}
+    uint16_t base;  ///< processor base frequency in MHz
+    uint16_t max;   ///< processor maximum frequency in MHz
+    uint16_t bus;   ///< bus (reference) frequeny in Mhz
+};
+
+/**
+ * \brief obtains the family information from the CPU
+ *
+ * \param memory to fill in the family information
+ */
+errval_t cpuid_proc_family(struct cpuid_proc_family *fmly);
+
+/**
+ * \brief obtains the processor name
+ *
+ * \param buf   buffer where to store the processor name string
+ * \param len   length of the buffer
+ */
+errval_t cpuid_proc_name(char *buf, size_t len);
+
+/**
+ * \brief returns the maximum input value for basic CPUID functions
+ *
+ * \return integer representing the maximum input
+ */
+uint32_t cpuid_proc_max_input_basic(void);
+
+/**
+ * \brief returns the maximum input value for extended CPUID functions
+ *
+ * \return integer representing the maximum input
+ */
+uint32_t cpuid_proc_max_input_extended(void);
+
+/**
+ * \brief obtains the processor frequency information
+ *
+ * \param fi returned frequency information
+ *
+ * \returns SYS_ERR_OK on success
+ *          CPUID_ERR_*on failure
+ */
+errval_t cpuid_frequency_info(struct cpuid_freqinfo *fi);
+
+/*
+ * ===============================================================================
+ * cache topology information
+ * ===============================================================================
+ */
 
-static inline uint32_t cpuid_dcpb_read_32(cpuid_t *dev, size_t offset)
+///< enumration of possible cache types
+typedef enum cpuid_cache_type
 {
-    return 0;
-}
+    CPUID_CACHE_TYPE_INVALID    = 0,    ///< this cache information is invalid
+    CPUID_CACHE_TYPE_DATA       = 1,    ///< cache is for data only
+    CPUID_CACHE_TYPE_INSTR      = 2,    ///< cache is for instructions only
+    CPUID_CACHE_TYPE_UNIFIED    = 3,    ///< cache is unified data & instr
+} cpuid_cachetype_t;
 
-static inline uint32_t cpuid_dcpc_read_32(cpuid_t *dev, size_t offset)
+///< cache information obtained from the cpu
+struct cpuid_cacheinfo
 {
-    return 0;
-}
+    cpuid_cachetype_t type;          ///< the type of the cache
+    char             *name;          ///< readable representation of the name
+    size_t            size;          ///< size of the entire cache in bytes
+    uint16_t          linesize;      ///< size of a cache line
+    uint16_t          associativity; ///< associativity information
+    uint32_t          sets;          ///< number of sets
+    uint8_t           level;         ///< level
+    uint8_t           shared;        ///< number of cores sharing that cache
+    uint8_t           inclusive;     ///< chached data is inclusive
+};
+
+/**
+ * \brief calculates the cache line size
+ *
+ * \returns the cacheline size of the core in bytes
+ */
+uint16_t cpuid_system_coherency_size(void);
+
+/**
+ * \brief obtains cache parameters for a given index
+ *
+ * \param ci   memory to be filled in with information
+ * \param idx  index of the cache to obtain information for
+ *
+ * \return  SYS_ERR_OK  on success
+ *          CPUID_ERR_NO_SUCH_INDEX if there is no cache associated with the index
+ */
+errval_t cpuid_cache_info(struct cpuid_cacheinfo *ci, uint32_t idx);
+
+/**
+ * \brief returns a string representation of the cache type
+ *
+ * \param ct    type of the cache
+ *
+ * \return cache name string
+ */
+char *cpuid_cache_type_string(cpuid_cachetype_t ct);
+
+
+/*
+ * ===============================================================================
+ * TLB information
+ * ===============================================================================
+ */
+///< tlb information structure
+struct cpuid_tlbinfo
+{
+    cpuid_cachetype_t type;             ///< type of this tlb
+    uint32_t          pagesize;         ///< page size
+    uint32_t          entries;          ///< number of entries
+    uint32_t          associativity;    ///< associativity
+    uint8_t           level;            ///< level
+};
+
+/**
+ * \brief obtains the TLB topology information
+ *
+ * \param ti    tlb info structure to be filled in
+ * \param idx   index of the TLB
+ *
+ * \returns SYS_ERR_OK on success
+ *          CPUID_ERR_* on failure
+ */
+errval_t cpuid_tlb_info(struct cpuid_tlbinfo *ti, uint32_t idx);
+
+/*
+ * ===============================================================================
+ * thread and topology information
+ * ===============================================================================
+ */
+
+///< topology information this thread belongs to
+struct cpuid_threadinfo
+{
+    coreid_t package;       ///< id of the package / socket
+    coreid_t core;          ///< the core id relative to the socket
+    coreid_t hyperthread;   ///< the thread id relative to the core
+};
+
+///< topology hierarchy information structure
+struct cpuid_topologyinfo
+{
+    int x2apic;
+    int nextshift;
+};
+
+/**
+ * \brief obtains the topology information for a given thread
+ *
+ * \param ti    returns the thread information
+ *
+ * \return  SYS_ERR_OK on success
+ *          CPUID_ERR_* on failure
+ */
+errval_t cpuid_thread_info(struct cpuid_threadinfo *ti);
+
+/**
+ * \brief obtains topology information from the CPU
+ *
+ * \param topo  pointer to store the information
+ * \param idx   topology level index
+ *
+ * \return SYS_ERR_OK on success
+ *         CPUID_ERR_* on failure
+ */
+errval_t cpuid_topology_info(struct cpuid_topologyinfo *topo, uint8_t idx);
+
+/*
+ * ===============================================================================
+ * feature information
+ * ===============================================================================
+ */
+
+struct cpuid_featureinfo
+{
+    /* CPU features */
+    uint32_t lm      : 1;   ///< CU supports long mode
+    uint32_t htt     : 1;   ///< CPU has hyper-threading technology
+    uint32_t apic    : 1;   ///< CPU has an APIC and it is enabled
+    uint32_t x2apic  : 1;   ///< CPU support x2APIC feature
+    uint32_t tsc     : 1;   ///< CPU has RDTSC and RDTSCP instruction support
+    uint32_t dca     : 1;   ///< CPU supports direct cache access
+    /* instructions */
+    uint32_t monitor : 1;   ///< CPU has monitor/mwait instructions
+    uint32_t cmov    : 1;   ///< CPU supports conditional move instructions
+
+    /* virtual memory */
+    uint32_t pse36  : 1;    ///< CPU has page-size extensions
+    uint32_t pse    : 1;    ///< CPU has page-size extensions
+    uint32_t pae    : 1;    ///< CPU supports physical address extensions
+    uint32_t pat    : 1;    ///< CPU has page attribute table
+    uint32_t pge    : 1;    ///< CPU has page global extension
+    uint32_t mtrr   : 1;    ///< CPU has memory-type range registrs
+    uint32_t page1G : 1;    ///< CPU supports huge-pages
+    uint32_t page2M : 1;
+    uint32_t nx     : 1;    ///< CPU supports no-execute bit
+
+    /* cache control */
+    uint32_t clsh    : 1;
+    uint32_t cnxt_id : 1;   ///< L1 context ID
+
+    /* virtualization technology */
+    uint32_t vmx    : 1;    ///< CPU has virtual machine extensions
+    uint32_t vme    : 1;    ///< CPU has virtual machine enhancemente
+    uint32_t svm    : 1;    ///< secure virtual machine support
+
+    /* vector instructions */
+    uint32_t mmx   : 1;     ///< CPU has MMX support
+    uint32_t sse   : 1;     ///< CPU has SSE support
+    uint32_t sse2  : 1;     ///< CPU has SSE2 support
+    uint32_t sse3  : 1;     ///< CPU has SSE3 support
+    uint32_t sse41 : 1;     ///< CPU has SSE4.1 support
+    uint32_t sse42 : 1;     ///< CPU has SSE4.1 support
+    uint32_t avx   : 1;     ///< CPU has AVX support
+};
+
+/**
+ * \brief obtains the CPU's feature information
+ *
+ * \param fi    structure to be filled in
+ *
+ * \return  SYS_ERR_OK on success
+ *          CPUID_ERR_* on failure
+ */
+errval_t cpuid_feature_info(struct cpuid_featureinfo *fi);
+
+/*
+ * ===============================================================================
+ * address space information
+ * ===============================================================================
+ */
+
+///< address space size information
+struct cpuid_adressspaceinfo
+{
+    uint8_t physical;       ///< Maximum physical byte address size in bits
+    uint8_t virtual;        ///< Maximum linear byte address size in bits
+    uint8_t guest_physical; ///< maximum guest physical byte address size in bits
+};
+
+/**
+ * \brief obtains the address space size information of the CPU
+ *
+ * \param ai  struct to be filled in with adderss space information
+ *
+ * \returns SYS_ERR_OK on susccess
+ *          CPUID_ERR_* on failure
+ */
+errval_t cpuid_address_space_info(struct cpuid_adressspaceinfo *ai);
+
 
 #endif // CPUID_H_
 
index a288a4a..0ec9ee2 100644 (file)
 
 #ifndef CPUID_SPACES_H
 #define CPUID_SPACES_H
+#define CPUID(offset, reg)      __asm volatile("cpuid" : reg : "a" (offset))
 
-static inline uint32_t cpuid_eax_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_eax_write_32(cpuid_t *dev, size_t offset,
-//                                      uint32_t value);
+#include <barrelfish/barrelfish.h>
 
-static inline uint32_t cpuid_ebx_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_ebx_write_32(cpuid_t *dev, size_t offset,
-//                                      uint32_t value);
+static inline uint32_t cpuid_eax_read_32(cpuid_t *dev, size_t offset)
+{
+    uint32_t eax;
+    CPUID(offset, "=a" (eax));
+    return eax;
+}
 
-static inline uint32_t cpuid_ecx_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_ecx_write_32(cpuid_t *dev, size_t offset,
-//                                      uint32_t value);
+static inline uint32_t cpuid_ebx_read_32(cpuid_t *dev, size_t offset)
+{
+    uint32_t ebx;
+    CPUID(offset, "=b" (ebx));
+    return ebx;
+}
 
-static inline uint32_t cpuid_edx_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_edx_write_32(cpuid_t *dev, size_t offset,
-//                                      uint32_t value);
+static inline uint32_t cpuid_ecx_read_32(cpuid_t *dev, size_t offset)
+{
+    uint32_t ecx;
+    CPUID(offset, "=c" (ecx));
+    return ecx;
+}
 
-static inline uint32_t cpuid_dcpa_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_dcpa_write_32(cpuid_t *dev, size_t offset,
-//                                       uint32_t value);
+static inline uint32_t cpuid_edx_read_32(cpuid_t *dev, size_t offset)
+{
+    uint32_t edx;
+    CPUID(offset, "=d" (edx));
+    return edx;
+}
 
-static inline uint32_t cpuid_dcpb_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_dcpb_write_32(cpuid_t *dev, size_t offset,
-//                                       uint32_t value);
+static inline uint32_t cpuid_dcpa_read_32(cpuid_t *dev, size_t offset)
+{
+    return 0;
+}
+
+static inline uint32_t cpuid_dcpb_read_32(cpuid_t *dev, size_t offset)
+{
+    return 0;
+}
 
-static inline uint32_t cpuid_dcpc_read_32(cpuid_t *dev, size_t offset);
-//static inline void cpuid_dcpc_write_32(cpuid_t *dev, size_t offset,
+static inline uint32_t cpuid_dcpc_read_32(cpuid_t *dev, size_t offset)
+{
+    return 0;
+}
 //                                       uint32_t value);
 
 #endif // CPUID_SPACES_H
index 8269982..e65dfed 100644 (file)
@@ -136,6 +136,37 @@ errval_t mdb_find_cap_for_address(genpaddr_t address, struct cte **ret_node);
 
 bool mdb_reachable(struct cte *cte);
 
+/**
+ * Call-back function for tree traversals.
+ * @param cte The current tree entry.
+ * @param data User provided data pointer.
+ */
+typedef errval_t (*mdb_tree_traversal_fn)(struct cte *cte, void *data);
+
+typedef enum {
+    MDB_TRAVERSAL_ORDER_ASCENDING, ///< Traverse the tree in ascending order
+    MDB_TRAVERSAL_ORDER_DESCENDING ///< Traverse the tree in descending order
+} mdb_tree_traversal_order;
+
+/**
+ * Traverse the mdb tree using some order with a call-back function and
+ * user-provided data. This function starts at the root of the tree.
+ * @param order The order to traverse the tree in.
+ * @param cb The call-back to execute for every node in the tree.
+ * @parm data User-provided data pointer.
+ */
+errval_t mdb_traverse(mdb_tree_traversal_order order, mdb_tree_traversal_fn cb, void *data);
+
+/**
+ * Traverse an mdb sub tree using some order with a call-back function and
+ * user-provided data.
+ * @param cte The subtree to traverse. The call-back will be executed on this node.
+ * @param order The order to traverse the tree in.
+ * @param cb The call-back to execute for every node in the tree.
+ * @parm data User-provided data pointer.
+ */
+errval_t mdb_traverse_subtree(struct cte *cte, mdb_tree_traversal_order order, mdb_tree_traversal_fn cb, void *data);
+
 __END_DECLS
 
 #endif // LIBMDB_MDB_TREE_H
index 6c1c65d..218c22f 100644 (file)
@@ -303,8 +303,9 @@ struct bitmap *numa_get_membind(void);
 /**
  * \brief allocates memory on a specific node.
  *
- * \param size  size of the region in bytes
- * \param node  ID of the node to allocate from
+ * \param size      size of the region in bytes
+ * \param node      ID of the node to allocate from
+ * \param pagesize  page size to be used for the mapping
  *
  * \returns pointer to memory region
  *
@@ -312,53 +313,59 @@ struct bitmap *numa_get_membind(void);
  * if the specified node is externally denied to this process, this call will fail.
  * The memory must be freed with numa_free(). On errors NULL is returned.
  */
-void *numa_alloc_onnode(size_t size, nodeid_t node);
+void *numa_alloc_onnode(size_t size, nodeid_t node, size_t pagesize);
 
 /**
  * \brief allocates size bytes of memory on the local node
  *
  * \param size  size of the memory region in bytes
+ * \param pagesize  page size to be used for the mapping
  *
  * \returns pointer to memory region
  *
  * The memory must be freed with numa_free(). On errors NULL is returned.
  */
-void *numa_alloc_local(size_t size);
+void *numa_alloc_local(size_t size, size_t pagesize);
 
 /**
  * \brief allocates size bytes of memory page interleaved on all nodes.
  *
- * \param size   size of the memory region in bytes
+ * \param size      size of the memory region in bytes
+ * \param pagesize  page size to be used for the mapping
  *
  * \returns pointer to the mapped memory region
  *
  * should only be used for large areas consisting of multiple pages.
  * The memory must be freed with numa_free(). On errors NULL is returned.
  */
-void *numa_alloc_interleaved(size_t size);
+void *numa_alloc_interleaved(size_t size, size_t pagesize);
 
 /**
- * \brief allocates size bytes of memory page interleaved on all nodes.
+ * \brief allocates size bytes of memory page interleaved the nodes specified in
+ *        the nodemask.
  *
  * \param size     size of the memory region in bytes
  * \param nodemask subset of nodes to consider for allocation
+ * \param pagesize  page size to be used for the mapping
+ *
  * \returns pointer to the mapped memory region
  *
  * should only be used for large areas consisting of multiple pages.
  * The memory must be freed with numa_free(). On errors NULL is returned.
  */
-void *numa_alloc_interleaved_subset(size_t size, struct bitmap *nodemask);
+void *numa_alloc_interleaved_subset(size_t size, size_t pagesize,
+                                    struct bitmap *nodemask);
 
 /**
  * \brief allocates size bytes of memory with the current NUMA policy.
  *
- * \param size  size of the memory region in bytes
- *
+ * \param size      size of the memory region in bytes
+ * \param pagesize  page size to be used for the mapping
  * \returns pointer to the mapped memory region
  *
  * The memory must be freed with numa_free(). On errors NULL is returned.
  */
-void *numa_alloc(size_t size);
+void *numa_alloc(size_t size, size_t pagesize);
 
 /**
  * \brief changes the size of the memory area.
index 601c08f..16b2b9f 100644 (file)
@@ -33,6 +33,7 @@ struct device_mem {
     /* NB: it should be the case that bytes = (1 << bits) * nr_caps */
     struct memobj *memobj;   // valid after map_device()
     struct vregion *vregion; // valid after map_device()
+    uint8_t bar_nr; // BAR number
 };
 
 errval_t map_device(struct device_mem *mem);
diff --git a/include/target/aarch64/barrelfish/dispatcher_target.h b/include/target/aarch64/barrelfish/dispatcher_target.h
new file mode 100644 (file)
index 0000000..9591b32
--- /dev/null
@@ -0,0 +1,29 @@
+/**
+ * \file
+ * \brief Architecture specific dispatcher structure private to the user
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef TARGET_AARCH64_BARRELFISH_DISPATCHER_H
+#define TARGET_AARCH64_BARRELFISH_DISPATCHER_H
+
+#include <barrelfish_kpi/dispatcher_shared.h>
+#include <barrelfish_kpi/dispatcher_shared_arch.h>
+#include <barrelfish/dispatcher.h>
+
+/// Dispatcher structure (including data accessed only by user code)
+struct dispatcher_aarch64 {
+    struct dispatcher_shared_aarch64 d;  ///< Shared (user/kernel) data. Must be first.
+    struct dispatcher_generic generic;   ///< User private data
+    /* Incoming LMP endpoints (buffers and receive cap pointers) follow */
+};
+
+#endif // TARGET_AARCH64_BARRELFISH_DISPATCHER_H
diff --git a/include/target/aarch64/barrelfish/pmap_target.h b/include/target/aarch64/barrelfish/pmap_target.h
new file mode 100644 (file)
index 0000000..206bfac
--- /dev/null
@@ -0,0 +1,48 @@
+/**
+ * \file
+ * \brief Pmap definition common for the aarch64 archs
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef TARGET_AARCH64_BARRELFISH_PMAP_H
+#define TARGET_AARCH64_BARRELFISH_PMAP_H
+
+#include <barrelfish/pmap.h>
+
+/// Node in the meta-data, corresponds to an actual VNode object
+struct vnode {
+    uint16_t      entry;       ///< Page table entry of this VNode
+    bool          is_vnode;    ///< Is this a page table or a page mapping
+    struct vnode  *next;       ///< Next entry in list of siblings
+    union {
+        struct {
+            struct capref cap;         ///< Capability of this VNode
+            struct vnode  *children;   ///< Children of this VNode
+        } vnode; // for non-leaf node
+        struct {
+            struct capref cap;         ///< Capability of this VNode
+            genvaddr_t    offset;      ///< Offset within mapped frame cap
+            vregion_flags_t flags;     ///< Flags for mapping
+            size_t        pte_count;   ///< number of mapped PTEs in this mapping
+        } frame; // for leaf node (maps page(s))
+    } u;
+};
+
+struct pmap_aarch64 {
+    struct pmap p;
+    struct vregion vregion;     ///< Vregion used to reserve virtual address for metadata
+    genvaddr_t vregion_offset;  ///< Offset into amount of reserved virtual address used
+    struct vnode root;          ///< Root of the vnode tree
+    struct slab_allocator slab;     ///< Slab allocator for the vnode lists
+    uint8_t slab_buffer[512];   ///< Initial buffer to back the allocator
+};
+
+#endif // TARGET_AARCH64_BARRELFISH_PMAP_H
diff --git a/include/target/aarch64/barrelfish_kpi/dispatcher_shared_target.h b/include/target/aarch64/barrelfish_kpi/dispatcher_shared_target.h
new file mode 100644 (file)
index 0000000..a159c16
--- /dev/null
@@ -0,0 +1,39 @@
+/**
+ * \file
+ * \brief Architecture specific dispatcher struct shared between kernel and user
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef TARGET_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_H
+#define TARGET_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_H
+
+#include <barrelfish_kpi/dispatcher_shared.h>
+
+///< Architecture specific kernel/user shared dispatcher struct
+struct dispatcher_shared_aarch64 {
+    struct dispatcher_shared_generic d; ///< Generic portion
+
+    lvaddr_t    crit_pc_low;        ///< Critical section lower PC bound
+    lvaddr_t    crit_pc_high;       ///< Critical section upper PC bound
+    lvaddr_t    got_base;           ///< Global Offset Table base
+
+    union registers_aarch64 enabled_save_area;  ///< Enabled register save area
+    union registers_aarch64 disabled_save_area; ///< Disabled register save area
+    union registers_aarch64 trap_save_area;     ///< Trap register save area
+};
+
+static inline struct dispatcher_shared_aarch64*
+get_dispatcher_shared_aarch64(dispatcher_handle_t handle)
+{
+    return (struct dispatcher_shared_aarch64*)handle;
+}
+
+#endif // TARGET_AARCH64_BARRELFISH_KPI_DISPATCHER_SHARED_H
diff --git a/include/target/aarch64/barrelfish_kpi/paging_arm_v8.h b/include/target/aarch64/barrelfish_kpi/paging_arm_v8.h
new file mode 100644 (file)
index 0000000..dec14b8
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ * \file
+ * \brief Arch specific definitions, can be included by others.
+ */
+
+/*
+ * Copyright (c) 2015, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+#ifndef TARGET_ARMV8_BARRELFISH_KPI_PAGING_H
+#define TARGET_ARMV8_BARRELFISH_KPI_PAGING_H
+
+#ifndef __ASSEMBLER__
+typedef uint64_t paging_x86_64_flags_t;
+#endif
+
+/** The system's base page size is 4kB */
+#define ARMv8_BASE_PAGE_BITS                  12
+#define ARMv8_BASE_PAGE_SIZE                  (1<<ARMv8_BASE_PAGE_BITS)
+#define ARMv8_BASE_PAGE_MASK                  (ARMv8_BASE_PAGE_SIZE - 1)
+#define ARMv8_BASE_PAGE_OFFSET(a)             ((a) & ARMv8_BASE_PAGE_MASK)
+
+/** The system's large page size is 2MB */
+#define ARMv8_LARGE_PAGE_BITS                  21
+#define ARMv8_LARGE_PAGE_SIZE                  (1<<ARMv8_LARGE_PAGE_BITS)
+#define ARMv8_LARGE_PAGE_MASK                  (ARMv8_LARGE_PAGE_SIZE - 1)
+#define ARMv8_LARGE_PAGE_OFFSET(a)             ((a) & ARMv8_LARGE_PAGE_MASK)
+
+/** The system's huge page size is 1GB */
+#define ARMv8_HUGE_PAGE_BITS                  30
+#define ARMv8_HUGE_PAGE_SIZE                  (1<<ARMv8_HUGE_PAGE_BITS)
+#define ARMv8_HUGE_PAGE_MASK                  (ARMv8_HUGE_PAGE_SIZE - 1)
+#define ARMv8_HUGE_PAGE_OFFSET(a)             ((a) & ARMv8_HUGE_PAGE_MASK)
+
+/**
+ * Bits within the various page directories and tables.
+ */
+
+// TODO: check what ptable sizes are available
+#define ARMv8_PTABLE_BITS         9       /**< Page directory/table size in bits */
+/** Page directory/table size */
+#define ARMv8_PTABLE_SIZE         (1UL<<ARMv8_PTABLE_BITS)
+#define ARMv8_PTABLE_MASK         0x1ff   /**< Page dir/table address mask */
+#define ARMv8_PTABLE_CLEAR        0       /**< Bitmap of a clear table entry */
+
+// XXX: maybe sizeof(union ...)
+#define ARMv8_PTABLE_ENTRY_SIZE   sizeof(uint64_t)
+
+// XXX: These may depend on system config registers
+/* Macros to compute the corresponding portions of the vaddr */
+#define ARMv8_PML4_BASE(base)         (((uint64_t)(base) >> 39) & ARMv8_PTABLE_MASK)
+#define ARMv8_PDPT_BASE(base)         (((uint64_t)(base) >> 30) & ARMv8_PTABLE_MASK)
+#define ARMv8_PDIR_BASE(base)         (((uint64_t)(base) >> 21) & ARMv8_PTABLE_MASK)
+#define ARMv8_PTABLE_BASE(base)       (((uint64_t)(base) >> 12) & ARMv8_PTABLE_MASK)
+
+// non-prefixed versions
+// XXX: should cleanup arm include mess
+
+/** The system's base page size is 4kB */
+#define BASE_PAGE_BITS                  ARMv8_BASE_PAGE_BITS
+#define BASE_PAGE_SIZE                  ARMv8_BASE_PAGE_SIZE
+#define BASE_PAGE_MASK      &nbs