]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/fbsd/lib/include/bsd/contrib/i386/include/frame.h
Inital import
[l4.git] / l4 / pkg / dde / fbsd / lib / include / bsd / contrib / i386 / include / frame.h
1 /*-
2  * Copyright (c) 1990 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * William Jolitz.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 4. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  *      from: @(#)frame.h       5.2 (Berkeley) 1/18/91
33  * $FreeBSD: src/sys/i386/include/frame.h,v 1.25 2004/07/10 22:11:14 marcel Exp $
34  */
35
36 #ifndef _MACHINE_FRAME_H_
37 #define _MACHINE_FRAME_H_ 1
38
39 /*
40  * System stack frames.
41  */
42
43 /*
44  * Exception/Trap Stack Frame
45  */
46
47 struct trapframe {
48         int     tf_fs;
49         int     tf_es;
50         int     tf_ds;
51         int     tf_edi;
52         int     tf_esi;
53         int     tf_ebp;
54         int     tf_isp;
55         int     tf_ebx;
56         int     tf_edx;
57         int     tf_ecx;
58         int     tf_eax;
59         int     tf_trapno;
60         /* below portion defined in 386 hardware */
61         int     tf_err;
62         int     tf_eip;
63         int     tf_cs;
64         int     tf_eflags;
65         /* below only when crossing rings (e.g. user to kernel) */
66         int     tf_esp;
67         int     tf_ss;
68 };
69
70 /* Superset of trap frame, for traps from virtual-8086 mode */
71
72 struct trapframe_vm86 {
73         int     tf_fs;
74         int     tf_es;
75         int     tf_ds;
76         int     tf_edi;
77         int     tf_esi;
78         int     tf_ebp;
79         int     tf_isp;
80         int     tf_ebx;
81         int     tf_edx;
82         int     tf_ecx;
83         int     tf_eax;
84         int     tf_trapno;
85         /* below portion defined in 386 hardware */
86         int     tf_err;
87         int     tf_eip;
88         int     tf_cs;
89         int     tf_eflags;
90         /* below only when crossing rings (e.g. user to kernel) */
91         int     tf_esp;
92         int     tf_ss;
93         /* below only when switching out of VM86 mode */
94         int     tf_vm86_es;
95         int     tf_vm86_ds;
96         int     tf_vm86_fs;
97         int     tf_vm86_gs;
98 };
99
100 /* Interrupt stack frame */
101
102 struct intrframe {
103         int     if_vec;
104         int     if_fs;
105         int     if_es;
106         int     if_ds;
107         int     if_edi;
108         int     if_esi;
109         int     if_ebp;
110         int     :32;
111         int     if_ebx;
112         int     if_edx;
113         int     if_ecx;
114         int     if_eax;
115         int     :32;            /* for compat with trap frame - trapno */
116         int     :32;            /* for compat with trap frame - err */
117         /* below portion defined in 386 hardware */
118         int     if_eip;
119         int     if_cs;
120         int     if_eflags;
121         /* below only when crossing rings (e.g. user to kernel) */
122         int     if_esp;
123         int     if_ss;
124 };
125
126 /* frame of clock (same as interrupt frame) */
127
128 struct clockframe {
129         int     cf_vec;
130         int     cf_fs;
131         int     cf_es;
132         int     cf_ds;
133         int     cf_edi;
134         int     cf_esi;
135         int     cf_ebp;
136         int     :32;
137         int     cf_ebx;
138         int     cf_edx;
139         int     cf_ecx;
140         int     cf_eax;
141         int     :32;            /* for compat with trap frame - trapno */
142         int     :32;            /* for compat with trap frame - err */
143         /* below portion defined in 386 hardware */
144         int     cf_eip;
145         int     cf_cs;
146         int     cf_eflags;
147         /* below only when crossing rings (e.g. user to kernel) */
148         int     cf_esp;
149         int     cf_ss;
150 };
151
152 #define CLOCK_TO_TRAPFRAME(frame) ((struct trapframe *)&(frame)->cf_fs)
153 #define INTR_TO_TRAPFRAME(frame) ((struct trapframe *)&(frame)->if_fs)
154
155 #endif /* _MACHINE_FRAME_H_ */