19 #ifndef _RTEMS_SCORE_M68K_H 20 #define _RTEMS_SCORE_M68K_H 89 #if defined(__mcoldfire__) 91 # define CPU_NAME "Motorola ColdFire" 93 # if defined(__mcfisaa__) 95 # define CPU_MODEL_NAME "mcfisaa" 96 # define M68K_HAS_VBR 1 97 # define M68K_HAS_BFFFO 0 98 # define M68K_HAS_SEPARATE_STACKS 0 99 # define M68K_HAS_PREINDEXING 0 100 # define M68K_HAS_EXTB_L 1 101 # define M68K_HAS_MISALIGNED 1 103 # elif defined(__mcfisaaplus__) 105 # define CPU_MODEL_NAME "mcfisaaplus" 106 # define M68K_HAS_VBR 1 107 # define M68K_HAS_BFFFO 0 108 # define M68K_HAS_SEPARATE_STACKS 0 109 # define M68K_HAS_PREINDEXING 0 110 # define M68K_HAS_EXTB_L 1 111 # define M68K_HAS_MISALIGNED 1 113 # elif defined(__mcfisab__) 115 # define CPU_MODEL_NAME "mcfisab" 116 # define M68K_HAS_VBR 1 117 # define M68K_HAS_BFFFO 0 118 # define M68K_HAS_SEPARATE_STACKS 0 119 # define M68K_HAS_PREINDEXING 0 120 # define M68K_HAS_EXTB_L 1 121 # define M68K_HAS_MISALIGNED 1 124 # error "Unsupported Coldfire ISA -- Please notify RTEMS" 131 # if defined (__mcffpu__) 132 # define M68K_HAS_FPU 1 136 # define M68K_HAS_EMAC 1 137 # define M68K_HAS_FPSP_PACKAGE 0 139 # define M68K_HAS_FPU 0 140 # define M68K_HAS_FPSP_PACKAGE 0 150 # if (defined(__mcf_cpu_52221) || \ 151 defined(__mcf_cpu_52223) || \ 152 defined(__mcf_cpu_52230) || \ 153 defined(__mcf_cpu_52231) || \ 154 defined(__mcf_cpu_52232) || \ 155 defined(__mcf_cpu_52233) || \ 156 defined(__mcf_cpu_52234) || \ 157 defined(__mcf_cpu_52235) || \ 158 defined(__mcf_cpu_52225) || \ 159 defined(__mcf_cpu_52235)) 160 #define M68K_CPU_STACK_MINIMUM_SIZE 1024 162 #define M68K_CPU_PRIORITY_MAXIMUM 15 164 #define M68K_CPU_STACK_MINIMUM_SIZE 4096 166 #define M68K_CPU_PRIORITY_MAXIMUM 255 180 # define CPU_NAME "Motorola MC68xxx" 185 # define M68K_CPU_STACK_MINIMUM_SIZE 4096 187 # if (defined(__mc68020__) && !defined(__mcpu32__)) 189 # define CPU_MODEL_NAME "m68020" 190 # define M68K_HAS_VBR 1 191 # define M68K_HAS_SEPARATE_STACKS 1 192 # define M68K_HAS_BFFFO 1 193 # define M68K_HAS_PREINDEXING 1 194 # define M68K_HAS_EXTB_L 1 195 # define M68K_HAS_MISALIGNED 1 196 # if defined (__HAVE_68881__) 197 # define M68K_HAS_FPU 1 198 # define M68K_HAS_FPSP_PACKAGE 0 200 # define M68K_HAS_FPU 0 201 # define M68K_HAS_FPSP_PACKAGE 0 204 # elif defined(__mc68030__) 206 # define CPU_MODEL_NAME "m68030" 207 # define M68K_HAS_VBR 1 208 # define M68K_HAS_SEPARATE_STACKS 1 209 # define M68K_HAS_BFFFO 1 210 # define M68K_HAS_PREINDEXING 1 211 # define M68K_HAS_EXTB_L 1 212 # define M68K_HAS_MISALIGNED 1 213 # if defined (__HAVE_68881__) 214 # define M68K_HAS_FPU 1 215 # define M68K_HAS_FPSP_PACKAGE 0 217 # define M68K_HAS_FPU 0 218 # define M68K_HAS_FPSP_PACKAGE 0 221 # elif defined(__mc68040__) 223 # define CPU_MODEL_NAME "m68040" 224 # define M68K_HAS_VBR 1 225 # define M68K_HAS_SEPARATE_STACKS 1 226 # define M68K_HAS_BFFFO 1 227 # define M68K_HAS_PREINDEXING 1 228 # define M68K_HAS_EXTB_L 1 229 # define M68K_HAS_MISALIGNED 1 230 # if defined (__HAVE_68881__) 231 # define M68K_HAS_FPU 1 232 # define M68K_HAS_FPSP_PACKAGE 1 234 # define M68K_HAS_FPU 0 235 # define M68K_HAS_FPSP_PACKAGE 0 238 # elif defined(__mc68060__) 240 # define CPU_MODEL_NAME "m68060" 241 # define M68K_HAS_VBR 1 242 # define M68K_HAS_SEPARATE_STACKS 0 243 # define M68K_HAS_BFFFO 1 244 # define M68K_HAS_PREINDEXING 1 245 # define M68K_HAS_EXTB_L 1 246 # define M68K_HAS_MISALIGNED 1 247 # if defined (__HAVE_68881__) 248 # define M68K_HAS_FPU 1 249 # define M68K_HAS_FPSP_PACKAGE 0 251 # define M68K_HAS_FPU 0 252 # define M68K_HAS_FPSP_PACKAGE 0 255 # elif defined(__mc68302__) 257 # define CPU_MODEL_NAME "m68302" 258 # define M68K_HAS_VBR 0 259 # define M68K_HAS_SEPARATE_STACKS 0 260 # define M68K_HAS_BFFFO 0 261 # define M68K_HAS_PREINDEXING 0 262 # define M68K_HAS_EXTB_L 0 263 # define M68K_HAS_MISALIGNED 0 264 # define M68K_HAS_FPU 0 265 # define M68K_HAS_FPSP_PACKAGE 0 268 # elif defined(RTEMS__mcpu32p__) 270 # define CPU_MODEL_NAME "mcpu32+" 271 # define M68K_HAS_VBR 1 272 # define M68K_HAS_SEPARATE_STACKS 0 273 # define M68K_HAS_BFFFO 0 274 # define M68K_HAS_PREINDEXING 1 275 # define M68K_HAS_EXTB_L 1 276 # define M68K_HAS_MISALIGNED 1 277 # define M68K_HAS_FPU 0 278 # define M68K_HAS_FPSP_PACKAGE 0 280 # elif defined(__mcpu32__) 282 # define CPU_MODEL_NAME "mcpu32" 283 # define M68K_HAS_VBR 1 284 # define M68K_HAS_SEPARATE_STACKS 0 285 # define M68K_HAS_BFFFO 0 286 # define M68K_HAS_PREINDEXING 1 287 # define M68K_HAS_EXTB_L 1 288 # define M68K_HAS_MISALIGNED 0 289 # define M68K_HAS_FPU 0 290 # define M68K_HAS_FPSP_PACKAGE 0 292 # elif defined(__mc68000__) 294 # define CPU_MODEL_NAME "m68000" 295 # define M68K_HAS_VBR 0 296 # define M68K_HAS_SEPARATE_STACKS 0 297 # define M68K_HAS_BFFFO 0 298 # define M68K_HAS_PREINDEXING 0 299 # define M68K_HAS_EXTB_L 0 300 # define M68K_HAS_MISALIGNED 0 301 # if defined (__HAVE_68881__) 302 # define M68K_HAS_FPU 1 303 # define M68K_HAS_FPSP_PACKAGE 0 305 # define M68K_HAS_FPU 0 306 # define M68K_HAS_FPSP_PACKAGE 0 311 # error "Unsupported 68000 CPU model -- are you sure you're running a 68k compiler?" 318 # define M68K_CPU_STACK_MINIMUM_SIZE 4096 319 # define M68K_CPU_PRIORITY_MAXIMUM 255 327 #if defined(__mcoldfire__) 328 #define M68K_COLDFIRE_ARCH 1 330 #define M68K_COLDFIRE_ARCH 0 335 #if ( defined(__mcoldfire__) ) 336 #define m68k_disable_interrupts( _level ) \ 337 do { register uint32_t _tmpsr = 0x0700; \ 338 __asm__ volatile ( "move.w %%sr,%0\n\t" \ 341 : "=d" (_level), "=d"(_tmpsr) : "1"(_tmpsr) \ 345 #define m68k_disable_interrupts( _level ) \ 346 __asm__ volatile ( "move.w %%sr,%0\n\t" \ 347 "or.w #0x0700,%%sr" \ 352 #define m68k_enable_interrupts( _level ) \ 353 __asm__ volatile ( "move.w %0,%%sr " : : "d" (_level) : "cc"); 355 #if ( defined(__mcoldfire__) ) 356 #define m68k_flash_interrupts( _level ) \ 357 do { register uint32_t _tmpsr = 0x0700; \ 358 asm volatile ( "move.w %2,%%sr\n\t" \ 361 : "=d"(_tmpsr) : "0"(_tmpsr), "d"(_level) \ 365 #define m68k_flash_interrupts( _level ) \ 366 __asm__ volatile ( "move.w %0,%%sr\n\t" \ 367 "or.w #0x0700,%%sr" \ 372 #define m68k_get_interrupt_level( _level ) \ 374 register uint32_t _tmpsr; \ 376 __asm__ volatile( "move.w %%sr,%0" : "=d" (_tmpsr)); \ 377 _level = (_tmpsr & 0x0700) >> 8; \ 380 #define m68k_set_interrupt_level( _newlevel ) \ 382 register uint32_t _tmpsr; \ 384 __asm__ volatile( "move.w %%sr,%0" : "=d" (_tmpsr)); \ 385 _tmpsr = (_tmpsr & 0xf8ff) | ((_newlevel) << 8); \ 386 __asm__ volatile( "move.w %0,%%sr" : : "d" (_tmpsr)); \ 389 #if ( M68K_HAS_VBR == 1 && !defined(__mcoldfire__) ) 390 #define m68k_get_vbr( vbr ) \ 391 __asm__ volatile ( "movec %%vbr,%0 " : "=r" (vbr)) 393 #define m68k_set_vbr( vbr ) \ 394 __asm__ volatile ( "movec %0,%%vbr " : : "r" (vbr)) 396 #elif ( defined(__mcoldfire__) ) 398 #define m68k_get_vbr( _vbr ) _vbr = &_VBR 400 #define m68k_set_vbr( _vbr ) \ 402 __asm__ volatile ( "movec %0,%%vbr " : : "r" (_vbr)); \ 403 _VBR = (void *)_vbr; \ 407 #define m68k_get_vbr( _vbr ) _vbr = (void *)_VBR 408 #define m68k_set_vbr( _vbr ) 414 #define m68k_set_cacr(_cacr) __asm__ volatile ("movec %0,%%cacr" : : "d" (_cacr)) 415 #define m68k_set_acr0(_acr0) __asm__ volatile ("movec %0,%%acr0" : : "d" (_acr0)) 416 #define m68k_set_acr1(_acr1) __asm__ volatile ("movec %0,%%acr1" : : "d" (_acr1)) 422 #if ( defined(__mcoldfire__) ) 427 static inline uint32_t m68k_swap_u32(
431 uint32_t byte1, byte2, byte3, byte4, swapped;
433 byte4 = (value >> 24) & 0xff;
434 byte3 = (value >> 16) & 0xff;
435 byte2 = (value >> 8) & 0xff;
436 byte1 = value & 0xff;
438 swapped = (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4;
442 static inline uint16_t m68k_swap_u16(
446 return (((value & 0xff) << 8) | ((value >> 8) & 0xff));
451 static inline uint32_t m68k_swap_u32(
455 uint32_t swapped = value;
457 __asm__ volatile(
"rorw #8,%0" :
"=d" (swapped) :
"0" (swapped) );
458 __asm__ volatile(
"swap %0" :
"=d" (swapped) :
"0" (swapped) );
459 __asm__ volatile(
"rorw #8,%0" :
"=d" (swapped) :
"0" (swapped) );
464 static inline uint16_t m68k_swap_u16(
468 uint16_t swapped = value;
470 __asm__ volatile(
"rorw #8,%0" :
"=d" (swapped) :
"0" (swapped) );
476 #define CPU_swap_u32( value ) m68k_swap_u32( value ) 477 #define CPU_swap_u16( value ) m68k_swap_u16( value ) 489 static inline void * _CPU_virtual_to_physical (
490 const void * d_addr )
492 return (
void *) d_addr;
register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__("g6")
The pointer to the current per-CPU control is available via register g6.