Changes in uspace/lib/usbdev/src/pipesinit.c [58563585:5bc8250] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/src/pipesinit.c
r58563585 r5bc8250 38 38 #include <usb/dev/request.h> 39 39 #include <usb/usb.h> 40 #include <usb/debug.h> 40 41 #include <usb/descriptor.h> 41 42 … … 59 60 NESTING(INTERFACE, HID), 60 61 NESTING(HID, HID_REPORT), 62 NESTING(ENDPOINT, SSPEED_EP_COMPANION), 61 63 LAST_NESTING 62 64 }; … … 70 72 { 71 73 return descriptor[1] == USB_DESCTYPE_ENDPOINT; 74 } 75 76 /** Tells whether given descriptor is of superspeed companion type. 77 * 78 * @param descriptor Descriptor in question. 79 * @return Whether the given descriptor is superspeed companion descriptor. 80 */ 81 static inline bool is_superspeed_companion_descriptor(const uint8_t *descriptor) 82 { 83 return descriptor[1] == USB_DESCTYPE_SSPEED_EP_COMPANION; 72 84 } 73 85 … … 150 162 * @param interface Interface descriptor under which belongs the @p endpoint. 151 163 * @param endpoint Endpoint descriptor. 164 * @param companion Superspeed companion descriptor. 152 165 * @return Error code. 153 166 */ … … 156 169 usb_standard_interface_descriptor_t *interface, 157 170 usb_standard_endpoint_descriptor_t *endpoint_desc, 171 usb_superspeed_endpoint_companion_descriptor_t *companion_desc, 158 172 usb_dev_session_t *bus_session) 159 173 { … … 194 208 } 195 209 210 unsigned max_burst = 0; 211 unsigned max_streams = 0; 212 if(companion_desc) { 213 max_burst = companion_desc->max_burst; 214 max_streams = SS_COMPANION_MAX_STREAMS(companion_desc->attributes); 215 } 216 196 217 int rc = usb_pipe_initialize(&ep_mapping->pipe, 197 218 ep_no, description.transfer_type, 198 219 ED_MPS_PACKET_SIZE_GET( 199 220 uint16_usb2host(endpoint_desc->max_packet_size)), 200 description.direction, 201 ED_MPS_TRANS_OPPORTUNITIES_GET(202 uint16_usb2host(endpoint_desc->max_packet_size)), bus_session);221 description.direction, ED_MPS_TRANS_OPPORTUNITIES_GET( 222 uint16_usb2host(endpoint_desc->max_packet_size)), 223 max_burst, max_streams, bus_session); 203 224 if (rc != EOK) { 204 225 return rc; … … 207 228 ep_mapping->present = true; 208 229 ep_mapping->descriptor = endpoint_desc; 230 ep_mapping->companion_descriptor = companion_desc; 209 231 ep_mapping->interface = interface; 210 232 … … 235 257 do { 236 258 if (is_endpoint_descriptor(descriptor)) { 259 /* Check if companion descriptor is present too, it should immediatelly follow. */ 260 const uint8_t *companion_desc = usb_dp_get_nested_descriptor(parser, 261 parser_data, descriptor); 262 if (companion_desc && !is_superspeed_companion_descriptor(companion_desc)) { 263 /* Not what we wanted, don't pass it further. */ 264 companion_desc = NULL; 265 } 266 237 267 (void) process_endpoint(mapping, mapping_count, 238 268 (usb_standard_interface_descriptor_t *) … … 240 270 (usb_standard_endpoint_descriptor_t *) 241 271 descriptor, 272 (usb_superspeed_endpoint_companion_descriptor_t *) 273 companion_desc, 242 274 bus_session); 243 275 } … … 288 320 if (config_descriptor == NULL) 289 321 return EBADMEM; 290 322 291 323 if (config_descriptor_size < 292 324 sizeof(usb_standard_configuration_descriptor_t)) { … … 343 375 static_assert(DEV_DESCR_MAX_PACKET_SIZE_OFFSET < CTRL_PIPE_MIN_PACKET_SIZE); 344 376 345 if ((pipe->d irection != USB_DIRECTION_BOTH) ||346 (pipe-> transfer_type != USB_TRANSFER_CONTROL) ||347 (pipe-> endpoint_no != 0)) {377 if ((pipe->desc.direction != USB_DIRECTION_BOTH) || 378 (pipe->desc.transfer_type != USB_TRANSFER_CONTROL) || 379 (pipe->desc.endpoint_no != 0)) { 348 380 return EINVAL; 349 381 } … … 369 401 } 370 402 371 pipe-> max_packet_size403 pipe->desc.max_packet_size 372 404 = dev_descr_start[DEV_DESCR_MAX_PACKET_SIZE_OFFSET]; 373 405
Note:
See TracChangeset
for help on using the changeset viewer.