Changeset 193da9d6 in mainline for uspace/drv/bus/usb/usbhub/usbhub.c


Ignore:
Timestamp:
2011-09-19T14:15:55Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7a05ced0
Parents:
34a0d17
Message:

usbhub: Rename usbhub_private.h ⇒ utils.h.

Add error checks, comments, and slight refactoring.

File:
1 edited

Legend:

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

    r34a0d17 r193da9d6  
    3838#include <str_error.h>
    3939#include <inttypes.h>
    40 
    41 #include <usb_iface.h>
     40#include <stdio.h>
     41
     42#include <usb/usb.h>
     43#include <usb/dev/pipes.h>
     44#include <usb/classes/classes.h>
    4245#include <usb/ddfiface.h>
    4346#include <usb/descriptor.h>
     
    4649#include <usb/classes/hub.h>
    4750#include <usb/dev/poll.h>
    48 #include <stdio.h>
     51#include <usb_iface.h>
    4952
    5053#include "usbhub.h"
    51 #include "usbhub_private.h"
     54#include "utils.h"
    5255#include "port_status.h"
    53 #include <usb/usb.h>
    54 #include <usb/dev/pipes.h>
    55 #include <usb/classes/classes.h>
    5656
    5757#define HUB_FNC_NAME "hub"
    5858
     59static int usb_set_first_configuration(usb_device_t *usb_device);
    5960static usb_hub_info_t * usb_hub_info_create(usb_device_t *usb_dev);
    6061static int usb_hub_process_hub_specific_info(usb_hub_info_t *hub_info);
    61 static int usb_hub_set_configuration(usb_hub_info_t *hub_info);
    6262static int usb_process_hub_over_current(usb_hub_info_t *hub_info,
    6363    usb_hub_status_t status);
     
    8585int usb_hub_add_device(usb_device_t *usb_dev)
    8686{
    87         if (!usb_dev) return EINVAL;
     87        assert(usb_dev);
     88        /* Create driver soft-state structure */
    8889        usb_hub_info_t *hub_info = usb_hub_info_create(usb_dev);
    89 
    90         //create hc connection
     90        if (hub_info == NULL) {
     91                usb_log_error("Failed to create hun driver structure.\n");
     92                return ENOMEM;
     93        }
     94
     95        /* Create hc connection */
    9196        usb_log_debug("Initializing USB wire abstraction.\n");
    9297        int opResult = usb_hc_connection_initialize_from_device(
     
    99104        }
    100105
    101         //set hub configuration
    102         opResult = usb_hub_set_configuration(hub_info);
     106        /* Set hub's first configuration. (There should be only one) */
     107        opResult = usb_set_first_configuration(usb_dev);
    103108        if (opResult != EOK) {
    104109                usb_log_error("Could not set hub configuration: %s\n",
     
    233238 * information. If there are non-removable devices, start initializing them.
    234239 * This function is hub-specific and should be run only after the hub is
    235  * configured using usb_hub_set_configuration function.
     240 * configured using usb_set_first_configuration function.
    236241 * @param hub_info hub representation
    237242 * @return error code
     
    239244int usb_hub_process_hub_specific_info(usb_hub_info_t *hub_info)
    240245{
     246        assert(hub_info);
    241247        // get hub descriptor
    242248        usb_log_debug("Retrieving descriptor\n");
     
    267273        hub_info->port_count = descriptor.ports_count;
    268274
     275        // TODO Why +1 ?
    269276        hub_info->ports =
    270277            malloc(sizeof(usb_hub_port_t) * (hub_info->port_count + 1));
     
    304311
    305312        } else {
    306                 usb_log_debug("Power not switched, not going to be powered\n");
     313                usb_log_debug("Power not switched, ports always powered\n");
    307314        }
    308315        return EOK;
     
    310317
    311318/**
    312  * Set configuration of hub
     319 * Set configuration of and USB device
    313320 *
    314321 * Check whether there is at least one configuration and sets the first one.
    315322 * This function should be run prior to running any hub-specific action.
    316  * @param hub_info hub representation
     323 * @param usb_device usb device representation
    317324 * @return error code
    318325 */
    319 static int usb_hub_set_configuration(usb_hub_info_t *hub_info)
     326static int usb_set_first_configuration(usb_device_t *usb_device)
    320327{
    321         //device descriptor
    322         const usb_standard_device_descriptor_t *std_descriptor
    323             = &hub_info->usb_device->descriptors.device;
    324         usb_log_debug("Hub has %d configurations\n",
    325             std_descriptor->configuration_count);
    326 
    327         if (std_descriptor->configuration_count < 1) {
     328        assert(usb_device);
     329        /* Get number of possible configurations from device descriptor */
     330        const size_t configuration_count =
     331            usb_device->descriptors.device.configuration_count;
     332        usb_log_debug("Hub has %d configurations.\n", configuration_count);
     333
     334        if (configuration_count < 1) {
    328335                usb_log_error("There are no configurations available\n");
    329336                return EINVAL;
    330337        }
    331338
     339        // TODO: Make sure that there is enough data and the cast is correct
    332340        usb_standard_configuration_descriptor_t *config_descriptor
    333341            = (usb_standard_configuration_descriptor_t *)
    334             hub_info->usb_device->descriptors.configuration;
    335 
    336         /* Set configuration. */
    337         int opResult = usb_request_set_configuration(
    338             &hub_info->usb_device->ctrl_pipe,
    339             config_descriptor->configuration_number);
    340 
     342            usb_device->descriptors.configuration;
     343
     344        /* Set configuration. Use the configuration that was in
     345         * usb_device->descriptors.configuration */
     346        const int opResult = usb_request_set_configuration(
     347            &usb_device->ctrl_pipe, config_descriptor->configuration_number);
    341348        if (opResult != EOK) {
    342349                usb_log_error("Failed to set hub configuration: %s.\n",
Note: See TracChangeset for help on using the changeset viewer.