Changes in uspace/lib/usbdev/include/usb/dev/pipes.h [b77931d:bdb23c63] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/include/usb/dev/pipes.h
rb77931d rbdb23c63 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 29 28 /** @addtogroup libusbdev 30 29 * @{ … … 37 36 38 37 #include <sys/types.h> 39 #include <usb/usb.h>40 #include <usb/hc.h>41 #include <usb/descriptor.h>42 38 #include <ipc/devman.h> 43 39 #include <ddf/driver.h> 44 40 #include <fibril_synch.h> 45 #include <async.h> 41 #include <usb/usb.h> 42 #include <usb/descriptor.h> 43 #include <usb/dev/usb_device_connection.h> 46 44 47 /** Abstraction of a physical connection to the device. 48 * This type is an abstraction of the USB wire that connects the host and 49 * the function (device). 45 #define CTRL_PIPE_MIN_PACKET_SIZE 8 46 /** Abstraction of a logical connection to USB device endpoint. 47 * It encapsulates endpoint attributes (transfer type etc.). 48 * This endpoint must be bound with existing usb_device_connection_t 49 * (i.e. the wire to send data over). 50 50 */ 51 51 typedef struct { 52 /** Handle of the host controller device is connected to. */53 devman_handle_t hc_handle;54 /** Address of the device. */55 usb_address_t address;56 } usb_device_connection_t;57 58 /** Abstraction of a logical connection to USB device endpoint.59 * It encapsulates endpoint attributes (transfer type etc.) as well60 * as information about currently running sessions.61 * This endpoint must be bound with existing usb_device_connection_t62 * (i.e. the wire to send data over).63 *64 * Locking order: if you want to lock both mutexes65 * (@c guard and @c hc_sess_mutex), lock @c guard first.66 * It is not necessary to lock @c guard if you want to lock @c hc_sess_mutex67 * only.68 */69 typedef struct {70 /** Guard of the whole pipe. */71 fibril_mutex_t guard;72 73 52 /** The connection used for sending the data. */ 74 53 usb_device_connection_t *wire; … … 86 65 size_t max_packet_size; 87 66 88 /** Session to the host controller.89 * NULL when no session is active.90 * It is an error to access this member without @c hc_sess_mutex91 * being locked.92 * If call over the phone is to be made, it must be preceeded by93 * call to pipe_add_ref() [internal libusb function].94 */95 async_sess_t *hc_sess;96 97 /** Guard for serialization of requests over the session. */98 fibril_mutex_t hc_sess_mutex;99 100 /** Number of active transfers over the pipe. */101 int refcount;102 /** Number of failed attempts to open the HC phone.103 * When user requests usb_pipe_start_long_transfer() and the operation104 * fails, there is no way to report this to the user.105 * That the soft reference counter is increased to record the attempt.106 * When the user then request e.g. usb_pipe_read(), it will try to107 * add reference as well.108 * If that fails, it is reported to the user. If it is okay, the109 * real reference counter is incremented.110 * The problem might arise when ending the long transfer (since111 * the number of references would be only 1, but logically it shall be112 * two).113 * Decrementing the soft counter first shall solve this.114 */115 int refcount_soft;116 117 67 /** Whether to automatically reset halt on the endpoint. 118 68 * Valid only for control endpoint zero. … … 120 70 bool auto_reset_halt; 121 71 } usb_pipe_t; 122 123 72 124 73 /** Description of endpoint characteristics. */ … … 156 105 } usb_endpoint_mapping_t; 157 106 158 int usb_device_connection_initialize_on_default_address(159 usb_device_connection_t *, usb_hc_connection_t *);160 int usb_device_connection_initialize_from_device(usb_device_connection_t *,161 const ddf_dev_t *);162 int usb_device_connection_initialize(usb_device_connection_t *,163 devman_handle_t, usb_address_t);164 165 int usb_device_get_assigned_interface(const ddf_dev_t *);166 167 107 int usb_pipe_initialize(usb_pipe_t *, usb_device_connection_t *, 168 108 usb_endpoint_t, usb_transfer_type_t, size_t, usb_direction_t); 169 109 int usb_pipe_initialize_default_control(usb_pipe_t *, 170 110 usb_device_connection_t *); 111 171 112 int usb_pipe_probe_default_control(usb_pipe_t *); 172 113 int usb_pipe_initialize_from_configuration(usb_endpoint_mapping_t *, 173 114 size_t, const uint8_t *, size_t, usb_device_connection_t *); 174 int usb_pipe_register(usb_pipe_t *, unsigned int, usb_hc_connection_t *);175 int usb_pipe_unregister(usb_pipe_t *, usb_hc_connection_t *);176 115 177 void usb_pipe_start_long_transfer(usb_pipe_t *); 178 void usb_pipe_end_long_transfer(usb_pipe_t *); 116 int usb_pipe_register(usb_pipe_t *, unsigned); 117 int usb_pipe_unregister(usb_pipe_t *); 118 119 int usb_pipe_start_long_transfer(usb_pipe_t *); 120 int usb_pipe_end_long_transfer(usb_pipe_t *); 179 121 180 122 int usb_pipe_read(usb_pipe_t *, void *, size_t, size_t *); 181 int usb_pipe_write(usb_pipe_t *, void *, size_t);123 int usb_pipe_write(usb_pipe_t *, const void *, size_t); 182 124 183 125 int usb_pipe_control_read(usb_pipe_t *, const void *, size_t,
Note:
See TracChangeset
for help on using the changeset viewer.