Lines Matching refs:comp

20 static bool usb_composite_remove_interface_by_id_locked(usb_composite_t* comp,
25 list_for_every_entry_safe(&comp->children, intf, tmp, usb_interface_t, node) {
35 static zx_status_t usb_composite_add_interface(usb_composite_t* comp,
38 usb_device_descriptor_t* device_desc = &comp->device_desc;
45 intf->comp = comp;
70 mtx_lock(&comp->interface_mutex);
72 list_add_head(&comp->children, &intf->node);
73 mtx_unlock(&comp->interface_mutex);
98 status = device_add(comp->zxdev, &args, &intf->zxdev);
107 static zx_status_t usb_composite_add_interface_assoc(usb_composite_t* comp,
110 usb_device_descriptor_t* device_desc = &comp->device_desc;
116 intf->comp = comp;
152 mtx_lock(&comp->interface_mutex);
154 list_add_head(&comp->children, &intf->node);
155 mtx_unlock(&comp->interface_mutex);
180 zx_status_t status = device_add(comp->zxdev, &args, &intf->zxdev);
189 static zx_status_t usb_composite_add_interfaces(usb_composite_t* comp) {
190 usb_configuration_descriptor_t* config = comp->config_desc;
192 comp->interface_statuses = calloc(config->bNumInterfaces, sizeof(interface_status_t));
193 if (!comp->interface_statuses) {
233 zx_status_t status = usb_composite_add_interface_assoc(comp, assoc_copy, length);
256 mtx_lock(&comp->interface_mutex);
257 interface_status_t intf_status = comp->interface_statuses[intf_desc->bInterfaceNumber];
258 mtx_unlock(&comp->interface_mutex);
265 zx_status_t status = usb_composite_add_interface(comp, intf_copy, length);
271 mtx_lock(&comp->interface_mutex);
272 if (comp->interface_statuses[intf_desc->bInterfaceNumber] == CLAIMED) {
273 bool removed = usb_composite_remove_interface_by_id_locked(comp,
276 mtx_unlock(&comp->interface_mutex);
280 comp->interface_statuses[intf_desc->bInterfaceNumber] = CHILD_DEVICE;
282 mtx_unlock(&comp->interface_mutex);
293 static void usb_composite_remove_interfaces(usb_composite_t* comp) {
294 mtx_lock(&comp->interface_mutex);
297 while ((intf = list_remove_head_type(&comp->children, usb_interface_t, node)) != NULL) {
300 free(comp->interface_statuses);
301 comp->interface_statuses = NULL;
303 mtx_unlock(&comp->interface_mutex);
306 zx_status_t usb_composite_do_claim_interface(usb_composite_t* comp, uint8_t interface_id) {
307 mtx_lock(&comp->interface_mutex);
309 interface_status_t status = comp->interface_statuses[interface_id];
312 mtx_unlock(&comp->interface_mutex);
315 bool removed = usb_composite_remove_interface_by_id_locked(comp, interface_id);
317 mtx_unlock(&comp->interface_mutex);
321 comp->interface_statuses[interface_id] = CLAIMED;
323 mtx_unlock(&comp->interface_mutex);
328 zx_status_t usb_composite_set_interface(usb_composite_t* comp, uint8_t interface_id,
330 mtx_lock(&comp->interface_mutex);
332 list_for_every_entry(&comp->children, intf, usb_interface_t, node) {
334 mtx_unlock(&comp->interface_mutex);
338 mtx_unlock(&comp->interface_mutex);
343 usb_composite_t* comp = ctx;
344 usb_composite_remove_interfaces(comp);
345 device_remove(comp->zxdev);
349 usb_composite_t* comp = ctx;
351 free(comp->config_desc);
352 free(comp->interface_statuses);
353 free(comp);
369 usb_composite_t* comp = calloc(1, sizeof(usb_composite_t));
370 if (!comp) {
373 memcpy(&comp->usb, &usb, sizeof(comp->usb));
375 list_initialize(&comp->children);
377 mtx_init(&comp->interface_mutex, mtx_plain);
379 usb_get_device_descriptor(&usb, &comp->device_desc);
382 status = usb_get_configuration_descriptor(&comp->usb, usb_get_configuration(&comp->usb),
383 &comp->config_desc, &config_length);
394 .ctx = comp,
399 status = device_add(parent, &args, &comp->zxdev);
401 return usb_composite_add_interfaces(comp);
405 free(comp->config_desc);
406 free(comp);