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_ID12(v1, v2, vh1, vh2) { \ 38 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 39 PCMCIA_DEV_ID_MATCH_PROD_ID2, \ 40 .prod_id = { (v1), (v2), NULL, NULL }, \ 41 .prod_id_hash = { (vh1), (vh2), 0, 0 }, } 42 43 #define PCMCIA_DEVICE_PROD_ID13(v1, v3, vh1, vh3) { \ 44 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 45 PCMCIA_DEV_ID_MATCH_PROD_ID3, \ 46 .prod_id = { (v1), NULL, (v3), NULL }, \ 47 .prod_id_hash = { (vh1), 0, (vh3), 0 }, } 48 49 #define PCMCIA_DEVICE_PROD_ID14(v1, v4, vh1, vh4) { \ 50 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 51 PCMCIA_DEV_ID_MATCH_PROD_ID4, \ 52 .prod_id = { (v1), NULL, NULL, (v4) }, \ 53 .prod_id_hash = { (vh1), 0, 0, (vh4) }, } 54 55 #define PCMCIA_DEVICE_PROD_ID123(v1, v2, v3, vh1, vh2, vh3) { \ 56 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 57 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 58 PCMCIA_DEV_ID_MATCH_PROD_ID3, \ 59 .prod_id = { (v1), (v2), (v3), NULL },\ 60 .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, } 61 62 #define PCMCIA_DEVICE_PROD_ID124(v1, v2, v4, vh1, vh2, vh4) { \ 63 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 64 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 65 PCMCIA_DEV_ID_MATCH_PROD_ID4, \ 66 .prod_id = { (v1), (v2), NULL, (v4) }, \ 67 .prod_id_hash = { (vh1), (vh2), 0, (vh4) }, } 68 69 #define PCMCIA_DEVICE_PROD_ID134(v1, v3, v4, vh1, vh3, vh4) { \ 70 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 71 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 72 PCMCIA_DEV_ID_MATCH_PROD_ID4, \ 73 .prod_id = { (v1), NULL, (v3), (v4) }, \ 74 .prod_id_hash = { (vh1), 0, (vh3), (vh4) }, } 75 76 #define PCMCIA_DEVICE_PROD_ID1234(v1, v2, v3, v4, vh1, vh2, vh3, vh4) { \ 77 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 78 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 79 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 80 PCMCIA_DEV_ID_MATCH_PROD_ID4, \ 81 .prod_id = { (v1), (v2), (v3), (v4) }, \ 82 .prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, } 83 84 #define PCMCIA_DEVICE_MANF_CARD_PROD_ID1(manf, card, v1, vh1) { \ 85 .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ 86 PCMCIA_DEV_ID_MATCH_CARD_ID| \ 87 PCMCIA_DEV_ID_MATCH_PROD_ID1, \ 88 .manf_id = (manf), \ 89 .card_id = (card), \ 90 .prod_id = { (v1), NULL, NULL, NULL }, \ 91 .prod_id_hash = { (vh1), 0, 0, 0 }, } 92 93 94 /* multi-function devices */ 95 96 #define PCMCIA_MFC_DEVICE_MANF_CARD(mfc, manf, card) { \ 97 .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ 98 PCMCIA_DEV_ID_MATCH_CARD_ID| \ 99 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 100 .manf_id = (manf), \ 101 .card_id = (card), \ 102 .function = (mfc), } 103 104 #define PCMCIA_MFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \ 105 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 106 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 107 .prod_id = { (v1), NULL, NULL, NULL }, \ 108 .prod_id_hash = { (vh1), 0, 0, 0 }, \ 109 .function = (mfc), } 110 111 #define PCMCIA_MFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \ 112 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 113 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 114 .prod_id = { NULL, (v2), NULL, NULL }, \ 115 .prod_id_hash = { 0, (vh2), 0, 0 }, \ 116 .function = (mfc), } 117 118 #define PCMCIA_MFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \ 119 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 120 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 121 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 122 .prod_id = { (v1), (v2), NULL, NULL }, \ 123 .prod_id_hash = { (vh1), (vh2), 0, 0 }, \ 124 .function = (mfc), } 125 126 #define PCMCIA_MFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \ 127 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 128 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 129 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 130 .prod_id = { (v1), NULL, (v3), NULL }, \ 131 .prod_id_hash = { (vh1), 0, (vh3), 0 }, \ 132 .function = (mfc), } 133 134 #define PCMCIA_MFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \ 135 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 136 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 137 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 138 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 139 .prod_id = { (v1), (v2), (v3), NULL },\ 140 .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \ 141 .function = (mfc), } 142 143 /* pseudo multi-function devices */ 144 145 #define PCMCIA_PFC_DEVICE_MANF_CARD(mfc, manf, card) { \ 146 .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ 147 PCMCIA_DEV_ID_MATCH_CARD_ID| \ 148 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 149 .manf_id = (manf), \ 150 .card_id = (card), \ 151 .device_no = (mfc), } 152 153 #define PCMCIA_PFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \ 154 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 155 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 156 .prod_id = { (v1), NULL, NULL, NULL }, \ 157 .prod_id_hash = { (vh1), 0, 0, 0 }, \ 158 .device_no = (mfc), } 159 160 #define PCMCIA_PFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \ 161 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 162 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 163 .prod_id = { NULL, (v2), NULL, NULL }, \ 164 .prod_id_hash = { 0, (vh2), 0, 0 }, \ 165 .device_no = (mfc), } 166 167 #define PCMCIA_PFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \ 168 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 169 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 170 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 171 .prod_id = { (v1), (v2), NULL, NULL }, \ 172 .prod_id_hash = { (vh1), (vh2), 0, 0 }, \ 173 .device_no = (mfc), } 174 175 #define PCMCIA_PFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \ 176 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 177 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 178 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 179 .prod_id = { (v1), NULL, (v3), NULL }, \ 180 .prod_id_hash = { (vh1), 0, (vh3), 0 }, \ 181 .device_no = (mfc), } 182 183 #define PCMCIA_PFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \ 184 .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 185 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 186 PCMCIA_DEV_ID_MATCH_PROD_ID3| \ 187 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 188 .prod_id = { (v1), (v2), (v3), NULL },\ 189 .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \ 190 .device_no = (mfc), } 191 192 /* cards needing a CIS override */ 193 194 #define PCMCIA_DEVICE_CIS_MANF_CARD(manf, card, _cisfile) { \ 195 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 196 PCMCIA_DEV_ID_MATCH_MANF_ID| \ 197 PCMCIA_DEV_ID_MATCH_CARD_ID, \ 198 .manf_id = (manf), \ 199 .card_id = (card), \ 200 .cisfile = (_cisfile)} 201 202 #define PCMCIA_DEVICE_CIS_PROD_ID12(v1, v2, vh1, vh2, _cisfile) { \ 203 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 204 PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 205 PCMCIA_DEV_ID_MATCH_PROD_ID2, \ 206 .prod_id = { (v1), (v2), NULL, NULL }, \ 207 .prod_id_hash = { (vh1), (vh2), 0, 0 }, \ 208 .cisfile = (_cisfile)} 209 210 #define PCMCIA_DEVICE_CIS_PROD_ID123(v1, v2, v3, vh1, vh2, vh3, _cisfile) { \ 211 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 212 PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 213 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 214 PCMCIA_DEV_ID_MATCH_PROD_ID3, \ 215 .prod_id = { (v1), (v2), (v3), NULL },\ 216 .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \ 217 .cisfile = (_cisfile)} 218 219 220 #define PCMCIA_DEVICE_CIS_PROD_ID2(v2, vh2, _cisfile) { \ 221 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 222 PCMCIA_DEV_ID_MATCH_PROD_ID2, \ 223 .prod_id = { NULL, (v2), NULL, NULL }, \ 224 .prod_id_hash = { 0, (vh2), 0, 0 }, \ 225 .cisfile = (_cisfile)} 226 227 #define PCMCIA_PFC_DEVICE_CIS_PROD_ID12(mfc, v1, v2, vh1, vh2, _cisfile) { \ 228 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 229 PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 230 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 231 PCMCIA_DEV_ID_MATCH_DEVICE_NO, \ 232 .prod_id = { (v1), (v2), NULL, NULL }, \ 233 .prod_id_hash = { (vh1), (vh2), 0, 0 },\ 234 .device_no = (mfc), \ 235 .cisfile = (_cisfile)} 236 237 #define PCMCIA_MFC_DEVICE_CIS_MANF_CARD(mfc, manf, card, _cisfile) { \ 238 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 239 PCMCIA_DEV_ID_MATCH_MANF_ID| \ 240 PCMCIA_DEV_ID_MATCH_CARD_ID| \ 241 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 242 .manf_id = (manf), \ 243 .card_id = (card), \ 244 .function = (mfc), \ 245 .cisfile = (_cisfile)} 246 247 #define PCMCIA_MFC_DEVICE_CIS_PROD_ID12(mfc, v1, v2, vh1, vh2, _cisfile) { \ 248 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 249 PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 250 PCMCIA_DEV_ID_MATCH_PROD_ID2| \ 251 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 252 .prod_id = { (v1), (v2), NULL, NULL }, \ 253 .prod_id_hash = { (vh1), (vh2), 0, 0 }, \ 254 .function = (mfc), \ 255 .cisfile = (_cisfile)} 256 257 #define PCMCIA_MFC_DEVICE_CIS_PROD_ID4(mfc, v4, vh4, _cisfile) { \ 258 .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \ 259 PCMCIA_DEV_ID_MATCH_PROD_ID4| \ 260 PCMCIA_DEV_ID_MATCH_FUNCTION, \ 261 .prod_id = { NULL, NULL, NULL, (v4) }, \ 262 .prod_id_hash = { 0, 0, 0, (vh4) }, \ 263 .function = (mfc), \ 264 .cisfile = (_cisfile)} 265 266 267 #define PCMCIA_DEVICE_NULL { .match_flags = 0, } 268 269 #endif /* __KERNEL__ */ 270 #endif /* _LINUX_PCMCIA_DEVICE_ID_H */ 271