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

Annotation of sys/dev/usb/ohcireg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: ohcireg.h,v 1.12 2006/05/29 03:50:21 pascoe Exp $ */
        !             2: /*     $NetBSD: ohcireg.h,v 1.19 2002/07/11 21:14:27 augustss Exp $    */
        !             3: /*     $FreeBSD: src/sys/dev/usb/ohcireg.h,v 1.8 1999/11/17 22:33:40 n_hibma Exp $     */
        !             4:
        !             5:
        !             6: /*
        !             7:  * Copyright (c) 1998 The NetBSD Foundation, Inc.
        !             8:  * All rights reserved.
        !             9:  *
        !            10:  * This code is derived from software contributed to The NetBSD Foundation
        !            11:  * by Lennart Augustsson (lennart@augustsson.net) at
        !            12:  * Carlstedt Research & Technology.
        !            13:  *
        !            14:  * Redistribution and use in source and binary forms, with or without
        !            15:  * modification, are permitted provided that the following conditions
        !            16:  * are met:
        !            17:  * 1. Redistributions of source code must retain the above copyright
        !            18:  *    notice, this list of conditions and the following disclaimer.
        !            19:  * 2. Redistributions in binary form must reproduce the above copyright
        !            20:  *    notice, this list of conditions and the following disclaimer in the
        !            21:  *    documentation and/or other materials provided with the distribution.
        !            22:  * 3. All advertising materials mentioning features or use of this software
        !            23:  *    must display the following acknowledgement:
        !            24:  *        This product includes software developed by the NetBSD
        !            25:  *        Foundation, Inc. and its contributors.
        !            26:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            27:  *    contributors may be used to endorse or promote products derived
        !            28:  *    from this software without specific prior written permission.
        !            29:  *
        !            30:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            31:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            32:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            33:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            34:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            35:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            36:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            37:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            38:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            39:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            40:  * POSSIBILITY OF SUCH DAMAGE.
        !            41:  */
        !            42:
        !            43: #ifndef _DEV_PCI_OHCIREG_H_
        !            44: #define _DEV_PCI_OHCIREG_H_
        !            45:
        !            46: /*** PCI config registers ***/
        !            47:
        !            48: #define PCI_CBMEM              0x10    /* configuration base memory */
        !            49:
        !            50: #define PCI_INTERFACE_OHCI     0x10
        !            51:
        !            52: /*** OHCI registers */
        !            53:
        !            54: #define OHCI_REVISION          0x00    /* OHCI revision # */
        !            55: #define  OHCI_REV_LO(rev)      ((rev)&0xf)
        !            56: #define  OHCI_REV_HI(rev)      (((rev)>>4)&0xf)
        !            57: #define  OHCI_REV_LEGACY(rev)  ((rev) & 0x100)
        !            58:
        !            59: #define OHCI_CONTROL           0x04
        !            60: #define  OHCI_CBSR_MASK                0x00000003 /* Control/Bulk Service Ratio */
        !            61: #define  OHCI_RATIO_1_1                0x00000000
        !            62: #define  OHCI_RATIO_1_2                0x00000001
        !            63: #define  OHCI_RATIO_1_3                0x00000002
        !            64: #define  OHCI_RATIO_1_4                0x00000003
        !            65: #define  OHCI_PLE              0x00000004 /* Periodic List Enable */
        !            66: #define  OHCI_IE               0x00000008 /* Isochronous Enable */
        !            67: #define  OHCI_CLE              0x00000010 /* Control List Enable */
        !            68: #define  OHCI_BLE              0x00000020 /* Bulk List Enable */
        !            69: #define  OHCI_HCFS_MASK                0x000000c0 /* HostControllerFunctionalState */
        !            70: #define  OHCI_HCFS_RESET       0x00000000
        !            71: #define  OHCI_HCFS_RESUME      0x00000040
        !            72: #define  OHCI_HCFS_OPERATIONAL 0x00000080
        !            73: #define  OHCI_HCFS_SUSPEND     0x000000c0
        !            74: #define  OHCI_IR               0x00000100 /* Interrupt Routing */
        !            75: #define  OHCI_RWC              0x00000200 /* Remote Wakeup Connected */
        !            76: #define  OHCI_RWE              0x00000400 /* Remote Wakeup Enabled */
        !            77: #define OHCI_COMMAND_STATUS    0x08
        !            78: #define  OHCI_HCR              0x00000001 /* Host Controller Reset */
        !            79: #define  OHCI_CLF              0x00000002 /* Control List Filled */
        !            80: #define  OHCI_BLF              0x00000004 /* Bulk List Filled */
        !            81: #define  OHCI_OCR              0x00000008 /* Ownership Change Request */
        !            82: #define  OHCI_SOC_MASK         0x00030000 /* Scheduling Overrun Count */
        !            83: #define OHCI_INTERRUPT_STATUS  0x0c
        !            84: #define  OHCI_SO               0x00000001 /* Scheduling Overrun */
        !            85: #define  OHCI_WDH              0x00000002 /* Writeback Done Head */
        !            86: #define  OHCI_SF               0x00000004 /* Start of Frame */
        !            87: #define  OHCI_RD               0x00000008 /* Resume Detected */
        !            88: #define  OHCI_UE               0x00000010 /* Unrecoverable Error */
        !            89: #define  OHCI_FNO              0x00000020 /* Frame Number Overflow */
        !            90: #define  OHCI_RHSC             0x00000040 /* Root Hub Status Change */
        !            91: #define  OHCI_OC               0x40000000 /* Ownership Change */
        !            92: #define  OHCI_MIE              0x80000000 /* Master Interrupt Enable */
        !            93: #define OHCI_INTERRUPT_ENABLE  0x10
        !            94: #define OHCI_INTERRUPT_DISABLE 0x14
        !            95: #define OHCI_HCCA              0x18
        !            96: #define OHCI_PERIOD_CURRENT_ED 0x1c
        !            97: #define OHCI_CONTROL_HEAD_ED   0x20
        !            98: #define OHCI_CONTROL_CURRENT_ED        0x24
        !            99: #define OHCI_BULK_HEAD_ED      0x28
        !           100: #define OHCI_BULK_CURRENT_ED   0x2c
        !           101: #define OHCI_DONE_HEAD         0x30
        !           102: #define OHCI_FM_INTERVAL       0x34
        !           103: #define  OHCI_GET_IVAL(s)      ((s) & 0x3fff)
        !           104: #define  OHCI_GET_FSMPS(s)     (((s) >> 16) & 0x7fff)
        !           105: #define  OHCI_FIT              0x80000000
        !           106: #define OHCI_FM_REMAINING      0x38
        !           107: #define OHCI_FM_NUMBER         0x3c
        !           108: #define OHCI_PERIODIC_START    0x40
        !           109: #define OHCI_LS_THRESHOLD      0x44
        !           110: #define OHCI_RH_DESCRIPTOR_A   0x48
        !           111: #define  OHCI_GET_NDP(s)       ((s) & 0xff)
        !           112: #define  OHCI_PSM              0x0100     /* Power Switching Mode */
        !           113: #define  OHCI_NPS              0x0200     /* No Power Switching */
        !           114: #define  OHCI_DT               0x0400     /* Device Type */
        !           115: #define  OHCI_OCPM             0x0800     /* Overcurrent Protection Mode */
        !           116: #define  OHCI_NOCP             0x1000     /* No Overcurrent Protection */
        !           117: #define  OHCI_GET_POTPGT(s)    ((s) >> 24)
        !           118: #define OHCI_RH_DESCRIPTOR_B   0x4c
        !           119: #define OHCI_RH_STATUS         0x50
        !           120: #define  OHCI_LPS              0x00000001 /* Local Power Status */
        !           121: #define  OHCI_OCI              0x00000002 /* OverCurrent Indicator */
        !           122: #define  OHCI_DRWE             0x00008000 /* Device Remote Wakeup Enable */
        !           123: #define  OHCI_LPSC             0x00010000 /* Local Power Status Change */
        !           124: #define  OHCI_CCIC             0x00020000 /* OverCurrent Indicator Change */
        !           125: #define  OHCI_CRWE             0x80000000 /* Clear Remote Wakeup Enable */
        !           126: #define OHCI_RH_PORT_STATUS(n) (0x50 + (n)*4) /* 1 based indexing */
        !           127:
        !           128: #define OHCI_LES (OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE)
        !           129: #define OHCI_ALL_INTRS (OHCI_SO | OHCI_WDH | OHCI_SF | OHCI_RD | OHCI_UE | \
        !           130:                         OHCI_FNO | OHCI_RHSC | OHCI_OC)
        !           131: #define OHCI_NORMAL_INTRS (OHCI_SO | OHCI_WDH | OHCI_RD | OHCI_UE | OHCI_RHSC)
        !           132:
        !           133: #define OHCI_FSMPS(i) (((i-210)*6/7) << 16)
        !           134: #define OHCI_PERIODIC(i) ((i)*9/10)
        !           135:
        !           136: typedef u_int32_t ohci_physaddr_t;
        !           137:
        !           138: #define OHCI_NO_INTRS 32
        !           139: struct ohci_hcca {
        !           140:        ohci_physaddr_t hcca_interrupt_table[OHCI_NO_INTRS];
        !           141:        u_int32_t       hcca_frame_number;
        !           142:        ohci_physaddr_t hcca_done_head;
        !           143: #define OHCI_DONE_INTRS 1
        !           144: };
        !           145: #define OHCI_HCCA_SIZE 256
        !           146: #define OHCI_HCCA_ALIGN 256
        !           147:
        !           148: #define OHCI_PAGE_SIZE 0x1000
        !           149: #define OHCI_PAGE(x) ((x) &~ 0xfff)
        !           150: #define OHCI_PAGE_OFFSET(x) ((x) & 0xfff)
        !           151:
        !           152: typedef struct {
        !           153:        u_int32_t       ed_flags;
        !           154: #define OHCI_ED_GET_FA(s)      ((s) & 0x7f)
        !           155: #define OHCI_ED_ADDRMASK       0x0000007f
        !           156: #define OHCI_ED_SET_FA(s)      (s)
        !           157: #define OHCI_ED_GET_EN(s)      (((s) >> 7) & 0xf)
        !           158: #define OHCI_ED_SET_EN(s)      ((s) << 7)
        !           159: #define OHCI_ED_DIR_MASK       0x00001800
        !           160: #define  OHCI_ED_DIR_TD                0x00000000
        !           161: #define  OHCI_ED_DIR_OUT       0x00000800
        !           162: #define  OHCI_ED_DIR_IN                0x00001000
        !           163: #define OHCI_ED_SPEED          0x00002000
        !           164: #define OHCI_ED_SKIP           0x00004000
        !           165: #define OHCI_ED_FORMAT_GEN     0x00000000
        !           166: #define OHCI_ED_FORMAT_ISO     0x00008000
        !           167: #define OHCI_ED_GET_MAXP(s)    (((s) >> 16) & 0x07ff)
        !           168: #define OHCI_ED_SET_MAXP(s)    ((s) << 16)
        !           169: #define OHCI_ED_MAXPMASK       (0x7ff << 16)
        !           170:        ohci_physaddr_t ed_tailp;
        !           171:        ohci_physaddr_t ed_headp;
        !           172: #define OHCI_HALTED            0x00000001
        !           173: #define OHCI_TOGGLECARRY       0x00000002
        !           174: #define OHCI_HEADMASK          0xfffffffc
        !           175:        ohci_physaddr_t ed_nexted;
        !           176: } ohci_ed_t;
        !           177: /* #define OHCI_ED_SIZE 16 */
        !           178: #define OHCI_ED_ALIGN 16
        !           179:
        !           180: typedef struct {
        !           181:        u_int32_t       td_flags;
        !           182: #define OHCI_TD_R              0x00040000              /* Buffer Rounding  */
        !           183: #define OHCI_TD_DP_MASK                0x00180000              /* Direction / PID */
        !           184: #define  OHCI_TD_SETUP         0x00000000
        !           185: #define  OHCI_TD_OUT           0x00080000
        !           186: #define  OHCI_TD_IN            0x00100000
        !           187: #define OHCI_TD_GET_DI(x)      (((x) >> 21) & 7)       /* Delay Interrupt */
        !           188: #define OHCI_TD_SET_DI(x)      ((x) << 21)
        !           189: #define  OHCI_TD_NOINTR                0x00e00000
        !           190: #define  OHCI_TD_INTR_MASK     0x00e00000
        !           191: #define OHCI_TD_TOGGLE_CARRY   0x00000000
        !           192: #define OHCI_TD_TOGGLE_0       0x02000000
        !           193: #define OHCI_TD_TOGGLE_1       0x03000000
        !           194: #define OHCI_TD_TOGGLE_MASK    0x03000000
        !           195: #define OHCI_TD_GET_EC(x)      (((x) >> 26) & 3)       /* Error Count */
        !           196: #define OHCI_TD_GET_CC(x)      ((x) >> 28)             /* Condition Code */
        !           197: #define  OHCI_TD_NOCC          0xf0000000
        !           198:        ohci_physaddr_t td_cbp;         /* Current Buffer Pointer */
        !           199:        ohci_physaddr_t td_nexttd;      /* Next TD */
        !           200:        ohci_physaddr_t td_be;          /* Buffer End */
        !           201: } ohci_td_t;
        !           202: /* #define OHCI_TD_SIZE 16 */
        !           203: #define OHCI_TD_ALIGN 16
        !           204:
        !           205: #define OHCI_ITD_NOFFSET 8
        !           206: typedef struct {
        !           207:        u_int32_t       itd_flags;
        !           208: #define OHCI_ITD_GET_SF(x)     ((x) & 0x0000ffff)
        !           209: #define OHCI_ITD_SET_SF(x)     ((x) & 0xffff)
        !           210: #define OHCI_ITD_GET_DI(x)     (((x) >> 21) & 7)       /* Delay Interrupt */
        !           211: #define OHCI_ITD_SET_DI(x)     ((x) << 21)
        !           212: #define  OHCI_ITD_NOINTR       0x00e00000
        !           213: #define OHCI_ITD_GET_FC(x)     ((((x) >> 24) & 7)+1)   /* Frame Count */
        !           214: #define OHCI_ITD_SET_FC(x)     (((x)-1) << 24)
        !           215: #define OHCI_ITD_GET_CC(x)     ((x) >> 28)             /* Condition Code */
        !           216: #define  OHCI_ITD_NOCC         0xf0000000
        !           217:        ohci_physaddr_t itd_bp0;                        /* Buffer Page 0 */
        !           218:        ohci_physaddr_t itd_nextitd;                    /* Next ITD */
        !           219:        ohci_physaddr_t itd_be;                         /* Buffer End */
        !           220:        u_int16_t       itd_offset[OHCI_ITD_NOFFSET];   /* Buffer offsets */
        !           221: #define itd_pswn itd_offset                            /* Packet Status Word*/
        !           222: #define OHCI_ITD_PAGE_SELECT   0x00001000
        !           223: #define OHCI_ITD_MK_OFFS(len)  (0xe000 | ((len) & 0x1fff))
        !           224: #define OHCI_ITD_PSW_LENGTH(x) ((x) & 0xfff)           /* Transfer length */
        !           225: #define OHCI_ITD_PSW_GET_CC(x) ((x) >> 12)             /* Condition Code */
        !           226: } ohci_itd_t;
        !           227: /* #define OHCI_ITD_SIZE 32 */
        !           228: #define OHCI_ITD_ALIGN 32
        !           229:
        !           230:
        !           231: #define OHCI_CC_NO_ERROR               0
        !           232: #define OHCI_CC_CRC                    1
        !           233: #define OHCI_CC_BIT_STUFFING           2
        !           234: #define OHCI_CC_DATA_TOGGLE_MISMATCH   3
        !           235: #define OHCI_CC_STALL                  4
        !           236: #define OHCI_CC_DEVICE_NOT_RESPONDING  5
        !           237: #define OHCI_CC_PID_CHECK_FAILURE      6
        !           238: #define OHCI_CC_UNEXPECTED_PID         7
        !           239: #define OHCI_CC_DATA_OVERRUN           8
        !           240: #define OHCI_CC_DATA_UNDERRUN          9
        !           241: #define OHCI_CC_BUFFER_OVERRUN         12
        !           242: #define OHCI_CC_BUFFER_UNDERRUN                13
        !           243: #define OHCI_CC_NOT_ACCESSED           14
        !           244: #define OHCI_CC_NOT_ACCESSED_MASK      14
        !           245:
        !           246: /* Some delay needed when changing certain registers. */
        !           247: #define OHCI_ENABLE_POWER_DELAY        5
        !           248: #define OHCI_READ_DESC_DELAY   5
        !           249:
        !           250: #endif /* _DEV_PCI_OHCIREG_H_ */

CVSweb