Changeset 6df14c5 in mainline for uspace/lib/usb/include/usb/hc.h


Ignore:
Timestamp:
2011-12-11T13:34:48Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a045ab1
Parents:
266976f
Message:

libusb: Add reference counting to ucb_hc_connection_t. Implement all wrappers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/include/usb/hc.h

    r266976f r6df14c5  
    4242#include <bool.h>
    4343#include <async.h>
     44#include <fibril_synch.h>
    4445#include <usb/usb.h>
    4546
     
    5051        /** Session to the host controller. */
    5152        async_sess_t *hc_sess;
     53        /** Session guard. */
     54        fibril_mutex_t guard;
     55        /** Use counter. */
     56        unsigned ref_count;
    5257} usb_hc_connection_t;
     58
     59/** Initialize connection to USB host controller.
     60 *
     61 * @param connection Connection to be initialized.
     62 * @param hc_handle Devman handle of the host controller.
     63 * @return Error code.
     64 */
     65static inline void usb_hc_connection_initialize(usb_hc_connection_t *connection,
     66    devman_handle_t hc_handle)
     67{
     68        assert(connection);
     69        connection->hc_handle = hc_handle;
     70        connection->hc_sess = NULL;
     71        connection->ref_count = 0;
     72        fibril_mutex_initialize(&connection->guard);
     73
     74}
    5375
    5476int usb_hc_connection_initialize_from_device(usb_hc_connection_t *,
    5577    const ddf_dev_t *);
    56 int usb_hc_connection_initialize(usb_hc_connection_t *, devman_handle_t);
    5778
    5879int usb_hc_connection_open(usb_hc_connection_t *);
    59 bool usb_hc_connection_is_opened(const usb_hc_connection_t *);
     80bool usb_hc_connection_is_open(const usb_hc_connection_t *);
    6081int usb_hc_connection_close(usb_hc_connection_t *);
     82
     83usb_address_t usb_hc_request_address(usb_hc_connection_t *, usb_address_t, bool,
     84    usb_speed_t);
     85int usb_hc_bind_address(usb_hc_connection_t *, usb_address_t, devman_handle_t);
    6186int usb_hc_get_handle_by_address(usb_hc_connection_t *, usb_address_t,
    6287    devman_handle_t *);
     88int usb_hc_release_address(usb_hc_connection_t *, usb_address_t);
     89
     90int usb_hc_register_endpoint(usb_hc_connection_t *, usb_address_t,
     91    usb_endpoint_t, usb_transfer_type_t, usb_direction_t, size_t, unsigned int);
     92int usb_hc_unregister_endpoint(usb_hc_connection_t *, usb_address_t,
     93    usb_endpoint_t, usb_direction_t);
     94
     95int usb_hc_control_read(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
     96    uint64_t, void *, size_t, size_t *);
     97int usb_hc_control_write(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
     98    uint64_t, const void *, size_t);
     99
     100static inline int usb_hc_read(usb_hc_connection_t *connection,
     101    usb_address_t address, usb_endpoint_t endpoint, void *data, size_t size,
     102    size_t *real_size)
     103{
     104        return usb_hc_control_read(
     105            connection, address, endpoint, 0, data, size, real_size);
     106}
     107
     108static inline int usb_hc_write(usb_hc_connection_t *connection,
     109    usb_address_t address, usb_endpoint_t endpoint, const void *data,
     110    size_t size)
     111{
     112        return usb_hc_control_write(
     113             connection, address, endpoint, 0, data, size);
     114}
    63115
    64116usb_address_t usb_get_address_by_handle(devman_handle_t);
    65117
    66 int usb_hc_find(devman_handle_t, devman_handle_t *);
     118int usb_find_hc(devman_handle_t, devman_handle_t *);
    67119
    68120int usb_resolve_device_handle(const char *, devman_handle_t *, usb_address_t *,
     
    71123int usb_ddf_get_hc_handle_by_sid(service_id_t, devman_handle_t *);
    72124
    73 
    74125#endif
    75126/**
Note: See TracChangeset for help on using the changeset viewer.