Changeset 91b60499 in mainline for uspace/lib/c/generic/irq.c


Ignore:
Timestamp:
2017-09-30T06:29:42Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
300f4c4
Parents:
d076f16 (diff), 6636fb19 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge support for capabilities from lp:~jakub/helenos/caps

This commit introduces capabilities as task-local names for references to kernel
objects. Kernel objects are reference-counted wrappers for a select group of
objects allocated in and by the kernel that can be made accessible to userspace
in a controlled way via integer handles.

So far, a kernel object encapsulates either an irq_t or a phone_t.

Support for the former lead to the removal of kernel-assigned devnos and
unsecure deregistration of IRQs in which a random task was able to unregister
some other task's IRQ.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/irq.c

    rd076f16 r91b60499  
    5555 *
    5656 * @param inr    IRQ number.
    57  * @param devno  Device number of the device generating inr.
    5857 * @param method Use this method for notifying me.
    5958 * @param ucode  Top-half pseudocode handler.
     59 *
     60 * @return IRQ capability handle returned by the kernel.
     61 * @return Error code returned by the kernel.
     62 *
     63 */
     64int ipc_irq_subscribe(int inr, sysarg_t method, const irq_code_t *ucode)
     65{
     66        if (ucode == NULL)
     67                ucode = &default_ucode;
     68       
     69        return __SYSCALL3(SYS_IPC_IRQ_SUBSCRIBE, inr, method, (sysarg_t) ucode);
     70}
     71
     72/** Unsubscribe from IRQ notification.
     73 *
     74 * @param cap   IRQ capability handle.
    6075 *
    6176 * @return Value returned by the kernel.
    6277 *
    6378 */
    64 int ipc_irq_subscribe(int inr, int devno, sysarg_t method,
    65     const irq_code_t *ucode)
     79int ipc_irq_unsubscribe(int cap)
    6680{
    67         if (ucode == NULL)
    68                 ucode = &default_ucode;
    69        
    70         return __SYSCALL4(SYS_IPC_IRQ_SUBSCRIBE, inr, devno, method,
    71             (sysarg_t) ucode);
    72 }
    73 
    74 /** Unsubscribe from IRQ notification.
    75  *
    76  * @param inr   IRQ number.
    77  * @param devno Device number of the device generating inr.
    78  *
    79  * @return Value returned by the kernel.
    80  *
    81  */
    82 int ipc_irq_unsubscribe(int inr, int devno)
    83 {
    84         return __SYSCALL2(SYS_IPC_IRQ_UNSUBSCRIBE, inr, devno);
     81        return __SYSCALL1(SYS_IPC_IRQ_UNSUBSCRIBE, cap);
    8582}
    8683
Note: See TracChangeset for help on using the changeset viewer.