1/*- 2 * Copyright (c) 2003 Peter Wemm <peter@FreeBSD.org> 3 * Copyright (c) 2011-2012 Spectra Logic Corporation 4 * Copyright (c) 2013 Roger Pau Monne <royger@FreeBSD.org> 5 * All rights reserved. 6 * 7 * This software was developed by Cherry G. Mathew <cherry@zyx.in> 8 * under sponsorship from Spectra Logic Corporation. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * $FreeBSD$ 32 */ 33 34#include <machine/asmacros.h> 35#include <machine/psl.h> 36#include <machine/pmap.h> 37#include <machine/specialreg.h> 38 39#include <xen/xen-os.h> 40#define __ASSEMBLY__ 41#include <xen/interface/elfnote.h> 42 43#include "assym.s" 44 45.section __xen_guest 46 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS, .asciz, "FreeBSD") 47 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION, .asciz, __XSTRING(__FreeBSD_version)) 48 ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION, .asciz, "xen-3.0") 49 ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE, .quad, KERNBASE) 50 ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET, .quad, KERNBASE) /* Xen honours elf->p_paddr; compensate for this */ 51 ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, .quad, xen_start) 52 ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .quad, hypercall_page) 53 ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW, .quad, HYPERVISOR_VIRT_START) 54 ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz, "writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel|hvm_callback_vector") 55 ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz, "yes") 56 ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID, .long, PG_V, PG_V) 57 ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic") 58 ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long, 0) 59 ELFNOTE(Xen, XEN_ELFNOTE_BSD_SYMTAB, .asciz, "yes") 60 61 .text 62.p2align PAGE_SHIFT, 0x90 /* Hypercall_page needs to be PAGE aligned */ 63 64NON_GPROF_ENTRY(hypercall_page) 65 .skip 0x1000, 0x90 /* Fill with "nop"s */ 66 67NON_GPROF_ENTRY(xen_start) 68 /* Don't trust what the loader gives for rflags. */ 69 pushq $PSL_KERNEL 70 popfq 71 72 /* Parameters for the xen init function */ 73 movq %rsi, %rdi /* shared_info (arg 1) */ 74 movq %rsp, %rsi /* xenstack (arg 2) */ 75 76 /* Use our own stack */ 77 movq $bootstack,%rsp 78 xorl %ebp, %ebp 79 80 /* u_int64_t hammer_time_xen(start_info_t *si, u_int64_t xenstack); */ 81 call hammer_time_xen 82 movq %rax, %rsp /* set up kstack for mi_startup() */ 83 call mi_startup /* autoconfiguration, mountroot etc */ 84 85 /* NOTREACHED */ 860: hlt 87 jmp 0b 88