Changes in uspace/drv/uhci-hcd/batch.c [0e06a14:bdc8ab1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/batch.c
r0e06a14 rbdc8ab1 49 49 static void batch_control( 50 50 batch_t *instance, int data_stage, int status_stage); 51 static void batch_data(batch_t *instance, int pid);52 51 static void batch_call_in(batch_t *instance); 53 52 static void batch_call_out(batch_t *instance); … … 193 192 { 194 193 assert(instance); 195 batch_data(instance, USB_PID_IN); 194 195 const bool low_speed = instance->speed == USB_SPEED_LOW; 196 int toggle = 1; 197 size_t i = 0; 198 for (;i < instance->packets; ++i) { 199 char *data = 200 instance->transport_buffer + (i * instance->max_packet_size); 201 transfer_descriptor_t *next = (i + 1) < instance->packets ? 202 &instance->tds[i + 1] : NULL; 203 toggle = 1 - toggle; 204 205 transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT, 206 instance->max_packet_size, toggle, false, low_speed, 207 instance->target, USB_PID_IN, data, next); 208 } 209 210 instance->tds[i - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG; 211 196 212 instance->next_step = batch_call_in_and_dispose; 197 213 usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance); … … 203 219 assert(instance); 204 220 memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size); 205 batch_data(instance, USB_PID_OUT); 221 222 const bool low_speed = instance->speed == USB_SPEED_LOW; 223 int toggle = 1; 224 size_t i = 0; 225 for (;i < instance->packets; ++i) { 226 char *data = 227 instance->transport_buffer + (i * instance->max_packet_size); 228 transfer_descriptor_t *next = (i + 1) < instance->packets ? 229 &instance->tds[i + 1] : NULL; 230 toggle = 1 - toggle; 231 232 transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT, 233 instance->max_packet_size, toggle++, false, low_speed, 234 instance->target, USB_PID_OUT, data, next); 235 } 236 237 instance->tds[i - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG; 238 206 239 instance->next_step = batch_call_out_and_dispose; 207 240 usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance); 208 241 batch_schedule(instance); 209 }210 /*----------------------------------------------------------------------------*/211 void batch_bulk_in(batch_t *instance)212 {213 assert(instance);214 batch_data(instance, USB_PID_IN);215 instance->next_step = batch_call_in_and_dispose;216 usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);217 batch_schedule(instance);218 }219 /*----------------------------------------------------------------------------*/220 void batch_bulk_out(batch_t *instance)221 {222 assert(instance);223 memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);224 batch_data(instance, USB_PID_OUT);225 instance->next_step = batch_call_out_and_dispose;226 usb_log_debug("Batch(%p) BULK OUT initialized.\n", instance);227 batch_schedule(instance);228 }229 /*----------------------------------------------------------------------------*/230 static void batch_data(batch_t *instance, int pid)231 {232 assert(instance);233 const bool low_speed = instance->speed == USB_SPEED_LOW;234 int toggle = 1;235 236 size_t packet = 0;237 size_t remain_size = instance->buffer_size;238 while (remain_size > 0) {239 char *data =240 instance->transport_buffer + instance->buffer_size241 - remain_size;242 243 toggle = 1 - toggle;244 245 const size_t packet_size =246 (instance->max_packet_size > remain_size) ?247 remain_size : instance->max_packet_size;248 249 transfer_descriptor_init(&instance->tds[packet],250 DEFAULT_ERROR_COUNT, packet_size, toggle, false, low_speed,251 instance->target, pid, data,252 &instance->tds[packet + 1]);253 254 ++packet;255 assert(packet <= instance->packets);256 assert(packet_size <= remain_size);257 remain_size -= packet_size;258 }259 260 instance->tds[packet - 1].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG;261 instance->tds[packet - 1].next = 0 | LINK_POINTER_TERMINATE_FLAG;262 242 } 263 243 /*----------------------------------------------------------------------------*/
Note:
See TracChangeset
for help on using the changeset viewer.