- Timestamp:
- 2009-01-29T17:24:35Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 43d6401
- Parents:
- 26c67a8
- Location:
- kernel/arch/ppc32
- Files:
-
- 4 edited
-
include/boot/boot.h (modified) (2 diffs)
-
src/drivers/cuda.c (modified) (6 diffs)
-
src/drivers/pic.c (modified) (5 diffs)
-
src/ppc32.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/include/boot/boot.h
r26c67a8 rf817d3a 80 80 uintptr_t addr; 81 81 unsigned int size; 82 } keyboard_t;82 } macio_t; 83 83 84 84 typedef struct { … … 86 86 taskmap_t taskmap; 87 87 screen_t screen; 88 keyboard_t keyboard;88 macio_t macio; 89 89 } bootinfo_t; 90 90 -
kernel/arch/ppc32/src/drivers/cuda.c
r26c67a8 rf817d3a 237 237 int cuda_get_scancode(void) 238 238 { 239 uint8_t kind; 240 uint8_t data[4]; 241 242 receive_packet(&kind, 4, data); 243 244 if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) 245 return data[2]; 239 if (cuda) { 240 uint8_t kind; 241 uint8_t data[4]; 242 243 receive_packet(&kind, 4, data); 244 245 if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) 246 return data[2]; 247 } 246 248 247 249 return -1; … … 272 274 void cuda_grab(void) 273 275 { 274 ipl_t ipl = interrupts_disable(); 275 spinlock_lock(&cuda_irq.lock); 276 cuda_irq.notif_cfg.notify = false; 277 spinlock_unlock(&cuda_irq.lock); 278 interrupts_restore(ipl); 276 if (cuda) { 277 ipl_t ipl = interrupts_disable(); 278 spinlock_lock(&cuda_irq.lock); 279 cuda_irq.notif_cfg.notify = false; 280 spinlock_unlock(&cuda_irq.lock); 281 interrupts_restore(ipl); 282 } 279 283 } 280 284 … … 283 287 void cuda_release(void) 284 288 { 285 ipl_t ipl = interrupts_disable(); 286 spinlock_lock(&cuda_irq.lock); 287 if (cuda_irq.notif_cfg.answerbox) 288 cuda_irq.notif_cfg.notify = true; 289 spinlock_unlock(&cuda_irq.unlock); 290 interrupts_restore(ipl); 289 if (cuda) { 290 ipl_t ipl = interrupts_disable(); 291 spinlock_lock(&cuda_irq.lock); 292 if (cuda_irq.notif_cfg.answerbox) 293 cuda_irq.notif_cfg.notify = true; 294 spinlock_unlock(&cuda_irq.unlock); 295 interrupts_restore(ipl); 296 } 291 297 } 292 298 … … 294 300 void cuda_init(devno_t devno, uintptr_t base, size_t size) 295 301 { 296 cuda = (uint8_t *) hw_map(base, size); 302 cuda = (uint8_t *) hw_map(base, size); 297 303 298 304 chardev_initialize("cuda_kbd", &kbrd, &ops); … … 307 313 308 314 pic_enable_interrupt(CUDA_IRQ); 309 315 310 316 sysinfo_set_item_val("kbd", NULL, true); 311 317 sysinfo_set_item_val("kbd.devno", NULL, devno); … … 346 352 347 353 void arch_reboot(void) { 348 send_packet(PACKET_CUDA, 1, CUDA_RESET); 354 if (cuda) 355 send_packet(PACKET_CUDA, 1, CUDA_RESET); 356 349 357 asm volatile ( 350 358 "b 0\n" -
kernel/arch/ppc32/src/drivers/pic.c
r26c67a8 rf817d3a 39 39 #include <bitops.h> 40 40 41 static volatile uint32_t *pic ;41 static volatile uint32_t *pic = NULL; 42 42 43 43 void pic_init(uintptr_t base, size_t size) … … 48 48 void pic_enable_interrupt(int intnum) 49 49 { 50 if (intnum < 32) { 51 pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); 52 } else { 53 pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); 50 if (pic) { 51 if (intnum < 32) 52 pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); 53 else 54 pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); 54 55 } 55 56 … … 58 59 void pic_disable_interrupt(int intnum) 59 60 { 60 if (intnum < 32) { 61 pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); 62 } else { 63 pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); 61 if (pic) { 62 if (intnum < 32) 63 pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); 64 else 65 pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); 64 66 } 65 67 } … … 67 69 void pic_ack_interrupt(int intnum) 68 70 { 69 if (intnum < 32) 70 pic[PIC_ACK_LOW] = 1 << intnum; 71 else 72 pic[PIC_ACK_HIGH] = 1 << (intnum - 32); 71 if (pic) { 72 if (intnum < 32) 73 pic[PIC_ACK_LOW] = 1 << intnum; 74 else 75 pic[PIC_ACK_HIGH] = 1 << (intnum - 32); 76 } 73 77 } 74 78 … … 76 80 int pic_get_pending(void) 77 81 { 78 int pending; 79 80 pending = pic[PIC_PENDING_LOW]; 81 if (pending) 82 return fnzb32(pending); 83 84 pending = pic[PIC_PENDING_HIGH]; 85 if (pending) 86 return fnzb32(pending) + 32; 82 if (pic) { 83 int pending; 84 85 pending = pic[PIC_PENDING_LOW]; 86 if (pending) 87 return fnzb32(pending); 88 89 pending = pic[PIC_PENDING_HIGH]; 90 if (pending) 91 return fnzb32(pending) + 32; 92 } 87 93 88 94 return -1; -
kernel/arch/ppc32/src/ppc32.c
r26c67a8 rf817d3a 77 77 if (config.cpu_active == 1) { 78 78 /* Initialize framebuffer */ 79 unsigned int visual; 80 81 switch (bootinfo.screen.bpp) { 82 case 8: 83 visual = VISUAL_INDIRECT_8; 84 break; 85 case 16: 86 visual = VISUAL_RGB_5_5_5; 87 break; 88 case 24: 89 visual = VISUAL_RGB_8_8_8; 90 break; 91 case 32: 92 visual = VISUAL_RGB_0_8_8_8; 93 break; 94 default: 95 panic("Unsupported bits per pixel."); 79 if (bootinfo.screen.addr) { 80 unsigned int visual; 81 82 switch (bootinfo.screen.bpp) { 83 case 8: 84 visual = VISUAL_INDIRECT_8; 85 break; 86 case 16: 87 visual = VISUAL_RGB_5_5_5; 88 break; 89 case 24: 90 visual = VISUAL_RGB_8_8_8; 91 break; 92 case 32: 93 visual = VISUAL_RGB_0_8_8_8; 94 break; 95 default: 96 panic("Unsupported bits per pixel."); 97 } 98 fb_properties_t prop = { 99 .addr = bootinfo.screen.addr, 100 .offset = 0, 101 .x = bootinfo.screen.width, 102 .y = bootinfo.screen.height, 103 .scan = bootinfo.screen.scanline, 104 .visual = visual, 105 }; 106 fb_init(&prop); 96 107 } 97 fb_properties_t prop = {98 .addr = bootinfo.screen.addr,99 .offset = 0,100 .x = bootinfo.screen.width,101 .y = bootinfo.screen.height,102 .scan = bootinfo.screen.scanline,103 .visual = visual,104 };105 fb_init(&prop);106 108 107 109 /* Initialize IRQ routing */ 108 110 irq_init(IRQ_COUNT, IRQ_COUNT); 109 110 /* Initialize PIC */111 pic_init(bootinfo.keyboard.addr, PAGE_SIZE);112 111 113 /* Initialize I/O controller */ 114 cuda_init(device_assign_devno(), 115 bootinfo.keyboard.addr + 0x16000, 2 * PAGE_SIZE); 112 if (bootinfo.macio.addr) { 113 /* Initialize PIC */ 114 pic_init(bootinfo.macio.addr, PAGE_SIZE); 115 116 /* Initialize I/O controller */ 117 cuda_init(device_assign_devno(), 118 bootinfo.macio.addr + 0x16000, 2 * PAGE_SIZE); 119 } 116 120 117 121 /* Merge all zones to 1 big zone */
Note:
See TracChangeset
for help on using the changeset viewer.
