Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/char/i8042/i8042.c

    rfafb8e5 r60744cb  
    22 * Copyright (c) 2001-2004 Jakub Jermar
    33 * Copyright (c) 2006 Josef Cejka
    4  * Copyright (c) 2017 Jiri Svoboda
     4 * Copyright (c) 2021 Jiri Svoboda
    55 * Copyright (c) 2011 Jan Vesely
    66 * All rights reserved.
     
    123123 * Write new data to the corresponding buffer.
    124124 *
    125  * @param call pointerr to call data.
    126  * @param dev  Device that caued the interrupt.
    127  *
    128  */
    129 static void i8042_irq_handler(ipc_call_t *call, ddf_dev_t *dev)
    130 {
    131         i8042_t *controller = ddf_dev_data_get(dev);
     125 * @param call Pointer to call data.
     126 * @param arg  Argument (i8042_t *)
     127 */
     128static void i8042_irq_handler(ipc_call_t *call, void *arg)
     129{
     130        i8042_t *controller = (i8042_t *)arg;
    132131        errno_t rc;
    133132
     
    146145        fibril_mutex_unlock(&port->buf_lock);
    147146        fibril_condvar_broadcast(&port->buf_cv);
     147
     148        async_sess_t *parent_sess = ddf_dev_parent_sess_get(controller->dev);
     149        hw_res_clear_interrupt(parent_sess, port->irq);
    148150}
    149151
     
    175177        bool aux_bound = false;
    176178
     179        dev->dev = ddf_dev;
     180
    177181        if (regs->size < sizeof(i8042_regs_t)) {
    178182                rc = EINVAL;
     
    202206        dev->kbd->cds.ops = &i8042_chardev_ops;
    203207        dev->kbd->cds.sarg = dev->kbd;
     208        dev->kbd->irq = irq_kbd;
    204209        fibril_mutex_initialize(&dev->kbd->buf_lock);
    205210        fibril_condvar_initialize(&dev->kbd->buf_cv);
     
    226231        dev->aux->cds.ops = &i8042_chardev_ops;
    227232        dev->aux->cds.sarg = dev->aux;
     233        dev->aux->irq = irq_mouse;
    228234        fibril_mutex_initialize(&dev->aux->buf_lock);
    229235        fibril_condvar_initialize(&dev->aux->buf_cv);
     
    283289        cap_irq_handle_t kbd_ihandle;
    284290        rc = register_interrupt_handler(ddf_dev, irq_kbd,
    285             i8042_irq_handler, &irq_code, &kbd_ihandle);
     291            i8042_irq_handler, (void *)dev, &irq_code, &kbd_ihandle);
    286292        if (rc != EOK) {
    287293                ddf_msg(LVL_ERROR, "Failed set handler for kbd: %s.",
     
    292298        cap_irq_handle_t mouse_ihandle;
    293299        rc = register_interrupt_handler(ddf_dev, irq_mouse,
    294             i8042_irq_handler, &irq_code, &mouse_ihandle);
     300            i8042_irq_handler, (void *)dev, &irq_code, &mouse_ihandle);
    295301        if (rc != EOK) {
    296302                ddf_msg(LVL_ERROR, "Failed set handler for mouse: %s.",
Note: See TracChangeset for help on using the changeset viewer.