Changeset ea69749f in mainline


Ignore:
Timestamp:
2013-09-21T03:50:00Z (11 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bf6b7c6
Parents:
8d40181
Message:

uhci: Rework error handling.

File:
1 edited

Legend:

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

    r8d40181 rea69749f  
    105105        if (!hc) {
    106106                usb_log_error("Failed to allocate UHCI HC structure.\n");
    107                 hcd_ddf_clean_hc(device);
    108                 return ENOMEM;
     107                ret = ENOMEM;
     108                goto ddf_hc_clean;
    109109        }
    110110
     
    113113                usb_log_error("Failed to register interrupt handler: %s.\n",
    114114                    str_error(ret));
    115                 hcd_ddf_clean_hc(device);
    116                 return ret;
     115                goto hc_free;
    117116        }
    118117
     
    122121                usb_log_warning("Failed to enable interrupts: %s."
    123122                    " Falling back to polling.\n", str_error(ret));
     123                unregister_interrupt_handler(device, irq);
    124124        } else {
    125125                usb_log_debug("Hw interrupts enabled.\n");
     
    131131                usb_log_error("Failed to disable legacy USB: %s.\n",
    132132                    str_error(ret));
    133                 hcd_ddf_clean_hc(device);
    134                 return ret;
     133                goto irq_unregister;
    135134        }
    136135
     
    138137        if (ret != EOK) {
    139138                usb_log_error("Failed to init uhci_hcd: %s.\n", str_error(ret));
    140                 hcd_ddf_clean_hc(device);
    141                 // TODO unregister interrupt handler
    142                 return ret;
     139                goto irq_unregister;
     140                // TODO This is unfortunate, we have neither legacy nor real USB
    143141        }
    144142
     
    151149        ret = hcd_ddf_setup_root_hub(device);
    152150        if (ret != EOK) {
    153                 hc_fini(hc);
    154                 hcd_ddf_clean_hc(device);
    155                 // TODO unregister interrupt handler
    156151                usb_log_error("Failed to setup UHCI root hub: %s.\n",
    157152                    str_error(ret));
    158                 return ret;
     153                hc_fini(hc);
     154irq_unregister:
     155                unregister_interrupt_handler(device, irq);
     156hc_free:
     157                free(hc);
     158ddf_hc_clean:
     159                hcd_ddf_clean_hc(device);
    159160        }
    160 
    161         return EOK;
     161        return ret;
    162162}
    163163/**
Note: See TracChangeset for help on using the changeset viewer.