Changeset c15070c in mainline
- Timestamp:
- 2011-03-21T10:54:23Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bab71635
- Parents:
- 79c8a96
- Location:
- uspace
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/batch.c
r79c8a96 rc15070c 183 183 184 184 device_keeper_set_toggle(data->manager, 185 instance->target, td_toggle(&data->tds[i])); 185 instance->target, instance->direction, 186 td_toggle(&data->tds[i])); 186 187 if (i > 0) 187 188 goto substract_ret; … … 238 239 { 239 240 assert(instance); 241 instance->direction = USB_DIRECTION_IN; 240 242 batch_data(instance, USB_PID_IN); 241 243 instance->next_step = batch_call_in_and_dispose; … … 252 254 { 253 255 assert(instance); 256 instance->direction = USB_DIRECTION_OUT; 254 257 /* We are data out, we are supposed to provide data */ 255 258 memcpy(instance->transport_buffer, instance->buffer, … … 270 273 assert(instance); 271 274 batch_data(instance, USB_PID_IN); 275 instance->direction = USB_DIRECTION_IN; 272 276 instance->next_step = batch_call_in_and_dispose; 273 277 usb_log_debug("Batch(%p) BULK IN initialized.\n", instance); … … 283 287 { 284 288 assert(instance); 289 instance->direction = USB_DIRECTION_OUT; 285 290 /* We are data out, we are supposed to provide data */ 286 291 memcpy(instance->transport_buffer, instance->buffer, … … 306 311 307 312 const bool low_speed = instance->speed == USB_SPEED_LOW; 308 int toggle = device_keeper_get_toggle(data->manager, instance->target); 313 int toggle = device_keeper_get_toggle( 314 data->manager, instance->target, instance->direction); 309 315 assert(toggle == 0 || toggle == 1); 310 316 … … 337 343 } 338 344 td_set_ioc(&data->tds[packet - 1]); 339 device_keeper_set_toggle(data->manager, instance->target, toggle); 345 device_keeper_set_toggle(data->manager, instance->target, 346 instance->direction, toggle); 340 347 } 341 348 /*----------------------------------------------------------------------------*/ -
uspace/lib/usb/include/usb/host/batch.h
r79c8a96 rc15070c 46 46 usb_transfer_type_t transfer_type; 47 47 usb_speed_t speed; 48 usb_direction_t direction; 48 49 usbhc_iface_transfer_in_callback_t callback_in; 49 50 usbhc_iface_transfer_out_callback_t callback_out; -
uspace/lib/usb/include/usb/host/device_keeper.h
r79c8a96 rc15070c 44 44 usb_speed_t speed; 45 45 bool occupied; 46 uint16_t toggle_status ;46 uint16_t toggle_status[2]; 47 47 devman_handle_t handle; 48 48 }; … … 63 63 64 64 void device_keeper_reset_if_need( 65 device_keeper_t *instance, usb_target_t target, const unsigned char *setup_data); 65 device_keeper_t *instance, usb_target_t target, 66 const unsigned char *setup_data); 66 67 67 int device_keeper_get_toggle(device_keeper_t *instance, usb_target_t target); 68 int device_keeper_get_toggle( 69 device_keeper_t *instance, usb_target_t target, usb_direction_t direction); 68 70 69 int device_keeper_set_toggle( 70 device_keeper_t *instance, usb_target_t target, bool toggle);71 int device_keeper_set_toggle(device_keeper_t *instance, 72 usb_target_t target, usb_direction_t direction, bool toggle); 71 73 72 74 usb_address_t device_keeper_request( -
uspace/lib/usb/src/host/batch.c
r79c8a96 rc15070c 62 62 instance->transfer_type = transfer_type; 63 63 instance->speed = speed; 64 instance->direction = USB_DIRECTION_BOTH; 64 65 instance->callback_in = func_in; 65 66 instance->callback_out = func_out; -
uspace/lib/usb/src/host/device_keeper.c
r79c8a96 rc15070c 55 55 instance->devices[i].occupied = false; 56 56 instance->devices[i].handle = 0; 57 instance->devices[i].toggle_status = 0; 57 instance->devices[i].toggle_status[0] = 0; 58 instance->devices[i].toggle_status[1] = 0; 58 59 } 59 60 } … … 118 119 if (((data[0] & 0xf) == 1) && ((data[2] | data[3]) == 0)) { 119 120 /* endpoint number is < 16, thus first byte is enough */ 120 instance->devices[target.address].toggle_status &= 121 instance->devices[target.address].toggle_status[0] &= 122 ~(1 << data[4]); 123 instance->devices[target.address].toggle_status[1] &= 121 124 ~(1 << data[4]); 122 125 } … … 127 130 /* target must be device */ 128 131 if ((data[0] & 0xf) == 0) { 129 instance->devices[target.address].toggle_status = 0; 132 instance->devices[target.address].toggle_status[0] = 0; 133 instance->devices[target.address].toggle_status[1] = 0; 130 134 } 131 135 break; … … 140 144 * @return Error code 141 145 */ 142 int device_keeper_get_toggle(device_keeper_t *instance, usb_target_t target) 143 { 144 assert(instance); 146 int device_keeper_get_toggle( 147 device_keeper_t *instance, usb_target_t target, usb_direction_t direction) 148 { 149 assert(instance); 150 /* only control pipes are bi-directional and those do not need toggle */ 151 if (direction == USB_DIRECTION_BOTH) 152 return ENOENT; 145 153 int ret; 146 154 fibril_mutex_lock(&instance->guard); … … 151 159 ret = EINVAL; 152 160 } else { 153 ret = (instance->devices[target.address].toggle_status 161 ret = (instance->devices[target.address].toggle_status[direction] 154 162 >> target.endpoint) & 1; 155 163 } … … 165 173 * @return Error code. 166 174 */ 167 int device_keeper_set_toggle( 168 device_keeper_t *instance, usb_target_t target, bool toggle) 169 { 170 assert(instance); 175 int device_keeper_set_toggle(device_keeper_t *instance, 176 usb_target_t target, usb_direction_t direction, bool toggle) 177 { 178 assert(instance); 179 /* only control pipes are bi-directional and those do not need toggle */ 180 if (direction == USB_DIRECTION_BOTH) 181 return ENOENT; 171 182 int ret; 172 183 fibril_mutex_lock(&instance->guard); … … 178 189 } else { 179 190 if (toggle) { 180 instance->devices[target.address].toggle_status |= (1 << target.endpoint); 191 instance->devices[target.address].toggle_status[direction] 192 |= (1 << target.endpoint); 181 193 } else { 182 instance->devices[target.address].toggle_status &= ~(1 << target.endpoint); 194 instance->devices[target.address].toggle_status[direction] 195 &= ~(1 << target.endpoint); 183 196 } 184 197 ret = EOK; … … 215 228 instance->devices[new_address].occupied = true; 216 229 instance->devices[new_address].speed = speed; 217 instance->devices[new_address].toggle_status = 0; 230 instance->devices[new_address].toggle_status[0] = 0; 231 instance->devices[new_address].toggle_status[1] = 0; 218 232 instance->last_address = new_address; 219 233 fibril_mutex_unlock(&instance->guard);
Note:
See TracChangeset
for help on using the changeset viewer.