URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [arch/] [m68k/] [boot/] [atari/] [bootstrap.h] - Rev 1777
Go to most recent revision | Compare with Previous | Blame | View Log
/* ** bootstrap.h -- This file is a part of the Atari bootloader. ** ** Copyright 1993 by Arjan Knor ** ** Modified by Andreas Schwab ** - clear transparent translation registers ** ** This file is subject to the terms and conditions of the GNU General Public ** License. See the file COPYING in the main directory of this archive ** for more details. ** */ #ifndef BOOTSTRAP_H #define BOOTSTRAP_H /* _MCH cookie values */ #define MACH_ST 0 #define MACH_STE 1 #define MACH_TT 2 #define MACH_FALCON 3 /* some constants for memory handling */ #define ST_RAM 0 #define TT_RAM 1 #define TT_RAM_BASE (u_long)(0x01000000) #define MB (1024 * 1024) #define START_MEM (bi.memory[0].addr) #define MEM_SIZE (bi.memory[0].size) /* the various CPU- and FPU-types */ #define AFF_68000 (1) #define AFF_68020 (2) #define AFF_68030 (4) #define AFF_68040 (8) #define AFF_68881 (16) #define AFF_68882 (32) /* the possible OS-languages */ #define USA 0 #define FRG 1 #define FRA 2 #define UK 3 #define SPA 4 #define ITA 5 #define SWE 6 #define SWF 7 #define SWG 8 #define TUR 9 #define FIN 10 #define NOR 11 #define DEN 12 #define SAU 13 #define HOL 14 /* some inline functions */ static __inline int fpu_idle_frame_size (void) { char fpu_frame[216]; __asm__ __volatile__ ("fnop"::); __asm__ __volatile__ ("fsave %0@" : : "a" (fpu_frame)); return fpu_frame[1]; } static __inline void change_stack (u_long *stackp) { __asm__ volatile ("movel %0,sp\n\t" :: "g" (stackp) : "sp"); } static __inline void disable_interrupts (void) { __asm__ volatile ("orw #0x700,sr":); } extern struct bootinfo bi; static __inline void disable_cache (void) { __asm__ volatile ("movec %0,cacr" :: "d" (0)); if (bi.cputype & CPU_68060) { /* '060: clear branch cache after disabling it; * disable superscalar operation (and enable FPU) */ __asm__ volatile ("movec %0,cacr" :: "d" (0x00400000)); __asm__ volatile ("moveq #0,d0;" ".long 0x4e7b0808" /* movec d0,pcr */ : /* no outputs */ : /* no inputs */ : "d0"); } } static __inline void disable_mmu (void) { if (bi.cputype & (CPU_68040|CPU_68060)) { __asm__ volatile ("moveq #0,d0;" ".long 0x4e7b0003;" /* movec d0,tc */ ".long 0x4e7b0004;" /* movec d0,itt0 */ ".long 0x4e7b0005;" /* movec d0,itt1 */ ".long 0x4e7b0006;" /* movec d0,dtt0 */ ".long 0x4e7b0007" /* movec d0,dtt1 */ : /* no outputs */ : /* no inputs */ : "d0"); } else { __asm__ volatile ("subl #4,sp\n\t" "pmove tc,sp@\n\t" "bclr #7,sp@\n\t" "pmove sp@,tc\n\t" "addl #4,sp"); if (bi.cputype & CPU_68030) { __asm__ volatile ("clrl sp@-\n\t" ".long 0xf0170800\n\t" /* pmove sp@,tt0 */ ".long 0xf0170c00\n\t" /* pmove sp@,tt1 */ "addl #4,sp\n"); } } } static __inline void jump_to_mover (void *, void *, void *, void *, int, int, void *) __attribute__ ((noreturn)); static __inline void jump_to_mover (void *kernel_start, void *mem_start, void *ramdisk_end, void *mem_end, int kernel_size, int ramdisk_size, void *mover_addr) { asm volatile ("movel %0,a0\n\t" "movel %1,a1\n\t" "movel %2,a2\n\t" "movel %3,a3\n\t" "movel %4,d0\n\t" "movel %5,d1\n\t" "jmp %6@\n" : /* no outputs */ : "g" (kernel_start), "g" (mem_start), "g" (ramdisk_end), "g" (mem_end), "g" (kernel_size), "g" (ramdisk_size), "a" (mover_addr) : "a0", "a1", "a2", "a3", "d0", "d1"); /* Avoid warning that function may return */ for (;;) ; } #endif /* BOOTSTRAP_H */
Go to most recent revision | Compare with Previous | Blame | View Log