Changes in uspace/drv/vhc/connhost.c [ce687bbe:c4ba29c7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/vhc/connhost.c
rce687bbe rc4ba29c7 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 interrupt_out(device_t *dev, usb_target_t target, 151 void *data, size_t size, 152 usbhc_iface_transfer_out_callback_t callback, void *arg) 153 { 154 return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT, 155 data, size, 156 callback, arg); 157 } 158 159 static int interrupt_in(device_t *dev, usb_target_t target, 160 void *data, size_t size, 161 usbhc_iface_transfer_in_callback_t callback, void *arg) 162 { 163 return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT, 164 data, size, 165 callback, arg); 166 } 167 168 static int control_write_setup(device_t *dev, usb_target_t target, 169 void *data, size_t size, 170 usbhc_iface_transfer_out_callback_t callback, void *arg) 171 { 172 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 173 data, size, 174 callback, arg); 175 } 176 177 static int control_write_data(device_t *dev, usb_target_t target, 178 void *data, size_t size, 179 usbhc_iface_transfer_out_callback_t callback, void *arg) 180 { 181 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 182 data, size, 183 callback, arg); 184 } 185 186 static int control_write_status(device_t *dev, usb_target_t target, 187 usbhc_iface_transfer_in_callback_t callback, void *arg) 188 { 189 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 190 NULL, 0, 191 callback, arg); 192 } 193 194 static int control_read_setup(device_t *dev, usb_target_t target, 195 void *data, size_t size, 196 usbhc_iface_transfer_out_callback_t callback, void *arg) 197 { 198 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 199 data, size, 200 callback, arg); 201 } 202 203 static int control_read_data(device_t *dev, usb_target_t target, 204 void *data, size_t size, 205 usbhc_iface_transfer_in_callback_t callback, void *arg) 206 { 207 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 208 data, size, 209 callback, arg); 210 } 211 212 static int control_read_status(device_t *dev, usb_target_t target, 213 usbhc_iface_transfer_out_callback_t callback, void *arg) 214 { 215 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 216 NULL, 0, 217 callback, arg); 218 } 219 220 221 usbhc_iface_t vhc_iface = { 222 .tell_address = tell_address, 223 224 .reserve_default_address = reserve_default_address, 225 .release_default_address = release_default_address, 226 .request_address = request_address, 227 .bind_address = bind_address, 228 .release_address = release_address, 229 230 .interrupt_out = interrupt_out, 231 .interrupt_in = interrupt_in, 232 233 .control_write_setup = control_write_setup, 234 .control_write_data = control_write_data, 235 .control_write_status = control_write_status, 236 237 .control_read_setup = control_read_setup, 238 .control_read_data = control_read_data, 239 .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 240 169 }; 241 170
Note:
See TracChangeset
for help on using the changeset viewer.