Changes in / [9bff1ea:efa1599] in mainline


Ignore:
Location:
uspace/drv
Files:
3 edited

Legend:

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

    r9bff1ea refa1599  
    217217        instance->registers->rh_desc_a |= RHDA_NPS_FLAG;
    218218        instance->unfinished_interrupt_transfer = NULL;
    219         instance->interrupt_buffer = malloc((instance->port_count + 8)/8);
    220219        usb_log_info("OHCI root hub with %d ports.\n", instance->port_count);
    221220        return EOK;
     
    472471        size_t * buffer_size) {
    473472        int bit_count = instance->port_count + 1;
    474         (*buffer_size) = (bit_count+7 / 8);
    475 
    476         (*buffer) = instance->interrupt_buffer;//malloc(*buffer_size);
     473        (*buffer_size) = (bit_count / 8) + ((bit_count % 8 == 0) ? 0 : 1);
     474
     475        (*buffer) = malloc(*buffer_size);
    477476        uint8_t * bitmap = (uint8_t*) (*buffer);
    478477        uint32_t mask = (1 << (USB_HUB_FEATURE_C_HUB_LOCAL_POWER + 16))
  • uspace/drv/ohci/root_hub.h

    r9bff1ea refa1599  
    5656        /** interrupt transfer waiting for an actual interrupt to occur */
    5757        usb_transfer_batch_t * unfinished_interrupt_transfer;
    58         /** pre-allocated interrupt mask
    59          *
    60          * This is allocated when initializing instance, so that memory
    61          * allocation is not needed when processing request.
    62          */
    63         uint8_t * interrupt_buffer;
    6458} rh_t;
    6559
  • uspace/drv/usbhub/usbhub.c

    r9bff1ea refa1599  
    105105        }
    106106
     107        //usb_pipe_start_session(hub_info->control_pipe);
    107108        //set hub configuration
    108109        opResult = usb_hub_set_configuration(hub_info);
     
    121122                return opResult;
    122123        }
     124        //usb_pipe_end_session(hub_info->control_pipe);
     125
    123126
    124127        usb_log_debug("Creating 'hub' function in DDF.\n");
     
    173176leave:
    174177        /* FIXME: proper interval. */
    175         async_usleep(1000 * 250);
     178        async_usleep(1000 * 1000 * 10);
    176179
    177180        return true;
     
    215218        // get hub descriptor
    216219        usb_log_debug("creating serialized descriptor\n");
     220        //void * serialized_descriptor = malloc(USB_HUB_MAX_DESCRIPTOR_SIZE);
    217221        uint8_t serialized_descriptor[USB_HUB_MAX_DESCRIPTOR_SIZE];
    218222        usb_hub_descriptor_t * descriptor;
     
    249253            sizeof (usb_hub_port_t) * (hub_info->port_count + 1));
    250254        size_t port;
    251         for (port = 0; port < hub_info->port_count + 1; ++port) {
     255        for (port = 0; port < hub_info->port_count + 1; port++) {
    252256                usb_hub_port_init(&hub_info->ports[port]);
    253257        }
    254258        if(is_power_switched){
    255259                usb_log_debug("is_power_switched\n");
    256                
    257                 for (port = 1; port <= hub_info->port_count; ++port) {
    258                         usb_log_debug("powering port %d\n",port);
    259                         opResult = usb_hub_set_port_feature(hub_info->control_pipe,
    260                             port, USB_HUB_FEATURE_PORT_POWER);
    261                         if (opResult != EOK) {
    262                                 usb_log_error("cannot power on port %zu: %s.\n",
    263                                     port, str_error(opResult));
     260                if(has_individual_port_powering){
     261                        usb_log_debug("has_individual_port_powering\n");
     262                        for (port = 0; port < hub_info->port_count; port++) {
     263                                opResult = usb_hub_set_port_feature(hub_info->control_pipe,
     264                                    port+1, USB_HUB_FEATURE_PORT_POWER);
     265                                if (opResult != EOK) {
     266                                        usb_log_error("cannot power on port %zu: %s.\n",
     267                                            port+1, str_error(opResult));
     268                                }
    264269                        }
    265                 }
    266                 if(!has_individual_port_powering){
     270                }else{
    267271                        usb_log_debug("!has_individual_port_powering\n");
    268272                        opResult = usb_hub_set_feature(hub_info->control_pipe,
     
    277281        }
    278282        usb_log_debug2("freeing data\n");
     283        //free(serialized_descriptor);
     284        //free(descriptor->devices_removable);
    279285        free(descriptor);
    280286        return EOK;
     
    409415    usb_hub_status_t status) {
    410416        int opResult;
    411         if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {
     417        if (usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {
    412418                //restart power on hub
    413419                opResult = usb_hub_set_feature(hub_info->control_pipe,
     
    419425        } else {//power reestablished on hub- restart ports
    420426                size_t port;
    421                 for (port = 1; port <= hub_info->port_count; ++port) {
     427                for (port = 0; port < hub_info->port_count; ++port) {
    422428                        opResult = usb_hub_set_port_feature(
    423429                            hub_info->control_pipe,
     
    428434                        }
    429435                }
    430                 opResult = usb_hub_clear_feature(hub_info->control_pipe,
    431                     USB_HUB_FEATURE_C_HUB_LOCAL_POWER);
    432                 if (opResult != EOK) {
    433                         usb_log_error("cannnot clear hub power change flag: "
    434                             "%d\n",
    435                             opResult);
    436                 }
    437436        }
    438437        return opResult;
Note: See TracChangeset for help on using the changeset viewer.