1b57a571aSAndrew Turner /*- 2b57a571aSAndrew Turner * Copyright (c) 2013, 2014 Andrew Turner 3b57a571aSAndrew Turner * Copyright (c) 2015,2021 The FreeBSD Foundation 4b57a571aSAndrew Turner * 5b57a571aSAndrew Turner * Portions of this software were developed by Andrew Turner 6b57a571aSAndrew Turner * under sponsorship from the FreeBSD Foundation. 7b57a571aSAndrew Turner * 8b57a571aSAndrew Turner * Redistribution and use in source and binary forms, with or without 9b57a571aSAndrew Turner * modification, are permitted provided that the following conditions 10b57a571aSAndrew Turner * are met: 11b57a571aSAndrew Turner * 1. Redistributions of source code must retain the above copyright 12b57a571aSAndrew Turner * notice, this list of conditions and the following disclaimer. 13b57a571aSAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 14b57a571aSAndrew Turner * notice, this list of conditions and the following disclaimer in the 15b57a571aSAndrew Turner * documentation and/or other materials provided with the distribution. 16b57a571aSAndrew Turner * 17b57a571aSAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18b57a571aSAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19b57a571aSAndrew Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20b57a571aSAndrew Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21b57a571aSAndrew Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22b57a571aSAndrew Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23b57a571aSAndrew Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24b57a571aSAndrew Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25b57a571aSAndrew Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26b57a571aSAndrew Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27b57a571aSAndrew Turner * SUCH DAMAGE. 28b57a571aSAndrew Turner */ 29b57a571aSAndrew Turner 30b57a571aSAndrew Turner #if !defined(_MACHINE_ARMREG_H_) && \ 31*95a5bfceSAndrew Turner !defined(_MACHINE_CPU_H_) && \ 32b57a571aSAndrew Turner !defined(_MACHINE_HYPERVISOR_H_) 33b57a571aSAndrew Turner #error Do not include this file directly 34b57a571aSAndrew Turner #endif 35b57a571aSAndrew Turner 36b57a571aSAndrew Turner #ifndef _MACHINE__ARMREG_H_ 37b57a571aSAndrew Turner #define _MACHINE__ARMREG_H_ 38b57a571aSAndrew Turner 39b57a571aSAndrew Turner #define __MRS_REG_ALT_NAME(op0, op1, crn, crm, op2) \ 40b57a571aSAndrew Turner S##op0##_##op1##_C##crn##_C##crm##_##op2 41b57a571aSAndrew Turner #define _MRS_REG_ALT_NAME(op0, op1, crn, crm, op2) \ 42b57a571aSAndrew Turner __MRS_REG_ALT_NAME(op0, op1, crn, crm, op2) 43b57a571aSAndrew Turner #define MRS_REG_ALT_NAME(reg) \ 44b57a571aSAndrew Turner _MRS_REG_ALT_NAME(reg##_op0, reg##_op1, reg##_CRn, reg##_CRm, reg##_op2) 45b57a571aSAndrew Turner 46b57a571aSAndrew Turner 47b57a571aSAndrew Turner #define READ_SPECIALREG(reg) \ 48b57a571aSAndrew Turner ({ uint64_t _val; \ 49b57a571aSAndrew Turner __asm __volatile("mrs %0, " __STRING(reg) : "=&r" (_val)); \ 50b57a571aSAndrew Turner _val; \ 51b57a571aSAndrew Turner }) 52b57a571aSAndrew Turner #define WRITE_SPECIALREG(reg, _val) \ 53b57a571aSAndrew Turner __asm __volatile("msr " __STRING(reg) ", %0" : : "r"((uint64_t)_val)) 54b57a571aSAndrew Turner 55b57a571aSAndrew Turner #define UL(x) UINT64_C(x) 56b57a571aSAndrew Turner 57b57a571aSAndrew Turner #endif /* !_MACHINE__ARMREG_H_ */ 58