Changeset 6a32665d in mainline


Ignore:
Timestamp:
2011-04-08T11:07:05Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cd1cec3b
Parents:
52cc968
Message:

Add endpoint access serializing mechanism.

Location:
uspace/lib/usb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/include/usb/host/endpoint.h

    r52cc968 r6a32665d  
    3939#include <bool.h>
    4040#include <adt/list.h>
     41#include <fibril_synch.h>
     42
    4143#include <usb/usb.h>
    4244
     
    4850        usb_speed_t speed;
    4951        size_t max_packet_size;
     52        unsigned toggle:1;
     53        fibril_mutex_t guard;
     54        fibril_condvar_t avail;
    5055        bool active;
    51         unsigned toggle:1;
    5256        link_t same_device_eps;
    5357} endpoint_t;
     
    5862
    5963void endpoint_destroy(endpoint_t *instance);
     64
     65void endpoint_use(endpoint_t *instance);
     66
     67void endpoint_release(endpoint_t *instance);
    6068
    6169int endpoint_toggle_get(endpoint_t *instance);
  • uspace/lib/usb/src/host/endpoint.c

    r52cc968 r6a32665d  
    3434 */
    3535
     36#include <assert.h>
    3637#include <errno.h>
    3738#include <usb/host/endpoint.h>
     
    4950        instance->max_packet_size = max_packet_size;
    5051        instance->toggle = 0;
     52        instance->active = false;
     53        fibril_mutex_initialize(&instance->guard);
     54        fibril_condvar_initialize(&instance->avail);
    5155        link_initialize(&instance->same_device_eps);
    5256        return EOK;
     
    5862        list_remove(&instance->same_device_eps);
    5963        free(instance);
     64}
     65/*----------------------------------------------------------------------------*/
     66void endpoint_use(endpoint_t *instance)
     67{
     68        assert(instance);
     69        fibril_mutex_lock(&instance->guard);
     70        while (instance->active)
     71                fibril_condvar_wait(&instance->avail, &instance->guard);
     72        instance->active = true;
     73        fibril_mutex_unlock(&instance->guard);
     74}
     75/*----------------------------------------------------------------------------*/
     76void endpoint_release(endpoint_t *instance)
     77{
     78        assert(instance);
     79        fibril_mutex_lock(&instance->guard);
     80        instance->active = false;
     81        fibril_condvar_signal(&instance->avail);
     82        fibril_mutex_unlock(&instance->guard);
    6083}
    6184/*----------------------------------------------------------------------------*/
Note: See TracChangeset for help on using the changeset viewer.