xref: /OK3568_Linux_fs/u-boot/include/pcmcia.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2000-2004
3*4882a593Smuzhiyun  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _PCMCIA_H
9*4882a593Smuzhiyun #define _PCMCIA_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <common.h>
12*4882a593Smuzhiyun #include <config.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /*
15*4882a593Smuzhiyun  * Allow configuration to select PCMCIA slot,
16*4882a593Smuzhiyun  * or try to generate a useful default
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun #if defined(CONFIG_CMD_PCMCIA)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
21*4882a593Smuzhiyun # error "PCMCIA Slot not configured"
22*4882a593Smuzhiyun #endif /* !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /* Make sure exactly one slot is defined - we support only one for now */
25*4882a593Smuzhiyun #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
26*4882a593Smuzhiyun #error Neither CONFIG_PCMCIA_SLOT_A nor CONFIG_PCMCIA_SLOT_B configured
27*4882a593Smuzhiyun #endif
28*4882a593Smuzhiyun #if defined(CONFIG_PCMCIA_SLOT_A) && defined(CONFIG_PCMCIA_SLOT_B)
29*4882a593Smuzhiyun #error Both CONFIG_PCMCIA_SLOT_A and CONFIG_PCMCIA_SLOT_B configured
30*4882a593Smuzhiyun #endif
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #ifndef PCMCIA_SOCKETS_NO
33*4882a593Smuzhiyun #define PCMCIA_SOCKETS_NO	1
34*4882a593Smuzhiyun #endif
35*4882a593Smuzhiyun #ifndef PCMCIA_MEM_WIN_NO
36*4882a593Smuzhiyun #define PCMCIA_MEM_WIN_NO	4
37*4882a593Smuzhiyun #endif
38*4882a593Smuzhiyun #define PCMCIA_IO_WIN_NO	2
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* define _slot_ to be able to optimize macros */
41*4882a593Smuzhiyun #ifdef CONFIG_PCMCIA_SLOT_A
42*4882a593Smuzhiyun # define _slot_			0
43*4882a593Smuzhiyun # define PCMCIA_SLOT_MSG	"slot A"
44*4882a593Smuzhiyun # define PCMCIA_SLOT_x		PCMCIA_PSLOT_A
45*4882a593Smuzhiyun #else
46*4882a593Smuzhiyun # define _slot_			1
47*4882a593Smuzhiyun # define PCMCIA_SLOT_MSG	"slot B"
48*4882a593Smuzhiyun # define PCMCIA_SLOT_x		PCMCIA_PSLOT_B
49*4882a593Smuzhiyun #endif
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /*
52*4882a593Smuzhiyun  * This structure is used to address each window in the PCMCIA controller.
53*4882a593Smuzhiyun  *
54*4882a593Smuzhiyun  * Keep in mind that we assume that pcmcia_win_t[n+1] is mapped directly
55*4882a593Smuzhiyun  * after pcmcia_win_t[n]...
56*4882a593Smuzhiyun  */
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun typedef struct {
59*4882a593Smuzhiyun 	ulong	br;
60*4882a593Smuzhiyun 	ulong	or;
61*4882a593Smuzhiyun } pcmcia_win_t;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /*
64*4882a593Smuzhiyun  * Definitions for PCMCIA control registers to operate in IDE mode
65*4882a593Smuzhiyun  *
66*4882a593Smuzhiyun  * All timing related setup (PCMCIA_SHT, PCMCIA_SST, PCMCIA_SL)
67*4882a593Smuzhiyun  * to be done later (depending on CPU clock)
68*4882a593Smuzhiyun  */
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /* Window 0:
71*4882a593Smuzhiyun  *	Base: 0xFE100000	CS1
72*4882a593Smuzhiyun  *	Port Size:     2 Bytes
73*4882a593Smuzhiyun  *	Port Size:    16 Bit
74*4882a593Smuzhiyun  *	Common Memory Space
75*4882a593Smuzhiyun  */
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR0		0xFE100000
78*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR0	    (	PCMCIA_BSIZE_2	\
79*4882a593Smuzhiyun 			    |	PCMCIA_PPS_16	\
80*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
81*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
82*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
83*4882a593Smuzhiyun 			    )
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* Window 1:
86*4882a593Smuzhiyun  *	Base: 0xFE100080	CS1
87*4882a593Smuzhiyun  *	Port Size:     8 Bytes
88*4882a593Smuzhiyun  *	Port Size:     8 Bit
89*4882a593Smuzhiyun  *	Common Memory Space
90*4882a593Smuzhiyun  */
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR1		0xFE100080
93*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR1	    (	PCMCIA_BSIZE_8	\
94*4882a593Smuzhiyun 			    |	PCMCIA_PPS_8	\
95*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
96*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
97*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
98*4882a593Smuzhiyun 			    )
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* Window 2:
101*4882a593Smuzhiyun  *	Base: 0xFE100100	CS2
102*4882a593Smuzhiyun  *	Port Size:     8 Bytes
103*4882a593Smuzhiyun  *	Port Size:     8 Bit
104*4882a593Smuzhiyun  *	Common Memory Space
105*4882a593Smuzhiyun  */
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR2		0xFE100100
108*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR2	    (	PCMCIA_BSIZE_8	\
109*4882a593Smuzhiyun 			    |	PCMCIA_PPS_8	\
110*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
111*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
112*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
113*4882a593Smuzhiyun 			    )
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun /* Window 3:
116*4882a593Smuzhiyun  *	not used
117*4882a593Smuzhiyun  */
118*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR3		0
119*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR3		0
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /* Window 4:
122*4882a593Smuzhiyun  *	Base: 0xFE100C00	CS1
123*4882a593Smuzhiyun  *	Port Size:     2 Bytes
124*4882a593Smuzhiyun  *	Port Size:    16 Bit
125*4882a593Smuzhiyun  *	Common Memory Space
126*4882a593Smuzhiyun  */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR4		0xFE100C00
129*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR4	    (	PCMCIA_BSIZE_2	\
130*4882a593Smuzhiyun 			    |	PCMCIA_PPS_16	\
131*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
132*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
133*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
134*4882a593Smuzhiyun 			    )
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* Window 5:
137*4882a593Smuzhiyun  *	Base: 0xFE100C80	CS1
138*4882a593Smuzhiyun  *	Port Size:     8 Bytes
139*4882a593Smuzhiyun  *	Port Size:     8 Bit
140*4882a593Smuzhiyun  *	Common Memory Space
141*4882a593Smuzhiyun  */
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR5		0xFE100C80
144*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR5	    (	PCMCIA_BSIZE_8	\
145*4882a593Smuzhiyun 			    |	PCMCIA_PPS_8	\
146*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
147*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
148*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
149*4882a593Smuzhiyun 			    )
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun /* Window 6:
152*4882a593Smuzhiyun  *	Base: 0xFE100D00	CS2
153*4882a593Smuzhiyun  *	Port Size:     8 Bytes
154*4882a593Smuzhiyun  *	Port Size:     8 Bit
155*4882a593Smuzhiyun  *	Common Memory Space
156*4882a593Smuzhiyun  */
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR6		0xFE100D00
159*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR6	    (	PCMCIA_BSIZE_8	\
160*4882a593Smuzhiyun 			    |	PCMCIA_PPS_8	\
161*4882a593Smuzhiyun 			    |	PCMCIA_PRS_MEM	\
162*4882a593Smuzhiyun 			    |	PCMCIA_SLOT_x	\
163*4882a593Smuzhiyun 			    |	PCMCIA_PV	\
164*4882a593Smuzhiyun 			    )
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* Window 7:
167*4882a593Smuzhiyun  *	not used
168*4882a593Smuzhiyun  */
169*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR7		0
170*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR7		0
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /**********************************************************************/
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun /*
175*4882a593Smuzhiyun  * CIS Tupel codes
176*4882a593Smuzhiyun  */
177*4882a593Smuzhiyun #define CISTPL_NULL		0x00
178*4882a593Smuzhiyun #define CISTPL_DEVICE		0x01
179*4882a593Smuzhiyun #define CISTPL_LONGLINK_CB	0x02
180*4882a593Smuzhiyun #define CISTPL_INDIRECT		0x03
181*4882a593Smuzhiyun #define CISTPL_CONFIG_CB	0x04
182*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY_CB 0x05
183*4882a593Smuzhiyun #define CISTPL_LONGLINK_MFC	0x06
184*4882a593Smuzhiyun #define CISTPL_BAR		0x07
185*4882a593Smuzhiyun #define CISTPL_PWR_MGMNT	0x08
186*4882a593Smuzhiyun #define CISTPL_EXTDEVICE	0x09
187*4882a593Smuzhiyun #define CISTPL_CHECKSUM		0x10
188*4882a593Smuzhiyun #define CISTPL_LONGLINK_A	0x11
189*4882a593Smuzhiyun #define CISTPL_LONGLINK_C	0x12
190*4882a593Smuzhiyun #define CISTPL_LINKTARGET	0x13
191*4882a593Smuzhiyun #define CISTPL_NO_LINK		0x14
192*4882a593Smuzhiyun #define CISTPL_VERS_1		0x15
193*4882a593Smuzhiyun #define CISTPL_ALTSTR		0x16
194*4882a593Smuzhiyun #define CISTPL_DEVICE_A		0x17
195*4882a593Smuzhiyun #define CISTPL_JEDEC_C		0x18
196*4882a593Smuzhiyun #define CISTPL_JEDEC_A		0x19
197*4882a593Smuzhiyun #define CISTPL_CONFIG		0x1a
198*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY	0x1b
199*4882a593Smuzhiyun #define CISTPL_DEVICE_OC	0x1c
200*4882a593Smuzhiyun #define CISTPL_DEVICE_OA	0x1d
201*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO	0x1e
202*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO_A	0x1f
203*4882a593Smuzhiyun #define CISTPL_MANFID		0x20
204*4882a593Smuzhiyun #define CISTPL_FUNCID		0x21
205*4882a593Smuzhiyun #define CISTPL_FUNCE		0x22
206*4882a593Smuzhiyun #define CISTPL_SWIL		0x23
207*4882a593Smuzhiyun #define CISTPL_END		0xff
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun /*
210*4882a593Smuzhiyun  * CIS Function ID codes
211*4882a593Smuzhiyun  */
212*4882a593Smuzhiyun #define CISTPL_FUNCID_MULTI	0x00
213*4882a593Smuzhiyun #define CISTPL_FUNCID_MEMORY	0x01
214*4882a593Smuzhiyun #define CISTPL_FUNCID_SERIAL	0x02
215*4882a593Smuzhiyun #define CISTPL_FUNCID_PARALLEL	0x03
216*4882a593Smuzhiyun #define CISTPL_FUNCID_FIXED	0x04
217*4882a593Smuzhiyun #define CISTPL_FUNCID_VIDEO	0x05
218*4882a593Smuzhiyun #define CISTPL_FUNCID_NETWORK	0x06
219*4882a593Smuzhiyun #define CISTPL_FUNCID_AIMS	0x07
220*4882a593Smuzhiyun #define CISTPL_FUNCID_SCSI	0x08
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /*
223*4882a593Smuzhiyun  * Fixed Disk FUNCE codes
224*4882a593Smuzhiyun  */
225*4882a593Smuzhiyun #define CISTPL_IDE_INTERFACE	0x01
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_IFACE	0x01
228*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_MASTER	0x02
229*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_SLAVE	0x03
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /* First feature byte */
232*4882a593Smuzhiyun #define CISTPL_IDE_SILICON	0x04
233*4882a593Smuzhiyun #define CISTPL_IDE_UNIQUE	0x08
234*4882a593Smuzhiyun #define CISTPL_IDE_DUAL		0x10
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /* Second feature byte */
237*4882a593Smuzhiyun #define CISTPL_IDE_HAS_SLEEP	0x01
238*4882a593Smuzhiyun #define CISTPL_IDE_HAS_STANDBY	0x02
239*4882a593Smuzhiyun #define CISTPL_IDE_HAS_IDLE	0x04
240*4882a593Smuzhiyun #define CISTPL_IDE_LOW_POWER	0x08
241*4882a593Smuzhiyun #define CISTPL_IDE_REG_INHIBIT	0x10
242*4882a593Smuzhiyun #define CISTPL_IDE_HAS_INDEX	0x20
243*4882a593Smuzhiyun #define CISTPL_IDE_IOIS16	0x40
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun #endif
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun #endif /* _PCMCIA_H */
248