diff options
Diffstat (limited to 'sys/arm64/include')
| -rw-r--r-- | sys/arm64/include/_armreg.h | 57 | ||||
| -rw-r--r-- | sys/arm64/include/armreg.h | 20 | ||||
| -rw-r--r-- | sys/arm64/include/cpu.h | 2 | ||||
| -rw-r--r-- | sys/arm64/include/cpufunc.h | 7 | ||||
| -rw-r--r-- | sys/arm64/include/db_machdep.h | 1 | ||||
| -rw-r--r-- | sys/arm64/include/hypervisor.h | 2 | ||||
| -rw-r--r-- | sys/arm64/include/kexec.h | 33 | ||||
| -rw-r--r-- | sys/arm64/include/pcpu.h | 3 | ||||
| -rw-r--r-- | sys/arm64/include/smp.h | 1 | 
9 files changed, 105 insertions, 21 deletions
| diff --git a/sys/arm64/include/_armreg.h b/sys/arm64/include/_armreg.h new file mode 100644 index 000000000000..0f5134e5a978 --- /dev/null +++ b/sys/arm64/include/_armreg.h @@ -0,0 +1,57 @@ +/*- + * Copyright (c) 2013, 2014 Andrew Turner + * Copyright (c) 2015,2021 The FreeBSD Foundation + * + * Portions of this software were developed by Andrew Turner + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if !defined(_MACHINE_ARMREG_H_) && \ +    !defined(_MACHINE_CPU_H_) && \ +    !defined(_MACHINE_HYPERVISOR_H_) +#error Do not include this file directly +#endif + +#ifndef _MACHINE__ARMREG_H_ +#define	_MACHINE__ARMREG_H_ + +#define	__MRS_REG_ALT_NAME(op0, op1, crn, crm, op2)			\ +    S##op0##_##op1##_C##crn##_C##crm##_##op2 +#define	_MRS_REG_ALT_NAME(op0, op1, crn, crm, op2)			\ +    __MRS_REG_ALT_NAME(op0, op1, crn, crm, op2) +#define	MRS_REG_ALT_NAME(reg)						\ +    _MRS_REG_ALT_NAME(reg##_op0, reg##_op1, reg##_CRn, reg##_CRm, reg##_op2) + + +#define	READ_SPECIALREG(reg)						\ +({	uint64_t _val;							\ +	__asm __volatile("mrs	%0, " __STRING(reg) : "=&r" (_val));	\ +	_val;								\ +}) +#define	WRITE_SPECIALREG(reg, _val)					\ +	__asm __volatile("msr	" __STRING(reg) ", %0" : : "r"((uint64_t)_val)) + +#define	UL(x)	UINT64_C(x) + +#endif /* !_MACHINE__ARMREG_H_ */ diff --git a/sys/arm64/include/armreg.h b/sys/arm64/include/armreg.h index aca3d4c07450..aa9b672ad85a 100644 --- a/sys/arm64/include/armreg.h +++ b/sys/arm64/include/armreg.h @@ -34,25 +34,9 @@  #ifndef _MACHINE_ARMREG_H_  #define	_MACHINE_ARMREG_H_ -#define	INSN_SIZE		4 - -#define	__MRS_REG_ALT_NAME(op0, op1, crn, crm, op2)			\ -    S##op0##_##op1##_C##crn##_C##crm##_##op2 -#define	_MRS_REG_ALT_NAME(op0, op1, crn, crm, op2)			\ -    __MRS_REG_ALT_NAME(op0, op1, crn, crm, op2) -#define	MRS_REG_ALT_NAME(reg)						\ -    _MRS_REG_ALT_NAME(reg##_op0, reg##_op1, reg##_CRn, reg##_CRm, reg##_op2) - +#include <machine/_armreg.h> -#define	READ_SPECIALREG(reg)						\ -({	uint64_t _val;							\ -	__asm __volatile("mrs	%0, " __STRING(reg) : "=&r" (_val));	\ -	_val;								\ -}) -#define	WRITE_SPECIALREG(reg, _val)					\ -	__asm __volatile("msr	" __STRING(reg) ", %0" : : "r"((uint64_t)_val)) - -#define	UL(x)	UINT64_C(x) +#define	INSN_SIZE		4  /* AFSR0_EL1 - Auxiliary Fault Status Register 0 */  #define	AFSR0_EL1_REG			MRS_REG_ALT_NAME(AFSR0_EL1) diff --git a/sys/arm64/include/cpu.h b/sys/arm64/include/cpu.h index 124da8c215ed..b15210633d37 100644 --- a/sys/arm64/include/cpu.h +++ b/sys/arm64/include/cpu.h @@ -43,10 +43,10 @@  #define	_MACHINE_CPU_H_  #if !defined(__ASSEMBLER__) +#include <machine/_armreg.h>  #include <machine/atomic.h>  #include <machine/frame.h>  #endif -#include <machine/armreg.h>  #define	TRAPF_PC(tfp)		((tfp)->tf_elr)  #define	TRAPF_USERMODE(tfp)	(((tfp)->tf_spsr & PSR_M_MASK) == PSR_M_EL0t) diff --git a/sys/arm64/include/cpufunc.h b/sys/arm64/include/cpufunc.h index e6e1f682794e..e9eee643216b 100644 --- a/sys/arm64/include/cpufunc.h +++ b/sys/arm64/include/cpufunc.h @@ -96,6 +96,13 @@ serror_enable(void)  	__asm __volatile("msr daifclr, #(" __XSTRING(DAIF_A) ")");  } +static __inline void +serror_disable(void) +{ + +	__asm __volatile("msr daifset, #(" __XSTRING(DAIF_A) ")"); +} +  static __inline register_t  get_midr(void)  { diff --git a/sys/arm64/include/db_machdep.h b/sys/arm64/include/db_machdep.h index 5dc496ca851d..3ef95f7802ea 100644 --- a/sys/arm64/include/db_machdep.h +++ b/sys/arm64/include/db_machdep.h @@ -31,7 +31,6 @@  #ifndef	_MACHINE_DB_MACHDEP_H_  #define	_MACHINE_DB_MACHDEP_H_ -#include <machine/armreg.h>  #include <machine/frame.h>  #include <machine/trap.h> diff --git a/sys/arm64/include/hypervisor.h b/sys/arm64/include/hypervisor.h index 8feabd2b981b..7d405e63cd8d 100644 --- a/sys/arm64/include/hypervisor.h +++ b/sys/arm64/include/hypervisor.h @@ -30,6 +30,8 @@  #ifndef _MACHINE_HYPERVISOR_H_  #define	_MACHINE_HYPERVISOR_H_ +#include <machine/_armreg.h> +  /*   * These registers are only useful when in hypervisor context,   * e.g. specific to EL2, or controlling the hypervisor. diff --git a/sys/arm64/include/kexec.h b/sys/arm64/include/kexec.h new file mode 100644 index 000000000000..0a8c7a053331 --- /dev/null +++ b/sys/arm64/include/kexec.h @@ -0,0 +1,33 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2025 Juniper Networks, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef	_ARM64_KEXEC_H_ +#define	_ARM64_KEXEC_H_ + +#define KEXEC_MD_PAGES(x) 0 + +#endif	/* _ARM64_KEXEC_H_ */ diff --git a/sys/arm64/include/pcpu.h b/sys/arm64/include/pcpu.h index 09bd8fa8a966..73399d2c3f8c 100644 --- a/sys/arm64/include/pcpu.h +++ b/sys/arm64/include/pcpu.h @@ -50,7 +50,8 @@ struct debug_monitor_state;  	struct pmap *pc_curvmpmap;					\  	uint64_t pc_mpidr;						\  	u_int	pc_bcast_tlbi_workaround;				\ -	char __pad[197] +	uint64_t pc_release_addr;					\ +	char __pad[189]  #ifdef _KERNEL diff --git a/sys/arm64/include/smp.h b/sys/arm64/include/smp.h index 500cd1ef4f02..4a5bfda3ac1c 100644 --- a/sys/arm64/include/smp.h +++ b/sys/arm64/include/smp.h @@ -40,6 +40,7 @@ enum {  	IPI_STOP,  	IPI_STOP_HARD,  	IPI_HARDCLOCK, +	IPI_OFF,  	INTR_IPI_COUNT,  }; | 
