Changeset eb1a2f4 in mainline for uspace/lib/usb
- Timestamp:
- 2011-02-22T23:30:56Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3b5d1535, a9c674e0
- Parents:
- dbe25f1 (diff), 664af708 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/lib/usb
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/include/usb/ddfiface.h
rdbe25f1 reb1a2f4 40 40 #include <usb_iface.h> 41 41 42 int usb_iface_get_hc_handle_hub_impl(d evice_t *, devman_handle_t *);43 int usb_iface_get_address_hub_impl(d evice_t *, devman_handle_t,42 int usb_iface_get_hc_handle_hub_impl(ddf_fun_t *, devman_handle_t *); 43 int usb_iface_get_address_hub_impl(ddf_fun_t *, devman_handle_t, 44 44 usb_address_t *); 45 45 extern usb_iface_t usb_iface_hub_impl; 46 46 47 int usb_iface_get_hc_handle_hub_child_impl(d evice_t *, devman_handle_t *);48 int usb_iface_get_address_hub_child_impl(d evice_t *, devman_handle_t,47 int usb_iface_get_hc_handle_hub_child_impl(ddf_fun_t *, devman_handle_t *); 48 int usb_iface_get_address_hub_child_impl(ddf_fun_t *, devman_handle_t, 49 49 usb_address_t *); 50 50 extern usb_iface_t usb_iface_hub_child_impl; 51 51 52 int usb_iface_get_hc_handle_hc_impl(d evice_t *, devman_handle_t *);52 int usb_iface_get_hc_handle_hc_impl(ddf_fun_t *, devman_handle_t *); 53 53 54 54 -
uspace/lib/usb/include/usb/hub.h
rdbe25f1 reb1a2f4 39 39 #include <usb/usbdevice.h> 40 40 41 int usb_hc_new_device_wrapper(device_t *, usb_hc_connection_t *, usb_speed_t, 42 int (*)(int, void *), int, void *, usb_address_t *, devman_handle_t *); 41 int usb_hc_new_device_wrapper(ddf_dev_t *, usb_hc_connection_t *, usb_speed_t, 42 int (*)(int, void *), int, void *, 43 usb_address_t *, devman_handle_t *, 44 ddf_dev_ops_t *, void *, ddf_fun_t **); 43 45 44 46 /** Info about device attached to host controller. -
uspace/lib/usb/include/usb/pipes.h
rdbe25f1 reb1a2f4 41 41 #include <usb/descriptor.h> 42 42 #include <ipc/devman.h> 43 #include <d river.h>43 #include <ddf/driver.h> 44 44 45 45 /** … … 120 120 usb_device_connection_t *, usb_hc_connection_t *); 121 121 int usb_device_connection_initialize_from_device(usb_device_connection_t *, 122 d evice_t *);122 ddf_dev_t *); 123 123 int usb_device_connection_initialize(usb_device_connection_t *, 124 124 devman_handle_t, usb_address_t); 125 125 126 int usb_device_get_assigned_interface(d evice_t *);126 int usb_device_get_assigned_interface(ddf_dev_t *); 127 127 128 128 int usb_endpoint_pipe_initialize(usb_endpoint_pipe_t *, -
uspace/lib/usb/include/usb/recognise.h
rdbe25f1 reb1a2f4 50 50 int usb_device_create_match_ids(usb_endpoint_pipe_t *, match_id_list_t *); 51 51 52 int usb_device_register_child_in_devman(usb_address_t address, devman_handle_t hc_handle,53 d evice_t *parent, devman_handle_t *child_handle);52 int usb_device_register_child_in_devman(usb_address_t, devman_handle_t, 53 ddf_dev_t *, devman_handle_t *, ddf_dev_ops_t *, void *, ddf_fun_t **); 54 54 55 55 #endif -
uspace/lib/usb/include/usb/usbdevice.h
rdbe25f1 reb1a2f4 38 38 #include <sys/types.h> 39 39 #include <ipc/devman.h> 40 #include <d river.h>40 #include <ddf/driver.h> 41 41 #include <bool.h> 42 42 #include <usb/usb.h> … … 53 53 54 54 int usb_hc_connection_initialize_from_device(usb_hc_connection_t *, 55 d evice_t *);55 ddf_dev_t *); 56 56 int usb_hc_connection_initialize(usb_hc_connection_t *, devman_handle_t); 57 57 -
uspace/lib/usb/src/ddfiface.c
rdbe25f1 reb1a2f4 34 34 */ 35 35 #include <ipc/devman.h> 36 #include <devman.h> 37 #include <async.h> 36 38 #include <usb/ddfiface.h> 39 #include <usb/debug.h> 37 40 #include <errno.h> 41 #include <assert.h> 38 42 39 43 /** DDF interface for USB device, implementation for typical hub. */ … … 56 60 * @return Error code. 57 61 */ 58 int usb_iface_get_hc_handle_hub_impl(d evice_t *device, devman_handle_t *handle)62 int usb_iface_get_hc_handle_hub_impl(ddf_fun_t *fun, devman_handle_t *handle) 59 63 { 60 assert( device);61 return usb_hc_find( device->handle, handle);64 assert(fun); 65 return usb_hc_find(fun->handle, handle); 62 66 } 63 67 … … 69 73 * @return Error code. 70 74 */ 71 int usb_iface_get_hc_handle_hub_child_impl(d evice_t *device,75 int usb_iface_get_hc_handle_hub_child_impl(ddf_fun_t *fun, 72 76 devman_handle_t *handle) 73 77 { 74 assert(device); 75 device_t *parent = device->parent; 78 assert(fun != NULL); 76 79 77 /* Default error, device does not support this operation. */ 78 int rc = ENOTSUP; 79 80 if (parent && parent->ops && parent->ops->interfaces[USB_DEV_IFACE]) { 81 usb_iface_t *usb_iface 82 = (usb_iface_t *) parent->ops->interfaces[USB_DEV_IFACE]; 83 assert(usb_iface != NULL); 84 85 if (usb_iface->get_hc_handle) { 86 rc = usb_iface->get_hc_handle(parent, handle); 87 } 80 int parent_phone = devman_parent_device_connect(fun->handle, 81 IPC_FLAG_BLOCKING); 82 if (parent_phone < 0) { 83 return parent_phone; 88 84 } 89 85 90 return rc; 86 sysarg_t hc_handle; 87 int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE), 88 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &hc_handle); 89 90 if (rc != EOK) { 91 return rc; 92 } 93 94 *handle = hc_handle; 95 96 return EOK; 91 97 } 92 98 … … 97 103 * @return Always EOK. 98 104 */ 99 int usb_iface_get_hc_handle_hc_impl(d evice_t *device, devman_handle_t *handle)105 int usb_iface_get_hc_handle_hc_impl(ddf_fun_t *fun, devman_handle_t *handle) 100 106 { 101 assert( device);107 assert(fun); 102 108 103 109 if (handle != NULL) { 104 *handle = device->handle;110 *handle = fun->handle; 105 111 } 106 112 … … 115 121 * @return Error code. 116 122 */ 117 int usb_iface_get_address_hub_impl(d evice_t *device, devman_handle_t handle,123 int usb_iface_get_address_hub_impl(ddf_fun_t *fun, devman_handle_t handle, 118 124 usb_address_t *address) 119 125 { 120 assert( device);121 int parent_phone = devman_parent_device_connect( device->handle,126 assert(fun); 127 int parent_phone = devman_parent_device_connect(fun->handle, 122 128 IPC_FLAG_BLOCKING); 123 129 if (parent_phone < 0) { … … 150 156 * @return Error code. 151 157 */ 152 int usb_iface_get_address_hub_child_impl(d evice_t *device,158 int usb_iface_get_address_hub_child_impl(ddf_fun_t *fun, 153 159 devman_handle_t handle, usb_address_t *address) 154 160 { 155 assert(device); 156 device_t *parent = device->parent; 157 158 /* Default error, device does not support this operation. */ 159 int rc = ENOTSUP; 160 161 if (parent && parent->ops && parent->ops->interfaces[USB_DEV_IFACE]) { 162 usb_iface_t *usb_iface 163 = (usb_iface_t *) parent->ops->interfaces[USB_DEV_IFACE]; 164 assert(usb_iface != NULL); 165 166 if (usb_iface->get_address) { 167 rc = usb_iface->get_address(parent, handle, address); 168 } 161 if (handle == 0) { 162 handle = fun->handle; 169 163 } 170 171 return rc; 164 return usb_iface_get_address_hub_impl(fun, handle, address); 172 165 } 173 166 -
uspace/lib/usb/src/hub.c
rdbe25f1 reb1a2f4 39 39 #include <usbhc_iface.h> 40 40 #include <errno.h> 41 #include <assert.h> 41 42 42 43 /** Check that HC connection is alright. … … 172 173 * request or requests for descriptors when creating match ids). 173 174 */ 174 int usb_hc_new_device_wrapper(d evice_t *parent, usb_hc_connection_t *connection,175 int usb_hc_new_device_wrapper(ddf_dev_t *parent, usb_hc_connection_t *connection, 175 176 usb_speed_t dev_speed, 176 177 int (*enable_port)(int port_no, void *arg), int port_no, void *arg, 177 usb_address_t *assigned_address, devman_handle_t *assigned_handle) 178 usb_address_t *assigned_address, devman_handle_t *assigned_handle, 179 ddf_dev_ops_t *dev_ops, void *new_dev_data, ddf_fun_t **new_fun) 178 180 { 179 181 CHECK_CONNECTION(connection); … … 251 253 devman_handle_t child_handle; 252 254 rc = usb_device_register_child_in_devman(dev_addr, dev_conn.hc_handle, 253 parent, &child_handle); 255 parent, &child_handle, 256 dev_ops, new_dev_data, new_fun); 254 257 if (rc != EOK) { 255 258 rc = ESTALL; -
uspace/lib/usb/src/pipes.c
rdbe25f1 reb1a2f4 35 35 #include <usb/usb.h> 36 36 #include <usb/pipes.h> 37 #include <usb/debug.h> 37 38 #include <usbhc_iface.h> 38 39 #include <usb_iface.h> 40 #include <devman.h> 39 41 #include <errno.h> 40 42 #include <assert.h> … … 46 48 * @return USB address or error code. 47 49 */ 48 static usb_address_t get_my_address(int phone, d evice_t *dev)50 static usb_address_t get_my_address(int phone, ddf_dev_t *dev) 49 51 { 50 52 sysarg_t address; 53 54 55 /* 56 * We are sending special value as a handle - zero - to get 57 * handle of the parent function (that handle was used 58 * when registering our device @p dev. 59 */ 51 60 int rc = async_req_2_1(phone, DEV_IFACE_ID(USB_DEV_IFACE), 52 61 IPC_M_USB_GET_ADDRESS, 53 dev->handle, &address);62 0, &address); 54 63 55 64 if (rc != EOK) { … … 65 74 * @return Interface number (negative code means any). 66 75 */ 67 int usb_device_get_assigned_interface(d evice_t *device)76 int usb_device_get_assigned_interface(ddf_dev_t *device) 68 77 { 69 78 int parent_phone = devman_parent_device_connect(device->handle, … … 94 103 */ 95 104 int usb_device_connection_initialize_from_device( 96 usb_device_connection_t *connection, d evice_t *device)105 usb_device_connection_t *connection, ddf_dev_t *dev) 97 106 { 98 107 assert(connection); 99 assert(dev ice);108 assert(dev); 100 109 101 110 int rc; … … 103 112 usb_address_t my_address; 104 113 105 rc = usb_hc_find(dev ice->handle, &hc_handle);114 rc = usb_hc_find(dev->handle, &hc_handle); 106 115 if (rc != EOK) { 107 116 return rc; 108 117 } 109 118 110 int parent_phone = devman_parent_device_connect(dev ice->handle,119 int parent_phone = devman_parent_device_connect(dev->handle, 111 120 IPC_FLAG_BLOCKING); 112 121 if (parent_phone < 0) { … … 114 123 } 115 124 116 my_address = get_my_address(parent_phone, dev ice);125 my_address = get_my_address(parent_phone, dev); 117 126 if (my_address < 0) { 118 127 rc = my_address; -
uspace/lib/usb/src/recognise.c
rdbe25f1 reb1a2f4 34 34 */ 35 35 #include <sys/types.h> 36 #include <fibril_synch.h> 36 37 #include <usb/pipes.h> 37 38 #include <usb/recognise.h> … … 41 42 #include <stdio.h> 42 43 #include <errno.h> 44 #include <assert.h> 43 45 44 46 static size_t device_name_index = 0; 45 47 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex); 46 48 47 d evice_ops_t child_ops = {49 ddf_dev_ops_t child_ops = { 48 50 .interfaces[USB_DEV_IFACE] = &usb_iface_hub_child_impl 49 51 }; … … 326 328 int usb_device_register_child_in_devman(usb_address_t address, 327 329 devman_handle_t hc_handle, 328 device_t *parent, devman_handle_t *child_handle) 330 ddf_dev_t *parent, devman_handle_t *child_handle, 331 ddf_dev_ops_t *dev_ops, void *dev_data, ddf_fun_t **child_fun) 329 332 { 330 333 size_t this_device_name_index; … … 335 338 fibril_mutex_unlock(&device_name_index_mutex); 336 339 337 d evice_t *child = NULL;340 ddf_fun_t *child = NULL; 338 341 char *child_name = NULL; 339 342 int rc; … … 352 355 } 353 356 354 child = create_device(); 357 /* 358 * TODO: Once the device driver framework support persistent 359 * naming etc., something more descriptive could be created. 360 */ 361 rc = asprintf(&child_name, "usbdev%02zu", this_device_name_index); 362 if (rc < 0) { 363 goto failure; 364 } 365 366 child = ddf_fun_create(parent, fun_inner, child_name); 355 367 if (child == NULL) { 356 368 rc = ENOMEM; … … 358 370 } 359 371 360 /* 361 * TODO: Once the device driver framework support persistent 362 * naming etc., something more descriptive could be created. 363 */ 364 rc = asprintf(&child_name, "usbdev%02zu", this_device_name_index); 365 if (rc < 0) { 366 goto failure; 367 } 368 child->parent = parent; 369 child->name = child_name; 370 child->ops = &child_ops; 372 if (dev_ops != NULL) { 373 child->ops = dev_ops; 374 } else { 375 child->ops = &child_ops; 376 } 377 378 child->driver_data = dev_data; 371 379 372 380 rc = usb_endpoint_pipe_start_session(&ctrl_pipe); … … 385 393 } 386 394 387 rc = child_device_register(child, parent);395 rc = ddf_fun_bind(child); 388 396 if (rc != EOK) { 389 397 goto failure; … … 392 400 if (child_handle != NULL) { 393 401 *child_handle = child->handle; 402 } 403 404 if (child_fun != NULL) { 405 *child_fun = child; 394 406 } 395 407 … … 400 412 child->name = NULL; 401 413 /* This takes care of match_id deallocation as well. */ 402 d elete_device(child);414 ddf_fun_destroy(child); 403 415 } 404 416 if (child_name != NULL) { -
uspace/lib/usb/src/request.c
rdbe25f1 reb1a2f4 35 35 #include <usb/request.h> 36 36 #include <errno.h> 37 #include <assert.h> 37 38 38 39 #define MAX_DATA_LENGTH ((size_t)(0xFFFF)) -
uspace/lib/usb/src/usbdevice.c
rdbe25f1 reb1a2f4 37 37 #include <usb_iface.h> 38 38 #include <usb/usbdevice.h> 39 #include <usb/debug.h> 39 40 #include <errno.h> 41 #include <assert.h> 40 42 41 43 /** Find host controller handle that is ancestor of given device. … … 55 57 56 58 devman_handle_t h; 59 usb_log_debug("asking for HC handle (my handle is %zu).\n", device_handle); 57 60 int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE), 58 61 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h); … … 78 81 */ 79 82 int usb_hc_connection_initialize_from_device(usb_hc_connection_t *connection, 80 d evice_t *device)83 ddf_dev_t *device) 81 84 { 82 85 assert(connection);
Note:
See TracChangeset
for help on using the changeset viewer.