summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/i386/rtems/score/registers.h
blob: 19f28ca15482e65cc4dba34ddbe7043eeed3b4a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/* registers.h
 *  
 *  This file contains definition and constants related to Intel Cpu
 *
 *  COPYRIGHT (c) 1998 valette@crf.canon.fr
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 */

#ifndef _rtems_score_registers_h
#define _rtems_score_registers_h

/*
 * definition related to EFLAGS
 */
#define EFLAGS_CARRY			0x1
#define EFLAGS_PARITY			0x4

#define EFLAGS_AUX_CARRY		0x10
#define EFLAGS_ZERO			0x40
#define EFLAGS_SIGN			0x80

#define EFLAGS_TRAP			0x100
#define EFLAGS_INTR_ENABLE		0x200
#define EFLAGS_DIRECTION		0x400
#define EFLAGS_OVERFLOW			0x800

#define	EFLAGS_IOPL_MASK		0x3000
#define EFLAGS_NESTED_TASK		0x8000

#define EFLAGS_RESUME			0x10000
#define EFLAGS_VIRTUAL_MODE		0x20000
#define EFLAGS_ALIGN_CHECK		0x40000
#define EFLAGS_VIRTUAL_INTR		0x80000

#define EFLAGS_VIRTUAL_INTR_PEND	0x100000
#define EFLAGS_ID			0x200000

/*
 * definitions related to CR0
 */
#define CR0_PROTECTION_ENABLE		0x1
#define CR0_MONITOR_COPROC		0x2
#define CR0_COPROC_SOFT_EMUL		0x4
#define CR0_FLOATING_INSTR_EXCEPTION	0x8

#define CR0_EXTENSION_TYPE		0x10
#define CR0_NUMERIC_ERROR		0x20

#define CR0_WRITE_PROTECT		0x10000
#define CR0_ALIGMENT_MASK		0x40000

#define CR0_NO_WRITE_THROUGH		0x20000000
#define CR0_PAGE_LEVEL_CACHE_DISABLE	0x40000000
#define CR0_PAGING			0x80000000

/*
 * definitions related to CR3
 */

#define CR3_PAGE_CACHE_DISABLE		0x10
#define CR3_PAGE_WRITE_THROUGH		0x8


#ifndef ASM

/*
 * definition of eflags registers has a bit field structure
 */
typedef struct {
  /*
   * fist byte : bits 0->7
   */
  unsigned int carry			: 1;
  unsigned int 				: 1;
  unsigned int parity			: 1;
  unsigned int 				: 1;

  unsigned int auxiliary_carry		: 1;
  unsigned int 				: 1;
  unsigned int zero			: 1;	/* result is zero */
  unsigned int sign			: 1;	/* result is less than zero */
  /*
   * Second byte : bits 7->15
   */
  unsigned int trap			: 1;
  unsigned int intr_enable		: 1;	/* set => intr on */
  unsigned int direction		: 1;	/* set => autodecrement */
  unsigned int overflow			: 1;

  unsigned int IO_privilege		: 2;
  unsigned int nested_task		: 1;
  unsigned int 				: 1;
  /*
   * Third byte : bits 15->23
   */
  unsigned int resume			: 1;
  unsigned int virtual_mode		: 1;
  unsigned int aligment_check		: 1;
  unsigned int virtual_intr		: 1;

  unsigned int virtual_intr_pending	: 1;
  unsigned int id 			: 1;
  unsigned int				: 2;
  
  /*
   * fourth byte : bits 24->31 : UNUSED
   */
  unsigned int 				: 8;
}eflags_bits;

typedef union {
  eflags_bits	eflags;
  unsigned int	i;
}eflags;
/*
 * definition of eflags registers has a bit field structure
 */
typedef struct {
  /*
   * fist byte : bits 0->7
   */
  unsigned int protection_enable	: 1;
  unsigned int monitor_coproc		: 1;
  unsigned int coproc_soft_emul		: 1;
  unsigned int floating_instr_except	: 1;
  
  unsigned int extension_type		: 1;
  unsigned int numeric_error		: 1;
  unsigned int 				: 2;
  /*
   * second byte 8->15 : UNUSED
   */
  unsigned int 				: 8;
  /*
   * third byte 16->23
   */
  unsigned int write_protect		: 1;
  unsigned int 				: 1;
  unsigned int aligment_mask		: 1;
  unsigned int 				: 1;

  unsigned int 				: 4;
  /*
   * fourth byte 24->31
   */
  unsigned int 				: 4;
  
  unsigned int 				: 1;
  unsigned int no_write_through		: 1;
  unsigned int page_level_cache_disable	: 1;
  unsigned int paging	: 1;
}cr0_bits;

typedef union {
  cr0_bits	cr0;
  unsigned int	i;
}cr0;

/*
 * definition of cr3 registers has a bit field structure
 */
typedef struct {

  unsigned int 		        	: 3;
  unsigned int page_write_transparent	: 1;
  unsigned int page_cache_disable	: 1;
  unsigned int 				: 7;
  unsigned int page_directory_base	:20;
}cr3_bits;

typedef union {
  cr3_bits	cr3;
  unsigned int	i;
}cr3;

#endif

#endif