xref: /openbmc/u-boot/arch/riscv/include/asm/setjmp.h (revision 3eceff64)
1*7215787cSRick Chen /* SPDX-License-Identifier: GPL-2.0+ */
2a7f99e5dSAlexander Graf /*
3a7f99e5dSAlexander Graf  * (C) Copyright 2018 Alexander Graf <agraf@suse.de>
4a7f99e5dSAlexander Graf  */
5a7f99e5dSAlexander Graf 
6a7f99e5dSAlexander Graf #ifndef _SETJMP_H_
7a7f99e5dSAlexander Graf #define _SETJMP_H_	1
8a7f99e5dSAlexander Graf 
9a7f99e5dSAlexander Graf /*
10a7f99e5dSAlexander Graf  * This really should be opaque, but the EFI implementation wrongly
11a7f99e5dSAlexander Graf  * assumes that a 'struct jmp_buf_data' is defined.
12a7f99e5dSAlexander Graf  */
13a7f99e5dSAlexander Graf struct jmp_buf_data {
14a7f99e5dSAlexander Graf 	/* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */
15a7f99e5dSAlexander Graf 	unsigned long s_regs[12];	/* s0 - s11 */
16a7f99e5dSAlexander Graf 	unsigned long ra;
17a7f99e5dSAlexander Graf 	unsigned long sp;
18a7f99e5dSAlexander Graf };
19a7f99e5dSAlexander Graf 
20a7f99e5dSAlexander Graf typedef struct jmp_buf_data jmp_buf[1];
21a7f99e5dSAlexander Graf 
22a7f99e5dSAlexander Graf int setjmp(jmp_buf jmp);
23a7f99e5dSAlexander Graf void longjmp(jmp_buf jmp, int ret);
24a7f99e5dSAlexander Graf 
25a7f99e5dSAlexander Graf #endif /* _SETJMP_H_ */
26