Changeset 41ef5b9 in mainline for uspace/drv/usbhub
- Timestamp:
- 2011-03-21T17:16:10Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4d0c40b
- Parents:
- fd9f6e4c (diff), 434ef65 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/drv/usbhub
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/main.c
rfd9f6e4c r41ef5b9 42 42 #include "usbhub_private.h" 43 43 44 45 usb_endpoint_description_t hub_status_change_endpoint_description = { 44 /** Hub status-change endpoint description. 45 * 46 * For more information see section 11.15.1 of USB 1.1 specification. 47 */ 48 static usb_endpoint_description_t hub_status_change_endpoint_description = { 46 49 .transfer_type = USB_TRANSFER_INTERRUPT, 47 50 .direction = USB_DIRECTION_IN, … … 57 60 }; 58 61 62 static usb_endpoint_description_t *usb_hub_endpoints[] = { 63 &hub_status_change_endpoint_description, 64 NULL 65 }; 66 59 67 static usb_driver_t usb_hub_driver = { 60 .name = "usbhub", 61 .ops = &usb_hub_driver_ops 68 .name = NAME, 69 .ops = &usb_hub_driver_ops, 70 .endpoints = usb_hub_endpoints 62 71 }; 63 72 … … 65 74 int main(int argc, char *argv[]) 66 75 { 76 printf(NAME ": HelenOS USB hub driver.\n"); 77 67 78 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 68 usb_log_info("starting hub driver\n");69 70 79 71 usb_hub_driver.endpoints = (usb_endpoint_description_t**)72 malloc(2 * sizeof(usb_endpoint_description_t*));73 usb_hub_driver.endpoints[0] = &hub_status_change_endpoint_description;74 usb_hub_driver.endpoints[1] = NULL;75 76 80 return usb_driver_main(&usb_hub_driver); 77 81 } -
uspace/drv/usbhub/usbhub.c
rfd9f6e4c r41ef5b9 157 157 static int usb_hub_set_configuration(usb_hub_info_t * hub_info){ 158 158 //device descriptor 159 usb_standard_device_descriptor_t std_descriptor; 160 int opResult = usb_request_get_device_descriptor( 161 &hub_info->usb_device->ctrl_pipe, 162 &std_descriptor); 163 if(opResult!=EOK){ 164 usb_log_error("could not get device descriptor, %d\n",opResult); 165 return opResult; 166 } 159 usb_standard_device_descriptor_t *std_descriptor 160 = &hub_info->usb_device->descriptors.device; 167 161 usb_log_info("hub has %d configurations\n", 168 std_descriptor.configuration_count);169 if(std_descriptor .configuration_count<1){162 std_descriptor->configuration_count); 163 if(std_descriptor->configuration_count<1){ 170 164 usb_log_error("THERE ARE NO CONFIGURATIONS AVAILABLE\n"); 171 165 //shouldn`t I return? 172 } 173 174 /* Retrieve full configuration descriptor. */ 175 uint8_t *descriptors = NULL; 176 size_t descriptors_size = 0; 177 opResult = usb_request_get_full_configuration_descriptor_alloc( 178 &hub_info->usb_device->ctrl_pipe, 0, 179 (void **) &descriptors, &descriptors_size); 180 if (opResult != EOK) { 181 usb_log_error("Could not get configuration descriptor: %s.\n", 182 str_error(opResult)); 183 return opResult; 184 } 166 //definitely 167 return EINVAL; 168 } 169 185 170 usb_standard_configuration_descriptor_t *config_descriptor 186 = (usb_standard_configuration_descriptor_t *) descriptors; 171 = (usb_standard_configuration_descriptor_t *) 172 hub_info->usb_device->descriptors.configuration; 187 173 188 174 /* Set configuration. */ 189 opResult = usb_request_set_configuration(&hub_info->usb_device->ctrl_pipe, 175 int opResult = usb_request_set_configuration( 176 &hub_info->usb_device->ctrl_pipe, 190 177 config_descriptor->configuration_number); 191 178 … … 197 184 usb_log_debug("\tused configuration %d\n", 198 185 config_descriptor->configuration_number); 199 free(descriptors); 186 200 187 return EOK; 201 188 } … … 224 211 } 225 212 226 usb_ endpoint_pipe_start_session(hub_info->control_pipe);213 usb_pipe_start_session(hub_info->control_pipe); 227 214 //set hub configuration 228 215 opResult = usb_hub_set_configuration(hub_info); … … 239 226 return opResult; 240 227 } 241 usb_ endpoint_pipe_end_session(hub_info->control_pipe);228 usb_pipe_end_session(hub_info->control_pipe); 242 229 243 230 244 231 /// \TODO what is this? 245 usb_log_debug(" adding to ddf");232 usb_log_debug("Creating `hub' function.\n"); 246 233 ddf_fun_t *hub_fun = ddf_fun_create(hub_info->usb_device->ddf_dev, 247 234 fun_exposed, "hub"); … … 257 244 fid_t fid = fibril_create(usb_hub_control_loop, hub_info); 258 245 if (fid == 0) { 259 usb_log_error("failed to start monitoring fibril for new hub ");246 usb_log_error("failed to start monitoring fibril for new hub.\n"); 260 247 return ENOMEM; 261 248 } 262 249 fibril_add_ready(fid); 263 usb_log_debug("hub fibril created"); 264 usb_log_debug("has %d ports ",hub_info->port_count); 250 usb_log_debug("Hub fibril created.\n"); 251 252 usb_log_info("Controlling hub `%s' (%d ports).\n", 253 hub_info->usb_device->ddf_dev->name, hub_info->port_count); 265 254 return EOK; 266 255 } … … 321 310 //reset port 322 311 usb_hub_set_reset_port_request(&request, port); 323 opResult = usb_ endpoint_pipe_control_write(312 opResult = usb_pipe_control_write( 324 313 hub->control_pipe, 325 314 &request,sizeof(usb_device_request_setup_packet_t), … … 354 343 } 355 344 //create connection to device 356 usb_ endpoint_pipe_t new_device_pipe;345 usb_pipe_t new_device_pipe; 357 346 usb_device_connection_t new_device_connection; 358 347 usb_device_connection_initialize_on_default_address( … … 360 349 &hub->connection 361 350 ); 362 usb_ endpoint_pipe_initialize_default_control(351 usb_pipe_initialize_default_control( 363 352 &new_device_pipe, 364 353 &new_device_connection); 365 usb_ endpoint_pipe_probe_default_control(&new_device_pipe);354 usb_pipe_probe_default_control(&new_device_pipe); 366 355 367 356 /* Request address from host controller. */ … … 379 368 //opResult = usb_drv_req_set_address(hc, USB_ADDRESS_DEFAULT, 380 369 // new_device_address); 381 usb_ endpoint_pipe_start_session(&new_device_pipe);370 usb_pipe_start_session(&new_device_pipe); 382 371 opResult = usb_request_set_address(&new_device_pipe,new_device_address); 383 usb_ endpoint_pipe_end_session(&new_device_pipe);372 usb_pipe_end_session(&new_device_pipe); 384 373 if (opResult != EOK) { 385 374 usb_log_error("could not set address for new device %d\n",opResult); … … 488 477 usb_log_debug("interrupt at port %d\n", port); 489 478 //determine type of change 490 usb_ endpoint_pipe_t *pipe = hub->control_pipe;479 usb_pipe_t *pipe = hub->control_pipe; 491 480 492 481 int opResult; … … 499 488 //endpoint 0 500 489 501 opResult = usb_ endpoint_pipe_control_read(490 opResult = usb_pipe_control_read( 502 491 pipe, 503 492 &request, sizeof(usb_device_request_setup_packet_t), … … 533 522 //port reset 534 523 if (usb_port_reset_completed(&status)) { 535 usb_log_info("port reset complete ");524 usb_log_info("port reset complete\n"); 536 525 if (usb_port_enabled(&status)) { 537 526 usb_hub_finalize_add_device(hub, port, usb_port_speed(&status)); … … 560 549 int usb_hub_check_hub_changes(usb_hub_info_t * hub_info){ 561 550 int opResult; 562 opResult = usb_ endpoint_pipe_start_session(551 opResult = usb_pipe_start_session( 563 552 hub_info->status_change_pipe); 564 553 if(opResult != EOK){ … … 578 567 * Send the request. 579 568 */ 580 opResult = usb_ endpoint_pipe_read(569 opResult = usb_pipe_read( 581 570 hub_info->status_change_pipe, 582 571 change_bitmap, byte_length, &actual_size … … 586 575 free(change_bitmap); 587 576 usb_log_warning("something went wrong while getting status of hub\n"); 588 usb_ endpoint_pipe_end_session(hub_info->status_change_pipe);577 usb_pipe_end_session(hub_info->status_change_pipe); 589 578 return opResult; 590 579 } 591 580 unsigned int port; 592 opResult = usb_ endpoint_pipe_start_session(hub_info->control_pipe);581 opResult = usb_pipe_start_session(hub_info->control_pipe); 593 582 if(opResult!=EOK){ 594 583 usb_log_error("could not start control pipe session %d\n", opResult); 595 usb_ endpoint_pipe_end_session(hub_info->status_change_pipe);584 usb_pipe_end_session(hub_info->status_change_pipe); 596 585 return opResult; 597 586 } … … 600 589 usb_log_error("could not start host controller session %d\n", 601 590 opResult); 602 usb_ endpoint_pipe_end_session(hub_info->control_pipe);603 usb_ endpoint_pipe_end_session(hub_info->status_change_pipe);591 usb_pipe_end_session(hub_info->control_pipe); 592 usb_pipe_end_session(hub_info->status_change_pipe); 604 593 return opResult; 605 594 } … … 615 604 } 616 605 usb_hc_connection_close(&hub_info->connection); 617 usb_ endpoint_pipe_end_session(hub_info->control_pipe);618 usb_ endpoint_pipe_end_session(hub_info->status_change_pipe);606 usb_pipe_end_session(hub_info->control_pipe); 607 usb_pipe_end_session(hub_info->status_change_pipe); 619 608 free(change_bitmap); 620 609 return EOK; -
uspace/drv/usbhub/usbhub.h
rfd9f6e4c r41ef5b9 48 48 49 49 50 /** Hub status-change endpoint description51 *52 * For more see usb hub specification in 11.15.1 of53 */54 extern usb_endpoint_description_t hub_status_change_endpoint_description;55 56 57 58 /* Hub endpoints. */59 /*typedef struct {60 usb_endpoint_pipe_t control;61 usb_endpoint_pipe_t status_change;62 } usb_hub_endpoints_t;63 */64 65 66 50 /** Information about attached hub. */ 67 51 typedef struct { … … 88 72 * searched again and again for the 'right pipe'. 89 73 */ 90 usb_ endpoint_pipe_t * status_change_pipe;74 usb_pipe_t * status_change_pipe; 91 75 92 76 /** convenience pointer to control pipe … … 96 80 * searched again and again for the 'right pipe'. 97 81 */ 98 usb_ endpoint_pipe_t * control_pipe;82 usb_pipe_t * control_pipe; 99 83 100 84 /** generic usb device data*/ -
uspace/drv/usbhub/usbhub_private.h
rfd9f6e4c r41ef5b9 95 95 * @return Operation result 96 96 */ 97 static inline int usb_hub_clear_port_feature(usb_ endpoint_pipe_t *pipe,97 static inline int usb_hub_clear_port_feature(usb_pipe_t *pipe, 98 98 int port_index, 99 99 usb_hub_class_feature_t feature) { … … 106 106 }; 107 107 clear_request.value = feature; 108 return usb_ endpoint_pipe_control_write(pipe, &clear_request,108 return usb_pipe_control_write(pipe, &clear_request, 109 109 sizeof(clear_request), NULL, 0); 110 110 }
Note:
See TracChangeset
for help on using the changeset viewer.
