Changes in / [54b141a:2cb6571] in mainline
- Files:
-
- 1 added
- 8 deleted
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
r54b141a r2cb6571 94 94 ./uspace/dist/drv/rootia32/ 95 95 ./uspace/dist/drv/uhci/ 96 ./uspace/dist/drv/usbhub/97 96 ./uspace/dist/drv/usbkbd/ 98 97 ./uspace/dist/drv/vhc/ … … 131 130 ./uspace/drv/rootia32/rootia32 132 131 ./uspace/drv/uhci/uhci 133 ./uspace/drv/usbhub/usbhub134 132 ./uspace/drv/usbkbd/usbkbd 135 133 ./uspace/drv/vhc/vhc -
boot/arch/amd64/Makefile.inc
r54b141a r2cb6571 42 42 ns8250 \ 43 43 uhci \ 44 usbhub \45 44 usbkbd 46 45 -
uspace/Makefile
r54b141a r2cb6571 118 118 DIRS += drv/ns8250 119 119 DIRS += drv/uhci 120 DIRS += drv/usbhub121 120 DIRS += drv/usbkbd 122 121 endif -
uspace/drv/uhci/Makefile
r54b141a r2cb6571 33 33 34 34 SOURCES = \ 35 main.c \ 36 transfers.c 35 main.c 37 36 38 37 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/uhci/main.c
r54b141a r2cb6571 28 28 #include <usb/hcdhubd.h> 29 29 #include <errno.h> 30 #include "uhci.h"31 30 32 static device_ops_t uhci_ops = { 33 .interfaces[USBHC_DEV_IFACE] = &uhci_iface, 31 static int enqueue_transfer_out(usb_hc_device_t *hc, 32 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 33 void *buffer, size_t size, 34 usb_hcd_transfer_callback_out_t callback, void *arg) 35 { 36 printf("UHCI: transfer OUT [%d.%d (%s); %u]\n", 37 dev->address, endpoint->endpoint, 38 usb_str_transfer_type(endpoint->transfer_type), 39 size); 40 return ENOTSUP; 41 } 42 43 static int enqueue_transfer_setup(usb_hc_device_t *hc, 44 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 45 void *buffer, size_t size, 46 usb_hcd_transfer_callback_out_t callback, void *arg) 47 { 48 printf("UHCI: transfer SETUP [%d.%d (%s); %u]\n", 49 dev->address, endpoint->endpoint, 50 usb_str_transfer_type(endpoint->transfer_type), 51 size); 52 return ENOTSUP; 53 } 54 55 static int enqueue_transfer_in(usb_hc_device_t *hc, 56 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 57 void *buffer, size_t size, 58 usb_hcd_transfer_callback_in_t callback, void *arg) 59 { 60 printf("UHCI: transfer IN [%d.%d (%s); %u]\n", 61 dev->address, endpoint->endpoint, 62 usb_str_transfer_type(endpoint->transfer_type), 63 size); 64 return ENOTSUP; 65 } 66 67 static usb_hcd_transfer_ops_t uhci_transfer_ops = { 68 .transfer_out = enqueue_transfer_out, 69 .transfer_in = enqueue_transfer_in, 70 .transfer_setup = enqueue_transfer_setup 34 71 }; 35 72 36 static int uhci_add_ device(device_t *device)73 static int uhci_add_hc(usb_hc_device_t *device) 37 74 { 38 device-> ops = &uhci_ops;75 device->transfer_ops = &uhci_transfer_ops; 39 76 40 77 /* … … 46 83 } 47 84 48 static driver_ops_t uhci_driver_ops = { 49 .add_device = uhci_add_device, 50 }; 51 52 static driver_t uhci_driver = { 53 .name = NAME, 54 .driver_ops = &uhci_driver_ops 85 usb_hc_driver_t uhci_driver = { 86 .name = "uhci", 87 .add_hc = uhci_add_hc 55 88 }; 56 89 … … 60 93 * Do some global initializations. 61 94 */ 62 sleep(5);63 95 64 return driver_main(&uhci_driver);96 return usb_hcd_main(&uhci_driver); 65 97 } -
uspace/drv/uhci/uhci.ma
r54b141a r2cb6571 1 1 10 pci/ven=8086&dev=7020 2 2 10 usb&hc=uhci 3 10 usb&hc=uhci&hub -
uspace/drv/vhc/Makefile
r54b141a r2cb6571 39 39 40 40 SOURCES = \ 41 addrmgm.c \42 41 conndev.c \ 43 42 connhost.c \ -
uspace/drv/vhc/conn.h
r54b141a r2cb6571 38 38 #include <usb/usb.h> 39 39 #include <usb/hcdhubd.h> 40 #include <usbhc_iface.h>41 40 #include "vhcd.h" 42 41 #include "devices.h" … … 45 44 46 45 usb_hcd_transfer_ops_t vhc_transfer_ops; 47 usbhc_iface_t vhc_iface;48 49 void address_init(void);50 int reserve_default_address(device_t *);51 int release_default_address(device_t *);52 int request_address(device_t *, usb_address_t *);53 int release_address(device_t *, usb_address_t);54 55 46 56 47 void default_connection_handler(device_t *, ipc_callid_t, ipc_call_t *); -
uspace/drv/vhc/connhost.c
r54b141a r2cb6571 43 43 typedef struct { 44 44 usb_direction_t direction; 45 usb hc_iface_transfer_out_callback_t out_callback;46 usb hc_iface_transfer_in_callback_t in_callback;47 device_t *dev;45 usb_hcd_transfer_callback_out_t out_callback; 46 usb_hcd_transfer_callback_in_t in_callback; 47 usb_hc_device_t *hc; 48 48 void *arg; 49 49 } transfer_info_t; … … 56 56 switch (transfer->direction) { 57 57 case USB_DIRECTION_IN: 58 transfer->in_callback(transfer-> dev,58 transfer->in_callback(transfer->hc, 59 59 size, outcome, 60 60 transfer->arg); 61 61 break; 62 62 case USB_DIRECTION_OUT: 63 transfer->out_callback(transfer-> dev,63 transfer->out_callback(transfer->hc, 64 64 outcome, 65 65 transfer->arg); … … 73 73 } 74 74 75 static transfer_info_t *create_transfer_info( device_t *dev,75 static transfer_info_t *create_transfer_info(usb_hc_device_t *hc, 76 76 usb_direction_t direction, void *arg) 77 77 { … … 82 82 transfer->out_callback = NULL; 83 83 transfer->arg = arg; 84 transfer-> dev = dev;84 transfer->hc = hc; 85 85 86 86 return transfer; 87 87 } 88 88 89 static int enqueue_transfer_out( device_t *dev,90 usb_ target_t target, usb_transfer_type_t transfer_type,89 static int enqueue_transfer_out(usb_hc_device_t *hc, 90 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 91 91 void *buffer, size_t size, 92 usb hc_iface_transfer_out_callback_t callback, void *arg)92 usb_hcd_transfer_callback_out_t callback, void *arg) 93 93 { 94 94 printf(NAME ": transfer OUT [%d.%d (%s); %u]\n", 95 target.address, target.endpoint,96 usb_str_transfer_type( transfer_type),95 dev->address, endpoint->endpoint, 96 usb_str_transfer_type(endpoint->transfer_type), 97 97 size); 98 98 99 99 transfer_info_t *transfer 100 = create_transfer_info( dev, USB_DIRECTION_OUT, arg);100 = create_transfer_info(hc, USB_DIRECTION_OUT, arg); 101 101 transfer->out_callback = callback; 102 103 usb_target_t target = { 104 .address = dev->address, 105 .endpoint = endpoint->endpoint 106 }; 102 107 103 108 hc_add_transaction_to_device(false, target, buffer, size, … … 107 112 } 108 113 109 static int enqueue_transfer_setup( device_t *dev,110 usb_ target_t target, usb_transfer_type_t transfer_type,114 static int enqueue_transfer_setup(usb_hc_device_t *hc, 115 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 111 116 void *buffer, size_t size, 112 usb hc_iface_transfer_out_callback_t callback, void *arg)117 usb_hcd_transfer_callback_out_t callback, void *arg) 113 118 { 114 119 printf(NAME ": transfer SETUP [%d.%d (%s); %u]\n", 115 target.address, target.endpoint,116 usb_str_transfer_type( transfer_type),120 dev->address, endpoint->endpoint, 121 usb_str_transfer_type(endpoint->transfer_type), 117 122 size); 118 123 119 124 transfer_info_t *transfer 120 = create_transfer_info( dev, USB_DIRECTION_OUT, arg);125 = create_transfer_info(hc, USB_DIRECTION_OUT, arg); 121 126 transfer->out_callback = callback; 127 128 usb_target_t target = { 129 .address = dev->address, 130 .endpoint = endpoint->endpoint 131 }; 122 132 123 133 hc_add_transaction_to_device(true, target, buffer, size, … … 127 137 } 128 138 129 static int enqueue_transfer_in( device_t *dev,130 usb_ target_t target, usb_transfer_type_t transfer_type,139 static int enqueue_transfer_in(usb_hc_device_t *hc, 140 usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint, 131 141 void *buffer, size_t size, 132 usb hc_iface_transfer_in_callback_t callback, void *arg)142 usb_hcd_transfer_callback_in_t callback, void *arg) 133 143 { 134 144 printf(NAME ": transfer IN [%d.%d (%s); %u]\n", 135 target.address, target.endpoint,136 usb_str_transfer_type( transfer_type),145 dev->address, endpoint->endpoint, 146 usb_str_transfer_type(endpoint->transfer_type), 137 147 size); 138 148 139 149 transfer_info_t *transfer 140 = create_transfer_info( dev, USB_DIRECTION_IN, arg);150 = create_transfer_info(hc, USB_DIRECTION_IN, arg); 141 151 transfer->in_callback = callback; 152 153 usb_target_t target = { 154 .address = dev->address, 155 .endpoint = endpoint->endpoint 156 }; 142 157 143 158 hc_add_transaction_from_device(target, buffer, size, … … 148 163 149 164 150 static int get_address(device_t *dev, devman_handle_t handle, 151 usb_address_t *address) 152 { 153 return ENOTSUP; 154 } 155 156 static int interrupt_out(device_t *dev, usb_target_t target, 157 void *data, size_t size, 158 usbhc_iface_transfer_out_callback_t callback, void *arg) 159 { 160 return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT, 161 data, size, 162 callback, arg); 163 } 164 165 static int interrupt_in(device_t *dev, usb_target_t target, 166 void *data, size_t size, 167 usbhc_iface_transfer_in_callback_t callback, void *arg) 168 { 169 return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT, 170 data, size, 171 callback, arg); 172 } 173 174 static int control_write_setup(device_t *dev, usb_target_t target, 175 void *data, size_t size, 176 usbhc_iface_transfer_out_callback_t callback, void *arg) 177 { 178 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 179 data, size, 180 callback, arg); 181 } 182 183 static int control_write_data(device_t *dev, usb_target_t target, 184 void *data, size_t size, 185 usbhc_iface_transfer_out_callback_t callback, void *arg) 186 { 187 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 188 data, size, 189 callback, arg); 190 } 191 192 static int control_write_status(device_t *dev, usb_target_t target, 193 usbhc_iface_transfer_in_callback_t callback, void *arg) 194 { 195 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 196 NULL, 0, 197 callback, arg); 198 } 199 200 static int control_read_setup(device_t *dev, usb_target_t target, 201 void *data, size_t size, 202 usbhc_iface_transfer_out_callback_t callback, void *arg) 203 { 204 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 205 data, size, 206 callback, arg); 207 } 208 209 static int control_read_data(device_t *dev, usb_target_t target, 210 void *data, size_t size, 211 usbhc_iface_transfer_in_callback_t callback, void *arg) 212 { 213 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 214 data, size, 215 callback, arg); 216 } 217 218 static int control_read_status(device_t *dev, usb_target_t target, 219 usbhc_iface_transfer_out_callback_t callback, void *arg) 220 { 221 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 222 NULL, 0, 223 callback, arg); 224 } 225 226 227 usbhc_iface_t vhc_iface = { 228 .tell_address = get_address, 229 230 .reserve_default_address = reserve_default_address, 231 .release_default_address = release_default_address, 232 .request_address = request_address, 233 .release_address = release_address, 234 235 .interrupt_out = interrupt_out, 236 .interrupt_in = interrupt_in, 237 238 .control_write_setup = control_write_setup, 239 .control_write_data = control_write_data, 240 .control_write_status = control_write_status, 241 242 .control_read_setup = control_read_setup, 243 .control_read_data = control_read_data, 244 .control_read_status = control_read_status 165 usb_hcd_transfer_ops_t vhc_transfer_ops = { 166 .transfer_out = enqueue_transfer_out, 167 .transfer_in = enqueue_transfer_in, 168 .transfer_setup = enqueue_transfer_setup 245 169 }; 246 170 -
uspace/drv/vhc/hcd.c
r54b141a r2cb6571 52 52 #include "conn.h" 53 53 54 static device_ops_t vhc_ops = {55 .interfaces[USBHC_DEV_IFACE] = &vhc_iface,56 .default_handler = default_connection_handler57 };58 54 59 55 static int vhc_count = 0; 60 static int vhc_add_device( device_t *dev)56 static int vhc_add_device(usb_hc_device_t *dev) 61 57 { 62 58 /* … … 69 65 vhc_count++; 70 66 71 dev->ops = &vhc_ops; 72 73 /* 74 * Initialize address management. 75 */ 76 address_init(); 67 dev->transfer_ops = &vhc_transfer_ops; 68 dev->generic->ops->default_handler = default_connection_handler; 77 69 78 70 /* … … 87 79 } 88 80 89 static driver_ops_t vhc_driver_ops = { 90 .add_device = vhc_add_device, 91 }; 92 93 static driver_t vhc_driver = { 81 static usb_hc_driver_t vhc_driver = { 94 82 .name = NAME, 95 . driver_ops = &vhc_driver_ops83 .add_hc = &vhc_add_device 96 84 }; 97 85 … … 126 114 sleep(4); 127 115 128 return driver_main(&vhc_driver);116 return usb_hcd_main(&vhc_driver); 129 117 } 130 118 -
uspace/drv/vhc/vhc.ma
r54b141a r2cb6571 1 1 10 usb&hc=vhc 2 2 10 usb&hc=vhc&hub -
uspace/lib/drv/generic/remote_usbhc.c
r54b141a r2cb6571 52 52 static void remote_usbhc_control_read_data(device_t *, void *, ipc_callid_t, ipc_call_t *); 53 53 static void remote_usbhc_control_read_status(device_t *, void *, ipc_callid_t, ipc_call_t *); 54 static void remote_usbhc_reserve_default_address(device_t *, void *, ipc_callid_t, ipc_call_t *);55 static void remote_usbhc_release_default_address(device_t *, void *, ipc_callid_t, ipc_call_t *);56 static void remote_usbhc_request_address(device_t *, void *, ipc_callid_t, ipc_call_t *);57 static void remote_usbhc_release_address(device_t *, void *, ipc_callid_t, ipc_call_t *);58 54 //static void remote_usbhc(device_t *, void *, ipc_callid_t, ipc_call_t *); 59 55 … … 61 57 static remote_iface_func_ptr_t remote_usbhc_iface_ops [] = { 62 58 remote_usbhc_get_address, 63 64 59 remote_usbhc_get_buffer, 65 66 remote_usbhc_reserve_default_address,67 remote_usbhc_release_default_address,68 69 remote_usbhc_request_address,70 remote_usbhc_release_address,71 72 60 remote_usbhc_interrupt_out, 73 61 remote_usbhc_interrupt_in, 74 75 62 remote_usbhc_control_write_setup, 76 63 remote_usbhc_control_write_data, 77 64 remote_usbhc_control_write_status, 78 79 65 remote_usbhc_control_read_setup, 80 66 remote_usbhc_control_read_data, … … 148 134 free(trans->buffer); 149 135 free(trans); 150 }151 152 void remote_usbhc_reserve_default_address(device_t *device, void *iface,153 ipc_callid_t callid, ipc_call_t *call)154 {155 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;156 157 if (!usb_iface->reserve_default_address) {158 ipc_answer_0(callid, ENOTSUP);159 return;160 }161 162 int rc = usb_iface->reserve_default_address(device);163 164 ipc_answer_0(callid, rc);165 }166 167 void remote_usbhc_release_default_address(device_t *device, void *iface,168 ipc_callid_t callid, ipc_call_t *call)169 {170 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;171 172 if (!usb_iface->release_default_address) {173 ipc_answer_0(callid, ENOTSUP);174 return;175 }176 177 int rc = usb_iface->release_default_address(device);178 179 ipc_answer_0(callid, rc);180 }181 182 void remote_usbhc_request_address(device_t *device, void *iface,183 ipc_callid_t callid, ipc_call_t *call)184 {185 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;186 187 if (!usb_iface->request_address) {188 ipc_answer_0(callid, ENOTSUP);189 return;190 }191 192 usb_address_t address;193 int rc = usb_iface->request_address(device, &address);194 if (rc != EOK) {195 ipc_answer_0(callid, rc);196 } else {197 ipc_answer_1(callid, EOK, (ipcarg_t) address);198 }199 }200 201 void remote_usbhc_release_address(device_t *device, void *iface,202 ipc_callid_t callid, ipc_call_t *call)203 {204 usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;205 206 if (!usb_iface->release_address) {207 ipc_answer_0(callid, ENOTSUP);208 return;209 }210 211 usb_address_t address = (usb_address_t) IPC_GET_ARG1(*call);212 213 int rc = usb_iface->release_address(device, address);214 215 ipc_answer_0(callid, rc);216 136 } 217 137 -
uspace/lib/drv/include/usbhc_iface.h
r54b141a r2cb6571 111 111 112 112 113 /** Reserve usage of default address.114 * This call informs the host controller that the caller will be115 * using default USB address. It is duty of the HC driver to ensure116 * that only single entity will have it reserved.117 * The address is returned via IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS.118 * The caller can start using the address after receiving EOK119 * answer.120 */121 IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS,122 123 /** Release usage of default address.124 * @see IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS125 */126 IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS,127 128 /** Asks for address assignment by host controller.129 * Answer:130 * - ELIMIT - host controller run out of address131 * - EOK - address assigned132 * Answer arguments:133 * - assigned address134 *135 * The address must be released by via IPC_M_USBHC_RELEASE_ADDRESS.136 */137 IPC_M_USBHC_REQUEST_ADDRESS,138 139 /** Release address in use.140 * Arguments:141 * - address to be released142 * Answer:143 * - ENOENT - address not in use144 * - EPERM - trying to release default USB address145 */146 IPC_M_USBHC_RELEASE_ADDRESS,147 148 149 113 /** Send interrupt data to device. 150 114 * See explanation at usb_iface_funcs_t (OUT transaction). … … 219 183 typedef struct { 220 184 int (*tell_address)(device_t *, devman_handle_t, usb_address_t *); 221 222 int (*reserve_default_address)(device_t *);223 int (*release_default_address)(device_t *);224 int (*request_address)(device_t *, usb_address_t *);225 int (*release_address)(device_t *, usb_address_t);226 185 227 186 usbhc_iface_transfer_out_t interrupt_out; -
uspace/lib/usb/Makefile
r54b141a r2cb6571 35 35 src/hcdhubd.c \ 36 36 src/hcdrv.c \ 37 src/hubdrv.c \ 37 38 src/localdrv.c \ 38 39 src/remotedrv.c \ -
uspace/lib/usb/include/usb/hcdhubd.h
r54b141a r2cb6571 166 166 167 167 int usb_hcd_main(usb_hc_driver_t *); 168 int usb_hcd_add_root_hub( device_t *dev);168 int usb_hcd_add_root_hub(usb_hc_device_t *dev); 169 169 170 170 /** -
uspace/lib/usb/include/usb/usbdrv.h
r54b141a r2cb6571 41 41 int usb_drv_hc_connect(device_t *, unsigned int); 42 42 43 int usb_drv_reserve_default_address(int);44 int usb_drv_release_default_address(int);45 usb_address_t usb_drv_request_address(int);46 int usb_drv_release_address(int, usb_address_t);47 48 43 usb_address_t usb_drv_get_my_address(int, device_t *); 49 44 -
uspace/lib/usb/src/hcdhubd.c
r54b141a r2cb6571 51 51 */ 52 52 static int add_device(device_t *dev) { 53 return ENOTSUP; 53 bool is_hc = str_cmp(dev->name, USB_HUB_DEVICE_NAME) != 0; 54 printf("%s: add_device(name=\"%s\")\n", hc_driver->name, dev->name); 55 56 if (is_hc) { 57 /* 58 * We are the HC itself. 59 */ 60 return usb_add_hc_device(dev); 61 } else { 62 /* 63 * We are some (maybe deeply nested) hub. 64 * Thus, assign our own operations and explore already 65 * connected devices. 66 */ 67 return usb_add_hub_device(dev); 68 } 54 69 } 55 70 … … 90 105 * @return Error code. 91 106 */ 92 int usb_hcd_add_root_hub(device_t *dev) 93 { 107 int usb_hcd_add_root_hub(usb_hc_device_t *dev) { 94 108 char *id; 95 int rc = asprintf(&id, "usb&h ub");109 int rc = asprintf(&id, "usb&hc=%s&hub", hc_driver->name); 96 110 if (rc <= 0) { 97 111 return rc; 98 112 } 99 113 100 rc = usb_hc_add_child_device(dev , USB_HUB_DEVICE_NAME, id, true);114 rc = usb_hc_add_child_device(dev->generic, USB_HUB_DEVICE_NAME, id, true); 101 115 if (rc != EOK) { 102 116 free(id); -
uspace/lib/usb/src/hcdhubd_private.h
r54b141a r2cb6571 46 46 usb_address_t usb_get_address_by_handle(devman_handle_t); 47 47 int usb_add_hc_device(device_t *); 48 int usb_add_hub_device(device_t *); 48 49 49 50 /** lowest allowed usb address */ -
uspace/lib/usb/src/hcdrv.c
r54b141a r2cb6571 47 47 LIST_INITIALIZE(hc_list); 48 48 49 /* Fake driver to have the name item initialized. */50 static usb_hc_driver_t hc_driver_fake = {51 .name = "HCD",52 };53 54 49 /** Our HC driver. */ 55 usb_hc_driver_t *hc_driver = &hc_driver_fake;50 usb_hc_driver_t *hc_driver = NULL; 56 51 57 52 int usb_lowest_address = 1; … … 91 86 int usb_add_hc_device(device_t *dev) 92 87 { 93 return ENOTSUP;94 88 usb_hc_device_t *hc_dev = usb_hc_device_create(dev); 95 89 -
uspace/lib/usb/src/usbdrv.c
r54b141a r2cb6571 100 100 } 101 101 102 /** Tell HC to reserve default address.103 *104 * @param phone Open phone to host controller driver.105 * @return Error code.106 */107 int usb_drv_reserve_default_address(int phone)108 {109 return async_req_0_0(phone, IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS);110 }111 112 /** Tell HC to release default address.113 *114 * @param phone Open phone to host controller driver.115 * @return Error code.116 */117 int usb_drv_release_default_address(int phone)118 {119 return async_req_0_0(phone, IPC_M_USBHC_RELEASE_DEFAULT_ADDRESS);120 }121 122 /** Ask HC for free address assignment.123 *124 * @param phone Open phone to host controller driver.125 * @return Assigned USB address or negative error code.126 */127 usb_address_t usb_drv_request_address(int phone)128 {129 ipcarg_t address;130 int rc = async_req_0_1(phone, IPC_M_USBHC_REQUEST_ADDRESS, &address);131 if (rc != EOK) {132 return rc;133 } else {134 return (usb_address_t) address;135 }136 }137 138 /** Inform HC about address release.139 *140 * @param phone Open phone to host controller driver.141 * @param address Address to be released.142 * @return Error code.143 */144 int usb_drv_release_address(int phone, usb_address_t address)145 {146 return async_req_1_0(phone, IPC_M_USBHC_RELEASE_ADDRESS, address);147 }148 149 102 /** Send data to HCD. 150 103 *
Note:
See TracChangeset
for help on using the changeset viewer.