Changeset eb1a2f4 in mainline for uspace/drv/vhc
- Timestamp:
- 2011-02-22T23:30:56Z (15 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/drv/vhc
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/vhc/conn.h
rdbe25f1 reb1a2f4 46 46 extern usbhc_iface_t vhc_iface; 47 47 extern usb_iface_t vhc_usb_iface; 48 extern usb_iface_t rh_usb_iface; 48 49 49 50 void address_init(void); 50 51 51 52 52 void default_connection_handler(d evice_t *, ipc_callid_t, ipc_call_t *);53 void on_client_close(d evice_t *);53 void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); 54 void on_client_close(ddf_fun_t *); 54 55 55 56 -
uspace/drv/vhc/conndev.c
rdbe25f1 reb1a2f4 76 76 /** Default handler for IPC methods not handled by DDF. 77 77 * 78 * @param devDevice handling the call.78 * @param fun Device handling the call. 79 79 * @param icallid Call id. 80 80 * @param icall Call data. 81 81 */ 82 void default_connection_handler(d evice_t *dev,82 void default_connection_handler(ddf_fun_t *fun, 83 83 ipc_callid_t icallid, ipc_call_t *icall) 84 84 { … … 112 112 * @param d Device the client was connected to. 113 113 */ 114 void on_client_close(d evice_t *d)114 void on_client_close(ddf_fun_t *fun) 115 115 { 116 116 /* -
uspace/drv/vhc/connhost.c
rdbe25f1 reb1a2f4 48 48 usbhc_iface_transfer_out_callback_t out_callback; 49 49 usbhc_iface_transfer_in_callback_t in_callback; 50 d evice_t *dev;50 ddf_fun_t *fun; 51 51 size_t reported_size; 52 52 void *arg; … … 58 58 usbhc_iface_transfer_out_callback_t out_callback; 59 59 usbhc_iface_transfer_in_callback_t in_callback; 60 d evice_t *dev;60 ddf_fun_t *fun; 61 61 void *arg; 62 62 void *data_buffer; … … 75 75 switch (transfer->direction) { 76 76 case USB_DIRECTION_IN: 77 transfer->in_callback(transfer-> dev,77 transfer->in_callback(transfer->fun, 78 78 outcome, size, 79 79 transfer->arg); 80 80 break; 81 81 case USB_DIRECTION_OUT: 82 transfer->out_callback(transfer-> dev,82 transfer->out_callback(transfer->fun, 83 83 outcome, 84 84 transfer->arg); … … 92 92 } 93 93 94 static transfer_info_t *create_transfer_info(d evice_t *dev,94 static transfer_info_t *create_transfer_info(ddf_fun_t *fun, 95 95 usb_direction_t direction, void *arg) 96 96 { … … 101 101 transfer->out_callback = NULL; 102 102 transfer->arg = arg; 103 transfer-> dev = dev;103 transfer->fun = fun; 104 104 transfer->reported_size = (size_t) -1; 105 105 … … 112 112 switch (transfer->direction) { 113 113 case USB_DIRECTION_IN: 114 transfer->in_callback(transfer-> dev,114 transfer->in_callback(transfer->fun, 115 115 outcome, size, 116 116 transfer->arg); 117 117 break; 118 118 case USB_DIRECTION_OUT: 119 transfer->out_callback(transfer-> dev,119 transfer->out_callback(transfer->fun, 120 120 outcome, 121 121 transfer->arg); … … 138 138 } 139 139 140 transfer_info_t *transfer = create_transfer_info(ctrl_transfer-> dev,140 transfer_info_t *transfer = create_transfer_info(ctrl_transfer->fun, 141 141 ctrl_transfer->direction, ctrl_transfer->arg); 142 142 transfer->out_callback = ctrl_transfer->out_callback; … … 195 195 } 196 196 197 static control_transfer_info_t *create_control_transfer_info(d evice_t *dev,197 static control_transfer_info_t *create_control_transfer_info(ddf_fun_t *fun, 198 198 usb_direction_t direction, usb_target_t target, 199 199 void *data_buffer, size_t data_buffer_size, … … 208 208 transfer->out_callback = NULL; 209 209 transfer->arg = arg; 210 transfer-> dev = dev;210 transfer->fun = fun; 211 211 transfer->data_buffer = data_buffer; 212 212 transfer->data_buffer_size = data_buffer_size; … … 215 215 } 216 216 217 static int enqueue_transfer_out(d evice_t *dev,217 static int enqueue_transfer_out(ddf_fun_t *fun, 218 218 usb_target_t target, usb_transfer_type_t transfer_type, 219 219 void *buffer, size_t size, … … 226 226 227 227 transfer_info_t *transfer 228 = create_transfer_info( dev, USB_DIRECTION_OUT, arg);228 = create_transfer_info(fun, USB_DIRECTION_OUT, arg); 229 229 transfer->out_callback = callback; 230 230 … … 235 235 } 236 236 237 static int enqueue_transfer_in(d evice_t *dev,237 static int enqueue_transfer_in(ddf_fun_t *fun, 238 238 usb_target_t target, usb_transfer_type_t transfer_type, 239 239 void *buffer, size_t size, … … 246 246 247 247 transfer_info_t *transfer 248 = create_transfer_info( dev, USB_DIRECTION_IN, arg);248 = create_transfer_info(fun, USB_DIRECTION_IN, arg); 249 249 transfer->in_callback = callback; 250 250 … … 256 256 257 257 258 static int interrupt_out(d evice_t *dev, usb_target_t target,258 static int interrupt_out(ddf_fun_t *fun, usb_target_t target, 259 259 size_t max_packet_size, 260 260 void *data, size_t size, 261 261 usbhc_iface_transfer_out_callback_t callback, void *arg) 262 262 { 263 return enqueue_transfer_out( dev, target, USB_TRANSFER_INTERRUPT,263 return enqueue_transfer_out(fun, target, USB_TRANSFER_INTERRUPT, 264 264 data, size, 265 265 callback, arg); 266 266 } 267 267 268 static int interrupt_in(d evice_t *dev, usb_target_t target,268 static int interrupt_in(ddf_fun_t *fun, usb_target_t target, 269 269 size_t max_packet_size, 270 270 void *data, size_t size, 271 271 usbhc_iface_transfer_in_callback_t callback, void *arg) 272 272 { 273 return enqueue_transfer_in( dev, target, USB_TRANSFER_INTERRUPT,273 return enqueue_transfer_in(fun, target, USB_TRANSFER_INTERRUPT, 274 274 data, size, 275 275 callback, arg); 276 276 } 277 277 278 static int control_write(d evice_t *dev, usb_target_t target,278 static int control_write(ddf_fun_t *fun, usb_target_t target, 279 279 size_t max_packet_size, 280 280 void *setup_packet, size_t setup_packet_size, … … 283 283 { 284 284 control_transfer_info_t *transfer 285 = create_control_transfer_info( dev, USB_DIRECTION_OUT, target,285 = create_control_transfer_info(fun, USB_DIRECTION_OUT, target, 286 286 data, data_size, arg); 287 287 transfer->out_callback = callback; … … 294 294 } 295 295 296 static int control_read(d evice_t *dev, usb_target_t target,296 static int control_read(ddf_fun_t *fun, usb_target_t target, 297 297 size_t max_packet_size, 298 298 void *setup_packet, size_t setup_packet_size, … … 301 301 { 302 302 control_transfer_info_t *transfer 303 = create_control_transfer_info( dev, USB_DIRECTION_IN, target,303 = create_control_transfer_info(fun, USB_DIRECTION_IN, target, 304 304 data, data_size, arg); 305 305 transfer->in_callback = callback; … … 314 314 static usb_address_keeping_t addresses; 315 315 316 static int tell_address(d evice_t *dev, devman_handle_t handle,316 static int tell_address(ddf_fun_t *fun, devman_handle_t handle, 317 317 usb_address_t *address) 318 318 { 319 usb_log_debug("tell_address(fun \"%s\", handle %zu)\n", 320 fun->name, (size_t) fun->handle); 319 321 usb_address_t addr = usb_address_keeping_find(&addresses, handle); 320 322 if (addr < 0) { … … 326 328 } 327 329 328 static int reserve_default_address(d evice_t *dev, usb_speed_t ignored)330 static int reserve_default_address(ddf_fun_t *fun, usb_speed_t ignored) 329 331 { 330 332 usb_address_keeping_reserve_default(&addresses); … … 332 334 } 333 335 334 static int release_default_address(d evice_t *dev)336 static int release_default_address(ddf_fun_t *fun) 335 337 { 336 338 usb_address_keeping_release_default(&addresses); … … 338 340 } 339 341 340 static int request_address(d evice_t *dev, usb_speed_t ignored,342 static int request_address(ddf_fun_t *fun, usb_speed_t ignored, 341 343 usb_address_t *address) 342 344 { … … 350 352 } 351 353 352 static int release_address(d evice_t *dev, usb_address_t address)354 static int release_address(ddf_fun_t *fun, usb_address_t address) 353 355 { 354 356 return usb_address_keeping_release(&addresses, address); 355 357 } 356 358 357 static int bind_address(d evice_t *dev, usb_address_t address,359 static int bind_address(ddf_fun_t *fun, usb_address_t address, 358 360 devman_handle_t handle) 359 361 { 360 362 usb_address_keeping_devman_bind(&addresses, address, handle); 361 363 return EOK; 364 } 365 366 static int usb_iface_get_hc_handle_rh_impl(ddf_fun_t *root_hub_fun, 367 devman_handle_t *handle) 368 { 369 ddf_fun_t *hc_fun = root_hub_fun->driver_data; 370 assert(hc_fun != NULL); 371 372 *handle = hc_fun->handle; 373 374 usb_log_debug("usb_iface_get_hc_handle_rh_impl returns %zu\n", *handle); 375 376 return EOK; 377 } 378 379 static int tell_address_rh(ddf_fun_t *root_hub_fun, devman_handle_t handle, 380 usb_address_t *address) 381 { 382 ddf_fun_t *hc_fun = root_hub_fun->driver_data; 383 assert(hc_fun != NULL); 384 385 return tell_address(hc_fun, root_hub_fun->handle, address); 362 386 } 363 387 … … 386 410 }; 387 411 412 usb_iface_t rh_usb_iface = { 413 .get_hc_handle = usb_iface_get_hc_handle_rh_impl, 414 .get_address = tell_address_rh 415 }; 416 388 417 389 418 /** -
uspace/drv/vhc/hcd.c
rdbe25f1 reb1a2f4 42 42 #include <errno.h> 43 43 #include <str_error.h> 44 #include <d river.h>44 #include <ddf/driver.h> 45 45 46 46 #include <usb/usb.h> … … 53 53 #include "conn.h" 54 54 55 static d evice_ops_t vhc_ops = {55 static ddf_dev_ops_t vhc_ops = { 56 56 .interfaces[USBHC_DEV_IFACE] = &vhc_iface, 57 57 .interfaces[USB_DEV_IFACE] = &vhc_usb_iface, … … 60 60 }; 61 61 62 static int vhc_count = 0; 63 static int vhc_add_device(device_t *dev) 62 static int vhc_add_device(ddf_dev_t *dev) 64 63 { 64 static int vhc_count = 0; 65 int rc; 66 65 67 /* 66 68 * Currently, we know how to simulate only single HC. … … 70 72 } 71 73 72 vhc_count++; 74 /* 75 * Create exposed function representing the host controller 76 * itself. 77 */ 78 ddf_fun_t *hc = ddf_fun_create(dev, fun_exposed, "hc"); 79 if (hc == NULL) { 80 usb_log_fatal("Failed to create device function.\n"); 81 return ENOMEM; 82 } 73 83 74 dev->ops = &vhc_ops;84 hc->ops = &vhc_ops; 75 85 76 devman_add_device_to_class(dev->handle, "usbhc"); 86 rc = ddf_fun_bind(hc); 87 if (rc != EOK) { 88 usb_log_fatal("Failed to bind HC function: %s.\n", 89 str_error(rc)); 90 return rc; 91 } 92 93 ddf_fun_add_to_class(hc, "usbhc"); 77 94 78 95 /* 79 96 * Initialize our hub and announce its presence. 80 97 */ 81 virtual_hub_device_init( dev);98 virtual_hub_device_init(hc); 82 99 83 usb_log_info("Virtual USB host controller ready ( id =%zu).\n",84 (size_t) dev->handle );100 usb_log_info("Virtual USB host controller ready (dev %zu, hc %zu).\n", 101 (size_t) dev->handle, (size_t) hc->handle); 85 102 86 103 return EOK; … … 103 120 * in devman output. 104 121 */ 105 sleep(5);122 //sleep(5); 106 123 107 usb_log_enable(USB_LOG_LEVEL_ INFO, NAME);124 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 108 125 109 126 printf(NAME ": virtual USB host controller driver.\n"); … … 122 139 * We are also a driver within devman framework. 123 140 */ 124 return d river_main(&vhc_driver);141 return ddf_driver_main(&vhc_driver); 125 142 } 126 143 -
uspace/drv/vhc/hub.c
rdbe25f1 reb1a2f4 39 39 #include <str_error.h> 40 40 #include <stdlib.h> 41 #include <driver.h> 41 #include <ddf/driver.h> 42 #include <devman.h> 42 43 #include <usb/hub.h> 43 44 #include <usb/recognise.h> … … 46 47 #include "hub/virthub.h" 47 48 #include "vhcd.h" 49 #include "conn.h" 48 50 49 51 usbvirt_device_t virtual_hub_device; 52 static ddf_dev_ops_t rh_ops = { 53 .interfaces[USB_DEV_IFACE] = &rh_usb_iface, 54 }; 50 55 51 56 static int hub_register_in_devman_fibril(void *arg); 52 57 53 void virtual_hub_device_init(d evice_t *hc_dev)58 void virtual_hub_device_init(ddf_fun_t *hc_dev) 54 59 { 55 60 virthub_init(&virtual_hub_device); … … 83 88 int hub_register_in_devman_fibril(void *arg) 84 89 { 85 d evice_t *hc_dev = (device_t *) arg;90 ddf_fun_t *hc_dev = (ddf_fun_t *) arg; 86 91 87 92 /* … … 94 99 async_hangup(phone); 95 100 101 int rc; 102 96 103 usb_hc_connection_t hc_conn; 97 usb_hc_connection_initialize(&hc_conn, hc_dev->handle); 104 rc = usb_hc_connection_initialize(&hc_conn, hc_dev->handle); 105 assert(rc == EOK); 98 106 99 usb_hc_connection_open(&hc_conn); 107 rc = usb_hc_connection_open(&hc_conn); 108 assert(rc == EOK); 100 109 101 int rc = usb_hc_new_device_wrapper(hc_dev, &hc_conn, USB_SPEED_FULL, 110 ddf_fun_t *hub_dev; 111 rc = usb_hc_new_device_wrapper(hc_dev->dev, &hc_conn, 112 USB_SPEED_FULL, 102 113 pretend_port_rest, 0, NULL, 103 NULL, NULL );114 NULL, NULL, &rh_ops, hc_dev, &hub_dev); 104 115 if (rc != EOK) { 105 116 usb_log_fatal("Failed to create root hub: %s.\n", … … 108 119 109 120 usb_hc_connection_close(&hc_conn); 121 122 usb_log_info("Created root hub function (handle %zu).\n", 123 (size_t) hub_dev->handle); 110 124 111 125 return 0; -
uspace/drv/vhc/hub.h
rdbe25f1 reb1a2f4 37 37 38 38 #include <usbvirt/device.h> 39 #include <d river.h>39 #include <ddf/driver.h> 40 40 41 41 #include "devices.h" … … 45 45 extern usbvirt_device_t virtual_hub_device; 46 46 47 void virtual_hub_device_init(d evice_t *);47 void virtual_hub_device_init(ddf_fun_t *); 48 48 49 49 #endif -
uspace/drv/vhc/hub/hub.c
rdbe25f1 reb1a2f4 38 38 #include <errno.h> 39 39 #include <str_error.h> 40 #include <assert.h> 40 41 #include <stdlib.h> 41 #include <d river.h>42 #include <ddf/driver.h> 42 43 43 44 #include "hub.h" -
uspace/drv/vhc/hub/virthub.c
rdbe25f1 reb1a2f4 39 39 #include <errno.h> 40 40 #include <str_error.h> 41 #include <assert.h> 41 42 #include <stdlib.h> 42 #include <d river.h>43 #include <ddf/driver.h> 43 44 44 45 #include "virthub.h"
Note:
See TracChangeset
for help on using the changeset viewer.
