Changeset 195890b in mainline


Ignore:
Timestamp:
2011-04-03T21:39:28Z (13 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3bb6b35
Parents:
6c399765
Message:

codelifting

Location:
uspace/drv
Files:
3 edited

Legend:

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

    r6c399765 r195890b  
    4747 *      standart device descriptor for ohci root hub
    4848 */
    49 static const usb_standard_device_descriptor_t ohci_rh_device_descriptor =
    50 {
    51                 .configuration_count = 1,
    52                 .descriptor_type = USB_DESCTYPE_DEVICE,
    53                 .device_class = USB_CLASS_HUB,
    54                 .device_protocol = 0,
    55                 .device_subclass = 0,
    56                 .device_version = 0,
    57                 .length = sizeof(usb_standard_device_descriptor_t),
    58                 /// \TODO this value is guessed
    59                 .max_packet_size = 8,
    60                 .vendor_id = 0x16db,
    61                 .product_id = 0x0001,
    62                 /// \TODO these values migt be different
    63                 .str_serial_number = 0,
    64                 .usb_spec_version = 0x110,
     49static const usb_standard_device_descriptor_t ohci_rh_device_descriptor = {
     50        .configuration_count = 1,
     51        .descriptor_type = USB_DESCTYPE_DEVICE,
     52        .device_class = USB_CLASS_HUB,
     53        .device_protocol = 0,
     54        .device_subclass = 0,
     55        .device_version = 0,
     56        .length = sizeof (usb_standard_device_descriptor_t),
     57        /// \TODO this value is guessed
     58        .max_packet_size = 8,
     59        .vendor_id = 0x16db,
     60        .product_id = 0x0001,
     61        /// \TODO these values migt be different
     62        .str_serial_number = 0,
     63        .usb_spec_version = 0x110,
    6564};
    6665
     
    6968 * for ohci root hubs
    7069 */
    71 static const usb_standard_configuration_descriptor_t ohci_rh_conf_descriptor =
    72 {
     70static const usb_standard_configuration_descriptor_t ohci_rh_conf_descriptor = {
    7371        /// \TODO some values are default or guessed
    74         .attributes = 1<<7,
     72        .attributes = 1 << 7,
    7573        .configuration_number = 1,
    7674        .descriptor_type = USB_DESCTYPE_CONFIGURATION,
    7775        .interface_count = 1,
    78         .length = sizeof(usb_standard_configuration_descriptor_t),
     76        .length = sizeof (usb_standard_configuration_descriptor_t),
    7977        .max_power = 100,
    8078        .str_configuration = 0,
     
    8482 * standart ohci root hub interface descriptor
    8583 */
    86 static const usb_standard_interface_descriptor_t ohci_rh_iface_descriptor =
    87 {
     84static const usb_standard_interface_descriptor_t ohci_rh_iface_descriptor = {
    8885        .alternate_setting = 0,
    8986        .descriptor_type = USB_DESCTYPE_INTERFACE,
     
    9491        .interface_protocol = 0,
    9592        .interface_subclass = 0,
    96         .length = sizeof(usb_standard_interface_descriptor_t),
     93        .length = sizeof (usb_standard_interface_descriptor_t),
    9794        .str_interface = 0,
    9895};
     
    10198 * standart ohci root hub endpoint descriptor
    10299 */
    103 static const usb_standard_endpoint_descriptor_t ohci_rh_ep_descriptor =
    104 {
     100static const usb_standard_endpoint_descriptor_t ohci_rh_ep_descriptor = {
    105101        .attributes = USB_TRANSFER_INTERRUPT,
    106102        .descriptor_type = USB_DESCTYPE_ENDPOINT,
    107         .endpoint_address = 1 + (1<<7),
    108         .length = sizeof(usb_standard_endpoint_descriptor_t),
     103        .endpoint_address = 1 + (1 << 7),
     104        .length = sizeof (usb_standard_endpoint_descriptor_t),
    109105        .max_packet_size = 8,
    110106        .poll_interval = 255,
     
    113109static const uint32_t hub_clear_feature_valid_mask =
    114110        (1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER) +
    115         (1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);
     111(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);
    116112
    117113static const uint32_t hub_clear_feature_by_writing_one_mask =
     
    121117        (1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);
    122118
    123        
     119
    124120static const uint32_t hub_set_feature_direct_mask =
    125121        (1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);
     
    127123static const uint32_t port_set_feature_valid_mask =
    128124        (1 << USB_HUB_FEATURE_PORT_ENABLE) +
    129         (1 << USB_HUB_FEATURE_PORT_SUSPEND) +
    130         (1 << USB_HUB_FEATURE_PORT_RESET) +
    131         (1 << USB_HUB_FEATURE_PORT_POWER);
     125(1 << USB_HUB_FEATURE_PORT_SUSPEND) +
     126(1 << USB_HUB_FEATURE_PORT_RESET) +
     127(1 << USB_HUB_FEATURE_PORT_POWER);
    132128
    133129static const uint32_t port_clear_feature_valid_mask =
    134130        (1 << USB_HUB_FEATURE_PORT_CONNECTION) +
    135         (1 << USB_HUB_FEATURE_PORT_SUSPEND) +
    136         (1 << USB_HUB_FEATURE_PORT_OVER_CURRENT) +
    137         (1 << USB_HUB_FEATURE_PORT_POWER) +
    138         (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) +
    139         (1 << USB_HUB_FEATURE_C_PORT_ENABLE) +
    140         (1 << USB_HUB_FEATURE_C_PORT_SUSPEND) +
    141         (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) +
    142         (1 << USB_HUB_FEATURE_C_PORT_RESET);
    143 //note that USB_HUB_FEATURE_PORT_POWER bit is translated into USB_HUB_FEATURE_PORT_LOW_SPEED
    144 
    145 
    146 
     131(1 << USB_HUB_FEATURE_PORT_SUSPEND) +
     132(1 << USB_HUB_FEATURE_PORT_OVER_CURRENT) +
     133(1 << USB_HUB_FEATURE_PORT_POWER) +
     134(1 << USB_HUB_FEATURE_C_PORT_CONNECTION) +
     135(1 << USB_HUB_FEATURE_C_PORT_ENABLE) +
     136(1 << USB_HUB_FEATURE_C_PORT_SUSPEND) +
     137(1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) +
     138(1 << USB_HUB_FEATURE_C_PORT_RESET);
     139//note that USB_HUB_FEATURE_PORT_POWER bit is translated into
     140//USB_HUB_FEATURE_PORT_LOW_SPEED
     141
     142static void usb_create_serialized_hub_descriptor(rh_t *instance,
     143        uint8_t ** out_result,
     144        size_t * out_size);
     145
     146static void rh_init_descriptors(rh_t *instance);
     147
     148static int process_get_port_status_request(rh_t *instance, uint16_t port,
     149        usb_transfer_batch_t * request);
     150
     151static int process_get_hub_status_request(rh_t *instance,
     152        usb_transfer_batch_t * request);
     153
     154static int process_get_status_request(rh_t *instance,
     155        usb_transfer_batch_t * request);
     156
     157static void create_interrupt_mask(rh_t *instance, void ** buffer,
     158        size_t * buffer_size);
     159
     160static int process_get_descriptor_request(rh_t *instance,
     161        usb_transfer_batch_t *request);
     162
     163static int process_get_configuration_request(rh_t *instance,
     164        usb_transfer_batch_t *request);
     165
     166static int process_hub_feature_set_request(rh_t *instance, uint16_t feature);
     167
     168
     169static int process_hub_feature_clear_request(rh_t *instance,
     170        uint16_t feature);
     171
     172static int process_port_feature_set_request(rh_t *instance,
     173        uint16_t feature, uint16_t port);
     174
     175static int process_port_feature_clear_request(rh_t *instance,
     176        uint16_t feature, uint16_t port);
     177
     178static int process_address_set_request(rh_t *instance,
     179        uint16_t address);
     180
     181static int process_request_with_output(rh_t *instance,
     182        usb_transfer_batch_t *request);
     183
     184static int process_request_with_input(rh_t *instance,
     185        usb_transfer_batch_t *request);
     186
     187static int process_request_without_data(rh_t *instance,
     188        usb_transfer_batch_t *request);
     189
     190static int process_ctrl_request(rh_t *instance, usb_transfer_batch_t *request);
     191
     192
     193
     194
     195
     196/** Root hub initialization
     197 * @return Error code.
     198 */
     199int rh_init(rh_t *instance, ddf_dev_t *dev, ohci_regs_t *regs) {
     200        assert(instance);
     201        //instance->address = -1;
     202        instance->registers = regs;
     203        instance->device = dev;
     204        instance->port_count = instance->registers->rh_desc_a & 0xff;
     205        rh_init_descriptors(instance);
     206        /// \TODO set port power mode
     207
     208
     209        usb_log_info("OHCI root hub with %d ports.\n", instance->port_count);
     210
     211        //start generic usb hub driver
     212
     213        /* TODO: implement */
     214        return EOK;
     215}
     216/*----------------------------------------------------------------------------*/
     217
     218/**
     219 * process root hub request
     220 *
     221 * @param instance root hub instance
     222 * @param request structure containing both request and response information
     223 * @return error code
     224 */
     225int rh_request(rh_t *instance, usb_transfer_batch_t *request) {
     226        assert(instance);
     227        assert(request);
     228        int opResult;
     229        if (request->transfer_type == USB_TRANSFER_CONTROL) {
     230                usb_log_info("Root hub got CONTROL packet\n");
     231                opResult = process_ctrl_request(instance, request);
     232        } else if (request->transfer_type == USB_TRANSFER_INTERRUPT) {
     233                usb_log_info("Root hub got INTERRUPT packet\n");
     234                void * buffer;
     235                create_interrupt_mask(instance, &buffer,
     236                        &(request->transfered_size));
     237                memcpy(request->transport_buffer, buffer,
     238                        request->transfered_size);
     239                opResult = EOK;
     240        } else {
     241                opResult = EINVAL;
     242        }
     243        usb_transfer_batch_finish(request, opResult);
     244        return EOK;
     245}
     246
     247/*----------------------------------------------------------------------------*/
     248
     249
     250void rh_interrupt(rh_t *instance) {
     251        usb_log_info("Whoa whoa wait, I`m not supposed to receive any "
     252                "interrupts, am I?\n");
     253        /* TODO: implement? */
     254}
     255/*----------------------------------------------------------------------------*/
    147256
    148257/**
     
    157266 */
    158267static void usb_create_serialized_hub_descriptor(rh_t *instance,
    159                 uint8_t ** out_result,
    160                 size_t * out_size) {
     268        uint8_t ** out_result,
     269        size_t * out_size) {
    161270        //base size
    162271        size_t size = 7;
    163272        //variable size according to port count
    164273        size_t var_size = instance->port_count / 8 +
    165                         ((instance->port_count % 8 > 0) ? 1 : 0);
     274                ((instance->port_count % 8 > 0) ? 1 : 0);
    166275        size += 2 * var_size;
    167276        uint8_t * result = (uint8_t*) malloc(size);
    168         bzero(result,size);
     277        bzero(result, size);
    169278        //size
    170279        result[0] = size;
     
    174283        uint32_t hub_desc_reg = instance->registers->rh_desc_a;
    175284        result[3] =
    176                         ((hub_desc_reg >> 8) %2) +
    177                         (((hub_desc_reg >> 9) %2) << 1) +
    178                         (((hub_desc_reg >> 10) %2) << 2) +
    179                         (((hub_desc_reg >> 11) %2) << 3) +
    180                         (((hub_desc_reg >> 12) %2) << 4);
     285                ((hub_desc_reg >> 8) % 2) +
     286                (((hub_desc_reg >> 9) % 2) << 1) +
     287                (((hub_desc_reg >> 10) % 2) << 2) +
     288                (((hub_desc_reg >> 11) % 2) << 3) +
     289                (((hub_desc_reg >> 12) % 2) << 4);
    181290        result[4] = 0;
    182291        result[5] = /*descriptor->pwr_on_2_good_time*/ 50;
     
    185294        int port;
    186295        for (port = 1; port <= instance->port_count; ++port) {
    187                 result[7 + port/8] +=
    188                                 ((instance->registers->rh_desc_b >> port)%2) << (port%8);
     296                uint8_t is_non_removable =
     297                        instance->registers->rh_desc_b >> port % 2;
     298                result[7 + port / 8] +=
     299                        is_non_removable << (port % 8);
    189300        }
    190301        size_t i;
     
    195306        (*out_size) = size;
    196307}
    197 
     308/*----------------------------------------------------------------------------*/
    198309
    199310/** initialize hub descriptors
     
    203314 * @instance root hub instance
    204315 */
    205 static void rh_init_descriptors(rh_t *instance){
     316static void rh_init_descriptors(rh_t *instance) {
    206317        memcpy(&instance->descriptors.device, &ohci_rh_device_descriptor,
    207                 sizeof(ohci_rh_device_descriptor)
    208         );
     318                sizeof (ohci_rh_device_descriptor)
     319                );
    209320        usb_standard_configuration_descriptor_t descriptor;
    210         memcpy(&descriptor,&ohci_rh_conf_descriptor,
    211                         sizeof(ohci_rh_conf_descriptor));
     321        memcpy(&descriptor, &ohci_rh_conf_descriptor,
     322                sizeof (ohci_rh_conf_descriptor));
    212323        uint8_t * hub_descriptor;
    213324        size_t hub_desc_size;
    214325        usb_create_serialized_hub_descriptor(instance, &hub_descriptor,
    215                         &hub_desc_size);
     326                &hub_desc_size);
    216327
    217328        descriptor.total_length =
    218                         sizeof(usb_standard_configuration_descriptor_t)+
    219                         sizeof(usb_standard_endpoint_descriptor_t)+
    220                         sizeof(usb_standard_interface_descriptor_t)+
    221                         hub_desc_size;
    222        
     329                sizeof (usb_standard_configuration_descriptor_t) +
     330                sizeof (usb_standard_endpoint_descriptor_t) +
     331                sizeof (usb_standard_interface_descriptor_t) +
     332                hub_desc_size;
     333
    223334        uint8_t * full_config_descriptor =
    224                         (uint8_t*) malloc(descriptor.total_length);
    225         memcpy(full_config_descriptor, &descriptor, sizeof(descriptor));
    226         memcpy(full_config_descriptor + sizeof(descriptor),
    227                         &ohci_rh_iface_descriptor, sizeof(ohci_rh_iface_descriptor));
    228         memcpy(full_config_descriptor + sizeof(descriptor) +
    229                                 sizeof(ohci_rh_iface_descriptor),
    230                         &ohci_rh_ep_descriptor, sizeof(ohci_rh_ep_descriptor));
    231         memcpy(full_config_descriptor + sizeof(descriptor) +
    232                                 sizeof(ohci_rh_iface_descriptor) +
    233                                 sizeof(ohci_rh_ep_descriptor),
    234                         hub_descriptor, hub_desc_size);
    235        
     335                (uint8_t*) malloc(descriptor.total_length);
     336        memcpy(full_config_descriptor, &descriptor, sizeof (descriptor));
     337        memcpy(full_config_descriptor + sizeof (descriptor),
     338                &ohci_rh_iface_descriptor, sizeof (ohci_rh_iface_descriptor));
     339        memcpy(full_config_descriptor + sizeof (descriptor) +
     340                sizeof (ohci_rh_iface_descriptor),
     341                &ohci_rh_ep_descriptor, sizeof (ohci_rh_ep_descriptor));
     342        memcpy(full_config_descriptor + sizeof (descriptor) +
     343                sizeof (ohci_rh_iface_descriptor) +
     344                sizeof (ohci_rh_ep_descriptor),
     345                hub_descriptor, hub_desc_size);
     346
    236347        instance->descriptors.configuration = full_config_descriptor;
    237348        instance->descriptors.configuration_size = descriptor.total_length;
    238349}
    239 
    240 /** Root hub initialization
    241  * @return Error code.
    242  */
    243 int rh_init(rh_t *instance, ddf_dev_t *dev, ohci_regs_t *regs)
    244 {
    245         assert(instance);
    246         //instance->address = -1;
    247         instance->registers = regs;
    248         instance->device = dev;
    249         instance->port_count = instance->registers->rh_desc_a & 0xff;
    250         rh_init_descriptors(instance);
    251         /// \TODO set port power mode
    252 
    253 
    254         usb_log_info("OHCI root hub with %d ports.\n", instance->port_count);
    255 
    256         //start generic usb hub driver
    257        
    258         /* TODO: implement */
    259         return EOK;
    260 }
    261350/*----------------------------------------------------------------------------*/
    262351
     
    272361 */
    273362static int process_get_port_status_request(rh_t *instance, uint16_t port,
    274                 usb_transfer_batch_t * request){
    275         if(port<1 || port>instance->port_count)
    276                 return EINVAL;
    277         uint32_t * uint32_buffer = (uint32_t*)request->transport_buffer;
     363        usb_transfer_batch_t * request) {
     364        if (port < 1 || port > instance->port_count)
     365                return EINVAL;
     366        uint32_t * uint32_buffer = (uint32_t*) request->transport_buffer;
    278367        request->transfered_size = 4;
    279         uint32_buffer[0] = instance->registers->rh_port_status[port -1];
     368        uint32_buffer[0] = instance->registers->rh_port_status[port - 1];
    280369#if 0
    281370        int i;
    282         for(i=0;i<instance->port_count;++i){
     371        for (i = 0; i < instance->port_count; ++i) {
    283372                usb_log_debug("port status %d,x%x\n",
    284                                 instance->registers->rh_port_status[i],
    285                                 instance->registers->rh_port_status[i]);
     373                        instance->registers->rh_port_status[i],
     374                        instance->registers->rh_port_status[i]);
    286375        }
    287376#endif
    288377        return EOK;
    289378}
     379/*----------------------------------------------------------------------------*/
    290380
    291381/**
     
    299389 */
    300390static int process_get_hub_status_request(rh_t *instance,
    301                 usb_transfer_batch_t * request){
    302         uint32_t * uint32_buffer = (uint32_t*)request->transport_buffer;
     391        usb_transfer_batch_t * request) {
     392        uint32_t * uint32_buffer = (uint32_t*) request->transport_buffer;
    303393        //bits, 0,1,16,17
    304394        request->transfered_size = 4;
    305         uint32_t mask = 1 & (1<<1) & (1<<16) & (1<<17);
     395        uint32_t mask = 1 & (1 << 1) & (1 << 16) & (1 << 17);
    306396        uint32_buffer[0] = mask & instance->registers->rh_status;
    307397        return EOK;
    308398}
    309 
    310 
     399/*----------------------------------------------------------------------------*/
    311400
    312401/**
     
    320409 */
    321410static int process_get_status_request(rh_t *instance,
    322                 usb_transfer_batch_t * request)
    323 {
     411        usb_transfer_batch_t * request) {
    324412        size_t buffer_size = request->buffer_size;
    325413        usb_device_request_setup_packet_t * request_packet =
    326                         (usb_device_request_setup_packet_t*)
    327                         request->setup_buffer;
     414                (usb_device_request_setup_packet_t*)
     415                request->setup_buffer;
    328416
    329417        usb_hub_bm_request_type_t request_type = request_packet->request_type;
    330         if(buffer_size<4/*request_packet->length*/){///\TODO
     418        if (buffer_size < 4/*request_packet->length*/) {///\TODO
    331419                usb_log_warning("requested more data than buffer size\n");
    332420                return EINVAL;
    333421        }
    334422
    335         if(request_type == USB_HUB_REQ_TYPE_GET_HUB_STATUS)
     423        if (request_type == USB_HUB_REQ_TYPE_GET_HUB_STATUS)
    336424                return process_get_hub_status_request(instance, request);
    337         if(request_type == USB_HUB_REQ_TYPE_GET_PORT_STATUS)
    338                 return process_get_port_status_request(instance, request_packet->index,
    339                                 request);
     425        if (request_type == USB_HUB_REQ_TYPE_GET_PORT_STATUS)
     426                return process_get_port_status_request(instance,
     427                request_packet->index,
     428                request);
    340429        return ENOTSUP;
    341430}
     431/*----------------------------------------------------------------------------*/
    342432
    343433/**
     
    353443 */
    354444static void create_interrupt_mask(rh_t *instance, void ** buffer,
    355                 size_t * buffer_size){
     445        size_t * buffer_size) {
    356446        int bit_count = instance->port_count + 1;
    357         (*buffer_size) = (bit_count / 8) + ((bit_count%8==0)?0:1);
    358        
     447        (*buffer_size) = (bit_count / 8) + ((bit_count % 8 == 0) ? 0 : 1);
     448
    359449        (*buffer) = malloc(*buffer_size);
    360         uint8_t * bitmap = (uint8_t*)(*buffer);
    361         uint32_t mask = (1<<(USB_HUB_FEATURE_C_HUB_LOCAL_POWER+16))
    362                         | (1<<(USB_HUB_FEATURE_C_HUB_OVER_CURRENT+16));
    363         bzero(bitmap,(*buffer_size));
    364         if(instance->registers->rh_status & mask){
     450        uint8_t * bitmap = (uint8_t*) (*buffer);
     451        uint32_t mask = (1 << (USB_HUB_FEATURE_C_HUB_LOCAL_POWER + 16))
     452                | (1 << (USB_HUB_FEATURE_C_HUB_OVER_CURRENT + 16));
     453        bzero(bitmap, (*buffer_size));
     454        if (instance->registers->rh_status & mask) {
    365455                bitmap[0] = 1;
    366456        }
     
    368458        mask = 0;
    369459        int i;
    370         for(i=16;i<=20;++i){
    371                 mask += 1<<i;
    372         }
    373         for(port = 1; port<=instance->port_count;++port){
    374                 if(mask & instance->registers->rh_port_status[port-1]){
    375                         bitmap[(port)/8] += 1<<(port%8);
    376                 }
    377         }
    378 }
    379  
     460        for (i = 16; i <= 20; ++i) {
     461                mask += 1 << i;
     462        }
     463        for (port = 1; port <= instance->port_count; ++port) {
     464                if (mask & instance->registers->rh_port_status[port - 1]) {
     465                        bitmap[(port) / 8] += 1 << (port % 8);
     466                }
     467        }
     468}
     469/*----------------------------------------------------------------------------*/
     470
    380471/**
    381472 * create answer to a descriptor request
     
    388479 */
    389480static int process_get_descriptor_request(rh_t *instance,
    390                 usb_transfer_batch_t *request){
     481        usb_transfer_batch_t *request) {
    391482        usb_device_request_setup_packet_t * setup_request =
    392                         (usb_device_request_setup_packet_t*)request->setup_buffer;
     483                (usb_device_request_setup_packet_t*) request->setup_buffer;
    393484        size_t size;
    394485        const void * result_descriptor = NULL;
    395486        const uint16_t setup_request_value = setup_request->value_high;
    396                         //(setup_request->value_low << 8);
     487        //(setup_request->value_low << 8);
    397488        bool del = false;
    398         switch (setup_request_value)
    399         {
    400                 case USB_DESCTYPE_HUB: {
     489        switch (setup_request_value) {
     490                case USB_DESCTYPE_HUB:
     491                {
    401492                        uint8_t * descriptor;
    402493                        usb_create_serialized_hub_descriptor(
    403494                                instance, &descriptor, &size);
    404495                        result_descriptor = descriptor;
    405                         if(result_descriptor) del = true;
     496                        if (result_descriptor) del = true;
    406497                        break;
    407498                }
    408                 case USB_DESCTYPE_DEVICE: {
     499                case USB_DESCTYPE_DEVICE:
     500                {
    409501                        usb_log_debug("USB_DESCTYPE_DEVICE\n");
    410502                        result_descriptor = &ohci_rh_device_descriptor;
    411                         size = sizeof(ohci_rh_device_descriptor);
     503                        size = sizeof (ohci_rh_device_descriptor);
    412504                        break;
    413505                }
    414                 case USB_DESCTYPE_CONFIGURATION: {
     506                case USB_DESCTYPE_CONFIGURATION:
     507                {
    415508                        usb_log_debug("USB_DESCTYPE_CONFIGURATION\n");
    416509                        result_descriptor = instance->descriptors.configuration;
     
    418511                        break;
    419512                }
    420                 case USB_DESCTYPE_INTERFACE: {
     513                case USB_DESCTYPE_INTERFACE:
     514                {
    421515                        usb_log_debug("USB_DESCTYPE_INTERFACE\n");
    422516                        result_descriptor = &ohci_rh_iface_descriptor;
    423                         size = sizeof(ohci_rh_iface_descriptor);
     517                        size = sizeof (ohci_rh_iface_descriptor);
    424518                        break;
    425519                }
    426                 case USB_DESCTYPE_ENDPOINT: {
     520                case USB_DESCTYPE_ENDPOINT:
     521                {
    427522                        usb_log_debug("USB_DESCTYPE_ENDPOINT\n");
    428523                        result_descriptor = &ohci_rh_ep_descriptor;
    429                         size = sizeof(ohci_rh_ep_descriptor);
     524                        size = sizeof (ohci_rh_ep_descriptor);
    430525                        break;
    431526                }
    432                 default: {
    433                         usb_log_debug("USB_DESCTYPE_EINVAL %d \n",setup_request->value);
    434                         usb_log_debug("\ttype %d\n\trequest %d\n\tvalue %d\n\tindex %d\n\tlen %d\n ",
    435                                         setup_request->request_type,
    436                                         setup_request->request,
    437                                         setup_request_value,
    438                                         setup_request->index,
    439                                         setup_request->length
    440                                         );
     527                default:
     528                {
     529                        usb_log_debug("USB_DESCTYPE_EINVAL %d \n",
     530                                setup_request->value);
     531                        usb_log_debug("\ttype %d\n\trequest %d\n\tvalue "
     532                                "%d\n\tindex %d\n\tlen %d\n ",
     533                                setup_request->request_type,
     534                                setup_request->request,
     535                                setup_request_value,
     536                                setup_request->index,
     537                                setup_request->length
     538                                );
    441539                        return EINVAL;
    442540                }
    443541        }
    444         if(request->buffer_size < size){
     542        if (request->buffer_size < size) {
    445543                size = request->buffer_size;
    446544        }
    447545        request->transfered_size = size;
    448         memcpy(request->transport_buffer,result_descriptor,size);
     546        memcpy(request->transport_buffer, result_descriptor, size);
    449547        if (del)
    450548                free(result_descriptor);
    451549        return EOK;
    452550}
     551/*----------------------------------------------------------------------------*/
    453552
    454553/**
     
    460559 * @return error code
    461560 */
    462 static int process_get_configuration_request(rh_t *instance, 
    463                 usb_transfer_batch_t *request){
     561static int process_get_configuration_request(rh_t *instance,
     562        usb_transfer_batch_t *request) {
    464563        //set and get configuration requests do not have any meaning, only dummy
    465564        //values are returned
    466         if(request->buffer_size != 1)
     565        if (request->buffer_size != 1)
    467566                return EINVAL;
    468567        request->transport_buffer[0] = 1;
     
    470569        return EOK;
    471570}
     571/*----------------------------------------------------------------------------*/
    472572
    473573/**
    474574 * process feature-enabling request on hub
    475  * 
     575 *
    476576 * @param instance root hub instance
    477577 * @param feature feature selector
     
    479579 */
    480580static int process_hub_feature_set_request(rh_t *instance,
    481                 uint16_t feature){
    482         if(! ((1<<feature) & hub_set_feature_valid_mask))
     581        uint16_t feature) {
     582        if (!((1 << feature) & hub_set_feature_valid_mask))
    483583                return EINVAL;
    484584        instance->registers->rh_status =
    485                         (instance->registers->rh_status | (1<<feature))
    486                         & (~ hub_clear_feature_by_writing_one_mask);
    487         return EOK;
    488 }
     585                (instance->registers->rh_status | (1 << feature))
     586                & (~hub_clear_feature_by_writing_one_mask);
     587        return EOK;
     588}
     589/*----------------------------------------------------------------------------*/
    489590
    490591/**
     
    496597 */
    497598static int process_hub_feature_clear_request(rh_t *instance,
    498                 uint16_t feature){
    499         if(! ((1<<feature) & hub_clear_feature_valid_mask))
     599        uint16_t feature) {
     600        if (!((1 << feature) & hub_clear_feature_valid_mask))
    500601                return EINVAL;
    501602        //is the feature cleared directly?
    502         if ((1<<feature) & hub_set_feature_direct_mask){
     603        if ((1 << feature) & hub_set_feature_direct_mask) {
    503604                instance->registers->rh_status =
    504                         (instance->registers->rh_status & (~(1<<feature)))
    505                         & (~ hub_clear_feature_by_writing_one_mask);
    506         }else{//the feature is cleared by writing '1'
     605                        (instance->registers->rh_status & (~(1 << feature)))
     606                        & (~hub_clear_feature_by_writing_one_mask);
     607        } else {//the feature is cleared by writing '1'
    507608                instance->registers->rh_status =
    508                                 (instance->registers->rh_status
    509                                 & (~ hub_clear_feature_by_writing_one_mask))
    510                                 | (1<<feature);
    511         }
    512         return EOK;
    513 }
    514 
    515 
     609                        (instance->registers->rh_status
     610                        & (~hub_clear_feature_by_writing_one_mask))
     611                        | (1 << feature);
     612        }
     613        return EOK;
     614}
     615/*----------------------------------------------------------------------------*/
    516616
    517617/**
    518618 * process feature-enabling request on hub
    519  * 
     619 *
    520620 * @param instance root hub instance
    521621 * @param feature feature selector
     
    525625 */
    526626static int process_port_feature_set_request(rh_t *instance,
    527                 uint16_t feature, uint16_t port){
    528         if(!((1<<feature) & port_set_feature_valid_mask))
    529                 return EINVAL;
    530         if(port<1 || port>instance->port_count)
     627        uint16_t feature, uint16_t port) {
     628        if (!((1 << feature) & port_set_feature_valid_mask))
     629                return EINVAL;
     630        if (port < 1 || port > instance->port_count)
    531631                return EINVAL;
    532632        instance->registers->rh_port_status[port - 1] =
    533                         (instance->registers->rh_port_status[port - 1] | (1<<feature))
    534                         & (~port_clear_feature_valid_mask);
     633                (instance->registers->rh_port_status[port - 1] | (1 << feature))
     634                & (~port_clear_feature_valid_mask);
    535635        /// \TODO any error?
    536636        return EOK;
    537637}
     638/*----------------------------------------------------------------------------*/
    538639
    539640/**
     
    547648 */
    548649static int process_port_feature_clear_request(rh_t *instance,
    549                 uint16_t feature, uint16_t port){
    550         if(!((1<<feature) & port_clear_feature_valid_mask))
    551                 return EINVAL;
    552         if(port<1 || port>instance->port_count)
    553                 return EINVAL;
    554         if(feature == USB_HUB_FEATURE_PORT_POWER)
     650        uint16_t feature, uint16_t port) {
     651        if (!((1 << feature) & port_clear_feature_valid_mask))
     652                return EINVAL;
     653        if (port < 1 || port > instance->port_count)
     654                return EINVAL;
     655        if (feature == USB_HUB_FEATURE_PORT_POWER)
    555656                feature = USB_HUB_FEATURE_PORT_LOW_SPEED;
    556         if(feature == USB_HUB_FEATURE_PORT_SUSPEND)
     657        if (feature == USB_HUB_FEATURE_PORT_SUSPEND)
    557658                feature = USB_HUB_FEATURE_PORT_OVER_CURRENT;
    558659        instance->registers->rh_port_status[port - 1] =
    559                         (instance->registers->rh_port_status[port - 1]
    560                         & (~port_clear_feature_valid_mask))
    561                         | (1<<feature);
     660                (instance->registers->rh_port_status[port - 1]
     661                & (~port_clear_feature_valid_mask))
     662                | (1 << feature);
    562663        /// \TODO any error?
    563664        return EOK;
    564665}
    565 
     666/*----------------------------------------------------------------------------*/
    566667
    567668/**
    568669 * register address to this device
    569  * 
     670 *
    570671 * @param instance root hub instance
    571672 * @param address new address
     
    573674 */
    574675static int process_address_set_request(rh_t *instance,
    575                 uint16_t address){
     676        uint16_t address) {
    576677        instance->address = address;
    577678        return EOK;
    578679}
     680/*----------------------------------------------------------------------------*/
    579681
    580682/**
     
    588690 */
    589691static int process_request_with_output(rh_t *instance,
    590                 usb_transfer_batch_t *request){
     692        usb_transfer_batch_t *request) {
    591693        usb_device_request_setup_packet_t * setup_request =
    592                         (usb_device_request_setup_packet_t*)request->setup_buffer;
    593         if(setup_request->request == USB_DEVREQ_GET_STATUS){
     694                (usb_device_request_setup_packet_t*) request->setup_buffer;
     695        if (setup_request->request == USB_DEVREQ_GET_STATUS) {
    594696                usb_log_debug("USB_DEVREQ_GET_STATUS\n");
    595697                return process_get_status_request(instance, request);
    596698        }
    597         if(setup_request->request == USB_DEVREQ_GET_DESCRIPTOR){
     699        if (setup_request->request == USB_DEVREQ_GET_DESCRIPTOR) {
    598700                usb_log_debug("USB_DEVREQ_GET_DESCRIPTOR\n");
    599701                return process_get_descriptor_request(instance, request);
    600702        }
    601         if(setup_request->request == USB_DEVREQ_GET_CONFIGURATION){
     703        if (setup_request->request == USB_DEVREQ_GET_CONFIGURATION) {
    602704                usb_log_debug("USB_DEVREQ_GET_CONFIGURATION\n");
    603705                return process_get_configuration_request(instance, request);
     
    605707        return ENOTSUP;
    606708}
     709/*----------------------------------------------------------------------------*/
    607710
    608711/**
     
    616719 */
    617720static int process_request_with_input(rh_t *instance,
    618                 usb_transfer_batch_t *request){
     721        usb_transfer_batch_t *request) {
    619722        usb_device_request_setup_packet_t * setup_request =
    620                         (usb_device_request_setup_packet_t*)request->setup_buffer;
     723                (usb_device_request_setup_packet_t*) request->setup_buffer;
    621724        request->transfered_size = 0;
    622         if(setup_request->request == USB_DEVREQ_SET_DESCRIPTOR){
     725        if (setup_request->request == USB_DEVREQ_SET_DESCRIPTOR) {
    623726                return ENOTSUP;
    624727        }
    625         if(setup_request->request == USB_DEVREQ_SET_CONFIGURATION){
     728        if (setup_request->request == USB_DEVREQ_SET_CONFIGURATION) {
    626729                //set and get configuration requests do not have any meaning,
    627730                //only dummy values are returned
     
    630733        return ENOTSUP;
    631734}
     735/*----------------------------------------------------------------------------*/
    632736
    633737/**
     
    641745 */
    642746static int process_request_without_data(rh_t *instance,
    643                 usb_transfer_batch_t *request){
     747        usb_transfer_batch_t *request) {
    644748        usb_device_request_setup_packet_t * setup_request =
    645                         (usb_device_request_setup_packet_t*)request->setup_buffer;
     749                (usb_device_request_setup_packet_t*) request->setup_buffer;
    646750        request->transfered_size = 0;
    647         if(setup_request->request == USB_DEVREQ_CLEAR_FEATURE){
    648                 if(setup_request->request_type == USB_HUB_REQ_TYPE_SET_HUB_FEATURE){
     751        if (setup_request->request == USB_DEVREQ_CLEAR_FEATURE) {
     752                if (setup_request->request_type == USB_HUB_REQ_TYPE_SET_HUB_FEATURE) {
    649753                        usb_log_debug("USB_HUB_REQ_TYPE_SET_HUB_FEATURE\n");
    650754                        return process_hub_feature_clear_request(instance,
    651                                         setup_request->value);
    652                 }
    653                 if(setup_request->request_type == USB_HUB_REQ_TYPE_SET_PORT_FEATURE){
     755                                setup_request->value);
     756                }
     757                if (setup_request->request_type == USB_HUB_REQ_TYPE_SET_PORT_FEATURE) {
    654758                        usb_log_debug("USB_HUB_REQ_TYPE_SET_PORT_FEATURE\n");
    655759                        return process_port_feature_clear_request(instance,
    656                                         setup_request->value,
    657                                         setup_request->index);
     760                                setup_request->value,
     761                                setup_request->index);
    658762                }
    659763                usb_log_debug("USB_HUB_REQ_TYPE_INVALID %d\n",
    660                                 setup_request->request_type);
    661                 return EINVAL;
    662         }
    663         if(setup_request->request == USB_DEVREQ_SET_FEATURE){
    664                 if(setup_request->request_type == USB_HUB_REQ_TYPE_SET_HUB_FEATURE){
     764                        setup_request->request_type);
     765                return EINVAL;
     766        }
     767        if (setup_request->request == USB_DEVREQ_SET_FEATURE) {
     768                if (setup_request->request_type == USB_HUB_REQ_TYPE_SET_HUB_FEATURE) {
    665769                        usb_log_debug("USB_HUB_REQ_TYPE_SET_HUB_FEATURE\n");
    666770                        return process_hub_feature_set_request(instance,
    667                                         setup_request->value);
    668                 }
    669                 if(setup_request->request_type == USB_HUB_REQ_TYPE_SET_PORT_FEATURE){
     771                                setup_request->value);
     772                }
     773                if (setup_request->request_type == USB_HUB_REQ_TYPE_SET_PORT_FEATURE) {
    670774                        usb_log_debug("USB_HUB_REQ_TYPE_SET_PORT_FEATURE\n");
    671775                        return process_port_feature_set_request(instance,
    672                                         setup_request->value,
    673                                         setup_request->index);
    674                 }
    675                 usb_log_debug("USB_HUB_REQ_TYPE_INVALID %d\n",setup_request->request_type);
    676                 return EINVAL;
    677         }
    678         if(setup_request->request == USB_DEVREQ_SET_ADDRESS){
     776                                setup_request->value,
     777                                setup_request->index);
     778                }
     779                usb_log_debug("USB_HUB_REQ_TYPE_INVALID %d\n",
     780                        setup_request->request_type);
     781                return EINVAL;
     782        }
     783        if (setup_request->request == USB_DEVREQ_SET_ADDRESS) {
    679784                usb_log_debug("USB_DEVREQ_SET_ADDRESS\n");
    680                 return process_address_set_request(instance, setup_request->value);
    681         }
    682         usb_log_debug("USB_DEVREQ_SET_ENOTSUP %d\n",setup_request->request_type);
     785                return process_address_set_request(instance,
     786                        setup_request->value);
     787        }
     788        usb_log_debug("USB_DEVREQ_SET_ENOTSUP %d\n",
     789                setup_request->request_type);
    683790        return ENOTSUP;
    684791}
     792/*----------------------------------------------------------------------------*/
    685793
    686794/**
     
    702810 * @return error code
    703811 */
    704 static int process_ctrl_request(rh_t *instance, usb_transfer_batch_t *request){
     812static int process_ctrl_request(rh_t *instance, usb_transfer_batch_t *request) {
     813        if (!request->setup_buffer) {
     814                usb_log_error("root hub received empty transaction?");
     815                return EINVAL;
     816        }
    705817        int opResult;
    706         if (request->setup_buffer) {
    707                 if(sizeof(usb_device_request_setup_packet_t)>request->setup_size){
    708                         usb_log_error("setup packet too small\n");
    709                         return EINVAL;
    710                 }
    711                 usb_log_info("CTRL packet: %s.\n",
    712                         usb_debug_str_buffer((const uint8_t *)request->setup_buffer, 8, 8));
    713                 usb_device_request_setup_packet_t * setup_request =
    714                                 (usb_device_request_setup_packet_t*)request->setup_buffer;
    715                 if(
    716                         setup_request->request == USB_DEVREQ_GET_STATUS
    717                         || setup_request->request == USB_DEVREQ_GET_DESCRIPTOR
    718                         || setup_request->request == USB_DEVREQ_GET_CONFIGURATION
    719                 ){
     818        if (sizeof (usb_device_request_setup_packet_t) > request->setup_size) {
     819                usb_log_error("setup packet too small\n");
     820                return EINVAL;
     821        }
     822        usb_log_info("CTRL packet: %s.\n",
     823                usb_debug_str_buffer(
     824                (const uint8_t *) request->setup_buffer, 8, 8));
     825        usb_device_request_setup_packet_t * setup_request =
     826                (usb_device_request_setup_packet_t*)
     827                request->setup_buffer;
     828        switch (setup_request->request) {
     829                case USB_DEVREQ_GET_STATUS:
     830                case USB_DEVREQ_GET_DESCRIPTOR:
     831                case USB_DEVREQ_GET_CONFIGURATION:
    720832                        usb_log_debug("processing request with output\n");
    721                         opResult = process_request_with_output(instance,request);
    722                 }else if(
    723                         setup_request->request == USB_DEVREQ_CLEAR_FEATURE
    724                         || setup_request->request == USB_DEVREQ_SET_FEATURE
    725                         || setup_request->request == USB_DEVREQ_SET_ADDRESS
    726                 ){
    727                         usb_log_debug("processing request without additional data\n");
    728                         opResult = process_request_without_data(instance,request);
    729                 }else if(setup_request->request == USB_DEVREQ_SET_DESCRIPTOR
    730                                 || setup_request->request == USB_DEVREQ_SET_CONFIGURATION
    731                 ){
    732                         usb_log_debug("processing request with input\n");
    733                         opResult = process_request_with_input(instance,request);
    734                 }else{
    735                         usb_log_warning("received unsuported request: %d\n",
    736                                         setup_request->request
    737                                         );
     833                        opResult = process_request_with_output(
     834                                instance, request);
     835                        break;
     836                case USB_DEVREQ_CLEAR_FEATURE:
     837                case USB_DEVREQ_SET_FEATURE:
     838                case USB_DEVREQ_SET_ADDRESS:
     839                        usb_log_debug("processing request without "
     840                                "additional data\n");
     841                        opResult = process_request_without_data(
     842                                instance, request);
     843                        break;
     844                case USB_DEVREQ_SET_DESCRIPTOR:
     845                case USB_DEVREQ_SET_CONFIGURATION:
     846                        usb_log_debug("processing request with "
     847                                "input\n");
     848                        opResult = process_request_with_input(
     849                                instance, request);
     850                        break;
     851                default:
     852                        usb_log_warning("received unsuported request: "
     853                                "%d\n",
     854                                setup_request->request
     855                                );
    738856                        opResult = ENOTSUP;
    739                 }
    740         }else{
    741                 usb_log_error("root hub received empty transaction?");
    742                 opResult = EINVAL;
    743857        }
    744858        return opResult;
    745859}
    746860
    747 /**
    748  * process root hub request
    749  *
    750  * @param instance root hub instance
    751  * @param request structure containing both request and response information
    752  * @return error code
    753  */
    754 int rh_request(rh_t *instance, usb_transfer_batch_t *request)
    755 {
    756         assert(instance);
    757         assert(request);
    758         int opResult;
    759         if(request->transfer_type == USB_TRANSFER_CONTROL){
    760                 usb_log_info("Root hub got CONTROL packet\n");
    761                 opResult = process_ctrl_request(instance,request);
    762         }else if(request->transfer_type == USB_TRANSFER_INTERRUPT){
    763                 usb_log_info("Root hub got INTERRUPT packet\n");
    764                 void * buffer;
    765                 create_interrupt_mask(instance, &buffer,
    766                         &(request->transfered_size));
    767                 memcpy(request->transport_buffer,buffer, request->transfered_size);
    768                 opResult = EOK;
    769         }else{
    770                 opResult = EINVAL;
    771         }
    772         usb_transfer_batch_finish(request, opResult);
    773         return EOK;
    774 }
    775 /*----------------------------------------------------------------------------*/
    776 
    777 
    778 void rh_interrupt(rh_t *instance)
    779 {
    780         usb_log_info("Whoa whoa wait, I`m not supposed to receive any interrupts, am I?\n");
    781         /* TODO: implement? */
    782 }
     861
     862
     863
    783864/**
    784865 * @}
  • uspace/drv/usbhub/usbhub.c

    r6c399765 r195890b  
    5555
    5656static int usb_hub_init_add_device(usb_hub_info_t * hub, uint16_t port,
    57                 usb_speed_t speed);
     57        usb_speed_t speed);
    5858
    5959static int usb_hub_trigger_connecting_non_removable_devices(
    60                 usb_hub_info_t * hub, usb_hub_descriptor_t * descriptor);
     60        usb_hub_info_t * hub, usb_hub_descriptor_t * descriptor);
    6161
    6262/**
     
    6969 * @return zero
    7070 */
    71 int usb_hub_control_loop(void * hub_info_param){
    72         usb_hub_info_t * hub_info = (usb_hub_info_t*)hub_info_param;
     71int usb_hub_control_loop(void * hub_info_param) {
     72        usb_hub_info_t * hub_info = (usb_hub_info_t*) hub_info_param;
    7373        int errorCode = EOK;
    7474
    75         while(errorCode == EOK){
    76                 async_usleep(1000 * 1000 * 10 );/// \TODO proper number once
     75        while (errorCode == EOK) {
     76                async_usleep(1000 * 1000 * 10); /// \TODO proper number once
    7777                errorCode = usb_hub_check_hub_changes(hub_info);
    78                
    79         }
    80         usb_log_error("something in ctrl loop went wrong, errno %d\n",errorCode);
     78
     79        }
     80        usb_log_error("something in ctrl loop went wrong, errno %d\n",
     81                errorCode);
    8182
    8283        return 0;
     
    99100static usb_hub_info_t * usb_hub_info_create(usb_device_t * usb_dev) {
    100101        usb_hub_info_t * result = usb_new(usb_hub_info_t);
    101         if(!result) return NULL;
     102        if (!result) return NULL;
    102103        result->usb_device = usb_dev;
    103104        result->status_change_pipe = usb_dev->pipes[0].pipe;
     
    117118 * @return error code
    118119 */
    119 static int usb_hub_process_hub_specific_info(usb_hub_info_t * hub_info){
     120static int usb_hub_process_hub_specific_info(usb_hub_info_t * hub_info) {
    120121        // get hub descriptor
    121122        usb_log_debug("creating serialized descriptor\n");
     
    128129         */
    129130        int opResult = usb_request_set_configuration(hub_info->control_pipe,
    130                         1);
    131         if(opResult!=EOK){
    132                 usb_log_error("could not set default configuration, errno %d",opResult);
    133                 return opResult;
    134         }
    135          
    136          
     131                1);
     132        if (opResult != EOK) {
     133                usb_log_error("could not set default configuration, errno %d",
     134                        opResult);
     135                return opResult;
     136        }
     137
     138
    137139        size_t received_size;
    138140        opResult = usb_request_get_descriptor(&hub_info->usb_device->ctrl_pipe,
    139                         USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_DEVICE,
    140                         USB_DESCTYPE_HUB,
    141                         0, 0, serialized_descriptor,
    142                         USB_HUB_MAX_DESCRIPTOR_SIZE, &received_size);
    143 
    144         if (opResult != EOK) {
    145                 usb_log_error("failed when receiving hub descriptor, badcode = %d\n",
    146                                 opResult);
     141                USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_DEVICE,
     142                USB_DESCTYPE_HUB,
     143                0, 0, serialized_descriptor,
     144                USB_HUB_MAX_DESCRIPTOR_SIZE, &received_size);
     145
     146        if (opResult != EOK) {
     147                usb_log_error("failed when receiving hub descriptor, "
     148                        "badcode = %d\n",
     149                        opResult);
    147150                free(serialized_descriptor);
    148151                return opResult;
     
    150153        usb_log_debug2("deserializing descriptor\n");
    151154        descriptor = usb_deserialize_hub_desriptor(serialized_descriptor);
    152         if(descriptor==NULL){
     155        if (descriptor == NULL) {
    153156                usb_log_warning("could not deserialize descriptor \n");
    154157                return opResult;
    155158        }
    156         usb_log_debug("setting port count to %d\n",descriptor->ports_count);
     159        usb_log_debug("setting port count to %d\n", descriptor->ports_count);
    157160        hub_info->port_count = descriptor->ports_count;
    158161        hub_info->attached_devs = (usb_hc_attached_device_t*)
    159             malloc((hub_info->port_count+1) * sizeof(usb_hc_attached_device_t));
     162                malloc((hub_info->port_count + 1) *
     163                        sizeof (usb_hc_attached_device_t)
     164                );
    160165        int i;
    161         for(i=0;i<hub_info->port_count+1;++i){
    162                 hub_info->attached_devs[i].handle=0;
    163                 hub_info->attached_devs[i].address=0;
     166        for (i = 0; i < hub_info->port_count + 1; ++i) {
     167                hub_info->attached_devs[i].handle = 0;
     168                hub_info->attached_devs[i].address = 0;
    164169        }
    165170        //handle non-removable devices
     
    169174        hub_info->descriptor = descriptor;
    170175        hub_info->not_initialized_non_removables =
    171                 (uint8_t*)malloc((hub_info->port_count+8)/8);
     176                (uint8_t*) malloc((hub_info->port_count + 8) / 8);
    172177        memcpy(hub_info->not_initialized_non_removables,
    173178                descriptor->devices_removable,
    174                 (hub_info->port_count+8)/8
     179                (hub_info->port_count + 8) / 8
    175180                );
    176181
     
    179184        return EOK;
    180185}
     186
    181187/**
    182188 * Set configuration of hub
     
    187193 * @return error code
    188194 */
    189 static int usb_hub_set_configuration(usb_hub_info_t * hub_info){
     195static int usb_hub_set_configuration(usb_hub_info_t * hub_info) {
    190196        //device descriptor
    191197        usb_standard_device_descriptor_t *std_descriptor
    192             = &hub_info->usb_device->descriptors.device;
     198                = &hub_info->usb_device->descriptors.device;
    193199        usb_log_debug("hub has %d configurations\n",
    194             std_descriptor->configuration_count);
    195         if(std_descriptor->configuration_count<1){
     200                std_descriptor->configuration_count);
     201        if (std_descriptor->configuration_count < 1) {
    196202                usb_log_error("there are no configurations available\n");
    197203                return EINVAL;
     
    199205
    200206        usb_standard_configuration_descriptor_t *config_descriptor
    201             = (usb_standard_configuration_descriptor_t *)
    202             hub_info->usb_device->descriptors.configuration;
     207                = (usb_standard_configuration_descriptor_t *)
     208                hub_info->usb_device->descriptors.configuration;
    203209
    204210        /* Set configuration. */
    205211        int opResult = usb_request_set_configuration(
    206             &hub_info->usb_device->ctrl_pipe,
    207             config_descriptor->configuration_number);
     212                &hub_info->usb_device->ctrl_pipe,
     213                config_descriptor->configuration_number);
    208214
    209215        if (opResult != EOK) {
    210216                usb_log_error("Failed to set hub configuration: %s.\n",
    211                     str_error(opResult));
     217                        str_error(opResult));
    212218                return opResult;
    213219        }
    214220        usb_log_debug("\tused configuration %d\n",
    215                         config_descriptor->configuration_number);
     221                config_descriptor->configuration_number);
    216222
    217223        return EOK;
     
    226232 * @return error code
    227233 */
    228 int usb_hub_add_device(usb_device_t * usb_dev){
    229         if(!usb_dev) return EINVAL;
     234int usb_hub_add_device(usb_device_t * usb_dev) {
     235        if (!usb_dev) return EINVAL;
    230236        usb_hub_info_t * hub_info = usb_hub_info_create(usb_dev);
    231237        //create hc connection
    232238        usb_log_debug("Initializing USB wire abstraction.\n");
    233239        int opResult = usb_hc_connection_initialize_from_device(
    234                         &hub_info->connection,
    235                         hub_info->usb_device->ddf_dev);
    236         if(opResult != EOK){
    237                 usb_log_error("could not initialize connection to device, errno %d\n",
    238                                 opResult);
     240                &hub_info->connection,
     241                hub_info->usb_device->ddf_dev);
     242        if (opResult != EOK) {
     243                usb_log_error("could not initialize connection to device, "
     244                        "errno %d\n",
     245                        opResult);
    239246                free(hub_info);
    240247                return opResult;
    241248        }
    242        
     249
    243250        usb_pipe_start_session(hub_info->control_pipe);
    244251        //set hub configuration
    245252        opResult = usb_hub_set_configuration(hub_info);
    246         if(opResult!=EOK){
    247                 usb_log_error("could not set hub configuration, errno %d\n",opResult);
     253        if (opResult != EOK) {
     254                usb_log_error("could not set hub configuration, errno %d\n",
     255                        opResult);
    248256                free(hub_info);
    249257                return opResult;
     
    251259        //get port count and create attached_devs
    252260        opResult = usb_hub_process_hub_specific_info(hub_info);
    253         if(opResult!=EOK){
    254                 usb_log_error("could not set hub configuration, errno %d\n",opResult);
     261        if (opResult != EOK) {
     262                usb_log_error("could not set hub configuration, errno %d\n",
     263                        opResult);
    255264                free(hub_info);
    256265                return opResult;
     
    262271        usb_log_debug("Creating `hub' function.\n");
    263272        ddf_fun_t *hub_fun = ddf_fun_create(hub_info->usb_device->ddf_dev,
    264                         fun_exposed, "hub");
     273                fun_exposed, "hub");
    265274        assert(hub_fun != NULL);
    266275        hub_fun->ops = NULL;
     
    274283        fid_t fid = fibril_create(usb_hub_control_loop, hub_info);
    275284        if (fid == 0) {
    276                 usb_log_error("failed to start monitoring fibril for new hub.\n");
     285                usb_log_error("failed to start monitoring fibril for new"
     286                        " hub.\n");
    277287                return ENOMEM;
    278288        }
     
    281291
    282292        usb_log_info("Controlling hub `%s' (%d ports).\n",
    283             hub_info->usb_device->ddf_dev->name, hub_info->port_count);
     293                hub_info->usb_device->ddf_dev->name, hub_info->port_count);
    284294        return EOK;
    285295}
     
    302312 */
    303313static int usb_hub_trigger_connecting_non_removable_devices(
    304                 usb_hub_info_t * hub,
    305                 usb_hub_descriptor_t * descriptor)
    306 {
     314        usb_hub_info_t * hub,
     315        usb_hub_descriptor_t * descriptor) {
    307316        usb_log_info("attaching non-removable devices(if any)\n");
    308317        //usb_device_request_setup_packet_t request;
     
    314323
    315324        opResult = usb_request_set_configuration(hub->control_pipe,
    316                         1);
    317         if(opResult!=EOK){
    318                 usb_log_error("could not set default configuration, errno %d",opResult);
     325                1);
     326        if (opResult != EOK) {
     327                usb_log_error("could not set default configuration, errno %d",
     328                        opResult);
    319329                return opResult;
    320330        }
    321331#if 0
    322         for(port=1;port<=descriptor->ports_count;++port){
     332        for (port = 1; port <= descriptor->ports_count; ++port) {
    323333                bool is_non_removable =
    324                                 ((non_removable_dev_bitmap[port/8]) >> (port%8)) %2;
    325                 if(is_non_removable){
    326                         usb_log_debug("non-removable device on port %d\n",port);
     334                        ((non_removable_dev_bitmap[port / 8]) >> (port % 8)) % 2;
     335                if (is_non_removable) {
     336                        usb_log_debug("non-removable device on port %d\n", port);
    327337                        usb_hub_set_port_status_request(&request, port);
    328338                        opResult = usb_pipe_control_read(
    329                                         hub->control_pipe,
    330                                         &request, sizeof(usb_device_request_setup_packet_t),
    331                                         &status, 4, &rcvd_size
    332                                         );
     339                                hub->control_pipe,
     340                                &request,
     341                                sizeof (usb_device_request_setup_packet_t),
     342                                &status, 4, &rcvd_size
     343                                );
    333344                        if (opResult != EOK) {
    334                                 usb_log_error("could not get port status of port %d errno:%d\n",
    335                                                 port, opResult);
     345                                usb_log_error("could not get port status of "
     346                                        "port %d errno:%d\n",
     347                                        port, opResult);
    336348                                return opResult;
    337349                        }
    338350                        //try to reset port
    339                         if(usb_port_dev_connected(&status) || true){
    340                                 usb_hub_set_enable_port_feature_request(&request, port,
    341                                                 USB_HUB_FEATURE_PORT_RESET);
     351                        if (usb_port_dev_connected(&status) || true) {
     352                                usb_hub_set_enable_port_feature_request(
     353                                        &request, port,
     354                                        USB_HUB_FEATURE_PORT_RESET);
    342355                                opResult = usb_pipe_control_read(
    343                                                 hub->control_pipe,
    344                                                 &request, sizeof(usb_device_request_setup_packet_t),
    345                                                 &status, 4, &rcvd_size
    346                                                 );
     356                                        hub->control_pipe,
     357                                        &request,
     358                                        sizeof (usb_device_request_setup_packet_t),
     359                                        &status, 4, &rcvd_size
     360                                        );
    347361                                if (opResult != EOK) {
    348362                                        usb_log_warning(
    349                                                         "could not reset port %d errno:%d\n",
    350                                                         port, opResult);
     363                                                "could not reset port %d "
     364                                                "errno:%d\n",
     365                                                port, opResult);
    351366                                }
    352                                 usb_log_debug("port reset, should look like %d,x%x\n",
    353                                                 (1<<USB_HUB_FEATURE_PORT_RESET),
    354                                                 (1<<USB_HUB_FEATURE_PORT_RESET)
    355                                                 );
     367                                usb_log_debug("port reset, should look like "
     368                                        "%d,x%x\n",
     369                                        (1 << USB_HUB_FEATURE_PORT_RESET),
     370                                        (1 << USB_HUB_FEATURE_PORT_RESET)
     371                                        );
    356372                        }
    357                         //set the status change bit, so it will be noticed in driver loop
    358                         if(usb_port_dev_connected(&status) && false){
    359                                 usb_hub_set_disable_port_feature_request(&request, port,
    360                                                 USB_HUB_FEATURE_PORT_CONNECTION);
     373                        //set the status change bit, so it will be noticed
     374                        //in driver loop
     375                        if (usb_port_dev_connected(&status) && false) {
     376                                usb_hub_set_disable_port_feature_request(
     377                                        &request, port,
     378                                        USB_HUB_FEATURE_PORT_CONNECTION);
    361379                                opResult = usb_pipe_control_read(
    362                                                 hub->control_pipe,
    363                                                 &request, sizeof(usb_device_request_setup_packet_t),
    364                                                 &status, 4, &rcvd_size
    365                                                 );
     380                                        hub->control_pipe,
     381                                        &request,
     382                                        sizeof (usb_device_request_setup_packet_t),
     383                                        &status, 4, &rcvd_size
     384                                        );
    366385                                if (opResult != EOK) {
    367386                                        usb_log_warning(
    368                                                         "could not clear port connection on port %d errno:%d\n",
    369                                                         port, opResult);
     387                                                "could not clear port "
     388                                                "connection on port %d "
     389                                                "errno:%d\n",
     390                                                port, opResult);
    370391                                }
    371392                                usb_log_debug("cleared port connection\n");
    372                                 usb_hub_set_enable_port_feature_request(&request, port,
    373                                                 USB_HUB_FEATURE_PORT_ENABLE);
     393                                usb_hub_set_enable_port_feature_request(&request,
     394                                        port,
     395                                        USB_HUB_FEATURE_PORT_ENABLE);
    374396                                opResult = usb_pipe_control_read(
    375                                                 hub->control_pipe,
    376                                                 &request, sizeof(usb_device_request_setup_packet_t),
    377                                                 &status, 4, &rcvd_size
    378                                                 );
     397                                        hub->control_pipe,
     398                                        &request,
     399                                        sizeof (usb_device_request_setup_packet_t),
     400                                        &status, 4, &rcvd_size
     401                                        );
    379402                                if (opResult != EOK) {
    380403                                        usb_log_warning(
    381                                                         "could not set port enabled on port %d errno:%d\n",
    382                                                         port, opResult);
     404                                                "could not set port enabled "
     405                                                "on port %d errno:%d\n",
     406                                                port, opResult);
    383407                                }
    384                                 usb_log_debug("port set to enabled - should lead to connection change\n");
     408                                usb_log_debug("port set to enabled - "
     409                                        "should lead to connection change\n");
    385410                        }
    386411                }
     
    389414
    390415        /// \TODO this is just a debug code
    391         for(port=1;port<=descriptor->ports_count;++port){
     416        for (port = 1; port <= descriptor->ports_count; ++port) {
    392417                bool is_non_removable =
    393                                 ((non_removable_dev_bitmap[port/8]) >> (port%8)) %2;
    394                 if(is_non_removable){
    395                         usb_log_debug("CHECKING port %d is non-removable\n",port);
     418                        ((non_removable_dev_bitmap[port / 8]) >> (port % 8)) % 2;
     419                if (is_non_removable) {
     420                        usb_log_debug("CHECKING port %d is non-removable\n",
     421                                port);
    396422                        usb_port_status_t status;
    397423                        size_t rcvd_size;
     
    401427                        //endpoint 0
    402428                        opResult = usb_pipe_control_read(
    403                                         hub->control_pipe,
    404                                         &request, sizeof(usb_device_request_setup_packet_t),
    405                                         &status, 4, &rcvd_size
    406                                         );
     429                                hub->control_pipe,
     430                                &request,
     431                                sizeof (usb_device_request_setup_packet_t),
     432                                &status, 4, &rcvd_size
     433                                );
    407434                        if (opResult != EOK) {
    408                                 usb_log_error("could not get port status %d\n",opResult);
     435                                usb_log_error("could not get port status %d\n",
     436                                        opResult);
    409437                        }
    410438                        if (rcvd_size != sizeof (usb_port_status_t)) {
    411                                 usb_log_error("received status has incorrect size\n");
     439                                usb_log_error("received status has incorrect"
     440                                        " size\n");
    412441                        }
    413442                        //something connected/disconnected
     
    415444                                usb_log_debug("some connection changed\n");
    416445                        }
    417                         usb_log_debug("status: %s\n",usb_debug_str_buffer(
    418                                         (uint8_t *)&status,4,4));
     446                        usb_log_debug("status: %s\n", usb_debug_str_buffer(
     447                                (uint8_t *) & status, 4, 4));
    419448                }
    420449        }
     
    422451        return EOK;
    423452}
    424 
    425453
    426454/**
     
    432460 * @return error code
    433461 */
    434 static int usb_hub_release_default_address(usb_hub_info_t * hub){
     462static int usb_hub_release_default_address(usb_hub_info_t * hub) {
    435463        int opResult = usb_hc_release_default_address(&hub->connection);
    436         if(opResult!=EOK){
    437                 usb_log_error("could not release default address, errno %d\n",opResult);
     464        if (opResult != EOK) {
     465                usb_log_error("could not release default address, errno %d\n",
     466                        opResult);
    438467                return opResult;
    439468        }
     
    450479 */
    451480static int usb_hub_init_add_device(usb_hub_info_t * hub, uint16_t port,
    452                 usb_speed_t speed) {
     481        usb_speed_t speed) {
    453482        //if this hub already uses default address, it cannot request it once more
    454         if(hub->is_default_address_used) return EREFUSED;
     483        if (hub->is_default_address_used) return EREFUSED;
    455484        usb_log_debug("some connection changed\n");
    456485        assert(hub->control_pipe->hc_phone);
    457486        int opResult = usb_hub_clear_port_feature(hub->control_pipe,
    458                                 port, USB_HUB_FEATURE_C_PORT_CONNECTION);
    459         if(opResult != EOK){
     487                port, USB_HUB_FEATURE_C_PORT_CONNECTION);
     488        if (opResult != EOK) {
    460489                usb_log_warning("could not clear port-change-connection flag\n");
    461490        }
    462491        usb_device_request_setup_packet_t request;
    463        
     492
    464493        //get default address
    465494        opResult = usb_hc_reserve_default_address(&hub->connection, speed);
    466        
    467         if (opResult != EOK) {
    468                 usb_log_warning("cannot assign default address, it is probably used %d\n",
    469                                 opResult);
     495
     496        if (opResult != EOK) {
     497                usb_log_warning("cannot assign default address, it is probably "
     498                        "used %d\n",
     499                        opResult);
    470500                return opResult;
    471501        }
     
    474504        usb_hub_set_reset_port_request(&request, port);
    475505        opResult = usb_pipe_control_write(
    476                         hub->control_pipe,
    477                         &request,sizeof(usb_device_request_setup_packet_t),
    478                         NULL, 0
    479                         );
    480         if (opResult != EOK) {
    481                 usb_log_error("something went wrong when reseting a port %d\n",opResult);
     506                hub->control_pipe,
     507                &request, sizeof (usb_device_request_setup_packet_t),
     508                NULL, 0
     509                );
     510        if (opResult != EOK) {
     511                usb_log_error("something went wrong when reseting a port %d\n",
     512                        opResult);
    482513                usb_hub_release_default_address(hub);
    483514        }
     
    493524 * @param speed transfer speed of attached device, one of low, full or high
    494525 */
    495 static void usb_hub_finalize_add_device( usb_hub_info_t * hub,
    496                 uint16_t port, usb_speed_t speed) {
     526static void usb_hub_finalize_add_device(usb_hub_info_t * hub,
     527        uint16_t port, usb_speed_t speed) {
    497528
    498529        int opResult;
    499530        usb_log_debug("finalizing add device\n");
    500531        opResult = usb_hub_clear_port_feature(hub->control_pipe,
    501             port, USB_HUB_FEATURE_C_PORT_RESET);
     532                port, USB_HUB_FEATURE_C_PORT_RESET);
    502533
    503534        if (opResult != EOK) {
     
    510541        usb_device_connection_t new_device_connection;
    511542        usb_device_connection_initialize_on_default_address(
    512                         &new_device_connection,
    513                         &hub->connection
    514                         );
     543                &new_device_connection,
     544                &hub->connection
     545                );
    515546        usb_pipe_initialize_default_control(
    516                         &new_device_pipe,
    517                         &new_device_connection);
     547                &new_device_pipe,
     548                &new_device_connection);
    518549        usb_pipe_probe_default_control(&new_device_pipe);
    519550
    520551        /* Request address from host controller. */
    521552        usb_address_t new_device_address = usb_hc_request_address(
    522                         &hub->connection,
    523                         speed
    524                         );
     553                &hub->connection,
     554                speed
     555                );
    525556        if (new_device_address < 0) {
    526557                usb_log_error("failed to get free USB address\n");
     
    529560                return;
    530561        }
    531         usb_log_debug("setting new address %d\n",new_device_address);
     562        usb_log_debug("setting new address %d\n", new_device_address);
    532563        //opResult = usb_drv_req_set_address(hc, USB_ADDRESS_DEFAULT,
    533564        //    new_device_address);
    534565        usb_pipe_start_session(&new_device_pipe);
    535         opResult = usb_request_set_address(&new_device_pipe,new_device_address);
     566        opResult = usb_request_set_address(&new_device_pipe,
     567                new_device_address);
    536568        usb_pipe_end_session(&new_device_pipe);
    537569        if (opResult != EOK) {
    538                 usb_log_error("could not set address for new device %d\n",opResult);
     570                usb_log_error("could not set address for new device %d\n",
     571                        opResult);
    539572                usb_hub_release_default_address(hub);
    540573                return;
     
    543576        //opResult = usb_hub_release_default_address(hc);
    544577        opResult = usb_hub_release_default_address(hub);
    545         if(opResult!=EOK){
     578        if (opResult != EOK) {
    546579                return;
    547580        }
     
    549582        devman_handle_t child_handle;
    550583        //??
    551     opResult = usb_device_register_child_in_devman(new_device_address,
    552             hub->connection.hc_handle, hub->usb_device->ddf_dev, &child_handle,
    553             NULL, NULL, NULL);
    554 
    555         if (opResult != EOK) {
    556                 usb_log_error("could not start driver for new device %d\n",opResult);
     584        opResult = usb_device_register_child_in_devman(new_device_address,
     585                hub->connection.hc_handle, hub->usb_device->ddf_dev,
     586                &child_handle,
     587                NULL, NULL, NULL);
     588
     589        if (opResult != EOK) {
     590                usb_log_error("could not start driver for new device %d\n",
     591                        opResult);
    557592                return;
    558593        }
     
    562597        //opResult = usb_drv_bind_address(hc, new_device_address, child_handle);
    563598        opResult = usb_hc_register_device(
    564                         &hub->connection,
    565                         &hub->attached_devs[port]);
    566         if (opResult != EOK) {
    567                 usb_log_error("could not assign address of device in hcd %d\n",opResult);
     599                &hub->connection,
     600                &hub->attached_devs[port]);
     601        if (opResult != EOK) {
     602                usb_log_error("could not assign address of device in hcd %d\n",
     603                        opResult);
    568604                return;
    569605        }
    570606        usb_log_info("Detected new device on `%s' (port %d), " \
    571607            "address %d (handle %llu).\n",
    572             hub->usb_device->ddf_dev->name, (int) port,
    573             new_device_address, child_handle);
     608                hub->usb_device->ddf_dev->name, (int) port,
     609                new_device_address, child_handle);
    574610}
    575611
     
    584620 */
    585621static void usb_hub_removed_device(
    586     usb_hub_info_t * hub,uint16_t port) {
     622        usb_hub_info_t * hub, uint16_t port) {
    587623
    588624        int opResult = usb_hub_clear_port_feature(hub->control_pipe,
    589                                 port, USB_HUB_FEATURE_C_PORT_CONNECTION);
    590         if(opResult != EOK){
     625                port, USB_HUB_FEATURE_C_PORT_CONNECTION);
     626        if (opResult != EOK) {
    591627                usb_log_warning("could not clear port-change-connection flag\n");
    592628        }
     
    594630         * devide manager
    595631         */
    596        
     632
    597633        //close address
    598         if(hub->attached_devs[port].address!=0){
     634        if (hub->attached_devs[port].address != 0) {
    599635                /*uncomment this code to use it when DDF allows device removal
    600636                opResult = usb_hc_unregister_device(
    601                                 &hub->connection, hub->attached_devs[port].address);
     637                        &hub->connection,
     638                        hub->attached_devs[port].address);
    602639                if(opResult != EOK) {
    603                         dprintf(USB_LOG_LEVEL_WARNING, "could not release address of " \
     640                        dprintf(USB_LOG_LEVEL_WARNING, "could not release "
     641                                "address of "
    604642                            "removed device: %d", opResult);
    605643                }
     
    607645                hub->attached_devs[port].handle = 0;
    608646                 */
    609         }else{
    610                 usb_log_warning("this is strange, disconnected device had no address\n");
    611                 //device was disconnected before it`s port was reset - return default address
     647        } else {
     648                usb_log_warning("this is strange, disconnected device had "
     649                        "no address\n");
     650                //device was disconnected before it`s port was reset -
     651                //return default address
    612652                usb_hub_release_default_address(hub);
    613653        }
    614654}
    615655
    616 
    617656/**
    618657 * Process over current condition on port.
    619  * 
     658 *
    620659 * Turn off the power on the port.
    621660 *
     
    623662 * @param port port number, starting from 1
    624663 */
    625 static void usb_hub_over_current( usb_hub_info_t * hub,
    626                 uint16_t port){
     664static void usb_hub_over_current(usb_hub_info_t * hub,
     665        uint16_t port) {
    627666        int opResult;
    628667        opResult = usb_hub_clear_port_feature(hub->control_pipe,
    629             port, USB_HUB_FEATURE_PORT_POWER);
    630         if(opResult!=EOK){
     668                port, USB_HUB_FEATURE_PORT_POWER);
     669        if (opResult != EOK) {
    631670                usb_log_error("cannot power off port %d;  %d\n",
    632                                 port, opResult);
     671                        port, opResult);
    633672        }
    634673}
     
    641680 * @param port port number, starting from 1
    642681 */
    643 static void usb_hub_process_interrupt(usb_hub_info_t * hub, 
    644         uint16_t port) {
     682static void usb_hub_process_interrupt(usb_hub_info_t * hub,
     683        uint16_t port) {
    645684        usb_log_debug("interrupt at port %d\n", port);
    646685        //determine type of change
    647686        usb_pipe_t *pipe = hub->control_pipe;
    648        
     687
    649688        int opResult;
    650689
     
    657696
    658697        opResult = usb_pipe_control_read(
    659                         pipe,
    660                         &request, sizeof(usb_device_request_setup_packet_t),
    661                         &status, 4, &rcvd_size
    662                         );
     698                pipe,
     699                &request, sizeof (usb_device_request_setup_packet_t),
     700                &status, 4, &rcvd_size
     701                );
    663702        if (opResult != EOK) {
    664703                usb_log_error("could not get port status\n");
     
    674713                if (usb_port_dev_connected(&status)) {
    675714                        usb_log_debug("some connection changed\n");
    676                         usb_hub_init_add_device(hub, port, usb_port_speed(&status));
     715                        usb_hub_init_add_device(hub, port,
     716                                usb_port_speed(&status));
    677717                } else {
    678718                        usb_hub_removed_device(hub, port);
     
    683723                //check if it was not auto-resolved
    684724                usb_log_debug("overcurrent change on port\n");
    685                 if(usb_port_over_current(&status)){
    686                         usb_hub_over_current(hub,port);
    687                 }else{
    688                         usb_log_debug("over current condition was auto-resolved on port %d\n",
    689                                         port);
     725                if (usb_port_over_current(&status)) {
     726                        usb_hub_over_current(hub, port);
     727                } else {
     728                        usb_log_debug("over current condition was "
     729                                "auto-resolved on port %d\n",
     730                                port);
    690731                }
    691732        }
     
    694735                usb_log_debug("port reset complete\n");
    695736                if (usb_port_enabled(&status)) {
    696                         usb_hub_finalize_add_device(hub, port, usb_port_speed(&status));
     737                        usb_hub_finalize_add_device(hub, port,
     738                                usb_port_speed(&status));
    697739                } else {
    698                         usb_log_warning("port reset, but port still not enabled\n");
     740                        usb_log_warning("port reset, but port still not "
     741                                "enabled\n");
    699742                }
    700743        }
    701         usb_log_debug("status x%x : %d\n ",status,status);
     744        usb_log_debug("status x%x : %d\n ", status, status);
    702745
    703746        usb_port_set_connect_change(&status, false);
     
    705748        usb_port_set_reset_completed(&status, false);
    706749        usb_port_set_dev_connected(&status, false);
    707         if (status>>16) {
     750        if (status >> 16) {
    708751                usb_log_info("there was some unsupported change on port %d: %X\n",
    709                                 port,status);
    710 
    711         }
    712 }
    713 
     752                        port, status);
     753
     754        }
     755}
    714756
    715757static int initialize_non_removable(usb_hub_info_t * hub_info,
    716         unsigned int port){
     758        unsigned int port) {
    717759        int opResult;
    718760        usb_log_debug("there is not pluged in non-removable device on "
    719                 "port %d\n",port
     761                "port %d\n", port
    720762                );
    721763        //usb_hub_init_add_device(hub_info, port, usb_port_speed(&status));
     
    728770
    729771        opResult = usb_pipe_control_read(
    730                         hub_info->control_pipe,
    731                         &request, sizeof(usb_device_request_setup_packet_t),
    732                         &status, 4, &rcvd_size
    733                         );
    734         if (opResult != EOK) {
    735                 usb_log_error("could not get port status %d\n",opResult);
     772                hub_info->control_pipe,
     773                &request, sizeof (usb_device_request_setup_packet_t),
     774                &status, 4, &rcvd_size
     775                );
     776        if (opResult != EOK) {
     777                usb_log_error("could not get port status %d\n", opResult);
    736778                return opResult;
    737779        }
     
    740782                return opResult;
    741783        }
    742         usb_log_debug("port status %d, x%x\n",status,status);
    743         if(usb_port_dev_connected(&status)){
     784        usb_log_debug("port status %d, x%x\n", status, status);
     785        if (usb_port_dev_connected(&status)) {
    744786                usb_log_debug("there is connected device on this port\n");
    745787        }
    746         if(!hub_info->is_default_address_used)
    747                 usb_hub_init_add_device(hub_info, port, usb_port_speed(&status));
     788        if (!hub_info->is_default_address_used)
     789                usb_hub_init_add_device(hub_info, port,
     790                        usb_port_speed(&status));
    748791        return opResult;
    749792}
     
    756799 * @return error code
    757800 */
    758 int usb_hub_check_hub_changes(usb_hub_info_t * hub_info){
     801int usb_hub_check_hub_changes(usb_hub_info_t * hub_info) {
    759802        int opResult;
    760803        opResult = usb_pipe_start_session(
    761                         hub_info->status_change_pipe);
    762         //this might not be necessary - if all non-removables are ok, it is not needed here
     804                hub_info->status_change_pipe);
     805        //this might not be necessary - if all non-removables are ok, it is
     806        //not needed here
    763807        opResult = usb_pipe_start_session(hub_info->control_pipe);
    764         if(opResult != EOK){
     808        if (opResult != EOK) {
    765809                usb_log_error("could not initialize communication for hub; %d\n",
    766                                 opResult);
     810                        opResult);
    767811                return opResult;
    768812        }
     
    771815        //first check non-removable devices
    772816        {
    773         unsigned int port;
    774         for(port = 1; port<=port_count; ++port){
    775                 bool is_non_removable =
    776                         hub_info->not_initialized_non_removables[port/8]
    777                         & (1 << (port%8));
    778                 if(is_non_removable){
    779                         opResult = initialize_non_removable(hub_info,port);
     817                unsigned int port;
     818                for (port = 1; port <= port_count; ++port) {
     819                        bool is_non_removable =
     820                                hub_info->not_initialized_non_removables[port/8]
     821                                & (1 << (port % 8));
     822                        if (is_non_removable) {
     823                                opResult = initialize_non_removable(hub_info,
     824                                        port);
     825                        }
    780826                }
    781827        }
    782         }
    783828
    784829
    785830        /// FIXME: count properly
    786         size_t byte_length = ((port_count+1) / 8) + 1;
    787                 void *change_bitmap = malloc(byte_length);
     831        size_t byte_length = ((port_count + 1) / 8) + 1;
     832        void *change_bitmap = malloc(byte_length);
    788833        size_t actual_size;
    789834
     
    792837         */
    793838        opResult = usb_pipe_read(
    794                         hub_info->status_change_pipe,
    795                         change_bitmap, byte_length, &actual_size
    796                         );
     839                hub_info->status_change_pipe,
     840                change_bitmap, byte_length, &actual_size
     841                );
    797842
    798843        if (opResult != EOK) {
    799844                free(change_bitmap);
    800                 usb_log_warning("something went wrong while getting status of hub\n");
     845                usb_log_warning("something went wrong while getting the"
     846                        "status of hub\n");
    801847                usb_pipe_end_session(hub_info->status_change_pipe);
    802848                return opResult;
    803849        }
    804850        unsigned int port;
    805        
    806         if(opResult!=EOK){
    807                 usb_log_error("could not start control pipe session %d\n", opResult);
     851
     852        if (opResult != EOK) {
     853                usb_log_error("could not start control pipe session %d\n",
     854                        opResult);
    808855                usb_pipe_end_session(hub_info->status_change_pipe);
    809856                return opResult;
    810857        }
    811858        opResult = usb_hc_connection_open(&hub_info->connection);
    812         if(opResult!=EOK){
     859        if (opResult != EOK) {
    813860                usb_log_error("could not start host controller session %d\n",
    814                                 opResult);
     861                        opResult);
    815862                usb_pipe_end_session(hub_info->control_pipe);
    816863                usb_pipe_end_session(hub_info->status_change_pipe);
     
    819866
    820867        ///todo, opresult check, pre obe konekce
    821         for (port = 1; port < port_count+1; ++port) {
     868        for (port = 1; port < port_count + 1; ++port) {
    822869                bool interrupt =
    823                                 (((uint8_t*) change_bitmap)[port / 8] >> (port % 8)) % 2;
     870                        (((uint8_t*) change_bitmap)[port / 8] >> (port % 8)) % 2;
    824871                if (interrupt) {
    825872                        usb_hub_process_interrupt(
    826                                 hub_info, port);
     873                                hub_info, port);
    827874                }
    828875        }
  • uspace/drv/usbhub/usbhub.h

    r6c399765 r195890b  
    4848#include <usb/devdrv.h>
    4949
    50 
    5150/** Information about attached hub. */
    5251typedef struct {
     
    5655        /** attached device handles, for each port one */
    5756        usb_hc_attached_device_t * attached_devs;
    58        
     57
    5958        /** connection to hcd */
    6059        usb_hc_connection_t connection;
Note: See TracChangeset for help on using the changeset viewer.