Ignore:
Timestamp:
2013-02-08T16:08:51Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
603a0a4
Parents:
81da273b
Message:

libusbvirt, virthub: Allow drivers to set endpoint number and port count.

Using smaller max_packet_size reduces bandwidth requirements.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbvirt/src/virthub_base.c

    r81da273b r2a5a7711  
    4242extern const usb_standard_device_descriptor_t virthub_device_descriptor;
    4343extern const usb_standard_configuration_descriptor_t virthub_configuration_descriptor_without_hub_size;
     44extern const usb_standard_endpoint_descriptor_t virthub_endpoint_descriptor;
    4445extern const usbvirt_device_configuration_extras_t virthub_interface_descriptor_ex;
    45 extern const usbvirt_device_configuration_extras_t virthub_endpoint_descriptor_ex;
    4646
    4747void *virthub_get_data(usbvirt_device_t *dev)
     
    5353}
    5454
    55 int virthub_base_init(virthub_base_t *instance,
    56     const char *name, usbvirt_device_ops_t *ops, void *data,
     55int virthub_base_init(virthub_base_t *instance, const char *name,
     56    usbvirt_device_ops_t *ops, void *data,
    5757    const usb_standard_device_descriptor_t *device_desc,
    58     const usb_hub_descriptor_header_t *hub_desc)
     58    const usb_hub_descriptor_header_t *hub_desc,
     59    usb_endpoint_t ep, unsigned port_count)
    5960{
    6061        assert(instance);
    6162        assert(hub_desc);
    6263        assert(name);
     64       
     65        if (!usb_endpoint_is_valid(ep) || (ep == USB_ENDPOINT_DEFAULT_CONTROL))
     66                return EINVAL;
    6367
    6468        instance->config_descriptor =
    6569            virthub_configuration_descriptor_without_hub_size;
    6670        instance->config_descriptor.total_length += hub_desc->length;
     71
     72        instance->endpoint_descriptor = virthub_endpoint_descriptor;
     73        instance->endpoint_descriptor.endpoint_address = 128 | ep;
     74        instance->endpoint_descriptor.max_packet_size =
     75            (1 + port_count + 7) / 8;
    6776
    6877        instance->descriptors.device =
     
    7887        instance->extra[1].data = (void *)hub_desc;
    7988        instance->extra[1].length = hub_desc->length;
    80         instance->extra[2] = virthub_endpoint_descriptor_ex;
     89        instance->extra[2].data = (void*)&instance->endpoint_descriptor;
     90        instance->extra[2].length = sizeof(instance->endpoint_descriptor);
    8191
    8292        instance->device.ops = ops;
Note: See TracChangeset for help on using the changeset viewer.