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