Changeset 91173333 in mainline for uspace/drv/hid/usbhid/main.c


Ignore:
Timestamp:
2018-01-13T21:36:13Z (6 years ago)
Author:
Petr Manek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
edc51615
Parents:
8a0c52a
Message:

usbdev: use centralized joining mechanism, move away from device_removed() callback

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/hid/usbhid/main.c

    r8a0c52a r91173333  
    4040#include <errno.h>
    4141#include <str_error.h>
    42 #include <fibril_synch.h>
    4342
    4443#include <usb/dev/driver.h>
     
    117116}
    118117
     118static int join_and_clean(usb_device_t *dev)
     119{
     120        assert(dev);
     121        usb_hid_dev_t *hid_dev = usb_device_data_get(dev);
     122        assert(hid_dev);
     123
     124        /* Join polling fibril. */
     125        usb_device_poll_join(hid_dev->polling);
     126
     127        /* Clean up. */
     128        usb_hid_deinit(hid_dev);
     129        usb_log_info("%s destruction complete.\n", usb_device_get_name(dev));
     130
     131        return EOK;
     132}
     133
    119134/**
    120135 * Callback for a device about to be removed from the driver.
     
    129144        assert(hid_dev);
    130145
    131         usb_log_info("%s will be removed, setting remove flag.\n", usb_device_get_name(dev));
    132         usb_hid_prepare_deinit(hid_dev);
    133 
    134         return EOK;
    135 }
    136 
    137 static int join_and_clean(usb_device_t *dev)
    138 {
    139         assert(dev);
    140         usb_hid_dev_t *hid_dev = usb_device_data_get(dev);
    141         assert(hid_dev);
    142 
    143         /* Join polling fibril. */
    144         fibril_mutex_lock(&hid_dev->poll_guard);
    145         while (hid_dev->running)
    146                 fibril_condvar_wait(&hid_dev->poll_cv, &hid_dev->poll_guard);
    147         fibril_mutex_unlock(&hid_dev->poll_guard);
    148 
    149         /* Clean up. */
    150         usb_hid_deinit(hid_dev);
    151         usb_log_info("%s destruction complete.\n", usb_device_get_name(dev));
    152 
    153         return EOK;
    154 }
    155 
    156 /**
    157  * Callback for when a device has just been from the driver.
    158  *
    159  * @param dev Structure representing the device.
    160  * @return Error code.
    161  */
    162 static int usb_hid_device_removed(usb_device_t *dev)
    163 {
    164         assert(dev);
    165         usb_hid_dev_t *hid_dev = usb_device_data_get(dev);
    166         assert(hid_dev);
    167 
    168         usb_log_info("%s endpoints unregistered, joining polling fibril.\n", usb_device_get_name(dev));
     146        usb_log_info("Device %s removed.\n", usb_device_get_name(dev));
    169147        return join_and_clean(dev);
    170148}
     
    182160        assert(hid_dev);
    183161
    184         usb_log_info("Device %s gone, joining the polling fibril.\n", usb_device_get_name(dev));
    185         usb_hid_prepare_deinit(hid_dev);
     162        usb_log_info("Device %s gone.\n", usb_device_get_name(dev));
    186163        return join_and_clean(dev);
    187164}
     
    191168        .device_add = usb_hid_device_add,
    192169        .device_remove = usb_hid_device_remove,
    193         .device_removed = usb_hid_device_removed,
    194170        .device_gone = usb_hid_device_gone,
    195171};
Note: See TracChangeset for help on using the changeset viewer.