Ignore:
File:
1 edited

Legend:

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

    r58563585 r17873ac7  
    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 *
    3438 */
    3539#ifndef LIBUSBHOST_HOST_ENDPOINT_H
     
    4246#include <atomic.h>
    4347
     48typedef struct bus bus_t;
     49typedef struct device device_t;
     50typedef struct usb_transfer_batch usb_transfer_batch_t;
     51
    4452/** Host controller side endpoint structure. */
    4553typedef struct endpoint {
    46         /** Reference count. */
    47         atomic_t refcnt;       
    4854        /** Part of linked list. */
    4955        link_t link;
    50         /** USB address. */
    51         usb_address_t address;
    52         /** USB endpoint number. */
     56        /** Managing bus */
     57        bus_t *bus;
     58        /** Reference count. */
     59        atomic_t refcnt;
     60        /** USB device */
     61        device_t *device;
     62        /** Enpoint number */
    5363        usb_endpoint_t endpoint;
    5464        /** Communication direction. */
     
    6272        /** Additional opportunities per uframe */
    6373        unsigned packets;
    64         /** Necessary bandwidth. */
     74        /** Reserved bandwidth. */
    6575        size_t bandwidth;
    6676        /** Value of the toggle bit. */
    6777        unsigned toggle:1;
    68         /** True if there is a batch using this scheduled for this endpoint. */
    69         volatile bool active;
     78        /** The currently active transfer batch. Write using methods, read under guard. */
     79        usb_transfer_batch_t *active_batch;
    7080        /** Protects resources and active status changes. */
    7181        fibril_mutex_t guard;
    7282        /** Signals change of active status. */
    7383        fibril_condvar_t avail;
    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;
     84
     85        /* This structure is meant to be extended by overriding. */
    8886} endpoint_t;
    8987
    90 extern 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);
    93 extern void endpoint_destroy(endpoint_t *);
     88extern void endpoint_init(endpoint_t *, bus_t *);
    9489
    9590extern void endpoint_add_ref(endpoint_t *);
    9691extern void endpoint_del_ref(endpoint_t *);
    9792
    98 extern void endpoint_set_hc_data(endpoint_t *, void *, int (*)(void *),
    99     void (*)(void *, int));
    100 extern void endpoint_clear_hc_data(endpoint_t *);
     93/* Pay atention to synchronization of batch access wrt to aborting & finishing from another fibril. */
    10194
    102 extern void endpoint_use(endpoint_t *);
    103 extern void endpoint_release(endpoint_t *);
     95/* Set currently active batch. The common case is to activate in the same
     96 * critical section as scheduling to HW.
     97 */
     98extern 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. */
     102extern void endpoint_deactivate_locked(endpoint_t *);
     103
     104/* Abort the currenty active batch. */
     105void endpoint_abort(endpoint_t *);
    104106
    105107extern int endpoint_toggle_get(endpoint_t *);
    106 extern void endpoint_toggle_set(endpoint_t *, int);
     108extern void endpoint_toggle_set(endpoint_t *, bool);
    107109
    108110/** list_get_instance wrapper.
     
    117119        return item ? list_get_instance(item, endpoint_t, link) : NULL;
    118120}
     121
    119122#endif
    120123
Note: See TracChangeset for help on using the changeset viewer.