Changes in uspace/lib/drv/include/usbhc_iface.h [1d758fc:b7fd2a0] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/include/usbhc_iface.h
r1d758fc rb7fd2a0 1 1 /* 2 2 * Copyright (c) 2010 Vojtech Horky 3 * Copyright (c) 201 7 Ondrej Hlavaty3 * Copyright (c) 2011 Jan Vesely 4 4 * All rights reserved. 5 5 * … … 32 32 * @{ 33 33 */ 34 34 35 /** @file 35 * @brief USB host controler interface definition. This is the interface of 36 * USB host controller function, which can be used by usb device drivers. 36 * @brief USB host controller interface definition. 37 37 */ 38 38 … … 41 41 42 42 #include "ddf/driver.h" 43 #include <async.h> 43 #include <usb_iface.h> 44 #include <stdbool.h> 44 45 45 /** USB speeds. */ 46 typedef enum { 47 /** USB 1.1 low speed (1.5Mbits/s). */ 48 USB_SPEED_LOW, 49 /** USB 1.1 full speed (12Mbits/s). */ 50 USB_SPEED_FULL, 51 /** USB 2.0 high speed (480Mbits/s). */ 52 USB_SPEED_HIGH, 53 /** USB 3.0 super speed (5Gbits/s). */ 54 USB_SPEED_SUPER, 55 /** Psuedo-speed serving as a boundary. */ 56 USB_SPEED_MAX 57 } usb_speed_t; 46 extern errno_t usbhc_read(async_exch_t *, usb_address_t, usb_endpoint_t, 47 uint64_t, void *, size_t, size_t *); 48 extern errno_t usbhc_write(async_exch_t *, usb_address_t, usb_endpoint_t, 49 uint64_t, const void *, size_t); 58 50 59 /** USB endpoint number type. 60 * Negative values could be used to indicate error. 61 */ 62 typedef uint16_t usb_endpoint_t; 51 /** Callback for outgoing transfer. */ 52 typedef void (*usbhc_iface_transfer_out_callback_t)(errno_t, void *); 63 53 64 /** USB address type. 65 * Negative values could be used to indicate error. 66 */ 67 typedef uint16_t usb_address_t; 54 /** Callback for incoming transfer. */ 55 typedef void (*usbhc_iface_transfer_in_callback_t)(errno_t, size_t, void *); 68 56 69 /** 70 * USB Stream ID type. 71 */ 72 typedef uint16_t usb_stream_t; 57 /** USB host controller communication interface. */ 58 typedef struct { 59 errno_t (*read)(ddf_fun_t *, usb_target_t, uint64_t, uint8_t *, size_t, 60 usbhc_iface_transfer_in_callback_t, void *); 61 errno_t (*write)(ddf_fun_t *, usb_target_t, uint64_t, const uint8_t *, 62 size_t, usbhc_iface_transfer_out_callback_t, void *); 63 } usbhc_iface_t; 73 64 74 /** USB transfer type. */75 typedef enum {76 USB_TRANSFER_CONTROL = 0,77 USB_TRANSFER_ISOCHRONOUS = 1,78 USB_TRANSFER_BULK = 2,79 USB_TRANSFER_INTERRUPT = 3,80 } usb_transfer_type_t;81 82 #define USB_TRANSFER_COUNT (USB_TRANSFER_INTERRUPT + 1)83 84 /** USB data transfer direction. */85 typedef enum {86 USB_DIRECTION_IN,87 USB_DIRECTION_OUT,88 USB_DIRECTION_BOTH,89 } usb_direction_t;90 91 #define USB_DIRECTION_COUNT (USB_DIRECTION_BOTH + 1)92 93 /** USB complete address type.94 * Pair address + endpoint is identification of transaction recipient.95 */96 typedef union {97 struct {98 usb_address_t address;99 usb_endpoint_t endpoint;100 usb_stream_t stream;101 } __attribute__((packed));102 uint64_t packed;103 } usb_target_t;104 105 // FIXME: DMA buffers shall be part of libdrv anyway.106 typedef uintptr_t dma_policy_t;107 108 typedef struct dma_buffer {109 void *virt;110 dma_policy_t policy;111 } dma_buffer_t;112 113 typedef struct usb_pipe_desc {114 /** Endpoint number. */115 usb_endpoint_t endpoint_no;116 117 /** Endpoint transfer type. */118 usb_transfer_type_t transfer_type;119 120 /** Endpoint direction. */121 usb_direction_t direction;122 123 /**124 * Maximum size of one transfer. Non-periodic endpoints may handle125 * bigger transfers, but those can be split into multiple USB transfers.126 */127 size_t max_transfer_size;128 129 /** Constraints on buffers to be transferred without copying */130 dma_policy_t transfer_buffer_policy;131 } usb_pipe_desc_t;132 133 typedef struct usb_pipe_transfer_request {134 usb_direction_t dir;135 usb_endpoint_t endpoint;136 usb_stream_t stream;137 138 uint64_t setup; /**< Valid iff the transfer is of control type */139 140 /**141 * The DMA buffer to share. Must be at least offset + size large. Is142 * patched after being transmitted over IPC, so the pointer is still143 * valid.144 */145 dma_buffer_t buffer;146 size_t offset; /**< Offset to the buffer */147 size_t size; /**< Requested size. */148 } usbhc_iface_transfer_request_t;149 150 /** This structure follows standard endpoint descriptor + superspeed companion151 * descriptor, and exists to avoid dependency of libdrv on libusb. Keep the152 * internal fields named exactly like their source (because we want to use the153 * same macros to access them).154 * Callers shall fill it with bare contents of respective descriptors (in usb endianity).155 */156 typedef struct usb_endpoint_descriptors {157 struct {158 uint8_t endpoint_address;159 uint8_t attributes;160 uint16_t max_packet_size;161 uint8_t poll_interval;162 } endpoint;163 164 /* Superspeed companion descriptor */165 struct companion_desc_t {166 uint8_t max_burst;167 uint8_t attributes;168 uint16_t bytes_per_interval;169 } companion;170 } usb_endpoint_descriptors_t;171 172 extern errno_t usbhc_reserve_default_address(async_exch_t *);173 extern errno_t usbhc_release_default_address(async_exch_t *);174 175 extern errno_t usbhc_device_enumerate(async_exch_t *, unsigned, usb_speed_t);176 extern errno_t usbhc_device_remove(async_exch_t *, unsigned);177 178 extern errno_t usbhc_register_endpoint(async_exch_t *, usb_pipe_desc_t *, const usb_endpoint_descriptors_t *);179 extern errno_t usbhc_unregister_endpoint(async_exch_t *, const usb_pipe_desc_t *);180 181 extern errno_t usbhc_transfer(async_exch_t *, const usbhc_iface_transfer_request_t *, size_t *);182 183 /** Callback for outgoing transfer */184 typedef errno_t (*usbhc_iface_transfer_callback_t)(void *, int, size_t);185 186 /** USB device communication interface. */187 typedef struct {188 errno_t (*default_address_reservation)(ddf_fun_t *, bool);189 190 errno_t (*device_enumerate)(ddf_fun_t *, unsigned, usb_speed_t);191 errno_t (*device_remove)(ddf_fun_t *, unsigned);192 193 errno_t (*register_endpoint)(ddf_fun_t *, usb_pipe_desc_t *, const usb_endpoint_descriptors_t *);194 errno_t (*unregister_endpoint)(ddf_fun_t *, const usb_pipe_desc_t *);195 196 errno_t (*transfer)(ddf_fun_t *, const usbhc_iface_transfer_request_t *,197 usbhc_iface_transfer_callback_t, void *);198 } usbhc_iface_t;199 65 200 66 #endif
Note:
See TracChangeset
for help on using the changeset viewer.