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


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/ohci
Files:
3 edited

Legend:

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

    r19d21728 r772a172  
    125125        code->cmds[3].addr = (void *) &registers->interrupt_status;
    126126        OHCI_WR(code->cmds[1].value, OHCI_USED_INTERRUPTS);
    127 
    128         return EOK;
    129 }
    130 
    131 /** Register interrupt handler.
    132  *
    133  * @param[in] device Host controller DDF device
    134  * @param[in] regs Register range
    135  * @param[in] irq Interrupt number
    136  * @paran[in] handler Interrupt handler
    137  *
    138  * @return EOK on success or negative error code
    139  */
    140 int hc_register_irq_handler(ddf_dev_t *device, addr_range_t *regs, int irq,
    141     interrupt_handler_t handler)
    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 code: %s.\n",
    148                     str_error(ret));
    149                 return ret;
    150         }
    151 
    152         //TODO we leak memory here
    153 
    154         /* Register handler to avoid interrupt lockup */
    155         ret = register_interrupt_handler(device, irq, handler, &irq_code);
    156         if (ret != EOK) {
    157                 usb_log_error("Failed to register interrupt handler: %s.\n",
    158                     str_error(ret));
    159                 return ret;
    160         }
    161127
    162128        return EOK;
  • uspace/drv/bus/usb/ohci/hc.h

    r19d21728 r772a172  
    7373
    7474int hc_gen_irq_code(irq_code_t *code, addr_range_t *regs);
    75 int hc_register_irq_handler(ddf_dev_t *, addr_range_t *, int,
    76     interrupt_handler_t);
    7775int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun);
    7876int hc_init(hc_t *instance, addr_range_t *regs, bool interrupts);
  • uspace/drv/bus/usb/ohci/ohci.c

    r19d21728 r772a172  
    103103        }
    104104
    105         ret = hc_register_irq_handler(device, &regs, irq, irq_handler);
    106         if (ret != EOK) {
    107                 usb_log_error("Failed to register interrupt handler: %s.\n",
    108                     str_error(ret));
     105        hc_t *hc = malloc(sizeof(hc_t));
     106        if (!hc) {
     107                usb_log_error("Failed to allocate driver structure.\n");
     108                ret = ENOMEM;
    109109                goto ddf_hc_clean;
    110110        }
     
    112112        /* Try to enable interrupts */
    113113        bool interrupts = false;
    114         ret = hcd_ddf_enable_interrupts(device);
     114        ret = hcd_ddf_setup_interrupts(device, &regs, irq, irq_handler,
     115            hc_gen_irq_code);
    115116        if (ret != EOK) {
    116117                usb_log_warning("Failed to enable interrupts: %s."
     
    123124        }
    124125
    125         hc_t *hc = malloc(sizeof(hc_t));
    126         if (!hc) {
    127                 usb_log_error("Failed to allocate driver structure.\n");
    128                 ret = ENOMEM;
    129                 goto unregister_irq;
    130         }
    131 
    132126        /* Initialize OHCI HC */
    133127        ret = hc_init(hc, &regs, interrupts);
    134128        if (ret != EOK) {
    135129                usb_log_error("Failed to init hc: %s.\n", str_error(ret));
    136                 goto hc_free;
     130                goto unregister_irq;
    137131        }
    138132
     
    147141                    str_error(ret));
    148142                hc_fini(hc);
    149 hc_free:
    150                 free(hc);
    151143unregister_irq:
    152144                unregister_interrupt_handler(device, irq);
     145                free(hc);
    153146ddf_hc_clean:
    154147                hcd_ddf_clean_hc(device);
Note: See TracChangeset for help on using the changeset viewer.