Changeset 6b6e3ed3 in mainline for uspace/drv/ohci/hc.c


Ignore:
Timestamp:
2011-04-08T15:46:32Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
344925c
Parents:
f98b8269
Message:

Initialize transfer queues

File:
1 edited

Legend:

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

    rf98b8269 r6b6e3ed3  
    4747static void hc_gain_control(hc_t *instance);
    4848static void hc_init_hw(hc_t *instance);
     49static int hc_init_transfer_lists(hc_t *instance);
    4950/*----------------------------------------------------------------------------*/
    5051int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun)
     
    211212        assert((instance->registers->command_status & CS_HCR) == 0);
    212213        /* hc is now in suspend state */
     214        /* init queues */
     215        hc_init_transfer_lists(instance);
    213216        /* TODO: init HCCA block */
    214         /* TODO: init queues */
    215217        /* TODO: enable queues */
    216218        /* TODO: enable interrupts */
     
    220222        usb_log_info("OHCI HC up and running.\n");
    221223}
     224/*----------------------------------------------------------------------------*/
     225int hc_init_transfer_lists(hc_t *instance)
     226{
     227        assert(instance);
     228#define CHECK_RET_CLEAR_RETURN(ret, message...) \
     229        if (ret != EOK) { \
     230                usb_log_error(message); \
     231                transfer_list_fini(&instance->transfers_isochronous); \
     232                transfer_list_fini(&instance->transfers_interrupt); \
     233                transfer_list_fini(&instance->transfers_control); \
     234                transfer_list_fini(&instance->transfers_bulk); \
     235                return ret; \
     236        } else (void) 0
     237
     238        int ret;
     239        ret = transfer_list_init(&instance->transfers_bulk, "BULK");
     240        CHECK_RET_CLEAR_RETURN(ret, "Failed to init BULK list.");
     241
     242        ret = transfer_list_init(&instance->transfers_control, "CONTROL");
     243        CHECK_RET_CLEAR_RETURN(ret, "Failed to init CONTROL list.");
     244
     245        ret = transfer_list_init(&instance->transfers_interrupt, "INTERRUPT");
     246        CHECK_RET_CLEAR_RETURN(ret, "Failed to init INTERRUPT list.");
     247
     248        transfer_list_set_next(&instance->transfers_interrupt,
     249                &instance->transfers_isochronous);
     250
     251        /* Assign pointers to be used during scheduling */
     252        instance->transfers[USB_TRANSFER_INTERRUPT] =
     253          &instance->transfers_interrupt;
     254        instance->transfers[USB_TRANSFER_ISOCHRONOUS] =
     255          &instance->transfers_interrupt;
     256        instance->transfers[USB_TRANSFER_CONTROL] =
     257          &instance->transfers_control;
     258        instance->transfers[USB_TRANSFER_BULK] =
     259          &instance->transfers_bulk;
     260
     261        return EOK;
     262#undef CHECK_RET_CLEAR_RETURN
     263}
    222264/**
    223265 * @}
Note: See TracChangeset for help on using the changeset viewer.