This source file includes following definitions.
- fpu_idle_frame_size
- change_stack
- disable_interrupts
- disable_cache
- disable_mmu
- jump_to_mover
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef BOOTSTRAP_H
16 #define BOOTSTRAP_H
17
18
19 #define MACH_ST 0
20 #define MACH_STE 1
21 #define MACH_TT 2
22 #define MACH_FALCON 3
23
24
25 #define ST_RAM 0
26 #define TT_RAM 1
27 #define TT_RAM_BASE (u_long)(0x01000000)
28 #define MB (1024 * 1024)
29 #define START_MEM (bi.memory[0].addr)
30 #define MEM_SIZE (bi.memory[0].size)
31
32
33 #define AFF_68000 (1)
34 #define AFF_68020 (2)
35 #define AFF_68030 (4)
36 #define AFF_68040 (8)
37 #define AFF_68881 (16)
38 #define AFF_68882 (32)
39
40
41 #define USA 0
42 #define FRG 1
43 #define FRA 2
44 #define UK 3
45 #define SPA 4
46 #define ITA 5
47 #define SWE 6
48 #define SWF 7
49 #define SWG 8
50 #define TUR 9
51 #define FIN 10
52 #define NOR 11
53 #define DEN 12
54 #define SAU 13
55 #define HOL 14
56
57
58
59 static __inline int fpu_idle_frame_size (void)
60 {
61 char fpu_frame[216];
62 __asm__ __volatile__ ("fnop"::);
63 __asm__ __volatile__ ("fsave %0@" : : "a" (fpu_frame));
64 return fpu_frame[1];
65 }
66
67 static __inline void change_stack (u_long *stackp)
68 {
69 __asm__ volatile ("movel %0,sp\n\t" :: "g" (stackp) : "sp");
70 }
71
72 static __inline void disable_interrupts (void)
73 {
74 __asm__ volatile ("orw #0x700,sr":);
75 }
76
77 extern struct bootinfo bi;
78 static __inline void disable_cache (void)
79 {
80 __asm__ volatile ("movec %0,cacr" :: "d" (0));
81 if (bi.cputype & CPU_68060) {
82
83
84 __asm__ volatile ("movec %0,cacr" :: "d" (0x00400000));
85 __asm__ volatile ("moveq #0,d0;"
86 ".long 0x4e7b0808"
87 :
88 :
89 : "d0");
90 }
91 }
92
93 static __inline void disable_mmu (void)
94 {
95 if (bi.cputype & (CPU_68040|CPU_68060)) {
96 __asm__ volatile ("moveq #0,d0;"
97 ".long 0x4e7b0003;"
98 ".long 0x4e7b0004;"
99 ".long 0x4e7b0005;"
100 ".long 0x4e7b0006;"
101 ".long 0x4e7b0007"
102 :
103 :
104 : "d0");
105 }
106 else {
107 __asm__ volatile ("subl #4,sp\n\t"
108 "pmove tc,sp@\n\t"
109 "bclr #7,sp@\n\t"
110 "pmove sp@,tc\n\t"
111 "addl #4,sp");
112 if (bi.cputype & CPU_68030) {
113 __asm__ volatile ("clrl sp@-\n\t"
114 ".long 0xf0170800\n\t"
115 ".long 0xf0170c00\n\t"
116 "addl #4,sp\n");
117 }
118 }
119 }
120
121 static __inline void jump_to_mover (void *, void *, void *, void *, int, int,
122 void *) __attribute__ ((noreturn));
123 static __inline void jump_to_mover (void *kernel_start, void *mem_start,
124 void *ramdisk_end, void *mem_end,
125 int kernel_size, int ramdisk_size,
126 void *mover_addr)
127 {
128 asm volatile ("movel %0,a0\n\t"
129 "movel %1,a1\n\t"
130 "movel %2,a2\n\t"
131 "movel %3,a3\n\t"
132 "movel %4,d0\n\t"
133 "movel %5,d1\n\t"
134 "jmp %6@\n"
135 :
136 : "g" (kernel_start), "g" (mem_start),
137 "g" (ramdisk_end), "g" (mem_end),
138 "g" (kernel_size), "g" (ramdisk_size),
139 "a" (mover_addr)
140 : "a0", "a1", "a2", "a3", "d0", "d1");
141
142
143 for (;;) ;
144 }
145
146 #endif
147