Changeset e7bc999 in mainline for uspace/drv/ohci/main.c


Ignore:
Timestamp:
2011-03-20T21:36:17Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1fb1339, 33577f81, fd9f6e4c
Parents:
42dbb26
Message:

Add interrupt support

Fix register structure
Interrupts disabled as there is no way to access mm registers in the handler

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ohci/main.c

    r42dbb26 re7bc999  
    4848
    4949static int ohci_add_device(ddf_dev_t *device);
     50/*----------------------------------------------------------------------------*/
     51/** IRQ handling callback, identifies device
     52 *
     53 * @param[in] dev DDF instance of the device to use.
     54 * @param[in] iid (Unused).
     55 * @param[in] call Pointer to the call that represents interrupt.
     56 */
     57static void irq_handler(ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *call)
     58{
     59        assert(dev);
     60        ohci_hc_t *hc = (ohci_hc_t*)dev->driver_data;
     61        assert(hc);
     62        ohci_hc_interrupt(hc, 0);
     63}
    5064/*----------------------------------------------------------------------------*/
    5165static driver_ops_t ohci_driver_ops = {
     
    104118        }
    105119
    106         ret = ohci_hc_init(hcd, hc_fun, mem_reg_base, mem_reg_size);
     120        bool interrupts = false;
     121        ret = pci_enable_interrupts(device);
     122        if (ret != EOK) {
     123                usb_log_warning(
     124                    "Failed(%d) to enable interrupts, fall back to polling.\n",
     125                    ret);
     126        } else {
     127                usb_log_debug("Hw interrupts enabled.\n");
     128                interrupts = true;
     129        }
     130
     131        ret = ohci_hc_init(hcd, hc_fun, mem_reg_base, mem_reg_size, interrupts);
    107132        if (ret != EOK) {
    108133                usb_log_error("Failed to initialize OHCI driver.\n");
     
    110135                return ret;
    111136        }
     137
     138        ret = register_interrupt_handler(device, irq, irq_handler, NULL);
    112139
    113140        hc_fun->ops = &hc_ops;
Note: See TracChangeset for help on using the changeset viewer.