Changes in kernel/arch/ppc32/src/ppc32.c [a71c158:19490ce] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/ppc32.c
ra71c158 r19490ce 41 41 #include <genarch/fb/fb.h> 42 42 #include <genarch/fb/visuals.h> 43 #include <genarch/ofw/ofw_tree.h>44 #include <genarch/ofw/pci.h>45 43 #include <userspace.h> 46 44 #include <proc/uarg.h> … … 51 49 #include <macros.h> 52 50 #include <string.h> 53 #include <print.h>54 51 55 52 #define IRQ_COUNT 64 … … 66 63 67 64 for (i = 0; i < min3(bootinfo.taskmap.count, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); i++) { 68 init.tasks[i].addr = bootinfo.taskmap.tasks[i].addr;65 init.tasks[i].addr = PA2KA(bootinfo.taskmap.tasks[i].addr); 69 66 init.tasks[i].size = bootinfo.taskmap.tasks[i].size; 70 67 str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, 71 68 bootinfo.taskmap.tasks[i].name); 72 69 } 73 74 /* Copy boot allocations info. */75 ballocs.base = bootinfo.ballocs.base;76 ballocs.size = bootinfo.ballocs.size;77 78 ofw_tree_init(bootinfo.ofw_root);79 70 } 80 71 … … 83 74 /* Initialize dispatch table */ 84 75 interrupt_init(); 85 76 86 77 /* Start decrementer */ 87 78 start_decrementer(); 88 79 } 89 80 90 static bool display_register(ofw_tree_node_t *node, void *arg) 91 { 92 uintptr_t fb_addr = 0; 93 uint32_t fb_width = 0; 94 uint32_t fb_height = 0; 95 uint32_t fb_scanline = 0; 96 unsigned int visual = VISUAL_UNKNOWN; 97 98 ofw_tree_property_t *prop = ofw_tree_getprop(node, "address"); 99 if ((prop) && (prop->value)) 100 fb_addr = *((uintptr_t *) prop->value); 101 102 prop = ofw_tree_getprop(node, "width"); 103 if ((prop) && (prop->value)) 104 fb_width = *((uint32_t *) prop->value); 105 106 prop = ofw_tree_getprop(node, "height"); 107 if ((prop) && (prop->value)) 108 fb_height = *((uint32_t *) prop->value); 109 110 prop = ofw_tree_getprop(node, "depth"); 111 if ((prop) && (prop->value)) { 112 uint32_t fb_bpp = *((uint32_t *) prop->value); 113 switch (fb_bpp) { 114 case 8: 115 visual = VISUAL_INDIRECT_8; 116 break; 117 case 16: 118 visual = VISUAL_RGB_5_5_5_BE; 119 break; 120 case 24: 121 visual = VISUAL_BGR_8_8_8; 122 break; 123 case 32: 124 visual = VISUAL_RGB_0_8_8_8; 125 break; 126 default: 127 visual = VISUAL_UNKNOWN; 81 void arch_post_mm_init(void) 82 { 83 if (config.cpu_active == 1) { 84 85 #ifdef CONFIG_FB 86 /* Initialize framebuffer */ 87 if (bootinfo.screen.addr) { 88 unsigned int visual; 89 90 switch (bootinfo.screen.bpp) { 91 case 8: 92 visual = VISUAL_INDIRECT_8; 93 break; 94 case 16: 95 visual = VISUAL_RGB_5_5_5_BE; 96 break; 97 case 24: 98 visual = VISUAL_BGR_8_8_8; 99 break; 100 case 32: 101 visual = VISUAL_RGB_0_8_8_8; 102 break; 103 default: 104 panic("Unsupported bits per pixel."); 105 } 106 fb_properties_t prop = { 107 .addr = bootinfo.screen.addr, 108 .offset = 0, 109 .x = bootinfo.screen.width, 110 .y = bootinfo.screen.height, 111 .scan = bootinfo.screen.scanline, 112 .visual = visual, 113 }; 114 fb_init(&prop); 128 115 } 129 }130 131 prop = ofw_tree_getprop(node, "linebytes");132 if ((prop) && (prop->value))133 fb_scanline = *((uint32_t *) prop->value);134 135 if ((fb_addr) && (fb_width > 0) && (fb_height > 0)136 && (fb_scanline > 0) && (visual != VISUAL_UNKNOWN)) {137 fb_properties_t fb_prop = {138 .addr = fb_addr,139 .offset = 0,140 .x = fb_width,141 .y = fb_height,142 .scan = fb_scanline,143 .visual = visual,144 };145 146 outdev_t *fbdev = fb_init(&fb_prop);147 if (fbdev)148 stdout_wire(fbdev);149 }150 151 return true;152 }153 154 void arch_post_mm_init(void)155 {156 if (config.cpu_active == 1) {157 #ifdef CONFIG_FB158 ofw_tree_walk_by_device_type("display", display_register, NULL);159 116 #endif 160 117 … … 175 132 } 176 133 177 static bool macio_register(ofw_tree_node_t *node, void *arg) 178 { 179 ofw_pci_reg_t *assigned_address = NULL; 180 181 ofw_tree_property_t *prop = ofw_tree_getprop(node, "assigned-addresses"); 182 if ((prop) && (prop->value)) 183 assigned_address = ((ofw_pci_reg_t *) prop->value); 184 185 if (assigned_address) { 134 void arch_post_smp_init(void) 135 { 136 if (bootinfo.macio.addr) { 186 137 /* Initialize PIC */ 187 138 cir_t cir; 188 139 void *cir_arg; 189 pic_init( assigned_address[0].addr, PAGE_SIZE, &cir, &cir_arg);190 140 pic_init(bootinfo.macio.addr, PAGE_SIZE, &cir, &cir_arg); 141 191 142 #ifdef CONFIG_MAC_KBD 192 uintptr_t pa = assigned_address[0].addr + 0x16000;143 uintptr_t pa = bootinfo.macio.addr + 0x16000; 193 144 uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); 194 145 size_t offset = pa - aligned_addr; 195 146 size_t size = 2 * PAGE_SIZE; 196 147 197 148 cuda_t *cuda = (cuda_t *) 198 149 (hw_map(aligned_addr, offset + size) + offset); 199 150 200 151 /* Initialize I/O controller */ 201 152 cuda_instance_t *cuda_instance = … … 212 163 #endif 213 164 } 214 215 /* Consider only a single device for now */216 return false;217 }218 219 void arch_post_smp_init(void)220 {221 ofw_tree_walk_by_device_type("mac-io", macio_register, NULL);222 165 } 223 166 … … 237 180 } 238 181 182 /** Acquire console back for kernel 183 * 184 */ 185 void arch_grab_console(void) 186 { 187 #ifdef CONFIG_FB 188 fb_redraw(); 189 #endif 190 } 191 192 /** Return console to userspace 193 * 194 */ 195 void arch_release_console(void) 196 { 197 } 198 239 199 /** Construct function pointer 240 200 *
Note:
See TracChangeset
for help on using the changeset viewer.