Changes in uspace/drv/uhci-rhd/port.c [6427cf67:97e87de] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-rhd/port.c
r6427cf67 r97e87de 33 33 */ 34 34 #include <errno.h> 35 #include <str_error.h>36 35 37 36 #include <usb/usb.h> /* usb_address_t */ 38 #include <usb/usbdevice.h> 39 #include <usb/hub.h> 40 #include <usb/request.h> 37 #include <usb/usbdrv.h> /* usb_drv_* */ 41 38 #include <usb/debug.h> 42 #include <usb/recognise.h>43 39 44 40 #include "port.h" … … 60 56 port->attached_device = 0; 61 57 port->rh = rh; 62 int rc = usb_hc_connection_initialize_from_device( 63 &port->hc_connection, rh); 64 if (rc != EOK) { 65 usb_log_error("Failed to initialize connection to HC."); 66 return rc; 67 } 58 port->hc_phone = parent_phone; 68 59 69 60 port->checker = fibril_create(uhci_port_check, port); … … 105 96 106 97 if (port_status & STATUS_CONNECTED_CHANGED) { 107 int rc = usb_hc_connection_open(108 &port_instance->hc_connection);109 if (rc != EOK) {110 usb_log_error("Failed to connect to HC.");111 goto next;112 }113 114 98 if (port_status & STATUS_CONNECTED) { 115 99 /* new device */ … … 118 102 uhci_port_remove_device(port_instance); 119 103 } 120 121 rc = usb_hc_connection_close(122 &port_instance->hc_connection);123 if (rc != EOK) {124 usb_log_error("Failed to disconnect from HC.");125 goto next;126 }127 104 } 128 next:129 105 async_usleep(port_instance->wait_period_usec); 130 106 } … … 135 111 { 136 112 assert(port); 137 assert( usb_hc_connection_is_opened(&port->hc_connection));113 assert(port->hc_phone); 138 114 139 115 usb_log_info("Adding new device on port %d.\n", port->number); 140 116 141 117 /* get address of the future device */ 142 const usb_address_t usb_address = usb_hc_request_address( 143 &port->hc_connection, true); 118 const usb_address_t usb_address = usb_drv_request_address(port->hc_phone); 144 119 145 120 if (usb_address <= 0) { … … 151 126 152 127 /* get default address */ 153 int ret = usb_ hc_reserve_default_address(&port->hc_connection, true);128 int ret = usb_drv_reserve_default_address(port->hc_phone); 154 129 if (ret != EOK) { 155 130 usb_log_error("Failed to reserve default address on port %d.\n", 156 131 port->number); 157 int ret2 = usb_hc_unregister_device(&port->hc_connection,158 132 int ret2 = 133 usb_drv_release_address(port->hc_phone, usb_address); 159 134 if (ret2 != EOK) { 160 135 usb_log_fatal("Failed to return requested address on port %d.\n", … … 197 172 } 198 173 199 /* 200 * Initialize connection to the device. 201 */ 202 /* FIXME: check for errors. */ 203 usb_device_connection_t new_dev_connection; 204 usb_endpoint_pipe_t new_dev_ctrl_pipe; 205 usb_device_connection_initialize_on_default_address( 206 &new_dev_connection, &port->hc_connection); 207 usb_endpoint_pipe_initialize_default_control(&new_dev_ctrl_pipe, 208 &new_dev_connection); 209 210 /* 211 * Assign new address to the device. This function updates 212 * the backing connection to still point to the same device. 213 */ 214 /* FIXME: check for errors. */ 215 usb_endpoint_pipe_start_session(&new_dev_ctrl_pipe); 216 ret = usb_request_set_address(&new_dev_ctrl_pipe, usb_address); 217 usb_endpoint_pipe_end_session(&new_dev_ctrl_pipe); 174 /* assign address to device */ 175 ret = usb_drv_req_set_address(port->hc_phone, 0, usb_address); 218 176 219 177 if (ret != EOK) { /* address assigning went wrong */ 220 178 usb_log_error("Failed(%d) to assign address to the device.\n", ret); 221 179 uhci_port_set_enabled(port, false); 222 int release = usb_ hc_release_default_address(&port->hc_connection);180 int release = usb_drv_release_default_address(port->hc_phone); 223 181 if (release != EOK) { 224 182 usb_log_error("Failed to release default address on port %d.\n", … … 234 192 235 193 /* release default address */ 236 ret = usb_ hc_release_default_address(&port->hc_connection);194 ret = usb_drv_release_default_address(port->hc_phone); 237 195 if (ret != EOK) { 238 196 usb_log_error("Failed to release default address on port %d.\n", … … 246 204 assert(port->attached_device == 0); 247 205 248 ret = usb_d evice_register_child_in_devman(new_dev_connection.address,249 new_dev_connection.hc_handle, port->rh, &port->attached_device);206 ret = usb_drv_register_child_in_devman(port->hc_phone, port->rh, 207 usb_address, &port->attached_device); 250 208 251 209 if (ret != EOK) { /* something went wrong */ … … 257 215 port->number, usb_address, port->attached_device); 258 216 259 /* 260 * Register the device in the host controller. 261 */ 262 usb_hc_attached_device_t new_device = { 263 .address = new_dev_connection.address, 264 .handle = port->attached_device 265 }; 266 267 ret = usb_hc_register_device(&port->hc_connection, &new_device); 217 ret = 218 usb_drv_bind_address(port->hc_phone, usb_address, port->attached_device); 268 219 // TODO: proper error check here 269 220 assert(ret == EOK);
Note:
See TracChangeset
for help on using the changeset viewer.