root/dev/usb/usbf.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. USBF_NORMAL_COMPLETION
  2. USBF_IN_PROGRESS
  3. USBF_NOT_STARTED
  4. USBF_INVAL
  5. USBF_NOMEM
  6. USBF_CANCELLED
  7. USBF_BAD_ADDRESS
  8. USBF_IOERROR
  9. USBF_TIMEOUT
  10. USBF_SHORT_XFER
  11. USBF_STALLED
  12. USBF_ERROR_MAX
  13. usbf_status

    1 /*      $OpenBSD: usbf.h,v 1.3 2007/06/19 11:52:07 mbalmer Exp $        */
    2 
    3 /*
    4  * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 /*
   20  * USB function driver interface data structures and subroutines
   21  */
   22 
   23 #ifndef _USBF_H_
   24 #define _USBF_H_
   25 
   26 typedef struct usbf_function    *usbf_function_handle;
   27 typedef struct usbf_bus         *usbf_bus_handle;
   28 typedef struct usbf_device      *usbf_device_handle;
   29 typedef struct usbf_config      *usbf_config_handle;
   30 typedef struct usbf_interface   *usbf_interface_handle;
   31 typedef struct usbf_endpoint    *usbf_endpoint_handle;
   32 typedef struct usbf_pipe        *usbf_pipe_handle;
   33 typedef struct usbf_xfer        *usbf_xfer_handle;
   34 typedef void                    *usbf_private_handle;
   35 
   36 /*
   37  * Return codes for many of the function driver interface routines
   38  */
   39 typedef enum { /* keep in sync with USBF_ERROR_STRS */
   40         USBF_NORMAL_COMPLETION = 0,     /* must be 0 */
   41         USBF_IN_PROGRESS,               /* 1 */
   42         /* errors */
   43         USBF_NOT_STARTED,               /* 2 */
   44         USBF_INVAL,                     /* 3 */
   45         USBF_NOMEM,                     /* 4 */
   46         USBF_CANCELLED,                 /* 5 */
   47         USBF_BAD_ADDRESS,               /* 6 */
   48         USBF_IOERROR,                   /* 7 */
   49         USBF_TIMEOUT,                   /* 8 */
   50         USBF_SHORT_XFER,                /* 9 */
   51         USBF_STALLED,                   /* 10 */
   52         USBF_ERROR_MAX                  /* must be last */
   53 } usbf_status;
   54 #define USBF_ERROR_STRS { /* keep in sync with enum usbf_status */      \
   55         "NORMAL_COMPLETION",            /* 0 */                         \
   56         "IN_PROGRESS",                  /* 1 */                         \
   57         "NOT_STARTED",                  /* 2 */                         \
   58         "INVAL",                        /* 3 */                         \
   59         "NOMEM",                        /* 4 */                         \
   60         "CANCELLED",                    /* 5 */                         \
   61         "BAD_ADDRESS",                  /* 6 */                         \
   62         "IOERROR",                      /* 7 */                         \
   63         "TIMEOUT",                      /* 8 */                         \
   64         "SHORT_XFER",                   /* 9 */                         \
   65         "STALLED",                      /* 10 */                        \
   66 };
   67 
   68 typedef void (*usbf_callback)(usbf_xfer_handle, usbf_private_handle,
   69     usbf_status);
   70 
   71 /*
   72  * Attach USB function at the logical device.
   73  */
   74 struct usbf_attach_arg {
   75         usbf_device_handle device;
   76 };
   77 
   78 struct usbf_function_methods {
   79         usbf_status (*set_config)(usbf_function_handle, usbf_config_handle);
   80         usbf_status (*do_request)(usbf_function_handle,
   81             usb_device_request_t *req, void **data);
   82 };
   83 
   84 struct usbf_function {
   85         struct device bdev;             /* base device */
   86         /* filled in by function driver */
   87         struct usbf_function_methods *methods;
   88 };
   89 
   90 #define USBF_EMPTY_STRING_ID            (USB_LANGUAGE_TABLE+1)
   91 #define USBF_STRING_ID_MIN              (USB_LANGUAGE_TABLE+2)
   92 #define USBF_STRING_ID_MAX              255
   93 
   94 /*
   95  * USB function driver interface
   96  */
   97 
   98 /* global */
   99 const char      *usbf_errstr(usbf_status);
  100 
  101 /* device */
  102 void             usbf_devinfo_setup(usbf_device_handle, u_int8_t, u_int8_t,
  103                      u_int8_t, u_int16_t, u_int16_t, u_int16_t, const char *,
  104                      const char *, const char *);
  105 char            *usbf_devinfo_alloc(usbf_device_handle);
  106 void             usbf_devinfo_free(char *);
  107 usb_device_descriptor_t *usbf_device_descriptor(usbf_device_handle);
  108 usb_string_descriptor_t *usbf_string_descriptor(usbf_device_handle, u_int8_t);
  109 usb_config_descriptor_t *usbf_config_descriptor(usbf_device_handle, u_int8_t);
  110 
  111 /* configuration */
  112 u_int8_t         usbf_add_string(usbf_device_handle, const char *);
  113 usbf_status      usbf_add_config(usbf_device_handle, usbf_config_handle *);
  114 usbf_status      usbf_add_config_desc(usbf_config_handle, usb_descriptor_t *,
  115                      usb_descriptor_t **);
  116 usbf_status      usbf_add_interface(usbf_config_handle, u_int8_t, u_int8_t,
  117                      u_int8_t, const char *, usbf_interface_handle *);
  118 usbf_status      usbf_add_endpoint(usbf_interface_handle, u_int8_t,
  119                      u_int8_t, u_int16_t, u_int8_t, usbf_endpoint_handle *);
  120 usbf_status      usbf_end_config(usbf_config_handle);
  121 usbf_endpoint_handle usbf_config_endpoint(usbf_config_handle, u_int8_t);
  122 
  123 /* interface */
  124 int              usbf_interface_number(usbf_interface_handle);
  125 usbf_endpoint_handle usbf_iface_endpoint(usbf_interface_handle, u_int8_t);
  126 
  127 /* endpoint */
  128 u_int8_t         usbf_endpoint_address(usbf_endpoint_handle);
  129 u_int8_t         usbf_endpoint_attributes(usbf_endpoint_handle);
  130 #define usbf_endpoint_index(e)  UE_GET_ADDR(usbf_endpoint_address((e)))
  131 #define usbf_endpoint_dir(e)    UE_GET_DIR(usbf_endpoint_address((e)))
  132 #define usbf_endpoint_type(e)   UE_GET_XFERTYPE(usbf_endpoint_attributes((e)))
  133 
  134 /* pipe */
  135 usbf_status      usbf_open_pipe(usbf_interface_handle, u_int8_t,
  136                      usbf_pipe_handle *);
  137 void             usbf_abort_pipe(usbf_pipe_handle);
  138 void             usbf_close_pipe(usbf_pipe_handle);
  139 void             usbf_stall_pipe(usbf_pipe_handle);
  140 
  141 /* transfer */
  142 usbf_xfer_handle usbf_alloc_xfer(usbf_device_handle);
  143 void             usbf_free_xfer(usbf_xfer_handle);
  144 void            *usbf_alloc_buffer(usbf_xfer_handle, u_int32_t);
  145 void             usbf_free_buffer(usbf_xfer_handle);
  146 void             usbf_setup_xfer(usbf_xfer_handle, usbf_pipe_handle,
  147                      usbf_private_handle, void *, u_int32_t, u_int16_t,
  148                      u_int32_t, usbf_callback);
  149 void             usbf_setup_default_xfer(usbf_xfer_handle, usbf_pipe_handle,
  150                      usbf_private_handle, usb_device_request_t *, u_int16_t,
  151                      u_int32_t, usbf_callback);
  152 void             usbf_get_xfer_status(usbf_xfer_handle, usbf_private_handle *,
  153                      void **, u_int32_t *, usbf_status *);
  154 usbf_status      usbf_transfer(usbf_xfer_handle);
  155 
  156 /*
  157  * The usbf_task structure describes a task to be perfomed in process
  158  * context, i.e. the USB device's task thread.  This is normally used by
  159  * USB function drivers that need to perform tasks in a process context.
  160  */
  161 struct usbf_task {
  162         TAILQ_ENTRY(usbf_task) next;
  163         void (*fun)(void *);
  164         void *arg;
  165         char onqueue;
  166 };
  167 
  168 void usbf_add_task(usbf_device_handle, struct usbf_task *);
  169 void usbf_rem_task(usbf_device_handle, struct usbf_task *);
  170 #define usbf_init_task(t, f, a) ((t)->fun=(f), (t)->arg=(a), (t)->onqueue=0)
  171 
  172 #endif

/* [<][>][^][v][top][bottom][index][help] */