pn533.c 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Driver for NXP PN533 NFC Chip - core functions
  4. *
  5. * Copyright (C) 2011 Instituto Nokia de Tecnologia
  6. * Copyright (C) 2012-2013 Tieto Poland
  7. */
  8. #include <linux/device.h>
  9. #include <linux/kernel.h>
  10. #include <linux/module.h>
  11. #include <linux/slab.h>
  12. #include <linux/nfc.h>
  13. #include <linux/netdevice.h>
  14. #include <net/nfc/nfc.h>
  15. #include "pn533.h"
  16. #define VERSION "0.3"
  17. /* How much time we spend listening for initiators */
  18. #define PN533_LISTEN_TIME 2
  19. /* Delay between each poll frame (ms) */
  20. #define PN533_POLL_INTERVAL 10
  21. /* structs for pn533 commands */
  22. /* PN533_CMD_GET_FIRMWARE_VERSION */
  23. struct pn533_fw_version {
  24. u8 ic;
  25. u8 ver;
  26. u8 rev;
  27. u8 support;
  28. };
  29. /* PN533_CMD_RF_CONFIGURATION */
  30. #define PN533_CFGITEM_RF_FIELD 0x01
  31. #define PN533_CFGITEM_TIMING 0x02
  32. #define PN533_CFGITEM_MAX_RETRIES 0x05
  33. #define PN533_CFGITEM_PASORI 0x82
  34. #define PN533_CFGITEM_RF_FIELD_AUTO_RFCA 0x2
  35. #define PN533_CFGITEM_RF_FIELD_ON 0x1
  36. #define PN533_CFGITEM_RF_FIELD_OFF 0x0
  37. #define PN533_CONFIG_TIMING_102 0xb
  38. #define PN533_CONFIG_TIMING_204 0xc
  39. #define PN533_CONFIG_TIMING_409 0xd
  40. #define PN533_CONFIG_TIMING_819 0xe
  41. #define PN533_CONFIG_MAX_RETRIES_NO_RETRY 0x00
  42. #define PN533_CONFIG_MAX_RETRIES_ENDLESS 0xFF
  43. struct pn533_config_max_retries {
  44. u8 mx_rty_atr;
  45. u8 mx_rty_psl;
  46. u8 mx_rty_passive_act;
  47. } __packed;
  48. struct pn533_config_timing {
  49. u8 rfu;
  50. u8 atr_res_timeout;
  51. u8 dep_timeout;
  52. } __packed;
  53. /* PN533_CMD_IN_LIST_PASSIVE_TARGET */
  54. /* felica commands opcode */
  55. #define PN533_FELICA_OPC_SENSF_REQ 0
  56. #define PN533_FELICA_OPC_SENSF_RES 1
  57. /* felica SENSF_REQ parameters */
  58. #define PN533_FELICA_SENSF_SC_ALL 0xFFFF
  59. #define PN533_FELICA_SENSF_RC_NO_SYSTEM_CODE 0
  60. #define PN533_FELICA_SENSF_RC_SYSTEM_CODE 1
  61. #define PN533_FELICA_SENSF_RC_ADVANCED_PROTOCOL 2
  62. /* type B initiator_data values */
  63. #define PN533_TYPE_B_AFI_ALL_FAMILIES 0
  64. #define PN533_TYPE_B_POLL_METHOD_TIMESLOT 0
  65. #define PN533_TYPE_B_POLL_METHOD_PROBABILISTIC 1
  66. union pn533_cmd_poll_initdata {
  67. struct {
  68. u8 afi;
  69. u8 polling_method;
  70. } __packed type_b;
  71. struct {
  72. u8 opcode;
  73. __be16 sc;
  74. u8 rc;
  75. u8 tsn;
  76. } __packed felica;
  77. };
  78. struct pn533_poll_modulations {
  79. struct {
  80. u8 maxtg;
  81. u8 brty;
  82. union pn533_cmd_poll_initdata initiator_data;
  83. } __packed data;
  84. u8 len;
  85. };
  86. static const struct pn533_poll_modulations poll_mod[] = {
  87. [PN533_POLL_MOD_106KBPS_A] = {
  88. .data = {
  89. .maxtg = 1,
  90. .brty = 0,
  91. },
  92. .len = 2,
  93. },
  94. [PN533_POLL_MOD_212KBPS_FELICA] = {
  95. .data = {
  96. .maxtg = 1,
  97. .brty = 1,
  98. .initiator_data.felica = {
  99. .opcode = PN533_FELICA_OPC_SENSF_REQ,
  100. .sc = PN533_FELICA_SENSF_SC_ALL,
  101. .rc = PN533_FELICA_SENSF_RC_SYSTEM_CODE,
  102. .tsn = 0x03,
  103. },
  104. },
  105. .len = 7,
  106. },
  107. [PN533_POLL_MOD_424KBPS_FELICA] = {
  108. .data = {
  109. .maxtg = 1,
  110. .brty = 2,
  111. .initiator_data.felica = {
  112. .opcode = PN533_FELICA_OPC_SENSF_REQ,
  113. .sc = PN533_FELICA_SENSF_SC_ALL,
  114. .rc = PN533_FELICA_SENSF_RC_SYSTEM_CODE,
  115. .tsn = 0x03,
  116. },
  117. },
  118. .len = 7,
  119. },
  120. [PN533_POLL_MOD_106KBPS_JEWEL] = {
  121. .data = {
  122. .maxtg = 1,
  123. .brty = 4,
  124. },
  125. .len = 2,
  126. },
  127. [PN533_POLL_MOD_847KBPS_B] = {
  128. .data = {
  129. .maxtg = 1,
  130. .brty = 8,
  131. .initiator_data.type_b = {
  132. .afi = PN533_TYPE_B_AFI_ALL_FAMILIES,
  133. .polling_method =
  134. PN533_TYPE_B_POLL_METHOD_TIMESLOT,
  135. },
  136. },
  137. .len = 3,
  138. },
  139. [PN533_LISTEN_MOD] = {
  140. .len = 0,
  141. },
  142. };
  143. /* PN533_CMD_IN_ATR */
  144. struct pn533_cmd_activate_response {
  145. u8 status;
  146. u8 nfcid3t[10];
  147. u8 didt;
  148. u8 bst;
  149. u8 brt;
  150. u8 to;
  151. u8 ppt;
  152. /* optional */
  153. u8 gt[];
  154. } __packed;
  155. struct pn533_cmd_jump_dep_response {
  156. u8 status;
  157. u8 tg;
  158. u8 nfcid3t[10];
  159. u8 didt;
  160. u8 bst;
  161. u8 brt;
  162. u8 to;
  163. u8 ppt;
  164. /* optional */
  165. u8 gt[];
  166. } __packed;
  167. struct pn532_autopoll_resp {
  168. u8 type;
  169. u8 ln;
  170. u8 tg;
  171. u8 tgdata[];
  172. };
  173. /* PN532_CMD_IN_AUTOPOLL */
  174. #define PN532_AUTOPOLL_POLLNR_INFINITE 0xff
  175. #define PN532_AUTOPOLL_PERIOD 0x03 /* in units of 150 ms */
  176. #define PN532_AUTOPOLL_TYPE_GENERIC_106 0x00
  177. #define PN532_AUTOPOLL_TYPE_GENERIC_212 0x01
  178. #define PN532_AUTOPOLL_TYPE_GENERIC_424 0x02
  179. #define PN532_AUTOPOLL_TYPE_JEWEL 0x04
  180. #define PN532_AUTOPOLL_TYPE_MIFARE 0x10
  181. #define PN532_AUTOPOLL_TYPE_FELICA212 0x11
  182. #define PN532_AUTOPOLL_TYPE_FELICA424 0x12
  183. #define PN532_AUTOPOLL_TYPE_ISOA 0x20
  184. #define PN532_AUTOPOLL_TYPE_ISOB 0x23
  185. #define PN532_AUTOPOLL_TYPE_DEP_PASSIVE_106 0x40
  186. #define PN532_AUTOPOLL_TYPE_DEP_PASSIVE_212 0x41
  187. #define PN532_AUTOPOLL_TYPE_DEP_PASSIVE_424 0x42
  188. #define PN532_AUTOPOLL_TYPE_DEP_ACTIVE_106 0x80
  189. #define PN532_AUTOPOLL_TYPE_DEP_ACTIVE_212 0x81
  190. #define PN532_AUTOPOLL_TYPE_DEP_ACTIVE_424 0x82
  191. /* PN533_TG_INIT_AS_TARGET */
  192. #define PN533_INIT_TARGET_PASSIVE 0x1
  193. #define PN533_INIT_TARGET_DEP 0x2
  194. #define PN533_INIT_TARGET_RESP_FRAME_MASK 0x3
  195. #define PN533_INIT_TARGET_RESP_ACTIVE 0x1
  196. #define PN533_INIT_TARGET_RESP_DEP 0x4
  197. /* The rule: value(high byte) + value(low byte) + checksum = 0 */
  198. static inline u8 pn533_ext_checksum(u16 value)
  199. {
  200. return ~(u8)(((value & 0xFF00) >> 8) + (u8)(value & 0xFF)) + 1;
  201. }
  202. /* The rule: value + checksum = 0 */
  203. static inline u8 pn533_std_checksum(u8 value)
  204. {
  205. return ~value + 1;
  206. }
  207. /* The rule: sum(data elements) + checksum = 0 */
  208. static u8 pn533_std_data_checksum(u8 *data, int datalen)
  209. {
  210. u8 sum = 0;
  211. int i;
  212. for (i = 0; i < datalen; i++)
  213. sum += data[i];
  214. return pn533_std_checksum(sum);
  215. }
  216. static void pn533_std_tx_frame_init(void *_frame, u8 cmd_code)
  217. {
  218. struct pn533_std_frame *frame = _frame;
  219. frame->preamble = 0;
  220. frame->start_frame = cpu_to_be16(PN533_STD_FRAME_SOF);
  221. PN533_STD_FRAME_IDENTIFIER(frame) = PN533_STD_FRAME_DIR_OUT;
  222. PN533_FRAME_CMD(frame) = cmd_code;
  223. frame->datalen = 2;
  224. }
  225. static void pn533_std_tx_frame_finish(void *_frame)
  226. {
  227. struct pn533_std_frame *frame = _frame;
  228. frame->datalen_checksum = pn533_std_checksum(frame->datalen);
  229. PN533_STD_FRAME_CHECKSUM(frame) =
  230. pn533_std_data_checksum(frame->data, frame->datalen);
  231. PN533_STD_FRAME_POSTAMBLE(frame) = 0;
  232. }
  233. static void pn533_std_tx_update_payload_len(void *_frame, int len)
  234. {
  235. struct pn533_std_frame *frame = _frame;
  236. frame->datalen += len;
  237. }
  238. static bool pn533_std_rx_frame_is_valid(void *_frame, struct pn533 *dev)
  239. {
  240. u8 checksum;
  241. struct pn533_std_frame *stdf = _frame;
  242. if (stdf->start_frame != cpu_to_be16(PN533_STD_FRAME_SOF))
  243. return false;
  244. if (likely(!PN533_STD_IS_EXTENDED(stdf))) {
  245. /* Standard frame code */
  246. dev->ops->rx_header_len = PN533_STD_FRAME_HEADER_LEN;
  247. checksum = pn533_std_checksum(stdf->datalen);
  248. if (checksum != stdf->datalen_checksum)
  249. return false;
  250. checksum = pn533_std_data_checksum(stdf->data, stdf->datalen);
  251. if (checksum != PN533_STD_FRAME_CHECKSUM(stdf))
  252. return false;
  253. } else {
  254. /* Extended */
  255. struct pn533_ext_frame *eif = _frame;
  256. dev->ops->rx_header_len = PN533_EXT_FRAME_HEADER_LEN;
  257. checksum = pn533_ext_checksum(be16_to_cpu(eif->datalen));
  258. if (checksum != eif->datalen_checksum)
  259. return false;
  260. /* check data checksum */
  261. checksum = pn533_std_data_checksum(eif->data,
  262. be16_to_cpu(eif->datalen));
  263. if (checksum != PN533_EXT_FRAME_CHECKSUM(eif))
  264. return false;
  265. }
  266. return true;
  267. }
  268. bool pn533_rx_frame_is_ack(void *_frame)
  269. {
  270. struct pn533_std_frame *frame = _frame;
  271. if (frame->start_frame != cpu_to_be16(PN533_STD_FRAME_SOF))
  272. return false;
  273. if (frame->datalen != 0 || frame->datalen_checksum != 0xFF)
  274. return false;
  275. return true;
  276. }
  277. EXPORT_SYMBOL_GPL(pn533_rx_frame_is_ack);
  278. static inline int pn533_std_rx_frame_size(void *frame)
  279. {
  280. struct pn533_std_frame *f = frame;
  281. /* check for Extended Information frame */
  282. if (PN533_STD_IS_EXTENDED(f)) {
  283. struct pn533_ext_frame *eif = frame;
  284. return sizeof(struct pn533_ext_frame)
  285. + be16_to_cpu(eif->datalen) + PN533_STD_FRAME_TAIL_LEN;
  286. }
  287. return sizeof(struct pn533_std_frame) + f->datalen +
  288. PN533_STD_FRAME_TAIL_LEN;
  289. }
  290. static u8 pn533_std_get_cmd_code(void *frame)
  291. {
  292. struct pn533_std_frame *f = frame;
  293. struct pn533_ext_frame *eif = frame;
  294. if (PN533_STD_IS_EXTENDED(f))
  295. return PN533_FRAME_CMD(eif);
  296. else
  297. return PN533_FRAME_CMD(f);
  298. }
  299. bool pn533_rx_frame_is_cmd_response(struct pn533 *dev, void *frame)
  300. {
  301. return (dev->ops->get_cmd_code(frame) ==
  302. PN533_CMD_RESPONSE(dev->cmd->code));
  303. }
  304. EXPORT_SYMBOL_GPL(pn533_rx_frame_is_cmd_response);
  305. static struct pn533_frame_ops pn533_std_frame_ops = {
  306. .tx_frame_init = pn533_std_tx_frame_init,
  307. .tx_frame_finish = pn533_std_tx_frame_finish,
  308. .tx_update_payload_len = pn533_std_tx_update_payload_len,
  309. .tx_header_len = PN533_STD_FRAME_HEADER_LEN,
  310. .tx_tail_len = PN533_STD_FRAME_TAIL_LEN,
  311. .rx_is_frame_valid = pn533_std_rx_frame_is_valid,
  312. .rx_frame_size = pn533_std_rx_frame_size,
  313. .rx_header_len = PN533_STD_FRAME_HEADER_LEN,
  314. .rx_tail_len = PN533_STD_FRAME_TAIL_LEN,
  315. .max_payload_len = PN533_STD_FRAME_MAX_PAYLOAD_LEN,
  316. .get_cmd_code = pn533_std_get_cmd_code,
  317. };
  318. static void pn533_build_cmd_frame(struct pn533 *dev, u8 cmd_code,
  319. struct sk_buff *skb)
  320. {
  321. /* payload is already there, just update datalen */
  322. int payload_len = skb->len;
  323. struct pn533_frame_ops *ops = dev->ops;
  324. skb_push(skb, ops->tx_header_len);
  325. skb_put(skb, ops->tx_tail_len);
  326. ops->tx_frame_init(skb->data, cmd_code);
  327. ops->tx_update_payload_len(skb->data, payload_len);
  328. ops->tx_frame_finish(skb->data);
  329. }
  330. static int pn533_send_async_complete(struct pn533 *dev)
  331. {
  332. struct pn533_cmd *cmd = dev->cmd;
  333. struct sk_buff *resp;
  334. int status, rc = 0;
  335. if (!cmd) {
  336. dev_dbg(dev->dev, "%s: cmd not set\n", __func__);
  337. goto done;
  338. }
  339. dev_kfree_skb(cmd->req);
  340. status = cmd->status;
  341. resp = cmd->resp;
  342. if (status < 0) {
  343. rc = cmd->complete_cb(dev, cmd->complete_cb_context,
  344. ERR_PTR(status));
  345. dev_kfree_skb(resp);
  346. goto done;
  347. }
  348. /* when no response is set we got interrupted */
  349. if (!resp)
  350. resp = ERR_PTR(-EINTR);
  351. if (!IS_ERR(resp)) {
  352. skb_pull(resp, dev->ops->rx_header_len);
  353. skb_trim(resp, resp->len - dev->ops->rx_tail_len);
  354. }
  355. rc = cmd->complete_cb(dev, cmd->complete_cb_context, resp);
  356. done:
  357. kfree(cmd);
  358. dev->cmd = NULL;
  359. return rc;
  360. }
  361. static int __pn533_send_async(struct pn533 *dev, u8 cmd_code,
  362. struct sk_buff *req,
  363. pn533_send_async_complete_t complete_cb,
  364. void *complete_cb_context)
  365. {
  366. struct pn533_cmd *cmd;
  367. int rc = 0;
  368. dev_dbg(dev->dev, "Sending command 0x%x\n", cmd_code);
  369. cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
  370. if (!cmd)
  371. return -ENOMEM;
  372. cmd->code = cmd_code;
  373. cmd->req = req;
  374. cmd->complete_cb = complete_cb;
  375. cmd->complete_cb_context = complete_cb_context;
  376. pn533_build_cmd_frame(dev, cmd_code, req);
  377. mutex_lock(&dev->cmd_lock);
  378. if (!dev->cmd_pending) {
  379. dev->cmd = cmd;
  380. rc = dev->phy_ops->send_frame(dev, req);
  381. if (rc) {
  382. dev->cmd = NULL;
  383. goto error;
  384. }
  385. dev->cmd_pending = 1;
  386. goto unlock;
  387. }
  388. dev_dbg(dev->dev, "%s Queueing command 0x%x\n",
  389. __func__, cmd_code);
  390. INIT_LIST_HEAD(&cmd->queue);
  391. list_add_tail(&cmd->queue, &dev->cmd_queue);
  392. goto unlock;
  393. error:
  394. kfree(cmd);
  395. unlock:
  396. mutex_unlock(&dev->cmd_lock);
  397. return rc;
  398. }
  399. static int pn533_send_data_async(struct pn533 *dev, u8 cmd_code,
  400. struct sk_buff *req,
  401. pn533_send_async_complete_t complete_cb,
  402. void *complete_cb_context)
  403. {
  404. return __pn533_send_async(dev, cmd_code, req, complete_cb,
  405. complete_cb_context);
  406. }
  407. static int pn533_send_cmd_async(struct pn533 *dev, u8 cmd_code,
  408. struct sk_buff *req,
  409. pn533_send_async_complete_t complete_cb,
  410. void *complete_cb_context)
  411. {
  412. return __pn533_send_async(dev, cmd_code, req, complete_cb,
  413. complete_cb_context);
  414. }
  415. /*
  416. * pn533_send_cmd_direct_async
  417. *
  418. * The function sends a priority cmd directly to the chip omitting the cmd
  419. * queue. It's intended to be used by chaining mechanism of received responses
  420. * where the host has to request every single chunk of data before scheduling
  421. * next cmd from the queue.
  422. */
  423. static int pn533_send_cmd_direct_async(struct pn533 *dev, u8 cmd_code,
  424. struct sk_buff *req,
  425. pn533_send_async_complete_t complete_cb,
  426. void *complete_cb_context)
  427. {
  428. struct pn533_cmd *cmd;
  429. int rc;
  430. cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
  431. if (!cmd)
  432. return -ENOMEM;
  433. cmd->code = cmd_code;
  434. cmd->req = req;
  435. cmd->complete_cb = complete_cb;
  436. cmd->complete_cb_context = complete_cb_context;
  437. pn533_build_cmd_frame(dev, cmd_code, req);
  438. dev->cmd = cmd;
  439. rc = dev->phy_ops->send_frame(dev, req);
  440. if (rc < 0) {
  441. dev->cmd = NULL;
  442. kfree(cmd);
  443. }
  444. return rc;
  445. }
  446. static void pn533_wq_cmd_complete(struct work_struct *work)
  447. {
  448. struct pn533 *dev = container_of(work, struct pn533, cmd_complete_work);
  449. int rc;
  450. rc = pn533_send_async_complete(dev);
  451. if (rc != -EINPROGRESS)
  452. queue_work(dev->wq, &dev->cmd_work);
  453. }
  454. static void pn533_wq_cmd(struct work_struct *work)
  455. {
  456. struct pn533 *dev = container_of(work, struct pn533, cmd_work);
  457. struct pn533_cmd *cmd;
  458. int rc;
  459. mutex_lock(&dev->cmd_lock);
  460. if (list_empty(&dev->cmd_queue)) {
  461. dev->cmd_pending = 0;
  462. mutex_unlock(&dev->cmd_lock);
  463. return;
  464. }
  465. cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue);
  466. list_del(&cmd->queue);
  467. mutex_unlock(&dev->cmd_lock);
  468. dev->cmd = cmd;
  469. rc = dev->phy_ops->send_frame(dev, cmd->req);
  470. if (rc < 0) {
  471. dev->cmd = NULL;
  472. dev_kfree_skb(cmd->req);
  473. kfree(cmd);
  474. return;
  475. }
  476. }
  477. struct pn533_sync_cmd_response {
  478. struct sk_buff *resp;
  479. struct completion done;
  480. };
  481. static int pn533_send_sync_complete(struct pn533 *dev, void *_arg,
  482. struct sk_buff *resp)
  483. {
  484. struct pn533_sync_cmd_response *arg = _arg;
  485. arg->resp = resp;
  486. complete(&arg->done);
  487. return 0;
  488. }
  489. /* pn533_send_cmd_sync
  490. *
  491. * Please note the req parameter is freed inside the function to
  492. * limit a number of return value interpretations by the caller.
  493. *
  494. * 1. negative in case of error during TX path -> req should be freed
  495. *
  496. * 2. negative in case of error during RX path -> req should not be freed
  497. * as it's been already freed at the beginning of RX path by
  498. * async_complete_cb.
  499. *
  500. * 3. valid pointer in case of successful RX path
  501. *
  502. * A caller has to check a return value with IS_ERR macro. If the test pass,
  503. * the returned pointer is valid.
  504. *
  505. */
  506. static struct sk_buff *pn533_send_cmd_sync(struct pn533 *dev, u8 cmd_code,
  507. struct sk_buff *req)
  508. {
  509. int rc;
  510. struct pn533_sync_cmd_response arg;
  511. init_completion(&arg.done);
  512. rc = pn533_send_cmd_async(dev, cmd_code, req,
  513. pn533_send_sync_complete, &arg);
  514. if (rc) {
  515. dev_kfree_skb(req);
  516. return ERR_PTR(rc);
  517. }
  518. wait_for_completion(&arg.done);
  519. return arg.resp;
  520. }
  521. static struct sk_buff *pn533_alloc_skb(struct pn533 *dev, unsigned int size)
  522. {
  523. struct sk_buff *skb;
  524. skb = alloc_skb(dev->ops->tx_header_len +
  525. size +
  526. dev->ops->tx_tail_len, GFP_KERNEL);
  527. if (skb)
  528. skb_reserve(skb, dev->ops->tx_header_len);
  529. return skb;
  530. }
  531. struct pn533_target_type_a {
  532. __be16 sens_res;
  533. u8 sel_res;
  534. u8 nfcid_len;
  535. u8 nfcid_data[];
  536. } __packed;
  537. #define PN533_TYPE_A_SENS_RES_NFCID1(x) ((u8)((be16_to_cpu(x) & 0x00C0) >> 6))
  538. #define PN533_TYPE_A_SENS_RES_SSD(x) ((u8)((be16_to_cpu(x) & 0x001F) >> 0))
  539. #define PN533_TYPE_A_SENS_RES_PLATCONF(x) ((u8)((be16_to_cpu(x) & 0x0F00) >> 8))
  540. #define PN533_TYPE_A_SENS_RES_SSD_JEWEL 0x00
  541. #define PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL 0x0C
  542. #define PN533_TYPE_A_SEL_PROT(x) (((x) & 0x60) >> 5)
  543. #define PN533_TYPE_A_SEL_CASCADE(x) (((x) & 0x04) >> 2)
  544. #define PN533_TYPE_A_SEL_PROT_MIFARE 0
  545. #define PN533_TYPE_A_SEL_PROT_ISO14443 1
  546. #define PN533_TYPE_A_SEL_PROT_DEP 2
  547. #define PN533_TYPE_A_SEL_PROT_ISO14443_DEP 3
  548. static bool pn533_target_type_a_is_valid(struct pn533_target_type_a *type_a,
  549. int target_data_len)
  550. {
  551. u8 ssd;
  552. u8 platconf;
  553. if (target_data_len < sizeof(struct pn533_target_type_a))
  554. return false;
  555. /*
  556. * The length check of nfcid[] and ats[] are not being performed because
  557. * the values are not being used
  558. */
  559. /* Requirement 4.6.3.3 from NFC Forum Digital Spec */
  560. ssd = PN533_TYPE_A_SENS_RES_SSD(type_a->sens_res);
  561. platconf = PN533_TYPE_A_SENS_RES_PLATCONF(type_a->sens_res);
  562. if ((ssd == PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
  563. platconf != PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL) ||
  564. (ssd != PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
  565. platconf == PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL))
  566. return false;
  567. /* Requirements 4.8.2.1, 4.8.2.3, 4.8.2.5 and 4.8.2.7 from NFC Forum */
  568. if (PN533_TYPE_A_SEL_CASCADE(type_a->sel_res) != 0)
  569. return false;
  570. if (type_a->nfcid_len > NFC_NFCID1_MAXSIZE)
  571. return false;
  572. return true;
  573. }
  574. static int pn533_target_found_type_a(struct nfc_target *nfc_tgt, u8 *tgt_data,
  575. int tgt_data_len)
  576. {
  577. struct pn533_target_type_a *tgt_type_a;
  578. tgt_type_a = (struct pn533_target_type_a *)tgt_data;
  579. if (!pn533_target_type_a_is_valid(tgt_type_a, tgt_data_len))
  580. return -EPROTO;
  581. switch (PN533_TYPE_A_SEL_PROT(tgt_type_a->sel_res)) {
  582. case PN533_TYPE_A_SEL_PROT_MIFARE:
  583. nfc_tgt->supported_protocols = NFC_PROTO_MIFARE_MASK;
  584. break;
  585. case PN533_TYPE_A_SEL_PROT_ISO14443:
  586. nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_MASK;
  587. break;
  588. case PN533_TYPE_A_SEL_PROT_DEP:
  589. nfc_tgt->supported_protocols = NFC_PROTO_NFC_DEP_MASK;
  590. break;
  591. case PN533_TYPE_A_SEL_PROT_ISO14443_DEP:
  592. nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_MASK |
  593. NFC_PROTO_NFC_DEP_MASK;
  594. break;
  595. }
  596. nfc_tgt->sens_res = be16_to_cpu(tgt_type_a->sens_res);
  597. nfc_tgt->sel_res = tgt_type_a->sel_res;
  598. nfc_tgt->nfcid1_len = tgt_type_a->nfcid_len;
  599. memcpy(nfc_tgt->nfcid1, tgt_type_a->nfcid_data, nfc_tgt->nfcid1_len);
  600. return 0;
  601. }
  602. struct pn533_target_felica {
  603. u8 pol_res;
  604. u8 opcode;
  605. u8 nfcid2[NFC_NFCID2_MAXSIZE];
  606. u8 pad[8];
  607. /* optional */
  608. u8 syst_code[];
  609. } __packed;
  610. #define PN533_FELICA_SENSF_NFCID2_DEP_B1 0x01
  611. #define PN533_FELICA_SENSF_NFCID2_DEP_B2 0xFE
  612. static bool pn533_target_felica_is_valid(struct pn533_target_felica *felica,
  613. int target_data_len)
  614. {
  615. if (target_data_len < sizeof(struct pn533_target_felica))
  616. return false;
  617. if (felica->opcode != PN533_FELICA_OPC_SENSF_RES)
  618. return false;
  619. return true;
  620. }
  621. static int pn533_target_found_felica(struct nfc_target *nfc_tgt, u8 *tgt_data,
  622. int tgt_data_len)
  623. {
  624. struct pn533_target_felica *tgt_felica;
  625. tgt_felica = (struct pn533_target_felica *)tgt_data;
  626. if (!pn533_target_felica_is_valid(tgt_felica, tgt_data_len))
  627. return -EPROTO;
  628. if ((tgt_felica->nfcid2[0] == PN533_FELICA_SENSF_NFCID2_DEP_B1) &&
  629. (tgt_felica->nfcid2[1] == PN533_FELICA_SENSF_NFCID2_DEP_B2))
  630. nfc_tgt->supported_protocols = NFC_PROTO_NFC_DEP_MASK;
  631. else
  632. nfc_tgt->supported_protocols = NFC_PROTO_FELICA_MASK;
  633. memcpy(nfc_tgt->sensf_res, &tgt_felica->opcode, 9);
  634. nfc_tgt->sensf_res_len = 9;
  635. memcpy(nfc_tgt->nfcid2, tgt_felica->nfcid2, NFC_NFCID2_MAXSIZE);
  636. nfc_tgt->nfcid2_len = NFC_NFCID2_MAXSIZE;
  637. return 0;
  638. }
  639. struct pn533_target_jewel {
  640. __be16 sens_res;
  641. u8 jewelid[4];
  642. } __packed;
  643. static bool pn533_target_jewel_is_valid(struct pn533_target_jewel *jewel,
  644. int target_data_len)
  645. {
  646. u8 ssd;
  647. u8 platconf;
  648. if (target_data_len < sizeof(struct pn533_target_jewel))
  649. return false;
  650. /* Requirement 4.6.3.3 from NFC Forum Digital Spec */
  651. ssd = PN533_TYPE_A_SENS_RES_SSD(jewel->sens_res);
  652. platconf = PN533_TYPE_A_SENS_RES_PLATCONF(jewel->sens_res);
  653. if ((ssd == PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
  654. platconf != PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL) ||
  655. (ssd != PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
  656. platconf == PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL))
  657. return false;
  658. return true;
  659. }
  660. static int pn533_target_found_jewel(struct nfc_target *nfc_tgt, u8 *tgt_data,
  661. int tgt_data_len)
  662. {
  663. struct pn533_target_jewel *tgt_jewel;
  664. tgt_jewel = (struct pn533_target_jewel *)tgt_data;
  665. if (!pn533_target_jewel_is_valid(tgt_jewel, tgt_data_len))
  666. return -EPROTO;
  667. nfc_tgt->supported_protocols = NFC_PROTO_JEWEL_MASK;
  668. nfc_tgt->sens_res = be16_to_cpu(tgt_jewel->sens_res);
  669. nfc_tgt->nfcid1_len = 4;
  670. memcpy(nfc_tgt->nfcid1, tgt_jewel->jewelid, nfc_tgt->nfcid1_len);
  671. return 0;
  672. }
  673. struct pn533_type_b_prot_info {
  674. u8 bitrate;
  675. u8 fsci_type;
  676. u8 fwi_adc_fo;
  677. } __packed;
  678. #define PN533_TYPE_B_PROT_FCSI(x) (((x) & 0xF0) >> 4)
  679. #define PN533_TYPE_B_PROT_TYPE(x) (((x) & 0x0F) >> 0)
  680. #define PN533_TYPE_B_PROT_TYPE_RFU_MASK 0x8
  681. struct pn533_type_b_sens_res {
  682. u8 opcode;
  683. u8 nfcid[4];
  684. u8 appdata[4];
  685. struct pn533_type_b_prot_info prot_info;
  686. } __packed;
  687. #define PN533_TYPE_B_OPC_SENSB_RES 0x50
  688. struct pn533_target_type_b {
  689. struct pn533_type_b_sens_res sensb_res;
  690. u8 attrib_res_len;
  691. u8 attrib_res[];
  692. } __packed;
  693. static bool pn533_target_type_b_is_valid(struct pn533_target_type_b *type_b,
  694. int target_data_len)
  695. {
  696. if (target_data_len < sizeof(struct pn533_target_type_b))
  697. return false;
  698. if (type_b->sensb_res.opcode != PN533_TYPE_B_OPC_SENSB_RES)
  699. return false;
  700. if (PN533_TYPE_B_PROT_TYPE(type_b->sensb_res.prot_info.fsci_type) &
  701. PN533_TYPE_B_PROT_TYPE_RFU_MASK)
  702. return false;
  703. return true;
  704. }
  705. static int pn533_target_found_type_b(struct nfc_target *nfc_tgt, u8 *tgt_data,
  706. int tgt_data_len)
  707. {
  708. struct pn533_target_type_b *tgt_type_b;
  709. tgt_type_b = (struct pn533_target_type_b *)tgt_data;
  710. if (!pn533_target_type_b_is_valid(tgt_type_b, tgt_data_len))
  711. return -EPROTO;
  712. nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_B_MASK;
  713. return 0;
  714. }
  715. static void pn533_poll_reset_mod_list(struct pn533 *dev);
  716. static int pn533_target_found(struct pn533 *dev, u8 tg, u8 *tgdata,
  717. int tgdata_len)
  718. {
  719. struct nfc_target nfc_tgt;
  720. int rc;
  721. dev_dbg(dev->dev, "%s: modulation=%d\n",
  722. __func__, dev->poll_mod_curr);
  723. if (tg != 1)
  724. return -EPROTO;
  725. memset(&nfc_tgt, 0, sizeof(struct nfc_target));
  726. switch (dev->poll_mod_curr) {
  727. case PN533_POLL_MOD_106KBPS_A:
  728. rc = pn533_target_found_type_a(&nfc_tgt, tgdata, tgdata_len);
  729. break;
  730. case PN533_POLL_MOD_212KBPS_FELICA:
  731. case PN533_POLL_MOD_424KBPS_FELICA:
  732. rc = pn533_target_found_felica(&nfc_tgt, tgdata, tgdata_len);
  733. break;
  734. case PN533_POLL_MOD_106KBPS_JEWEL:
  735. rc = pn533_target_found_jewel(&nfc_tgt, tgdata, tgdata_len);
  736. break;
  737. case PN533_POLL_MOD_847KBPS_B:
  738. rc = pn533_target_found_type_b(&nfc_tgt, tgdata, tgdata_len);
  739. break;
  740. default:
  741. nfc_err(dev->dev,
  742. "Unknown current poll modulation\n");
  743. return -EPROTO;
  744. }
  745. if (rc)
  746. return rc;
  747. if (!(nfc_tgt.supported_protocols & dev->poll_protocols)) {
  748. dev_dbg(dev->dev,
  749. "The Tg found doesn't have the desired protocol\n");
  750. return -EAGAIN;
  751. }
  752. dev_dbg(dev->dev,
  753. "Target found - supported protocols: 0x%x\n",
  754. nfc_tgt.supported_protocols);
  755. dev->tgt_available_prots = nfc_tgt.supported_protocols;
  756. pn533_poll_reset_mod_list(dev);
  757. nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1);
  758. return 0;
  759. }
  760. static inline void pn533_poll_next_mod(struct pn533 *dev)
  761. {
  762. dev->poll_mod_curr = (dev->poll_mod_curr + 1) % dev->poll_mod_count;
  763. }
  764. static void pn533_poll_reset_mod_list(struct pn533 *dev)
  765. {
  766. dev->poll_mod_count = 0;
  767. }
  768. static void pn533_poll_add_mod(struct pn533 *dev, u8 mod_index)
  769. {
  770. dev->poll_mod_active[dev->poll_mod_count] =
  771. (struct pn533_poll_modulations *)&poll_mod[mod_index];
  772. dev->poll_mod_count++;
  773. }
  774. static void pn533_poll_create_mod_list(struct pn533 *dev,
  775. u32 im_protocols, u32 tm_protocols)
  776. {
  777. pn533_poll_reset_mod_list(dev);
  778. if ((im_protocols & NFC_PROTO_MIFARE_MASK) ||
  779. (im_protocols & NFC_PROTO_ISO14443_MASK) ||
  780. (im_protocols & NFC_PROTO_NFC_DEP_MASK))
  781. pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_A);
  782. if (im_protocols & NFC_PROTO_FELICA_MASK ||
  783. im_protocols & NFC_PROTO_NFC_DEP_MASK) {
  784. pn533_poll_add_mod(dev, PN533_POLL_MOD_212KBPS_FELICA);
  785. pn533_poll_add_mod(dev, PN533_POLL_MOD_424KBPS_FELICA);
  786. }
  787. if (im_protocols & NFC_PROTO_JEWEL_MASK)
  788. pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_JEWEL);
  789. if (im_protocols & NFC_PROTO_ISO14443_B_MASK)
  790. pn533_poll_add_mod(dev, PN533_POLL_MOD_847KBPS_B);
  791. if (tm_protocols)
  792. pn533_poll_add_mod(dev, PN533_LISTEN_MOD);
  793. }
  794. static int pn533_start_poll_complete(struct pn533 *dev, struct sk_buff *resp)
  795. {
  796. u8 nbtg, tg, *tgdata;
  797. int rc, tgdata_len;
  798. /* Toggle the DEP polling */
  799. if (dev->poll_protocols & NFC_PROTO_NFC_DEP_MASK)
  800. dev->poll_dep = 1;
  801. nbtg = resp->data[0];
  802. tg = resp->data[1];
  803. tgdata = &resp->data[2];
  804. tgdata_len = resp->len - 2; /* nbtg + tg */
  805. if (nbtg) {
  806. rc = pn533_target_found(dev, tg, tgdata, tgdata_len);
  807. /* We must stop the poll after a valid target found */
  808. if (rc == 0)
  809. return 0;
  810. }
  811. return -EAGAIN;
  812. }
  813. static struct sk_buff *pn533_alloc_poll_tg_frame(struct pn533 *dev)
  814. {
  815. struct sk_buff *skb;
  816. u8 *felica, *nfcid3;
  817. u8 *gbytes = dev->gb;
  818. size_t gbytes_len = dev->gb_len;
  819. u8 felica_params[18] = {0x1, 0xfe, /* DEP */
  820. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* random */
  821. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  822. 0xff, 0xff}; /* System code */
  823. u8 mifare_params[6] = {0x1, 0x1, /* SENS_RES */
  824. 0x0, 0x0, 0x0,
  825. 0x40}; /* SEL_RES for DEP */
  826. unsigned int skb_len = 36 + /*
  827. * mode (1), mifare (6),
  828. * felica (18), nfcid3 (10), gb_len (1)
  829. */
  830. gbytes_len +
  831. 1; /* len Tk*/
  832. skb = pn533_alloc_skb(dev, skb_len);
  833. if (!skb)
  834. return NULL;
  835. /* DEP support only */
  836. skb_put_u8(skb, PN533_INIT_TARGET_DEP);
  837. /* MIFARE params */
  838. skb_put_data(skb, mifare_params, 6);
  839. /* Felica params */
  840. felica = skb_put_data(skb, felica_params, 18);
  841. get_random_bytes(felica + 2, 6);
  842. /* NFCID3 */
  843. nfcid3 = skb_put_zero(skb, 10);
  844. memcpy(nfcid3, felica, 8);
  845. /* General bytes */
  846. skb_put_u8(skb, gbytes_len);
  847. skb_put_data(skb, gbytes, gbytes_len);
  848. /* Len Tk */
  849. skb_put_u8(skb, 0);
  850. return skb;
  851. }
  852. static void pn533_wq_tm_mi_recv(struct work_struct *work);
  853. static struct sk_buff *pn533_build_response(struct pn533 *dev);
  854. static int pn533_tm_get_data_complete(struct pn533 *dev, void *arg,
  855. struct sk_buff *resp)
  856. {
  857. struct sk_buff *skb;
  858. u8 status, ret, mi;
  859. int rc;
  860. if (IS_ERR(resp)) {
  861. skb_queue_purge(&dev->resp_q);
  862. return PTR_ERR(resp);
  863. }
  864. status = resp->data[0];
  865. ret = status & PN533_CMD_RET_MASK;
  866. mi = status & PN533_CMD_MI_MASK;
  867. skb_pull(resp, sizeof(status));
  868. if (ret != PN533_CMD_RET_SUCCESS) {
  869. rc = -EIO;
  870. goto error;
  871. }
  872. skb_queue_tail(&dev->resp_q, resp);
  873. if (mi) {
  874. queue_work(dev->wq, &dev->mi_tm_rx_work);
  875. return -EINPROGRESS;
  876. }
  877. skb = pn533_build_response(dev);
  878. if (!skb) {
  879. rc = -EIO;
  880. goto error;
  881. }
  882. return nfc_tm_data_received(dev->nfc_dev, skb);
  883. error:
  884. nfc_tm_deactivated(dev->nfc_dev);
  885. dev->tgt_mode = 0;
  886. skb_queue_purge(&dev->resp_q);
  887. dev_kfree_skb(resp);
  888. return rc;
  889. }
  890. static void pn533_wq_tm_mi_recv(struct work_struct *work)
  891. {
  892. struct pn533 *dev = container_of(work, struct pn533, mi_tm_rx_work);
  893. struct sk_buff *skb;
  894. int rc;
  895. skb = pn533_alloc_skb(dev, 0);
  896. if (!skb)
  897. return;
  898. rc = pn533_send_cmd_direct_async(dev,
  899. PN533_CMD_TG_GET_DATA,
  900. skb,
  901. pn533_tm_get_data_complete,
  902. NULL);
  903. if (rc < 0)
  904. dev_kfree_skb(skb);
  905. }
  906. static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
  907. struct sk_buff *resp);
  908. static void pn533_wq_tm_mi_send(struct work_struct *work)
  909. {
  910. struct pn533 *dev = container_of(work, struct pn533, mi_tm_tx_work);
  911. struct sk_buff *skb;
  912. int rc;
  913. /* Grab the first skb in the queue */
  914. skb = skb_dequeue(&dev->fragment_skb);
  915. if (skb == NULL) { /* No more data */
  916. /* Reset the queue for future use */
  917. skb_queue_head_init(&dev->fragment_skb);
  918. goto error;
  919. }
  920. /* last entry - remove MI bit */
  921. if (skb_queue_len(&dev->fragment_skb) == 0) {
  922. rc = pn533_send_cmd_direct_async(dev, PN533_CMD_TG_SET_DATA,
  923. skb, pn533_tm_send_complete, NULL);
  924. } else
  925. rc = pn533_send_cmd_direct_async(dev,
  926. PN533_CMD_TG_SET_META_DATA,
  927. skb, pn533_tm_send_complete, NULL);
  928. if (rc == 0) /* success */
  929. return;
  930. dev_err(dev->dev,
  931. "Error %d when trying to perform set meta data_exchange", rc);
  932. dev_kfree_skb(skb);
  933. error:
  934. dev->phy_ops->send_ack(dev, GFP_KERNEL);
  935. queue_work(dev->wq, &dev->cmd_work);
  936. }
  937. static void pn533_wq_tg_get_data(struct work_struct *work)
  938. {
  939. struct pn533 *dev = container_of(work, struct pn533, tg_work);
  940. struct sk_buff *skb;
  941. int rc;
  942. skb = pn533_alloc_skb(dev, 0);
  943. if (!skb)
  944. return;
  945. rc = pn533_send_data_async(dev, PN533_CMD_TG_GET_DATA, skb,
  946. pn533_tm_get_data_complete, NULL);
  947. if (rc < 0)
  948. dev_kfree_skb(skb);
  949. }
  950. #define ATR_REQ_GB_OFFSET 17
  951. static int pn533_init_target_complete(struct pn533 *dev, struct sk_buff *resp)
  952. {
  953. u8 mode, *cmd, comm_mode = NFC_COMM_PASSIVE, *gb;
  954. size_t gb_len;
  955. int rc;
  956. if (resp->len < ATR_REQ_GB_OFFSET + 1)
  957. return -EINVAL;
  958. mode = resp->data[0];
  959. cmd = &resp->data[1];
  960. dev_dbg(dev->dev, "Target mode 0x%x len %d\n",
  961. mode, resp->len);
  962. if ((mode & PN533_INIT_TARGET_RESP_FRAME_MASK) ==
  963. PN533_INIT_TARGET_RESP_ACTIVE)
  964. comm_mode = NFC_COMM_ACTIVE;
  965. if ((mode & PN533_INIT_TARGET_RESP_DEP) == 0) /* Only DEP supported */
  966. return -EOPNOTSUPP;
  967. gb = cmd + ATR_REQ_GB_OFFSET;
  968. gb_len = resp->len - (ATR_REQ_GB_OFFSET + 1);
  969. rc = nfc_tm_activated(dev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
  970. comm_mode, gb, gb_len);
  971. if (rc < 0) {
  972. nfc_err(dev->dev,
  973. "Error when signaling target activation\n");
  974. return rc;
  975. }
  976. dev->tgt_mode = 1;
  977. queue_work(dev->wq, &dev->tg_work);
  978. return 0;
  979. }
  980. static void pn533_listen_mode_timer(struct timer_list *t)
  981. {
  982. struct pn533 *dev = from_timer(dev, t, listen_timer);
  983. dev->cancel_listen = 1;
  984. pn533_poll_next_mod(dev);
  985. queue_delayed_work(dev->wq, &dev->poll_work,
  986. msecs_to_jiffies(PN533_POLL_INTERVAL));
  987. }
  988. static int pn533_rf_complete(struct pn533 *dev, void *arg,
  989. struct sk_buff *resp)
  990. {
  991. int rc = 0;
  992. if (IS_ERR(resp)) {
  993. rc = PTR_ERR(resp);
  994. nfc_err(dev->dev, "RF setting error %d\n", rc);
  995. return rc;
  996. }
  997. queue_delayed_work(dev->wq, &dev->poll_work,
  998. msecs_to_jiffies(PN533_POLL_INTERVAL));
  999. dev_kfree_skb(resp);
  1000. return rc;
  1001. }
  1002. static void pn533_wq_rf(struct work_struct *work)
  1003. {
  1004. struct pn533 *dev = container_of(work, struct pn533, rf_work);
  1005. struct sk_buff *skb;
  1006. int rc;
  1007. skb = pn533_alloc_skb(dev, 2);
  1008. if (!skb)
  1009. return;
  1010. skb_put_u8(skb, PN533_CFGITEM_RF_FIELD);
  1011. skb_put_u8(skb, PN533_CFGITEM_RF_FIELD_AUTO_RFCA);
  1012. rc = pn533_send_cmd_async(dev, PN533_CMD_RF_CONFIGURATION, skb,
  1013. pn533_rf_complete, NULL);
  1014. if (rc < 0) {
  1015. dev_kfree_skb(skb);
  1016. nfc_err(dev->dev, "RF setting error %d\n", rc);
  1017. }
  1018. }
  1019. static int pn533_poll_dep_complete(struct pn533 *dev, void *arg,
  1020. struct sk_buff *resp)
  1021. {
  1022. struct pn533_cmd_jump_dep_response *rsp;
  1023. struct nfc_target nfc_target;
  1024. u8 target_gt_len;
  1025. int rc;
  1026. if (IS_ERR(resp))
  1027. return PTR_ERR(resp);
  1028. memset(&nfc_target, 0, sizeof(struct nfc_target));
  1029. rsp = (struct pn533_cmd_jump_dep_response *)resp->data;
  1030. rc = rsp->status & PN533_CMD_RET_MASK;
  1031. if (rc != PN533_CMD_RET_SUCCESS) {
  1032. /* Not target found, turn radio off */
  1033. queue_work(dev->wq, &dev->rf_work);
  1034. dev_kfree_skb(resp);
  1035. return 0;
  1036. }
  1037. dev_dbg(dev->dev, "Creating new target");
  1038. nfc_target.supported_protocols = NFC_PROTO_NFC_DEP_MASK;
  1039. nfc_target.nfcid1_len = 10;
  1040. memcpy(nfc_target.nfcid1, rsp->nfcid3t, nfc_target.nfcid1_len);
  1041. rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1);
  1042. if (rc)
  1043. goto error;
  1044. dev->tgt_available_prots = 0;
  1045. dev->tgt_active_prot = NFC_PROTO_NFC_DEP;
  1046. /* ATR_RES general bytes are located at offset 17 */
  1047. target_gt_len = resp->len - 17;
  1048. rc = nfc_set_remote_general_bytes(dev->nfc_dev,
  1049. rsp->gt, target_gt_len);
  1050. if (!rc) {
  1051. rc = nfc_dep_link_is_up(dev->nfc_dev,
  1052. dev->nfc_dev->targets[0].idx,
  1053. 0, NFC_RF_INITIATOR);
  1054. if (!rc)
  1055. pn533_poll_reset_mod_list(dev);
  1056. }
  1057. error:
  1058. dev_kfree_skb(resp);
  1059. return rc;
  1060. }
  1061. #define PASSIVE_DATA_LEN 5
  1062. static int pn533_poll_dep(struct nfc_dev *nfc_dev)
  1063. {
  1064. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1065. struct sk_buff *skb;
  1066. int rc, skb_len;
  1067. u8 *next, nfcid3[NFC_NFCID3_MAXSIZE];
  1068. u8 passive_data[PASSIVE_DATA_LEN] = {0x00, 0xff, 0xff, 0x00, 0x3};
  1069. if (!dev->gb) {
  1070. dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len);
  1071. if (!dev->gb || !dev->gb_len) {
  1072. dev->poll_dep = 0;
  1073. queue_work(dev->wq, &dev->rf_work);
  1074. }
  1075. }
  1076. skb_len = 3 + dev->gb_len; /* ActPass + BR + Next */
  1077. skb_len += PASSIVE_DATA_LEN;
  1078. /* NFCID3 */
  1079. skb_len += NFC_NFCID3_MAXSIZE;
  1080. nfcid3[0] = 0x1;
  1081. nfcid3[1] = 0xfe;
  1082. get_random_bytes(nfcid3 + 2, 6);
  1083. skb = pn533_alloc_skb(dev, skb_len);
  1084. if (!skb)
  1085. return -ENOMEM;
  1086. skb_put_u8(skb, 0x01); /* Active */
  1087. skb_put_u8(skb, 0x02); /* 424 kbps */
  1088. next = skb_put(skb, 1); /* Next */
  1089. *next = 0;
  1090. /* Copy passive data */
  1091. skb_put_data(skb, passive_data, PASSIVE_DATA_LEN);
  1092. *next |= 1;
  1093. /* Copy NFCID3 (which is NFCID2 from SENSF_RES) */
  1094. skb_put_data(skb, nfcid3, NFC_NFCID3_MAXSIZE);
  1095. *next |= 2;
  1096. skb_put_data(skb, dev->gb, dev->gb_len);
  1097. *next |= 4; /* We have some Gi */
  1098. rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb,
  1099. pn533_poll_dep_complete, NULL);
  1100. if (rc < 0)
  1101. dev_kfree_skb(skb);
  1102. return rc;
  1103. }
  1104. static int pn533_autopoll_complete(struct pn533 *dev, void *arg,
  1105. struct sk_buff *resp)
  1106. {
  1107. struct pn532_autopoll_resp *apr;
  1108. struct nfc_target nfc_tgt;
  1109. u8 nbtg;
  1110. int rc;
  1111. if (IS_ERR(resp)) {
  1112. rc = PTR_ERR(resp);
  1113. nfc_err(dev->dev, "%s autopoll complete error %d\n",
  1114. __func__, rc);
  1115. if (rc == -ENOENT) {
  1116. if (dev->poll_mod_count != 0)
  1117. return rc;
  1118. goto stop_poll;
  1119. } else if (rc < 0) {
  1120. nfc_err(dev->dev,
  1121. "Error %d when running autopoll\n", rc);
  1122. goto stop_poll;
  1123. }
  1124. }
  1125. nbtg = resp->data[0];
  1126. if ((nbtg > 2) || (nbtg <= 0))
  1127. return -EAGAIN;
  1128. apr = (struct pn532_autopoll_resp *)&resp->data[1];
  1129. while (nbtg--) {
  1130. memset(&nfc_tgt, 0, sizeof(struct nfc_target));
  1131. switch (apr->type) {
  1132. case PN532_AUTOPOLL_TYPE_ISOA:
  1133. dev_dbg(dev->dev, "ISOA\n");
  1134. rc = pn533_target_found_type_a(&nfc_tgt, apr->tgdata,
  1135. apr->ln - 1);
  1136. break;
  1137. case PN532_AUTOPOLL_TYPE_FELICA212:
  1138. case PN532_AUTOPOLL_TYPE_FELICA424:
  1139. dev_dbg(dev->dev, "FELICA\n");
  1140. rc = pn533_target_found_felica(&nfc_tgt, apr->tgdata,
  1141. apr->ln - 1);
  1142. break;
  1143. case PN532_AUTOPOLL_TYPE_JEWEL:
  1144. dev_dbg(dev->dev, "JEWEL\n");
  1145. rc = pn533_target_found_jewel(&nfc_tgt, apr->tgdata,
  1146. apr->ln - 1);
  1147. break;
  1148. case PN532_AUTOPOLL_TYPE_ISOB:
  1149. dev_dbg(dev->dev, "ISOB\n");
  1150. rc = pn533_target_found_type_b(&nfc_tgt, apr->tgdata,
  1151. apr->ln - 1);
  1152. break;
  1153. case PN532_AUTOPOLL_TYPE_MIFARE:
  1154. dev_dbg(dev->dev, "Mifare\n");
  1155. rc = pn533_target_found_type_a(&nfc_tgt, apr->tgdata,
  1156. apr->ln - 1);
  1157. break;
  1158. default:
  1159. nfc_err(dev->dev,
  1160. "Unknown current poll modulation\n");
  1161. rc = -EPROTO;
  1162. }
  1163. if (rc)
  1164. goto done;
  1165. if (!(nfc_tgt.supported_protocols & dev->poll_protocols)) {
  1166. nfc_err(dev->dev,
  1167. "The Tg found doesn't have the desired protocol\n");
  1168. rc = -EAGAIN;
  1169. goto done;
  1170. }
  1171. dev->tgt_available_prots = nfc_tgt.supported_protocols;
  1172. apr = (struct pn532_autopoll_resp *)
  1173. (apr->tgdata + (apr->ln - 1));
  1174. }
  1175. pn533_poll_reset_mod_list(dev);
  1176. nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1);
  1177. done:
  1178. dev_kfree_skb(resp);
  1179. return rc;
  1180. stop_poll:
  1181. nfc_err(dev->dev, "autopoll operation has been stopped\n");
  1182. pn533_poll_reset_mod_list(dev);
  1183. dev->poll_protocols = 0;
  1184. return rc;
  1185. }
  1186. static int pn533_poll_complete(struct pn533 *dev, void *arg,
  1187. struct sk_buff *resp)
  1188. {
  1189. struct pn533_poll_modulations *cur_mod;
  1190. int rc;
  1191. if (IS_ERR(resp)) {
  1192. rc = PTR_ERR(resp);
  1193. nfc_err(dev->dev, "%s Poll complete error %d\n",
  1194. __func__, rc);
  1195. if (rc == -ENOENT) {
  1196. if (dev->poll_mod_count != 0)
  1197. return rc;
  1198. goto stop_poll;
  1199. } else if (rc < 0) {
  1200. nfc_err(dev->dev,
  1201. "Error %d when running poll\n", rc);
  1202. goto stop_poll;
  1203. }
  1204. }
  1205. cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
  1206. if (cur_mod->len == 0) { /* Target mode */
  1207. del_timer(&dev->listen_timer);
  1208. rc = pn533_init_target_complete(dev, resp);
  1209. goto done;
  1210. }
  1211. /* Initiator mode */
  1212. rc = pn533_start_poll_complete(dev, resp);
  1213. if (!rc)
  1214. goto done;
  1215. if (!dev->poll_mod_count) {
  1216. dev_dbg(dev->dev, "Polling has been stopped\n");
  1217. goto done;
  1218. }
  1219. pn533_poll_next_mod(dev);
  1220. /* Not target found, turn radio off */
  1221. queue_work(dev->wq, &dev->rf_work);
  1222. done:
  1223. dev_kfree_skb(resp);
  1224. return rc;
  1225. stop_poll:
  1226. nfc_err(dev->dev, "Polling operation has been stopped\n");
  1227. pn533_poll_reset_mod_list(dev);
  1228. dev->poll_protocols = 0;
  1229. return rc;
  1230. }
  1231. static struct sk_buff *pn533_alloc_poll_in_frame(struct pn533 *dev,
  1232. struct pn533_poll_modulations *mod)
  1233. {
  1234. struct sk_buff *skb;
  1235. skb = pn533_alloc_skb(dev, mod->len);
  1236. if (!skb)
  1237. return NULL;
  1238. skb_put_data(skb, &mod->data, mod->len);
  1239. return skb;
  1240. }
  1241. static int pn533_send_poll_frame(struct pn533 *dev)
  1242. {
  1243. struct pn533_poll_modulations *mod;
  1244. struct sk_buff *skb;
  1245. int rc;
  1246. u8 cmd_code;
  1247. mod = dev->poll_mod_active[dev->poll_mod_curr];
  1248. dev_dbg(dev->dev, "%s mod len %d\n",
  1249. __func__, mod->len);
  1250. if ((dev->poll_protocols & NFC_PROTO_NFC_DEP_MASK) && dev->poll_dep) {
  1251. dev->poll_dep = 0;
  1252. return pn533_poll_dep(dev->nfc_dev);
  1253. }
  1254. if (mod->len == 0) { /* Listen mode */
  1255. cmd_code = PN533_CMD_TG_INIT_AS_TARGET;
  1256. skb = pn533_alloc_poll_tg_frame(dev);
  1257. } else { /* Polling mode */
  1258. cmd_code = PN533_CMD_IN_LIST_PASSIVE_TARGET;
  1259. skb = pn533_alloc_poll_in_frame(dev, mod);
  1260. }
  1261. if (!skb) {
  1262. nfc_err(dev->dev, "Failed to allocate skb\n");
  1263. return -ENOMEM;
  1264. }
  1265. rc = pn533_send_cmd_async(dev, cmd_code, skb, pn533_poll_complete,
  1266. NULL);
  1267. if (rc < 0) {
  1268. dev_kfree_skb(skb);
  1269. nfc_err(dev->dev, "Polling loop error %d\n", rc);
  1270. }
  1271. return rc;
  1272. }
  1273. static void pn533_wq_poll(struct work_struct *work)
  1274. {
  1275. struct pn533 *dev = container_of(work, struct pn533, poll_work.work);
  1276. struct pn533_poll_modulations *cur_mod;
  1277. int rc;
  1278. cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
  1279. dev_dbg(dev->dev,
  1280. "%s cancel_listen %d modulation len %d\n",
  1281. __func__, dev->cancel_listen, cur_mod->len);
  1282. if (dev->cancel_listen == 1) {
  1283. dev->cancel_listen = 0;
  1284. dev->phy_ops->abort_cmd(dev, GFP_ATOMIC);
  1285. }
  1286. rc = pn533_send_poll_frame(dev);
  1287. if (rc)
  1288. return;
  1289. if (cur_mod->len == 0 && dev->poll_mod_count > 1)
  1290. mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ);
  1291. }
  1292. static int pn533_start_poll(struct nfc_dev *nfc_dev,
  1293. u32 im_protocols, u32 tm_protocols)
  1294. {
  1295. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1296. struct pn533_poll_modulations *cur_mod;
  1297. struct sk_buff *skb;
  1298. u8 rand_mod;
  1299. int rc;
  1300. dev_dbg(dev->dev,
  1301. "%s: im protocols 0x%x tm protocols 0x%x\n",
  1302. __func__, im_protocols, tm_protocols);
  1303. if (dev->tgt_active_prot) {
  1304. nfc_err(dev->dev,
  1305. "Cannot poll with a target already activated\n");
  1306. return -EBUSY;
  1307. }
  1308. if (dev->tgt_mode) {
  1309. nfc_err(dev->dev,
  1310. "Cannot poll while already being activated\n");
  1311. return -EBUSY;
  1312. }
  1313. if (tm_protocols) {
  1314. dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len);
  1315. if (dev->gb == NULL)
  1316. tm_protocols = 0;
  1317. }
  1318. dev->poll_protocols = im_protocols;
  1319. dev->listen_protocols = tm_protocols;
  1320. if (dev->device_type == PN533_DEVICE_PN532_AUTOPOLL) {
  1321. skb = pn533_alloc_skb(dev, 4 + 6);
  1322. if (!skb)
  1323. return -ENOMEM;
  1324. *((u8 *)skb_put(skb, sizeof(u8))) =
  1325. PN532_AUTOPOLL_POLLNR_INFINITE;
  1326. *((u8 *)skb_put(skb, sizeof(u8))) = PN532_AUTOPOLL_PERIOD;
  1327. if ((im_protocols & NFC_PROTO_MIFARE_MASK) &&
  1328. (im_protocols & NFC_PROTO_ISO14443_MASK) &&
  1329. (im_protocols & NFC_PROTO_NFC_DEP_MASK))
  1330. *((u8 *)skb_put(skb, sizeof(u8))) =
  1331. PN532_AUTOPOLL_TYPE_GENERIC_106;
  1332. else {
  1333. if (im_protocols & NFC_PROTO_MIFARE_MASK)
  1334. *((u8 *)skb_put(skb, sizeof(u8))) =
  1335. PN532_AUTOPOLL_TYPE_MIFARE;
  1336. if (im_protocols & NFC_PROTO_ISO14443_MASK)
  1337. *((u8 *)skb_put(skb, sizeof(u8))) =
  1338. PN532_AUTOPOLL_TYPE_ISOA;
  1339. if (im_protocols & NFC_PROTO_NFC_DEP_MASK) {
  1340. *((u8 *)skb_put(skb, sizeof(u8))) =
  1341. PN532_AUTOPOLL_TYPE_DEP_PASSIVE_106;
  1342. *((u8 *)skb_put(skb, sizeof(u8))) =
  1343. PN532_AUTOPOLL_TYPE_DEP_PASSIVE_212;
  1344. *((u8 *)skb_put(skb, sizeof(u8))) =
  1345. PN532_AUTOPOLL_TYPE_DEP_PASSIVE_424;
  1346. }
  1347. }
  1348. if (im_protocols & NFC_PROTO_FELICA_MASK ||
  1349. im_protocols & NFC_PROTO_NFC_DEP_MASK) {
  1350. *((u8 *)skb_put(skb, sizeof(u8))) =
  1351. PN532_AUTOPOLL_TYPE_FELICA212;
  1352. *((u8 *)skb_put(skb, sizeof(u8))) =
  1353. PN532_AUTOPOLL_TYPE_FELICA424;
  1354. }
  1355. if (im_protocols & NFC_PROTO_JEWEL_MASK)
  1356. *((u8 *)skb_put(skb, sizeof(u8))) =
  1357. PN532_AUTOPOLL_TYPE_JEWEL;
  1358. if (im_protocols & NFC_PROTO_ISO14443_B_MASK)
  1359. *((u8 *)skb_put(skb, sizeof(u8))) =
  1360. PN532_AUTOPOLL_TYPE_ISOB;
  1361. if (tm_protocols)
  1362. *((u8 *)skb_put(skb, sizeof(u8))) =
  1363. PN532_AUTOPOLL_TYPE_DEP_ACTIVE_106;
  1364. rc = pn533_send_cmd_async(dev, PN533_CMD_IN_AUTOPOLL, skb,
  1365. pn533_autopoll_complete, NULL);
  1366. if (rc < 0)
  1367. dev_kfree_skb(skb);
  1368. else
  1369. dev->poll_mod_count++;
  1370. return rc;
  1371. }
  1372. pn533_poll_create_mod_list(dev, im_protocols, tm_protocols);
  1373. /* Do not always start polling from the same modulation */
  1374. get_random_bytes(&rand_mod, sizeof(rand_mod));
  1375. rand_mod %= dev->poll_mod_count;
  1376. dev->poll_mod_curr = rand_mod;
  1377. cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
  1378. rc = pn533_send_poll_frame(dev);
  1379. /* Start listen timer */
  1380. if (!rc && cur_mod->len == 0 && dev->poll_mod_count > 1)
  1381. mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ);
  1382. return rc;
  1383. }
  1384. static void pn533_stop_poll(struct nfc_dev *nfc_dev)
  1385. {
  1386. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1387. del_timer(&dev->listen_timer);
  1388. if (!dev->poll_mod_count) {
  1389. dev_dbg(dev->dev,
  1390. "Polling operation was not running\n");
  1391. return;
  1392. }
  1393. dev->phy_ops->abort_cmd(dev, GFP_KERNEL);
  1394. flush_delayed_work(&dev->poll_work);
  1395. pn533_poll_reset_mod_list(dev);
  1396. }
  1397. static int pn533_activate_target_nfcdep(struct pn533 *dev)
  1398. {
  1399. struct pn533_cmd_activate_response *rsp;
  1400. u16 gt_len;
  1401. int rc;
  1402. struct sk_buff *skb;
  1403. struct sk_buff *resp;
  1404. skb = pn533_alloc_skb(dev, sizeof(u8) * 2); /*TG + Next*/
  1405. if (!skb)
  1406. return -ENOMEM;
  1407. skb_put_u8(skb, 1); /* TG */
  1408. skb_put_u8(skb, 0); /* Next */
  1409. resp = pn533_send_cmd_sync(dev, PN533_CMD_IN_ATR, skb);
  1410. if (IS_ERR(resp))
  1411. return PTR_ERR(resp);
  1412. rsp = (struct pn533_cmd_activate_response *)resp->data;
  1413. rc = rsp->status & PN533_CMD_RET_MASK;
  1414. if (rc != PN533_CMD_RET_SUCCESS) {
  1415. nfc_err(dev->dev,
  1416. "Target activation failed (error 0x%x)\n", rc);
  1417. dev_kfree_skb(resp);
  1418. return -EIO;
  1419. }
  1420. /* ATR_RES general bytes are located at offset 16 */
  1421. gt_len = resp->len - 16;
  1422. rc = nfc_set_remote_general_bytes(dev->nfc_dev, rsp->gt, gt_len);
  1423. dev_kfree_skb(resp);
  1424. return rc;
  1425. }
  1426. static int pn533_activate_target(struct nfc_dev *nfc_dev,
  1427. struct nfc_target *target, u32 protocol)
  1428. {
  1429. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1430. int rc;
  1431. dev_dbg(dev->dev, "%s: protocol=%u\n", __func__, protocol);
  1432. if (dev->poll_mod_count) {
  1433. nfc_err(dev->dev,
  1434. "Cannot activate while polling\n");
  1435. return -EBUSY;
  1436. }
  1437. if (dev->tgt_active_prot) {
  1438. nfc_err(dev->dev,
  1439. "There is already an active target\n");
  1440. return -EBUSY;
  1441. }
  1442. if (!dev->tgt_available_prots) {
  1443. nfc_err(dev->dev,
  1444. "There is no available target to activate\n");
  1445. return -EINVAL;
  1446. }
  1447. if (!(dev->tgt_available_prots & (1 << protocol))) {
  1448. nfc_err(dev->dev,
  1449. "Target doesn't support requested proto %u\n",
  1450. protocol);
  1451. return -EINVAL;
  1452. }
  1453. if (protocol == NFC_PROTO_NFC_DEP) {
  1454. rc = pn533_activate_target_nfcdep(dev);
  1455. if (rc) {
  1456. nfc_err(dev->dev,
  1457. "Activating target with DEP failed %d\n", rc);
  1458. return rc;
  1459. }
  1460. }
  1461. dev->tgt_active_prot = protocol;
  1462. dev->tgt_available_prots = 0;
  1463. return 0;
  1464. }
  1465. static int pn533_deactivate_target_complete(struct pn533 *dev, void *arg,
  1466. struct sk_buff *resp)
  1467. {
  1468. int rc = 0;
  1469. if (IS_ERR(resp)) {
  1470. rc = PTR_ERR(resp);
  1471. nfc_err(dev->dev, "Target release error %d\n", rc);
  1472. return rc;
  1473. }
  1474. rc = resp->data[0] & PN533_CMD_RET_MASK;
  1475. if (rc != PN533_CMD_RET_SUCCESS)
  1476. nfc_err(dev->dev,
  1477. "Error 0x%x when releasing the target\n", rc);
  1478. dev_kfree_skb(resp);
  1479. return rc;
  1480. }
  1481. static void pn533_deactivate_target(struct nfc_dev *nfc_dev,
  1482. struct nfc_target *target, u8 mode)
  1483. {
  1484. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1485. struct sk_buff *skb;
  1486. int rc;
  1487. if (!dev->tgt_active_prot) {
  1488. nfc_err(dev->dev, "There is no active target\n");
  1489. return;
  1490. }
  1491. dev->tgt_active_prot = 0;
  1492. skb_queue_purge(&dev->resp_q);
  1493. skb = pn533_alloc_skb(dev, sizeof(u8));
  1494. if (!skb)
  1495. return;
  1496. skb_put_u8(skb, 1); /* TG*/
  1497. rc = pn533_send_cmd_async(dev, PN533_CMD_IN_RELEASE, skb,
  1498. pn533_deactivate_target_complete, NULL);
  1499. if (rc < 0) {
  1500. dev_kfree_skb(skb);
  1501. nfc_err(dev->dev, "Target release error %d\n", rc);
  1502. }
  1503. }
  1504. static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg,
  1505. struct sk_buff *resp)
  1506. {
  1507. struct pn533_cmd_jump_dep_response *rsp;
  1508. u8 target_gt_len;
  1509. int rc;
  1510. u8 active = *(u8 *)arg;
  1511. kfree(arg);
  1512. if (IS_ERR(resp))
  1513. return PTR_ERR(resp);
  1514. if (dev->tgt_available_prots &&
  1515. !(dev->tgt_available_prots & (1 << NFC_PROTO_NFC_DEP))) {
  1516. nfc_err(dev->dev,
  1517. "The target does not support DEP\n");
  1518. rc = -EINVAL;
  1519. goto error;
  1520. }
  1521. rsp = (struct pn533_cmd_jump_dep_response *)resp->data;
  1522. rc = rsp->status & PN533_CMD_RET_MASK;
  1523. if (rc != PN533_CMD_RET_SUCCESS) {
  1524. nfc_err(dev->dev,
  1525. "Bringing DEP link up failed (error 0x%x)\n", rc);
  1526. goto error;
  1527. }
  1528. if (!dev->tgt_available_prots) {
  1529. struct nfc_target nfc_target;
  1530. dev_dbg(dev->dev, "Creating new target\n");
  1531. memset(&nfc_target, 0, sizeof(struct nfc_target));
  1532. nfc_target.supported_protocols = NFC_PROTO_NFC_DEP_MASK;
  1533. nfc_target.nfcid1_len = 10;
  1534. memcpy(nfc_target.nfcid1, rsp->nfcid3t, nfc_target.nfcid1_len);
  1535. rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1);
  1536. if (rc)
  1537. goto error;
  1538. dev->tgt_available_prots = 0;
  1539. }
  1540. dev->tgt_active_prot = NFC_PROTO_NFC_DEP;
  1541. /* ATR_RES general bytes are located at offset 17 */
  1542. target_gt_len = resp->len - 17;
  1543. rc = nfc_set_remote_general_bytes(dev->nfc_dev,
  1544. rsp->gt, target_gt_len);
  1545. if (rc == 0)
  1546. rc = nfc_dep_link_is_up(dev->nfc_dev,
  1547. dev->nfc_dev->targets[0].idx,
  1548. !active, NFC_RF_INITIATOR);
  1549. error:
  1550. dev_kfree_skb(resp);
  1551. return rc;
  1552. }
  1553. static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf);
  1554. static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target,
  1555. u8 comm_mode, u8 *gb, size_t gb_len)
  1556. {
  1557. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1558. struct sk_buff *skb;
  1559. int rc, skb_len;
  1560. u8 *next, *arg, nfcid3[NFC_NFCID3_MAXSIZE];
  1561. u8 passive_data[PASSIVE_DATA_LEN] = {0x00, 0xff, 0xff, 0x00, 0x3};
  1562. if (dev->poll_mod_count) {
  1563. nfc_err(dev->dev,
  1564. "Cannot bring the DEP link up while polling\n");
  1565. return -EBUSY;
  1566. }
  1567. if (dev->tgt_active_prot) {
  1568. nfc_err(dev->dev,
  1569. "There is already an active target\n");
  1570. return -EBUSY;
  1571. }
  1572. skb_len = 3 + gb_len; /* ActPass + BR + Next */
  1573. skb_len += PASSIVE_DATA_LEN;
  1574. /* NFCID3 */
  1575. skb_len += NFC_NFCID3_MAXSIZE;
  1576. if (target && !target->nfcid2_len) {
  1577. nfcid3[0] = 0x1;
  1578. nfcid3[1] = 0xfe;
  1579. get_random_bytes(nfcid3 + 2, 6);
  1580. }
  1581. skb = pn533_alloc_skb(dev, skb_len);
  1582. if (!skb)
  1583. return -ENOMEM;
  1584. skb_put_u8(skb, !comm_mode); /* ActPass */
  1585. skb_put_u8(skb, 0x02); /* 424 kbps */
  1586. next = skb_put(skb, 1); /* Next */
  1587. *next = 0;
  1588. /* Copy passive data */
  1589. skb_put_data(skb, passive_data, PASSIVE_DATA_LEN);
  1590. *next |= 1;
  1591. /* Copy NFCID3 (which is NFCID2 from SENSF_RES) */
  1592. if (target && target->nfcid2_len)
  1593. memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), target->nfcid2,
  1594. target->nfcid2_len);
  1595. else
  1596. skb_put_data(skb, nfcid3, NFC_NFCID3_MAXSIZE);
  1597. *next |= 2;
  1598. if (gb != NULL && gb_len > 0) {
  1599. skb_put_data(skb, gb, gb_len);
  1600. *next |= 4; /* We have some Gi */
  1601. } else {
  1602. *next = 0;
  1603. }
  1604. arg = kmalloc(sizeof(*arg), GFP_KERNEL);
  1605. if (!arg) {
  1606. dev_kfree_skb(skb);
  1607. return -ENOMEM;
  1608. }
  1609. *arg = !comm_mode;
  1610. pn533_rf_field(dev->nfc_dev, 0);
  1611. rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb,
  1612. pn533_in_dep_link_up_complete, arg);
  1613. if (rc < 0) {
  1614. dev_kfree_skb(skb);
  1615. kfree(arg);
  1616. }
  1617. return rc;
  1618. }
  1619. static int pn533_dep_link_down(struct nfc_dev *nfc_dev)
  1620. {
  1621. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1622. pn533_poll_reset_mod_list(dev);
  1623. if (dev->tgt_mode || dev->tgt_active_prot)
  1624. dev->phy_ops->abort_cmd(dev, GFP_KERNEL);
  1625. dev->tgt_active_prot = 0;
  1626. dev->tgt_mode = 0;
  1627. skb_queue_purge(&dev->resp_q);
  1628. return 0;
  1629. }
  1630. struct pn533_data_exchange_arg {
  1631. data_exchange_cb_t cb;
  1632. void *cb_context;
  1633. };
  1634. static struct sk_buff *pn533_build_response(struct pn533 *dev)
  1635. {
  1636. struct sk_buff *skb, *tmp, *t;
  1637. unsigned int skb_len = 0, tmp_len = 0;
  1638. if (skb_queue_empty(&dev->resp_q))
  1639. return NULL;
  1640. if (skb_queue_len(&dev->resp_q) == 1) {
  1641. skb = skb_dequeue(&dev->resp_q);
  1642. goto out;
  1643. }
  1644. skb_queue_walk_safe(&dev->resp_q, tmp, t)
  1645. skb_len += tmp->len;
  1646. dev_dbg(dev->dev, "%s total length %d\n",
  1647. __func__, skb_len);
  1648. skb = alloc_skb(skb_len, GFP_KERNEL);
  1649. if (skb == NULL)
  1650. goto out;
  1651. skb_put(skb, skb_len);
  1652. skb_queue_walk_safe(&dev->resp_q, tmp, t) {
  1653. memcpy(skb->data + tmp_len, tmp->data, tmp->len);
  1654. tmp_len += tmp->len;
  1655. }
  1656. out:
  1657. skb_queue_purge(&dev->resp_q);
  1658. return skb;
  1659. }
  1660. static int pn533_data_exchange_complete(struct pn533 *dev, void *_arg,
  1661. struct sk_buff *resp)
  1662. {
  1663. struct pn533_data_exchange_arg *arg = _arg;
  1664. struct sk_buff *skb;
  1665. int rc = 0;
  1666. u8 status, ret, mi;
  1667. if (IS_ERR(resp)) {
  1668. rc = PTR_ERR(resp);
  1669. goto _error;
  1670. }
  1671. status = resp->data[0];
  1672. ret = status & PN533_CMD_RET_MASK;
  1673. mi = status & PN533_CMD_MI_MASK;
  1674. skb_pull(resp, sizeof(status));
  1675. if (ret != PN533_CMD_RET_SUCCESS) {
  1676. nfc_err(dev->dev,
  1677. "Exchanging data failed (error 0x%x)\n", ret);
  1678. rc = -EIO;
  1679. goto error;
  1680. }
  1681. skb_queue_tail(&dev->resp_q, resp);
  1682. if (mi) {
  1683. dev->cmd_complete_mi_arg = arg;
  1684. queue_work(dev->wq, &dev->mi_rx_work);
  1685. return -EINPROGRESS;
  1686. }
  1687. /* Prepare for the next round */
  1688. if (skb_queue_len(&dev->fragment_skb) > 0) {
  1689. dev->cmd_complete_dep_arg = arg;
  1690. queue_work(dev->wq, &dev->mi_tx_work);
  1691. return -EINPROGRESS;
  1692. }
  1693. skb = pn533_build_response(dev);
  1694. if (!skb) {
  1695. rc = -ENOMEM;
  1696. goto error;
  1697. }
  1698. arg->cb(arg->cb_context, skb, 0);
  1699. kfree(arg);
  1700. return 0;
  1701. error:
  1702. dev_kfree_skb(resp);
  1703. _error:
  1704. skb_queue_purge(&dev->resp_q);
  1705. arg->cb(arg->cb_context, NULL, rc);
  1706. kfree(arg);
  1707. return rc;
  1708. }
  1709. /*
  1710. * Receive an incoming pn533 frame. skb contains only header and payload.
  1711. * If skb == NULL, it is a notification that the link below is dead.
  1712. */
  1713. void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status)
  1714. {
  1715. if (!dev->cmd)
  1716. goto sched_wq;
  1717. dev->cmd->status = status;
  1718. if (status != 0) {
  1719. dev_dbg(dev->dev, "%s: Error received: %d\n", __func__, status);
  1720. goto sched_wq;
  1721. }
  1722. if (skb == NULL) {
  1723. dev_err(dev->dev, "NULL Frame -> link is dead\n");
  1724. goto sched_wq;
  1725. }
  1726. if (pn533_rx_frame_is_ack(skb->data)) {
  1727. dev_dbg(dev->dev, "%s: Received ACK frame\n", __func__);
  1728. dev_kfree_skb(skb);
  1729. return;
  1730. }
  1731. print_hex_dump_debug("PN533 RX: ", DUMP_PREFIX_NONE, 16, 1, skb->data,
  1732. dev->ops->rx_frame_size(skb->data), false);
  1733. if (!dev->ops->rx_is_frame_valid(skb->data, dev)) {
  1734. nfc_err(dev->dev, "Received an invalid frame\n");
  1735. dev->cmd->status = -EIO;
  1736. } else if (!pn533_rx_frame_is_cmd_response(dev, skb->data)) {
  1737. nfc_err(dev->dev, "It it not the response to the last command\n");
  1738. dev->cmd->status = -EIO;
  1739. }
  1740. dev->cmd->resp = skb;
  1741. sched_wq:
  1742. queue_work(dev->wq, &dev->cmd_complete_work);
  1743. }
  1744. EXPORT_SYMBOL(pn533_recv_frame);
  1745. /* Split the Tx skb into small chunks */
  1746. static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb)
  1747. {
  1748. struct sk_buff *frag;
  1749. int frag_size;
  1750. do {
  1751. /* Remaining size */
  1752. if (skb->len > PN533_CMD_DATAFRAME_MAXLEN)
  1753. frag_size = PN533_CMD_DATAFRAME_MAXLEN;
  1754. else
  1755. frag_size = skb->len;
  1756. /* Allocate and reserve */
  1757. frag = pn533_alloc_skb(dev, frag_size);
  1758. if (!frag) {
  1759. skb_queue_purge(&dev->fragment_skb);
  1760. return -ENOMEM;
  1761. }
  1762. if (!dev->tgt_mode) {
  1763. /* Reserve the TG/MI byte */
  1764. skb_reserve(frag, 1);
  1765. /* MI + TG */
  1766. if (frag_size == PN533_CMD_DATAFRAME_MAXLEN)
  1767. *(u8 *)skb_push(frag, sizeof(u8)) =
  1768. (PN533_CMD_MI_MASK | 1);
  1769. else
  1770. *(u8 *)skb_push(frag, sizeof(u8)) = 1; /* TG */
  1771. }
  1772. skb_put_data(frag, skb->data, frag_size);
  1773. /* Reduce the size of incoming buffer */
  1774. skb_pull(skb, frag_size);
  1775. /* Add this to skb_queue */
  1776. skb_queue_tail(&dev->fragment_skb, frag);
  1777. } while (skb->len > 0);
  1778. dev_kfree_skb(skb);
  1779. return skb_queue_len(&dev->fragment_skb);
  1780. }
  1781. static int pn533_transceive(struct nfc_dev *nfc_dev,
  1782. struct nfc_target *target, struct sk_buff *skb,
  1783. data_exchange_cb_t cb, void *cb_context)
  1784. {
  1785. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1786. struct pn533_data_exchange_arg *arg = NULL;
  1787. int rc;
  1788. if (!dev->tgt_active_prot) {
  1789. nfc_err(dev->dev,
  1790. "Can't exchange data if there is no active target\n");
  1791. rc = -EINVAL;
  1792. goto error;
  1793. }
  1794. arg = kmalloc(sizeof(*arg), GFP_KERNEL);
  1795. if (!arg) {
  1796. rc = -ENOMEM;
  1797. goto error;
  1798. }
  1799. arg->cb = cb;
  1800. arg->cb_context = cb_context;
  1801. switch (dev->device_type) {
  1802. case PN533_DEVICE_PASORI:
  1803. if (dev->tgt_active_prot == NFC_PROTO_FELICA) {
  1804. rc = pn533_send_data_async(dev, PN533_CMD_IN_COMM_THRU,
  1805. skb,
  1806. pn533_data_exchange_complete,
  1807. arg);
  1808. break;
  1809. }
  1810. fallthrough;
  1811. default:
  1812. /* jumbo frame ? */
  1813. if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
  1814. rc = pn533_fill_fragment_skbs(dev, skb);
  1815. if (rc < 0)
  1816. goto error;
  1817. skb = skb_dequeue(&dev->fragment_skb);
  1818. if (!skb) {
  1819. rc = -EIO;
  1820. goto error;
  1821. }
  1822. } else {
  1823. *(u8 *)skb_push(skb, sizeof(u8)) = 1; /* TG */
  1824. }
  1825. rc = pn533_send_data_async(dev, PN533_CMD_IN_DATA_EXCHANGE,
  1826. skb, pn533_data_exchange_complete,
  1827. arg);
  1828. break;
  1829. }
  1830. if (rc < 0) /* rc from send_async */
  1831. goto error;
  1832. return 0;
  1833. error:
  1834. kfree(arg);
  1835. dev_kfree_skb(skb);
  1836. return rc;
  1837. }
  1838. static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
  1839. struct sk_buff *resp)
  1840. {
  1841. u8 status;
  1842. if (IS_ERR(resp))
  1843. return PTR_ERR(resp);
  1844. status = resp->data[0];
  1845. /* Prepare for the next round */
  1846. if (skb_queue_len(&dev->fragment_skb) > 0) {
  1847. queue_work(dev->wq, &dev->mi_tm_tx_work);
  1848. return -EINPROGRESS;
  1849. }
  1850. dev_kfree_skb(resp);
  1851. if (status != 0) {
  1852. nfc_tm_deactivated(dev->nfc_dev);
  1853. dev->tgt_mode = 0;
  1854. return 0;
  1855. }
  1856. queue_work(dev->wq, &dev->tg_work);
  1857. return 0;
  1858. }
  1859. static int pn533_tm_send(struct nfc_dev *nfc_dev, struct sk_buff *skb)
  1860. {
  1861. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  1862. int rc;
  1863. /* let's split in multiple chunks if size's too big */
  1864. if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
  1865. rc = pn533_fill_fragment_skbs(dev, skb);
  1866. if (rc < 0)
  1867. goto error;
  1868. /* get the first skb */
  1869. skb = skb_dequeue(&dev->fragment_skb);
  1870. if (!skb) {
  1871. rc = -EIO;
  1872. goto error;
  1873. }
  1874. rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_META_DATA, skb,
  1875. pn533_tm_send_complete, NULL);
  1876. } else {
  1877. /* Send th skb */
  1878. rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_DATA, skb,
  1879. pn533_tm_send_complete, NULL);
  1880. }
  1881. error:
  1882. if (rc < 0) {
  1883. dev_kfree_skb(skb);
  1884. skb_queue_purge(&dev->fragment_skb);
  1885. }
  1886. return rc;
  1887. }
  1888. static void pn533_wq_mi_recv(struct work_struct *work)
  1889. {
  1890. struct pn533 *dev = container_of(work, struct pn533, mi_rx_work);
  1891. struct sk_buff *skb;
  1892. int rc;
  1893. skb = pn533_alloc_skb(dev, PN533_CMD_DATAEXCH_HEAD_LEN);
  1894. if (!skb)
  1895. goto error;
  1896. switch (dev->device_type) {
  1897. case PN533_DEVICE_PASORI:
  1898. if (dev->tgt_active_prot == NFC_PROTO_FELICA) {
  1899. rc = pn533_send_cmd_direct_async(dev,
  1900. PN533_CMD_IN_COMM_THRU,
  1901. skb,
  1902. pn533_data_exchange_complete,
  1903. dev->cmd_complete_mi_arg);
  1904. break;
  1905. }
  1906. fallthrough;
  1907. default:
  1908. skb_put_u8(skb, 1); /*TG*/
  1909. rc = pn533_send_cmd_direct_async(dev,
  1910. PN533_CMD_IN_DATA_EXCHANGE,
  1911. skb,
  1912. pn533_data_exchange_complete,
  1913. dev->cmd_complete_mi_arg);
  1914. break;
  1915. }
  1916. if (rc == 0) /* success */
  1917. return;
  1918. nfc_err(dev->dev,
  1919. "Error %d when trying to perform data_exchange\n", rc);
  1920. dev_kfree_skb(skb);
  1921. kfree(dev->cmd_complete_mi_arg);
  1922. error:
  1923. dev->phy_ops->send_ack(dev, GFP_KERNEL);
  1924. queue_work(dev->wq, &dev->cmd_work);
  1925. }
  1926. static void pn533_wq_mi_send(struct work_struct *work)
  1927. {
  1928. struct pn533 *dev = container_of(work, struct pn533, mi_tx_work);
  1929. struct sk_buff *skb;
  1930. int rc;
  1931. /* Grab the first skb in the queue */
  1932. skb = skb_dequeue(&dev->fragment_skb);
  1933. if (skb == NULL) { /* No more data */
  1934. /* Reset the queue for future use */
  1935. skb_queue_head_init(&dev->fragment_skb);
  1936. goto error;
  1937. }
  1938. switch (dev->device_type) {
  1939. case PN533_DEVICE_PASORI:
  1940. if (dev->tgt_active_prot != NFC_PROTO_FELICA) {
  1941. rc = -EIO;
  1942. break;
  1943. }
  1944. rc = pn533_send_cmd_direct_async(dev, PN533_CMD_IN_COMM_THRU,
  1945. skb,
  1946. pn533_data_exchange_complete,
  1947. dev->cmd_complete_dep_arg);
  1948. break;
  1949. default:
  1950. /* Still some fragments? */
  1951. rc = pn533_send_cmd_direct_async(dev,
  1952. PN533_CMD_IN_DATA_EXCHANGE,
  1953. skb,
  1954. pn533_data_exchange_complete,
  1955. dev->cmd_complete_dep_arg);
  1956. break;
  1957. }
  1958. if (rc == 0) /* success */
  1959. return;
  1960. nfc_err(dev->dev,
  1961. "Error %d when trying to perform data_exchange\n", rc);
  1962. dev_kfree_skb(skb);
  1963. kfree(dev->cmd_complete_dep_arg);
  1964. error:
  1965. dev->phy_ops->send_ack(dev, GFP_KERNEL);
  1966. queue_work(dev->wq, &dev->cmd_work);
  1967. }
  1968. static int pn533_set_configuration(struct pn533 *dev, u8 cfgitem, u8 *cfgdata,
  1969. u8 cfgdata_len)
  1970. {
  1971. struct sk_buff *skb;
  1972. struct sk_buff *resp;
  1973. int skb_len;
  1974. skb_len = sizeof(cfgitem) + cfgdata_len; /* cfgitem + cfgdata */
  1975. skb = pn533_alloc_skb(dev, skb_len);
  1976. if (!skb)
  1977. return -ENOMEM;
  1978. skb_put_u8(skb, cfgitem);
  1979. skb_put_data(skb, cfgdata, cfgdata_len);
  1980. resp = pn533_send_cmd_sync(dev, PN533_CMD_RF_CONFIGURATION, skb);
  1981. if (IS_ERR(resp))
  1982. return PTR_ERR(resp);
  1983. dev_kfree_skb(resp);
  1984. return 0;
  1985. }
  1986. static int pn533_get_firmware_version(struct pn533 *dev,
  1987. struct pn533_fw_version *fv)
  1988. {
  1989. struct sk_buff *skb;
  1990. struct sk_buff *resp;
  1991. skb = pn533_alloc_skb(dev, 0);
  1992. if (!skb)
  1993. return -ENOMEM;
  1994. resp = pn533_send_cmd_sync(dev, PN533_CMD_GET_FIRMWARE_VERSION, skb);
  1995. if (IS_ERR(resp))
  1996. return PTR_ERR(resp);
  1997. fv->ic = resp->data[0];
  1998. fv->ver = resp->data[1];
  1999. fv->rev = resp->data[2];
  2000. fv->support = resp->data[3];
  2001. dev_kfree_skb(resp);
  2002. return 0;
  2003. }
  2004. static int pn533_pasori_fw_reset(struct pn533 *dev)
  2005. {
  2006. struct sk_buff *skb;
  2007. struct sk_buff *resp;
  2008. skb = pn533_alloc_skb(dev, sizeof(u8));
  2009. if (!skb)
  2010. return -ENOMEM;
  2011. skb_put_u8(skb, 0x1);
  2012. resp = pn533_send_cmd_sync(dev, 0x18, skb);
  2013. if (IS_ERR(resp))
  2014. return PTR_ERR(resp);
  2015. dev_kfree_skb(resp);
  2016. return 0;
  2017. }
  2018. static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf)
  2019. {
  2020. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  2021. u8 rf_field = !!rf;
  2022. int rc;
  2023. rf_field |= PN533_CFGITEM_RF_FIELD_AUTO_RFCA;
  2024. rc = pn533_set_configuration(dev, PN533_CFGITEM_RF_FIELD,
  2025. (u8 *)&rf_field, 1);
  2026. if (rc) {
  2027. nfc_err(dev->dev, "Error on setting RF field\n");
  2028. return rc;
  2029. }
  2030. return 0;
  2031. }
  2032. static int pn532_sam_configuration(struct nfc_dev *nfc_dev)
  2033. {
  2034. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  2035. struct sk_buff *skb;
  2036. struct sk_buff *resp;
  2037. skb = pn533_alloc_skb(dev, 1);
  2038. if (!skb)
  2039. return -ENOMEM;
  2040. skb_put_u8(skb, 0x01);
  2041. resp = pn533_send_cmd_sync(dev, PN533_CMD_SAM_CONFIGURATION, skb);
  2042. if (IS_ERR(resp))
  2043. return PTR_ERR(resp);
  2044. dev_kfree_skb(resp);
  2045. return 0;
  2046. }
  2047. static int pn533_dev_up(struct nfc_dev *nfc_dev)
  2048. {
  2049. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  2050. int rc;
  2051. if (dev->phy_ops->dev_up) {
  2052. rc = dev->phy_ops->dev_up(dev);
  2053. if (rc)
  2054. return rc;
  2055. }
  2056. if ((dev->device_type == PN533_DEVICE_PN532) ||
  2057. (dev->device_type == PN533_DEVICE_PN532_AUTOPOLL)) {
  2058. rc = pn532_sam_configuration(nfc_dev);
  2059. if (rc)
  2060. return rc;
  2061. }
  2062. return pn533_rf_field(nfc_dev, 1);
  2063. }
  2064. static int pn533_dev_down(struct nfc_dev *nfc_dev)
  2065. {
  2066. struct pn533 *dev = nfc_get_drvdata(nfc_dev);
  2067. int ret;
  2068. ret = pn533_rf_field(nfc_dev, 0);
  2069. if (dev->phy_ops->dev_down && !ret)
  2070. ret = dev->phy_ops->dev_down(dev);
  2071. return ret;
  2072. }
  2073. static const struct nfc_ops pn533_nfc_ops = {
  2074. .dev_up = pn533_dev_up,
  2075. .dev_down = pn533_dev_down,
  2076. .dep_link_up = pn533_dep_link_up,
  2077. .dep_link_down = pn533_dep_link_down,
  2078. .start_poll = pn533_start_poll,
  2079. .stop_poll = pn533_stop_poll,
  2080. .activate_target = pn533_activate_target,
  2081. .deactivate_target = pn533_deactivate_target,
  2082. .im_transceive = pn533_transceive,
  2083. .tm_send = pn533_tm_send,
  2084. };
  2085. static int pn533_setup(struct pn533 *dev)
  2086. {
  2087. struct pn533_config_max_retries max_retries;
  2088. struct pn533_config_timing timing;
  2089. u8 pasori_cfg[3] = {0x08, 0x01, 0x08};
  2090. int rc;
  2091. switch (dev->device_type) {
  2092. case PN533_DEVICE_STD:
  2093. case PN533_DEVICE_PASORI:
  2094. case PN533_DEVICE_ACR122U:
  2095. case PN533_DEVICE_PN532:
  2096. case PN533_DEVICE_PN532_AUTOPOLL:
  2097. max_retries.mx_rty_atr = 0x2;
  2098. max_retries.mx_rty_psl = 0x1;
  2099. max_retries.mx_rty_passive_act =
  2100. PN533_CONFIG_MAX_RETRIES_NO_RETRY;
  2101. timing.rfu = PN533_CONFIG_TIMING_102;
  2102. timing.atr_res_timeout = PN533_CONFIG_TIMING_102;
  2103. timing.dep_timeout = PN533_CONFIG_TIMING_204;
  2104. break;
  2105. default:
  2106. nfc_err(dev->dev, "Unknown device type %d\n",
  2107. dev->device_type);
  2108. return -EINVAL;
  2109. }
  2110. rc = pn533_set_configuration(dev, PN533_CFGITEM_MAX_RETRIES,
  2111. (u8 *)&max_retries, sizeof(max_retries));
  2112. if (rc) {
  2113. nfc_err(dev->dev,
  2114. "Error on setting MAX_RETRIES config\n");
  2115. return rc;
  2116. }
  2117. rc = pn533_set_configuration(dev, PN533_CFGITEM_TIMING,
  2118. (u8 *)&timing, sizeof(timing));
  2119. if (rc) {
  2120. nfc_err(dev->dev, "Error on setting RF timings\n");
  2121. return rc;
  2122. }
  2123. switch (dev->device_type) {
  2124. case PN533_DEVICE_STD:
  2125. case PN533_DEVICE_PN532:
  2126. case PN533_DEVICE_PN532_AUTOPOLL:
  2127. break;
  2128. case PN533_DEVICE_PASORI:
  2129. pn533_pasori_fw_reset(dev);
  2130. rc = pn533_set_configuration(dev, PN533_CFGITEM_PASORI,
  2131. pasori_cfg, 3);
  2132. if (rc) {
  2133. nfc_err(dev->dev,
  2134. "Error while settings PASORI config\n");
  2135. return rc;
  2136. }
  2137. pn533_pasori_fw_reset(dev);
  2138. break;
  2139. }
  2140. return 0;
  2141. }
  2142. int pn533_finalize_setup(struct pn533 *dev)
  2143. {
  2144. struct pn533_fw_version fw_ver;
  2145. int rc;
  2146. memset(&fw_ver, 0, sizeof(fw_ver));
  2147. rc = pn533_get_firmware_version(dev, &fw_ver);
  2148. if (rc) {
  2149. nfc_err(dev->dev, "Unable to get FW version\n");
  2150. return rc;
  2151. }
  2152. nfc_info(dev->dev, "NXP PN5%02X firmware ver %d.%d now attached\n",
  2153. fw_ver.ic, fw_ver.ver, fw_ver.rev);
  2154. rc = pn533_setup(dev);
  2155. if (rc)
  2156. return rc;
  2157. return 0;
  2158. }
  2159. EXPORT_SYMBOL_GPL(pn533_finalize_setup);
  2160. struct pn533 *pn53x_common_init(u32 device_type,
  2161. enum pn533_protocol_type protocol_type,
  2162. void *phy,
  2163. const struct pn533_phy_ops *phy_ops,
  2164. struct pn533_frame_ops *fops,
  2165. struct device *dev)
  2166. {
  2167. struct pn533 *priv;
  2168. priv = kzalloc(sizeof(*priv), GFP_KERNEL);
  2169. if (!priv)
  2170. return ERR_PTR(-ENOMEM);
  2171. priv->phy = phy;
  2172. priv->phy_ops = phy_ops;
  2173. priv->dev = dev;
  2174. if (fops != NULL)
  2175. priv->ops = fops;
  2176. else
  2177. priv->ops = &pn533_std_frame_ops;
  2178. priv->protocol_type = protocol_type;
  2179. priv->device_type = device_type;
  2180. mutex_init(&priv->cmd_lock);
  2181. INIT_WORK(&priv->cmd_work, pn533_wq_cmd);
  2182. INIT_WORK(&priv->cmd_complete_work, pn533_wq_cmd_complete);
  2183. INIT_WORK(&priv->mi_rx_work, pn533_wq_mi_recv);
  2184. INIT_WORK(&priv->mi_tx_work, pn533_wq_mi_send);
  2185. INIT_WORK(&priv->tg_work, pn533_wq_tg_get_data);
  2186. INIT_WORK(&priv->mi_tm_rx_work, pn533_wq_tm_mi_recv);
  2187. INIT_WORK(&priv->mi_tm_tx_work, pn533_wq_tm_mi_send);
  2188. INIT_DELAYED_WORK(&priv->poll_work, pn533_wq_poll);
  2189. INIT_WORK(&priv->rf_work, pn533_wq_rf);
  2190. priv->wq = alloc_ordered_workqueue("pn533", 0);
  2191. if (priv->wq == NULL)
  2192. goto error;
  2193. timer_setup(&priv->listen_timer, pn533_listen_mode_timer, 0);
  2194. skb_queue_head_init(&priv->resp_q);
  2195. skb_queue_head_init(&priv->fragment_skb);
  2196. INIT_LIST_HEAD(&priv->cmd_queue);
  2197. return priv;
  2198. error:
  2199. kfree(priv);
  2200. return ERR_PTR(-ENOMEM);
  2201. }
  2202. EXPORT_SYMBOL_GPL(pn53x_common_init);
  2203. void pn53x_common_clean(struct pn533 *priv)
  2204. {
  2205. struct pn533_cmd *cmd, *n;
  2206. /* delete the timer before cleanup the worker */
  2207. del_timer_sync(&priv->listen_timer);
  2208. flush_delayed_work(&priv->poll_work);
  2209. destroy_workqueue(priv->wq);
  2210. skb_queue_purge(&priv->resp_q);
  2211. list_for_each_entry_safe(cmd, n, &priv->cmd_queue, queue) {
  2212. list_del(&cmd->queue);
  2213. kfree(cmd);
  2214. }
  2215. kfree(priv);
  2216. }
  2217. EXPORT_SYMBOL_GPL(pn53x_common_clean);
  2218. int pn532_i2c_nfc_alloc(struct pn533 *priv, u32 protocols,
  2219. struct device *parent)
  2220. {
  2221. priv->nfc_dev = nfc_allocate_device(&pn533_nfc_ops, protocols,
  2222. priv->ops->tx_header_len +
  2223. PN533_CMD_DATAEXCH_HEAD_LEN,
  2224. priv->ops->tx_tail_len);
  2225. if (!priv->nfc_dev)
  2226. return -ENOMEM;
  2227. nfc_set_parent_dev(priv->nfc_dev, parent);
  2228. nfc_set_drvdata(priv->nfc_dev, priv);
  2229. return 0;
  2230. }
  2231. EXPORT_SYMBOL_GPL(pn532_i2c_nfc_alloc);
  2232. int pn53x_register_nfc(struct pn533 *priv, u32 protocols,
  2233. struct device *parent)
  2234. {
  2235. int rc;
  2236. rc = pn532_i2c_nfc_alloc(priv, protocols, parent);
  2237. if (rc)
  2238. return rc;
  2239. rc = nfc_register_device(priv->nfc_dev);
  2240. if (rc)
  2241. nfc_free_device(priv->nfc_dev);
  2242. return rc;
  2243. }
  2244. EXPORT_SYMBOL_GPL(pn53x_register_nfc);
  2245. void pn53x_unregister_nfc(struct pn533 *priv)
  2246. {
  2247. nfc_unregister_device(priv->nfc_dev);
  2248. nfc_free_device(priv->nfc_dev);
  2249. }
  2250. EXPORT_SYMBOL_GPL(pn53x_unregister_nfc);
  2251. MODULE_AUTHOR("Lauro Ramos Venancio <[email protected]>");
  2252. MODULE_AUTHOR("Aloisio Almeida Jr <[email protected]>");
  2253. MODULE_AUTHOR("Waldemar Rymarkiewicz <[email protected]>");
  2254. MODULE_DESCRIPTION("PN533 driver ver " VERSION);
  2255. MODULE_VERSION(VERSION);
  2256. MODULE_LICENSE("GPL");