Subversion Repositories HelenOS

Rev

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
 */