Changes in / [c28b3a5:5c2c459] in mainline
- Location:
- uspace
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/root_hub.c
rc28b3a5 r5c2c459 61 61 .vendor_id = 0x16db, 62 62 .product_id = 0x0001, 63 /// \TODO these values migt be different 63 64 .str_serial_number = 0, 64 65 .usb_spec_version = 0x110, … … 118 119 static const uint32_t hub_clear_feature_by_writing_one_mask = 119 120 RHS_CLEAR_PORT_POWER; 121 // 1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER; 120 122 121 123 /** … … 125 127 RHS_LPSC_FLAG | 126 128 RHS_OCIC_FLAG; 129 //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT) | 130 //(1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER); 127 131 128 132 /** … … 131 135 static const uint32_t hub_set_feature_direct_mask = 132 136 RHS_SET_PORT_POWER; 137 //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT); 133 138 134 139 /** … … 155 160 RHPS_PRSC_FLAG; 156 161 162 /* 163 164 (1 << USB_HUB_FEATURE_PORT_CONNECTION) | 165 (1 << USB_HUB_FEATURE_PORT_SUSPEND) | 166 (1 << USB_HUB_FEATURE_PORT_OVER_CURRENT) | 167 (1 << USB_HUB_FEATURE_PORT_POWER) | 168 (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) | 169 (1 << USB_HUB_FEATURE_C_PORT_ENABLE) | 170 (1 << USB_HUB_FEATURE_C_PORT_SUSPEND) | 171 (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) | 172 (1 << USB_HUB_FEATURE_C_PORT_RESET); 173 */ 157 174 //note that USB_HUB_FEATURE_PORT_POWER bit is translated into 158 175 //USB_HUB_FEATURE_PORT_LOW_SPEED for port set feature request … … 162 179 */ 163 180 static const uint32_t port_status_change_mask = RHPS_CHANGE_WC_MASK; 181 /* (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) | 182 (1 << USB_HUB_FEATURE_C_PORT_ENABLE) | 183 (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) | 184 (1 << USB_HUB_FEATURE_C_PORT_RESET) | 185 (1 << USB_HUB_FEATURE_C_PORT_SUSPEND); 186 */ 164 187 165 188 static int create_serialized_hub_descriptor(rh_t *instance); … … 397 420 * create answer to port status_request 398 421 * 399 * Copy content of corresponding port status register to answer buffer. The 400 * format of the port status register and port status data is the same ( 401 * see OHCI root hub and USB hub documentation). 422 * Copy content of corresponding port status register to answer buffer. 402 423 * 403 424 * @param instance root hub instance … … 410 431 if (port < 1 || port > instance->port_count) 411 432 return EINVAL; 433 uint32_t * uint32_buffer = (uint32_t*) request->data_buffer; 412 434 request->transfered_size = 4; 413 uint32_t data = instance->registers->rh_port_status[port - 1]; 414 memcpy(request->data_buffer,&data,4); 435 uint32_buffer[0] = instance->registers->rh_port_status[port - 1]; 415 436 #if 0 416 437 int i; … … 429 450 * create answer to port status_request 430 451 * 431 * This copies flags in hub status register into the buffer. The format of the 432 * status register and status message is the same, according to USB hub 433 * specification and OHCI root hub specification. 452 * Copy content of hub status register to answer buffer. 434 453 * 435 454 * @param instance root hub instance … … 439 458 static int process_get_hub_status_request(rh_t *instance, 440 459 usb_transfer_batch_t * request) { 441 //uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;460 uint32_t * uint32_buffer = (uint32_t*) request->data_buffer; 442 461 request->transfered_size = 4; 443 462 //bits, 0,1,16,17 444 463 uint32_t mask = 1 | (1 << 1) | (1 << 16) | (1 << 17); 445 uint32_t data = mask & instance->registers->rh_status; 446 //uint32_buffer[0] = mask & instance->registers->rh_status; 447 memcpy(request->data_buffer,&data,4); 464 uint32_buffer[0] = mask & instance->registers->rh_status; 448 465 449 466 return EOK; … … 499 516 | (1 << (USB_HUB_FEATURE_C_HUB_OVER_CURRENT + 16)); 500 517 bzero(bitmap, instance->interrupt_mask_size); 501 if ( (instance->registers->rh_status & mask) !=0) {518 if (instance->registers->rh_status & mask) { 502 519 bitmap[0] = 1; 503 520 } … … 505 522 mask = port_status_change_mask; 506 523 for (port = 1; port <= instance->port_count; ++port) { 507 if ( (mask & instance->registers->rh_port_status[port - 1]) != 0) {524 if (mask & instance->registers->rh_port_status[port - 1]) { 508 525 509 526 bitmap[(port) / 8] += 1 << (port % 8); -
uspace/drv/usbhub/usbhub.c
rc28b3a5 r5c2c459 67 67 usb_hub_status_t status); 68 68 69 static int usb_process_hub_ local_power_change(usb_hub_info_t * hub_info,69 static int usb_process_hub_power_change(usb_hub_info_t * hub_info, 70 70 usb_hub_status_t status); 71 71 … … 386 386 int opResult; 387 387 if (usb_hub_is_status(status,USB_HUB_FEATURE_HUB_OVER_CURRENT)){ 388 //poweroff all ports 389 unsigned int port; 390 for(port = 1;port <= hub_info->port_count;++port){ 391 opResult = usb_hub_clear_port_feature( 392 hub_info->control_pipe,port, 393 USB_HUB_FEATURE_PORT_POWER); 394 if (opResult != EOK) { 395 usb_log_warning( 396 "cannot power off port %d; %d\n", 397 port, opResult); 398 } 388 opResult = usb_hub_clear_feature(hub_info->control_pipe, 389 USB_HUB_FEATURE_HUB_LOCAL_POWER); 390 if (opResult != EOK) { 391 usb_log_error("cannot power off hub: %d\n", 392 opResult); 399 393 } 400 394 } else { 401 //power all ports 402 unsigned int port; 403 for(port = 1;port <= hub_info->port_count;++port){ 404 opResult = usb_hub_set_port_feature( 405 hub_info->control_pipe,port, 406 USB_HUB_FEATURE_PORT_POWER); 407 if (opResult != EOK) { 408 usb_log_warning( 409 "cannot power off port %d; %d\n", 410 port, opResult); 411 } 395 opResult = usb_hub_set_feature(hub_info->control_pipe, 396 USB_HUB_FEATURE_HUB_LOCAL_POWER); 397 if (opResult != EOK) { 398 usb_log_error("cannot power on hub: %d\n", 399 opResult); 412 400 } 413 401 } … … 416 404 417 405 /** 418 * process hub local power change 419 * 420 * This change is ignored. 406 * process hub power change 407 * 408 * If the power has been lost, reestablish it. 409 * If it was reestablished, re-power all ports. 421 410 * @param hub_info hub instance 422 411 * @param status hub status bitmask 423 412 * @return error code 424 413 */ 425 static int usb_process_hub_ local_power_change(usb_hub_info_t * hub_info,414 static int usb_process_hub_power_change(usb_hub_info_t * hub_info, 426 415 usb_hub_status_t status) { 427 416 int opResult = EOK; 417 if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) { 418 //restart power on hub 419 opResult = usb_hub_set_feature(hub_info->control_pipe, 420 USB_HUB_FEATURE_HUB_LOCAL_POWER); 421 if (opResult != EOK) { 422 usb_log_error("cannot power on hub: %d\n", 423 opResult); 424 } 425 } else {//power reestablished on hub- restart ports 426 size_t port; 427 for (port = 1; port <= hub_info->port_count; ++port) { 428 opResult = usb_hub_set_port_feature( 429 hub_info->control_pipe, 430 port, USB_HUB_FEATURE_PORT_POWER); 431 if (opResult != EOK) { 432 usb_log_error("Cannot power on port %zu: %s.\n", 433 port, str_error(opResult)); 434 } 435 } 436 } 437 if(opResult!=EOK){ 438 return opResult;//no feature clearing 439 } 428 440 opResult = usb_hub_clear_feature(hub_info->control_pipe, 429 441 USB_HUB_FEATURE_C_HUB_LOCAL_POWER); … … 440 452 * 441 453 * The change can be either in the over-current condition or 442 * local-power change.454 * local-power lost condition. 443 455 * @param hub_info hub instance 444 456 */ … … 475 487 if ( 476 488 usb_hub_is_status(status,16+USB_HUB_FEATURE_C_HUB_LOCAL_POWER)) { 477 usb_process_hub_ local_power_change(hub_info, status);489 usb_process_hub_power_change(hub_info, status); 478 490 } 479 491 } -
uspace/lib/drv/include/remote_pci.h
rc28b3a5 r5c2c459 36 36 #define LIBDRV_REMOTE_PCI_H_ 37 37 38 externremote_iface_t remote_pci_iface;38 remote_iface_t remote_pci_iface; 39 39 40 40 #endif -
uspace/lib/drv/include/remote_usb.h
rc28b3a5 r5c2c459 36 36 #define LIBDRV_REMOTE_USB_H_ 37 37 38 externremote_iface_t remote_usb_iface;38 remote_iface_t remote_usb_iface; 39 39 40 40 #endif -
uspace/lib/drv/include/remote_usbhc.h
rc28b3a5 r5c2c459 36 36 #define LIBDRV_REMOTE_USBHC_H_ 37 37 38 externremote_iface_t remote_usbhc_iface;38 remote_iface_t remote_usbhc_iface; 39 39 40 40 #endif
Note:
See TracChangeset
for help on using the changeset viewer.