Changes in / [72fea5a:2c98e78] in mainline
- Location:
- uspace/drv/usbhub
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/main.c
r72fea5a r2c98e78 38 38 39 39 usb_general_list_t usb_hub_list; 40 futex_t usb_hub_list_lock;41 40 42 41 static driver_ops_t hub_driver_ops = { … … 61 60 { 62 61 usb_dprintf_enable(NAME,1); 63 futex_initialize(&usb_hub_list_lock, 0);64 62 usb_lst_init(&usb_hub_list); 65 futex_up(&usb_hub_list_lock);66 63 fid_t fid = fibril_create(usb_hub_control_loop, NULL); 67 64 if (fid == 0) { -
uspace/drv/usbhub/usbhub.c
r72fea5a r2c98e78 75 75 //get some hub info 76 76 usb_address_t addr = usb_drv_get_my_address(hc, device); 77 dprintf(1,"[usb_hub] addres sof newly created hub = %d", addr);77 dprintf(1,"[usb_hub] addres of newly created hub = %d", addr); 78 78 /*if(addr<0){ 79 79 //return result; … … 174 174 dprintf(1,"[usb_hub] THERE ARE NO CONFIGURATIONS AVAILABLE"); 175 175 } 176 /// \TODO check other configurations177 176 usb_standard_configuration_descriptor_t config_descriptor; 178 177 opResult = usb_drv_req_get_bare_configuration_descriptor(hc, … … 195 194 } 196 195 196 197 197 for (port = 1; port < hub_info->port_count+1; ++port) { 198 198 usb_hub_set_power_port_request(&request, port); … … 205 205 //ports powered, hub seems to be enabled 206 206 207 207 208 ipc_hangup(hc); 208 209 209 210 //add the hub to list 210 futex_down(&usb_hub_list_lock);211 211 usb_lst_append(&usb_hub_list, hub_info); 212 futex_up(&usb_hub_list_lock);213 214 212 dprintf(1,"[usb_hub] hub info added to list"); 215 213 //(void)hub_info; … … 235 233 // 236 234 //********************************************* 237 238 /**239 * convenience function for releasing default address and writing debug info240 * (these few lines are used too often to be written again and again)241 * @param hc242 * @return243 */244 inline static int usb_hub_release_default_address(int hc){245 int opResult;246 dprintf(1,"[usb_hub] releasing default address");247 opResult = usb_drv_release_default_address(hc);248 if (opResult != EOK) {249 dprintf(1,"[usb_hub] failed to release default address");250 }251 return opResult;252 }253 235 254 236 /** … … 277 259 if (opResult != EOK) { 278 260 dprintf(1,"[usb_hub] something went wrong when reseting a port"); 279 usb_hub_release_default_address(hc); 280 } 281 } 261 } 262 } 263 264 /** 265 * convenience function for releasing default address and writing debug info 266 * (these few lines are used too often to be written again and again) 267 * @param hc 268 * @return 269 */ 270 inline static int usb_hub_release_default_address(int hc){ 271 int opResult; 272 dprintf(1,"[usb_hub] releasing default address"); 273 opResult = usb_drv_release_default_address(hc); 274 if (opResult != EOK) { 275 dprintf(1,"[usb_hub] failed to release default address"); 276 } 277 return opResult; 278 } 279 282 280 283 281 /** … … 345 343 346 344 /** 347 * unregister device address in hc 345 * unregister device address in hc, close the port 348 346 * @param hc 349 347 * @param port … … 354 352 //usb_device_request_setup_packet_t request; 355 353 int opResult; 356 354 //disable port 355 /*usb_hub_set_disable_port_request(&request, port); 356 opResult = usb_drv_sync_control_write( 357 hc, target, 358 &request, 359 NULL, 0 360 ); 361 if (opResult != EOK) { 362 //continue; 363 printf("[usb_hub] something went wrong when disabling a port\n"); 364 }*/ 357 365 /// \TODO remove device 358 366 … … 449 457 */ 450 458 usb_general_list_t * lst_item; 451 futex_down(&usb_hub_list_lock);452 459 for (lst_item = usb_hub_list.next; 453 460 lst_item != &usb_hub_list; 454 461 lst_item = lst_item->next) { 455 futex_up(&usb_hub_list_lock);456 462 usb_hub_info_t * hub_info = ((usb_hub_info_t*)lst_item->data); 457 463 /* … … 504 510 } 505 511 } 506 free(change_bitmap);507 512 508 513 ipc_hangup(hc); 509 futex_down(&usb_hub_list_lock); 510 } 511 futex_up(&usb_hub_list_lock); 514 } 512 515 } 513 516 -
uspace/drv/usbhub/usbhub_private.h
r72fea5a r2c98e78 43 43 #include <bool.h> 44 44 #include <driver.h> 45 #include <futex.h>46 47 45 #include <usb/usb.h> 48 46 #include <usb/usbdrv.h> … … 68 66 69 67 /** 70 * create hub structure instance68 * @brief create hub structure instance 71 69 * 72 70 * Set the address and port count information most importantly. … … 81 79 extern usb_general_list_t usb_hub_list; 82 80 83 /** lock for hub list*/84 extern futex_t usb_hub_list_lock;85 86 81 87 82 /** 88 * perform complete control read transaction83 * @brief perform complete control read transaction 89 84 * 90 85 * manages all three steps of transaction: setup, read and finalize … … 104 99 105 100 /** 106 * perform complete control write transaction101 * @brief perform complete control write transaction 107 102 * 108 * ma nages all three steps of transaction: setup, write and finalize103 * maanges all three steps of transaction: setup, write and finalize 109 104 * @param phone 110 105 * @param target … … 119 114 void * sent_buffer, size_t sent_size 120 115 ); 116 117 118 /** 119 * set the device request to be a set address request 120 * @param request 121 * @param addr 122 * \TODO this will be obsolete see usb/dev_req.h 123 */ 124 static inline void usb_hub_set_set_address_request( 125 usb_device_request_setup_packet_t * request, uint16_t addr 126 ){ 127 request->index = 0; 128 request->request_type = 0;/// \TODO this is not very nice sollution, we ned constant 129 request->request = USB_DEVREQ_SET_ADDRESS; 130 request->value = addr; 131 request->length = 0; 132 } 121 133 122 134 /** -
uspace/drv/usbhub/utils.c
r72fea5a r2c98e78 200 200 201 201 202 202 /* 203 * method for testing port status bitmap 204 205 static void usb_hub_test_port_status(void) { 206 printf("[usb_hub] -------------port status test---------\n"); 207 usb_port_status_t status = 0; 208 209 //printf("original status %d (should be 0)\n",(uint32_t)status); 210 usb_port_set_bit(&status, 1, 1); 211 //printf("%d =?= 2\n",(uint32_t)status); 212 if (status != 2) { 213 printf("[usb_port_status] test failed: wrong set of bit 1\n"); 214 return; 215 } 216 usb_port_set_bit(&status, 3, 1); 217 if (status != 10) { 218 printf("[usb_port_status] test failed: wrong set of bit 3\n"); 219 return; 220 } 221 222 usb_port_set_bit(&status, 15, 1); 223 if (status != 10 + (1 << 15)) { 224 printf("[usb_port_status] test failed: wrong set of bit 15\n"); 225 return; 226 } 227 usb_port_set_bit(&status, 1, 0); 228 if (status != 8 + (1 << 15)) { 229 printf("[usb_port_status] test failed: wrong unset of bit 1\n"); 230 return; 231 } 232 int i; 233 for (i = 0; i < 32; ++i) { 234 if (i == 3 || i == 15) { 235 if (!usb_port_get_bit(&status, i)) { 236 printf("[usb_port_status] test failed: wrong bit at %d\n", i); 237 } 238 } else { 239 if (usb_port_get_bit(&status, i)) { 240 printf("[usb_port_status] test failed: wrong bit at %d\n", i); 241 } 242 } 243 } 244 245 printf("test ok\n"); 246 247 248 //printf("%d =?= 10\n",(uint32_t)status); 249 250 //printf("this should be 0: %d \n",usb_port_get_bit(&status,0)); 251 //printf("this should be 1: %d \n",usb_port_get_bit(&status,1)); 252 //printf("this should be 0: %d \n",usb_port_get_bit(&status,2)); 253 //printf("this should be 1: %d \n",usb_port_get_bit(&status,3)); 254 //printf("this should be 0: %d \n",usb_port_get_bit(&status,4)); 255 256 } 257 */ 203 258 204 259
Note:
See TracChangeset
for help on using the changeset viewer.