Merge commit 'v2.6.34-rc6' into core/locking
[pandora-kernel.git] / include / pcmcia / device_id.h
1 /*
2  * device_id.h -- PCMCIA driver matching helpers
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * (C) 2003 - 2004      David Woodhouse
9  * (C) 2003 - 2004      Dominik Brodowski
10  */
11
12 #ifndef _LINUX_PCMCIA_DEVICE_ID_H
13 #define _LINUX_PCMCIA_DEVICE_ID_H
14
15 #ifdef __KERNEL__
16
17 #define PCMCIA_DEVICE_MANF_CARD(manf, card) { \
18         .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
19                         PCMCIA_DEV_ID_MATCH_CARD_ID, \
20         .manf_id = (manf), \
21         .card_id = (card), }
22
23 #define PCMCIA_DEVICE_FUNC_ID(func) { \
24         .match_flags = PCMCIA_DEV_ID_MATCH_FUNC_ID, \
25         .func_id = (func), }
26
27 #define PCMCIA_DEVICE_PROD_ID1(v1, vh1) { \
28         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1, \
29         .prod_id = { (v1), NULL, NULL, NULL }, \
30         .prod_id_hash = { (vh1), 0, 0, 0 }, }
31
32 #define PCMCIA_DEVICE_PROD_ID2(v2, vh2) { \
33         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2, \
34         .prod_id = { NULL, (v2), NULL, NULL },  \
35         .prod_id_hash = { 0, (vh2), 0, 0 }, }
36
37 #define PCMCIA_DEVICE_PROD_ID3(v3, vh3) { \
38         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID3, \
39         .prod_id = { NULL, NULL, (v3), NULL },  \
40         .prod_id_hash = { 0, 0, (vh3), 0 }, }
41
42 #define PCMCIA_DEVICE_PROD_ID12(v1, v2, vh1, vh2) { \
43         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
44                         PCMCIA_DEV_ID_MATCH_PROD_ID2, \
45         .prod_id = { (v1), (v2), NULL, NULL }, \
46         .prod_id_hash = { (vh1), (vh2), 0, 0 }, }
47
48 #define PCMCIA_DEVICE_PROD_ID13(v1, v3, vh1, vh3) { \
49         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
50                         PCMCIA_DEV_ID_MATCH_PROD_ID3, \
51         .prod_id = { (v1), NULL, (v3), NULL }, \
52         .prod_id_hash = { (vh1), 0, (vh3), 0 }, }
53
54 #define PCMCIA_DEVICE_PROD_ID14(v1, v4, vh1, vh4) { \
55         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
56                         PCMCIA_DEV_ID_MATCH_PROD_ID4, \
57         .prod_id = { (v1), NULL, NULL, (v4) }, \
58         .prod_id_hash = { (vh1), 0, 0, (vh4) }, }
59
60 #define PCMCIA_DEVICE_PROD_ID123(v1, v2, v3, vh1, vh2, vh3) { \
61         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
62                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
63                         PCMCIA_DEV_ID_MATCH_PROD_ID3, \
64         .prod_id = { (v1), (v2), (v3), NULL },\
65         .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, }
66
67 #define PCMCIA_DEVICE_PROD_ID124(v1, v2, v4, vh1, vh2, vh4) { \
68         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
69                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
70                         PCMCIA_DEV_ID_MATCH_PROD_ID4, \
71         .prod_id = { (v1), (v2), NULL, (v4) }, \
72         .prod_id_hash = { (vh1), (vh2), 0, (vh4) }, }
73
74 #define PCMCIA_DEVICE_PROD_ID134(v1, v3, v4, vh1, vh3, vh4) { \
75         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
76                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
77                         PCMCIA_DEV_ID_MATCH_PROD_ID4, \
78         .prod_id = { (v1), NULL, (v3), (v4) }, \
79         .prod_id_hash = { (vh1), 0, (vh3), (vh4) }, }
80
81 #define PCMCIA_DEVICE_PROD_ID1234(v1, v2, v3, v4, vh1, vh2, vh3, vh4) { \
82         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
83                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
84                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
85                         PCMCIA_DEV_ID_MATCH_PROD_ID4, \
86         .prod_id = { (v1), (v2), (v3), (v4) }, \
87         .prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, }
88
89 #define PCMCIA_DEVICE_MANF_CARD_PROD_ID1(manf, card, v1, vh1) { \
90         .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
91                         PCMCIA_DEV_ID_MATCH_CARD_ID| \
92                         PCMCIA_DEV_ID_MATCH_PROD_ID1, \
93         .manf_id = (manf), \
94         .card_id = (card), \
95         .prod_id = { (v1), NULL, NULL, NULL }, \
96         .prod_id_hash = { (vh1), 0, 0, 0 }, }
97
98
99 /* multi-function devices */
100
101 #define PCMCIA_MFC_DEVICE_MANF_CARD(mfc, manf, card) { \
102         .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
103                         PCMCIA_DEV_ID_MATCH_CARD_ID| \
104                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
105         .manf_id = (manf), \
106         .card_id = (card), \
107         .function = (mfc), }
108
109 #define PCMCIA_MFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \
110         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
111                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
112         .prod_id = { (v1), NULL, NULL, NULL }, \
113         .prod_id_hash = { (vh1), 0, 0, 0 }, \
114         .function = (mfc), }
115
116 #define PCMCIA_MFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
117         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
118                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
119         .prod_id = { NULL, (v2), NULL, NULL },  \
120         .prod_id_hash = { 0, (vh2), 0, 0 }, \
121         .function = (mfc), }
122
123 #define PCMCIA_MFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
124         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
125                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
126                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
127         .prod_id = { (v1), (v2), NULL, NULL }, \
128         .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
129         .function = (mfc), }
130
131 #define PCMCIA_MFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
132         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
133                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
134                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
135         .prod_id = { (v1), NULL, (v3), NULL }, \
136         .prod_id_hash = { (vh1), 0, (vh3), 0 }, \
137         .function = (mfc), }
138
139 #define PCMCIA_MFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
140         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
141                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
142                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
143                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
144         .prod_id = { (v1), (v2), (v3), NULL },\
145         .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
146         .function = (mfc), }
147
148 /* pseudo multi-function devices */
149
150 #define PCMCIA_PFC_DEVICE_MANF_CARD(mfc, manf, card) { \
151         .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
152                         PCMCIA_DEV_ID_MATCH_CARD_ID| \
153                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
154         .manf_id = (manf), \
155         .card_id = (card), \
156         .device_no = (mfc), }
157
158 #define PCMCIA_PFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \
159         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
160                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
161         .prod_id = { (v1), NULL, NULL, NULL }, \
162         .prod_id_hash = { (vh1), 0, 0, 0 }, \
163         .device_no = (mfc), }
164
165 #define PCMCIA_PFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
166         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
167                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
168         .prod_id = { NULL, (v2), NULL, NULL },  \
169         .prod_id_hash = { 0, (vh2), 0, 0 }, \
170         .device_no = (mfc), }
171
172 #define PCMCIA_PFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
173         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
174                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
175                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
176         .prod_id = { (v1), (v2), NULL, NULL }, \
177         .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
178         .device_no = (mfc), }
179
180 #define PCMCIA_PFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
181         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
182                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
183                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
184         .prod_id = { (v1), NULL, (v3), NULL }, \
185         .prod_id_hash = { (vh1), 0, (vh3), 0 }, \
186         .device_no = (mfc), }
187
188 #define PCMCIA_PFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
189         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
190                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
191                         PCMCIA_DEV_ID_MATCH_PROD_ID3| \
192                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
193         .prod_id = { (v1), (v2), (v3), NULL },\
194         .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
195         .device_no = (mfc), }
196
197 /* cards needing a CIS override */
198
199 #define PCMCIA_DEVICE_CIS_MANF_CARD(manf, card, _cisfile) { \
200         .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
201                         PCMCIA_DEV_ID_MATCH_MANF_ID| \
202                         PCMCIA_DEV_ID_MATCH_CARD_ID, \
203         .manf_id = (manf), \
204         .card_id = (card), \
205         .cisfile = (_cisfile)}
206
207 #define PCMCIA_DEVICE_CIS_PROD_ID12(v1, v2, vh1, vh2, _cisfile) { \
208         .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
209                         PCMCIA_DEV_ID_MATCH_PROD_ID1| \
210                         PCMCIA_DEV_ID_MATCH_PROD_ID2, \
211         .prod_id = { (v1), (v2), NULL, NULL }, \
212         .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
213         .cisfile = (_cisfile)}
214
215 #define PCMCIA_DEVICE_CIS_PROD_ID123(v1, v2, v3, vh1, vh2, vh3, _cisfile) { \
216         .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
217                         PCMCIA_DEV_ID_MATCH_PROD_ID1| \
218                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
219                         PCMCIA_DEV_ID_MATCH_PROD_ID3, \
220         .prod_id = { (v1), (v2), (v3), NULL },\
221         .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
222         .cisfile = (_cisfile)}
223
224
225 #define PCMCIA_DEVICE_CIS_PROD_ID2(v2, vh2, _cisfile) { \
226         .match_flags =  PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
227                         PCMCIA_DEV_ID_MATCH_PROD_ID2, \
228         .prod_id = { NULL, (v2), NULL, NULL },  \
229         .prod_id_hash = { 0, (vh2), 0, 0 }, \
230         .cisfile = (_cisfile)}
231
232 #define PCMCIA_PFC_DEVICE_CIS_PROD_ID12(mfc, v1, v2, vh1, vh2, _cisfile) { \
233         .match_flags =  PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
234                         PCMCIA_DEV_ID_MATCH_PROD_ID1| \
235                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
236                         PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
237         .prod_id = { (v1), (v2), NULL, NULL }, \
238         .prod_id_hash = { (vh1), (vh2), 0, 0 },\
239         .device_no = (mfc), \
240         .cisfile = (_cisfile)}
241
242 #define PCMCIA_MFC_DEVICE_CIS_MANF_CARD(mfc, manf, card, _cisfile) { \
243         .match_flags =  PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
244                         PCMCIA_DEV_ID_MATCH_MANF_ID| \
245                         PCMCIA_DEV_ID_MATCH_CARD_ID| \
246                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
247         .manf_id = (manf), \
248         .card_id = (card), \
249         .function = (mfc), \
250         .cisfile = (_cisfile)}
251
252 #define PCMCIA_MFC_DEVICE_CIS_PROD_ID12(mfc, v1, v2, vh1, vh2, _cisfile) { \
253         .match_flags =  PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
254                         PCMCIA_DEV_ID_MATCH_PROD_ID1| \
255                         PCMCIA_DEV_ID_MATCH_PROD_ID2| \
256                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
257         .prod_id = { (v1), (v2), NULL, NULL }, \
258         .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
259         .function = (mfc), \
260         .cisfile = (_cisfile)}
261
262 #define PCMCIA_MFC_DEVICE_CIS_PROD_ID4(mfc, v4, vh4, _cisfile) { \
263         .match_flags =  PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
264                         PCMCIA_DEV_ID_MATCH_PROD_ID4| \
265                         PCMCIA_DEV_ID_MATCH_FUNCTION, \
266         .prod_id = { NULL, NULL, NULL, (v4) }, \
267         .prod_id_hash = { 0, 0, 0, (vh4) }, \
268         .function = (mfc), \
269         .cisfile = (_cisfile)}
270
271
272 #define PCMCIA_DEVICE_NULL { .match_flags = 0, }
273
274 #endif /* __KERNEL__ */
275 #endif /* _LINUX_PCMCIA_DEVICE_ID_H */