19 #ifndef _RTEMS_SCORE_I386_H 20 #define _RTEMS_SCORE_I386_H 50 #define I386_HAS_FPU 1 52 #if defined(__pentiumpro__) 54 #define CPU_MODEL_NAME "Pentium Pro" 56 #elif defined(__i586__) 58 #if defined(__pentium__) 59 #define CPU_MODEL_NAME "Pentium" 61 #define CPU_MODEL_NAME "K6" 63 #define CPU_MODEL_NAME "i586" 66 #elif defined(__i486__) 68 #define CPU_MODEL_NAME "i486dx" 70 #elif defined(__i386__) 72 #define I386_HAS_BSWAP 0 73 #define CPU_MODEL_NAME "i386 with i387" 76 #error "Unknown CPU Model" 84 #ifndef I386_HAS_BSWAP 85 #define I386_HAS_BSWAP 1 91 #define CPU_NAME "Intel i386" 100 static inline uint32_t i386_swap_u32(
106 #if (I386_HAS_BSWAP == 0) 107 __asm__ volatile(
"rorw $8,%%ax;" 109 "rorw $8,%%ax" :
"=a" (lout) :
"0" (value) );
111 __asm__ volatile(
"bswap %0" :
"=r" (lout) :
"0" (value));
116 static inline uint16_t i386_swap_u16(
122 __asm__ volatile(
"rorw $8,%0" :
"=r" (sout) :
"0" (value));
129 static inline unsigned int i386_get_cr0(
void)
131 register unsigned int segment = 0;
133 __asm__ volatile (
"movl %%cr0,%0" :
"=r" (segment) :
"0" (segment) );
138 static inline void i386_set_cr0(
unsigned int segment)
140 __asm__ volatile (
"movl %0,%%cr0" :
"=r" (segment) :
"0" (segment) );
143 static inline unsigned int i386_get_cr2(
void)
145 register unsigned int segment = 0;
147 __asm__ volatile (
"movl %%cr2,%0" :
"=r" (segment) :
"0" (segment) );
152 static inline unsigned int i386_get_cr3(
void)
154 register unsigned int segment = 0;
156 __asm__ volatile (
"movl %%cr3,%0" :
"=r" (segment) :
"0" (segment) );
161 static inline void i386_set_cr3(
unsigned int segment)
163 __asm__ volatile (
"movl %0,%%cr3" :
"=r" (segment) :
"0" (segment) );
173 void *i386_Logical_to_physical(
174 unsigned short segment,
183 void *i386_Physical_to_logical(
184 unsigned short segment,
201 return (
void *)(((uint32_t)segment<<4)+offset);
235 #define get_cs() i386_get_cs() 236 #define get_ds() i386_get_ds() 237 #define get_es() i386_get_es() 238 #define get_ss() i386_get_ss() 239 #define get_fs() i386_get_fs() 240 #define get_gs() i386_get_gs() 242 #define CPU_swap_u32( _value ) i386_swap_u32( _value ) 243 #define CPU_swap_u16( _value ) i386_swap_u16( _value ) 247 #define outport_byte( _port, _value ) i386_outport_byte( _port, _value ) 248 #define outport_word( _port, _value ) i386_outport_word( _port, _value ) 249 #define outport_long( _port, _value ) i386_outport_long( _port, _value ) 250 #define inport_byte( _port, _value ) i386_inport_byte( _port, _value ) 251 #define inport_word( _port, _value ) i386_inport_word( _port, _value ) 252 #define inport_long( _port, _value ) i386_inport_long( _port, _value ) #define RTEMS_INLINE_ROUTINE
The following (in conjunction with compiler arguments) are used to choose between the use of static i...
Definition: basedefs.h:135
register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__("g6")
The pointer to the current per-CPU control is available via register g6.
int i386_Physical_to_real(void *address, uint16_t *segment, uint16_t *offset)
Retreives real mode pointer elements {segmnet, offset} from physical address.
RTEMS_INLINE_ROUTINE void * i386_Real_to_physical(uint16_t segment, uint16_t offset)
Converts real mode pointer {segment, offset} to physical address.
Definition: i386.h:197