[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     ! 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