Changeset 32fb6bce in mainline for uspace/drv/bus/usb/vhc/transfer.c
- Timestamp:
- 2017-12-18T22:50:21Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7f70d1c
- Parents:
- 1ea0bbf
- git-author:
- Ondřej Hlavatý <aearsis@…> (2017-12-18 22:04:50)
- git-committer:
- Ondřej Hlavatý <aearsis@…> (2017-12-18 22:50:21)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/vhc/transfer.c
r1ea0bbf r32fb6bce 40 40 static bool is_set_address_transfer(vhc_transfer_t *transfer) 41 41 { 42 if (transfer->batch ->target.endpoint != 0) {43 return false; 44 } 45 if (transfer->batch ->ep->transfer_type != USB_TRANSFER_CONTROL) {46 return false; 47 } 48 if (transfer->batch ->dir != USB_DIRECTION_OUT) {42 if (transfer->batch.target.endpoint != 0) { 43 return false; 44 } 45 if (transfer->batch.ep->transfer_type != USB_TRANSFER_CONTROL) { 46 return false; 47 } 48 if (transfer->batch.dir != USB_DIRECTION_OUT) { 49 49 return false; 50 50 } 51 51 const usb_device_request_setup_packet_t *setup 52 = &transfer->batch ->setup.packet;52 = &transfer->batch.setup.packet; 53 53 if (setup->request_type != 0) { 54 54 return false; … … 150 150 assert(outcome != ENAK); 151 151 assert(transfer); 152 assert(transfer->batch); 153 transfer->batch->error = outcome; 154 transfer->batch->transfered_size = data_transfer_size; 155 usb_transfer_batch_finish(transfer->batch); 152 transfer->batch.error = outcome; 153 transfer->batch.transfered_size = data_transfer_size; 154 usb_transfer_batch_finish(&transfer->batch); 156 155 free(transfer); 156 } 157 158 static usb_transfer_batch_t *batch_create(endpoint_t *ep) 159 { 160 vhc_transfer_t *transfer = calloc(1, sizeof(vhc_transfer_t)); 161 usb_transfer_batch_init(&transfer->batch, ep); 162 link_initialize(&transfer->link); 163 return &transfer->batch; 157 164 } 158 165 159 166 static const bus_ops_t vhc_bus_ops = { 160 167 .parent = &usb2_bus_ops, 168 161 169 .endpoint_count_bw = bandwidth_count_usb11, 170 .batch_create = batch_create, 171 .batch_schedule = vhc_schedule, 162 172 }; 163 173 164 int vhc_init(vhc_data_t *instance , hcd_t *hcd)174 int vhc_init(vhc_data_t *instance) 165 175 { 166 176 assert(instance); 167 177 list_initialize(&instance->devices); 168 178 fibril_mutex_initialize(&instance->guard); 169 usb2_bus_init(&instance->bus, hcd,BANDWIDTH_AVAILABLE_USB11);179 usb2_bus_init(&instance->bus, BANDWIDTH_AVAILABLE_USB11); 170 180 instance->bus.base.ops = &vhc_bus_ops; 171 instance->magic = 0xDEADBEEF;172 181 return virthub_init(&instance->hub, "root hub"); 173 182 } 174 183 175 int vhc_schedule(hcd_t *hcd, usb_transfer_batch_t *batch) 176 { 177 assert(hcd); 184 int vhc_schedule(usb_transfer_batch_t *batch) 185 { 178 186 assert(batch); 179 vhc_data_t *vhc = hcd_get_driver_data(hcd); 187 vhc_transfer_t *transfer = (vhc_transfer_t *) batch; 188 vhc_data_t *vhc = bus_to_vhc(endpoint_get_bus(batch->ep)); 180 189 assert(vhc); 181 182 vhc_transfer_t *transfer = malloc(sizeof(vhc_transfer_t));183 if (!transfer)184 return ENOMEM;185 link_initialize(&transfer->link);186 transfer->batch = batch;187 190 188 191 fibril_mutex_lock(&vhc->guard); … … 192 195 list_foreach(vhc->devices, link, vhc_virtdev_t, dev) { 193 196 fibril_mutex_lock(&dev->guard); 194 if (dev->address == transfer->batch ->target.address) {197 if (dev->address == transfer->batch.target.address) { 195 198 if (!targets) { 196 199 list_append(&transfer->link, &dev->transfer_queue); … … 227 230 size_t data_transfer_size = 0; 228 231 if (dev->dev_sess) { 229 rc = process_transfer_remote( transfer->batch,232 rc = process_transfer_remote(&transfer->batch, 230 233 dev->dev_sess, &data_transfer_size); 231 234 } else if (dev->dev_local != NULL) { 232 rc = process_transfer_local( transfer->batch,235 rc = process_transfer_local(&transfer->batch, 233 236 dev->dev_local, &data_transfer_size); 234 237 } else { … … 244 247 if (is_set_address_transfer(transfer)) { 245 248 usb_device_request_setup_packet_t *setup = 246 (void*) transfer->batch ->setup.buffer;249 (void*) transfer->batch.setup.buffer; 247 250 dev->address = setup->value; 248 251 usb_log_debug2("Address changed to %d\n",
Note:
See TracChangeset
for help on using the changeset viewer.