Changes in / [ae1f70e:8f8a0cd6] in mainline
- Location:
- uspace
- Files:
-
- 6 added
- 2 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci/main.c
rae1f70e r8f8a0cd6 27 27 */ 28 28 #include <usb/hcdhubd.h> 29 #include <usb_iface.h> 29 30 #include <usb/debug.h> 30 31 #include <errno.h> … … 32 33 #include "uhci.h" 33 34 35 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle) 36 { 37 /* This shall be called only for the UHCI itself. */ 38 assert(dev->parent == NULL); 39 40 *handle = dev->handle; 41 return EOK; 42 } 43 44 static usb_iface_t hc_usb_iface = { 45 .get_hc_handle = usb_iface_get_hc_handle 46 }; 47 34 48 static device_ops_t uhci_ops = { 35 .interfaces[USBHC_DEV_IFACE] = &uhci_iface, 49 .interfaces[USB_DEV_IFACE] = &hc_usb_iface, 50 .interfaces[USBHC_DEV_IFACE] = &uhci_iface 36 51 }; 37 52 -
uspace/drv/usbhub/usbhub.c
rae1f70e r8f8a0cd6 37 37 #include <errno.h> 38 38 39 #include <usb hc_iface.h>39 #include <usb_iface.h> 40 40 #include <usb/usbdrv.h> 41 41 #include <usb/descriptor.h> … … 46 46 #include "usbhub_private.h" 47 47 #include "port_status.h" 48 49 static usb_iface_t hub_usb_iface = { 50 .get_hc_handle = usb_drv_find_hc 51 }; 52 53 static device_ops_t hub_device_ops = { 54 .interfaces[USB_DEV_IFACE] = &hub_usb_iface 55 }; 48 56 49 57 //********************************************* … … 135 143 * connected devices. 136 144 */ 145 dev->ops = &hub_device_ops; 137 146 138 147 //create the hub structure 139 148 //get hc connection 140 int hc = usb_drv_hc_connect(dev, 0); 149 int hc = usb_drv_hc_connect_auto(dev, 0); 150 if (hc < 0) { 151 return hc; 152 } 141 153 142 154 usb_hub_info_t * hub_info = usb_create_hub_info(dev, hc); … … 464 476 * Connect to respective HC. 465 477 */ 466 int hc = usb_drv_hc_connect (hub_info->device, 0);478 int hc = usb_drv_hc_connect_auto(hub_info->device, 0); 467 479 if (hc < 0) { 468 480 continue; -
uspace/drv/usbkbd/main.c
rae1f70e r8f8a0cd6 190 190 // get phone to my HC and save it as my parent's phone 191 191 // TODO: maybe not a good idea if DDF will use parent_phone 192 kbd_dev->device->parent_phone = usb_drv_hc_connect (dev, 0);192 kbd_dev->device->parent_phone = usb_drv_hc_connect_auto(dev, 0); 193 193 194 194 kbd_dev->address = usb_drv_get_my_address(dev->parent_phone, … … 325 325 * Not supported yet, skip.. 326 326 */ 327 // int phone = usb_drv_hc_connect (dev, 0);327 // int phone = usb_drv_hc_connect_auto(dev, 0); 328 328 // if (phone < 0) { 329 329 // /* -
uspace/drv/vhc/hcd.c
rae1f70e r8f8a0cd6 46 46 47 47 #include <usb/usb.h> 48 #include <usb_iface.h> 48 49 #include "vhcd.h" 49 50 #include "hc.h" … … 52 53 #include "conn.h" 53 54 55 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle) 56 { 57 /* This shall be called only for VHC device. */ 58 assert(dev->parent == NULL); 59 60 *handle = dev->handle; 61 return EOK; 62 } 63 64 static usb_iface_t hc_usb_iface = { 65 .get_hc_handle = usb_iface_get_hc_handle 66 }; 67 54 68 static device_ops_t vhc_ops = { 55 69 .interfaces[USBHC_DEV_IFACE] = &vhc_iface, 70 .interfaces[USB_DEV_IFACE] = &hc_usb_iface, 56 71 .default_handler = default_connection_handler 57 72 }; -
uspace/drv/vhc/hub.c
rae1f70e r8f8a0cd6 79 79 device_t *hc_dev = (device_t *) arg; 80 80 81 int hc = usb_drv_hc_connect(hc_dev, IPC_FLAG_BLOCKING);81 int hc = usb_drv_hc_connect(hc_dev, hc_dev->handle, IPC_FLAG_BLOCKING); 82 82 if (hc < 0) { 83 83 printf(NAME ": failed to register root hub\n"); -
uspace/lib/c/include/ipc/dev_iface.h
rae1f70e r8f8a0cd6 39 39 CHAR_DEV_IFACE, 40 40 41 /** Interface provided by any USB device. */ 42 USB_DEV_IFACE, 41 43 /** Interface provided by USB host controller. */ 42 44 USBHC_DEV_IFACE, -
uspace/lib/drv/Makefile
rae1f70e r8f8a0cd6 36 36 generic/dev_iface.c \ 37 37 generic/remote_res.c \ 38 generic/remote_usb.c \ 38 39 generic/remote_usbhc.c \ 39 40 generic/remote_char.c -
uspace/lib/drv/generic/dev_iface.c
rae1f70e r8f8a0cd6 39 39 #include "remote_res.h" 40 40 #include "remote_char.h" 41 #include "remote_usb.h" 41 42 #include "remote_usbhc.h" 42 43 … … 45 46 &remote_res_iface, 46 47 &remote_char_iface, 48 &remote_usb_iface, 47 49 &remote_usbhc_iface 48 50 } -
uspace/lib/drv/generic/remote_usbhc.c
rae1f70e r8f8a0cd6 59 59 //static void remote_usbhc(device_t *, void *, ipc_callid_t, ipc_call_t *); 60 60 61 /** Remote USB interface operations. */61 /** Remote USB host controller interface operations. */ 62 62 static remote_iface_func_ptr_t remote_usbhc_iface_ops [] = { 63 63 remote_usbhc_get_address, … … 84 84 }; 85 85 86 /** Remote USB interface structure.86 /** Remote USB host controller interface structure. 87 87 */ 88 88 remote_iface_t remote_usbhc_iface = { -
uspace/lib/drv/include/usbhc_iface.h
rae1f70e r8f8a0cd6 31 31 */ 32 32 /** @file 33 * @brief USB interface definition.33 * @brief USB host controller interface definition. 34 34 */ 35 35 … … 226 226 usbhc_iface_transfer_in_callback_t, void *); 227 227 228 /** USB devicescommunication interface. */228 /** USB host controller communication interface. */ 229 229 typedef struct { 230 230 int (*tell_address)(device_t *, devman_handle_t, usb_address_t *); -
uspace/lib/usb/include/usb/usbdrv.h
rae1f70e r8f8a0cd6 41 41 #include <usb/descriptor.h> 42 42 43 int usb_drv_hc_connect(device_t *, unsigned int); 43 int usb_drv_find_hc(device_t *, devman_handle_t *); 44 int usb_drv_hc_connect(device_t *, devman_handle_t, unsigned int); 45 int usb_drv_hc_connect_auto(device_t *, unsigned int); 44 46 45 47 int usb_drv_reserve_default_address(int); -
uspace/lib/usb/src/hcdhubd.c
rae1f70e r8f8a0cd6 36 36 #include <usb/devreq.h> 37 37 #include <usbhc_iface.h> 38 #include <usb_iface.h> 38 39 #include <usb/descriptor.h> 39 40 #include <driver.h> … … 45 46 #include "hcdhubd_private.h" 46 47 48 49 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle) 50 { 51 assert(dev); 52 assert(dev->parent != NULL); 53 54 device_t *parent = dev->parent; 55 56 if (parent->ops && parent->ops->interfaces[USB_DEV_IFACE]) { 57 usb_iface_t *usb_iface 58 = (usb_iface_t *) parent->ops->interfaces[USB_DEV_IFACE]; 59 assert(usb_iface != NULL); 60 if (usb_iface->get_hc_handle) { 61 int rc = usb_iface->get_hc_handle(parent, handle); 62 return rc; 63 } 64 } 65 66 return ENOTSUP; 67 } 68 69 static usb_iface_t usb_iface = { 70 .get_hc_handle = usb_iface_get_hc_handle 71 }; 72 73 static device_ops_t child_ops = { 74 .interfaces[USB_DEV_IFACE] = &usb_iface 75 }; 76 47 77 /** Callback when new device is detected and must be handled by this driver. 48 78 * … … 129 159 } 130 160 child->name = child_info->name; 161 child->parent = child_info->parent; 162 child->ops = &child_ops; 131 163 132 164 match_id = create_match_id(); -
uspace/lib/usb/src/recognise.c
rae1f70e r8f8a0cd6 33 33 * @brief Functions for recognising kind of attached devices. 34 34 */ 35 #include <usb_iface.h> 35 36 #include <usb/usbdrv.h> 36 37 #include <usb/classes/classes.h> … … 38 39 #include <errno.h> 39 40 41 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle) 42 { 43 assert(dev); 44 assert(dev->parent != NULL); 45 46 device_t *parent = dev->parent; 47 48 if (parent->ops && parent->ops->interfaces[USB_DEV_IFACE]) { 49 usb_iface_t *usb_iface 50 = (usb_iface_t *) parent->ops->interfaces[USB_DEV_IFACE]; 51 assert(usb_iface != NULL); 52 if (usb_iface->get_hc_handle) { 53 int rc = usb_iface->get_hc_handle(parent, handle); 54 return rc; 55 } 56 } 57 58 return ENOTSUP; 59 } 60 61 static usb_iface_t usb_iface = { 62 .get_hc_handle = usb_iface_get_hc_handle 63 }; 64 65 static device_ops_t child_ops = { 66 .interfaces[USB_DEV_IFACE] = &usb_iface 67 }; 40 68 41 69 #define BCD_INT(a) (((unsigned int)(a)) / 256) … … 285 313 goto failure; 286 314 } 315 child->parent = parent; 287 316 child->name = child_name; 317 child->ops = &child_ops; 288 318 289 319 rc = usb_drv_create_device_match_ids(hc, &child->match_ids, address); -
uspace/lib/usb/src/usbdrv.c
rae1f70e r8f8a0cd6 35 35 #include <usb/usbdrv.h> 36 36 #include <usbhc_iface.h> 37 #include <usb_iface.h> 37 38 #include <errno.h> 38 39 #include <str_error.h> … … 54 55 } transfer_info_t; 55 56 57 /** Find handle of host controller the device is physically attached to. 58 * 59 * @param[in] dev Device looking for its host controller. 60 * @param[out] handle Host controller devman handle. 61 * @return Error code. 62 */ 63 int usb_drv_find_hc(device_t *dev, devman_handle_t *handle) 64 { 65 if (dev == NULL) { 66 return EBADMEM; 67 } 68 if (handle == NULL) { 69 return EBADMEM; 70 } 71 72 int parent_phone = devman_parent_device_connect(dev->handle, 73 IPC_FLAG_BLOCKING); 74 if (parent_phone < 0) { 75 return parent_phone; 76 } 77 78 devman_handle_t h; 79 int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE), 80 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h); 81 82 ipc_hangup(parent_phone); 83 84 if (rc != EOK) { 85 return rc; 86 } 87 88 *handle = h; 89 90 return EOK; 91 } 92 93 /** Connect to host controller the device is physically attached to. 94 * 95 * @param dev Device asking for connection. 96 * @param hc_handle Devman handle of the host controller. 97 * @param flags Connection flags (blocking connection). 98 * @return Phone to the HC or error code. 99 */ 100 int usb_drv_hc_connect(device_t *dev, devman_handle_t hc_handle, 101 unsigned int flags) 102 { 103 return devman_device_connect(hc_handle, flags); 104 } 105 56 106 /** Connect to host controller the device is physically attached to. 57 107 * … … 60 110 * @return Phone to corresponding HC or error code. 61 111 */ 62 int usb_drv_hc_connect(device_t *dev, unsigned int flags) 63 { 112 int usb_drv_hc_connect_auto(device_t *dev, unsigned int flags) 113 { 114 int rc; 115 devman_handle_t hc_handle; 116 64 117 /* 65 118 * Call parent hub to obtain device handle of respective HC. 66 119 */ 67 68 /* 69 * FIXME: currently we connect always to virtual host controller. 70 */ 71 int rc; 72 devman_handle_t handle; 73 74 rc = devman_device_get_handle("/virt/usbhc", &handle, flags); 120 rc = usb_drv_find_hc(dev, &hc_handle); 75 121 if (rc != EOK) { 76 122 return rc; 77 123 } 78 124 79 int phone = devman_device_connect(handle, flags); 80 81 return phone; 125 return usb_drv_hc_connect(dev, hc_handle, flags); 82 126 } 83 127 -
uspace/srv/devman/main.c
rae1f70e r8f8a0cd6 458 458 459 459 if (driver == NULL) { 460 printf(NAME ": devman_forward error - the device is not in %" PRIun 461 " usable state.\n", handle); 460 printf(NAME ": devman_forward error - the device %" PRIun \ 461 " (%s) is not in usable state.\n", 462 handle, dev->pathname); 462 463 ipc_answer_0(iid, ENOENT); 463 464 return;
Note:
See TracChangeset
for help on using the changeset viewer.