Ignore:
File:
1 edited

Legend:

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

    re93e319 r42a3a57  
    7878                async_usleep(1000 * 1000 );/// \TODO proper number once
    7979        }
    80         usb_log_error("something in ctrl loop went wrong, errno %d",errorCode);
    81 
     80        dprintf(USB_LOG_LEVEL_ERROR,
     81                                "something in ctrl loop went wrong, errno %d",errorCode);
    8282        return 0;
    8383}
     
    104104                        hub->device);
    105105        if(opResult != EOK){
    106                 usb_log_error("could not initialize connection to hc, errno %d",opResult);
     106                dprintf(USB_LOG_LEVEL_ERROR,
     107                                "could not initialize connection to hc, errno %d",opResult);
    107108                return opResult;
    108109        }
     
    111112                        hub->device);
    112113        if(opResult != EOK){
    113                 usb_log_error("could not initialize connection to device, errno %d",
    114                                 opResult);
     114                dprintf(USB_LOG_LEVEL_ERROR,
     115                                "could not initialize connection to device, errno %d",opResult);
    115116                return opResult;
    116117        }
     
    119120            &hub->device_connection);
    120121        if(opResult != EOK){
    121                 usb_log_error("could not initialize connection to device endpoint, errno %d",
    122                                 opResult);
     122                dprintf(USB_LOG_LEVEL_ERROR,
     123                                "could not initialize connection to device endpoint, errno %d",opResult);
    123124                return opResult;
    124125        }
     
    126127        opResult = usb_endpoint_pipe_probe_default_control(&hub->endpoints.control);
    127128        if (opResult != EOK) {
    128                 usb_log_error("failed probing endpoint 0, %d", opResult);
     129                dprintf(USB_LOG_LEVEL_ERROR, "failed probing endpoint 0, %d", opResult);
    129130                return opResult;
    130131        }
     
    150151            &std_descriptor);
    151152        if(opResult!=EOK){
    152                 usb_log_error("could not get device descriptor, %d",opResult);
    153                 return opResult;
    154         }
    155         usb_log_info("hub has %d configurations",
     153                dprintf(USB_LOG_LEVEL_ERROR, "could not get device descriptor, %d",opResult);
     154                return opResult;
     155        }
     156        dprintf(USB_LOG_LEVEL_INFO, "hub has %d configurations",
    156157                        std_descriptor.configuration_count);
    157158        if(std_descriptor.configuration_count<1){
    158                 usb_log_error("THERE ARE NO CONFIGURATIONS AVAILABLE");
     159                dprintf(USB_LOG_LEVEL_ERROR, "THERE ARE NO CONFIGURATIONS AVAILABLE");
    159160                //shouldn`t I return?
    160161        }
     
    183184                return opResult;
    184185        }
    185         usb_log_debug("\tused configuration %d",
     186        dprintf(USB_LOG_LEVEL_DEBUG, "\tused configuration %d",
    186187                        config_descriptor->configuration_number);
    187188
     
    199200            &hub->device_connection);
    200201        if (opResult != EOK) {
    201                 usb_log_error("Failed to initialize status change pipe: %s",
     202                dprintf(USB_LOG_LEVEL_ERROR,
     203                                "Failed to initialize status change pipe: %s",
    202204                    str_error(opResult));
    203205                return opResult;
    204206        }
    205207        if (!endpoint_mapping[0].present) {
    206                 usb_log_error("Not accepting device, " \
     208                dprintf(USB_LOG_LEVEL_ERROR,"Not accepting device, " \
    207209                    "cannot understand what is happenning");
    208210                return EREFUSED;
     
    233235        result->port_count = -1;
    234236        result->device = device;
    235         result->is_default_address_used = false;
    236237
    237238        //result->usb_device = usb_new(usb_hcd_attached_device_info_t);
     
    239240
    240241        // get hub descriptor
    241         usb_log_debug("creating serialized descripton");
     242        dprintf(USB_LOG_LEVEL_DEBUG, "creating serialized descripton");
    242243        void * serialized_descriptor = malloc(USB_HUB_MAX_DESCRIPTOR_SIZE);
    243244        usb_hub_descriptor_t * descriptor;
    244         usb_log_debug("starting control transaction");
     245        dprintf(USB_LOG_LEVEL_DEBUG, "starting control transaction");
    245246        usb_endpoint_pipe_start_session(&result->endpoints.control);
    246247        opResult = usb_request_set_configuration(&result->endpoints.control, 1);
     
    255256
    256257        if (opResult != EOK) {
    257                 usb_log_error("failed when receiving hub descriptor, badcode = %d",
    258                                 opResult);
     258                dprintf(USB_LOG_LEVEL_ERROR, "failed when receiving hub descriptor, badcode = %d",opResult);
    259259                free(serialized_descriptor);
    260260                free(result);
    261261                return NULL;
    262262        }
    263         usb_log_debug2("deserializing descriptor");
     263        dprintf(USB_LOG_LEVEL_DEBUG2, "deserializing descriptor");
    264264        descriptor = usb_deserialize_hub_desriptor(serialized_descriptor);
    265265        if(descriptor==NULL){
    266                 usb_log_warning("could not deserialize descriptor ");
     266                dprintf(USB_LOG_LEVEL_WARNING, "could not deserialize descriptor ");
    267267                free(result);
    268268                return NULL;
    269269        }
    270270
    271         usb_log_info("setting port count to %d",descriptor->ports_count);
     271        dprintf(USB_LOG_LEVEL_INFO, "setting port count to %d",descriptor->ports_count);
    272272        result->port_count = descriptor->ports_count;
    273273        result->attached_devs = (usb_hc_attached_device_t*)
     
    278278                result->attached_devs[i].address=0;
    279279        }
    280         usb_log_debug2("freeing data");
     280        dprintf(USB_LOG_LEVEL_DEBUG2, "freeing data");
    281281        free(serialized_descriptor);
    282282        free(descriptor->devices_removable);
     
    285285        //finish
    286286
    287         usb_log_info("hub info created");
     287        dprintf(USB_LOG_LEVEL_INFO, "hub info created");
    288288
    289289        return result;
     
    296296 */
    297297int usb_add_hub_device(ddf_dev_t *dev) {
    298         usb_log_info("add_hub_device(handle=%d)", (int) dev->handle);
     298        dprintf(USB_LOG_LEVEL_INFO, "add_hub_device(handle=%d)", (int) dev->handle);
    299299
    300300        //dev->ops = &hub_device_ops;
     
    313313        opResult = usb_hub_process_configuration_descriptors(hub_info);
    314314        if(opResult != EOK){
    315                 usb_log_error("could not get configuration descriptors, %d",
     315                dprintf(USB_LOG_LEVEL_ERROR,"could not get configuration descriptors, %d",
    316316                                opResult);
    317317                return opResult;
     
    324324                opResult = usb_endpoint_pipe_control_write(&hub_info->endpoints.control,
    325325                                &request,sizeof(usb_device_request_setup_packet_t), NULL, 0);
    326                 usb_log_info("powering port %d",port);
     326                dprintf(USB_LOG_LEVEL_INFO, "powering port %d",port);
    327327                if (opResult != EOK) {
    328                         usb_log_warning("something went wrong when setting hub`s %dth port", port);
     328                        dprintf(USB_LOG_LEVEL_WARNING, "something went wrong when setting hub`s %dth port", port);
    329329                }
    330330        }
     
    337337        usb_lst_append(&usb_hub_list, hub_info);
    338338        fibril_mutex_unlock(&usb_hub_list_lock);
    339         usb_log_debug("hub info added to list");
    340 
    341         usb_log_debug("adding to ddf");
     339        dprintf(USB_LOG_LEVEL_DEBUG, "hub info added to list");
     340
     341        dprintf(USB_LOG_LEVEL_DEBUG, "adding to ddf");
    342342        ddf_fun_t *hub_fun = ddf_fun_create(dev, fun_exposed, "hub");
    343343        assert(hub_fun != NULL);
     
    351351        fid_t fid = fibril_create(usb_hub_control_loop, hub_info);
    352352        if (fid == 0) {
    353                 usb_log_error("failed to start monitoring fibril for new hub");
     353                dprintf(USB_LOG_LEVEL_ERROR,
     354                                ": failed to start monitoring fibril for new hub");
    354355                return ENOMEM;
    355356        }
    356357        fibril_add_ready(fid);
    357358
    358         usb_log_debug("hub fibril created");
     359        dprintf(USB_LOG_LEVEL_DEBUG, "hub fibril created");
    359360        //(void)hub_info;
    360361        //usb_hub_check_hub_changes();
    361362       
    362         usb_log_info("hub dev added");
     363        dprintf(USB_LOG_LEVEL_INFO, "hub dev added");
    363364        //address is lost...
    364         usb_log_debug("\taddress %d, has %d ports ",
     365        dprintf(USB_LOG_LEVEL_DEBUG, "\taddress %d, has %d ports ",
    365366                        //hub_info->endpoints.control.,
    366367                        hub_info->port_count);
     
    378379
    379380/**
    380  * release default address used by given hub
    381  *
    382  * Also unsets hub->is_default_address_used. Convenience wrapper function.
    383  * @note hub->connection MUST be open for communication
    384  * @param hub hub representation
    385  * @return error code
    386  */
    387 static int usb_hub_release_default_address(usb_hub_info_t * hub){
    388         int opResult = usb_hc_release_default_address(&hub->connection);
    389         if(opResult!=EOK){
    390                 usb_log_error("could not release default address, errno %d",opResult);
    391                 return opResult;
    392         }
    393         hub->is_default_address_used = false;
    394         return EOK;
    395 }
    396 
    397 /**
    398381 * Reset the port with new device and reserve the default address.
    399382 * @param hc
     
    402385 */
    403386static void usb_hub_init_add_device(usb_hub_info_t * hub, uint16_t port,
    404                 usb_speed_t speed) {
    405         //if this hub already uses default address, it cannot request it once more
    406         if(hub->is_default_address_used) return;
    407         int opResult = usb_hub_clear_port_feature(&hub->endpoints.control,
    408                                 port, USB_HUB_FEATURE_C_PORT_CONNECTION);
    409         if(opResult != EOK){
    410                 usb_log_warning("could not clear port-change-connection flag");
    411         }
    412 
     387                bool isLowSpeed) {
    413388        usb_device_request_setup_packet_t request;
    414         usb_log_info("some connection changed");
     389        int opResult;
     390        dprintf(USB_LOG_LEVEL_INFO, "some connection changed");
    415391        assert(hub->endpoints.control.hc_phone);
    416392        //get default address
     393        usb_speed_t speed = isLowSpeed?USB_SPEED_LOW:USB_SPEED_FULL;
    417394        opResult = usb_hc_reserve_default_address(&hub->connection, speed);
    418395       
    419396        if (opResult != EOK) {
    420                 usb_log_warning("cannot assign default address, it is probably used %d",
    421                                 opResult);
    422                 return;
    423         }
    424         hub->is_default_address_used = true;
     397                dprintf(USB_LOG_LEVEL_WARNING,
     398                                "cannot assign default address, it is probably used %d",opResult);
     399                return;
     400        }
    425401        //reset port
    426402        usb_hub_set_reset_port_request(&request, port);
     
    431407                        );
    432408        if (opResult != EOK) {
    433                 usb_log_error("something went wrong when reseting a port %d",opResult);
     409                dprintf(USB_LOG_LEVEL_ERROR,
     410                                "something went wrong when reseting a port %d",opResult);
    434411                //usb_hub_release_default_address(hc);
    435                 usb_hub_release_default_address(hub);
    436         }
    437         return;
     412                usb_hc_release_default_address(&hub->connection);
     413        }
    438414}
    439415
     
    448424
    449425        int opResult;
    450         usb_log_info("finalizing add device");
     426        dprintf(USB_LOG_LEVEL_INFO, "finalizing add device");
    451427        opResult = usb_hub_clear_port_feature(&hub->endpoints.control,
    452428            port, USB_HUB_FEATURE_C_PORT_RESET);
    453429
    454430        if (opResult != EOK) {
    455                 usb_log_error("failed to clear port reset feature");
    456                 usb_hub_release_default_address(hub);
     431                dprintf(USB_LOG_LEVEL_ERROR, "failed to clear port reset feature");
     432                usb_hc_release_default_address(&hub->connection);
    457433                return;
    458434        }
     
    478454                        );
    479455        if (new_device_address < 0) {
    480                 usb_log_error("failed to get free USB address");
     456                dprintf(USB_LOG_LEVEL_ERROR, "failed to get free USB address");
    481457                opResult = new_device_address;
    482                 usb_hub_release_default_address(hub);
    483                 return;
    484         }
    485         usb_log_info("setting new address %d",new_device_address);
     458                usb_hc_release_default_address(&hub->connection);
     459                return;
     460        }
     461        dprintf(USB_LOG_LEVEL_INFO, "setting new address %d",new_device_address);
    486462        //opResult = usb_drv_req_set_address(hc, USB_ADDRESS_DEFAULT,
    487463        //    new_device_address);
     
    490466        usb_endpoint_pipe_end_session(&new_device_pipe);
    491467        if (opResult != EOK) {
    492                 usb_log_error("could not set address for new device %d",opResult);
    493                 usb_hub_release_default_address(hub);
     468                dprintf(USB_LOG_LEVEL_ERROR,
     469                                "could not set address for new device %d",opResult);
     470                usb_hc_release_default_address(&hub->connection);
    494471                return;
    495472        }
     
    497474
    498475        //opResult = usb_hub_release_default_address(hc);
    499         opResult = usb_hub_release_default_address(hub);
     476        opResult = usb_hc_release_default_address(&hub->connection);
    500477        if(opResult!=EOK){
    501478                return;
     
    509486
    510487        if (opResult != EOK) {
    511                 usb_log_error("could not start driver for new device %d",opResult);
     488                dprintf(USB_LOG_LEVEL_ERROR,
     489                                "could not start driver for new device %d",opResult);
    512490                return;
    513491        }
     
    520498                        &hub->attached_devs[port]);
    521499        if (opResult != EOK) {
    522                 usb_log_error("could not assign address of device in hcd %d",opResult);
    523                 return;
    524         }
    525         usb_log_info("new device address %d, handle %zu",
     500                dprintf(USB_LOG_LEVEL_ERROR,
     501                                "could not assign address of device in hcd %d",opResult);
     502                return;
     503        }
     504        dprintf(USB_LOG_LEVEL_INFO, "new device address %d, handle %zu",
    526505            new_device_address, child_handle);
    527506
     
    536515static void usb_hub_removed_device(
    537516    usb_hub_info_t * hub,uint16_t port) {
    538 
    539         int opResult = usb_hub_clear_port_feature(&hub->endpoints.control,
    540                                 port, USB_HUB_FEATURE_C_PORT_CONNECTION);
    541         if(opResult != EOK){
    542                 usb_log_warning("could not clear port-change-connection flag");
    543         }
     517               
    544518        /** \TODO remove device from device manager - not yet implemented in
    545519         * devide manager
     
    559533                 */
    560534        }else{
    561                 usb_log_warning("this is strange, disconnected device had no address");
     535                dprintf(USB_LOG_LEVEL_WARNING, "this is strange, disconnected device had no address");
    562536                //device was disconnected before it`s port was reset - return default address
    563                 usb_hub_release_default_address(hub);
    564         }
    565 }
    566 
    567 
    568 /**
    569  * Process over current condition on port.
     537                //usb_drv_release_default_address(hc);
     538                usb_hc_release_default_address(&hub->connection);
     539        }
     540}
     541
     542
     543/**
     544 *Process over current condition on port.
    570545 *
    571546 * Turn off the power on the port.
     
    580555            port, USB_HUB_FEATURE_PORT_POWER);
    581556        if(opResult!=EOK){
    582                 usb_log_error("cannot power off port %d;  %d",
     557                dprintf(USB_LOG_LEVEL_ERROR, "cannot power off port %d;  %d",
    583558                                port, opResult);
    584559        }
     
    593568static void usb_hub_process_interrupt(usb_hub_info_t * hub,
    594569        uint16_t port) {
    595         usb_log_debug("interrupt at port %d", port);
     570        dprintf(USB_LOG_LEVEL_DEBUG, "interrupt at port %d", port);
    596571        //determine type of change
    597572        usb_endpoint_pipe_t *pipe = &hub->endpoints.control;
     
    612587                        );
    613588        if (opResult != EOK) {
    614                 usb_log_error("could not get port status");
     589                dprintf(USB_LOG_LEVEL_ERROR, "could not get port status");
    615590                return;
    616591        }
    617592        if (rcvd_size != sizeof (usb_port_status_t)) {
    618                 usb_log_error("received status has incorrect size");
     593                dprintf(USB_LOG_LEVEL_ERROR, "received status has incorrect size");
    619594                return;
    620595        }
    621596        //something connected/disconnected
    622597        if (usb_port_connect_change(&status)) {
     598                opResult = usb_hub_clear_port_feature(pipe,
     599                    port, USB_HUB_FEATURE_C_PORT_CONNECTION);
     600                // TODO: check opResult
    623601                if (usb_port_dev_connected(&status)) {
    624                         usb_log_info("some connection changed");
    625                         usb_hub_init_add_device(hub, port, usb_port_speed(&status));
     602                        dprintf(USB_LOG_LEVEL_INFO, "some connection changed");
     603                        usb_hub_init_add_device(hub, port, usb_port_low_speed(&status));
    626604                } else {
    627605                        usb_hub_removed_device(hub, port);
     
    634612                        usb_hub_over_current(hub,port);
    635613                }else{
    636                         usb_log_info("over current condition was auto-resolved on port %d",
    637                                         port);
     614                        dprintf(USB_LOG_LEVEL_INFO,
     615                                "over current condition was auto-resolved on port %d",port);
    638616                }
    639617        }
    640618        //port reset
    641619        if (usb_port_reset_completed(&status)) {
    642                 usb_log_info("port reset complete");
     620                dprintf(USB_LOG_LEVEL_INFO, "port reset complete");
    643621                if (usb_port_enabled(&status)) {
    644622                        usb_hub_finalize_add_device(hub, port, usb_port_low_speed(&status));
    645623                } else {
    646                         usb_log_warning("port reset, but port still not enabled");
     624                        dprintf(USB_LOG_LEVEL_WARNING, "port reset, but port still not enabled");
    647625                }
    648626        }
     
    653631        usb_port_set_dev_connected(&status, false);
    654632        if (status>>16) {
    655                 usb_log_info("there was some unsupported change on port %d: %X",
    656                                 port,status);
    657 
    658         }
    659         /// \TODO handle other changes - is there any?
     633                dprintf(USB_LOG_LEVEL_INFO, "there was some unsupported change on port %d: %X",port,status);
     634
     635        }
     636        /// \TODO handle other changes
    660637}
    661638
     
    670647        opResult = usb_endpoint_pipe_start_session(&hub_info->endpoints.status_change);
    671648        if(opResult != EOK){
    672                 usb_log_error("could not initialize communication for hub; %d",
    673                                 opResult);
     649                dprintf(USB_LOG_LEVEL_ERROR,
     650                                "could not initialize communication for hub; %d", opResult);
    674651                return opResult;
    675652        }
     
    692669        if (opResult != EOK) {
    693670                free(change_bitmap);
    694                 usb_log_warning("something went wrong while getting status of hub");
     671                dprintf(USB_LOG_LEVEL_WARNING, "something went wrong while getting status of hub");
    695672                usb_endpoint_pipe_end_session(&hub_info->endpoints.status_change);
    696673                return opResult;
     
    699676        opResult = usb_endpoint_pipe_start_session(&hub_info->endpoints.control);
    700677        if(opResult!=EOK){
    701                 usb_log_error("could not start control pipe session %d", opResult);
     678                dprintf(USB_LOG_LEVEL_ERROR, "could not start control pipe session %d",
     679                                opResult);
    702680                usb_endpoint_pipe_end_session(&hub_info->endpoints.status_change);
    703681                return opResult;
     
    705683        opResult = usb_hc_connection_open(&hub_info->connection);
    706684        if(opResult!=EOK){
    707                 usb_log_error("could not start host controller session %d",
     685                dprintf(USB_LOG_LEVEL_ERROR, "could not start host controller session %d",
    708686                                opResult);
    709687                usb_endpoint_pipe_end_session(&hub_info->endpoints.control);
Note: See TracChangeset for help on using the changeset viewer.