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