Changeset 772a172 in mainline for uspace/drv/bus/usb/uhci


Ignore:
Timestamp:
2013-09-21T05:22:43Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f65d9cc
Parents:
19d21728
Message:

ohci,uhci: Switch to library provided irq setup routine.

Location:
uspace/drv/bus/usb/uhci
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhci/hc.c

    r19d21728 r772a172  
    127127}
    128128
    129 /** Register interrupt handler.
    130  *
    131  * @param[in] device Host controller DDF device
    132  * @param[in] regs Register range
    133  * @param[in] irq Interrupt number
    134  * @paran[in] handler Interrupt handler
    135  *
    136  * @return EOK on success or negative error code
    137  */
    138 int hc_register_irq_handler(ddf_dev_t *device, addr_range_t *regs, int irq,
    139     interrupt_handler_t handler)
    140 {
    141         assert(device);
    142 
    143         irq_code_t irq_code = { 0 };
    144 
    145         int ret = hc_gen_irq_code(&irq_code, regs);
    146         if (ret != EOK) {
    147                 usb_log_error("Failed to generate IRQ commands: %s.\n",
    148                     str_error(ret));
    149                 return ret;
    150         }
    151         //TODO we leak memory here
    152 
    153         /* Register handler to avoid interrupt lockup */
    154         ret = register_interrupt_handler(device, irq, handler, &irq_code);
    155         if (ret != EOK) {
    156                 usb_log_error("Failed to register interrupt handler: %s.\n",
    157                     str_error(ret));
    158                 return ret;
    159         }
    160 
    161         return EOK;
    162 }
    163 
    164129/** Take action based on the interrupt cause.
    165130 *
  • uspace/drv/bus/usb/uhci/hc.h

    r19d21728 r772a172  
    124124} hc_t;
    125125
    126 int hc_register_irq_handler(ddf_dev_t *, addr_range_t *, int,
    127     interrupt_handler_t);
    128126int hc_gen_irq_code(irq_code_t *code, addr_range_t *regs);
    129127void hc_interrupt(hc_t *instance, uint16_t status);
  • uspace/drv/bus/usb/uhci/uhci.c

    r19d21728 r772a172  
    109109        }
    110110
    111         ret = hc_register_irq_handler(device, &regs, irq, irq_handler);
    112         if (ret != EOK) {
    113                 usb_log_error("Failed to register interrupt handler: %s.\n",
    114                     str_error(ret));
    115                 goto hc_free;
    116         }
    117 
    118111        bool interrupts = false;
    119         ret = hcd_ddf_enable_interrupts(device);
     112        ret = hcd_ddf_setup_interrupts(device, &regs, irq, irq_handler,
     113            hc_gen_irq_code);
    120114        if (ret != EOK) {
    121115                usb_log_warning("Failed to enable interrupts: %s."
     
    154148irq_unregister:
    155149                unregister_interrupt_handler(device, irq);
    156 hc_free:
    157150                free(hc);
    158151ddf_hc_clean:
Note: See TracChangeset for help on using the changeset viewer.