device_id.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * device_id.h -- PCMCIA driver matching helpers
  4. *
  5. * (C) 2003 - 2004 David Woodhouse
  6. * (C) 2003 - 2004 Dominik Brodowski
  7. */
  8. #ifndef _LINUX_PCMCIA_DEVICE_ID_H
  9. #define _LINUX_PCMCIA_DEVICE_ID_H
  10. #ifdef __KERNEL__
  11. #define PCMCIA_DEVICE_MANF_CARD(manf, card) { \
  12. .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
  13. PCMCIA_DEV_ID_MATCH_CARD_ID, \
  14. .manf_id = (manf), \
  15. .card_id = (card), }
  16. #define PCMCIA_DEVICE_FUNC_ID(func) { \
  17. .match_flags = PCMCIA_DEV_ID_MATCH_FUNC_ID, \
  18. .func_id = (func), }
  19. #define PCMCIA_DEVICE_PROD_ID1(v1, vh1) { \
  20. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1, \
  21. .prod_id = { (v1), NULL, NULL, NULL }, \
  22. .prod_id_hash = { (vh1), 0, 0, 0 }, }
  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. #define PCMCIA_DEVICE_PROD_ID3(v3, vh3) { \
  28. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID3, \
  29. .prod_id = { NULL, NULL, (v3), NULL }, \
  30. .prod_id_hash = { 0, 0, (vh3), 0 }, }
  31. #define PCMCIA_DEVICE_PROD_ID12(v1, v2, vh1, vh2) { \
  32. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  33. PCMCIA_DEV_ID_MATCH_PROD_ID2, \
  34. .prod_id = { (v1), (v2), NULL, NULL }, \
  35. .prod_id_hash = { (vh1), (vh2), 0, 0 }, }
  36. #define PCMCIA_DEVICE_PROD_ID13(v1, v3, vh1, vh3) { \
  37. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  38. PCMCIA_DEV_ID_MATCH_PROD_ID3, \
  39. .prod_id = { (v1), NULL, (v3), NULL }, \
  40. .prod_id_hash = { (vh1), 0, (vh3), 0 }, }
  41. #define PCMCIA_DEVICE_PROD_ID14(v1, v4, vh1, vh4) { \
  42. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  43. PCMCIA_DEV_ID_MATCH_PROD_ID4, \
  44. .prod_id = { (v1), NULL, NULL, (v4) }, \
  45. .prod_id_hash = { (vh1), 0, 0, (vh4) }, }
  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. #define PCMCIA_DEVICE_PROD_ID124(v1, v2, v4, vh1, vh2, vh4) { \
  53. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  54. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  55. PCMCIA_DEV_ID_MATCH_PROD_ID4, \
  56. .prod_id = { (v1), (v2), NULL, (v4) }, \
  57. .prod_id_hash = { (vh1), (vh2), 0, (vh4) }, }
  58. #define PCMCIA_DEVICE_PROD_ID134(v1, v3, v4, vh1, vh3, vh4) { \
  59. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  60. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  61. PCMCIA_DEV_ID_MATCH_PROD_ID4, \
  62. .prod_id = { (v1), NULL, (v3), (v4) }, \
  63. .prod_id_hash = { (vh1), 0, (vh3), (vh4) }, }
  64. #define PCMCIA_DEVICE_PROD_ID1234(v1, v2, v3, v4, vh1, vh2, vh3, vh4) { \
  65. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  66. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  67. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  68. PCMCIA_DEV_ID_MATCH_PROD_ID4, \
  69. .prod_id = { (v1), (v2), (v3), (v4) }, \
  70. .prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, }
  71. #define PCMCIA_DEVICE_MANF_CARD_PROD_ID1(manf, card, v1, vh1) { \
  72. .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
  73. PCMCIA_DEV_ID_MATCH_CARD_ID| \
  74. PCMCIA_DEV_ID_MATCH_PROD_ID1, \
  75. .manf_id = (manf), \
  76. .card_id = (card), \
  77. .prod_id = { (v1), NULL, NULL, NULL }, \
  78. .prod_id_hash = { (vh1), 0, 0, 0 }, }
  79. #define PCMCIA_DEVICE_MANF_CARD_PROD_ID3(manf, card, v3, vh3) { \
  80. .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
  81. PCMCIA_DEV_ID_MATCH_CARD_ID| \
  82. PCMCIA_DEV_ID_MATCH_PROD_ID3, \
  83. .manf_id = (manf), \
  84. .card_id = (card), \
  85. .prod_id = { NULL, NULL, (v3), NULL }, \
  86. .prod_id_hash = { 0, 0, (vh3), 0 }, }
  87. /* multi-function devices */
  88. #define PCMCIA_MFC_DEVICE_MANF_CARD(mfc, manf, card) { \
  89. .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
  90. PCMCIA_DEV_ID_MATCH_CARD_ID| \
  91. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  92. .manf_id = (manf), \
  93. .card_id = (card), \
  94. .function = (mfc), }
  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. #define PCMCIA_MFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
  102. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  103. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  104. .prod_id = { NULL, (v2), NULL, NULL }, \
  105. .prod_id_hash = { 0, (vh2), 0, 0 }, \
  106. .function = (mfc), }
  107. #define PCMCIA_MFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
  108. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  109. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  110. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  111. .prod_id = { (v1), (v2), NULL, NULL }, \
  112. .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
  113. .function = (mfc), }
  114. #define PCMCIA_MFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
  115. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  116. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  117. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  118. .prod_id = { (v1), NULL, (v3), NULL }, \
  119. .prod_id_hash = { (vh1), 0, (vh3), 0 }, \
  120. .function = (mfc), }
  121. #define PCMCIA_MFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
  122. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  123. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  124. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  125. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  126. .prod_id = { (v1), (v2), (v3), NULL },\
  127. .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
  128. .function = (mfc), }
  129. /* pseudo multi-function devices */
  130. #define PCMCIA_PFC_DEVICE_MANF_CARD(mfc, manf, card) { \
  131. .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
  132. PCMCIA_DEV_ID_MATCH_CARD_ID| \
  133. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  134. .manf_id = (manf), \
  135. .card_id = (card), \
  136. .device_no = (mfc), }
  137. #define PCMCIA_PFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \
  138. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  139. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  140. .prod_id = { (v1), NULL, NULL, NULL }, \
  141. .prod_id_hash = { (vh1), 0, 0, 0 }, \
  142. .device_no = (mfc), }
  143. #define PCMCIA_PFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
  144. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  145. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  146. .prod_id = { NULL, (v2), NULL, NULL }, \
  147. .prod_id_hash = { 0, (vh2), 0, 0 }, \
  148. .device_no = (mfc), }
  149. #define PCMCIA_PFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
  150. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  151. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  152. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  153. .prod_id = { (v1), (v2), NULL, NULL }, \
  154. .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
  155. .device_no = (mfc), }
  156. #define PCMCIA_PFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
  157. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  158. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  159. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  160. .prod_id = { (v1), NULL, (v3), NULL }, \
  161. .prod_id_hash = { (vh1), 0, (vh3), 0 }, \
  162. .device_no = (mfc), }
  163. #define PCMCIA_PFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
  164. .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  165. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  166. PCMCIA_DEV_ID_MATCH_PROD_ID3| \
  167. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  168. .prod_id = { (v1), (v2), (v3), NULL },\
  169. .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
  170. .device_no = (mfc), }
  171. /* cards needing a CIS override */
  172. #define PCMCIA_DEVICE_CIS_MANF_CARD(manf, card, _cisfile) { \
  173. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  174. PCMCIA_DEV_ID_MATCH_MANF_ID| \
  175. PCMCIA_DEV_ID_MATCH_CARD_ID, \
  176. .manf_id = (manf), \
  177. .card_id = (card), \
  178. .cisfile = (_cisfile)}
  179. #define PCMCIA_DEVICE_CIS_PROD_ID12(v1, v2, vh1, vh2, _cisfile) { \
  180. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  181. PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  182. PCMCIA_DEV_ID_MATCH_PROD_ID2, \
  183. .prod_id = { (v1), (v2), NULL, NULL }, \
  184. .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
  185. .cisfile = (_cisfile)}
  186. #define PCMCIA_DEVICE_CIS_PROD_ID123(v1, v2, v3, vh1, vh2, vh3, _cisfile) { \
  187. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  188. PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  189. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  190. PCMCIA_DEV_ID_MATCH_PROD_ID3, \
  191. .prod_id = { (v1), (v2), (v3), NULL },\
  192. .prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
  193. .cisfile = (_cisfile)}
  194. #define PCMCIA_DEVICE_CIS_PROD_ID2(v2, vh2, _cisfile) { \
  195. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  196. PCMCIA_DEV_ID_MATCH_PROD_ID2, \
  197. .prod_id = { NULL, (v2), NULL, NULL }, \
  198. .prod_id_hash = { 0, (vh2), 0, 0 }, \
  199. .cisfile = (_cisfile)}
  200. #define PCMCIA_PFC_DEVICE_CIS_PROD_ID12(mfc, v1, v2, vh1, vh2, _cisfile) { \
  201. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  202. PCMCIA_DEV_ID_MATCH_PROD_ID1| \
  203. PCMCIA_DEV_ID_MATCH_PROD_ID2| \
  204. PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
  205. .prod_id = { (v1), (v2), NULL, NULL }, \
  206. .prod_id_hash = { (vh1), (vh2), 0, 0 },\
  207. .device_no = (mfc), \
  208. .cisfile = (_cisfile)}
  209. #define PCMCIA_MFC_DEVICE_CIS_MANF_CARD(mfc, manf, card, _cisfile) { \
  210. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  211. PCMCIA_DEV_ID_MATCH_MANF_ID| \
  212. PCMCIA_DEV_ID_MATCH_CARD_ID| \
  213. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  214. .manf_id = (manf), \
  215. .card_id = (card), \
  216. .function = (mfc), \
  217. .cisfile = (_cisfile)}
  218. #define PCMCIA_MFC_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_FUNCTION, \
  223. .prod_id = { (v1), (v2), NULL, NULL }, \
  224. .prod_id_hash = { (vh1), (vh2), 0, 0 }, \
  225. .function = (mfc), \
  226. .cisfile = (_cisfile)}
  227. #define PCMCIA_MFC_DEVICE_CIS_PROD_ID4(mfc, v4, vh4, _cisfile) { \
  228. .match_flags = PCMCIA_DEV_ID_MATCH_FAKE_CIS | \
  229. PCMCIA_DEV_ID_MATCH_PROD_ID4| \
  230. PCMCIA_DEV_ID_MATCH_FUNCTION, \
  231. .prod_id = { NULL, NULL, NULL, (v4) }, \
  232. .prod_id_hash = { 0, 0, 0, (vh4) }, \
  233. .function = (mfc), \
  234. .cisfile = (_cisfile)}
  235. #define PCMCIA_DEVICE_NULL { .match_flags = 0, }
  236. #endif /* __KERNEL__ */
  237. #endif /* _LINUX_PCMCIA_DEVICE_ID_H */