Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset bf6b7c6 in mainline


Ignore:
Timestamp:
2013-09-21T03:54:03Z (7 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
master
Children:
30e8ab4
Parents:
ea69749f
Message:

ohci: rework error handling

File:
1 edited

Legend:

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

    rea69749f rbf6b7c6  
    9191        hw_res_list_parsed_clean(&hw_res);
    9292
    93 
    9493        usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n",
    9594            RNGABSPTR(regs), RNGSZ(regs), irq);
     
    9998            BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11);
    10099        if (ret != EOK) {
    101                 usb_log_error("Failedd to setup generic hcd: %s.",
     100                usb_log_error("Failed to setup generic hcd structures: %s.",
    102101                    str_error(ret));
    103102                return ret;
     
    108107                usb_log_error("Failed to register interrupt handler: %s.\n",
    109108                    str_error(ret));
    110                 hcd_ddf_clean_hc(device);
    111                 return ret;
     109                goto ddf_hc_clean;
    112110        }
    113111
     
    125123        }
    126124
    127 
    128         hc_t *hc_impl = malloc(sizeof(hc_t));
    129         if (!hc_impl) {
     125        hc_t *hc = malloc(sizeof(hc_t));
     126        if (!hc) {
    130127                usb_log_error("Failed to allocate driver structure.\n");
    131                 hcd_ddf_clean_hc(device);
    132                 unregister_interrupt_handler(device, irq);
    133                 return ENOMEM;
     128                ret = ENOMEM;
     129                goto unregister_irq;
    134130        }
    135131
    136132        /* Initialize OHCI HC */
    137         ret = hc_init(hc_impl, &regs, interrupts);
     133        ret = hc_init(hc, &regs, interrupts);
    138134        if (ret != EOK) {
    139135                usb_log_error("Failed to init hc: %s.\n", str_error(ret));
    140                 hcd_ddf_clean_hc(device);
    141                 unregister_interrupt_handler(device, irq);
    142                 return ret;
     136                goto hc_free;
    143137        }
    144138
    145139        /* Connect OHCI to generic HCD */
    146         hcd_set_implementation(dev_to_hcd(device), hc_impl,
     140        hcd_set_implementation(dev_to_hcd(device), hc,
    147141            hc_schedule, ohci_endpoint_init, ohci_endpoint_fini);
    148142
     
    150144        ret = hcd_ddf_setup_root_hub(device);
    151145        if (ret != EOK) {
    152                 usb_log_error("Failed to registter OHCI root hub: %s.\n",
     146                usb_log_error("Failed to register OHCI root hub: %s.\n",
    153147                    str_error(ret));
     148                hc_fini(hc);
     149hc_free:
     150                free(hc);
     151unregister_irq:
     152                unregister_interrupt_handler(device, irq);
     153ddf_hc_clean:
    154154                hcd_ddf_clean_hc(device);
    155                 unregister_interrupt_handler(device, irq);
    156                 return ret;
    157155        }
    158 
    159156        return ret;
    160157}
Note: See TracChangeset for help on using the changeset viewer.