Rev 1875 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1875 | Rev 1923 | ||
---|---|---|---|
Line 563... | Line 563... | ||
563 | return 0; |
563 | return 0; |
564 | } |
564 | } |
565 | return (unative_t)call; |
565 | return (unative_t)call; |
566 | } |
566 | } |
567 | 567 | ||
568 | /** Connect irq handler to task */ |
568 | /** Connect irq handler to task. |
- | 569 | * |
|
- | 570 | * @param inr IRQ number. |
|
- | 571 | * @param devno Device number. |
|
- | 572 | * @param method Method to be associated with the notification. |
|
- | 573 | * @param ucode Uspace pointer to the top-half pseudocode. |
|
- | 574 | * |
|
- | 575 | * @return EPERM or a return code returned by ipc_irq_register(). |
|
- | 576 | */ |
|
569 | unative_t sys_ipc_register_irq(int irq, irq_code_t *ucode) |
577 | unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method, irq_code_t *ucode) |
570 | { |
578 | { |
571 | if (!(cap_get(TASK) & CAP_IRQ_REG)) |
579 | if (!(cap_get(TASK) & CAP_IRQ_REG)) |
572 | return EPERM; |
580 | return EPERM; |
573 | 581 | ||
574 | if (irq >= IRQ_COUNT || irq <= -IPC_IRQ_RESERVED_VIRTUAL) |
- | |
575 | return (unative_t) ELIMIT; |
- | |
576 | - | ||
577 | irq_ipc_bind_arch(irq); |
- | |
578 | - | ||
579 | return ipc_irq_register(&TASK->answerbox, irq, ucode); |
582 | return ipc_irq_register(&TASK->answerbox, inr, devno, method, ucode); |
580 | } |
583 | } |
581 | 584 | ||
582 | /* Disconnect irq handler from task */ |
585 | /** Disconnect irq handler from task. |
- | 586 | * |
|
- | 587 | * @param inr IRQ number. |
|
- | 588 | * @param devno Device number. |
|
- | 589 | */ |
|
583 | unative_t sys_ipc_unregister_irq(int irq) |
590 | unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno) |
584 | { |
591 | { |
585 | if (!(cap_get(TASK) & CAP_IRQ_REG)) |
592 | if (!(cap_get(TASK) & CAP_IRQ_REG)) |
586 | return EPERM; |
593 | return EPERM; |
587 | 594 | ||
588 | if (irq >= IRQ_COUNT || irq <= -IPC_IRQ_RESERVED_VIRTUAL) |
- | |
589 | return (unative_t) ELIMIT; |
- | |
590 | - | ||
591 | ipc_irq_unregister(&TASK->answerbox, irq); |
595 | ipc_irq_unregister(&TASK->answerbox, inr, devno); |
592 | 596 | ||
593 | return 0; |
597 | return 0; |
594 | } |
598 | } |
595 | 599 | ||
596 | /** @} |
600 | /** @} |