17090Sbde/*-
27090Sbde * Copyright (c) 1995 Bruce D. Evans.
37090Sbde * All rights reserved.
47090Sbde *
57090Sbde * Redistribution and use in source and binary forms, with or without
67090Sbde * modification, are permitted provided that the following conditions
77090Sbde * are met:
87090Sbde * 1. Redistributions of source code must retain the above copyright
97090Sbde *    notice, this list of conditions and the following disclaimer.
107090Sbde * 2. Redistributions in binary form must reproduce the above copyright
117090Sbde *    notice, this list of conditions and the following disclaimer in the
127090Sbde *    documentation and/or other materials provided with the distribution.
137090Sbde * 3. Neither the name of the author nor the names of contributors
147090Sbde *    may be used to endorse or promote products derived from this software
157090Sbde *    without specific prior written permission.
167090Sbde *
177090Sbde * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
187090Sbde * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
197090Sbde * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
207090Sbde * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
217090Sbde * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227090Sbde * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237090Sbde * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247090Sbde * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
257090Sbde * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
267090Sbde * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
277090Sbde * SUCH DAMAGE.
287090Sbde *
2950477Speter * $FreeBSD$
307090Sbde */
317090Sbde
327090Sbde#ifndef _MACHINE_MD_VAR_H_
337090Sbde#define	_MACHINE_MD_VAR_H_
347090Sbde
357090Sbde/*
367090Sbde * Miscellaneous machine-dependent declarations.
377090Sbde */
387090Sbde
39102600Speterextern	long	Maxmem;
40122849Speterextern	u_int	basemem;
4133008Sbdeextern	int	busdma_swi_pending;
42108947Sjhbextern	u_int	cpu_exthigh;
4337553Sbdeextern	u_int	cpu_feature;
44130224Speterextern	u_int	cpu_feature2;
45130224Speterextern	u_int	amd_feature;
46151348Sjkimextern	u_int	amd_feature2;
47184101Sjkimextern	u_int	amd_pminfo;
48187109Sjkimextern	u_int	via_feature_rng;
49187109Sjkimextern	u_int	via_feature_xcrypt;
50195820Skibextern	u_int	cpu_clflush_line_size;
51243139Skibextern	u_int	cpu_stdext_feature;
52109700Sjhbextern	u_int	cpu_fxsr;
5337553Sbdeextern	u_int	cpu_high;
54109700Sjhbextern	u_int	cpu_id;
55231979Skibextern	u_int	cpu_max_ext_state_size;
56159782Sdavidxuextern	u_int	cpu_mxcsr_mask;
57109696Sjhbextern	u_int	cpu_procinfo;
58151348Sjkimextern	u_int	cpu_procinfo2;
597090Sbdeextern	char	cpu_vendor[];
60185341Sjkimextern	u_int	cpu_vendor_id;
61239942Skibextern	char	ctx_switch_xsave[];
627090Sbdeextern	char	kstack[];
6314331Speterextern	char	sigcode[];
64105950Speterextern	int	szsigcode;
65157908Speterextern	uint64_t *vm_page_dump;
66157908Speterextern	int	vm_page_dump_size;
67204907Salcextern	int	workaround_erratum383;
68190620Skibextern	int	_udatasel;
69190620Skibextern	int	_ucodesel;
70190620Skibextern	int	_ucode32sel;
71190620Skibextern	int	_ufssel;
72190620Skibextern	int	_ugssel;
73231979Skibextern	int	use_xsave;
74231979Skibextern	uint64_t xsave_mask;
757090Sbde
7692761Salfredtypedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
77231979Skibstruct	pcb;
78231979Skibstruct	savefpu;
7983366Sjulianstruct	thread;
807090Sbdestruct	reg;
8139197Sjdpstruct	fpreg;
8248691Sjlemonstruct  dbreg;
83157908Speterstruct	dumperinfo;
847090Sbde
85231979Skibvoid	*alloc_fpusave(int flags);
86225576Skibvoid	amd64_syscall(struct thread *td, int traced);
8792761Salfredvoid	busdma_swi(void);
8892761Salfredvoid	cpu_setregs(void);
8992761Salfredvoid	doreti_iret(void) __asm(__STRING(doreti_iret));
9092761Salfredvoid	doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault));
91190620Skibvoid	ld_ds(void) __asm(__STRING(ld_ds));
92190620Skibvoid	ld_es(void) __asm(__STRING(ld_es));
93190620Skibvoid	ld_fs(void) __asm(__STRING(ld_fs));
94190620Skibvoid	ld_gs(void) __asm(__STRING(ld_gs));
95206459Skibvoid	ld_fsbase(void) __asm(__STRING(ld_fsbase));
96206459Skibvoid	ld_gsbase(void) __asm(__STRING(ld_gsbase));
97190620Skibvoid	ds_load_fault(void) __asm(__STRING(ds_load_fault));
98190620Skibvoid	es_load_fault(void) __asm(__STRING(es_load_fault));
99190620Skibvoid	fs_load_fault(void) __asm(__STRING(fs_load_fault));
100190620Skibvoid	gs_load_fault(void) __asm(__STRING(gs_load_fault));
101206459Skibvoid	fsbase_load_fault(void) __asm(__STRING(fsbase_load_fault));
102206459Skibvoid	gsbase_load_fault(void) __asm(__STRING(gsbase_load_fault));
103157908Spetervoid	dump_add_page(vm_paddr_t);
104157908Spetervoid	dump_drop_page(vm_paddr_t);
105130224Spetervoid	initializecpu(void);
106199253Skibvoid	initializecpucache(void);
10792761Salfredvoid	fillw(int /*u_short*/ pat, void *base, size_t cnt);
108127653Salcvoid	fpstate_drop(struct thread *td);
109128100Salcint	is_physical_memory(vm_paddr_t addr);
110122849Speterint	isa_nmi(int cd);
111127653Salcvoid	pagecopy(void *from, void *to);
112127653Salcvoid	pagezero(void *addr);
113114349Spetervoid	setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist);
114125182Speterint	user_dbreg_trap(void);
115157908Spetervoid	minidumpsys(struct dumperinfo *);
116231979Skibstruct savefpu *get_pcb_user_save_td(struct thread *td);
117231979Skibstruct savefpu *get_pcb_user_save_pcb(struct pcb *pcb);
118231979Skibstruct pcb *get_pcb_td(struct thread *td);
119251050Skibvoid	amd64_db_resume_dbreg(void);
1207090Sbde
1217090Sbde#endif /* !_MACHINE_MD_VAR_H_ */
122