Ignore:
File:
1 edited

Legend:

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

    r17873ac7 r58563585  
    3232/** @file
    3333 *
    34  * Endpoint structure is tightly coupled to the bus. The bus controls the
    35  * life-cycle of endpoint. In order to keep endpoints lightweight, operations
    36  * on endpoints are part of the bus structure.
    37  *
    3834 */
    3935#ifndef LIBUSBHOST_HOST_ENDPOINT_H
     
    4642#include <atomic.h>
    4743
    48 typedef struct bus bus_t;
    49 typedef struct device device_t;
    50 typedef struct usb_transfer_batch usb_transfer_batch_t;
    51 
    5244/** Host controller side endpoint structure. */
    5345typedef struct endpoint {
     46        /** Reference count. */
     47        atomic_t refcnt;       
    5448        /** Part of linked list. */
    5549        link_t link;
    56         /** Managing bus */
    57         bus_t *bus;
    58         /** Reference count. */
    59         atomic_t refcnt;
    60         /** USB device */
    61         device_t *device;
    62         /** Enpoint number */
     50        /** USB address. */
     51        usb_address_t address;
     52        /** USB endpoint number. */
    6353        usb_endpoint_t endpoint;
    6454        /** Communication direction. */
     
    7262        /** Additional opportunities per uframe */
    7363        unsigned packets;
    74         /** Reserved bandwidth. */
     64        /** Necessary bandwidth. */
    7565        size_t bandwidth;
    7666        /** Value of the toggle bit. */
    7767        unsigned toggle:1;
    78         /** The currently active transfer batch. Write using methods, read under guard. */
    79         usb_transfer_batch_t *active_batch;
     68        /** True if there is a batch using this scheduled for this endpoint. */
     69        volatile bool active;
    8070        /** Protects resources and active status changes. */
    8171        fibril_mutex_t guard;
    8272        /** Signals change of active status. */
    8373        fibril_condvar_t avail;
    84 
    85         /* This structure is meant to be extended by overriding. */
     74        /** High speed TT data */
     75        struct {
     76                usb_address_t address;
     77                unsigned port;
     78        } tt;
     79        /** Optional device specific data. */
     80        struct {
     81                /** Device specific data. */
     82                void *data;
     83                /** Callback to get the value of toggle bit. */
     84                int (*toggle_get)(void *);
     85                /** Callback to set the value of toggle bit. */
     86                void (*toggle_set)(void *, int);
     87        } hc_data;
    8688} endpoint_t;
    8789
    88 extern void endpoint_init(endpoint_t *, bus_t *);
     90extern endpoint_t *endpoint_create(usb_address_t, usb_endpoint_t,
     91    usb_direction_t, usb_transfer_type_t, usb_speed_t, size_t, unsigned int,
     92    size_t, usb_address_t, unsigned int);
     93extern void endpoint_destroy(endpoint_t *);
    8994
    9095extern void endpoint_add_ref(endpoint_t *);
    9196extern void endpoint_del_ref(endpoint_t *);
    9297
    93 /* Pay atention to synchronization of batch access wrt to aborting & finishing from another fibril. */
     98extern void endpoint_set_hc_data(endpoint_t *, void *, int (*)(void *),
     99    void (*)(void *, int));
     100extern void endpoint_clear_hc_data(endpoint_t *);
    94101
    95 /* Set currently active batch. The common case is to activate in the same
    96  * critical section as scheduling to HW.
    97  */
    98 extern void endpoint_activate_locked(endpoint_t *, usb_transfer_batch_t *);
    99 
    100 /* Deactivate the endpoint, allowing others to activate it again. Batch shall
    101  * already have an error set. */
    102 extern void endpoint_deactivate_locked(endpoint_t *);
    103 
    104 /* Abort the currenty active batch. */
    105 void endpoint_abort(endpoint_t *);
     102extern void endpoint_use(endpoint_t *);
     103extern void endpoint_release(endpoint_t *);
    106104
    107105extern int endpoint_toggle_get(endpoint_t *);
    108 extern void endpoint_toggle_set(endpoint_t *, bool);
     106extern void endpoint_toggle_set(endpoint_t *, int);
    109107
    110108/** list_get_instance wrapper.
     
    119117        return item ? list_get_instance(item, endpoint_t, link) : NULL;
    120118}
    121 
    122119#endif
    123120
Note: See TracChangeset for help on using the changeset viewer.