[BACK]Return to usbfvar.h CVS log [TXT][DIR] Up to [local] / sys / dev / usb

Annotation of sys/dev/usb/usbfvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: usbfvar.h,v 1.6 2007/06/15 11:41:48 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
                     21:  *
                     22:  * This file is to be included only by the logical device driver and the
                     23:  * USB device controller (DC) driver.
                     24:  */
                     25:
                     26: /*** structures corresponding to USB protocol components ***/
                     27:
                     28: struct usbf_endpoint {
                     29:        struct usbf_interface       *iface;
                     30:        usb_endpoint_descriptor_t   *edesc;
                     31:        int                          halted;    /* UF_ENDPOINT_HALT set */
                     32:        int                          refcnt;
                     33:        SIMPLEQ_ENTRY(usbf_endpoint) next;
                     34: };
                     35:
                     36: struct usbf_interface {
                     37:        struct usbf_config           *config;
                     38:        usb_interface_descriptor_t   *idesc;
                     39:        LIST_HEAD(, usbf_pipe)        pipes;
                     40:        SIMPLEQ_HEAD(, usbf_endpoint) endpoint_head;
                     41:        SIMPLEQ_ENTRY(usbf_interface) next;
                     42: };
                     43:
                     44: struct usbf_config {
                     45:        struct usbf_device *uc_device;
                     46:        usb_config_descriptor_t *uc_cdesc;
                     47:        size_t uc_cdesc_size;
                     48:        int uc_closed;
                     49:        SIMPLEQ_HEAD(, usbf_interface) iface_head;
                     50:        SIMPLEQ_ENTRY(usbf_config) next;
                     51: };
                     52:
                     53: struct usbf_device {
                     54:        struct device            bdev;          /* base device */
                     55:        struct usbf_bus         *bus;           /* device controller */
                     56:        struct usbf_function    *function;      /* function driver */
                     57:        struct usbf_pipe        *default_pipe;  /* pipe 0 (device control) */
                     58:        struct usbf_xfer        *default_xfer;  /* device request xfer */
                     59:        struct usbf_xfer        *data_xfer;     /* request response xfer */
                     60:        int                      address;       /* assigned by host (or 0) */
                     61:        usbf_config_handle       config;        /* set by host (or NULL) */
                     62:        usb_status_t             status;        /* device status */
                     63:        usb_device_request_t     def_req;       /* device request buffer */
                     64:        struct usbf_endpoint     def_ep;        /* for pipe 0 */
                     65:        usb_endpoint_descriptor_t def_ep_desc;  /* for pipe 0 */
                     66:        usb_device_descriptor_t  ddesc;         /* device descriptor */
                     67:        usb_string_descriptor_t *sdesc;         /* string descriptors */
                     68:        size_t                   sdesc_size;    /* size of ud_sdesc */
                     69:        uByte                    string_id;     /* next string id */
                     70:        SIMPLEQ_HEAD(, usbf_config) configs;
                     71: };
                     72:
                     73: /*** software control structures ***/
                     74:
                     75: struct usbf_pipe_methods {
                     76:        usbf_status     (*transfer)(usbf_xfer_handle);
                     77:        usbf_status     (*start)(usbf_xfer_handle);
                     78:        void            (*abort)(usbf_xfer_handle);
                     79:        void            (*done)(usbf_xfer_handle);
                     80:        void            (*close)(usbf_pipe_handle);
                     81: };
                     82:
                     83: struct usbf_bus_methods {
                     84:        usbf_status       (*open_pipe)(struct usbf_pipe *);
                     85:        void              (*soft_intr)(void *);
                     86:        usbf_status       (*allocm)(struct usbf_bus *, usb_dma_t *, u_int32_t);
                     87:        void              (*freem)(struct usbf_bus *, usb_dma_t *);
                     88:        struct usbf_xfer *(*allocx)(struct usbf_bus *);
                     89:        void              (*freex)(struct usbf_bus *, struct usbf_xfer *);
                     90: };
                     91:
                     92: struct usbf_softc;
                     93:
                     94: struct usbf_bus {
                     95:        /* Filled by DC driver */
                     96:        struct device            bdev;          /* base device */
                     97:        struct usbf_bus_methods *methods;
                     98:        size_t                   pipe_size;     /* size of pipe struct */
                     99:        u_int8_t                 ep0_maxp;      /* packet size for EP0 */
                    100:        int                      usbrev;        /* as in struct usbd_bus */
                    101:        /* Filled by usbf driver */
                    102:        struct usbf_softc       *usbfctl;
                    103:        int                      intr_context;
                    104: #ifdef __HAVE_GENERIC_SOFT_INTERRUPTS
                    105:        void                    *soft;          /* soft interrupt cookie */
                    106: #endif
                    107:        bus_dma_tag_t            dmatag;        /* DMA tag */
                    108: };
                    109:
                    110: struct usbf_port {
                    111:        usb_port_status_t        status;
                    112:        u_int8_t                 portno;
                    113:        struct usbf_device      *device;        /* connected function */
                    114: };
                    115:
                    116: struct usbf_pipe {
                    117:        struct usbf_device       *device;
                    118:        struct usbf_interface    *iface;        /* unless default pipe */
                    119:        struct usbf_endpoint     *endpoint;
                    120:        int                       refcnt;
                    121:        int                       running;
                    122:        int                       aborting;
                    123:        SIMPLEQ_HEAD(, usbf_xfer) queue;
                    124:        LIST_ENTRY(usbf_pipe)     next;
                    125:
                    126:        char                      repeat;
                    127:        int                       interval;
                    128:
                    129:        /* Filled by DC driver. */
                    130:        struct usbf_pipe_methods *methods;
                    131: };
                    132:
                    133: struct usbf_xfer {
                    134:        struct usbf_pipe        *pipe;
                    135:        usbf_private_handle      priv;
                    136:        void                    *buffer;
                    137:        u_int32_t                length;
                    138:        u_int32_t                actlen;
                    139:        u_int16_t                flags;
                    140:        u_int32_t                timeout;
                    141:        usbf_status              status;
                    142:        usbf_callback            callback;
                    143:        SIMPLEQ_ENTRY(usbf_xfer) next;
                    144:
                    145:        /* for memory management */
                    146:        struct usbf_device      *device;
                    147:        int                      rqflags;
                    148:        usb_dma_t                dmabuf;
                    149:
                    150:        struct timeout           timeout_handle;
                    151: };
                    152:
                    153:
                    154: /* usbf.c */
                    155: void       usbf_host_reset(usbf_bus_handle);
                    156: void       usbf_do_request(usbf_xfer_handle, usbf_private_handle,
                    157:                            usbf_status);
                    158:
                    159: /* usbf_subr.c */
                    160: usbf_status usbf_new_device(struct device *, usbf_bus_handle, int, int, int,
                    161:                                     struct usbf_port *);
                    162: usbf_status usbf_set_endpoint_feature(usbf_config_handle, u_int8_t,
                    163:                                      u_int16_t);
                    164: usbf_status usbf_clear_endpoint_feature(usbf_config_handle, u_int8_t,
                    165:                                        u_int16_t);
                    166: usbf_status usbf_insert_transfer(usbf_xfer_handle xfer);
                    167: void       usbf_transfer_complete(usbf_xfer_handle xfer);
                    168: usbf_status usbf_allocmem(usbf_bus_handle, size_t, size_t, usb_dma_t *);
                    169: void       usbf_freemem(usbf_bus_handle, usb_dma_t *);
                    170: usbf_status usbf_softintr_establish(struct usbf_bus *);
                    171: void       usbf_schedsoftintr(struct usbf_bus *);

CVSweb