Rev 2227 | Rev 2745 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2227 | Rev 2465 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /* |
1 | /* |
| 2 | * Copyright (c) 2003-2004 Jakub Jermar |
2 | * Copyright (c) 2007 Michal Kebrt |
| 3 | * All rights reserved. |
3 | * All rights reserved. |
| 4 | * |
4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
| 7 | * are met: |
7 | * are met: |
| Line 28... | Line 28... | ||
| 28 | 28 | ||
| 29 | /** @addtogroup arm32 |
29 | /** @addtogroup arm32 |
| 30 | * @{ |
30 | * @{ |
| 31 | */ |
31 | */ |
| 32 | /** @file |
32 | /** @file |
| - | 33 | * @brief ARM32 architecture specific functions. |
|
| 33 | */ |
34 | */ |
| 34 | 35 | ||
| 35 | - | ||
| 36 | #include <arch.h> |
36 | #include <arch.h> |
| - | 37 | #include <arch/boot.h> |
|
| - | 38 | #include <config.h> |
|
| - | 39 | #include <arch/console.h> |
|
| - | 40 | #include <ddi/device.h> |
|
| - | 41 | #include <genarch/fb/fb.h> |
|
| - | 42 | #include <genarch/fb/visuals.h> |
|
| - | 43 | #include <ddi/irq.h> |
|
| - | 44 | #include <arch/debug/print.h> |
|
| - | 45 | #include <print.h> |
|
| - | 46 | #include <config.h> |
|
| - | 47 | #include <interrupt.h> |
|
| - | 48 | #include <arch/regutils.h> |
|
| - | 49 | #include <arch/machine.h> |
|
| - | 50 | #include <userspace.h> |
|
| - | 51 | ||
| - | 52 | /** Information about loaded tasks. */ |
|
| - | 53 | bootinfo_t bootinfo; |
|
| 37 | 54 | ||
| - | 55 | /** Performs arm32 specific initialization before main_bsp() is called. */ |
|
| 38 | void arch_pre_main(void) |
56 | void arch_pre_main(void) |
| 39 | { |
57 | { |
| 40 | /* TODO */ |
58 | int i; |
| - | 59 | ||
| - | 60 | init.cnt = bootinfo.cnt; |
|
| - | 61 | ||
| - | 62 | for (i = 0; i < bootinfo.cnt; ++i) { |
|
| - | 63 | init.tasks[i].addr = bootinfo.tasks[i].addr; |
|
| - | 64 | init.tasks[i].size = bootinfo.tasks[i].size; |
|
| - | 65 | } |
|
| - | 66 | ||
| 41 | } |
67 | } |
| 42 | 68 | ||
| - | 69 | /** Performs arm32 specific initialization before mm is initialized. */ |
|
| 43 | void arch_pre_mm_init(void) |
70 | void arch_pre_mm_init(void) |
| 44 | { |
71 | { |
| 45 | /* TODO */ |
72 | /* It is not assumed by default */ |
| - | 73 | interrupts_disable(); |
|
| 46 | } |
74 | } |
| 47 | 75 | ||
| - | 76 | /** Performs arm32 specific initialization afterr mm is initialized. */ |
|
| 48 | void arch_post_mm_init(void) |
77 | void arch_post_mm_init(void) |
| 49 | { |
78 | { |
| - | 79 | machine_hw_map_init(); |
|
| - | 80 | ||
| - | 81 | /* Initialize exception dispatch table */ |
|
| - | 82 | exception_init(); |
|
| - | 83 | ||
| - | 84 | interrupt_init(); |
|
| - | 85 | ||
| - | 86 | console_init(device_assign_devno()); |
|
| - | 87 | ||
| 50 | /* TODO */ |
88 | #ifdef CONFIG_FB |
| - | 89 | fb_init(machine_get_fb_address(), 640, 480, 1920, VISUAL_RGB_8_8_8); |
|
| - | 90 | #endif |
|
| 51 | } |
91 | } |
| 52 | 92 | ||
| - | 93 | /** Performs arm32 specific tasks needed after cpu is initialized. |
|
| - | 94 | * |
|
| - | 95 | * Currently the function is empty. |
|
| - | 96 | */ |
|
| 53 | void arch_post_cpu_init(void) |
97 | void arch_post_cpu_init(void) |
| 54 | { |
98 | { |
| 55 | /* TODO */ |
- | |
| 56 | } |
99 | } |
| 57 | 100 | ||
| - | 101 | ||
| - | 102 | /** Performs arm32 specific tasks needed before the multiprocessing is |
|
| - | 103 | * initialized. |
|
| - | 104 | * |
|
| - | 105 | * Currently the function is empty because SMP is not supported. |
|
| - | 106 | */ |
|
| 58 | void arch_pre_smp_init(void) |
107 | void arch_pre_smp_init(void) |
| 59 | { |
108 | { |
| 60 | /* TODO */ |
- | |
| 61 | } |
109 | } |
| 62 | 110 | ||
| - | 111 | ||
| - | 112 | /** Performs arm32 specific tasks needed after the multiprocessing is |
|
| - | 113 | * initialized. |
|
| - | 114 | * |
|
| - | 115 | * Currently the function is empty because SMP is not supported. |
|
| - | 116 | */ |
|
| 63 | void arch_post_smp_init(void) |
117 | void arch_post_smp_init(void) |
| 64 | { |
118 | { |
| 65 | /* TODO */ |
- | |
| 66 | } |
119 | } |
| 67 | 120 | ||
| - | 121 | ||
| 68 | /** Perform arm32 specific tasks needed before the new task is run. */ |
122 | /** Performs arm32 specific tasks needed before the new task is run. */ |
| 69 | void before_task_runs_arch(void) |
123 | void before_task_runs_arch(void) |
| 70 | { |
124 | { |
| 71 | /* TODO */ |
125 | tlb_invalidate_all(); |
| 72 | } |
126 | } |
| 73 | 127 | ||
| - | 128 | ||
| 74 | /** Perform arm32 specific tasks needed before the new thread is scheduled. */ |
129 | /** Performs arm32 specific tasks needed before the new thread is scheduled. |
| - | 130 | * |
|
| - | 131 | * It sets supervisor_sp. |
|
| - | 132 | */ |
|
| 75 | void before_thread_runs_arch(void) |
133 | void before_thread_runs_arch(void) |
| 76 | { |
134 | { |
| 77 | /* TODO */ |
135 | uint8_t *stck; |
| - | 136 | ||
| - | 137 | stck = &THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA]; |
|
| - | 138 | supervisor_sp = (uintptr_t) stck; |
|
| 78 | } |
139 | } |
| 79 | 140 | ||
| - | 141 | /** Performs arm32 specific tasks before a thread stops running. |
|
| - | 142 | * |
|
| - | 143 | * Currently the function is empty. |
|
| - | 144 | */ |
|
| 80 | void after_thread_ran_arch(void) |
145 | void after_thread_ran_arch(void) |
| 81 | { |
146 | { |
| 82 | /* TODO */ |
- | |
| 83 | } |
147 | } |
| 84 | 148 | ||
| - | 149 | /** Halts CPU. */ |
|
| - | 150 | void cpu_halt(void) |
|
| - | 151 | { |
|
| - | 152 | machine_cpu_halt(); |
|
| - | 153 | } |
|
| - | 154 | ||
| - | 155 | /** Reboot. */ |
|
| 85 | void arch_reboot(void) |
156 | void arch_reboot() |
| 86 | { |
157 | { |
| - | 158 | /* not implemented */ |
|
| 87 | // TODO |
159 | for (;;) |
| 88 | while (1); |
160 | ; |
| 89 | } |
161 | } |
| 90 | 162 | ||
| 91 | /** @} |
163 | /** @} |
| 92 | */ |
164 | */ |