Changes in / [2c98e78:72fea5a] in mainline
- Location:
- uspace/drv/usbhub
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/main.c
r2c98e78 r72fea5a 38 38 39 39 usb_general_list_t usb_hub_list; 40 futex_t usb_hub_list_lock; 40 41 41 42 static driver_ops_t hub_driver_ops = { … … 60 61 { 61 62 usb_dprintf_enable(NAME,1); 63 futex_initialize(&usb_hub_list_lock, 0); 62 64 usb_lst_init(&usb_hub_list); 65 futex_up(&usb_hub_list_lock); 63 66 fid_t fid = fibril_create(usb_hub_control_loop, NULL); 64 67 if (fid == 0) { -
uspace/drv/usbhub/usbhub.c
r2c98e78 r72fea5a 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 of newly created hub = %d", addr);77 dprintf(1,"[usb_hub] address 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 configurations 176 177 usb_standard_configuration_descriptor_t config_descriptor; 177 178 opResult = usb_drv_req_get_bare_configuration_descriptor(hc, … … 194 195 } 195 196 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 208 207 ipc_hangup(hc); 209 208 210 209 //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 212 214 dprintf(1,"[usb_hub] hub info added to list"); 213 215 //(void)hub_info; … … 233 235 // 234 236 //********************************************* 237 238 /** 239 * convenience function for releasing default address and writing debug info 240 * (these few lines are used too often to be written again and again) 241 * @param hc 242 * @return 243 */ 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 } 235 253 236 254 /** … … 259 277 if (opResult != EOK) { 260 278 dprintf(1,"[usb_hub] something went wrong when reseting a port"); 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 279 usb_hub_release_default_address(hc); 280 } 281 } 280 282 281 283 /** … … 343 345 344 346 /** 345 * unregister device address in hc , close the port347 * unregister device address in hc 346 348 * @param hc 347 349 * @param port … … 352 354 //usb_device_request_setup_packet_t request; 353 355 int opResult; 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 }*/ 356 365 357 /// \TODO remove device 366 358 … … 457 449 */ 458 450 usb_general_list_t * lst_item; 451 futex_down(&usb_hub_list_lock); 459 452 for (lst_item = usb_hub_list.next; 460 453 lst_item != &usb_hub_list; 461 454 lst_item = lst_item->next) { 455 futex_up(&usb_hub_list_lock); 462 456 usb_hub_info_t * hub_info = ((usb_hub_info_t*)lst_item->data); 463 457 /* … … 510 504 } 511 505 } 506 free(change_bitmap); 512 507 513 508 ipc_hangup(hc); 514 } 509 futex_down(&usb_hub_list_lock); 510 } 511 futex_up(&usb_hub_list_lock); 515 512 } 516 513 -
uspace/drv/usbhub/usbhub_private.h
r2c98e78 r72fea5a 43 43 #include <bool.h> 44 44 #include <driver.h> 45 #include <futex.h> 46 45 47 #include <usb/usb.h> 46 48 #include <usb/usbdrv.h> … … 66 68 67 69 /** 68 * @briefcreate hub structure instance70 * create hub structure instance 69 71 * 70 72 * Set the address and port count information most importantly. … … 79 81 extern usb_general_list_t usb_hub_list; 80 82 83 /** lock for hub list*/ 84 extern futex_t usb_hub_list_lock; 85 81 86 82 87 /** 83 * @briefperform complete control read transaction88 * perform complete control read transaction 84 89 * 85 90 * manages all three steps of transaction: setup, read and finalize … … 99 104 100 105 /** 101 * @briefperform complete control write transaction106 * perform complete control write transaction 102 107 * 103 * ma anges all three steps of transaction: setup, write and finalize108 * manages all three steps of transaction: setup, write and finalize 104 109 * @param phone 105 110 * @param target … … 114 119 void * sent_buffer, size_t sent_size 115 120 ); 116 117 118 /**119 * set the device request to be a set address request120 * @param request121 * @param addr122 * \TODO this will be obsolete see usb/dev_req.h123 */124 static inline void usb_hub_set_set_address_request(125 usb_device_request_setup_packet_t * request, uint16_t addr126 ){127 request->index = 0;128 request->request_type = 0;/// \TODO this is not very nice sollution, we ned constant129 request->request = USB_DEVREQ_SET_ADDRESS;130 request->value = addr;131 request->length = 0;132 }133 121 134 122 /** -
uspace/drv/usbhub/utils.c
r2c98e78 r72fea5a 200 200 201 201 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 */ 202 258 203 259 204
Note:
See TracChangeset
for help on using the changeset viewer.