Changes in / [c9256c5:74b1e40] in mainline
- Files:
-
- 6 added
- 3 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
rc9256c5 r74b1e40 7 7 *.map 8 8 *.disasm 9 *.lo10 *.la11 *.so.*12 *.so013 9 _link.ld 14 10 ./*.iso -
uspace/Makefile.common
rc9256c5 r74b1e40 131 131 endif 132 132 endif 133 # Build static whenever we use libusb because that library uses134 # thread local variables135 ifneq ($(findstring usb, $(LIBS)),)136 STATIC_BUILD = y137 endif138 133 139 134 ifeq ($(STATIC_BUILD), y) -
uspace/app/lsusb/main.c
rc9256c5 r74b1e40 45 45 #include <devmap.h> 46 46 #include <usb/dev/hub.h> 47 #include <usb/h c.h>47 #include <usb/host.h> 48 48 49 49 #define NAME "lsusb" -
uspace/app/mkbd/main.c
rc9256c5 r74b1e40 45 45 #include <devmap.h> 46 46 #include <usb/dev/hub.h> 47 #include <usb/hc.h> 47 #include <usb/host.h> 48 #include <usb/driver.h> 48 49 #include <usb/dev/pipes.h> 49 50 … … 172 173 /* Try to get its address. */ 173 174 if (!addr_found) { 174 addr = usb_ hc_get_address_by_handle(dev_handle);175 addr = usb_device_get_assigned_address(dev_handle); 175 176 if (addr >= 0) { 176 177 addr_found = true; -
uspace/app/usbinfo/main.c
rc9256c5 r74b1e40 43 43 #include <devman.h> 44 44 #include <devmap.h> 45 #include <usb/ hc.h>45 #include <usb/dev/hc.h> 46 46 #include <usb/dev/pipes.h> 47 #include <usb/host.h> 48 #include <usb/driver.h> 47 49 #include "usbinfo.h" 50 51 static bool try_parse_class_and_address(const char *path, 52 devman_handle_t *out_hc_handle, usb_address_t *out_device_address) 53 { 54 size_t class_index; 55 size_t address; 56 int rc; 57 char *ptr; 58 59 rc = str_size_t(path, &ptr, 10, false, &class_index); 60 if (rc != EOK) { 61 return false; 62 } 63 if ((*ptr == ':') || (*ptr == '.')) { 64 ptr++; 65 } else { 66 return false; 67 } 68 rc = str_size_t(ptr, NULL, 10, true, &address); 69 if (rc != EOK) { 70 return false; 71 } 72 rc = usb_ddf_get_hc_handle_by_class(class_index, out_hc_handle); 73 if (rc != EOK) { 74 return false; 75 } 76 if (out_device_address != NULL) { 77 *out_device_address = (usb_address_t) address; 78 } 79 return true; 80 } 81 82 static bool resolve_hc_handle_and_dev_addr(const char *devpath, 83 devman_handle_t *out_hc_handle, usb_address_t *out_device_address) 84 { 85 int rc; 86 87 /* Hack for QEMU to save-up on typing ;-). */ 88 if (str_cmp(devpath, "qemu") == 0) { 89 devpath = "/hw/pci0/00:01.2/uhci-rh/usb00_a1"; 90 } 91 92 /* Hack for virtual keyboard. */ 93 if (str_cmp(devpath, "virt") == 0) { 94 devpath = "/virt/usbhc/usb00_a1/usb00_a2"; 95 } 96 97 if (try_parse_class_and_address(devpath, 98 out_hc_handle, out_device_address)) { 99 return true; 100 } 101 102 char *path = str_dup(devpath); 103 if (path == NULL) { 104 return ENOMEM; 105 } 106 107 devman_handle_t hc = 0; 108 bool hc_found = false; 109 usb_address_t addr = 0; 110 bool addr_found = false; 111 112 /* Remove suffixes and hope that we will encounter device node. */ 113 while (str_length(path) > 0) { 114 /* Get device handle first. */ 115 devman_handle_t dev_handle; 116 rc = devman_device_get_handle(path, &dev_handle, 0); 117 if (rc != EOK) { 118 free(path); 119 return false; 120 } 121 122 /* Try to find its host controller. */ 123 if (!hc_found) { 124 rc = usb_hc_find(dev_handle, &hc); 125 if (rc == EOK) { 126 hc_found = true; 127 } 128 } 129 /* Try to get its address. */ 130 if (!addr_found) { 131 addr = usb_device_get_assigned_address(dev_handle); 132 if (addr >= 0) { 133 addr_found = true; 134 } 135 } 136 137 /* Speed-up. */ 138 if (hc_found && addr_found) { 139 break; 140 } 141 142 /* Remove the last suffix. */ 143 char *slash_pos = str_rchr(path, '/'); 144 if (slash_pos != NULL) { 145 *slash_pos = 0; 146 } 147 } 148 149 free(path); 150 151 if (hc_found && addr_found) { 152 if (out_hc_handle != NULL) { 153 *out_hc_handle = hc; 154 } 155 if (out_device_address != NULL) { 156 *out_device_address = addr; 157 } 158 return true; 159 } else { 160 return false; 161 } 162 } 48 163 49 164 static void print_usage(char *app_name) … … 185 300 devman_handle_t hc_handle = 0; 186 301 usb_address_t dev_addr = 0; 187 int rc = usb_resolve_device_handle(devpath,188 &hc_handle, &dev_addr , NULL);189 if ( rc != EOK) {302 bool found = resolve_hc_handle_and_dev_addr(devpath, 303 &hc_handle, &dev_addr); 304 if (!found) { 190 305 fprintf(stderr, NAME ": device `%s' not found " 191 306 "or not of USB kind, skipping.\n", -
uspace/drv/uhci-rhd/port.h
rc9256c5 r74b1e40 38 38 #include <fibril.h> 39 39 #include <ddf/driver.h> 40 #include <usb/ hc.h> /* usb_hc_connection_t */40 #include <usb/dev/hc.h> /* usb_hc_connection_t */ 41 41 42 42 typedef uint16_t port_status_t; -
uspace/lib/usb/Makefile
rc9256c5 r74b1e40 37 37 src/ddfiface.c \ 38 38 src/debug.c \ 39 src/driver.c \ 39 40 src/dump.c \ 40 src/hc.c \ 41 src/resolve.c \ 41 src/host.c \ 42 42 src/usb.c 43 43 -
uspace/lib/usb/src/ddfiface.c
rc9256c5 r74b1e40 37 37 #include <async.h> 38 38 #include <usb/ddfiface.h> 39 #include <usb/ hc.h>39 #include <usb/driver.h> 40 40 #include <usb/debug.h> 41 41 #include <errno.h> -
uspace/lib/usbdev/Makefile
rc9256c5 r74b1e40 46 46 src/pipesio.c \ 47 47 src/recognise.c \ 48 src/request.c 48 src/request.c \ 49 src/usbdevice.c 49 50 50 51 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/usbdev/include/usb/dev/hub.h
rc9256c5 r74b1e40 39 39 40 40 #include <sys/types.h> 41 #include <usb/ hc.h>41 #include <usb/dev/hc.h> 42 42 43 43 int usb_hc_new_device_wrapper(ddf_dev_t *, usb_hc_connection_t *, usb_speed_t, … … 63 63 const usb_hc_attached_device_t *); 64 64 int usb_hc_unregister_device(usb_hc_connection_t *, usb_address_t); 65 int usb_hc_get_handle_by_address(usb_hc_connection_t *, usb_address_t, 66 devman_handle_t *); 65 67 66 68 #endif -
uspace/lib/usbdev/include/usb/dev/pipes.h
rc9256c5 r74b1e40 38 38 #include <sys/types.h> 39 39 #include <usb/usb.h> 40 #include <usb/ hc.h>40 #include <usb/dev/hc.h> 41 41 #include <usb/descriptor.h> 42 42 #include <ipc/devman.h> … … 163 163 164 164 int usb_device_get_assigned_interface(ddf_dev_t *); 165 usb_address_t usb_device_get_assigned_address(devman_handle_t); 165 166 166 167 int usb_pipe_initialize(usb_pipe_t *, usb_device_connection_t *, -
uspace/lib/usbdev/src/hub.c
rc9256c5 r74b1e40 120 120 } 121 121 122 /** Get handle of USB device with given address. 123 * 124 * @param[in] connection Opened connection to host controller. 125 * @param[in] address Address of device in question. 126 * @param[out] handle Where to write the device handle. 127 * @return Error code. 128 */ 129 int usb_hc_get_handle_by_address(usb_hc_connection_t *connection, 130 usb_address_t address, devman_handle_t *handle) 131 { 132 CHECK_CONNECTION(connection); 133 134 sysarg_t tmp; 135 int rc = async_req_2_1(connection->hc_phone, 136 DEV_IFACE_ID(USBHC_DEV_IFACE), 137 IPC_M_USBHC_GET_HANDLE_BY_ADDRESS, 138 address, &tmp); 139 if ((rc == EOK) && (handle != NULL)) { 140 *handle = tmp; 141 } 142 143 return rc; 144 } 122 145 123 146 static void unregister_control_endpoint_on_default_address( -
uspace/lib/usbdev/src/pipes.c
rc9256c5 r74b1e40 36 36 #include <usb/dev/pipes.h> 37 37 #include <usb/debug.h> 38 #include <usb/ hc.h>38 #include <usb/driver.h> 39 39 #include <usbhc_iface.h> 40 40 #include <usb_iface.h> … … 97 97 98 98 return (int) iface_no; 99 } 100 101 /** Tell USB address assigned to given device. 102 * 103 * @param dev_handle Devman handle of the USB device in question. 104 * @return USB address or negative error code. 105 */ 106 usb_address_t usb_device_get_assigned_address(devman_handle_t dev_handle) 107 { 108 int parent_phone = devman_parent_device_connect(dev_handle, 109 IPC_FLAG_BLOCKING); 110 if (parent_phone < 0) { 111 return parent_phone; 112 } 113 114 sysarg_t address; 115 116 int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE), 117 IPC_M_USB_GET_ADDRESS, 118 dev_handle, &address); 119 120 if (rc != EOK) { 121 return rc; 122 } 123 124 async_hangup(parent_phone); 125 126 return (usb_address_t) address; 99 127 } 100 128
Note:
See TracChangeset
for help on using the changeset viewer.