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