xref: /OK3568_Linux_fs/kernel/drivers/pcmcia/yenta_socket.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __YENTA_H
3*4882a593Smuzhiyun #define __YENTA_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <asm/io.h>
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define CB_SOCKET_EVENT		0x00
8*4882a593Smuzhiyun #define    CB_CSTSEVENT		0x00000001	/* Card status event */
9*4882a593Smuzhiyun #define    CB_CD1EVENT		0x00000002	/* Card detect 1 change event */
10*4882a593Smuzhiyun #define    CB_CD2EVENT		0x00000004	/* Card detect 2 change event */
11*4882a593Smuzhiyun #define    CB_PWREVENT		0x00000008	/* PWRCYCLE change event */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define CB_SOCKET_MASK		0x04
14*4882a593Smuzhiyun #define    CB_CSTSMASK		0x00000001	/* Card status mask */
15*4882a593Smuzhiyun #define    CB_CDMASK		0x00000006	/* Card detect 1&2 mask */
16*4882a593Smuzhiyun #define    CB_PWRMASK		0x00000008	/* PWRCYCLE change mask */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define CB_SOCKET_STATE		0x08
19*4882a593Smuzhiyun #define    CB_CARDSTS		0x00000001	/* CSTSCHG status */
20*4882a593Smuzhiyun #define    CB_CDETECT1		0x00000002	/* Card detect status 1 */
21*4882a593Smuzhiyun #define    CB_CDETECT2		0x00000004	/* Card detect status 2 */
22*4882a593Smuzhiyun #define    CB_PWRCYCLE		0x00000008	/* Socket powered */
23*4882a593Smuzhiyun #define    CB_16BITCARD		0x00000010	/* 16-bit card detected */
24*4882a593Smuzhiyun #define    CB_CBCARD		0x00000020	/* CardBus card detected */
25*4882a593Smuzhiyun #define    CB_IREQCINT		0x00000040	/* READY(xIRQ)/xCINT high */
26*4882a593Smuzhiyun #define    CB_NOTACARD		0x00000080	/* Unrecognizable PC card detected */
27*4882a593Smuzhiyun #define    CB_DATALOST		0x00000100	/* Potential data loss due to card removal */
28*4882a593Smuzhiyun #define    CB_BADVCCREQ		0x00000200	/* Invalid Vcc request by host software */
29*4882a593Smuzhiyun #define    CB_5VCARD		0x00000400	/* Card Vcc at 5.0 volts? */
30*4882a593Smuzhiyun #define    CB_3VCARD		0x00000800	/* Card Vcc at 3.3 volts? */
31*4882a593Smuzhiyun #define    CB_XVCARD		0x00001000	/* Card Vcc at X.X volts? */
32*4882a593Smuzhiyun #define    CB_YVCARD		0x00002000	/* Card Vcc at Y.Y volts? */
33*4882a593Smuzhiyun #define    CB_5VSOCKET		0x10000000	/* Socket Vcc at 5.0 volts? */
34*4882a593Smuzhiyun #define    CB_3VSOCKET		0x20000000	/* Socket Vcc at 3.3 volts? */
35*4882a593Smuzhiyun #define    CB_XVSOCKET		0x40000000	/* Socket Vcc at X.X volts? */
36*4882a593Smuzhiyun #define    CB_YVSOCKET		0x80000000	/* Socket Vcc at Y.Y volts? */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #define CB_SOCKET_FORCE		0x0C
39*4882a593Smuzhiyun #define    CB_FCARDSTS		0x00000001	/* Force CSTSCHG */
40*4882a593Smuzhiyun #define    CB_FCDETECT1		0x00000002	/* Force CD1EVENT */
41*4882a593Smuzhiyun #define    CB_FCDETECT2		0x00000004	/* Force CD2EVENT */
42*4882a593Smuzhiyun #define    CB_FPWRCYCLE		0x00000008	/* Force PWREVENT */
43*4882a593Smuzhiyun #define    CB_F16BITCARD	0x00000010	/* Force 16-bit PCMCIA card */
44*4882a593Smuzhiyun #define    CB_FCBCARD		0x00000020	/* Force CardBus line */
45*4882a593Smuzhiyun #define    CB_FNOTACARD		0x00000080	/* Force NOTACARD */
46*4882a593Smuzhiyun #define    CB_FDATALOST		0x00000100	/* Force data lost */
47*4882a593Smuzhiyun #define    CB_FBADVCCREQ	0x00000200	/* Force bad Vcc request */
48*4882a593Smuzhiyun #define    CB_F5VCARD		0x00000400	/* Force 5.0 volt card */
49*4882a593Smuzhiyun #define    CB_F3VCARD		0x00000800	/* Force 3.3 volt card */
50*4882a593Smuzhiyun #define    CB_FXVCARD		0x00001000	/* Force X.X volt card */
51*4882a593Smuzhiyun #define    CB_FYVCARD		0x00002000	/* Force Y.Y volt card */
52*4882a593Smuzhiyun #define    CB_CVSTEST		0x00004000	/* Card VS test */
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define CB_SOCKET_CONTROL	0x10
55*4882a593Smuzhiyun #define  CB_SC_VPP_MASK		0x00000007
56*4882a593Smuzhiyun #define   CB_SC_VPP_OFF		0x00000000
57*4882a593Smuzhiyun #define   CB_SC_VPP_12V		0x00000001
58*4882a593Smuzhiyun #define   CB_SC_VPP_5V		0x00000002
59*4882a593Smuzhiyun #define   CB_SC_VPP_3V		0x00000003
60*4882a593Smuzhiyun #define   CB_SC_VPP_XV		0x00000004
61*4882a593Smuzhiyun #define   CB_SC_VPP_YV		0x00000005
62*4882a593Smuzhiyun #define  CB_SC_VCC_MASK		0x00000070
63*4882a593Smuzhiyun #define   CB_SC_VCC_OFF		0x00000000
64*4882a593Smuzhiyun #define   CB_SC_VCC_5V		0x00000020
65*4882a593Smuzhiyun #define   CB_SC_VCC_3V		0x00000030
66*4882a593Smuzhiyun #define   CB_SC_VCC_XV		0x00000040
67*4882a593Smuzhiyun #define   CB_SC_VCC_YV		0x00000050
68*4882a593Smuzhiyun #define  CB_SC_CCLK_STOP	0x00000080
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define CB_SOCKET_POWER		0x20
71*4882a593Smuzhiyun #define    CB_SKTACCES		0x02000000	/* A PC card access has occurred (clear on read) */
72*4882a593Smuzhiyun #define    CB_SKTMODE		0x01000000	/* Clock frequency has changed (clear on read) */
73*4882a593Smuzhiyun #define    CB_CLKCTRLEN		0x00010000	/* Clock control enabled (RW) */
74*4882a593Smuzhiyun #define    CB_CLKCTRL		0x00000001	/* Stop(0) or slow(1) CB clock (RW) */
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /*
77*4882a593Smuzhiyun  * Cardbus configuration space
78*4882a593Smuzhiyun  */
79*4882a593Smuzhiyun #define CB_BRIDGE_BASE(m)	(0x1c + 8*(m))
80*4882a593Smuzhiyun #define CB_BRIDGE_LIMIT(m)	(0x20 + 8*(m))
81*4882a593Smuzhiyun #define CB_BRIDGE_CONTROL	0x3e
82*4882a593Smuzhiyun #define   CB_BRIDGE_CPERREN	0x00000001
83*4882a593Smuzhiyun #define   CB_BRIDGE_CSERREN	0x00000002
84*4882a593Smuzhiyun #define   CB_BRIDGE_ISAEN	0x00000004
85*4882a593Smuzhiyun #define   CB_BRIDGE_VGAEN	0x00000008
86*4882a593Smuzhiyun #define   CB_BRIDGE_MABTMODE	0x00000020
87*4882a593Smuzhiyun #define   CB_BRIDGE_CRST	0x00000040
88*4882a593Smuzhiyun #define   CB_BRIDGE_INTR	0x00000080
89*4882a593Smuzhiyun #define   CB_BRIDGE_PREFETCH0	0x00000100
90*4882a593Smuzhiyun #define   CB_BRIDGE_PREFETCH1	0x00000200
91*4882a593Smuzhiyun #define   CB_BRIDGE_POSTEN	0x00000400
92*4882a593Smuzhiyun #define CB_LEGACY_MODE_BASE	0x44
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /*
95*4882a593Smuzhiyun  * ExCA area extensions in Yenta
96*4882a593Smuzhiyun  */
97*4882a593Smuzhiyun #define CB_MEM_PAGE(map)	(0x40 + (map))
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* control how 16bit cards are powered */
101*4882a593Smuzhiyun #define YENTA_16BIT_POWER_EXCA	0x00000001
102*4882a593Smuzhiyun #define YENTA_16BIT_POWER_DF	0x00000002
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun struct yenta_socket;
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun struct cardbus_type {
108*4882a593Smuzhiyun 	int	(*override)(struct yenta_socket *);
109*4882a593Smuzhiyun 	void	(*save_state)(struct yenta_socket *);
110*4882a593Smuzhiyun 	void	(*restore_state)(struct yenta_socket *);
111*4882a593Smuzhiyun 	int	(*sock_init)(struct yenta_socket *);
112*4882a593Smuzhiyun };
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun struct yenta_socket {
115*4882a593Smuzhiyun 	struct pci_dev *dev;
116*4882a593Smuzhiyun 	int cb_irq, io_irq;
117*4882a593Smuzhiyun 	void __iomem *base;
118*4882a593Smuzhiyun 	struct timer_list poll_timer;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 	struct pcmcia_socket socket;
121*4882a593Smuzhiyun 	struct cardbus_type *type;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun 	u32 flags;
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	/* for PCI interrupt probing */
126*4882a593Smuzhiyun 	unsigned int probe_status;
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun 	/* A few words of private data for special stuff of overrides... */
129*4882a593Smuzhiyun 	unsigned int private[8];
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun 	/* PCI saved state */
132*4882a593Smuzhiyun 	u32 saved_state[2];
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun #endif
137