xenvar.h revision 185637
155714Skris/*
255714Skris * Copyright (c) 2008 Kip Macy
355714Skris * All rights reserved.
455714Skris *
555714Skris * Redistribution and use in source and binary forms, with or without
655714Skris * modification, are permitted provided that the following conditions
755714Skris * are met:
855714Skris *
955714Skris * 1. Redistributions of source code must retain the above copyright
1055714Skris *    notice, this list of conditions and the following disclaimer.
1155714Skris *
1255714Skris * 2. Redistributions in binary form must reproduce the above copyright
1355714Skris *    notice, this list of conditions and the following disclaimer in the
1455714Skris *    documentation and/or other materials provided with the distribution.
1555714Skris *
1655714Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1755714Skris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1855714Skris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1955714Skris * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2055714Skris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2155714Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2255714Skris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2355714Skris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2455714Skris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2555714Skris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2655714Skris *
2755714Skris *
2855714Skris * $FreeBSD: user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h 185637 2008-12-05 15:00:59Z dfr $
2955714Skris */
3055714Skris#ifndef XENVAR_H_
3155714Skris#define XENVAR_H_
3255714Skris#define XBOOTUP 0x1
3355714Skris#define XPMAP   0x2
3455714Skrisextern int xendebug_flags;
3555714Skris#ifndef NOXENDEBUG
3655714Skris#define XENPRINTF printk
3755714Skris#else
3855714Skris#define XENPRINTF printf
3955714Skris#endif
4055714Skris#include <xen/features.h>
4155714Skris
4255714Skris#if 0
4355714Skris#define TRACE_ENTER XENPRINTF("(file=%s, line=%d) entered %s\n", __FILE__, __LINE__, __FUNCTION__)
4455714Skris#define TRACE_EXIT XENPRINTF("(file=%s, line=%d) exiting %s\n", __FILE__, __LINE__, __FUNCTION__)
4555714Skris#define TRACE_DEBUG(argflags, _f, _a...) \
4655714Skrisif (xendebug_flags & argflags) XENPRINTF("(file=%s, line=%d) " _f "\n", __FILE__, __LINE__, ## _a);
4755714Skris#else
4855714Skris#define TRACE_ENTER
4955714Skris#define TRACE_EXIT
5055714Skris#define TRACE_DEBUG(argflags, _f, _a...)
5155714Skris#endif
5255714Skris
5355714Skris#ifdef XENHVM
5455714Skris
5555714Skrisstatic inline vm_paddr_t
5655714Skrisphystomach(vm_paddr_t pa)
5755714Skris{
5855714Skris
5955714Skris	return (pa);
6055714Skris}
6155714Skris
6255714Skrisstatic inline vm_paddr_t
6355714Skrismachtophys(vm_paddr_t ma)
6468651Skris{
6568651Skris
6668651Skris	return (ma);
6768651Skris}
6868651Skris
6955714Skris#define vtomach(va)	pmap_kextract((vm_offset_t) (va))
7055714Skris#define PFNTOMFN(pa)	(pa)
7168651Skris
7279998Skris#define set_phys_to_machine(pfn, mfn)	((void)0)
7355714Skris#define PT_UPDATES_FLUSH()		((void)0)
7455714Skris
7555714Skris#else
7655714Skris
7755714Skrisextern	xen_pfn_t *xen_phys_machine;
7855714Skris
7955714Skris
8055714Skrisextern xen_pfn_t *xen_machine_phys;
8155714Skris/* Xen starts physical pages after the 4MB ISA hole -
8255714Skris * FreeBSD doesn't
8355714Skris */
8455714Skris
8559191Skris
8655714Skris#undef ADD_ISA_HOLE /* XXX */
8755714Skris
8855714Skris#ifdef ADD_ISA_HOLE
8955714Skris#define ISA_INDEX_OFFSET 1024
9055714Skris#define ISA_PDR_OFFSET 1
9155714Skris#else
9255714Skris#define ISA_INDEX_OFFSET 0
9355714Skris#define ISA_PDR_OFFSET 0
9455714Skris#endif
9555714Skris
9655714Skris
9768651Skris#define PFNTOMFN(i) (xen_phys_machine[(i)])
9855714Skris#define MFNTOPFN(i) ((vm_paddr_t)xen_machine_phys[(i)])
9968651Skris
10068651Skris#define VTOP(x) ((((uintptr_t)(x))) - KERNBASE)
10168651Skris#define PTOV(x) (((uintptr_t)(x)) + KERNBASE)
10268651Skris
10355714Skris#define VTOPFN(x) (VTOP(x) >> PAGE_SHIFT)
10455714Skris#define PFNTOV(x) PTOV((vm_paddr_t)(x)  << PAGE_SHIFT)
10555714Skris
10655714Skris#define VTOMFN(va) (vtomach(va) >> PAGE_SHIFT)
10755714Skris#define PFN_UP(x)    (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
10855714Skris
10955714Skris#define phystomach(pa) (((vm_paddr_t)(PFNTOMFN((pa) >> PAGE_SHIFT))) << PAGE_SHIFT)
11055714Skris#define machtophys(ma) (((vm_paddr_t)(MFNTOPFN((ma) >> PAGE_SHIFT))) << PAGE_SHIFT)
11155714Skris
11255714Skris#endif
11355714Skris
11455714Skrisvoid xpq_init(void);
11555714Skris
11655714Skrisint  xen_create_contiguous_region(vm_page_t pages, int npages);
11755714Skris
11855714Skrisvoid  xen_destroy_contiguous_region(void * addr, int npages);
11955714Skris
12055714Skris#endif
12155714Skris