md_var.h revision 322205
1274357Sjkim/*-
2274357Sjkim * Copyright (c) 1995 Bruce D. Evans.
3274357Sjkim * All rights reserved.
4274357Sjkim *
5274357Sjkim * Redistribution and use in source and binary forms, with or without
6274357Sjkim * modification, are permitted provided that the following conditions
7274357Sjkim * are met:
8306536Sjkim * 1. Redistributions of source code must retain the above copyright
9274357Sjkim *    notice, this list of conditions and the following disclaimer.
10274357Sjkim * 2. Redistributions in binary form must reproduce the above copyright
11274357Sjkim *    notice, this list of conditions and the following disclaimer in the
12274357Sjkim *    documentation and/or other materials provided with the distribution.
13274357Sjkim * 3. Neither the name of the author nor the names of contributors
14274357Sjkim *    may be used to endorse or promote products derived from this software
15274357Sjkim *    without specific prior written permission.
16274357Sjkim *
17274357Sjkim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18274357Sjkim * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19274357Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20274357Sjkim * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21274357Sjkim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22274357Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23274357Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24274357Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25274357Sjkim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26274357Sjkim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27274357Sjkim * SUCH DAMAGE.
28274357Sjkim *
29274357Sjkim * $FreeBSD: stable/10/sys/amd64/include/md_var.h 322205 2017-08-07 22:30:18Z jkim $
30274357Sjkim */
31274357Sjkim
32274357Sjkim#ifndef _MACHINE_MD_VAR_H_
33274357Sjkim#define	_MACHINE_MD_VAR_H_
34274357Sjkim
35274357Sjkim/*
36274357Sjkim * Miscellaneous machine-dependent declarations.
37274357Sjkim */
38274357Sjkim
39274357Sjkimextern	long	Maxmem;
40274357Sjkimextern	u_int	basemem;
41274357Sjkimextern	int	busdma_swi_pending;
42274357Sjkimextern	u_int	cpu_exthigh;
43274357Sjkimextern	u_int	cpu_feature;
44278970Sjkimextern	u_int	cpu_feature2;
45278970Sjkimextern	u_int	amd_feature;
46278970Sjkimextern	u_int	amd_feature2;
47278970Sjkimextern	u_int	amd_pminfo;
48278970Sjkimextern	u_int	via_feature_rng;
49274357Sjkimextern	u_int	via_feature_xcrypt;
50274357Sjkimextern	u_int	cpu_clflush_line_size;
51274357Sjkimextern	u_int	cpu_stdext_feature;
52274357Sjkimextern	u_int	cpu_stdext_feature2;
53274357Sjkimextern	u_int	cpu_fxsr;
54274357Sjkimextern	u_int	cpu_high;
55274357Sjkimextern	u_int	cpu_id;
56274357Sjkimextern	u_int	cpu_max_ext_state_size;
57274357Sjkimextern	u_int	cpu_mxcsr_mask;
58274357Sjkimextern	u_int	cpu_procinfo;
59274357Sjkimextern	u_int	cpu_procinfo2;
60274357Sjkimextern	char	cpu_vendor[];
61274357Sjkimextern	u_int	cpu_vendor_id;
62274357Sjkimextern	u_int	cpu_mon_mwait_flags;
63274357Sjkimextern	u_int	cpu_mon_min_size;
64274357Sjkimextern	u_int	cpu_mon_max_size;
65274357Sjkimextern	u_int	cpu_maxphyaddr;
66274357Sjkimextern	char	ctx_switch_xsave[];
67274357Sjkimextern	u_int	hv_high;
68274357Sjkimextern	char	hv_vendor[];
69274357Sjkimextern	char	kstack[];
70274357Sjkimextern	char	sigcode[];
71274357Sjkimextern	int	szsigcode;
72274357Sjkimextern	uint64_t *vm_page_dump;
73274357Sjkimextern	int	vm_page_dump_size;
74274357Sjkimextern	int	workaround_erratum383;
75274357Sjkimextern	int	_udatasel;
76274357Sjkimextern	int	_ucodesel;
77274357Sjkimextern	int	_ucode32sel;
78274357Sjkimextern	int	_ufssel;
79274357Sjkimextern	int	_ugssel;
80274357Sjkimextern	int	use_xsave;
81274357Sjkimextern	uint64_t xsave_mask;
82274357Sjkim
83274357Sjkimtypedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
84274357Sjkimstruct	pcb;
85274357Sjkimstruct	savefpu;
86274357Sjkimstruct	thread;
87274357Sjkimstruct	reg;
88274357Sjkimstruct	fpreg;
89274357Sjkimstruct  dbreg;
90274357Sjkimstruct	dumperinfo;
91274357Sjkim
92274357Sjkim/*
93274357Sjkim * Returns the maximum physical address that can be used with the
94274357Sjkim * current system.
95274357Sjkim */
96274357Sjkimstatic __inline vm_paddr_t
97274357Sjkimcpu_getmaxphyaddr(void)
98274357Sjkim{
99274357Sjkim	return ((1ULL << cpu_maxphyaddr) - 1);
100274357Sjkim}
101274357Sjkim
102274357Sjkimvoid	*alloc_fpusave(int flags);
103274357Sjkimvoid	amd64_syscall(struct thread *td, int traced);
104274357Sjkimvoid	busdma_swi(void);
105274357Sjkimvoid	cpu_setregs(void);
106274357Sjkimvoid	doreti_iret(void) __asm(__STRING(doreti_iret));
107274357Sjkimvoid	doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault));
108274357Sjkimvoid	ld_ds(void) __asm(__STRING(ld_ds));
109274357Sjkimvoid	ld_es(void) __asm(__STRING(ld_es));
110274357Sjkimvoid	ld_fs(void) __asm(__STRING(ld_fs));
111274357Sjkimvoid	ld_gs(void) __asm(__STRING(ld_gs));
112274357Sjkimvoid	ld_fsbase(void) __asm(__STRING(ld_fsbase));
113274357Sjkimvoid	ld_gsbase(void) __asm(__STRING(ld_gsbase));
114274357Sjkimvoid	ds_load_fault(void) __asm(__STRING(ds_load_fault));
115274357Sjkimvoid	es_load_fault(void) __asm(__STRING(es_load_fault));
116274357Sjkimvoid	fs_load_fault(void) __asm(__STRING(fs_load_fault));
117274357Sjkimvoid	gs_load_fault(void) __asm(__STRING(gs_load_fault));
118274357Sjkimvoid	fsbase_load_fault(void) __asm(__STRING(fsbase_load_fault));
119274357Sjkimvoid	gsbase_load_fault(void) __asm(__STRING(gsbase_load_fault));
120274357Sjkimvoid	dump_add_page(vm_paddr_t);
121274357Sjkimvoid	dump_drop_page(vm_paddr_t);
122274357Sjkimvoid	identify_cpu(void);
123274357Sjkimvoid	identify_hypervisor(void);
124274357Sjkimvoid	initializecpu(void);
125274357Sjkimvoid	initializecpucache(void);
126274357Sjkimbool	fix_cpuid(void);
127274357Sjkimvoid	fillw(int /*u_short*/ pat, void *base, size_t cnt);
128274357Sjkimvoid	fpstate_drop(struct thread *td);
129274357Sjkimint	is_physical_memory(vm_paddr_t addr);
130274357Sjkimint	isa_nmi(int cd);
131274357Sjkimvoid	panicifcpuunsupported(void);
132274357Sjkimvoid	pagecopy(void *from, void *to);
133274357Sjkimvoid	pagezero(void *addr);
134274357Sjkimvoid	printcpuinfo(void);
135274357Sjkimvoid	setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist);
136274357Sjkimint	user_dbreg_trap(void);
137274357Sjkimvoid	minidumpsys(struct dumperinfo *);
138274357Sjkimstruct savefpu *get_pcb_user_save_td(struct thread *td);
139274357Sjkimstruct savefpu *get_pcb_user_save_pcb(struct pcb *pcb);
140274357Sjkimstruct pcb *get_pcb_td(struct thread *td);
141274357Sjkimvoid	amd64_db_resume_dbreg(void);
142274357Sjkim
143274357Sjkim#endif /* !_MACHINE_MD_VAR_H_ */
144274357Sjkim