ahcireg.h revision 1.2 1 1.2 skrll /* $NetBSD: ahcireg.h,v 1.2 2016/04/23 10:15:29 skrll Exp $ */
2 1.1 dyoung
3 1.1 dyoung /*-
4 1.1 dyoung * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
5 1.1 dyoung * All rights reserved.
6 1.1 dyoung *
7 1.1 dyoung * Redistribution and use in source and binary forms, with or
8 1.1 dyoung * without modification, are permitted provided that the following
9 1.1 dyoung * conditions are met:
10 1.1 dyoung * 1. Redistributions of source code must retain the above copyright
11 1.1 dyoung * notice, this list of conditions and the following disclaimer.
12 1.1 dyoung * 2. Redistributions in binary form must reproduce the above
13 1.1 dyoung * copyright notice, this list of conditions and the following
14 1.1 dyoung * disclaimer in the documentation and/or other materials provided
15 1.1 dyoung * with the distribution.
16 1.1 dyoung * 3. The names of the authors may not be used to endorse or promote
17 1.1 dyoung * products derived from this software without specific prior
18 1.1 dyoung * written permission.
19 1.1 dyoung *
20 1.1 dyoung * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
21 1.1 dyoung * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 1.1 dyoung * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 1.1 dyoung * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
24 1.1 dyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25 1.1 dyoung * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 1.1 dyoung * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
27 1.1 dyoung * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 1.1 dyoung * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
29 1.1 dyoung * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 1.1 dyoung * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31 1.1 dyoung * OF SUCH DAMAGE.
32 1.1 dyoung */
33 1.1 dyoung #ifndef _AHCIREG_H
34 1.1 dyoung #define _AHCIREG_H
35 1.1 dyoung
36 1.1 dyoung #define ADMHCD_REG_CONTROL 0x00
37 1.1 dyoung #define ADMHCD_REG_INTSTATUS 0x04
38 1.1 dyoung #define ADMHCD_REG_INTENABLE 0x08
39 1.1 dyoung #define ADMHCD_REG_HOSTCONTROL 0x10
40 1.1 dyoung #define ADMHCD_REG_FMINTERVAL 0x18
41 1.1 dyoung #define ADMHCD_REG_FMNUMBER 0x1c
42 1.1 dyoung #define ADMHCD_REG_LSTHRESH 0x70
43 1.1 dyoung #define ADMHCD_REG_RHDESCR 0x74
44 1.1 dyoung #define ADMHCD_REG_PORTSTATUS0 0x78
45 1.1 dyoung #define ADMHCD_REG_PORTSTATUS1 0x7c
46 1.1 dyoung #define ADMHCD_REG_HOSTHEAD 0x80
47 1.1 dyoung #define ADMHCD_NUMPORTS 2
48 1.1 dyoung
49 1.1 dyoung #define ADMHCD_HOST_EN 0x00000001 /* Host enable */
50 1.1 dyoung #define ADMHCD_SW_INTREQ 0x00000002 /* request software int */
51 1.1 dyoung #define ADMHCD_SW_RESET 0x00000008 /* Reset */
52 1.1 dyoung
53 1.1 dyoung #define ADMHCD_INT_TD 0x00100000 /* TD completed */
54 1.1 dyoung #define ADMHCD_INT_SW 0x20000000 /* software interrupt */
55 1.1 dyoung #define ADMHCD_INT_FATAL 0x40000000 /* Fatal interrupt */
56 1.1 dyoung #define ADMHCD_INT_ACT 0x80000000 /* Interrupt active */
57 1.1 dyoung
58 1.1 dyoung #define ADMHCD_STATE_RST 0x00000000 /* bus state reset */
59 1.1 dyoung #define ADMHCD_STATE_RES 0x00000001 /* bus state resume */
60 1.1 dyoung #define ADMHCD_STATE_OP 0x00000002 /* bus state operational */
61 1.1 dyoung #define ADMHCD_STATE_SUS 0x00000003 /* bus state suspended */
62 1.1 dyoung #define ADMHCD_DMA_EN 0x00000004 /* enable dma engine */
63 1.1 dyoung
64 1.1 dyoung #define ADMHCD_NPS 0x00000020 /* No Power Switch */
65 1.1 dyoung #define ADMHCD_LPSC 0x04000000 /* Local power switch change */
66 1.1 dyoung
67 1.1 dyoung #define ADMHCD_CCS 0x00000001 /* current connect status */
68 1.1 dyoung #define ADMHCD_PES 0x00000002 /* port enable status */
69 1.1 dyoung #define ADMHCD_PSS 0x00000004 /* port suspend status */
70 1.1 dyoung #define ADMHCD_POCI 0x00000008 /* port overcurrent indicator */
71 1.1 dyoung #define ADMHCD_PRS 0x00000010 /* port reset status */
72 1.1 dyoung #define ADMHCD_PPS 0x00000100 /* port power status */
73 1.1 dyoung #define ADMHCD_LSDA 0x00000200 /* low speed device attached */
74 1.1 dyoung #define ADMHCD_CSC 0x00010000 /* connect status change */
75 1.1 dyoung #define ADMHCD_PESC 0x00020000 /* enable status change */
76 1.1 dyoung #define ADMHCD_PSSC 0x00040000 /* suspend status change */
77 1.1 dyoung #define ADMHCD_OCIC 0x00080000 /* overcurrent change*/
78 1.1 dyoung #define ADMHCD_PRSC 0x00100000 /* reset status change */
79 1.1 dyoung
80 1.1 dyoung struct admhcd_ed {
81 1.2 skrll /* Don't change first four, they used for DMA */
82 1.2 skrll volatile uint32_t control;
83 1.2 skrll volatile struct admhcd_td *tail;
84 1.2 skrll volatile struct admhcd_td *head;
85 1.2 skrll volatile struct admhcd_ed *next;
86 1.2 skrll /* the rest is for the driver only: */
87 1.2 skrll uint32_t unused[4];
88 1.1 dyoung } __attribute__ ((packed));
89 1.1 dyoung
90 1.1 dyoung #define ADMHCD_ED_EPSHIFT 7 /* Shift for endpoint number */
91 1.1 dyoung #define ADMHCD_ED_INT 0x00000800 /* Is this an int endpoint */
92 1.1 dyoung #define ADMHCD_ED_SPEED 0x00002000 /* Is it a high speed dev? */
93 1.1 dyoung #define ADMHCD_ED_SKIP 0x00004000 /* Skip this ED */
94 1.1 dyoung #define ADMHCD_ED_FORMAT 0x00008000 /* Is this an isoc endpoint */
95 1.1 dyoung #define ADMHCD_ED_MAXSHIFT 16 /* Shift for max packet size */
96 1.1 dyoung
97 1.1 dyoung struct admhcd_td {
98 1.2 skrll /* Don't change first four, they are used for DMA */
99 1.2 skrll volatile uint32_t control;
100 1.2 skrll volatile uint32_t buffer;
101 1.2 skrll volatile uint32_t buflen;
102 1.2 skrll volatile struct admhcd_td *next;
103 1.2 skrll /* the rest is for the driver only: */
104 1.2 skrll /* struct urb *urb;
105 1.2 skrll struct admhcd_td *real; */
106 1.2 skrll uint32_t len;
107 1.2 skrll uint32_t unused[3];
108 1.1 dyoung } __attribute__ ((packed));
109 1.1 dyoung
110 1.1 dyoung #define ADMHCD_TD_OWN 0x80000000
111 1.1 dyoung #define ADMHCD_TD_TOGGLE 0x00000000
112 1.1 dyoung #define ADMHCD_TD_DATA0 0x01000000
113 1.1 dyoung #define ADMHCD_TD_DATA1 0x01800000
114 1.1 dyoung #define ADMHCD_TD_OUT 0x00200000
115 1.1 dyoung #define ADMHCD_TD_IN 0x00400000
116 1.1 dyoung #define ADMHCD_TD_SETUP 0x00000000
117 1.1 dyoung #define ADMHCD_TD_ISO 0x00010000
118 1.1 dyoung #define ADMHCD_TD_R 0x00040000
119 1.1 dyoung #define ADMHCD_TD_INTEN 0x00010000
120 1.1 dyoung
121 1.1 dyoung #define ADMHCD_TD_ERRMASK 0x78000000
122 1.1 dyoung #define ADMHCD_TD_ERRSHIFT 27
123 1.1 dyoung
124 1.1 dyoung #endif /* _AHCIREG_H */
125