Changes in uspace/lib/usb/src/recognise.c [38648f0:345ea18] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/recognise.c
r38648f0 r345ea18 33 33 * @brief Functions for recognising kind of attached devices. 34 34 */ 35 #include <sys/types.h> 35 36 #include <usb_iface.h> 36 37 #include <usb/usbdrv.h> 38 #include <usb/pipes.h> 39 #include <usb/recognise.h> 40 #include <usb/request.h> 37 41 #include <usb/classes/classes.h> 38 42 #include <stdio.h> 39 43 #include <errno.h> 44 45 static size_t device_name_index = 0; 46 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex); 40 47 41 48 /** Callback for getting host controller handle. … … 69 76 }; 70 77 71 staticdevice_ops_t child_ops = {78 device_ops_t child_ops = { 72 79 .interfaces[USB_DEV_IFACE] = &usb_iface 73 80 }; … … 154 161 /* First, with release number. */ 155 162 rc = usb_add_match_id(matches, 100, 156 "usb&vendor= %d&product=%d&release=" BCD_FMT,163 "usb&vendor=0x%04x&product=0x%04x&release=" BCD_FMT, 157 164 (int) device_descriptor->vendor_id, 158 165 (int) device_descriptor->product_id, … … 163 170 164 171 /* Next, without release number. */ 165 rc = usb_add_match_id(matches, 90, "usb&vendor=%d&product=%d", 172 rc = usb_add_match_id(matches, 90, 173 "usb&vendor=0x%04x&product=0x%04x", 166 174 (int) device_descriptor->vendor_id, 167 175 (int) device_descriptor->product_id); … … 240 248 /** Add match ids based on configuration descriptor. 241 249 * 242 * @param hc Open phone to host controller.250 * @param pipe Control pipe to the device. 243 251 * @param matches Match ids list to add matches to. 244 * @param address USB address of the attached device.245 252 * @param config_count Number of configurations the device has. 246 253 * @return Error code. 247 254 */ 248 static int usb_add_config_descriptor_match_ids(int hc, 249 match_id_list_t *matches, usb_address_t address, 250 int config_count) 255 static int usb_add_config_descriptor_match_ids(usb_endpoint_pipe_t *pipe, 256 match_id_list_t *matches, int config_count) 251 257 { 252 258 int final_rc = EOK; … … 256 262 int rc; 257 263 usb_standard_configuration_descriptor_t config_descriptor; 258 rc = usb_ drv_req_get_bare_configuration_descriptor(hc,259 address,config_index, &config_descriptor);264 rc = usb_request_get_bare_configuration_descriptor(pipe, 265 config_index, &config_descriptor); 260 266 if (rc != EOK) { 261 267 final_rc = rc; … … 266 272 void *full_config_descriptor 267 273 = malloc(config_descriptor.total_length); 268 rc = usb_ drv_req_get_full_configuration_descriptor(hc,269 address,config_index,274 rc = usb_request_get_full_configuration_descriptor(pipe, 275 config_index, 270 276 full_config_descriptor, config_descriptor.total_length, 271 277 &full_config_descriptor_size); … … 298 304 * function exits with error. 299 305 * 300 * @param hc Open phone to host controller. 306 * @param ctrl_pipe Control pipe to given device (session must be already 307 * started). 301 308 * @param matches Initialized list of match ids. 302 * @param address USB address of the attached device. 303 * @return Error code. 304 */ 305 int usb_drv_create_device_match_ids(int hc, match_id_list_t *matches, 306 usb_address_t address) 309 * @return Error code. 310 */ 311 int usb_device_create_match_ids(usb_endpoint_pipe_t *ctrl_pipe, 312 match_id_list_t *matches) 307 313 { 308 314 int rc; 309 310 315 /* 311 316 * Retrieve device descriptor and add matches from it. … … 313 318 usb_standard_device_descriptor_t device_descriptor; 314 319 315 rc = usb_drv_req_get_device_descriptor(hc, address, 316 &device_descriptor); 320 rc = usb_request_get_device_descriptor(ctrl_pipe, &device_descriptor); 317 321 if (rc != EOK) { 318 322 return rc; 319 323 } 320 324 321 325 rc = usb_drv_create_match_ids_from_device_descriptor(matches, 322 326 &device_descriptor); … … 324 328 return rc; 325 329 } 326 330 327 331 /* 328 332 * Go through all configurations and add matches 329 333 * based on interface class. 330 334 */ 331 rc = usb_add_config_descriptor_match_ids( hc, matches,332 address,device_descriptor.configuration_count);335 rc = usb_add_config_descriptor_match_ids(ctrl_pipe, matches, 336 device_descriptor.configuration_count); 333 337 if (rc != EOK) { 334 338 return rc; … … 346 350 } 347 351 348 349 352 /** Probe for device kind and register it in devman. 350 353 * 351 * @param[in] hc Open phone to the host controller. 354 * @param[in] address Address of the (unknown) attached device. 355 * @param[in] hc_handle Handle of the host controller. 352 356 * @param[in] parent Parent device. 353 * @param[in] address Address of the (unknown) attached device.354 357 * @param[out] child_handle Handle of the child device. 355 358 * @return Error code. 356 359 */ 357 int usb_drv_register_child_in_devman(int hc, device_t *parent, 358 usb_address_t address, devman_handle_t *child_handle) 359 { 360 static size_t device_name_index = 0; 361 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex); 362 360 int usb_device_register_child_in_devman(usb_address_t address, 361 devman_handle_t hc_handle, 362 device_t *parent, devman_handle_t *child_handle) 363 { 363 364 size_t this_device_name_index; 364 365 … … 368 369 fibril_mutex_unlock(&device_name_index_mutex); 369 370 370 371 371 device_t *child = NULL; 372 372 char *child_name = NULL; 373 373 int rc; 374 usb_device_connection_t dev_connection; 375 usb_endpoint_pipe_t ctrl_pipe; 376 377 rc = usb_device_connection_initialize(&dev_connection, hc_handle, address); 378 if (rc != EOK) { 379 goto failure; 380 } 381 382 rc = usb_endpoint_pipe_initialize_default_control(&ctrl_pipe, 383 &dev_connection); 384 if (rc != EOK) { 385 goto failure; 386 } 374 387 375 388 child = create_device(); … … 390 403 child->name = child_name; 391 404 child->ops = &child_ops; 392 393 rc = usb_drv_create_device_match_ids(hc, &child->match_ids, address); 405 406 rc = usb_endpoint_pipe_start_session(&ctrl_pipe); 407 if (rc != EOK) { 408 goto failure; 409 } 410 411 rc = usb_device_create_match_ids(&ctrl_pipe, &child->match_ids); 412 if (rc != EOK) { 413 goto failure; 414 } 415 416 rc = usb_endpoint_pipe_end_session(&ctrl_pipe); 394 417 if (rc != EOK) { 395 418 goto failure; … … 404 427 *child_handle = child->handle; 405 428 } 406 429 407 430 return EOK; 408 431 … … 418 441 419 442 return rc; 420 421 443 } 422 444
Note:
See TracChangeset
for help on using the changeset viewer.