Changes in / [d321cd7:8f198c9] in mainline
- Location:
- uspace
- Files:
-
- 2 deleted
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/usbinfo/info.c
rd321cd7 r8f198c9 39 39 #include <usb/usbdrv.h> 40 40 #include <usb/pipes.h> 41 #include <usb/recognise.h>42 41 #include <usb/request.h> 43 42 #include "usbinfo.h" … … 48 47 usb_device_connection_t wire; 49 48 usb_endpoint_pipe_t ctrl_pipe; 49 ctrl_pipe.hc_phone = -1; 50 51 int hc_phone = devman_device_connect(hc_handle, 0); 52 if (hc_phone < 0) { 53 fprintf(stderr, 54 NAME ": failed to connect to host controller (%zu): %s.\n", 55 (size_t) hc_handle, str_error(hc_phone)); 56 return hc_phone; 57 } 58 59 /* 60 * Dump information about possible match ids. 61 */ 62 match_id_list_t match_id_list; 63 init_match_ids(&match_id_list); 64 rc = usb_drv_create_device_match_ids(hc_phone, &match_id_list, address); 65 if (rc != EOK) { 66 fprintf(stderr, 67 NAME ": failed to fetch match ids of the device: %s.\n", 68 str_error(rc)); 69 goto leave; 70 } 71 dump_match_ids(&match_id_list); 50 72 51 73 /* … … 73 95 goto leave; 74 96 } 75 76 /*77 * Dump information about possible match ids.78 */79 match_id_list_t match_id_list;80 init_match_ids(&match_id_list);81 rc = usb_device_create_match_ids(&ctrl_pipe, &match_id_list);82 if (rc != EOK) {83 fprintf(stderr,84 NAME ": failed to fetch match ids of the device: %s.\n",85 str_error(rc));86 goto leave;87 }88 dump_match_ids(&match_id_list);89 97 90 98 /* … … 133 141 leave: 134 142 /* Ignoring errors here. */ 143 async_hangup(hc_phone); 135 144 usb_endpoint_pipe_end_session(&ctrl_pipe); 136 145 -
uspace/drv/uhci-rhd/port.c
rd321cd7 r8f198c9 33 33 */ 34 34 #include <errno.h> 35 #include <str_error.h>36 35 37 36 #include <usb/usb.h> /* usb_address_t */ 38 37 #include <usb/usbdrv.h> /* usb_drv_* */ 39 38 #include <usb/debug.h> 40 #include <usb/recognise.h>41 39 42 40 #include "port.h" … … 206 204 assert(port->attached_device == 0); 207 205 208 devman_handle_t hc_handle; 209 ret = usb_drv_find_hc(port->rh, &hc_handle); 210 if (ret != EOK) { 211 usb_log_error("Failed to get handle of host controller: %s.\n", 212 str_error(ret)); 213 uhci_port_set_enabled(port, false); 214 return ENOMEM; 215 } 216 217 ret = usb_device_register_child_in_devman(usb_address, hc_handle, 218 port->rh, &port->attached_device); 206 ret = usb_drv_register_child_in_devman(port->hc_phone, port->rh, 207 usb_address, &port->attached_device); 208 219 209 if (ret != EOK) { /* something went wrong */ 220 210 usb_log_error("Failed(%d) in usb_drv_register_child.\n", ret); -
uspace/drv/usbhid/main.c
rd321cd7 r8f198c9 401 401 402 402 rc = usb_endpoint_pipe_initialize(&kbd_dev->poll_pipe, &kbd_dev->wire, 403 GUESSED_POLL_ENDPOINT, USB_TRANSFER_INTERRUPT, 8,USB_DIRECTION_IN);403 GUESSED_POLL_ENDPOINT, USB_TRANSFER_INTERRUPT, USB_DIRECTION_IN); 404 404 if (rc != EOK) { 405 405 printf("Failed to initialize interrupt in pipe: %s.\n", -
uspace/drv/usbhub/usbhub.c
rd321cd7 r8f198c9 36 36 #include <bool.h> 37 37 #include <errno.h> 38 #include <str_error.h>39 38 40 39 #include <usb_iface.h> 41 40 #include <usb/usbdrv.h> 42 41 #include <usb/descriptor.h> 43 #include <usb/recognise.h>44 42 #include <usb/devreq.h> 45 43 #include <usb/classes/hub.h> … … 319 317 } 320 318 321 devman_handle_t hc_handle;322 opResult = usb_drv_find_hc(hub->device, &hc_handle);323 if (opResult != EOK) {324 usb_log_error("Failed to get handle of host controller: %s.\n",325 str_error(opResult));326 return;327 }328 329 319 devman_handle_t child_handle; 330 opResult = usb_device_register_child_in_devman(new_device_address,331 hc_handle, hub->device, &child_handle);320 opResult = usb_drv_register_child_in_devman(hc, hub->device, 321 new_device_address, &child_handle); 332 322 if (opResult != EOK) { 333 323 dprintf(USB_LOG_LEVEL_ERROR, "could not start driver for new device"); -
uspace/drv/vhc/hub.c
rd321cd7 r8f198c9 41 41 #include <driver.h> 42 42 #include <usb/usbdrv.h> 43 #include <usb/recognise.h>44 43 45 44 #include "hub.h" … … 94 93 95 94 devman_handle_t hub_handle; 96 usb_device_register_child_in_devman(hub_address, hc_dev->handle, 97 hc_dev, &hub_handle); 98 //usb_drv_register_child_in_devman(hc, hc_dev, hub_address, &hub_handle); 95 usb_drv_register_child_in_devman(hc, hc_dev, hub_address, &hub_handle); 99 96 usb_drv_bind_address(hc, hub_address, hub_handle); 100 97 -
uspace/lib/usb/Makefile
rd321cd7 r8f198c9 44 44 src/localdrv.c \ 45 45 src/pipes.c \ 46 src/pipesinit.c \47 46 src/recognise.c \ 48 47 src/remotedrv.c \ -
uspace/lib/usb/include/usb/pipes.h
rd321cd7 r8f198c9 38 38 #include <sys/types.h> 39 39 #include <usb/usb.h> 40 #include <usb/descriptor.h>41 40 #include <ipc/devman.h> 42 41 #include <driver.h> … … 74 73 usb_direction_t direction; 75 74 76 /** Maximum packet size for the endpoint. */77 size_t max_packet_size;78 79 75 /** Phone to the host controller. 80 76 * Negative when no session is active. … … 83 79 } usb_endpoint_pipe_t; 84 80 85 86 /** Description of endpoint characteristics. */87 typedef struct {88 /** Transfer type (e.g. control or interrupt). */89 usb_transfer_type_t transfer_type;90 /** Transfer direction (to or from a device). */91 usb_direction_t direction;92 /** Interface class this endpoint belongs to (-1 for any). */93 int interface_class;94 /** Interface subclass this endpoint belongs to (-1 for any). */95 int interface_subclass;96 /** Interface protocol this endpoint belongs to (-1 for any). */97 int interface_protocol;98 /** Extra endpoint flags. */99 unsigned int flags;100 } usb_endpoint_description_t;101 102 /** Mapping of endpoint pipes and endpoint descriptions. */103 typedef struct {104 /** Endpoint pipe. */105 usb_endpoint_pipe_t *pipe;106 /** Endpoint description. */107 const usb_endpoint_description_t *description;108 /** Found descriptor fitting the description. */109 usb_standard_endpoint_descriptor_t *descriptor;110 /** Interface the endpoint belongs to. */111 usb_standard_interface_descriptor_t *interface;112 /** Whether the endpoint was actually found. */113 bool present;114 } usb_endpoint_mapping_t;115 81 116 82 int usb_device_connection_initialize_from_device(usb_device_connection_t *, … … 121 87 int usb_endpoint_pipe_initialize(usb_endpoint_pipe_t *, 122 88 usb_device_connection_t *, 123 usb_endpoint_t, usb_transfer_type_t, size_t,usb_direction_t);89 usb_endpoint_t, usb_transfer_type_t, usb_direction_t); 124 90 int usb_endpoint_pipe_initialize_default_control(usb_endpoint_pipe_t *, 125 91 usb_device_connection_t *); 126 int usb_endpoint_pipe_initialize_from_configuration(usb_endpoint_mapping_t *,127 size_t, uint8_t *, size_t, usb_device_connection_t *);128 92 129 93 -
uspace/lib/usb/include/usb/usbdrv.h
rd321cd7 r8f198c9 106 106 const void *, size_t); 107 107 108 int usb_drv_create_device_match_ids(int, match_id_list_t *, usb_address_t); 109 int usb_drv_register_child_in_devman(int, device_t *, usb_address_t, 110 devman_handle_t *); 111 108 112 109 113 #endif -
uspace/lib/usb/src/pipes.c
rd321cd7 r8f198c9 123 123 * @param endpoint_no Endpoint number (in USB 1.1 in range 0 to 15). 124 124 * @param transfer_type Transfer type (e.g. interrupt or bulk). 125 * @param max_packet_size Maximum packet size in bytes.126 125 * @param direction Endpoint direction (in/out). 127 126 * @return Error code. … … 129 128 int usb_endpoint_pipe_initialize(usb_endpoint_pipe_t *pipe, 130 129 usb_device_connection_t *connection, usb_endpoint_t endpoint_no, 131 usb_transfer_type_t transfer_type, size_t max_packet_size, 132 usb_direction_t direction) 130 usb_transfer_type_t transfer_type, usb_direction_t direction) 133 131 { 134 132 assert(pipe); … … 139 137 pipe->endpoint_no = endpoint_no; 140 138 pipe->transfer_type = transfer_type; 141 pipe->max_packet_size = max_packet_size;142 139 pipe->direction = direction; 143 140 … … 159 156 160 157 int rc = usb_endpoint_pipe_initialize(pipe, connection, 161 0, USB_TRANSFER_CONTROL, 8,USB_DIRECTION_BOTH);158 0, USB_TRANSFER_CONTROL, USB_DIRECTION_BOTH); 162 159 163 160 return rc; -
uspace/lib/usb/src/recognise.c
rd321cd7 r8f198c9 36 36 #include <usb_iface.h> 37 37 #include <usb/usbdrv.h> 38 #include <usb/pipes.h>39 #include <usb/recognise.h>40 #include <usb/request.h>41 38 #include <usb/classes/classes.h> 42 39 #include <stdio.h> 43 40 #include <errno.h> 44 45 static size_t device_name_index = 0;46 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex);47 41 48 42 /** Callback for getting host controller handle. … … 247 241 /** Add match ids based on configuration descriptor. 248 242 * 249 * @param pipe Control pipe to the device.243 * @param hc Open phone to host controller. 250 244 * @param matches Match ids list to add matches to. 245 * @param address USB address of the attached device. 251 246 * @param config_count Number of configurations the device has. 252 247 * @return Error code. 253 248 */ 254 static int usb_add_config_descriptor_match_ids(usb_endpoint_pipe_t *pipe, 255 match_id_list_t *matches, int config_count) 249 static int usb_add_config_descriptor_match_ids(int hc, 250 match_id_list_t *matches, usb_address_t address, 251 int config_count) 256 252 { 257 253 int final_rc = EOK; … … 261 257 int rc; 262 258 usb_standard_configuration_descriptor_t config_descriptor; 263 rc = usb_ request_get_bare_configuration_descriptor(pipe,264 config_index, &config_descriptor);259 rc = usb_drv_req_get_bare_configuration_descriptor(hc, 260 address, config_index, &config_descriptor); 265 261 if (rc != EOK) { 266 262 final_rc = rc; … … 271 267 void *full_config_descriptor 272 268 = malloc(config_descriptor.total_length); 273 rc = usb_ request_get_full_configuration_descriptor(pipe,274 config_index,269 rc = usb_drv_req_get_full_configuration_descriptor(hc, 270 address, config_index, 275 271 full_config_descriptor, config_descriptor.total_length, 276 272 &full_config_descriptor_size); … … 303 299 * function exits with error. 304 300 * 305 * @param ctrl_pipe Control pipe to given device (session must be already 306 * started). 301 * @param hc Open phone to host controller. 307 302 * @param matches Initialized list of match ids. 308 * @return Error code. 309 */ 310 int usb_device_create_match_ids(usb_endpoint_pipe_t *ctrl_pipe, 311 match_id_list_t *matches) 303 * @param address USB address of the attached device. 304 * @return Error code. 305 */ 306 int usb_drv_create_device_match_ids(int hc, match_id_list_t *matches, 307 usb_address_t address) 312 308 { 313 309 int rc; 310 314 311 /* 315 312 * Retrieve device descriptor and add matches from it. … … 317 314 usb_standard_device_descriptor_t device_descriptor; 318 315 319 rc = usb_request_get_device_descriptor(ctrl_pipe, &device_descriptor); 316 rc = usb_drv_req_get_device_descriptor(hc, address, 317 &device_descriptor); 320 318 if (rc != EOK) { 321 319 return rc; 322 320 } 323 321 324 322 rc = usb_drv_create_match_ids_from_device_descriptor(matches, 325 323 &device_descriptor); … … 327 325 return rc; 328 326 } 329 327 330 328 /* 331 329 * Go through all configurations and add matches 332 330 * based on interface class. 333 331 */ 334 rc = usb_add_config_descriptor_match_ids( ctrl_pipe, matches,335 device_descriptor.configuration_count);332 rc = usb_add_config_descriptor_match_ids(hc, matches, 333 address, device_descriptor.configuration_count); 336 334 if (rc != EOK) { 337 335 return rc; … … 349 347 } 350 348 349 351 350 /** Probe for device kind and register it in devman. 352 351 * 352 * @param[in] hc Open phone to the host controller. 353 * @param[in] parent Parent device. 353 354 * @param[in] address Address of the (unknown) attached device. 354 * @param[in] hc_handle Handle of the host controller.355 * @param[in] parent Parent device.356 355 * @param[out] child_handle Handle of the child device. 357 356 * @return Error code. 358 357 */ 359 int usb_device_register_child_in_devman(usb_address_t address, 360 devman_handle_t hc_handle, 361 device_t *parent, devman_handle_t *child_handle) 362 { 358 int usb_drv_register_child_in_devman(int hc, device_t *parent, 359 usb_address_t address, devman_handle_t *child_handle) 360 { 361 static size_t device_name_index = 0; 362 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex); 363 363 364 size_t this_device_name_index; 364 365 … … 368 369 fibril_mutex_unlock(&device_name_index_mutex); 369 370 371 370 372 device_t *child = NULL; 371 373 char *child_name = NULL; 372 374 int rc; 373 usb_device_connection_t dev_connection;374 usb_endpoint_pipe_t ctrl_pipe;375 376 rc = usb_device_connection_initialize(&dev_connection, hc_handle, address);377 if (rc != EOK) {378 goto failure;379 }380 381 rc = usb_endpoint_pipe_initialize_default_control(&ctrl_pipe,382 &dev_connection);383 if (rc != EOK) {384 goto failure;385 }386 375 387 376 child = create_device(); … … 402 391 child->name = child_name; 403 392 child->ops = &child_ops; 404 405 rc = usb_endpoint_pipe_start_session(&ctrl_pipe); 406 if (rc != EOK) { 407 goto failure; 408 } 409 410 rc = usb_device_create_match_ids(&ctrl_pipe, &child->match_ids); 411 if (rc != EOK) { 412 goto failure; 413 } 414 415 rc = usb_endpoint_pipe_end_session(&ctrl_pipe); 393 394 rc = usb_drv_create_device_match_ids(hc, &child->match_ids, address); 416 395 if (rc != EOK) { 417 396 goto failure; … … 426 405 *child_handle = child->handle; 427 406 } 428 407 429 408 return EOK; 430 409 … … 440 419 441 420 return rc; 421 442 422 } 443 423
Note:
See TracChangeset
for help on using the changeset viewer.