Changeset f817d3a in mainline for kernel/arch/ppc32/src/drivers
- 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/src/drivers
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
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;
Note:
See TracChangeset
for help on using the changeset viewer.
