md_var.h revision 278522
1184989Srafan/*-
250276Speter * Copyright (c) 1995 Bruce D. Evans.
3184989Srafan * All rights reserved.
450276Speter *
550276Speter * Redistribution and use in source and binary forms, with or without
650276Speter * modification, are permitted provided that the following conditions
750276Speter * are met:
850276Speter * 1. Redistributions of source code must retain the above copyright
950276Speter *    notice, this list of conditions and the following disclaimer.
1050276Speter * 2. Redistributions in binary form must reproduce the above copyright
1150276Speter *    notice, this list of conditions and the following disclaimer in the
1250276Speter *    documentation and/or other materials provided with the distribution.
1350276Speter * 3. Neither the name of the author nor the names of contributors
1450276Speter *    may be used to endorse or promote products derived from this software
1550276Speter *    without specific prior written permission.
1650276Speter *
1750276Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1850276Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1950276Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2050276Speter * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2150276Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2250276Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2350276Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2450276Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2550276Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2650276Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2750276Speter * SUCH DAMAGE.
2850276Speter *
2950276Speter * $FreeBSD: stable/10/sys/amd64/include/md_var.h 278522 2015-02-10 16:34:42Z jhb $
3050276Speter */
3150276Speter
3297049Speter#ifndef _MACHINE_MD_VAR_H_
3350276Speter#define	_MACHINE_MD_VAR_H_
34166124Srafan
3550276Speter/*
36174993Srafan * Miscellaneous machine-dependent declarations.
3750276Speter */
3850276Speter
3950276Speterextern	long	Maxmem;
40174993Srafanextern	u_int	basemem;
41174993Srafanextern	int	busdma_swi_pending;
42174993Srafanextern	u_int	cpu_exthigh;
43174993Srafanextern	u_int	cpu_feature;
44174993Srafanextern	u_int	cpu_feature2;
45174993Srafanextern	u_int	amd_feature;
46174993Srafanextern	u_int	amd_feature2;
47174993Srafanextern	u_int	amd_pminfo;
48174993Srafanextern	u_int	via_feature_rng;
49174993Srafanextern	u_int	via_feature_xcrypt;
50174993Srafanextern	u_int	cpu_clflush_line_size;
51174993Srafanextern	u_int	cpu_stdext_feature;
52174993Srafanextern	u_int	cpu_fxsr;
53174993Srafanextern	u_int	cpu_high;
54174993Srafanextern	u_int	cpu_id;
55174993Srafanextern	u_int	cpu_max_ext_state_size;
5650276Speterextern	u_int	cpu_mxcsr_mask;
5750276Speterextern	u_int	cpu_procinfo;
5850276Speterextern	u_int	cpu_procinfo2;
59174993Srafanextern	char	cpu_vendor[];
60174993Srafanextern	u_int	cpu_vendor_id;
61174993Srafanextern	u_int	cpu_mon_mwait_flags;
62174993Srafanextern	u_int	cpu_mon_min_size;
63174993Srafanextern	u_int	cpu_mon_max_size;
64174993Srafanextern	u_int	cpu_maxphyaddr;
65174993Srafanextern	char	ctx_switch_xsave[];
6650276Speterextern	u_int	hv_high;
67166124Srafanextern	char	hv_vendor[];
68174993Srafanextern	char	kstack[];
69166124Srafanextern	char	sigcode[];
70184989Srafanextern	int	szsigcode;
7150276Speterextern	uint64_t *vm_page_dump;
72166124Srafanextern	int	vm_page_dump_size;
73166124Srafanextern	int	workaround_erratum383;
74166124Srafanextern	int	_udatasel;
75166124Srafanextern	int	_ucodesel;
7650276Speterextern	int	_ucode32sel;
77166124Srafanextern	int	_ufssel;
78166124Srafanextern	int	_ugssel;
79166124Srafanextern	int	use_xsave;
80174993Srafanextern	uint64_t xsave_mask;
81174993Srafan
82174993Srafantypedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
83174993Srafanstruct	pcb;
84174993Srafanstruct	savefpu;
85174993Srafanstruct	thread;
86174993Srafanstruct	reg;
87174993Srafanstruct	fpreg;
88174993Srafanstruct  dbreg;
89174993Srafanstruct	dumperinfo;
90174993Srafan
91174993Srafanvoid	*alloc_fpusave(int flags);
92174993Srafanvoid	amd64_syscall(struct thread *td, int traced);
93174993Srafanvoid	busdma_swi(void);
94174993Srafanvoid	cpu_setregs(void);
9598503Spetervoid	doreti_iret(void) __asm(__STRING(doreti_iret));
96166124Srafanvoid	doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault));
97174993Srafanvoid	ld_ds(void) __asm(__STRING(ld_ds));
98174993Srafanvoid	ld_es(void) __asm(__STRING(ld_es));
99174993Srafanvoid	ld_fs(void) __asm(__STRING(ld_fs));
100174993Srafanvoid	ld_gs(void) __asm(__STRING(ld_gs));
101166124Srafanvoid	ld_fsbase(void) __asm(__STRING(ld_fsbase));
102166124Srafanvoid	ld_gsbase(void) __asm(__STRING(ld_gsbase));
103184989Srafanvoid	ds_load_fault(void) __asm(__STRING(ds_load_fault));
104166124Srafanvoid	es_load_fault(void) __asm(__STRING(es_load_fault));
105166124Srafanvoid	fs_load_fault(void) __asm(__STRING(fs_load_fault));
106166124Srafanvoid	gs_load_fault(void) __asm(__STRING(gs_load_fault));
107166124Srafanvoid	fsbase_load_fault(void) __asm(__STRING(fsbase_load_fault));
108166124Srafanvoid	gsbase_load_fault(void) __asm(__STRING(gsbase_load_fault));
109166124Srafanvoid	dump_add_page(vm_paddr_t);
110166124Srafanvoid	dump_drop_page(vm_paddr_t);
111166124Srafanvoid	identify_cpu(void);
112166124Srafanvoid	initializecpu(void);
113166124Srafanvoid	initializecpucache(void);
114174993Srafanvoid	fillw(int /*u_short*/ pat, void *base, size_t cnt);
115166124Srafanvoid	fpstate_drop(struct thread *td);
116174993Srafanint	is_physical_memory(vm_paddr_t addr);
117166124Srafanint	isa_nmi(int cd);
118166124Srafanvoid	panicifcpuunsupported(void);
119166124Srafanvoid	pagecopy(void *from, void *to);
120166124Srafanvoid	pagezero(void *addr);
121166124Srafanvoid	printcpuinfo(void);
122166124Srafanvoid	setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist);
123166124Srafanint	user_dbreg_trap(void);
12497049Spetervoid	minidumpsys(struct dumperinfo *);
125166124Srafanstruct savefpu *get_pcb_user_save_td(struct thread *td);
126166124Srafanstruct savefpu *get_pcb_user_save_pcb(struct pcb *pcb);
127184989Srafanstruct pcb *get_pcb_td(struct thread *td);
128166124Srafanvoid	amd64_db_resume_dbreg(void);
129166124Srafan
130166124Srafan#endif /* !_MACHINE_MD_VAR_H_ */
131166124Srafan