Changeset c280d7e in mainline for uspace/lib/usbdev/src/devdrv.c


Ignore:
Timestamp:
2018-01-20T03:02:36Z (6 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
60d3f35
Parents:
3cdaa7f
git-author:
Ondřej Hlavatý <aearsis@…> (2018-01-20 03:02:32)
git-committer:
Ondřej Hlavatý <aearsis@…> (2018-01-20 03:02:36)
Message:

libdrv: usb iface callbacks joined

In addition to handle and current interface, it is good for the device
to know its address and speed. Also, it is expected to add some other
fields (stats, info tied to devices of specific speed and so on) in the
future. Instead of adding yet another call, join those two and let HC
fill a description structure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/src/devdrv.c

    r3cdaa7f rc280d7e  
    7373        /** Number of other endpoint pipes. */
    7474        size_t pipes_count;
     75
     76        /** USB address of this device */
     77        usb_address_t address;
     78
     79        /** USB speed of this device */
     80        usb_speed_t speed;
    7581
    7682        /** Current interface.
     
    414420 */
    415421static int usb_device_init(usb_device_t *usb_dev, ddf_dev_t *ddf_dev,
    416     const usb_endpoint_description_t **endpoints, const char **errstr_ptr,
    417     devman_handle_t handle, int interface_no)
     422    const usb_endpoint_description_t **endpoints, const char **errstr_ptr)
    418423{
    419424        assert(usb_dev != NULL);
     
    423428
    424429        usb_dev->ddf_dev = ddf_dev;
    425         usb_dev->handle = handle;
    426         usb_dev->interface_no = interface_no;
    427430        usb_dev->driver_data = NULL;
    428431        usb_dev->descriptors.full_config = NULL;
     
    431434        usb_dev->pipes = NULL;
    432435
    433         usb_dev->bus_session = usb_dev_connect(handle);
     436        usb_dev->bus_session = usb_dev_connect(usb_dev->handle);
    434437
    435438        if (!usb_dev->bus_session) {
     
    476479}
    477480
    478 static int usb_device_get_info(async_sess_t *sess, devman_handle_t *handle,
    479         int *iface_no)
    480 {
    481         assert(handle);
    482         assert(iface_no);
     481static int usb_device_get_info(async_sess_t *sess, usb_device_t *dev)
     482{
     483        assert(dev);
    483484
    484485        async_exch_t *exch = async_exchange_begin(sess);
     
    486487                return EPARTY;
    487488
    488         int ret = usb_get_my_device_handle(exch, handle);
     489        usb_device_desc_t dev_desc;
     490        const int ret = usb_get_my_description(exch, &dev_desc);
     491
    489492        if (ret == EOK) {
    490                 ret = usb_get_my_interface(exch, iface_no);
    491                 if (ret == ENOTSUP) {
    492                         *iface_no = -1;
    493                         ret = EOK;
    494                 }
     493                dev->address = dev_desc.address;
     494                dev->speed = dev_desc.speed;
     495                dev->handle = dev_desc.handle;
     496                dev->interface_no = dev_desc.iface;
    495497        }
    496498
     
    504506        assert(ddf_dev);
    505507        assert(err);
    506 
    507         devman_handle_t h = 0;
    508         int iface_no = -1;
    509508
    510509        async_sess_t *sess = ddf_dev_parent_sess_get(ddf_dev);
    511510        if (sess == NULL)
    512511                return ENOMEM;
    513         const int ret = usb_device_get_info(sess, &h, &iface_no);
    514         if (ret != EOK)
    515                 return ret;
    516512
    517513        usb_device_t *usb_dev =
     
    522518        }
    523519
    524         return usb_device_init(usb_dev, ddf_dev, desc, err, h, iface_no);
     520        const int ret = usb_device_get_info(sess, usb_dev);
     521        if (ret != EOK)
     522                return ret;
     523
     524        return usb_device_init(usb_dev, ddf_dev, desc, err);
    525525}
    526526
     
    536536usb_device_t * usb_device_create(devman_handle_t handle)
    537537{
    538         devman_handle_t h = 0;
    539         int iface_no = -1;
     538        usb_device_t *usb_dev = malloc(sizeof(usb_device_t));
     539        if (!usb_dev)
     540                return NULL;
    540541
    541542        async_sess_t *sess = devman_device_connect(handle, IPC_FLAG_BLOCKING);
    542         int ret = usb_device_get_info(sess, &h, &iface_no);
     543        int ret = usb_device_get_info(sess, usb_dev);
    543544        if (sess)
    544545                async_hangup(sess);
     
    546547                return NULL;
    547548
    548         usb_device_t *usb_dev = malloc(sizeof(usb_device_t));
    549         if (!usb_dev)
    550                 return NULL;
    551 
    552549        const char* dummy = NULL;
    553         ret = usb_device_init(usb_dev, NULL, NULL, &dummy, handle, iface_no);
     550        ret = usb_device_init(usb_dev, NULL, NULL, &dummy);
    554551        if (ret != EOK) {
    555552                free(usb_dev);
Note: See TracChangeset for help on using the changeset viewer.