1207673Sjoel/*-
2183906Skmacy * Copyright (c) 2008 Kip Macy
3183906Skmacy * All rights reserved.
4183906Skmacy *
5183906Skmacy * Redistribution and use in source and binary forms, with or without
6183906Skmacy * modification, are permitted provided that the following conditions
7183906Skmacy * are met:
8183906Skmacy * 1. Redistributions of source code must retain the above copyright
9183906Skmacy *    notice, this list of conditions and the following disclaimer.
10183906Skmacy * 2. Redistributions in binary form must reproduce the above copyright
11183906Skmacy *    notice, this list of conditions and the following disclaimer in the
12183906Skmacy *    documentation and/or other materials provided with the distribution.
13183906Skmacy *
14207673Sjoel * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15207673Sjoel * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16207673Sjoel * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17207673Sjoel * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18207673Sjoel * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19207673Sjoel * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20207673Sjoel * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21207673Sjoel * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22207673Sjoel * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23207673Sjoel * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24207673Sjoel * SUCH DAMAGE.
25183906Skmacy *
26183906Skmacy * $FreeBSD$
27183906Skmacy */
28183906Skmacy#ifndef XENVAR_H_
29183906Skmacy#define XENVAR_H_
30183906Skmacy#define XBOOTUP 0x1
31183906Skmacy#define XPMAP   0x2
32183906Skmacyextern int xendebug_flags;
33183906Skmacy#ifndef NOXENDEBUG
34183906Skmacy#define XENPRINTF printk
35183906Skmacy#else
36183906Skmacy#define XENPRINTF printf
37183906Skmacy#endif
38185637Sdfr#include <xen/features.h>
39183906Skmacy
40183906Skmacy#if 0
41183906Skmacy#define TRACE_ENTER XENPRINTF("(file=%s, line=%d) entered %s\n", __FILE__, __LINE__, __FUNCTION__)
42183906Skmacy#define TRACE_EXIT XENPRINTF("(file=%s, line=%d) exiting %s\n", __FILE__, __LINE__, __FUNCTION__)
43183906Skmacy#define TRACE_DEBUG(argflags, _f, _a...) \
44183906Skmacyif (xendebug_flags & argflags) XENPRINTF("(file=%s, line=%d) " _f "\n", __FILE__, __LINE__, ## _a);
45183906Skmacy#else
46183906Skmacy#define TRACE_ENTER
47183906Skmacy#define TRACE_EXIT
48183906Skmacy#define TRACE_DEBUG(argflags, _f, _a...)
49183906Skmacy#endif
50183906Skmacy
51185386Sdfr#ifdef XENHVM
52185386Sdfr
53185386Sdfrstatic inline vm_paddr_t
54185386Sdfrphystomach(vm_paddr_t pa)
55185386Sdfr{
56185386Sdfr
57185386Sdfr	return (pa);
58185386Sdfr}
59185386Sdfr
60185386Sdfrstatic inline vm_paddr_t
61185386Sdfrmachtophys(vm_paddr_t ma)
62185386Sdfr{
63185386Sdfr
64185386Sdfr	return (ma);
65185386Sdfr}
66185386Sdfr
67185386Sdfr#define vtomach(va)	pmap_kextract((vm_offset_t) (va))
68185386Sdfr#define PFNTOMFN(pa)	(pa)
69189614Sdfr#define MFNTOPFN(ma)	(ma)
70185386Sdfr
71185386Sdfr#define set_phys_to_machine(pfn, mfn)	((void)0)
72189699Sdfr#define phys_to_machine_mapping_valid(pfn)	(TRUE)
73185386Sdfr#define PT_UPDATES_FLUSH()		((void)0)
74185386Sdfr
75185386Sdfr#else
76185386Sdfr
77185386Sdfrextern	xen_pfn_t *xen_phys_machine;
78185386Sdfr
79185386Sdfr
80183906Skmacyextern xen_pfn_t *xen_machine_phys;
81183906Skmacy/* Xen starts physical pages after the 4MB ISA hole -
82183906Skmacy * FreeBSD doesn't
83183906Skmacy */
84183906Skmacy
85183906Skmacy
86183906Skmacy#undef ADD_ISA_HOLE /* XXX */
87183906Skmacy
88183906Skmacy#ifdef ADD_ISA_HOLE
89183906Skmacy#define ISA_INDEX_OFFSET 1024
90183906Skmacy#define ISA_PDR_OFFSET 1
91183906Skmacy#else
92183906Skmacy#define ISA_INDEX_OFFSET 0
93183906Skmacy#define ISA_PDR_OFFSET 0
94183906Skmacy#endif
95183906Skmacy
96183906Skmacy
97183906Skmacy#define PFNTOMFN(i) (xen_phys_machine[(i)])
98183906Skmacy#define MFNTOPFN(i) ((vm_paddr_t)xen_machine_phys[(i)])
99183906Skmacy
100183906Skmacy#define VTOP(x) ((((uintptr_t)(x))) - KERNBASE)
101183906Skmacy#define PTOV(x) (((uintptr_t)(x)) + KERNBASE)
102183906Skmacy
103183906Skmacy#define VTOPFN(x) (VTOP(x) >> PAGE_SHIFT)
104183906Skmacy#define PFNTOV(x) PTOV((vm_paddr_t)(x)  << PAGE_SHIFT)
105183906Skmacy
106183906Skmacy#define VTOMFN(va) (vtomach(va) >> PAGE_SHIFT)
107183906Skmacy#define PFN_UP(x)    (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
108183906Skmacy
109183906Skmacy#define phystomach(pa) (((vm_paddr_t)(PFNTOMFN((pa) >> PAGE_SHIFT))) << PAGE_SHIFT)
110183906Skmacy#define machtophys(ma) (((vm_paddr_t)(MFNTOPFN((ma) >> PAGE_SHIFT))) << PAGE_SHIFT)
111183906Skmacy
112185386Sdfr#endif
113183906Skmacy
114183906Skmacyvoid xpq_init(void);
115183906Skmacy
116183906Skmacyint  xen_create_contiguous_region(vm_page_t pages, int npages);
117183906Skmacy
118183906Skmacyvoid  xen_destroy_contiguous_region(void * addr, int npages);
119183906Skmacy
120183906Skmacy#endif
121