Changeset 9014dcd in mainline
- Timestamp:
- 2011-04-22T12:47:39Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 32aef25b, 54d71e1
- Parents:
- 44b1674
- Location:
- uspace/drv
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/root_hub.c
r44b1674 r9014dcd 217 217 instance->registers->rh_desc_a |= RHDA_NPS_FLAG; 218 218 instance->unfinished_interrupt_transfer = NULL; 219 instance->interrupt_buffer = malloc((instance->port_count + 8)/8); 219 220 usb_log_info("OHCI root hub with %d ports.\n", instance->port_count); 220 221 return EOK; … … 471 472 size_t * buffer_size) { 472 473 int bit_count = instance->port_count + 1; 473 (*buffer_size) = (bit_count / 8) + ((bit_count % 8 == 0) ? 0 : 1);474 475 (*buffer) = malloc(*buffer_size);474 (*buffer_size) = (bit_count+7 / 8); 475 476 (*buffer) = instance->interrupt_buffer;//malloc(*buffer_size); 476 477 uint8_t * bitmap = (uint8_t*) (*buffer); 477 478 uint32_t mask = (1 << (USB_HUB_FEATURE_C_HUB_LOCAL_POWER + 16)) -
uspace/drv/ohci/root_hub.h
r44b1674 r9014dcd 56 56 /** interrupt transfer waiting for an actual interrupt to occur */ 57 57 usb_transfer_batch_t * unfinished_interrupt_transfer; 58 /** pre-allocated interrupt mask 59 * 60 * This is allocated when initializing instance, so that memory 61 * allocation is not needed when processing request. 62 */ 63 uint8_t * interrupt_buffer; 58 64 } rh_t; 59 65 -
uspace/drv/usbhub/usbhub.c
r44b1674 r9014dcd 173 173 leave: 174 174 /* FIXME: proper interval. */ 175 async_usleep(1000 * 1000 * 10);175 async_usleep(1000 * 250); 176 176 177 177 return true; … … 249 249 sizeof (usb_hub_port_t) * (hub_info->port_count + 1)); 250 250 size_t port; 251 for (port = 0; port < hub_info->port_count + 1; port++) {251 for (port = 0; port < hub_info->port_count + 1; ++port) { 252 252 usb_hub_port_init(&hub_info->ports[port]); 253 253 } 254 254 if(is_power_switched){ 255 255 usb_log_debug("is_power_switched\n"); 256 if(has_individual_port_powering){ 257 usb_log_debug("has_individual_port_powering\n"); 258 for (port = 0; port < hub_info->port_count; port++) { 259 opResult = usb_hub_set_port_feature(hub_info->control_pipe, 260 port+1, USB_HUB_FEATURE_PORT_POWER); 261 if (opResult != EOK) { 262 usb_log_error("cannot power on port %zu: %s.\n", 263 port+1, str_error(opResult)); 264 } 256 257 for (port = 1; port <= hub_info->port_count; ++port) { 258 usb_log_debug("powering port %d\n",port); 259 opResult = usb_hub_set_port_feature(hub_info->control_pipe, 260 port, USB_HUB_FEATURE_PORT_POWER); 261 if (opResult != EOK) { 262 usb_log_error("cannot power on port %zu: %s.\n", 263 port, str_error(opResult)); 265 264 } 266 }else{ 265 } 266 if(!has_individual_port_powering){ 267 267 usb_log_debug("!has_individual_port_powering\n"); 268 268 opResult = usb_hub_set_feature(hub_info->control_pipe, … … 409 409 usb_hub_status_t status) { 410 410 int opResult; 411 if ( usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {411 if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) { 412 412 //restart power on hub 413 413 opResult = usb_hub_set_feature(hub_info->control_pipe, … … 419 419 } else {//power reestablished on hub- restart ports 420 420 size_t port; 421 for (port = 0; port <hub_info->port_count; ++port) {421 for (port = 1; port <= hub_info->port_count; ++port) { 422 422 opResult = usb_hub_set_port_feature( 423 423 hub_info->control_pipe, … … 428 428 } 429 429 } 430 opResult = usb_hub_clear_feature(hub_info->control_pipe, 431 USB_HUB_FEATURE_C_HUB_LOCAL_POWER); 432 if (opResult != EOK) { 433 usb_log_error("cannnot clear hub power change flag: " 434 "%d\n", 435 opResult); 436 } 430 437 } 431 438 return opResult;
Note:
See TracChangeset
for help on using the changeset viewer.