Rev 2692 | Rev 2723 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2692 | Rev 2697 | ||
|---|---|---|---|
| Line 69... | Line 69... | ||
| 69 | * |
69 | * |
| 70 | * Clean IOPL(12,13) and NT(14) flags in EFLAGS register |
70 | * Clean IOPL(12,13) and NT(14) flags in EFLAGS register |
| 71 | */ |
71 | */ |
| 72 | static void clean_IOPL_NT_flags(void) |
72 | static void clean_IOPL_NT_flags(void) |
| 73 | { |
73 | { |
| 74 | asm |
74 | asm ( |
| 75 | ( |
- | |
| 76 | "pushfq;" |
75 | "pushfq\n" |
| 77 | "pop %%rax;" |
76 | "pop %%rax\n" |
| 78 | "and $~(0x7000),%%rax;" |
77 | "and $~(0x7000), %%rax\n" |
| 79 | "pushq %%rax;" |
78 | "pushq %%rax\n" |
| 80 | "popfq;" |
79 | "popfq\n" |
| 81 | : |
80 | : |
| 82 | : |
81 | : |
| 83 | :"%rax" |
82 | : "%rax" |
| 84 | ); |
83 | ); |
| 85 | } |
84 | } |
| 86 | 85 | ||
| 87 | /** Disable alignment check |
86 | /** Disable alignment check |
| 88 | * |
87 | * |
| 89 | * Clean AM(18) flag in CR0 register |
88 | * Clean AM(18) flag in CR0 register |
| 90 | */ |
89 | */ |
| 91 | static void clean_AM_flag(void) |
90 | static void clean_AM_flag(void) |
| 92 | { |
91 | { |
| 93 | asm |
92 | asm ( |
| 94 | ( |
- | |
| 95 | "mov %%cr0,%%rax;" |
93 | "mov %%cr0, %%rax\n" |
| 96 | "and $~(0x40000),%%rax;" |
94 | "and $~(0x40000), %%rax\n" |
| 97 | "mov %%rax,%%cr0;" |
95 | "mov %%rax, %%cr0\n" |
| 98 | : |
96 | : |
| 99 | : |
97 | : |
| 100 | :"%rax" |
98 | : "%rax" |
| 101 | ); |
99 | ); |
| 102 | } |
100 | } |
| 103 | 101 | ||
| 104 | void arch_pre_mm_init(void) |
102 | void arch_pre_mm_init(void) |
| 105 | { |
103 | { |
| Line 125... | Line 123... | ||
| 125 | /* PIC */ |
123 | /* PIC */ |
| 126 | i8259_init(); |
124 | i8259_init(); |
| 127 | } |
125 | } |
| 128 | } |
126 | } |
| 129 | 127 | ||
| - | 128 | ||
| 130 | void arch_post_mm_init(void) |
129 | void arch_post_mm_init(void) |
| 131 | { |
130 | { |
| 132 | if (config.cpu_active == 1) { |
131 | if (config.cpu_active == 1) { |
| 133 | /* Initialize IRQ routing */ |
132 | /* Initialize IRQ routing */ |
| 134 | irq_init(IRQ_COUNT, IRQ_COUNT); |
133 | irq_init(IRQ_COUNT, IRQ_COUNT); |
| 135 | 134 | ||
| 136 | /* hard clock */ |
135 | /* hard clock */ |
| 137 | i8254_init(); |
136 | i8254_init(); |
| 138 | 137 | ||
| 139 | #ifdef CONFIG_FB |
138 | #ifdef CONFIG_FB |
| 140 | if (vesa_present()) |
139 | if (vesa_present()) |
| 141 | vesa_init(); |
140 | vesa_init(); |
| 142 | else |
141 | else |
| 143 | #endif |
142 | #endif |
| Line 146... | Line 145... | ||
| 146 | /* Enable debugger */ |
145 | /* Enable debugger */ |
| 147 | debugger_init(); |
146 | debugger_init(); |
| 148 | /* Merge all memory zones to 1 big zone */ |
147 | /* Merge all memory zones to 1 big zone */ |
| 149 | zone_merge_all(); |
148 | zone_merge_all(); |
| 150 | } |
149 | } |
| - | 150 | ||
| 151 | /* Setup fast SYSCALL/SYSRET */ |
151 | /* Setup fast SYSCALL/SYSRET */ |
| 152 | syscall_setup_cpu(); |
152 | syscall_setup_cpu(); |
| 153 | - | ||
| 154 | } |
153 | } |
| 155 | 154 | ||
| 156 | void arch_post_cpu_init() |
155 | void arch_post_cpu_init() |
| 157 | { |
156 | { |
| 158 | #ifdef CONFIG_SMP |
157 | #ifdef CONFIG_SMP |