Changeset b06d35a in mainline


Ignore:
Timestamp:
2013-01-26T20:37:07Z (11 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a6a5b25
Parents:
f4138ac
Message:

libusbdev: Rework pipes initialization.

Location:
uspace/lib/usbdev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/include/usb/dev/driver.h

    rf4138ac rb06d35a  
    155155    const usb_endpoint_description_t **);
    156156
    157 int usb_device_create_pipes(usb_device_connection_t *,
    158     const usb_endpoint_description_t **, const uint8_t *, size_t, int, int,
    159     usb_endpoint_mapping_t **, size_t *);
     157int usb_device_create_pipes(usb_device_t *usb_dev,
     158    const usb_endpoint_description_t **endpoints);
    160159void usb_device_destroy_pipes(usb_device_t *);
    161160
  • uspace/lib/usbdev/src/devdrv.c

    rf4138ac rb06d35a  
    4646 * @return Number of pipes (excluding default control pipe).
    4747 */
    48 static inline size_t count_other_pipes(
    49     const usb_endpoint_description_t **endpoints)
     48static inline size_t count_pipes(const usb_endpoint_description_t **endpoints)
    5049{
    5150        size_t count;
     
    9998
    10099        /* Create new pipes. */
    101         rc = usb_device_create_pipes(&usb_dev->wire, endpoints,
    102             usb_dev->descriptors.configuration,
    103             usb_dev->descriptors.configuration_size,
    104             usb_dev->interface_no, usb_dev->alternate_interfaces.current,
    105             &usb_dev->pipes, &usb_dev->pipes_count);
     100        rc = usb_device_create_pipes(usb_dev, endpoints);
    106101
    107102        return rc;
     
    172167 * @return Error code.
    173168 */
    174 int usb_device_create_pipes(usb_device_connection_t *wire,
    175     const usb_endpoint_description_t **endpoints,
    176     const uint8_t *config_descr, size_t config_descr_size,
    177     int interface_no, int interface_setting,
    178     usb_endpoint_mapping_t **pipes_ptr, size_t *pipes_count_ptr)
    179 {
    180         assert(wire != NULL);
    181         assert(config_descr != NULL);
    182         assert(config_descr_size > 0);
    183         assert(pipes_ptr != NULL);
    184 
    185         size_t i;
    186         int rc;
    187 
    188         const size_t pipe_count = count_other_pipes(endpoints);
     169int usb_device_create_pipes(usb_device_t *usb_dev,
     170    const usb_endpoint_description_t **endpoints)
     171{
     172        assert(usb_dev);
     173        assert(usb_dev->descriptors.configuration);
     174        assert(usb_dev->pipes == NULL);
     175        assert(usb_dev->pipes_count == 0);
     176
     177        size_t pipe_count = count_pipes(endpoints);
    189178        if (pipe_count == 0) {
    190                 if (pipes_count_ptr)
    191                         *pipes_count_ptr = pipe_count;
    192                 *pipes_ptr = NULL;
    193179                return EOK;
    194180        }
    195181
    196         usb_endpoint_mapping_t *pipes
    197             = calloc(pipe_count, sizeof(usb_endpoint_mapping_t));
     182        usb_endpoint_mapping_t *pipes =
     183            calloc(pipe_count, sizeof(usb_endpoint_mapping_t));
    198184        if (pipes == NULL) {
    199185                return ENOMEM;
     
    201187
    202188        /* Now initialize. */
    203         for (i = 0; i < pipe_count; i++) {
     189        for (size_t i = 0; i < pipe_count; i++) {
    204190                pipes[i].description = endpoints[i];
    205                 pipes[i].interface_no = interface_no;
    206                 pipes[i].interface_setting = interface_setting;
     191                pipes[i].interface_no = usb_dev->interface_no;
     192                pipes[i].interface_setting =
     193                    usb_dev->alternate_interfaces.current;
    207194        }
    208195
    209196        /* Find the mapping from configuration descriptor. */
    210         rc = usb_pipe_initialize_from_configuration(pipes, pipe_count,
    211             config_descr, config_descr_size, wire);
     197        int rc = usb_pipe_initialize_from_configuration(pipes, pipe_count,
     198            usb_dev->descriptors.configuration,
     199            usb_dev->descriptors.configuration_size, &usb_dev->wire);
    212200        if (rc != EOK) {
    213201                free(pipes);
     
    216204
    217205        /* Register created pipes. */
    218         for (i = 0; i < pipe_count; i++) {
     206        for (size_t i = 0; i < pipe_count; i++) {
    219207                if (pipes[i].present) {
    220208                        rc = usb_pipe_register(&pipes[i].pipe,
     
    226214        }
    227215
    228         *pipes_ptr = pipes;
    229         if (pipes_count_ptr != NULL) {
    230                 *pipes_count_ptr = pipe_count;
    231         }
     216        usb_dev->pipes = pipes;
     217        usb_dev->pipes_count = pipe_count;
    232218
    233219        return EOK;
     
    240226         */
    241227rollback_unregister_endpoints:
    242         for (i = 0; i < pipe_count; i++) {
     228        for (size_t i = 0; i < pipe_count; i++) {
    243229                if (pipes[i].present) {
    244230                        usb_pipe_unregister(&pipes[i].pipe);
     
    389375
    390376        /* Create and register other pipes than default control (EP 0) */
    391         rc = usb_device_create_pipes(&usb_dev->wire, endpoints,
    392             usb_dev->descriptors.configuration,
    393             usb_dev->descriptors.configuration_size,
    394             usb_dev->interface_no, usb_dev->alternate_interfaces.current,
    395             &usb_dev->pipes, &usb_dev->pipes_count);
     377        rc = usb_device_create_pipes(usb_dev, endpoints);
    396378        if (rc != EOK) {
    397379                usb_hc_connection_close(&usb_dev->hc_conn);
Note: See TracChangeset for help on using the changeset viewer.