Changeset 2e85b3c in mainline for uspace/drv
- Timestamp:
- 2011-02-16T18:22:43Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f4c87aa9
- Parents:
- 600733e (diff), ec59693 (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/drv
- Files:
-
- 11 edited
-
uhci-hcd/iface.c (modified) (7 diffs)
-
uhci-rhd/port.c (modified) (10 diffs)
-
uhci-rhd/port.h (modified) (2 diffs)
-
usbhub/usbhub.c (modified) (5 diffs)
-
usbhub/usbhub.h (modified) (2 diffs)
-
vhc/conn.h (modified) (2 diffs)
-
vhc/connhost.c (modified) (13 diffs)
-
vhc/devices.c (modified) (4 diffs)
-
vhc/devices.h (modified) (1 diff)
-
vhc/hc.c (modified) (2 diffs)
-
vhc/hc.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/iface.c
r600733e r2e85b3c 103 103 /*----------------------------------------------------------------------------*/ 104 104 static int interrupt_out(device_t *dev, usb_target_t target, 105 void *data, size_tsize,106 usbhc_iface_transfer_out_callback_t callback, void *arg)107 { 108 size_t max_packet_size = 8; 105 size_t max_packet_size, 106 void *data, size_t size, 107 usbhc_iface_transfer_out_callback_t callback, void *arg) 108 { 109 109 dev_speed_t speed = FULL_SPEED; 110 110 … … 118 118 /*----------------------------------------------------------------------------*/ 119 119 static int interrupt_in(device_t *dev, usb_target_t target, 120 void *data, size_tsize,121 usbhc_iface_transfer_in_callback_t callback, void *arg)122 { 123 size_t max_packet_size = 4; 120 size_t max_packet_size, 121 void *data, size_t size, 122 usbhc_iface_transfer_in_callback_t callback, void *arg) 123 { 124 124 dev_speed_t speed = FULL_SPEED; 125 125 … … 133 133 /*----------------------------------------------------------------------------*/ 134 134 static int control_write(device_t *dev, usb_target_t target, 135 size_t max_packet_size, 135 136 void *setup_data, size_t setup_size, void *data, size_t size, 136 137 usbhc_iface_transfer_out_callback_t callback, void *arg) 137 138 { 138 size_t max_packet_size = 8;139 139 dev_speed_t speed = FULL_SPEED; 140 140 … … 149 149 /*----------------------------------------------------------------------------*/ 150 150 static int control_read(device_t *dev, usb_target_t target, 151 size_t max_packet_size, 151 152 void *setup_data, size_t setup_size, void *data, size_t size, 152 153 usbhc_iface_transfer_in_callback_t callback, void *arg) 153 154 { 154 size_t max_packet_size = 8;155 155 dev_speed_t speed = FULL_SPEED; 156 156 … … 165 165 /*----------------------------------------------------------------------------*/ 166 166 static int control_write_setup(device_t *dev, usb_target_t target, 167 void *data, size_t size, 168 usbhc_iface_transfer_out_callback_t callback, void *arg) 167 size_t max_packet_size, 168 void *data, size_t size, 169 usbhc_iface_transfer_out_callback_t callback, void *arg) 170 { 171 dev_speed_t speed = FULL_SPEED; 172 173 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 174 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 175 max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg); 176 if (!batch) 177 return ENOMEM; 178 batch_control_setup_old(batch); 179 return EOK; 180 } 181 /*----------------------------------------------------------------------------*/ 182 static int control_write_data(device_t *dev, usb_target_t target, 183 size_t max_packet_size, 184 void *data, size_t size, 185 usbhc_iface_transfer_out_callback_t callback, void *arg) 186 { 187 dev_speed_t speed = FULL_SPEED; 188 189 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 190 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 191 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 192 if (!batch) 193 return ENOMEM; 194 batch_control_write_data_old(batch); 195 return EOK; 196 } 197 /*----------------------------------------------------------------------------*/ 198 static int control_write_status(device_t *dev, usb_target_t target, 199 usbhc_iface_transfer_in_callback_t callback, void *arg) 169 200 { 170 201 size_t max_packet_size = 8; … … 173 204 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 174 205 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 206 max_packet_size, speed, NULL, 0, NULL, 0, callback, NULL, arg); 207 if (!batch) 208 return ENOMEM; 209 batch_control_write_status_old(batch); 210 return EOK; 211 } 212 /*----------------------------------------------------------------------------*/ 213 static int control_read_setup(device_t *dev, usb_target_t target, 214 size_t max_packet_size, 215 void *data, size_t size, 216 usbhc_iface_transfer_out_callback_t callback, void *arg) 217 { 218 dev_speed_t speed = FULL_SPEED; 219 220 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 221 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 175 222 max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg); 176 223 if (!batch) … … 180 227 } 181 228 /*----------------------------------------------------------------------------*/ 182 static int control_write_data(device_t *dev, usb_target_t target,183 void *data, size_t size,184 usbhc_iface_transfer_out_callback_t callback, void *arg)185 {186 size_t max_packet_size = 8;187 dev_speed_t speed = FULL_SPEED;188 189 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);190 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,191 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg);192 if (!batch)193 return ENOMEM;194 batch_control_write_data_old(batch);195 return EOK;196 }197 /*----------------------------------------------------------------------------*/198 static int control_write_status(device_t *dev, usb_target_t target,199 usbhc_iface_transfer_in_callback_t callback, void *arg)200 {201 size_t max_packet_size = 8;202 dev_speed_t speed = FULL_SPEED;203 204 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);205 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,206 max_packet_size, speed, NULL, 0, NULL, 0, callback, NULL, arg);207 if (!batch)208 return ENOMEM;209 batch_control_write_status_old(batch);210 return EOK;211 }212 /*----------------------------------------------------------------------------*/213 static int control_read_setup(device_t *dev, usb_target_t target,214 void *data, size_t size,215 usbhc_iface_transfer_out_callback_t callback, void *arg)216 {217 size_t max_packet_size = 8;218 dev_speed_t speed = FULL_SPEED;219 220 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);221 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,222 max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg);223 if (!batch)224 return ENOMEM;225 batch_control_setup_old(batch);226 return EOK;227 }228 /*----------------------------------------------------------------------------*/229 229 static int control_read_data(device_t *dev, usb_target_t target, 230 void *data, size_tsize,231 usbhc_iface_transfer_in_callback_t callback, void *arg)232 { 233 size_t max_packet_size = 8; 230 size_t max_packet_size, 231 void *data, size_t size, 232 usbhc_iface_transfer_in_callback_t callback, void *arg) 233 { 234 234 dev_speed_t speed = FULL_SPEED; 235 235 -
uspace/drv/uhci-rhd/port.c
r600733e r2e85b3c 36 36 37 37 #include <usb/usb.h> /* usb_address_t */ 38 #include <usb/usbdrv.h> /* usb_drv_* */ 38 #include <usb/usbdevice.h> 39 #include <usb/hub.h> 40 #include <usb/request.h> 39 41 #include <usb/debug.h> 40 42 #include <usb/recognise.h> … … 58 60 port->attached_device = 0; 59 61 port->rh = rh; 60 port->hc_phone = parent_phone; 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 } 61 68 62 69 port->checker = fibril_create(uhci_port_check, port); … … 98 105 99 106 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 100 114 if (port_status & STATUS_CONNECTED) { 101 115 /* new device */ … … 104 118 uhci_port_remove_device(port_instance); 105 119 } 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 } 106 127 } 128 next: 107 129 async_usleep(port_instance->wait_period_usec); 108 130 } … … 113 135 { 114 136 assert(port); 115 assert( port->hc_phone);137 assert(usb_hc_connection_is_opened(&port->hc_connection)); 116 138 117 139 usb_log_info("Adding new device on port %d.\n", port->number); 118 140 119 141 /* get address of the future device */ 120 const usb_address_t usb_address = usb_ drv_request_address(port->hc_phone);142 const usb_address_t usb_address = usb_hc_request_address(&port->hc_connection); 121 143 122 144 if (usb_address <= 0) { … … 128 150 129 151 /* get default address */ 130 int ret = usb_ drv_reserve_default_address(port->hc_phone);152 int ret = usb_hc_reserve_default_address(&port->hc_connection); 131 153 if (ret != EOK) { 132 154 usb_log_error("Failed to reserve default address on port %d.\n", 133 155 port->number); 134 int ret2 = 135 usb_drv_release_address(port->hc_phone,usb_address);156 int ret2 = usb_hc_unregister_device(&port->hc_connection, 157 usb_address); 136 158 if (ret2 != EOK) { 137 159 usb_log_fatal("Failed to return requested address on port %d.\n", … … 174 196 } 175 197 176 /* assign address to device */ 177 ret = usb_drv_req_set_address(port->hc_phone, 0, usb_address); 198 /* 199 * Initialize connection to the device. 200 */ 201 /* FIXME: check for errors. */ 202 usb_device_connection_t new_dev_connection; 203 usb_endpoint_pipe_t new_dev_ctrl_pipe; 204 usb_device_connection_initialize_on_default_address( 205 &new_dev_connection, &port->hc_connection); 206 usb_endpoint_pipe_initialize_default_control(&new_dev_ctrl_pipe, 207 &new_dev_connection); 208 209 /* 210 * Assign new address to the device. This function updates 211 * the backing connection to still point to the same device. 212 */ 213 /* FIXME: check for errors. */ 214 usb_endpoint_pipe_start_session(&new_dev_ctrl_pipe); 215 ret = usb_request_set_address(&new_dev_ctrl_pipe, usb_address); 216 usb_endpoint_pipe_end_session(&new_dev_ctrl_pipe); 178 217 179 218 if (ret != EOK) { /* address assigning went wrong */ 180 219 usb_log_error("Failed(%d) to assign address to the device.\n", ret); 181 220 uhci_port_set_enabled(port, false); 182 int release = usb_ drv_release_default_address(port->hc_phone);221 int release = usb_hc_release_default_address(&port->hc_connection); 183 222 if (release != EOK) { 184 223 usb_log_error("Failed to release default address on port %d.\n", … … 194 233 195 234 /* release default address */ 196 ret = usb_ drv_release_default_address(port->hc_phone);235 ret = usb_hc_release_default_address(&port->hc_connection); 197 236 if (ret != EOK) { 198 237 usb_log_error("Failed to release default address on port %d.\n", … … 206 245 assert(port->attached_device == 0); 207 246 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); 247 ret = usb_device_register_child_in_devman(new_dev_connection.address, 248 new_dev_connection.hc_handle, port->rh, &port->attached_device); 249 219 250 if (ret != EOK) { /* something went wrong */ 220 251 usb_log_error("Failed(%d) in usb_drv_register_child.\n", ret); … … 225 256 port->number, usb_address, port->attached_device); 226 257 227 ret = 228 usb_drv_bind_address(port->hc_phone, usb_address, port->attached_device); 258 /* 259 * Register the device in the host controller. 260 */ 261 usb_hc_attached_device_t new_device = { 262 .address = new_dev_connection.address, 263 .handle = port->attached_device 264 }; 265 266 ret = usb_hc_register_device(&port->hc_connection, &new_device); 229 267 // TODO: proper error check here 230 268 assert(ret == EOK); -
uspace/drv/uhci-rhd/port.h
r600733e r2e85b3c 38 38 #include <driver.h> /* device_t */ 39 39 #include <stdint.h> 40 #include <usb/usbdevice.h> 40 41 41 42 #include "port_status.h" … … 46 47 unsigned number; 47 48 unsigned wait_period_usec; 48 int hc_phone;49 usb_hc_connection_t hc_connection; 49 50 device_t *rh; 50 51 devman_handle_t attached_device; -
uspace/drv/usbhub/usbhub.c
r600733e r2e85b3c 84 84 }*/ 85 85 86 result->usb_device = usb_new(usb_hcd_attached_device_info_t); 87 result->usb_device->address = addr; 86 result->address = addr; 88 87 89 88 // get hub descriptor … … 155 154 int opResult; 156 155 usb_target_t target; 157 target.address = hub_info-> usb_device->address;156 target.address = hub_info->address; 158 157 target.endpoint = 0; 159 158 … … 216 215 dprintf(USB_LOG_LEVEL_INFO, "hub dev added"); 217 216 dprintf(USB_LOG_LEVEL_DEBUG, "\taddress %d, has %d ports ", 218 hub_info-> usb_device->address,217 hub_info->address, 219 218 hub_info->port_count); 220 219 dprintf(USB_LOG_LEVEL_DEBUG, "\tused configuration %d",config_descriptor.configuration_number); … … 465 464 466 465 usb_target_t target; 467 target.address = hub_info-> usb_device->address;466 target.address = hub_info->address; 468 467 target.endpoint = 1;/// \TODO get from endpoint descriptor 469 468 dprintf(USB_LOG_LEVEL_INFO, "checking changes for hub at addr %d", … … 507 506 if (interrupt) { 508 507 usb_hub_process_interrupt( 509 hub_info, hc, port, hub_info-> usb_device->address);508 hub_info, hc, port, hub_info->address); 510 509 } 511 510 } -
uspace/drv/usbhub/usbhub.h
r600733e r2e85b3c 36 36 #define DRV_USBHUB_USBHUB_H 37 37 38 #include <ipc/devman.h> 39 #include <usb/usb.h> 40 #include <driver.h> 41 38 42 #define NAME "usbhub" 39 40 #include "usb/hcdhubd.h"41 43 42 44 /** basic information about device attached to hub */ … … 52 54 /** attached device handles */ 53 55 usb_hub_attached_device_t * attached_devs; 54 /** General usb device info. */55 usb_ hcd_attached_device_info_t * usb_device;56 /** USB address of the hub. */ 57 usb_address_t address; 56 58 /** General device info*/ 57 59 device_t * device; 58 59 60 } usb_hub_info_t; 60 61 -
uspace/drv/vhc/conn.h
r600733e r2e85b3c 37 37 38 38 #include <usb/usb.h> 39 #include <usb/hcdhubd.h>40 39 #include <usbhc_iface.h> 41 40 #include "vhcd.h" … … 44 43 void connection_handler_host(sysarg_t); 45 44 46 usb_hcd_transfer_ops_t vhc_transfer_ops;47 45 usbhc_iface_t vhc_iface; 48 46 -
uspace/drv/vhc/connhost.c
r600733e r2e85b3c 36 36 #include <errno.h> 37 37 #include <usb/usb.h> 38 #include <usb/ hcd.h>38 #include <usb/addrkeep.h> 39 39 40 40 #include "vhcd.h" … … 64 64 65 65 static void universal_callback(void *buffer, size_t size, 66 usb_transaction_outcome_t outcome, void *arg)66 int outcome, void *arg) 67 67 { 68 68 transfer_info_t *transfer = (transfer_info_t *) arg; … … 107 107 108 108 static void control_abort_prematurely(control_transfer_info_t *transfer, 109 size_t size, usb_transaction_outcome_t outcome)109 size_t size, int outcome) 110 110 { 111 111 switch (transfer->direction) { … … 127 127 128 128 static void control_callback_two(void *buffer, size_t size, 129 usb_transaction_outcome_t outcome, void *arg)129 int outcome, void *arg) 130 130 { 131 131 control_transfer_info_t *ctrl_transfer = (control_transfer_info_t *) arg; 132 132 133 if (outcome != USB_OUTCOME_OK) {133 if (outcome != EOK) { 134 134 control_abort_prematurely(ctrl_transfer, outcome, size); 135 135 free(ctrl_transfer); … … 165 165 166 166 static void control_callback_one(void *buffer, size_t size, 167 usb_transaction_outcome_t outcome, void *arg)167 int outcome, void *arg) 168 168 { 169 169 control_transfer_info_t *transfer = (control_transfer_info_t *) arg; 170 170 171 if (outcome != USB_OUTCOME_OK) {171 if (outcome != EOK) { 172 172 control_abort_prematurely(transfer, outcome, size); 173 173 free(transfer); … … 276 276 277 277 static int interrupt_out(device_t *dev, usb_target_t target, 278 size_t max_packet_size, 278 279 void *data, size_t size, 279 280 usbhc_iface_transfer_out_callback_t callback, void *arg) … … 285 286 286 287 static int interrupt_in(device_t *dev, usb_target_t target, 288 size_t max_packet_size, 287 289 void *data, size_t size, 288 290 usbhc_iface_transfer_in_callback_t callback, void *arg) … … 294 296 295 297 static int control_write_setup(device_t *dev, usb_target_t target, 298 size_t max_packet_size, 296 299 void *data, size_t size, 297 300 usbhc_iface_transfer_out_callback_t callback, void *arg) … … 303 306 304 307 static int control_write_data(device_t *dev, usb_target_t target, 308 size_t max_packet_size, 305 309 void *data, size_t size, 306 310 usbhc_iface_transfer_out_callback_t callback, void *arg) … … 320 324 321 325 static int control_write(device_t *dev, usb_target_t target, 326 size_t max_packet_size, 322 327 void *setup_packet, size_t setup_packet_size, 323 328 void *data, size_t data_size, … … 337 342 338 343 static int control_read_setup(device_t *dev, usb_target_t target, 344 size_t max_packet_size, 339 345 void *data, size_t size, 340 346 usbhc_iface_transfer_out_callback_t callback, void *arg) … … 346 352 347 353 static int control_read_data(device_t *dev, usb_target_t target, 354 size_t max_packet_size, 348 355 void *data, size_t size, 349 356 usbhc_iface_transfer_in_callback_t callback, void *arg) … … 363 370 364 371 static int control_read(device_t *dev, usb_target_t target, 372 size_t max_packet_size, 365 373 void *setup_packet, size_t setup_packet_size, 366 374 void *data, size_t data_size, -
uspace/drv/vhc/devices.c
r600733e r2e85b3c 112 112 * @param transaction Transaction to be sent over the bus. 113 113 */ 114 usb_transaction_outcome_t virtdev_send_to_all(transaction_t *transaction)114 int virtdev_send_to_all(transaction_t *transaction) 115 115 { 116 116 /* For easier debugging. */ … … 126 126 assert(false && "unreachable branch in switch()"); 127 127 } 128 usb_transaction_outcome_t outcome = USB_OUTCOME_BABBLE;128 int outcome = EBADCHECKSUM; 129 129 130 130 link_t *pos; … … 185 185 */ 186 186 if (rc == EOK) { 187 outcome = USB_OUTCOME_OK;187 outcome = EOK; 188 188 } 189 189 } … … 221 221 break; 222 222 } 223 outcome = USB_OUTCOME_OK;223 outcome = EOK; 224 224 } 225 225 -
uspace/drv/vhc/devices.h
r600733e r2e85b3c 54 54 virtdev_connection_t *virtdev_find(sysarg_t); 55 55 void virtdev_destroy_device(virtdev_connection_t *); 56 usb_transaction_outcome_t virtdev_send_to_all(transaction_t *);56 int virtdev_send_to_all(transaction_t *); 57 57 58 58 #endif -
uspace/drv/vhc/hc.c
r600733e r2e85b3c 89 89 */ 90 90 static void process_transaction_with_outcome(transaction_t * transaction, 91 usb_transaction_outcome_t outcome)91 int outcome) 92 92 { 93 93 usb_log_debug2("Transaction " TRANSACTION_FORMAT " done: %s.\n", 94 94 TRANSACTION_PRINTF(*transaction), 95 usb_str_transaction_outcome(outcome));95 str_error(outcome)); 96 96 97 97 transaction->callback(transaction->buffer, transaction->actual_len, … … 127 127 TRANSACTION_PRINTF(*transaction), ports); 128 128 129 usb_transaction_outcome_t outcome;129 int outcome; 130 130 outcome = virtdev_send_to_all(transaction); 131 131 -
uspace/drv/vhc/hc.h
r600733e r2e85b3c 47 47 */ 48 48 typedef void (*hc_transaction_done_callback_t)(void *buffer, size_t size, 49 usb_transaction_outcome_t outcome, void *arg);49 int outcome, void *arg); 50 50 51 51 /** Pending transaction details. */
Note:
See TracChangeset
for help on using the changeset viewer.
