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 | /** @} |