source: mainline/kernel/arch/ppc32/src/ppc32.c@ b888d5f

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since b888d5f was 84afc7b, checked in by Martin Decky <martin@…>, 17 years ago

as kernel little brother drivers are not needed anymore, the device numbers do not have to be correlated between kernel and uspace in any way
introduce new syscall sys_device_assign_devno() for generating system-wide unique device numbers for uspace

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*
2 * Copyright (c) 2005 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup ppc32
30 * @{
31 */
32/** @file
33 */
34
35#include <config.h>
36#include <arch.h>
37#include <arch/boot/boot.h>
38#include <arch/drivers/cuda.h>
39#include <arch/interrupt.h>
40#include <genarch/fb/fb.h>
41#include <genarch/fb/visuals.h>
42#include <userspace.h>
43#include <proc/uarg.h>
44#include <console/console.h>
45#include <ddi/irq.h>
46#include <arch/drivers/pic.h>
47#include <macros.h>
48#include <string.h>
49
50#define IRQ_COUNT 64
51
52bootinfo_t bootinfo;
53
54/** Performs ppc32-specific initialization before main_bsp() is called. */
55void arch_pre_main(void)
56{
57 init.cnt = bootinfo.taskmap.count;
58
59 uint32_t i;
60
61 for (i = 0; i < min3(bootinfo.taskmap.count, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); i++) {
62 init.tasks[i].addr = PA2KA(bootinfo.taskmap.tasks[i].addr);
63 init.tasks[i].size = bootinfo.taskmap.tasks[i].size;
64 strncpy(init.tasks[i].name, bootinfo.taskmap.tasks[i].name,
65 CONFIG_TASK_NAME_BUFLEN);
66 }
67}
68
69void arch_pre_mm_init(void)
70{
71 /* Initialize dispatch table */
72 interrupt_init();
73
74 /* Start decrementer */
75 start_decrementer();
76}
77
78void arch_post_mm_init(void)
79{
80 if (config.cpu_active == 1) {
81
82#ifdef CONFIG_FB
83 /* Initialize framebuffer */
84 if (bootinfo.screen.addr) {
85 unsigned int visual;
86
87 switch (bootinfo.screen.bpp) {
88 case 8:
89 visual = VISUAL_INDIRECT_8;
90 break;
91 case 16:
92 visual = VISUAL_RGB_5_5_5;
93 break;
94 case 24:
95 visual = VISUAL_RGB_8_8_8;
96 break;
97 case 32:
98 visual = VISUAL_RGB_0_8_8_8;
99 break;
100 default:
101 panic("Unsupported bits per pixel.");
102 }
103 fb_properties_t prop = {
104 .addr = bootinfo.screen.addr,
105 .offset = 0,
106 .x = bootinfo.screen.width,
107 .y = bootinfo.screen.height,
108 .scan = bootinfo.screen.scanline,
109 .visual = visual,
110 };
111 fb_init(&prop);
112 }
113#endif
114
115 /* Initialize IRQ routing */
116 irq_init(IRQ_COUNT, IRQ_COUNT);
117
118 if (bootinfo.macio.addr) {
119 /* Initialize PIC */
120 pic_init(bootinfo.macio.addr, PAGE_SIZE);
121
122 /* Initialize I/O controller */
123 cuda_init(bootinfo.macio.addr + 0x16000, 2 * PAGE_SIZE);
124 }
125
126 /* Merge all zones to 1 big zone */
127 zone_merge_all();
128 }
129}
130
131void arch_post_cpu_init(void)
132{
133}
134
135void arch_pre_smp_init(void)
136{
137}
138
139void arch_post_smp_init(void)
140{
141}
142
143void calibrate_delay_loop(void)
144{
145}
146
147void userspace(uspace_arg_t *kernel_uarg)
148{
149 userspace_asm((uintptr_t) kernel_uarg->uspace_uarg,
150 (uintptr_t) kernel_uarg->uspace_stack +
151 THREAD_STACK_SIZE - SP_DELTA,
152 (uintptr_t) kernel_uarg->uspace_entry);
153
154 /* Unreachable */
155 while (true);
156}
157
158/** Acquire console back for kernel
159 *
160 */
161void arch_grab_console(void)
162{
163#ifdef CONFIG_FB
164 fb_redraw();
165#endif
166}
167
168/** Return console to userspace
169 *
170 */
171void arch_release_console(void)
172{
173}
174
175/** Construct function pointer
176 *
177 * @param fptr function pointer structure
178 * @param addr function address
179 * @param caller calling function address
180 *
181 * @return address of the function pointer
182 *
183 */
184void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller)
185{
186 return addr;
187}
188
189/** @}
190 */
Note: See TracBrowser for help on using the repository browser.