Changeset b06d35a in mainline
- Timestamp:
- 2013-01-26T20:37:07Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a6a5b25
- Parents:
- f4138ac
- Location:
- uspace/lib/usbdev
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/include/usb/dev/driver.h
rf4138ac rb06d35a 155 155 const usb_endpoint_description_t **); 156 156 157 int usb_device_create_pipes(usb_device_connection_t *, 158 const usb_endpoint_description_t **, const uint8_t *, size_t, int, int, 159 usb_endpoint_mapping_t **, size_t *); 157 int usb_device_create_pipes(usb_device_t *usb_dev, 158 const usb_endpoint_description_t **endpoints); 160 159 void usb_device_destroy_pipes(usb_device_t *); 161 160 -
uspace/lib/usbdev/src/devdrv.c
rf4138ac rb06d35a 46 46 * @return Number of pipes (excluding default control pipe). 47 47 */ 48 static inline size_t count_other_pipes( 49 const usb_endpoint_description_t **endpoints) 48 static inline size_t count_pipes(const usb_endpoint_description_t **endpoints) 50 49 { 51 50 size_t count; … … 99 98 100 99 /* Create new pipes. */ 101 rc = usb_device_create_pipes(&usb_dev->wire, endpoints, 102 usb_dev->descriptors.configuration, 103 usb_dev->descriptors.configuration_size, 104 usb_dev->interface_no, usb_dev->alternate_interfaces.current, 105 &usb_dev->pipes, &usb_dev->pipes_count); 100 rc = usb_device_create_pipes(usb_dev, endpoints); 106 101 107 102 return rc; … … 172 167 * @return Error code. 173 168 */ 174 int usb_device_create_pipes(usb_device_connection_t *wire, 175 const usb_endpoint_description_t **endpoints, 176 const uint8_t *config_descr, size_t config_descr_size, 177 int interface_no, int interface_setting, 178 usb_endpoint_mapping_t **pipes_ptr, size_t *pipes_count_ptr) 179 { 180 assert(wire != NULL); 181 assert(config_descr != NULL); 182 assert(config_descr_size > 0); 183 assert(pipes_ptr != NULL); 184 185 size_t i; 186 int rc; 187 188 const size_t pipe_count = count_other_pipes(endpoints); 169 int usb_device_create_pipes(usb_device_t *usb_dev, 170 const usb_endpoint_description_t **endpoints) 171 { 172 assert(usb_dev); 173 assert(usb_dev->descriptors.configuration); 174 assert(usb_dev->pipes == NULL); 175 assert(usb_dev->pipes_count == 0); 176 177 size_t pipe_count = count_pipes(endpoints); 189 178 if (pipe_count == 0) { 190 if (pipes_count_ptr)191 *pipes_count_ptr = pipe_count;192 *pipes_ptr = NULL;193 179 return EOK; 194 180 } 195 181 196 usb_endpoint_mapping_t *pipes 197 =calloc(pipe_count, sizeof(usb_endpoint_mapping_t));182 usb_endpoint_mapping_t *pipes = 183 calloc(pipe_count, sizeof(usb_endpoint_mapping_t)); 198 184 if (pipes == NULL) { 199 185 return ENOMEM; … … 201 187 202 188 /* Now initialize. */ 203 for ( i = 0; i < pipe_count; i++) {189 for (size_t i = 0; i < pipe_count; i++) { 204 190 pipes[i].description = endpoints[i]; 205 pipes[i].interface_no = interface_no; 206 pipes[i].interface_setting = interface_setting; 191 pipes[i].interface_no = usb_dev->interface_no; 192 pipes[i].interface_setting = 193 usb_dev->alternate_interfaces.current; 207 194 } 208 195 209 196 /* Find the mapping from configuration descriptor. */ 210 rc = usb_pipe_initialize_from_configuration(pipes, pipe_count, 211 config_descr, config_descr_size, wire); 197 int rc = usb_pipe_initialize_from_configuration(pipes, pipe_count, 198 usb_dev->descriptors.configuration, 199 usb_dev->descriptors.configuration_size, &usb_dev->wire); 212 200 if (rc != EOK) { 213 201 free(pipes); … … 216 204 217 205 /* Register created pipes. */ 218 for ( i = 0; i < pipe_count; i++) {206 for (size_t i = 0; i < pipe_count; i++) { 219 207 if (pipes[i].present) { 220 208 rc = usb_pipe_register(&pipes[i].pipe, … … 226 214 } 227 215 228 *pipes_ptr = pipes; 229 if (pipes_count_ptr != NULL) { 230 *pipes_count_ptr = pipe_count; 231 } 216 usb_dev->pipes = pipes; 217 usb_dev->pipes_count = pipe_count; 232 218 233 219 return EOK; … … 240 226 */ 241 227 rollback_unregister_endpoints: 242 for ( i = 0; i < pipe_count; i++) {228 for (size_t i = 0; i < pipe_count; i++) { 243 229 if (pipes[i].present) { 244 230 usb_pipe_unregister(&pipes[i].pipe); … … 389 375 390 376 /* Create and register other pipes than default control (EP 0) */ 391 rc = usb_device_create_pipes(&usb_dev->wire, endpoints, 392 usb_dev->descriptors.configuration, 393 usb_dev->descriptors.configuration_size, 394 usb_dev->interface_no, usb_dev->alternate_interfaces.current, 395 &usb_dev->pipes, &usb_dev->pipes_count); 377 rc = usb_device_create_pipes(usb_dev, endpoints); 396 378 if (rc != EOK) { 397 379 usb_hc_connection_close(&usb_dev->hc_conn);
Note:
See TracChangeset
for help on using the changeset viewer.