1*ee417a84SHeiko Carstens /* SPDX-License-Identifier: GPL-2.0 */ 2*ee417a84SHeiko Carstens #ifndef __ASM_SKEY_H 3*ee417a84SHeiko Carstens #define __ASM_SKEY_H 4*ee417a84SHeiko Carstens 5*ee417a84SHeiko Carstens #include <asm/rwonce.h> 6*ee417a84SHeiko Carstens 7*ee417a84SHeiko Carstens struct skey_region { 8*ee417a84SHeiko Carstens unsigned long start; 9*ee417a84SHeiko Carstens unsigned long end; 10*ee417a84SHeiko Carstens }; 11*ee417a84SHeiko Carstens 12*ee417a84SHeiko Carstens #define SKEY_REGION(_start, _end) \ 13*ee417a84SHeiko Carstens stringify_in_c(.section .skey_region,"a";) \ 14*ee417a84SHeiko Carstens stringify_in_c(.balign 8;) \ 15*ee417a84SHeiko Carstens stringify_in_c(.quad (_start);) \ 16*ee417a84SHeiko Carstens stringify_in_c(.quad (_end);) \ 17*ee417a84SHeiko Carstens stringify_in_c(.previous) 18*ee417a84SHeiko Carstens 19*ee417a84SHeiko Carstens extern int skey_regions_initialized; 20*ee417a84SHeiko Carstens extern struct skey_region __skey_region_start[]; 21*ee417a84SHeiko Carstens extern struct skey_region __skey_region_end[]; 22*ee417a84SHeiko Carstens 23*ee417a84SHeiko Carstens void __skey_regions_initialize(void); 24*ee417a84SHeiko Carstens skey_regions_initialize(void)25*ee417a84SHeiko Carstensstatic inline void skey_regions_initialize(void) 26*ee417a84SHeiko Carstens { 27*ee417a84SHeiko Carstens if (READ_ONCE(skey_regions_initialized)) 28*ee417a84SHeiko Carstens return; 29*ee417a84SHeiko Carstens __skey_regions_initialize(); 30*ee417a84SHeiko Carstens } 31*ee417a84SHeiko Carstens 32*ee417a84SHeiko Carstens #endif /* __ASM_SKEY_H */ 33