Changeset 7fc092a in mainline for uspace/drv/vhc/devices.c
- Timestamp:
- 2011-01-27T22:09:29Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- db7ed07
- Parents:
- 9ee87f6 (diff), 6265a2b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/vhc/devices.c
r9ee87f6 r7fc092a 27 27 */ 28 28 29 /** @addtogroup usb29 /** @addtogroup drvusbvhc 30 30 * @{ 31 31 */ … … 58 58 /** Create virtual device. 59 59 * 60 * @param address USB address.61 60 * @param phone Callback phone. 61 * @param id Device id. 62 62 * @return New device. 63 * @retval NULL Out of memory or address already occupied.64 */ 65 virtdev_connection_t *virtdev_add_device(int phone )63 * @retval NULL Out of memory. 64 */ 65 virtdev_connection_t *virtdev_add_device(int phone, sysarg_t id) 66 66 { 67 67 virtdev_connection_t *dev = (virtdev_connection_t *) 68 68 malloc(sizeof(virtdev_connection_t)); 69 if (dev == NULL) { 70 return NULL; 71 } 72 69 73 dev->phone = phone; 74 dev->id = id; 70 75 list_append(&dev->link, &devices); 71 76 … … 73 78 74 79 return dev; 80 } 81 82 /** Find virtual device by id. 83 * 84 * @param id Device id. 85 * @return Device with given id. 86 * @retval NULL No such device. 87 */ 88 virtdev_connection_t *virtdev_find(sysarg_t id) 89 { 90 link_t *pos; 91 list_foreach(pos, &devices) { 92 virtdev_connection_t *dev 93 = list_get_instance(pos, virtdev_connection_t, link); 94 if (dev->id == id) { 95 return dev; 96 } 97 } 98 99 return NULL; 75 100 } 76 101 … … 90 115 usb_transaction_outcome_t virtdev_send_to_all(transaction_t *transaction) 91 116 { 117 /* For easier debugging. */ 118 switch (transaction->type) { 119 case USBVIRT_TRANSACTION_SETUP: 120 case USBVIRT_TRANSACTION_OUT: 121 transaction->actual_len = transaction->len; 122 break; 123 case USBVIRT_TRANSACTION_IN: 124 transaction->actual_len = 0; 125 break; 126 default: 127 assert(false && "unreachable branch in switch()"); 128 } 129 usb_transaction_outcome_t outcome = USB_OUTCOME_BABBLE; 130 92 131 link_t *pos; 93 132 list_foreach(pos, &devices) { … … 138 177 } else { 139 178 async_wait_for(req, &answer_rc); 179 transaction->actual_len = IPC_GET_ARG1(answer_data); 140 180 rc = (int)answer_rc; 181 } 182 183 /* 184 * If at least one device was able to accept this 185 * transaction and process it, we can announce success. 186 */ 187 if (rc == EOK) { 188 outcome = USB_OUTCOME_OK; 141 189 } 142 190 } … … 164 212 transaction->buffer, transaction->len, 165 213 &tmp); 166 if (tmp < transaction->len) { 167 transaction->len = tmp; 168 } 214 transaction->actual_len = tmp; 169 215 break; 170 216 … … 177 223 } 178 224 dprintf(4, "transaction on hub processed..."); 225 outcome = USB_OUTCOME_OK; 179 226 } 180 227 … … 183 230 * real-life image. 184 231 */ 185 return USB_OUTCOME_OK;232 return outcome; 186 233 } 187 234
Note:
See TracChangeset
for help on using the changeset viewer.