Changeset df6ded8 in mainline for uspace/drv/bus/usb/usbmid/usbmid.c


Ignore:
Timestamp:
2018-02-28T16:37:50Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1b20da0
Parents:
f5e5f73 (diff), b2dca8de (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.
git-author:
Jakub Jermar <jakub@…> (2018-02-28 16:06:42)
git-committer:
Jakub Jermar <jakub@…> (2018-02-28 16:37:50)
Message:

Merge github.com:helenos-xhci-team/helenos

This commit merges support for USB 3 and generally refactors, fixes,
extends and cleans up the existing USB framework.

Notable additions and features:

  • new host controller driver has been implemented to control various xHC models (among others, NEC Renesas uPD720200)
  • isochronous data transfer mode
  • support for explicit USB device removal
  • USB tablet driver
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbmid/usbmid.c

    rf5e5f73 rdf6ded8  
    11/*
    22 * Copyright (c) 2011 Vojtech Horky
     3 * Copyright (c) 2018 Ondrej Hlavaty
    34 * All rights reserved.
    45 *
     
    4546#include "usbmid.h"
    4647
    47 /** Get USB device handle by calling the parent usb_device_t.
     48/**
     49 * Get USB device description by calling HC and altering the interface field.
    4850 *
    4951 * @param[in] fun Device function the operation is running on.
    50  * @param[out] handle Device handle.
     52 * @param[out] desc Device descriptor.
    5153 * @return Error code.
    5254 */
    53 static errno_t usb_iface_device_handle(ddf_fun_t *fun, devman_handle_t *handle)
    54 {
    55         assert(fun);
    56         assert(handle);
    57         usb_device_t *usb_dev = usb_device_get(ddf_fun_get_dev(fun));
    58         *handle = usb_device_get_devman_handle(usb_dev);
    59         return EOK;
    60 }
    61 
    62 /** Callback for DDF USB get interface. */
    63 static errno_t usb_iface_iface_no(ddf_fun_t *fun, int *iface_no)
     55static errno_t usb_iface_description(ddf_fun_t *fun, usb_device_desc_t *desc)
    6456{
    6557        usbmid_interface_t *iface = ddf_fun_data_get(fun);
    6658        assert(iface);
     59        usb_device_t *usb_dev = ddf_dev_data_get(ddf_fun_get_dev(fun));
     60        assert(usb_dev);
    6761
    68         if (iface_no)
    69                 *iface_no = iface->interface_no;
     62        async_exch_t *exch = usb_device_bus_exchange_begin(usb_dev);
     63        if (!exch)
     64                return EPARTY;
     65
     66        usb_device_desc_t tmp_desc;
     67        const errno_t ret = usb_get_my_description(exch, &tmp_desc);
     68
     69        if (ret == EOK && desc) {
     70                *desc = tmp_desc;
     71                desc->iface = iface->interface_no;
     72        }
     73
     74        usb_device_bus_exchange_end(exch);
    7075
    7176        return EOK;
     
    7479/** DDF interface of the child - USB functions. */
    7580static usb_iface_t child_usb_iface = {
    76         .get_my_device_handle = usb_iface_device_handle,
    77         .get_my_interface = usb_iface_iface_no,
     81        .get_my_description = usb_iface_description,
    7882};
    7983
     
    117121         * class name something humanly understandable.
    118122         */
    119         int ret = asprintf(&child_name, "%s%hhu",
     123        errno_t ret = asprintf(&child_name, "%s%hhu",
    120124            usb_str_class(interface_descriptor->interface_class),
    121125            interface_descriptor->interface_number);
Note: See TracChangeset for help on using the changeset viewer.