Changeset 3dba1ca in mainline
- Timestamp:
- 2011-04-05T20:12:26Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a209648
- Parents:
- 90d0522
- Location:
- uspace/drv/usbhub
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/port_status.h
r90d0522 r3dba1ca 64 64 */ 65 65 static inline void usb_hub_set_port_status_request( 66 usb_device_request_setup_packet_t * request, uint16_t port67 ){66 usb_device_request_setup_packet_t * request, uint16_t port 67 ) { 68 68 request->index = port; 69 69 request->request_type = USB_HUB_REQ_TYPE_GET_PORT_STATUS; … … 79 79 */ 80 80 static inline void usb_hub_set_hub_status_request( 81 usb_device_request_setup_packet_t * request82 ){81 usb_device_request_setup_packet_t * request 82 ) { 83 83 request->index = 0; 84 84 request->request_type = USB_HUB_REQ_TYPE_GET_HUB_STATUS; … … 88 88 } 89 89 90 91 90 /** 92 91 * create request for usb hub port status … … 95 94 */ 96 95 static inline usb_device_request_setup_packet_t * 97 usb_hub_create_port_status_request(uint16_t port) {96 usb_hub_create_port_status_request(uint16_t port) { 98 97 usb_device_request_setup_packet_t * result = 99 98 usb_new(usb_device_request_setup_packet_t); 100 usb_hub_set_port_status_request(result, port);99 usb_hub_set_port_status_request(result, port); 101 100 return result; 102 101 } 103 102 104 105 103 /** 106 104 * set the device request to be a port feature enable request … … 110 108 */ 111 109 static inline void usb_hub_set_enable_port_feature_request( 112 usb_device_request_setup_packet_t * request, uint16_t port,113 114 ){110 usb_device_request_setup_packet_t * request, uint16_t port, 111 uint16_t feature_selector 112 ) { 115 113 request->index = port; 116 114 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 127 125 */ 128 126 static inline void usb_hub_set_disable_port_feature_request( 129 usb_device_request_setup_packet_t * request, uint16_t port,130 131 ){127 usb_device_request_setup_packet_t * request, uint16_t port, 128 uint16_t feature_selector 129 ) { 132 130 request->index = port; 133 131 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 143 141 */ 144 142 static inline void usb_hub_set_enable_port_request( 145 usb_device_request_setup_packet_t * request, uint16_t port146 ){143 usb_device_request_setup_packet_t * request, uint16_t port 144 ) { 147 145 request->index = port; 148 146 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 158 156 */ 159 157 static inline usb_device_request_setup_packet_t * 160 usb_hub_create_enable_port_request(uint16_t port) {158 usb_hub_create_enable_port_request(uint16_t port) { 161 159 usb_device_request_setup_packet_t * result = 162 160 usb_new(usb_device_request_setup_packet_t); 163 usb_hub_set_enable_port_request(result, port);161 usb_hub_set_enable_port_request(result, port); 164 162 return result; 165 163 } … … 171 169 */ 172 170 static inline void usb_hub_set_disable_port_request( 173 usb_device_request_setup_packet_t * request, uint16_t port174 ){171 usb_device_request_setup_packet_t * request, uint16_t port 172 ) { 175 173 request->index = port; 176 174 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 186 184 */ 187 185 static inline usb_device_request_setup_packet_t * 188 usb_hub_create_disable_port_request(uint16_t port) {186 usb_hub_create_disable_port_request(uint16_t port) { 189 187 usb_device_request_setup_packet_t * result = 190 188 usb_new(usb_device_request_setup_packet_t); 191 usb_hub_set_disable_port_request(result, port);189 usb_hub_set_disable_port_request(result, port); 192 190 return result; 193 191 } … … 199 197 */ 200 198 static inline void usb_hub_set_reset_port_request( 201 usb_device_request_setup_packet_t * request, uint16_t port202 ){199 usb_device_request_setup_packet_t * request, uint16_t port 200 ) { 203 201 request->index = port; 204 202 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 214 212 */ 215 213 static inline usb_device_request_setup_packet_t * 216 usb_hub_create_reset_port_request(uint16_t port) {214 usb_hub_create_reset_port_request(uint16_t port) { 217 215 usb_device_request_setup_packet_t * result = 218 216 usb_new(usb_device_request_setup_packet_t); 219 usb_hub_set_reset_port_request(result, port);217 usb_hub_set_reset_port_request(result, port); 220 218 return result; 221 219 } … … 227 225 */ 228 226 static inline void usb_hub_set_power_port_request( 229 usb_device_request_setup_packet_t * request, uint16_t port230 ){227 usb_device_request_setup_packet_t * request, uint16_t port 228 ) { 231 229 request->index = port; 232 230 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 242 240 */ 243 241 static inline void usb_hub_unset_power_port_request( 244 usb_device_request_setup_packet_t * request, uint16_t port245 ){242 usb_device_request_setup_packet_t * request, uint16_t port 243 ) { 246 244 request->index = port; 247 245 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE; … … 251 249 } 252 250 253 254 /** get i`th bit of port status */ 255 static inline bool usb_port_get_bit(usb_port_status_t * status, int idx) 256 { 257 return (((*status)>>(idx))%2); 258 } 259 260 /** set i`th bit of port status */ 251 /** 252 * get i`th bit of port status 253 * 254 * @param status 255 * @param idx 256 * @return 257 */ 258 static inline bool usb_port_get_bit(usb_port_status_t * status, int idx) { 259 return (*status)&(1 << idx); 260 } 261 262 /** 263 * set i`th bit of port status 264 * 265 * @param status 266 * @param idx 267 * @param value 268 */ 261 269 static inline void usb_port_set_bit( 262 usb_port_status_t * status, int idx, bool value) 263 { 264 (*status) = value? 265 ((*status)|(1<<(idx))): 266 ((*status)&(~(1<<(idx)))); 267 } 268 269 /** get i`th bit of hub status */ 270 static inline bool usb_hub_get_bit(usb_hub_status_t * status, int idx) 271 { 272 return (((*status)>>(idx))%2); 273 } 274 275 /** set i`th bit of hub status */ 270 usb_port_status_t * status, int idx, bool value) { 271 (*status) = value ? 272 ((*status) | (1 << (idx))) : 273 ((*status)&(~(1 << (idx)))); 274 } 275 276 /** 277 * get i`th bit of hub status 278 * 279 * @param status 280 * @param idx 281 * @return 282 */ 283 static inline bool usb_hub_get_bit(usb_hub_status_t * status, int idx) { 284 return (*status)&(1 << idx); 285 } 286 287 /** 288 * set i`th bit of hub status 289 * 290 * @param status 291 * @param idx 292 * @param value 293 */ 276 294 static inline void usb_hub_set_bit( 277 usb_hub_status_t * status, int idx, bool value) 278 { 279 (*status) = value? 280 ((*status)|(1<<(idx))): 281 ((*status)&(~(1<<(idx)))); 282 } 283 284 285 //device connnected on port 286 static inline bool usb_port_dev_connected(usb_port_status_t * status){ 287 return usb_port_get_bit(status,0); 288 } 289 290 static inline void usb_port_set_dev_connected(usb_port_status_t * status,bool connected){ 291 usb_port_set_bit(status,0,connected); 295 usb_hub_status_t * status, int idx, bool value) { 296 (*status) = value ? 297 ((*status) | (1 << (idx))) : 298 ((*status)&(~(1 << (idx)))); 299 } 300 301 /** 302 * connection status geter for port status 303 * 304 * @param status 305 * @return true if there is something connected 306 */ 307 static inline bool usb_port_dev_connected(usb_port_status_t * status) { 308 return usb_port_get_bit(status, 0); 309 } 310 311 static inline void usb_port_set_dev_connected(usb_port_status_t * status, bool connected) { 312 usb_port_set_bit(status, 0, connected); 292 313 } 293 314 294 315 //port enabled 295 static inline bool usb_port_enabled(usb_port_status_t * status){ 296 return usb_port_get_bit(status,1); 297 } 298 299 static inline void usb_port_set_enabled(usb_port_status_t * status,bool enabled){ 300 usb_port_set_bit(status,1,enabled); 316 317 /** 318 * port enabled getter for port status 319 * 320 * @param status 321 * @return true if the port is enabled 322 */ 323 static inline bool usb_port_enabled(usb_port_status_t * status) { 324 return usb_port_get_bit(status, 1); 325 } 326 327 static inline void usb_port_set_enabled(usb_port_status_t * status, bool enabled) { 328 usb_port_set_bit(status, 1, enabled); 301 329 } 302 330 303 331 //port suspended 304 static inline bool usb_port_suspended(usb_port_status_t * status){ 305 return usb_port_get_bit(status,2); 306 } 307 308 static inline void usb_port_set_suspended(usb_port_status_t * status,bool suspended){ 309 usb_port_set_bit(status,2,suspended); 332 /** 333 * port suspended getter for port status 334 * 335 * @param status 336 * @return true if port is suspended 337 */ 338 static inline bool usb_port_suspended(usb_port_status_t * status) { 339 return usb_port_get_bit(status, 2); 340 } 341 342 static inline void usb_port_set_suspended(usb_port_status_t * status, bool suspended) { 343 usb_port_set_bit(status, 2, suspended); 310 344 } 311 345 312 346 //over currect 313 static inline bool usb_port_over_current(usb_port_status_t * status){ 314 return usb_port_get_bit(status,3); 315 } 316 317 static inline void usb_port_set_over_current(usb_port_status_t * status,bool value){ 318 usb_port_set_bit(status,3,value); 347 /** 348 * over current condition indicator getter for port status 349 * 350 * @param status 351 * @return true if there is opver-current condition on the hub 352 */ 353 static inline bool usb_port_over_current(usb_port_status_t * status) { 354 return usb_port_get_bit(status, 3); 355 } 356 357 static inline void usb_port_set_over_current(usb_port_status_t * status, bool value) { 358 usb_port_set_bit(status, 3, value); 319 359 } 320 360 321 361 //port reset 322 static inline bool usb_port_reset(usb_port_status_t * status){ 323 return usb_port_get_bit(status,4); 324 } 325 326 static inline void usb_port_set_reset(usb_port_status_t * status,bool value){ 327 usb_port_set_bit(status,4,value); 362 /** 363 * port reset indicator getter for port status 364 * 365 * @param status 366 * @return true if port is reset 367 */ 368 static inline bool usb_port_reset(usb_port_status_t * status) { 369 return usb_port_get_bit(status, 4); 370 } 371 372 static inline void usb_port_set_reset(usb_port_status_t * status, bool value) { 373 usb_port_set_bit(status, 4, value); 328 374 } 329 375 330 376 //powered 331 static inline bool usb_port_powered(usb_port_status_t * status){ 332 return usb_port_get_bit(status,8); 333 } 334 335 static inline void usb_port_set_powered(usb_port_status_t * status,bool powered){ 336 usb_port_set_bit(status,8,powered); 377 /** 378 * power state getter for port status 379 * 380 * @param status 381 * @return true if port is powered 382 */ 383 static inline bool usb_port_powered(usb_port_status_t * status) { 384 return usb_port_get_bit(status, 8); 385 } 386 387 static inline void usb_port_set_powered(usb_port_status_t * status, bool powered) { 388 usb_port_set_bit(status, 8, powered); 337 389 } 338 390 339 391 //low speed device attached 340 static inline bool usb_port_low_speed(usb_port_status_t * status){ 341 return usb_port_get_bit(status,9); 342 } 343 344 static inline void usb_port_set_low_speed(usb_port_status_t * status,bool low_speed){ 345 usb_port_set_bit(status,9,low_speed); 346 } 347 348 //low speed device attached 349 static inline bool usb_port_high_speed(usb_port_status_t * status){ 350 return usb_port_get_bit(status,10); 351 } 352 353 static inline void usb_port_set_high_speed(usb_port_status_t * status,bool high_speed){ 354 usb_port_set_bit(status,10,high_speed); 355 } 356 357 static inline usb_speed_t usb_port_speed(usb_port_status_t * status){ 358 if(usb_port_low_speed(status)) 392 /** 393 * low speed device on the port indicator 394 * 395 * @param status 396 * @return true if low speed device is attached 397 */ 398 static inline bool usb_port_low_speed(usb_port_status_t * status) { 399 return usb_port_get_bit(status, 9); 400 } 401 402 static inline void usb_port_set_low_speed(usb_port_status_t * status, bool low_speed) { 403 usb_port_set_bit(status, 9, low_speed); 404 } 405 406 //high speed device attached 407 /** 408 * high speed device on the port indicator 409 * 410 * @param status 411 * @return true if high speed device is on port 412 */ 413 static inline bool usb_port_high_speed(usb_port_status_t * status) { 414 return usb_port_get_bit(status, 10); 415 } 416 417 static inline void usb_port_set_high_speed(usb_port_status_t * status, bool high_speed) { 418 usb_port_set_bit(status, 10, high_speed); 419 } 420 421 /** 422 * speed getter for port status 423 * 424 * @param status 425 * @return speed of usb device (for more see usb specification) 426 */ 427 static inline usb_speed_t usb_port_speed(usb_port_status_t * status) { 428 if (usb_port_low_speed(status)) 359 429 return USB_SPEED_LOW; 360 if (usb_port_high_speed(status))430 if (usb_port_high_speed(status)) 361 431 return USB_SPEED_HIGH; 362 432 return USB_SPEED_FULL; … … 365 435 366 436 //connect change 367 static inline bool usb_port_connect_change(usb_port_status_t * status){ 368 return usb_port_get_bit(status,16); 369 } 370 371 static inline void usb_port_set_connect_change(usb_port_status_t * status,bool change){ 372 usb_port_set_bit(status,16,change); 437 /** 438 * port connect change indicator 439 * 440 * @param status 441 * @return true if connection has changed 442 */ 443 static inline bool usb_port_connect_change(usb_port_status_t * status) { 444 return usb_port_get_bit(status, 16); 445 } 446 447 static inline void usb_port_set_connect_change(usb_port_status_t * status, bool change) { 448 usb_port_set_bit(status, 16, change); 373 449 } 374 450 375 451 //port enable change 376 static inline bool usb_port_enabled_change(usb_port_status_t * status){ 377 return usb_port_get_bit(status,17); 378 } 379 380 static inline void usb_port_set_enabled_change(usb_port_status_t * status,bool change){ 381 usb_port_set_bit(status,17,change); 452 /** 453 * port enable change for port status 454 * 455 * @param status 456 * @return true if the port has been enabled/disabled 457 */ 458 static inline bool usb_port_enabled_change(usb_port_status_t * status) { 459 return usb_port_get_bit(status, 17); 460 } 461 462 static inline void usb_port_set_enabled_change(usb_port_status_t * status, bool change) { 463 usb_port_set_bit(status, 17, change); 382 464 } 383 465 384 466 //suspend change 385 static inline bool usb_port_suspend_change(usb_port_status_t * status){ 386 return usb_port_get_bit(status,18); 387 } 388 389 static inline void usb_port_set_suspend_change(usb_port_status_t * status,bool change){ 390 usb_port_set_bit(status,18,change); 467 /** 468 * port suspend change for port status 469 * 470 * @param status 471 * @return ture if suspend status has changed 472 */ 473 static inline bool usb_port_suspend_change(usb_port_status_t * status) { 474 return usb_port_get_bit(status, 18); 475 } 476 477 static inline void usb_port_set_suspend_change(usb_port_status_t * status, bool change) { 478 usb_port_set_bit(status, 18, change); 391 479 } 392 480 393 481 //over current change 394 static inline bool usb_port_overcurrent_change(usb_port_status_t * status){ 395 return usb_port_get_bit(status,19); 396 } 397 398 static inline void usb_port_set_overcurrent_change(usb_port_status_t * status,bool change){ 399 usb_port_set_bit(status,19,change); 482 /** 483 * over current change indicator 484 * 485 * @param status 486 * @return true if over-current condition on port has changed 487 */ 488 static inline bool usb_port_overcurrent_change(usb_port_status_t * status) { 489 return usb_port_get_bit(status, 19); 490 } 491 492 static inline void usb_port_set_overcurrent_change(usb_port_status_t * status, bool change) { 493 usb_port_set_bit(status, 19, change); 400 494 } 401 495 402 496 //reset change 403 static inline bool usb_port_reset_completed(usb_port_status_t * status){ 404 return usb_port_get_bit(status,20); 405 } 406 407 static inline void usb_port_set_reset_completed(usb_port_status_t * status,bool completed){ 408 usb_port_set_bit(status,20,completed); 497 /** 498 * port reset change indicator 499 * @param status 500 * @return true if port has been reset 501 */ 502 static inline bool usb_port_reset_completed(usb_port_status_t * status) { 503 return usb_port_get_bit(status, 20); 504 } 505 506 static inline void usb_port_set_reset_completed(usb_port_status_t * status, bool completed) { 507 usb_port_set_bit(status, 20, completed); 409 508 } 410 509 411 510 //local power status 412 static inline bool usb_hub_local_power_lost(usb_hub_status_t * status){ 413 return usb_hub_get_bit(status,0); 511 /** 512 * local power lost indicator for hub status 513 * 514 * @param status 515 * @return true if hub is not powered 516 */ 517 static inline bool usb_hub_local_power_lost(usb_hub_status_t * status) { 518 return usb_hub_get_bit(status, 0); 414 519 } 415 520 416 521 static inline void usb_hub_set_local_power_lost(usb_port_status_t * status, 417 bool power_lost) {418 usb_hub_set_bit(status, 0,power_lost);522 bool power_lost) { 523 usb_hub_set_bit(status, 0, power_lost); 419 524 } 420 525 421 526 //over current ocndition 422 static inline bool usb_hub_over_current(usb_hub_status_t * status){ 423 return usb_hub_get_bit(status,1); 527 /** 528 * hub over-current indicator 529 * 530 * @param status 531 * @return true if over-current condition occurred on hub 532 */ 533 static inline bool usb_hub_over_current(usb_hub_status_t * status) { 534 return usb_hub_get_bit(status, 1); 424 535 } 425 536 426 537 static inline void usb_hub_set_over_current(usb_port_status_t * status, 427 bool over_current) {428 usb_hub_set_bit(status, 1,over_current);538 bool over_current) { 539 usb_hub_set_bit(status, 1, over_current); 429 540 } 430 541 431 542 //local power change 432 static inline bool usb_hub_local_power_change(usb_hub_status_t * status){ 433 return usb_hub_get_bit(status,16); 543 /** 544 * hub power change indicator 545 * 546 * @param status 547 * @return true if local power status has been changed - power has been 548 * dropped or re-established 549 */ 550 static inline bool usb_hub_local_power_change(usb_hub_status_t * status) { 551 return usb_hub_get_bit(status, 16); 434 552 } 435 553 436 554 static inline void usb_hub_set_local_power_change(usb_port_status_t * status, 437 bool change) {438 usb_hub_set_bit(status, 16,change);555 bool change) { 556 usb_hub_set_bit(status, 16, change); 439 557 } 440 558 441 559 //local power status 442 static inline bool usb_hub_over_current_change(usb_hub_status_t * status){ 443 return usb_hub_get_bit(status,17); 560 /** 561 * hub over-current condition change indicator 562 * 563 * @param status 564 * @return true if over-current condition has changed 565 */ 566 static inline bool usb_hub_over_current_change(usb_hub_status_t * status) { 567 return usb_hub_get_bit(status, 17); 444 568 } 445 569 446 570 static inline void usb_hub_set_over_current_change(usb_port_status_t * status, 447 bool change) {448 usb_hub_set_bit(status, 17,change);571 bool change) { 572 usb_hub_set_bit(status, 17, change); 449 573 } 450 574 -
uspace/drv/usbhub/usbhub.c
r90d0522 r3dba1ca 76 76 async_usleep(1000 * 1000 * 10); /// \TODO proper number once 77 77 errorCode = usb_hub_check_hub_changes(hub_info); 78 79 78 } 80 79 usb_log_error("something in ctrl loop went wrong, errno %d\n", … … 85 84 86 85 /// \TODO set_port_feature use 86 /// \TODO unmess code 87 87 88 88 //********************************************* … … 766 766 } 767 767 768 /** 769 * process hub over current change 770 * 771 * This means either to power off the hub or power it on. 772 * @param hub_info hub instance 773 * @param status hub status bitmask 774 * @return error code 775 */ 768 776 static int usb_process_hub_over_current(usb_hub_info_t * hub_info, 769 777 usb_hub_status_t status) … … 788 796 } 789 797 798 /** 799 * process hub power change 800 * 801 * If the power has been lost, reestablish it. 802 * If it was reestablished, re-power all ports. 803 * @param hub_info hub instance 804 * @param status hub status bitmask 805 * @return error code 806 */ 790 807 static int usb_process_hub_power_change(usb_hub_info_t * hub_info, 791 808 usb_hub_status_t status) … … 815 832 } 816 833 817 834 /** 835 * process hub interrupts 836 * 837 * The change can be either in the over-current condition or 838 * local-power lost condition. 839 * @param hub_info hub instance 840 */ 818 841 static void usb_hub_process_global_interrupt(usb_hub_info_t * hub_info){ 819 842 usb_log_debug("global interrupt on a hub\n"); … … 850 873 } 851 874 875 /** 876 * this is an attempt to initialize non-removable devices in the hub 877 * 878 * @param hub_info hub instance 879 * @param port port number, counting from 1 880 * @return error code 881 */ 852 882 static int initialize_non_removable(usb_hub_info_t * hub_info, 853 883 unsigned int port) {
Note:
See TracChangeset
for help on using the changeset viewer.