xref: /titanic_53/usr/src/boot/sys/boot/i386/libfirewire/fwohci.h (revision 4a5d661a82b942b6538acd26209d959ce98b593a)
1*4a5d661aSToomas Soome /*
2*4a5d661aSToomas Soome  * Copyright (c) 2007 Hidetoshi Shimokawa
3*4a5d661aSToomas Soome  * All rights reserved.
4*4a5d661aSToomas Soome  *
5*4a5d661aSToomas Soome  * Redistribution and use in source and binary forms, with or without
6*4a5d661aSToomas Soome  * modification, are permitted provided that the following conditions
7*4a5d661aSToomas Soome  * are met:
8*4a5d661aSToomas Soome  * 1. Redistributions of source code must retain the above copyright
9*4a5d661aSToomas Soome  *    notice, this list of conditions and the following disclaimer.
10*4a5d661aSToomas Soome  * 2. Redistributions in binary form must reproduce the above copyright
11*4a5d661aSToomas Soome  *    notice, this list of conditions and the following disclaimer in the
12*4a5d661aSToomas Soome  *    documentation and/or other materials provided with the distribution.
13*4a5d661aSToomas Soome  * 3. All advertising materials mentioning features or use of this software
14*4a5d661aSToomas Soome  *    must display the acknowledgement as bellow:
15*4a5d661aSToomas Soome  *
16*4a5d661aSToomas Soome  *    This product includes software developed by K. Kobayashi and H. Shimokawa
17*4a5d661aSToomas Soome  *
18*4a5d661aSToomas Soome  * 4. The name of the author may not be used to endorse or promote products
19*4a5d661aSToomas Soome  *    derived from this software without specific prior written permission.
20*4a5d661aSToomas Soome  *
21*4a5d661aSToomas Soome  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22*4a5d661aSToomas Soome  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23*4a5d661aSToomas Soome  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24*4a5d661aSToomas Soome  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
25*4a5d661aSToomas Soome  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26*4a5d661aSToomas Soome  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27*4a5d661aSToomas Soome  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*4a5d661aSToomas Soome  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29*4a5d661aSToomas Soome  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30*4a5d661aSToomas Soome  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31*4a5d661aSToomas Soome  * POSSIBILITY OF SUCH DAMAGE.
32*4a5d661aSToomas Soome  *
33*4a5d661aSToomas Soome  * $FreeBSD$
34*4a5d661aSToomas Soome  *
35*4a5d661aSToomas Soome  */
36*4a5d661aSToomas Soome 
37*4a5d661aSToomas Soome #define MAX_OHCI 5
38*4a5d661aSToomas Soome #define CROMSIZE 0x400
39*4a5d661aSToomas Soome 
40*4a5d661aSToomas Soome struct fw_eui64 {
41*4a5d661aSToomas Soome         uint32_t hi, lo;
42*4a5d661aSToomas Soome };
43*4a5d661aSToomas Soome 
44*4a5d661aSToomas Soome struct fwohci_softc {
45*4a5d661aSToomas Soome 	uint32_t locator;
46*4a5d661aSToomas Soome 	uint32_t devid;
47*4a5d661aSToomas Soome 	uint32_t base_addr;
48*4a5d661aSToomas Soome 	uint32_t bus_id;
49*4a5d661aSToomas Soome 	uint32_t handle;
50*4a5d661aSToomas Soome 	int32_t state;
51*4a5d661aSToomas Soome 	struct crom_src_buf *crom_src_buf;
52*4a5d661aSToomas Soome 	struct crom_src *crom_src;
53*4a5d661aSToomas Soome 	struct crom_chunk *crom_root;
54*4a5d661aSToomas Soome 	struct fw_eui64 eui;
55*4a5d661aSToomas Soome 	int	speed;
56*4a5d661aSToomas Soome 	int	maxrec;
57*4a5d661aSToomas Soome 	uint32_t *config_rom;
58*4a5d661aSToomas Soome 	char config_rom_buf[CROMSIZE*2]; /* double size for alignment */
59*4a5d661aSToomas Soome };
60*4a5d661aSToomas Soome 
61*4a5d661aSToomas Soome int fwohci_init(struct fwohci_softc *, int);
62*4a5d661aSToomas Soome void fwohci_ibr(struct fwohci_softc *);
63*4a5d661aSToomas Soome void fwohci_poll(struct fwohci_softc *);
64*4a5d661aSToomas Soome 
65*4a5d661aSToomas Soome #define FWOHCI_STATE_DEAD	(-1)
66*4a5d661aSToomas Soome #define FWOHCI_STATE_INIT	0
67*4a5d661aSToomas Soome #define FWOHCI_STATE_ENABLED	1
68*4a5d661aSToomas Soome #define FWOHCI_STATE_BUSRESET	2
69*4a5d661aSToomas Soome #define FWOHCI_STATE_NORMAL	3
70*4a5d661aSToomas Soome 
71*4a5d661aSToomas Soome #define OREAD(f, o) (*(volatile uint32_t *)((f)->handle + (o)))
72*4a5d661aSToomas Soome #define OWRITE(f, o, v) (*(volatile uint32_t *)((f)->handle + (o)) = (v))
73*4a5d661aSToomas Soome 
74*4a5d661aSToomas Soome #define	OHCI_VERSION		0x00
75*4a5d661aSToomas Soome #define	OHCI_ATRETRY		0x08
76*4a5d661aSToomas Soome #define	OHCI_CROMHDR		0x18
77*4a5d661aSToomas Soome #define OHCI_BUS_ID		0x1c
78*4a5d661aSToomas Soome #define	OHCI_BUS_OPT		0x20
79*4a5d661aSToomas Soome #define	OHCI_BUSIRMC		(1U << 31)
80*4a5d661aSToomas Soome #define	OHCI_BUSCMC		(1 << 30)
81*4a5d661aSToomas Soome #define	OHCI_BUSISC		(1 << 29)
82*4a5d661aSToomas Soome #define	OHCI_BUSBMC		(1 << 28)
83*4a5d661aSToomas Soome #define	OHCI_BUSPMC		(1 << 27)
84*4a5d661aSToomas Soome #define OHCI_BUSFNC		OHCI_BUSIRMC | OHCI_BUSCMC | OHCI_BUSISC |\
85*4a5d661aSToomas Soome 				OHCI_BUSBMC | OHCI_BUSPMC
86*4a5d661aSToomas Soome 
87*4a5d661aSToomas Soome #define	OHCI_EUID_HI		0x24
88*4a5d661aSToomas Soome #define	OHCI_EUID_LO		0x28
89*4a5d661aSToomas Soome 
90*4a5d661aSToomas Soome #define	OHCI_CROMPTR		0x34
91*4a5d661aSToomas Soome #define	OHCI_HCCCTL		0x50
92*4a5d661aSToomas Soome #define	OHCI_HCCCTLCLR		0x54
93*4a5d661aSToomas Soome #define	OHCI_AREQHI		0x100
94*4a5d661aSToomas Soome #define	OHCI_AREQHICLR		0x104
95*4a5d661aSToomas Soome #define	OHCI_AREQLO		0x108
96*4a5d661aSToomas Soome #define	OHCI_AREQLOCLR		0x10c
97*4a5d661aSToomas Soome #define	OHCI_PREQHI		0x110
98*4a5d661aSToomas Soome #define	OHCI_PREQHICLR		0x114
99*4a5d661aSToomas Soome #define	OHCI_PREQLO		0x118
100*4a5d661aSToomas Soome #define	OHCI_PREQLOCLR		0x11c
101*4a5d661aSToomas Soome #define	OHCI_PREQUPPER		0x120
102*4a5d661aSToomas Soome 
103*4a5d661aSToomas Soome #define	OHCI_SID_BUF		0x64
104*4a5d661aSToomas Soome #define	OHCI_SID_CNT		0x68
105*4a5d661aSToomas Soome #define OHCI_SID_ERR		(1U << 31)
106*4a5d661aSToomas Soome #define OHCI_SID_CNT_MASK	0xffc
107*4a5d661aSToomas Soome 
108*4a5d661aSToomas Soome #define	OHCI_IT_STAT		0x90
109*4a5d661aSToomas Soome #define	OHCI_IT_STATCLR		0x94
110*4a5d661aSToomas Soome #define	OHCI_IT_MASK		0x98
111*4a5d661aSToomas Soome #define	OHCI_IT_MASKCLR		0x9c
112*4a5d661aSToomas Soome 
113*4a5d661aSToomas Soome #define	OHCI_IR_STAT		0xa0
114*4a5d661aSToomas Soome #define	OHCI_IR_STATCLR		0xa4
115*4a5d661aSToomas Soome #define	OHCI_IR_MASK		0xa8
116*4a5d661aSToomas Soome #define	OHCI_IR_MASKCLR		0xac
117*4a5d661aSToomas Soome 
118*4a5d661aSToomas Soome #define	OHCI_LNKCTL		0xe0
119*4a5d661aSToomas Soome #define	OHCI_LNKCTLCLR		0xe4
120*4a5d661aSToomas Soome 
121*4a5d661aSToomas Soome #define	OHCI_PHYACCESS		0xec
122*4a5d661aSToomas Soome #define	OHCI_CYCLETIMER		0xf0
123*4a5d661aSToomas Soome 
124*4a5d661aSToomas Soome #define	OHCI_DMACTL(off)	(off)
125*4a5d661aSToomas Soome #define	OHCI_DMACTLCLR(off)	(off + 4)
126*4a5d661aSToomas Soome #define	OHCI_DMACMD(off)	(off + 0xc)
127*4a5d661aSToomas Soome #define	OHCI_DMAMATCH(off)	(off + 0x10)
128*4a5d661aSToomas Soome 
129*4a5d661aSToomas Soome #define OHCI_ATQOFF		0x180
130*4a5d661aSToomas Soome #define OHCI_ATQCTL		OHCI_ATQOFF
131*4a5d661aSToomas Soome #define OHCI_ATQCTLCLR		(OHCI_ATQOFF + 4)
132*4a5d661aSToomas Soome #define OHCI_ATQCMD		(OHCI_ATQOFF + 0xc)
133*4a5d661aSToomas Soome #define OHCI_ATQMATCH		(OHCI_ATQOFF + 0x10)
134*4a5d661aSToomas Soome 
135*4a5d661aSToomas Soome #define OHCI_ATSOFF		0x1a0
136*4a5d661aSToomas Soome #define OHCI_ATSCTL		OHCI_ATSOFF
137*4a5d661aSToomas Soome #define OHCI_ATSCTLCLR		(OHCI_ATSOFF + 4)
138*4a5d661aSToomas Soome #define OHCI_ATSCMD		(OHCI_ATSOFF + 0xc)
139*4a5d661aSToomas Soome #define OHCI_ATSMATCH		(OHCI_ATSOFF + 0x10)
140*4a5d661aSToomas Soome 
141*4a5d661aSToomas Soome #define OHCI_ARQOFF		0x1c0
142*4a5d661aSToomas Soome #define OHCI_ARQCTL		OHCI_ARQOFF
143*4a5d661aSToomas Soome #define OHCI_ARQCTLCLR		(OHCI_ARQOFF + 4)
144*4a5d661aSToomas Soome #define OHCI_ARQCMD		(OHCI_ARQOFF + 0xc)
145*4a5d661aSToomas Soome #define OHCI_ARQMATCH		(OHCI_ARQOFF + 0x10)
146*4a5d661aSToomas Soome 
147*4a5d661aSToomas Soome #define OHCI_ARSOFF		0x1e0
148*4a5d661aSToomas Soome #define OHCI_ARSCTL		OHCI_ARSOFF
149*4a5d661aSToomas Soome #define OHCI_ARSCTLCLR		(OHCI_ARSOFF + 4)
150*4a5d661aSToomas Soome #define OHCI_ARSCMD		(OHCI_ARSOFF + 0xc)
151*4a5d661aSToomas Soome #define OHCI_ARSMATCH		(OHCI_ARSOFF + 0x10)
152*4a5d661aSToomas Soome 
153*4a5d661aSToomas Soome #define OHCI_ITOFF(CH)		(0x200 + 0x10 * (CH))
154*4a5d661aSToomas Soome #define OHCI_ITCTL(CH)		(OHCI_ITOFF(CH))
155*4a5d661aSToomas Soome #define OHCI_ITCTLCLR(CH)	(OHCI_ITOFF(CH) + 4)
156*4a5d661aSToomas Soome #define OHCI_ITCMD(CH)		(OHCI_ITOFF(CH) + 0xc)
157*4a5d661aSToomas Soome 
158*4a5d661aSToomas Soome #define OHCI_IROFF(CH)		(0x400 + 0x20 * (CH))
159*4a5d661aSToomas Soome #define OHCI_IRCTL(CH)		(OHCI_IROFF(CH))
160*4a5d661aSToomas Soome #define OHCI_IRCTLCLR(CH)	(OHCI_IROFF(CH) + 4)
161*4a5d661aSToomas Soome #define OHCI_IRCMD(CH)		(OHCI_IROFF(CH) + 0xc)
162*4a5d661aSToomas Soome #define OHCI_IRMATCH(CH)	(OHCI_IROFF(CH) + 0x10)
163