Changeset 973ef9fc in mainline for kernel/generic/src/ipc/irq.c


Ignore:
Timestamp:
2010-12-25T21:20:28Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
631ee0c
Parents:
1bfd3d3 (diff), 09178b7f (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 mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/irq.c

    r1bfd3d3 r973ef9fc  
    4242 *
    4343 * The structure of a notification message is as follows:
    44  * - METHOD: method as registered by the SYS_IPC_REGISTER_IRQ syscall
     44 * - IMETHOD: interface and method as registered by the SYS_IPC_REGISTER_IRQ
     45 *            syscall
    4546 * - ARG1: payload modified by a 'top-half' handler
    4647 * - ARG2: payload modified by a 'top-half' handler
     
    4950 * - ARG5: payload modified by a 'top-half' handler
    5051 * - in_phone_hash: interrupt counter (may be needed to assure correct order
    51  *         in multithreaded drivers)
     52 *                  in multithreaded drivers)
    5253 *
    5354 * Note on synchronization for ipc_irq_register(), ipc_irq_unregister(),
     
    130131/** Register an answerbox as a receiving end for IRQ notifications.
    131132 *
    132  * @param box    Receiving answerbox.
    133  * @param inr    IRQ number.
    134  * @param devno  Device number.
    135  * @param method Method to be associated with the notification.
    136  * @param ucode  Uspace pointer to top-half pseudocode.
    137  *
    138  * @return EBADMEM, ENOENT or EEXISTS on failure or 0 on success.
     133 * @param box           Receiving answerbox.
     134 * @param inr           IRQ number.
     135 * @param devno         Device number.
     136 * @param imethod       Interface and method to be associated with the
     137 *                      notification.
     138 * @param ucode         Uspace pointer to top-half pseudocode.
     139 * @return              EOK on success or a negative error code.
    139140 *
    140141 */
    141142int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno,
    142     unative_t method, irq_code_t *ucode)
    143 {
    144         unative_t key[] = {
    145                 (unative_t) inr,
    146                 (unative_t) devno
     143    sysarg_t imethod, irq_code_t *ucode)
     144{
     145        sysarg_t key[] = {
     146                (sysarg_t) inr,
     147                (sysarg_t) devno
    147148        };
     149
     150        if ((inr < 0) || (inr > last_inr))
     151                return ELIMIT;
    148152       
    149153        irq_code_t *code;
     
    167171        irq->notif_cfg.notify = true;
    168172        irq->notif_cfg.answerbox = box;
    169         irq->notif_cfg.method = method;
     173        irq->notif_cfg.imethod = imethod;
    170174        irq->notif_cfg.code = code;
    171175        irq->notif_cfg.counter = 0;
     
    206210/** Unregister task from IRQ notification.
    207211 *
    208  * @param box   Answerbox associated with the notification.
    209  * @param inr   IRQ number.
    210  * @param devno Device number.
    211  *
     212 * @param box           Answerbox associated with the notification.
     213 * @param inr           IRQ number.
     214 * @param devno         Device number.
     215 * @return              EOK on success or a negative error code.
    212216 */
    213217int ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno)
    214218{
    215         unative_t key[] = {
    216                 (unative_t) inr,
    217                 (unative_t) devno
     219        sysarg_t key[] = {
     220                (sysarg_t) inr,
     221                (sysarg_t) devno
    218222        };
     223
     224        if ((inr < 0) || (inr > last_inr))
     225                return ELIMIT;
    219226       
    220227        irq_spinlock_lock(&irq_uspace_hash_table_lock, true);
     
    290297                }
    291298               
    292                 unative_t key[2];
     299                sysarg_t key[2];
    293300                key[0] = irq->inr;
    294301                key[1] = irq->devno;
     
    444451               
    445452                /* Set up args */
    446                 IPC_SET_METHOD(call->data, irq->notif_cfg.method);
     453                IPC_SET_IMETHOD(call->data, irq->notif_cfg.imethod);
    447454                IPC_SET_ARG1(call->data, irq->notif_cfg.scratch[1]);
    448455                IPC_SET_ARG2(call->data, irq->notif_cfg.scratch[2]);
     
    465472 *
    466473 */
    467 void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3,
    468     unative_t a4, unative_t a5)
     474void ipc_irq_send_msg(irq_t *irq, sysarg_t a1, sysarg_t a2, sysarg_t a3,
     475    sysarg_t a4, sysarg_t a5)
    469476{
    470477        irq_spinlock_lock(&irq->lock, true);
     
    481488                call->priv = ++irq->notif_cfg.counter;
    482489               
    483                 IPC_SET_METHOD(call->data, irq->notif_cfg.method);
     490                IPC_SET_IMETHOD(call->data, irq->notif_cfg.imethod);
    484491                IPC_SET_ARG1(call->data, a1);
    485492                IPC_SET_ARG2(call->data, a2);
Note: See TracChangeset for help on using the changeset viewer.