xref: /haiku/headers/private/kernel/arch/x86/32/iframe.h (revision ed24eb5ff12640d052171c6a7feba37fab8a75d1)
1 /*
2  * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de.
3  * Distributed under the terms of the MIT License.
4  *
5  * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
6  * Distributed under the terms of the NewOS License.
7  */
8 #ifndef _KERNEL_ARCH_X86_32_IFRAME_H
9 #define _KERNEL_ARCH_X86_32_IFRAME_H
10 
11 
12 struct iframe {
13 	uint32 type;	// iframe type
14 	uint32 gs;
15 	uint32 fs;
16 	uint32 es;
17 	uint32 ds;
18 	uint32 di;
19 	uint32 si;
20 	uint32 bp;
21 	uint32 sp;
22 	uint32 bx;
23 	uint32 dx;
24 	uint32 cx;
25 	uint32 ax;
26 	uint32 orig_eax;
27 	uint32 orig_edx;
28 	uint32 vector;
29 	uint32 error_code;
30 	uint32 ip;
31 	uint32 cs;
32 	uint32 flags;
33 
34 	// user_sp and user_ss are only present when the iframe is a userland
35 	// iframe (IFRAME_IS_USER()). A kernel iframe is shorter.
36 	uint32 user_sp;
37 	uint32 user_ss;
38 };
39 
40 #define IFRAME_IS_USER(f)	((f)->cs == USER_CODE_SELECTOR \
41 								|| ((f)->flags & 0x20000) != 0)
42 
43 
44 #endif	/* _KERNEL_ARCH_X86_32_IFRAME_H */
45