Changeset 5b1adf5 in mainline


Ignore:
Timestamp:
2013-08-23T14:21:58Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f7fba727
Parents:
cf02eaf
Message:

Remove CHECK_RET_xxx from sb16.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/audio/sb16/main.c

    rcf02eaf r5b1adf5  
    5353    int *irq, int *dma8, int *dma16);
    5454static int sb_enable_interrupts(ddf_dev_t *device);
    55 /*----------------------------------------------------------------------------*/
     55
    5656static driver_ops_t sb_driver_ops = {
    5757        .dev_add = sb_add_device,
    5858};
    59 /*----------------------------------------------------------------------------*/
     59
    6060static driver_t sb_driver = {
    6161        .name = NAME,
    6262        .driver_ops = &sb_driver_ops
    6363};
    64 //static ddf_dev_ops_t sb_ops = {};
    65 /*----------------------------------------------------------------------------*/
    66 /** Initializes global driver structures (NONE).
     64
     65/** Initialize global driver structures (NONE).
    6766 *
    6867 * @param[in] argc Nmber of arguments in argv vector (ignored).
     
    8180static void irq_handler(ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *call)
    8281{
    83         assert(dev);
    8482        sb16_t *sb16_dev = ddf_dev_data_get(dev);
    85         assert(sb16_dev);
    8683        sb16_interrupt(sb16_dev);
    8784}
    8885
    89 /** Initializes a new ddf driver instance of SB16.
     86/** Initialize new SB16 driver instance.
    9087 *
    9188 * @param[in] device DDF instance of the device to initialize.
     
    9491static int sb_add_device(ddf_dev_t *device)
    9592{
    96 #define CHECK_RET_RETURN(ret, msg...) \
    97 if (ret != EOK) { \
    98         ddf_log_error(msg); \
    99         return ret; \
    100 } else (void)0
    101 
    102         assert(device);
     93        bool handler_regd = false;
     94        const size_t irq_cmd_count = sb16_irq_code_size();
     95        irq_cmd_t irq_cmds[irq_cmd_count];
     96        irq_pio_range_t irq_ranges[1];
    10397
    10498        sb16_t *soft_state = ddf_dev_data_alloc(device, sizeof(sb16_t));
    105         int ret = soft_state ? EOK : ENOMEM;
    106         CHECK_RET_RETURN(ret, "Failed to allocate sb16 structure.");
     99        int rc = soft_state ? EOK : ENOMEM;
     100        if (rc != EOK) {
     101                ddf_log_error("Failed to allocate sb16 structure.");
     102                goto error;
     103        }
    107104
    108105        uintptr_t sb_regs = 0, mpu_regs = 0;
     
    110107        int irq = 0, dma8 = 0, dma16 = 0;
    111108
    112         ret = sb_get_res(device, &sb_regs, &sb_regs_size, &mpu_regs,
     109        rc = sb_get_res(device, &sb_regs, &sb_regs_size, &mpu_regs,
    113110            &mpu_regs_size, &irq, &dma8, &dma16);
    114         CHECK_RET_RETURN(ret, "Failed to get resources: %s.", str_error(ret));
    115 
    116         const size_t irq_cmd_count = sb16_irq_code_size();
    117         irq_cmd_t irq_cmds[irq_cmd_count];
    118         irq_pio_range_t irq_ranges[1];
     111        if (rc != EOK) {
     112                ddf_log_error("Failed to get resources: %s.", str_error(rc));
     113                goto error;
     114        }
     115
    119116        sb16_irq_code((void*)sb_regs, dma8, dma16, irq_cmds, irq_ranges);
    120117
     
    126123        };
    127124
    128         ret = register_interrupt_handler(device, irq, irq_handler, &irq_code);
    129         CHECK_RET_RETURN(ret,
    130             "Failed to register irq handler: %s.", str_error(ret));
    131 
    132 #define CHECK_RET_UNREG_DEST_RETURN(ret, msg...) \
    133 if (ret != EOK) { \
    134         ddf_log_error(msg); \
    135         unregister_interrupt_handler(device, irq); \
    136         return ret; \
    137 } else (void)0
    138 
    139         ret = sb_enable_interrupts(device);
    140         CHECK_RET_UNREG_DEST_RETURN(ret, "Failed to enable interrupts: %s.",
    141             str_error(ret));
    142 
    143         ret = sb16_init_sb16(
    144             soft_state, (void*)sb_regs, sb_regs_size, device, dma8, dma16);
    145         CHECK_RET_UNREG_DEST_RETURN(ret,
    146             "Failed to init sb16 driver: %s.", str_error(ret));
    147 
    148         ret = sb16_init_mpu(soft_state, (void*)mpu_regs, mpu_regs_size);
    149         if (ret == EOK) {
     125        rc = register_interrupt_handler(device, irq, irq_handler, &irq_code);
     126        if (rc != EOK) {
     127                ddf_log_error("Failed to register irq handler: %s.",
     128                    str_error(rc));
     129                goto error;
     130        }
     131
     132        handler_regd = true;
     133
     134        rc = sb_enable_interrupts(device);
     135        if (rc != EOK) {
     136                ddf_log_error("Failed to enable interrupts: %s.",
     137                    str_error(rc));
     138                goto error;
     139        }
     140
     141        rc = sb16_init_sb16(soft_state, (void*)sb_regs, sb_regs_size, device,
     142            dma8, dma16);
     143        if (rc != EOK) {
     144                ddf_log_error("Failed to init sb16 driver: %s.",
     145                    str_error(rc));
     146                goto error;
     147        }
     148
     149        rc = sb16_init_mpu(soft_state, (void*)mpu_regs, mpu_regs_size);
     150        if (rc == EOK) {
    150151                ddf_fun_t *mpu_fun =
    151152                    ddf_fun_create(device, fun_exposed, "midi");
    152153                if (mpu_fun) {
    153                         ret = ddf_fun_bind(mpu_fun);
    154                         if (ret != EOK)
     154                        rc = ddf_fun_bind(mpu_fun);
     155                        if (rc != EOK)
    155156                                ddf_log_error(
    156157                                    "Failed to bind midi function: %s.",
    157                                     str_error(ret));
     158                                    str_error(rc));
    158159                } else {
    159160                        ddf_log_error("Failed to create midi function.");
    160161                }
    161162        } else {
    162             ddf_log_warning("Failed to init mpu driver: %s.", str_error(ret));
     163                ddf_log_warning("Failed to init mpu driver: %s.",
     164                    str_error(rc));
    163165        }
    164166
    165167        /* MPU state does not matter */
    166168        return EOK;
     169error:
     170        if (handler_regd)
     171                unregister_interrupt_handler(device, irq);
     172        return rc;
    167173}
    168174
Note: See TracChangeset for help on using the changeset viewer.