Changeset 5620bd4 in mainline
- Timestamp:
- 2011-03-06T18:38:55Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 57c0a7e
- Parents:
- 98807e16
- Location:
- uspace/drv/uhci-hcd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/batch.c
r98807e16 r5620bd4 49 49 static void batch_control(batch_t *instance, 50 50 usb_packet_id data_stage, usb_packet_id status_stage); 51 static void batch_data(batch_t *instance, usb_packet_id pid , device_keeper_t *keeper);51 static void batch_data(batch_t *instance, usb_packet_id pid); 52 52 static void batch_call_in(batch_t *instance); 53 53 static void batch_call_out(batch_t *instance); … … 61 61 char* setup_buffer, size_t setup_size, 62 62 usbhc_iface_transfer_in_callback_t func_in, 63 usbhc_iface_transfer_out_callback_t func_out, void *arg) 63 usbhc_iface_transfer_out_callback_t func_out, void *arg, 64 device_keeper_t *manager 65 ) 64 66 { 65 67 assert(func_in == NULL || func_out == NULL); … … 137 139 instance->arg = arg; 138 140 instance->speed = speed; 141 instance->manager = manager; 139 142 140 143 queue_head_element_td(instance->qh, addr_to_phys(instance->tds)); … … 194 197 } 195 198 /*----------------------------------------------------------------------------*/ 196 void batch_interrupt_in(batch_t *instance , device_keeper_t *keeper)197 { 198 assert(instance); 199 batch_data(instance, USB_PID_IN , keeper);199 void batch_interrupt_in(batch_t *instance) 200 { 201 assert(instance); 202 batch_data(instance, USB_PID_IN); 200 203 instance->next_step = batch_call_in_and_dispose; 201 204 usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance); … … 203 206 } 204 207 /*----------------------------------------------------------------------------*/ 205 void batch_interrupt_out(batch_t *instance , device_keeper_t *keeper)208 void batch_interrupt_out(batch_t *instance) 206 209 { 207 210 assert(instance); 208 211 memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size); 209 batch_data(instance, USB_PID_OUT , keeper);212 batch_data(instance, USB_PID_OUT); 210 213 instance->next_step = batch_call_out_and_dispose; 211 214 usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance); … … 213 216 } 214 217 /*----------------------------------------------------------------------------*/ 215 void batch_bulk_in(batch_t *instance , device_keeper_t *keeper)216 { 217 assert(instance); 218 batch_data(instance, USB_PID_IN , keeper);218 void batch_bulk_in(batch_t *instance) 219 { 220 assert(instance); 221 batch_data(instance, USB_PID_IN); 219 222 instance->next_step = batch_call_in_and_dispose; 220 223 usb_log_debug("Batch(%p) BULK IN initialized.\n", instance); … … 222 225 } 223 226 /*----------------------------------------------------------------------------*/ 224 void batch_bulk_out(batch_t *instance , device_keeper_t *keeper)227 void batch_bulk_out(batch_t *instance) 225 228 { 226 229 assert(instance); 227 230 memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size); 228 batch_data(instance, USB_PID_OUT , keeper);231 batch_data(instance, USB_PID_OUT); 229 232 instance->next_step = batch_call_out_and_dispose; 230 233 usb_log_debug("Batch(%p) BULK OUT initialized.\n", instance); … … 232 235 } 233 236 /*----------------------------------------------------------------------------*/ 234 void batch_data(batch_t *instance, usb_packet_id pid , device_keeper_t *keeper)237 void batch_data(batch_t *instance, usb_packet_id pid) 235 238 { 236 239 assert(instance); 237 240 const bool low_speed = instance->speed == USB_SPEED_LOW; 238 int toggle = device_keeper_get_toggle( keeper, instance->target);241 int toggle = device_keeper_get_toggle(instance->manager, instance->target); 239 242 assert(toggle == 0 || toggle == 1); 240 243 … … 262 265 remain_size -= packet_size; 263 266 } 264 device_keeper_set_toggle( keeper, instance->target, toggle);267 device_keeper_set_toggle(instance->manager, instance->target, toggle); 265 268 266 269 instance->tds[packet - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG; -
uspace/drv/uhci-hcd/batch.h
r98807e16 r5620bd4 68 68 td_t *tds; 69 69 void (*next_step)(struct batch*); 70 device_keeper_t *manager; 70 71 } batch_t; 71 72 … … 75 76 char *setup_buffer, size_t setup_size, 76 77 usbhc_iface_transfer_in_callback_t func_in, 77 usbhc_iface_transfer_out_callback_t func_out, void *arg); 78 usbhc_iface_transfer_out_callback_t func_out, void *arg, 79 device_keeper_t *manager 80 ); 78 81 79 82 bool batch_is_complete(batch_t *instance); … … 83 86 void batch_control_read(batch_t *instance); 84 87 85 void batch_interrupt_in(batch_t *instance , device_keeper_t *keeper);88 void batch_interrupt_in(batch_t *instance); 86 89 87 void batch_interrupt_out(batch_t *instance , device_keeper_t *keeper);90 void batch_interrupt_out(batch_t *instance); 88 91 89 void batch_bulk_in(batch_t *instance , device_keeper_t *keeper);92 void batch_bulk_in(batch_t *instance); 90 93 91 void batch_bulk_out(batch_t *instance , device_keeper_t *keeper);94 void batch_bulk_out(batch_t *instance); 92 95 #endif 93 96 /** -
uspace/drv/uhci-hcd/iface.c
r98807e16 r5620bd4 114 114 115 115 batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT, 116 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 117 if (!batch) 118 return ENOMEM; 119 batch_interrupt_out(batch, &hc->device_manager); 116 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg, 117 &hc->device_manager); 118 if (!batch) 119 return ENOMEM; 120 batch_interrupt_out(batch); 120 121 return EOK; 121 122 } … … 133 134 134 135 batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT, 135 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg); 136 if (!batch) 137 return ENOMEM; 138 batch_interrupt_in(batch, &hc->device_manager); 136 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg, 137 &hc->device_manager); 138 if (!batch) 139 return ENOMEM; 140 batch_interrupt_in(batch); 139 141 return EOK; 140 142 } … … 153 155 154 156 batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK, 155 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 156 if (!batch) 157 return ENOMEM; 158 batch_bulk_out(batch, &hc->device_manager); 157 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg, 158 &hc->device_manager); 159 if (!batch) 160 return ENOMEM; 161 batch_bulk_out(batch); 159 162 return EOK; 160 163 } … … 172 175 173 176 batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK, 174 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg); 175 if (!batch) 176 return ENOMEM; 177 batch_bulk_in(batch, &hc->device_manager); 177 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg, 178 &hc->device_manager); 179 if (!batch) 180 return ENOMEM; 181 batch_bulk_in(batch); 178 182 return EOK; 179 183 } … … 191 195 target.address, target.endpoint, size, max_packet_size); 192 196 197 if (setup_size != 8) 198 return EINVAL; 199 193 200 batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL, 194 201 max_packet_size, speed, data, size, setup_data, setup_size, 195 NULL, callback, arg); 196 if (!batch) 197 return ENOMEM; 202 NULL, callback, arg, &hc->device_manager); 203 if (!batch) 204 return ENOMEM; 205 device_keeper_reset_if_need(&hc->device_manager, target, setup_data); 198 206 batch_control_write(batch); 199 207 return EOK; … … 214 222 batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL, 215 223 max_packet_size, speed, data, size, setup_data, setup_size, callback, 216 NULL, arg );224 NULL, arg, &hc->device_manager); 217 225 if (!batch) 218 226 return ENOMEM;
Note:
See TracChangeset
for help on using the changeset viewer.