summaryrefslogtreecommitdiff
path: root/sys/src/9/xen/fns.h
blob: 3013d5f4a6a121093ee89397780776c082da0167 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "../port/portfns.h"

Dirtab*	addarchfile(char*, int, long(*)(Chan*,void*,long,vlong), long(*)(Chan*,void*,long,vlong));
void	archinit(void);
void	bootargs(ulong);
ulong	cankaddr(ulong);
#define	clearmmucache()				/* x86 doesn't have one */
void	clockintr(Ureg*, void*);
int		(*cmpswap)(long*, long, long);
int		cmpswap486(long*, long, long);
void	(*coherence)(void);
void	cpuid(int, int, ulong regs[]);
void	fpuinit(void);
void	fpuprocsetup(Proc*);
void	fpuprocfork(Proc*);
void	fpuprocsave(Proc*);
void	fpuprocrestore(Proc*);
int		cpuidentify(void);
void	cpuidprint(void);
void	(*cycles)(uvlong*);
void	delay(int);
#define	evenaddr(x)				/* x86 doesn't care */
void	fpclear(void);
void	fpinit(void);
void	fpoff(void);
void	(*fprestore)(FPsave*);
void	(*fpsave)(FPsave*);
ulong	getcr4(void);
char*	getconf(char*);
void	halt(void);
void	mwait(void*);
void	i8042reset(void);
void	i8253enable(void);
void	i8253init(void);
void	i8253link(void);
uvlong	i8253read(uvlong*);
void	i8253timerset(uvlong);
void	idle(void);
void	idlehands(void);
int	inb(int);
void	insb(int, void*, int);
ushort	ins(int);
void	inss(int, void*, int);
ulong	inl(int);
void	insl(int, void*, int);
void	intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
void	intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
void	ioinit(void);
int	isaconfig(char*, int, ISAConf*);
void	kbdenable(void);
#define	kmapinval()
void	links(void);
void	mach0init(void);
void	mathinit(void);
void	mb386(void);
void	mb586(void);
void	mfence(void);
void mmuflushtlb(Page*);
void	mmuinit(void);
ulong	mmukmap(ulong, ulong, int);
int	mmukmapsync(ulong);
#define	mmunewpage(x)
ulong*	mmuwalk(ulong*, ulong, int, int);
char*	mtrr(uvlong, uvlong, char *);
int	mtrrprint(char *, long);
void	mtrrsync(void);
void	outb(int, int);
void	outsb(int, void*, int);
void	outs(int, ushort);
void	outss(int, void*, int);
void	outl(int, ulong);
void	outsl(int, void*, int);
void	printcpufreq(void);
void	procrestore(Proc*);
void	procsave(Proc*);
void	procsetup(Proc*);
void	procfork(Proc*);
void	putcr4(ulong);
int		rdmsr(int, vlong*);
int		screenprint(char*, ...);			/* debugging */
void	(*screenputs)(char*, int);
void	touser(void*);
void	trap(Ureg*);
void	trapenable(int, void (*)(Ureg*, void*), void*, char*);
void	trapinit(void);
int		tas(void*);
#define	userureg(ur) (((ur)->cs & 0xFFFF) == UESEL)
void	vectortable(void);
int		wrmsr(int, vlong);
uint	xchgl(uint*, uint);
uint	xchgw(ushort*, uint);
uint	xchgb(uchar*, uint);
void	rdrandbuf(void*, ulong);

#define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
#define KADDR(a)	((void*)((ulong)(a)|KZERO))
#define PADDR(a)	((ulong)(a)&~KZERO)

#define	dcflush(a, b)

/* Xen functions */
#define rmb()	coherence()
#define wmb()	coherence()
void mb(void);
void hypervisor_callback(void), failsafe_callback(void);
void xenconsinit(void);
ulong mmumapframe(ulong, ulong);
void mmumapcpu0(void);
void dprint(char *, ...);
void xenupdate(ulong *ptr, ulong val);
void xenupdatema(ulong *ptr, uvlong val);
int xenpdptpin(ulong va);
int xenpgdpin(ulong va);
int xenptpin(ulong va);
void xenptunpin(ulong va);
void xenptswitch(ulong pa);
void xentlbflush(void);
int ffs(ulong);
void xengrantinit(void);
int xengrant(domid_t domid, ulong frame, int flags);
int xengrantend(int ref);
void acceptframe(int ref, void *va);
int donateframe(int domid, void *va);
int shareframe(int domid, void *va, int write);
void xenchannotify(int);
void xenupcall(Ureg*);
ulong xenwallclock(void);
int xenstore_read(char*, char*, int);
void xenstore_write(char*, char*);
void xenstore_setd(char *dir, char *node, int value);
int xenstore_gets(char *dir, char *node, char *buf, int buflen);
int xenchanalloc(int);

long HYPERVISOR_set_timer_op(uvlong timeout);
int HYPERVISOR_set_trap_table(trap_info_t *table);
int HYPERVISOR_mmu_update(mmu_update_t *req, int count, int *success_count, domid_t domid);
int HYPERVISOR_mmuext_op(struct mmuext_op *op, int count, int *scount, domid_t domid);
int HYPERVISOR_set_gdt(ulong *frame_list, int entries);
int HYPERVISOR_stack_switch(ulong ss, ulong esp);
int HYPERVISOR_set_callbacks(ulong evss, ulong evfunc, ulong fsss, ulong fsfunc);
int HYPERVISOR_fpu_taskswitch(void);
int HYPERVISOR_yield(void);
int HYPERVISOR_block(void);
int HYPERVISOR_shutdown(int);
int HYPERVISOR_multicall(void *call_list, int nr_calls);
int HYPERVISOR_event_channel_op(void *op);
int HYPERVISOR_xen_version(int cmd, void *arg);
int HYPERVISOR_console_io(int cmd, int count, char *str);
int HYPERVISOR_grant_table_op(int cmd, gnttab_setup_table_t *setup, int count);
int HYPERVISOR_memory_op(int cmd, struct xen_memory_reservation *arg);