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