00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00037 #ifndef LIBDRV_USBHC_IFACE_H_
00038 #define LIBDRV_USBHC_IFACE_H_
00039
00040 #include "ddf/driver.h"
00041 #include <usb/usb.h>
00042 #include <bool.h>
00043
00044
00085 typedef enum {
00095 IPC_M_USBHC_REQUEST_ADDRESS,
00096
00105 IPC_M_USBHC_BIND_ADDRESS,
00106
00114 IPC_M_USBHC_GET_HANDLE_BY_ADDRESS,
00115
00123 IPC_M_USBHC_RELEASE_ADDRESS,
00124
00125
00129 IPC_M_USBHC_INTERRUPT_OUT,
00130
00134 IPC_M_USBHC_INTERRUPT_IN,
00135
00139 IPC_M_USBHC_BULK_OUT,
00140
00144 IPC_M_USBHC_BULK_IN,
00145
00152 IPC_M_USBHC_CONTROL_WRITE,
00153
00160 IPC_M_USBHC_CONTROL_READ,
00161
00176 IPC_M_USBHC_REGISTER_ENDPOINT,
00177
00187 IPC_M_USBHC_UNREGISTER_ENDPOINT
00188 } usbhc_iface_funcs_t;
00189
00191 typedef void (*usbhc_iface_transfer_out_callback_t)(ddf_fun_t *,
00192 int, void *);
00193
00195 typedef void (*usbhc_iface_transfer_in_callback_t)(ddf_fun_t *,
00196 int, size_t, void *);
00197
00198
00200 typedef int (*usbhc_iface_transfer_out_t)(ddf_fun_t *, usb_target_t,
00201 void *, size_t,
00202 usbhc_iface_transfer_out_callback_t, void *);
00203
00205 typedef usbhc_iface_transfer_out_t usbhc_iface_transfer_setup_t;
00206
00208 typedef int (*usbhc_iface_transfer_in_t)(ddf_fun_t *, usb_target_t,
00209 void *, size_t,
00210 usbhc_iface_transfer_in_callback_t, void *);
00211
00213 typedef struct {
00214 int (*request_address)(ddf_fun_t *, usb_speed_t, usb_address_t *);
00215 int (*bind_address)(ddf_fun_t *, usb_address_t, devman_handle_t);
00216 int (*find_by_address)(ddf_fun_t *, usb_address_t, devman_handle_t *);
00217 int (*release_address)(ddf_fun_t *, usb_address_t);
00218
00219 int (*register_endpoint)(ddf_fun_t *,
00220 usb_address_t, usb_speed_t, usb_endpoint_t,
00221 usb_transfer_type_t, usb_direction_t, size_t, unsigned int);
00222 int (*unregister_endpoint)(ddf_fun_t *, usb_address_t, usb_endpoint_t,
00223 usb_direction_t);
00224
00225 usbhc_iface_transfer_out_t interrupt_out;
00226 usbhc_iface_transfer_in_t interrupt_in;
00227
00228 usbhc_iface_transfer_out_t bulk_out;
00229 usbhc_iface_transfer_in_t bulk_in;
00230
00231 int (*control_write)(ddf_fun_t *, usb_target_t,
00232 void *, size_t, void *, size_t,
00233 usbhc_iface_transfer_out_callback_t, void *);
00234
00235 int (*control_read)(ddf_fun_t *, usb_target_t,
00236 void *, size_t, void *, size_t,
00237 usbhc_iface_transfer_in_callback_t, void *);
00238 } usbhc_iface_t;
00239
00240
00241 #endif
00242