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