1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _SYS_XPV_SUPPORT_H
28#define	_SYS_XPV_SUPPORT_H
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#define	__XEN_INTERFACE_VERSION__	__XEN_LATEST_INTERFACE_VERSION__
35
36#if !defined(_ASM)
37
38#include <sys/types.h>
39#include <sys/inttypes.h>
40#include <sys/dditypes.h>
41#include <sys/xpv_impl.h>
42#include <sys/xen_mmu.h>
43
44#define	IPL_DEBUG	15	/* domain debug interrupt */
45#define	IPL_CONS	9
46#define	IPL_VIF		6
47#define	IPL_VBD		5
48#define	IPL_EVTCHN	1
49
50#define	INVALID_EVTCHN 0
51
52typedef uint_t (*ec_handler_fcn_t)();
53
54extern int ec_init(void);
55extern void ec_fini();
56extern void ec_bind_evtchn_to_handler(int, pri_t, ec_handler_fcn_t, void *);
57extern void ec_unbind_evtchn(int);
58extern void ec_notify_via_evtchn(uint_t);
59extern void hypervisor_mask_event(uint_t);
60extern void hypervisor_unmask_event(uint_t);
61
62extern void xen_hvm_init(void);
63extern int xen_bind_interdomain(int, int, int *);
64extern int xen_alloc_unbound_evtchn(int, int *);
65extern int xen_xlate_errcode(int error);
66extern void *xen_alloc_pages(pgcnt_t cnt);
67extern void kbm_map_ma(maddr_t ma, uintptr_t va, uint_t level);
68
69/*
70 * Stub functions to allow the FE drivers to build without littering them
71 * with #ifdefs
72 */
73extern void balloon_drv_added(int64_t);
74extern long balloon_free_pages(uint_t, mfn_t *, caddr_t, pfn_t *);
75extern void xen_release_pfn(pfn_t);
76extern void reassign_pfn(pfn_t, mfn_t);
77
78extern shared_info_t *HYPERVISOR_shared_info;
79extern pfn_t xen_shared_info_frame;
80
81/*
82 * Argument to xpv_feature(). This function will return -1 if a feature
83 * is not available, 1 if a boolean feature is available, and a value >= 0
84 * if a numeric value is requested.
85 */
86#define	XPVF_BITS		0	/* numeric (32 or 64) */
87#define	XPVF_VERSION_MAJOR	1	/* numeric */
88#define	XPVF_VERSION_MINOR	2	/* numeric */
89#define	XPVF_HYPERCALLS		3	/* boolean (hypercalls work) */
90#define	XPVF_SHARED_INFO	4	/* boolean (shared info is valid) */
91#define	XPVF_TLB_FLUSH		5	/* boolean (tlb flush call present) */
92
93extern int xpv_feature(int);
94
95#define	IN_XPV_PANIC()	(__lintzero)
96
97#ifdef __cplusplus
98}
99#endif
100
101#endif	/* __ASM */
102#endif	/* _SYS_XPV_SUPPORT_H */
103