digital_dep.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * NFC Digital Protocol stack
  4. * Copyright (c) 2013, Intel Corporation.
  5. */
  6. #define pr_fmt(fmt) "digital: %s: " fmt, __func__
  7. #include "digital.h"
  8. #define DIGITAL_NFC_DEP_N_RETRY_NACK 2
  9. #define DIGITAL_NFC_DEP_N_RETRY_ATN 2
  10. #define DIGITAL_NFC_DEP_FRAME_DIR_OUT 0xD4
  11. #define DIGITAL_NFC_DEP_FRAME_DIR_IN 0xD5
  12. #define DIGITAL_NFC_DEP_NFCA_SOD_SB 0xF0
  13. #define DIGITAL_CMD_ATR_REQ 0x00
  14. #define DIGITAL_CMD_ATR_RES 0x01
  15. #define DIGITAL_CMD_PSL_REQ 0x04
  16. #define DIGITAL_CMD_PSL_RES 0x05
  17. #define DIGITAL_CMD_DEP_REQ 0x06
  18. #define DIGITAL_CMD_DEP_RES 0x07
  19. #define DIGITAL_ATR_REQ_MIN_SIZE 16
  20. #define DIGITAL_ATR_REQ_MAX_SIZE 64
  21. #define DIGITAL_ATR_RES_TO_WT(s) ((s) & 0xF)
  22. #define DIGITAL_DID_MAX 14
  23. #define DIGITAL_PAYLOAD_SIZE_MAX 254
  24. #define DIGITAL_PAYLOAD_BITS_TO_PP(s) (((s) & 0x3) << 4)
  25. #define DIGITAL_PAYLOAD_PP_TO_BITS(s) (((s) >> 4) & 0x3)
  26. #define DIGITAL_PAYLOAD_BITS_TO_FSL(s) ((s) & 0x3)
  27. #define DIGITAL_PAYLOAD_FSL_TO_BITS(s) ((s) & 0x3)
  28. #define DIGITAL_GB_BIT 0x02
  29. #define DIGITAL_NFC_DEP_PFB_TYPE(pfb) ((pfb) & 0xE0)
  30. #define DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT 0x10
  31. #define DIGITAL_NFC_DEP_PFB_MI_BIT 0x10
  32. #define DIGITAL_NFC_DEP_PFB_NACK_BIT 0x10
  33. #define DIGITAL_NFC_DEP_PFB_DID_BIT 0x04
  34. #define DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb) \
  35. ((pfb) & DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT)
  36. #define DIGITAL_NFC_DEP_MI_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_MI_BIT)
  37. #define DIGITAL_NFC_DEP_NACK_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_NACK_BIT)
  38. #define DIGITAL_NFC_DEP_NAD_BIT_SET(pfb) ((pfb) & 0x08)
  39. #define DIGITAL_NFC_DEP_DID_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_DID_BIT)
  40. #define DIGITAL_NFC_DEP_PFB_PNI(pfb) ((pfb) & 0x03)
  41. #define DIGITAL_NFC_DEP_RTOX_VALUE(data) ((data) & 0x3F)
  42. #define DIGITAL_NFC_DEP_RTOX_MAX 59
  43. #define DIGITAL_NFC_DEP_PFB_I_PDU 0x00
  44. #define DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU 0x40
  45. #define DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU 0x80
  46. struct digital_atr_req {
  47. u8 dir;
  48. u8 cmd;
  49. u8 nfcid3[10];
  50. u8 did;
  51. u8 bs;
  52. u8 br;
  53. u8 pp;
  54. u8 gb[];
  55. } __packed;
  56. struct digital_atr_res {
  57. u8 dir;
  58. u8 cmd;
  59. u8 nfcid3[10];
  60. u8 did;
  61. u8 bs;
  62. u8 br;
  63. u8 to;
  64. u8 pp;
  65. u8 gb[];
  66. } __packed;
  67. struct digital_psl_req {
  68. u8 dir;
  69. u8 cmd;
  70. u8 did;
  71. u8 brs;
  72. u8 fsl;
  73. } __packed;
  74. struct digital_psl_res {
  75. u8 dir;
  76. u8 cmd;
  77. u8 did;
  78. } __packed;
  79. struct digital_dep_req_res {
  80. u8 dir;
  81. u8 cmd;
  82. u8 pfb;
  83. } __packed;
  84. static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
  85. struct sk_buff *resp);
  86. static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
  87. struct sk_buff *resp);
  88. static const u8 digital_payload_bits_map[4] = {
  89. [0] = 64,
  90. [1] = 128,
  91. [2] = 192,
  92. [3] = 254
  93. };
  94. /* Response Waiting Time for ATR_RES PDU in ms
  95. *
  96. * RWT(ATR_RES) = RWT(nfcdep,activation) + dRWT(nfcdep) + dT(nfcdep,initiator)
  97. *
  98. * with:
  99. * RWT(nfcdep,activation) = 4096 * 2^12 / f(c) s
  100. * dRWT(nfcdep) = 16 / f(c) s
  101. * dT(nfcdep,initiator) = 100 ms
  102. * f(c) = 13560000 Hz
  103. */
  104. #define DIGITAL_ATR_RES_RWT 1337
  105. /* Response Waiting Time for other DEP PDUs in ms
  106. *
  107. * max_rwt = rwt + dRWT(nfcdep) + dT(nfcdep,initiator)
  108. *
  109. * with:
  110. * rwt = (256 * 16 / f(c)) * 2^wt s
  111. * dRWT(nfcdep) = 16 / f(c) s
  112. * dT(nfcdep,initiator) = 100 ms
  113. * f(c) = 13560000 Hz
  114. * 0 <= wt <= 14 (given by the target by the TO field of ATR_RES response)
  115. */
  116. #define DIGITAL_NFC_DEP_IN_MAX_WT 14
  117. #define DIGITAL_NFC_DEP_TG_MAX_WT 14
  118. static const u16 digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT + 1] = {
  119. 100, 101, 101, 102, 105,
  120. 110, 119, 139, 177, 255,
  121. 409, 719, 1337, 2575, 5049,
  122. };
  123. static u8 digital_payload_bits_to_size(u8 payload_bits)
  124. {
  125. if (payload_bits >= ARRAY_SIZE(digital_payload_bits_map))
  126. return 0;
  127. return digital_payload_bits_map[payload_bits];
  128. }
  129. static u8 digital_payload_size_to_bits(u8 payload_size)
  130. {
  131. int i;
  132. for (i = 0; i < ARRAY_SIZE(digital_payload_bits_map); i++)
  133. if (digital_payload_bits_map[i] == payload_size)
  134. return i;
  135. return 0xff;
  136. }
  137. static void digital_skb_push_dep_sod(struct nfc_digital_dev *ddev,
  138. struct sk_buff *skb)
  139. {
  140. skb_push(skb, sizeof(u8));
  141. skb->data[0] = skb->len;
  142. if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)
  143. *(u8 *)skb_push(skb, sizeof(u8)) = DIGITAL_NFC_DEP_NFCA_SOD_SB;
  144. }
  145. static int digital_skb_pull_dep_sod(struct nfc_digital_dev *ddev,
  146. struct sk_buff *skb)
  147. {
  148. u8 size;
  149. if (skb->len < 2)
  150. return -EIO;
  151. if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)
  152. skb_pull(skb, sizeof(u8));
  153. size = skb->data[0];
  154. if (size != skb->len)
  155. return -EIO;
  156. skb_pull(skb, sizeof(u8));
  157. return 0;
  158. }
  159. static struct sk_buff *
  160. digital_send_dep_data_prep(struct nfc_digital_dev *ddev, struct sk_buff *skb,
  161. struct digital_dep_req_res *dep_req_res,
  162. struct digital_data_exch *data_exch)
  163. {
  164. struct sk_buff *new_skb;
  165. if (skb->len > ddev->remote_payload_max) {
  166. dep_req_res->pfb |= DIGITAL_NFC_DEP_PFB_MI_BIT;
  167. new_skb = digital_skb_alloc(ddev, ddev->remote_payload_max);
  168. if (!new_skb) {
  169. kfree_skb(ddev->chaining_skb);
  170. ddev->chaining_skb = NULL;
  171. return ERR_PTR(-ENOMEM);
  172. }
  173. skb_put_data(new_skb, skb->data, ddev->remote_payload_max);
  174. skb_pull(skb, ddev->remote_payload_max);
  175. ddev->chaining_skb = skb;
  176. ddev->data_exch = data_exch;
  177. } else {
  178. ddev->chaining_skb = NULL;
  179. new_skb = skb;
  180. }
  181. return new_skb;
  182. }
  183. static struct sk_buff *
  184. digital_recv_dep_data_gather(struct nfc_digital_dev *ddev, u8 pfb,
  185. struct sk_buff *resp,
  186. int (*send_ack)(struct nfc_digital_dev *ddev,
  187. struct digital_data_exch
  188. *data_exch),
  189. struct digital_data_exch *data_exch)
  190. {
  191. struct sk_buff *new_skb;
  192. int rc;
  193. if (DIGITAL_NFC_DEP_MI_BIT_SET(pfb) && (!ddev->chaining_skb)) {
  194. ddev->chaining_skb =
  195. nfc_alloc_recv_skb(8 * ddev->local_payload_max,
  196. GFP_KERNEL);
  197. if (!ddev->chaining_skb) {
  198. rc = -ENOMEM;
  199. goto error;
  200. }
  201. }
  202. if (ddev->chaining_skb) {
  203. if (resp->len > skb_tailroom(ddev->chaining_skb)) {
  204. new_skb = skb_copy_expand(ddev->chaining_skb,
  205. skb_headroom(
  206. ddev->chaining_skb),
  207. 8 * ddev->local_payload_max,
  208. GFP_KERNEL);
  209. if (!new_skb) {
  210. rc = -ENOMEM;
  211. goto error;
  212. }
  213. kfree_skb(ddev->chaining_skb);
  214. ddev->chaining_skb = new_skb;
  215. }
  216. skb_put_data(ddev->chaining_skb, resp->data, resp->len);
  217. kfree_skb(resp);
  218. resp = NULL;
  219. if (DIGITAL_NFC_DEP_MI_BIT_SET(pfb)) {
  220. rc = send_ack(ddev, data_exch);
  221. if (rc)
  222. goto error;
  223. return NULL;
  224. }
  225. resp = ddev->chaining_skb;
  226. ddev->chaining_skb = NULL;
  227. }
  228. return resp;
  229. error:
  230. kfree_skb(resp);
  231. kfree_skb(ddev->chaining_skb);
  232. ddev->chaining_skb = NULL;
  233. return ERR_PTR(rc);
  234. }
  235. static void digital_in_recv_psl_res(struct nfc_digital_dev *ddev, void *arg,
  236. struct sk_buff *resp)
  237. {
  238. struct nfc_target *target = arg;
  239. struct digital_psl_res *psl_res;
  240. int rc;
  241. if (IS_ERR(resp)) {
  242. rc = PTR_ERR(resp);
  243. resp = NULL;
  244. goto exit;
  245. }
  246. rc = ddev->skb_check_crc(resp);
  247. if (rc) {
  248. PROTOCOL_ERR("14.4.1.6");
  249. goto exit;
  250. }
  251. rc = digital_skb_pull_dep_sod(ddev, resp);
  252. if (rc) {
  253. PROTOCOL_ERR("14.4.1.2");
  254. goto exit;
  255. }
  256. psl_res = (struct digital_psl_res *)resp->data;
  257. if ((resp->len != sizeof(*psl_res)) ||
  258. (psl_res->dir != DIGITAL_NFC_DEP_FRAME_DIR_IN) ||
  259. (psl_res->cmd != DIGITAL_CMD_PSL_RES)) {
  260. rc = -EIO;
  261. goto exit;
  262. }
  263. rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH,
  264. NFC_DIGITAL_RF_TECH_424F);
  265. if (rc)
  266. goto exit;
  267. rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
  268. NFC_DIGITAL_FRAMING_NFCF_NFC_DEP);
  269. if (rc)
  270. goto exit;
  271. if (!DIGITAL_DRV_CAPS_IN_CRC(ddev) &&
  272. (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)) {
  273. ddev->skb_add_crc = digital_skb_add_crc_f;
  274. ddev->skb_check_crc = digital_skb_check_crc_f;
  275. }
  276. ddev->curr_rf_tech = NFC_DIGITAL_RF_TECH_424F;
  277. nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE,
  278. NFC_RF_INITIATOR);
  279. ddev->curr_nfc_dep_pni = 0;
  280. exit:
  281. dev_kfree_skb(resp);
  282. if (rc)
  283. ddev->curr_protocol = 0;
  284. }
  285. static int digital_in_send_psl_req(struct nfc_digital_dev *ddev,
  286. struct nfc_target *target)
  287. {
  288. struct sk_buff *skb;
  289. struct digital_psl_req *psl_req;
  290. int rc;
  291. u8 payload_size, payload_bits;
  292. skb = digital_skb_alloc(ddev, sizeof(*psl_req));
  293. if (!skb)
  294. return -ENOMEM;
  295. skb_put(skb, sizeof(*psl_req));
  296. psl_req = (struct digital_psl_req *)skb->data;
  297. psl_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  298. psl_req->cmd = DIGITAL_CMD_PSL_REQ;
  299. psl_req->did = 0;
  300. psl_req->brs = (0x2 << 3) | 0x2; /* 424F both directions */
  301. payload_size = min(ddev->local_payload_max, ddev->remote_payload_max);
  302. payload_bits = digital_payload_size_to_bits(payload_size);
  303. psl_req->fsl = DIGITAL_PAYLOAD_BITS_TO_FSL(payload_bits);
  304. ddev->local_payload_max = payload_size;
  305. ddev->remote_payload_max = payload_size;
  306. digital_skb_push_dep_sod(ddev, skb);
  307. ddev->skb_add_crc(skb);
  308. rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt,
  309. digital_in_recv_psl_res, target);
  310. if (rc)
  311. kfree_skb(skb);
  312. return rc;
  313. }
  314. static void digital_in_recv_atr_res(struct nfc_digital_dev *ddev, void *arg,
  315. struct sk_buff *resp)
  316. {
  317. struct nfc_target *target = arg;
  318. struct digital_atr_res *atr_res;
  319. u8 gb_len, payload_bits;
  320. u8 wt;
  321. int rc;
  322. if (IS_ERR(resp)) {
  323. rc = PTR_ERR(resp);
  324. resp = NULL;
  325. goto exit;
  326. }
  327. rc = ddev->skb_check_crc(resp);
  328. if (rc) {
  329. PROTOCOL_ERR("14.4.1.6");
  330. goto exit;
  331. }
  332. rc = digital_skb_pull_dep_sod(ddev, resp);
  333. if (rc) {
  334. PROTOCOL_ERR("14.4.1.2");
  335. goto exit;
  336. }
  337. if (resp->len < sizeof(struct digital_atr_res)) {
  338. rc = -EIO;
  339. goto exit;
  340. }
  341. gb_len = resp->len - sizeof(struct digital_atr_res);
  342. atr_res = (struct digital_atr_res *)resp->data;
  343. wt = DIGITAL_ATR_RES_TO_WT(atr_res->to);
  344. if (wt > DIGITAL_NFC_DEP_IN_MAX_WT)
  345. wt = DIGITAL_NFC_DEP_IN_MAX_WT;
  346. ddev->dep_rwt = digital_rwt_map[wt];
  347. payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_res->pp);
  348. ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits);
  349. if (!ddev->remote_payload_max) {
  350. rc = -EINVAL;
  351. goto exit;
  352. }
  353. rc = nfc_set_remote_general_bytes(ddev->nfc_dev, atr_res->gb, gb_len);
  354. if (rc)
  355. goto exit;
  356. if ((ddev->protocols & NFC_PROTO_FELICA_MASK) &&
  357. (ddev->curr_rf_tech != NFC_DIGITAL_RF_TECH_424F)) {
  358. rc = digital_in_send_psl_req(ddev, target);
  359. if (!rc)
  360. goto exit;
  361. }
  362. rc = nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE,
  363. NFC_RF_INITIATOR);
  364. ddev->curr_nfc_dep_pni = 0;
  365. exit:
  366. dev_kfree_skb(resp);
  367. if (rc)
  368. ddev->curr_protocol = 0;
  369. }
  370. int digital_in_send_atr_req(struct nfc_digital_dev *ddev,
  371. struct nfc_target *target, __u8 comm_mode, __u8 *gb,
  372. size_t gb_len)
  373. {
  374. struct sk_buff *skb;
  375. struct digital_atr_req *atr_req;
  376. uint size;
  377. int rc;
  378. u8 payload_bits;
  379. size = DIGITAL_ATR_REQ_MIN_SIZE + gb_len;
  380. if (size > DIGITAL_ATR_REQ_MAX_SIZE) {
  381. PROTOCOL_ERR("14.6.1.1");
  382. return -EINVAL;
  383. }
  384. skb = digital_skb_alloc(ddev, size);
  385. if (!skb)
  386. return -ENOMEM;
  387. skb_put(skb, sizeof(struct digital_atr_req));
  388. atr_req = (struct digital_atr_req *)skb->data;
  389. memset(atr_req, 0, sizeof(struct digital_atr_req));
  390. atr_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  391. atr_req->cmd = DIGITAL_CMD_ATR_REQ;
  392. if (target->nfcid2_len)
  393. memcpy(atr_req->nfcid3, target->nfcid2, NFC_NFCID2_MAXSIZE);
  394. else
  395. get_random_bytes(atr_req->nfcid3, NFC_NFCID3_MAXSIZE);
  396. atr_req->did = 0;
  397. atr_req->bs = 0;
  398. atr_req->br = 0;
  399. ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX;
  400. payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
  401. atr_req->pp = DIGITAL_PAYLOAD_BITS_TO_PP(payload_bits);
  402. if (gb_len) {
  403. atr_req->pp |= DIGITAL_GB_BIT;
  404. skb_put_data(skb, gb, gb_len);
  405. }
  406. digital_skb_push_dep_sod(ddev, skb);
  407. ddev->skb_add_crc(skb);
  408. rc = digital_in_send_cmd(ddev, skb, DIGITAL_ATR_RES_RWT,
  409. digital_in_recv_atr_res, target);
  410. if (rc)
  411. kfree_skb(skb);
  412. return rc;
  413. }
  414. static int digital_in_send_ack(struct nfc_digital_dev *ddev,
  415. struct digital_data_exch *data_exch)
  416. {
  417. struct digital_dep_req_res *dep_req;
  418. struct sk_buff *skb;
  419. int rc;
  420. skb = digital_skb_alloc(ddev, 1);
  421. if (!skb)
  422. return -ENOMEM;
  423. skb_push(skb, sizeof(struct digital_dep_req_res));
  424. dep_req = (struct digital_dep_req_res *)skb->data;
  425. dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  426. dep_req->cmd = DIGITAL_CMD_DEP_REQ;
  427. dep_req->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
  428. ddev->curr_nfc_dep_pni;
  429. digital_skb_push_dep_sod(ddev, skb);
  430. ddev->skb_add_crc(skb);
  431. ddev->saved_skb = pskb_copy(skb, GFP_KERNEL);
  432. rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt,
  433. digital_in_recv_dep_res, data_exch);
  434. if (rc) {
  435. kfree_skb(skb);
  436. kfree_skb(ddev->saved_skb);
  437. ddev->saved_skb = NULL;
  438. }
  439. return rc;
  440. }
  441. static int digital_in_send_nack(struct nfc_digital_dev *ddev,
  442. struct digital_data_exch *data_exch)
  443. {
  444. struct digital_dep_req_res *dep_req;
  445. struct sk_buff *skb;
  446. int rc;
  447. skb = digital_skb_alloc(ddev, 1);
  448. if (!skb)
  449. return -ENOMEM;
  450. skb_push(skb, sizeof(struct digital_dep_req_res));
  451. dep_req = (struct digital_dep_req_res *)skb->data;
  452. dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  453. dep_req->cmd = DIGITAL_CMD_DEP_REQ;
  454. dep_req->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
  455. DIGITAL_NFC_DEP_PFB_NACK_BIT | ddev->curr_nfc_dep_pni;
  456. digital_skb_push_dep_sod(ddev, skb);
  457. ddev->skb_add_crc(skb);
  458. rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt,
  459. digital_in_recv_dep_res, data_exch);
  460. if (rc)
  461. kfree_skb(skb);
  462. return rc;
  463. }
  464. static int digital_in_send_atn(struct nfc_digital_dev *ddev,
  465. struct digital_data_exch *data_exch)
  466. {
  467. struct digital_dep_req_res *dep_req;
  468. struct sk_buff *skb;
  469. int rc;
  470. skb = digital_skb_alloc(ddev, 1);
  471. if (!skb)
  472. return -ENOMEM;
  473. skb_push(skb, sizeof(struct digital_dep_req_res));
  474. dep_req = (struct digital_dep_req_res *)skb->data;
  475. dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  476. dep_req->cmd = DIGITAL_CMD_DEP_REQ;
  477. dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU;
  478. digital_skb_push_dep_sod(ddev, skb);
  479. ddev->skb_add_crc(skb);
  480. rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt,
  481. digital_in_recv_dep_res, data_exch);
  482. if (rc)
  483. kfree_skb(skb);
  484. return rc;
  485. }
  486. static int digital_in_send_rtox(struct nfc_digital_dev *ddev,
  487. struct digital_data_exch *data_exch, u8 rtox)
  488. {
  489. struct digital_dep_req_res *dep_req;
  490. struct sk_buff *skb;
  491. int rc;
  492. u16 rwt_int;
  493. rwt_int = ddev->dep_rwt * rtox;
  494. if (rwt_int > digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT])
  495. rwt_int = digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT];
  496. skb = digital_skb_alloc(ddev, 1);
  497. if (!skb)
  498. return -ENOMEM;
  499. skb_put_u8(skb, rtox);
  500. skb_push(skb, sizeof(struct digital_dep_req_res));
  501. dep_req = (struct digital_dep_req_res *)skb->data;
  502. dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  503. dep_req->cmd = DIGITAL_CMD_DEP_REQ;
  504. dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU |
  505. DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT;
  506. digital_skb_push_dep_sod(ddev, skb);
  507. ddev->skb_add_crc(skb);
  508. rc = digital_in_send_cmd(ddev, skb, rwt_int,
  509. digital_in_recv_dep_res, data_exch);
  510. if (rc)
  511. kfree_skb(skb);
  512. return rc;
  513. }
  514. static int digital_in_send_saved_skb(struct nfc_digital_dev *ddev,
  515. struct digital_data_exch *data_exch)
  516. {
  517. int rc;
  518. if (!ddev->saved_skb)
  519. return -EINVAL;
  520. skb_get(ddev->saved_skb);
  521. rc = digital_in_send_cmd(ddev, ddev->saved_skb, ddev->dep_rwt,
  522. digital_in_recv_dep_res, data_exch);
  523. if (rc)
  524. kfree_skb(ddev->saved_skb);
  525. return rc;
  526. }
  527. static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
  528. struct sk_buff *resp)
  529. {
  530. struct digital_data_exch *data_exch = arg;
  531. struct digital_dep_req_res *dep_res;
  532. u8 pfb;
  533. uint size;
  534. int rc;
  535. u8 rtox;
  536. if (IS_ERR(resp)) {
  537. rc = PTR_ERR(resp);
  538. resp = NULL;
  539. if ((rc == -EIO || (rc == -ETIMEDOUT && ddev->nack_count)) &&
  540. (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
  541. ddev->atn_count = 0;
  542. rc = digital_in_send_nack(ddev, data_exch);
  543. if (rc)
  544. goto error;
  545. return;
  546. } else if ((rc == -ETIMEDOUT) &&
  547. (ddev->atn_count++ < DIGITAL_NFC_DEP_N_RETRY_ATN)) {
  548. ddev->nack_count = 0;
  549. rc = digital_in_send_atn(ddev, data_exch);
  550. if (rc)
  551. goto error;
  552. return;
  553. }
  554. goto exit;
  555. }
  556. rc = digital_skb_pull_dep_sod(ddev, resp);
  557. if (rc) {
  558. PROTOCOL_ERR("14.4.1.2");
  559. goto exit;
  560. }
  561. rc = ddev->skb_check_crc(resp);
  562. if (rc) {
  563. if ((resp->len >= 4) &&
  564. (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
  565. ddev->atn_count = 0;
  566. rc = digital_in_send_nack(ddev, data_exch);
  567. if (rc)
  568. goto error;
  569. kfree_skb(resp);
  570. return;
  571. }
  572. PROTOCOL_ERR("14.4.1.6");
  573. goto error;
  574. }
  575. ddev->atn_count = 0;
  576. ddev->nack_count = 0;
  577. if (resp->len > ddev->local_payload_max) {
  578. rc = -EMSGSIZE;
  579. goto exit;
  580. }
  581. size = sizeof(struct digital_dep_req_res);
  582. dep_res = (struct digital_dep_req_res *)resp->data;
  583. if (resp->len < size || dep_res->dir != DIGITAL_NFC_DEP_FRAME_DIR_IN ||
  584. dep_res->cmd != DIGITAL_CMD_DEP_RES) {
  585. rc = -EIO;
  586. goto error;
  587. }
  588. pfb = dep_res->pfb;
  589. if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
  590. PROTOCOL_ERR("14.8.2.1");
  591. rc = -EIO;
  592. goto error;
  593. }
  594. if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
  595. rc = -EIO;
  596. goto exit;
  597. }
  598. if (size > resp->len) {
  599. rc = -EIO;
  600. goto error;
  601. }
  602. skb_pull(resp, size);
  603. switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
  604. case DIGITAL_NFC_DEP_PFB_I_PDU:
  605. if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
  606. PROTOCOL_ERR("14.12.3.3");
  607. rc = -EIO;
  608. goto error;
  609. }
  610. ddev->curr_nfc_dep_pni =
  611. DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
  612. kfree_skb(ddev->saved_skb);
  613. ddev->saved_skb = NULL;
  614. resp = digital_recv_dep_data_gather(ddev, pfb, resp,
  615. digital_in_send_ack,
  616. data_exch);
  617. if (IS_ERR(resp)) {
  618. rc = PTR_ERR(resp);
  619. resp = NULL;
  620. goto error;
  621. }
  622. /* If resp is NULL then we're still chaining so return and
  623. * wait for the next part of the PDU. Else, the PDU is
  624. * complete so pass it up.
  625. */
  626. if (!resp)
  627. return;
  628. rc = 0;
  629. break;
  630. case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
  631. if (DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) {
  632. PROTOCOL_ERR("14.12.4.5");
  633. rc = -EIO;
  634. goto exit;
  635. }
  636. if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
  637. PROTOCOL_ERR("14.12.3.3");
  638. rc = -EIO;
  639. goto exit;
  640. }
  641. ddev->curr_nfc_dep_pni =
  642. DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
  643. if (!ddev->chaining_skb) {
  644. PROTOCOL_ERR("14.12.4.3");
  645. rc = -EIO;
  646. goto exit;
  647. }
  648. /* The initiator has received a valid ACK. Free the last sent
  649. * PDU and keep on sending chained skb.
  650. */
  651. kfree_skb(ddev->saved_skb);
  652. ddev->saved_skb = NULL;
  653. rc = digital_in_send_dep_req(ddev, NULL,
  654. ddev->chaining_skb,
  655. ddev->data_exch);
  656. if (rc)
  657. goto error;
  658. goto free_resp;
  659. case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
  660. if (!DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) { /* ATN */
  661. rc = digital_in_send_saved_skb(ddev, data_exch);
  662. if (rc)
  663. goto error;
  664. goto free_resp;
  665. }
  666. if (ddev->atn_count || ddev->nack_count) {
  667. PROTOCOL_ERR("14.12.4.4");
  668. rc = -EIO;
  669. goto error;
  670. }
  671. rtox = DIGITAL_NFC_DEP_RTOX_VALUE(resp->data[0]);
  672. if (!rtox || rtox > DIGITAL_NFC_DEP_RTOX_MAX) {
  673. PROTOCOL_ERR("14.8.4.1");
  674. rc = -EIO;
  675. goto error;
  676. }
  677. rc = digital_in_send_rtox(ddev, data_exch, rtox);
  678. if (rc)
  679. goto error;
  680. goto free_resp;
  681. }
  682. exit:
  683. data_exch->cb(data_exch->cb_context, resp, rc);
  684. error:
  685. kfree(data_exch);
  686. kfree_skb(ddev->chaining_skb);
  687. ddev->chaining_skb = NULL;
  688. kfree_skb(ddev->saved_skb);
  689. ddev->saved_skb = NULL;
  690. if (rc)
  691. kfree_skb(resp);
  692. return;
  693. free_resp:
  694. dev_kfree_skb(resp);
  695. }
  696. int digital_in_send_dep_req(struct nfc_digital_dev *ddev,
  697. struct nfc_target *target, struct sk_buff *skb,
  698. struct digital_data_exch *data_exch)
  699. {
  700. struct digital_dep_req_res *dep_req;
  701. struct sk_buff *chaining_skb, *tmp_skb;
  702. int rc;
  703. skb_push(skb, sizeof(struct digital_dep_req_res));
  704. dep_req = (struct digital_dep_req_res *)skb->data;
  705. dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
  706. dep_req->cmd = DIGITAL_CMD_DEP_REQ;
  707. dep_req->pfb = ddev->curr_nfc_dep_pni;
  708. ddev->atn_count = 0;
  709. ddev->nack_count = 0;
  710. chaining_skb = ddev->chaining_skb;
  711. tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_req, data_exch);
  712. if (IS_ERR(tmp_skb))
  713. return PTR_ERR(tmp_skb);
  714. digital_skb_push_dep_sod(ddev, tmp_skb);
  715. ddev->skb_add_crc(tmp_skb);
  716. ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL);
  717. rc = digital_in_send_cmd(ddev, tmp_skb, ddev->dep_rwt,
  718. digital_in_recv_dep_res, data_exch);
  719. if (rc) {
  720. if (tmp_skb != skb)
  721. kfree_skb(tmp_skb);
  722. kfree_skb(chaining_skb);
  723. ddev->chaining_skb = NULL;
  724. kfree_skb(ddev->saved_skb);
  725. ddev->saved_skb = NULL;
  726. }
  727. return rc;
  728. }
  729. static void digital_tg_set_rf_tech(struct nfc_digital_dev *ddev, u8 rf_tech)
  730. {
  731. ddev->curr_rf_tech = rf_tech;
  732. ddev->skb_add_crc = digital_skb_add_crc_none;
  733. ddev->skb_check_crc = digital_skb_check_crc_none;
  734. if (DIGITAL_DRV_CAPS_TG_CRC(ddev))
  735. return;
  736. switch (ddev->curr_rf_tech) {
  737. case NFC_DIGITAL_RF_TECH_106A:
  738. ddev->skb_add_crc = digital_skb_add_crc_a;
  739. ddev->skb_check_crc = digital_skb_check_crc_a;
  740. break;
  741. case NFC_DIGITAL_RF_TECH_212F:
  742. case NFC_DIGITAL_RF_TECH_424F:
  743. ddev->skb_add_crc = digital_skb_add_crc_f;
  744. ddev->skb_check_crc = digital_skb_check_crc_f;
  745. break;
  746. default:
  747. break;
  748. }
  749. }
  750. static int digital_tg_send_ack(struct nfc_digital_dev *ddev,
  751. struct digital_data_exch *data_exch)
  752. {
  753. struct digital_dep_req_res *dep_res;
  754. struct sk_buff *skb;
  755. int rc;
  756. skb = digital_skb_alloc(ddev, 1);
  757. if (!skb)
  758. return -ENOMEM;
  759. skb_push(skb, sizeof(struct digital_dep_req_res));
  760. dep_res = (struct digital_dep_req_res *)skb->data;
  761. dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
  762. dep_res->cmd = DIGITAL_CMD_DEP_RES;
  763. dep_res->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
  764. ddev->curr_nfc_dep_pni;
  765. if (ddev->did) {
  766. dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
  767. skb_put_data(skb, &ddev->did, sizeof(ddev->did));
  768. }
  769. ddev->curr_nfc_dep_pni =
  770. DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
  771. digital_skb_push_dep_sod(ddev, skb);
  772. ddev->skb_add_crc(skb);
  773. ddev->saved_skb = pskb_copy(skb, GFP_KERNEL);
  774. rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req,
  775. data_exch);
  776. if (rc) {
  777. kfree_skb(skb);
  778. kfree_skb(ddev->saved_skb);
  779. ddev->saved_skb = NULL;
  780. }
  781. return rc;
  782. }
  783. static int digital_tg_send_atn(struct nfc_digital_dev *ddev)
  784. {
  785. struct digital_dep_req_res *dep_res;
  786. struct sk_buff *skb;
  787. int rc;
  788. skb = digital_skb_alloc(ddev, 1);
  789. if (!skb)
  790. return -ENOMEM;
  791. skb_push(skb, sizeof(struct digital_dep_req_res));
  792. dep_res = (struct digital_dep_req_res *)skb->data;
  793. dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
  794. dep_res->cmd = DIGITAL_CMD_DEP_RES;
  795. dep_res->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU;
  796. if (ddev->did) {
  797. dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
  798. skb_put_data(skb, &ddev->did, sizeof(ddev->did));
  799. }
  800. digital_skb_push_dep_sod(ddev, skb);
  801. ddev->skb_add_crc(skb);
  802. rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req,
  803. NULL);
  804. if (rc)
  805. kfree_skb(skb);
  806. return rc;
  807. }
  808. static int digital_tg_send_saved_skb(struct nfc_digital_dev *ddev)
  809. {
  810. int rc;
  811. if (!ddev->saved_skb)
  812. return -EINVAL;
  813. skb_get(ddev->saved_skb);
  814. rc = digital_tg_send_cmd(ddev, ddev->saved_skb, 1500,
  815. digital_tg_recv_dep_req, NULL);
  816. if (rc)
  817. kfree_skb(ddev->saved_skb);
  818. return rc;
  819. }
  820. static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
  821. struct sk_buff *resp)
  822. {
  823. int rc;
  824. struct digital_dep_req_res *dep_req;
  825. u8 pfb;
  826. size_t size;
  827. if (IS_ERR(resp)) {
  828. rc = PTR_ERR(resp);
  829. resp = NULL;
  830. goto exit;
  831. }
  832. rc = ddev->skb_check_crc(resp);
  833. if (rc) {
  834. PROTOCOL_ERR("14.4.1.6");
  835. goto exit;
  836. }
  837. rc = digital_skb_pull_dep_sod(ddev, resp);
  838. if (rc) {
  839. PROTOCOL_ERR("14.4.1.2");
  840. goto exit;
  841. }
  842. if (resp->len > ddev->local_payload_max) {
  843. rc = -EMSGSIZE;
  844. goto exit;
  845. }
  846. size = sizeof(struct digital_dep_req_res);
  847. dep_req = (struct digital_dep_req_res *)resp->data;
  848. if (resp->len < size || dep_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
  849. dep_req->cmd != DIGITAL_CMD_DEP_REQ) {
  850. rc = -EIO;
  851. goto exit;
  852. }
  853. pfb = dep_req->pfb;
  854. if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
  855. if (ddev->did && (ddev->did == resp->data[3])) {
  856. size++;
  857. } else {
  858. rc = -EIO;
  859. goto exit;
  860. }
  861. } else if (ddev->did) {
  862. rc = -EIO;
  863. goto exit;
  864. }
  865. if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
  866. rc = -EIO;
  867. goto exit;
  868. }
  869. if (size > resp->len) {
  870. rc = -EIO;
  871. goto exit;
  872. }
  873. skb_pull(resp, size);
  874. switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
  875. case DIGITAL_NFC_DEP_PFB_I_PDU:
  876. pr_debug("DIGITAL_NFC_DEP_PFB_I_PDU\n");
  877. if (ddev->atn_count) {
  878. /* The target has received (and replied to) at least one
  879. * ATN DEP_REQ.
  880. */
  881. ddev->atn_count = 0;
  882. /* pni of resp PDU equal to the target current pni - 1
  883. * means resp is the previous DEP_REQ PDU received from
  884. * the initiator so the target replies with saved_skb
  885. * which is the previous DEP_RES saved in
  886. * digital_tg_send_dep_res().
  887. */
  888. if (DIGITAL_NFC_DEP_PFB_PNI(pfb) ==
  889. DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni - 1)) {
  890. rc = digital_tg_send_saved_skb(ddev);
  891. if (rc)
  892. goto exit;
  893. goto free_resp;
  894. }
  895. /* atn_count > 0 and PDU pni != curr_nfc_dep_pni - 1
  896. * means the target probably did not received the last
  897. * DEP_REQ PDU sent by the initiator. The target
  898. * fallbacks to normal processing then.
  899. */
  900. }
  901. if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
  902. PROTOCOL_ERR("14.12.3.4");
  903. rc = -EIO;
  904. goto exit;
  905. }
  906. kfree_skb(ddev->saved_skb);
  907. ddev->saved_skb = NULL;
  908. resp = digital_recv_dep_data_gather(ddev, pfb, resp,
  909. digital_tg_send_ack, NULL);
  910. if (IS_ERR(resp)) {
  911. rc = PTR_ERR(resp);
  912. resp = NULL;
  913. goto exit;
  914. }
  915. /* If resp is NULL then we're still chaining so return and
  916. * wait for the next part of the PDU. Else, the PDU is
  917. * complete so pass it up.
  918. */
  919. if (!resp)
  920. return;
  921. rc = 0;
  922. break;
  923. case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
  924. if (DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { /* NACK */
  925. if (DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) !=
  926. ddev->curr_nfc_dep_pni) {
  927. rc = -EIO;
  928. goto exit;
  929. }
  930. ddev->atn_count = 0;
  931. rc = digital_tg_send_saved_skb(ddev);
  932. if (rc)
  933. goto exit;
  934. goto free_resp;
  935. }
  936. /* ACK */
  937. if (ddev->atn_count) {
  938. /* The target has previously received one or more ATN
  939. * PDUs.
  940. */
  941. ddev->atn_count = 0;
  942. /* If the ACK PNI is equal to the target PNI - 1 means
  943. * that the initiator did not receive the previous PDU
  944. * sent by the target so re-send it.
  945. */
  946. if (DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) ==
  947. ddev->curr_nfc_dep_pni) {
  948. rc = digital_tg_send_saved_skb(ddev);
  949. if (rc)
  950. goto exit;
  951. goto free_resp;
  952. }
  953. /* Otherwise, the target did not receive the previous
  954. * ACK PDU from the initiator. Fallback to normal
  955. * processing of chained PDU then.
  956. */
  957. }
  958. /* Keep on sending chained PDU */
  959. if (!ddev->chaining_skb ||
  960. DIGITAL_NFC_DEP_PFB_PNI(pfb) !=
  961. ddev->curr_nfc_dep_pni) {
  962. rc = -EIO;
  963. goto exit;
  964. }
  965. kfree_skb(ddev->saved_skb);
  966. ddev->saved_skb = NULL;
  967. rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb);
  968. if (rc)
  969. goto exit;
  970. goto free_resp;
  971. case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
  972. if (DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) {
  973. rc = -EINVAL;
  974. goto exit;
  975. }
  976. rc = digital_tg_send_atn(ddev);
  977. if (rc)
  978. goto exit;
  979. ddev->atn_count++;
  980. goto free_resp;
  981. }
  982. rc = nfc_tm_data_received(ddev->nfc_dev, resp);
  983. if (rc)
  984. resp = NULL;
  985. exit:
  986. kfree_skb(ddev->chaining_skb);
  987. ddev->chaining_skb = NULL;
  988. ddev->atn_count = 0;
  989. kfree_skb(ddev->saved_skb);
  990. ddev->saved_skb = NULL;
  991. if (rc)
  992. kfree_skb(resp);
  993. return;
  994. free_resp:
  995. dev_kfree_skb(resp);
  996. }
  997. int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb)
  998. {
  999. struct digital_dep_req_res *dep_res;
  1000. struct sk_buff *chaining_skb, *tmp_skb;
  1001. int rc;
  1002. skb_push(skb, sizeof(struct digital_dep_req_res));
  1003. dep_res = (struct digital_dep_req_res *)skb->data;
  1004. dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
  1005. dep_res->cmd = DIGITAL_CMD_DEP_RES;
  1006. dep_res->pfb = ddev->curr_nfc_dep_pni;
  1007. if (ddev->did) {
  1008. dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
  1009. skb_put_data(skb, &ddev->did, sizeof(ddev->did));
  1010. }
  1011. ddev->curr_nfc_dep_pni =
  1012. DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
  1013. chaining_skb = ddev->chaining_skb;
  1014. tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_res, NULL);
  1015. if (IS_ERR(tmp_skb))
  1016. return PTR_ERR(tmp_skb);
  1017. digital_skb_push_dep_sod(ddev, tmp_skb);
  1018. ddev->skb_add_crc(tmp_skb);
  1019. ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL);
  1020. rc = digital_tg_send_cmd(ddev, tmp_skb, 1500, digital_tg_recv_dep_req,
  1021. NULL);
  1022. if (rc) {
  1023. if (tmp_skb != skb)
  1024. kfree_skb(tmp_skb);
  1025. kfree_skb(chaining_skb);
  1026. ddev->chaining_skb = NULL;
  1027. kfree_skb(ddev->saved_skb);
  1028. ddev->saved_skb = NULL;
  1029. }
  1030. return rc;
  1031. }
  1032. static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev,
  1033. void *arg, struct sk_buff *resp)
  1034. {
  1035. u8 rf_tech = (unsigned long)arg;
  1036. if (IS_ERR(resp))
  1037. return;
  1038. digital_tg_set_rf_tech(ddev, rf_tech);
  1039. digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech);
  1040. digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL);
  1041. dev_kfree_skb(resp);
  1042. }
  1043. static int digital_tg_send_psl_res(struct nfc_digital_dev *ddev, u8 did,
  1044. u8 rf_tech)
  1045. {
  1046. struct digital_psl_res *psl_res;
  1047. struct sk_buff *skb;
  1048. int rc;
  1049. skb = digital_skb_alloc(ddev, sizeof(struct digital_psl_res));
  1050. if (!skb)
  1051. return -ENOMEM;
  1052. skb_put(skb, sizeof(struct digital_psl_res));
  1053. psl_res = (struct digital_psl_res *)skb->data;
  1054. psl_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
  1055. psl_res->cmd = DIGITAL_CMD_PSL_RES;
  1056. psl_res->did = did;
  1057. digital_skb_push_dep_sod(ddev, skb);
  1058. ddev->skb_add_crc(skb);
  1059. ddev->curr_nfc_dep_pni = 0;
  1060. rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete,
  1061. (void *)(unsigned long)rf_tech);
  1062. if (rc)
  1063. kfree_skb(skb);
  1064. return rc;
  1065. }
  1066. static void digital_tg_recv_psl_req(struct nfc_digital_dev *ddev, void *arg,
  1067. struct sk_buff *resp)
  1068. {
  1069. int rc;
  1070. struct digital_psl_req *psl_req;
  1071. u8 rf_tech;
  1072. u8 dsi, payload_size, payload_bits;
  1073. if (IS_ERR(resp)) {
  1074. rc = PTR_ERR(resp);
  1075. resp = NULL;
  1076. goto exit;
  1077. }
  1078. rc = ddev->skb_check_crc(resp);
  1079. if (rc) {
  1080. PROTOCOL_ERR("14.4.1.6");
  1081. goto exit;
  1082. }
  1083. rc = digital_skb_pull_dep_sod(ddev, resp);
  1084. if (rc) {
  1085. PROTOCOL_ERR("14.4.1.2");
  1086. goto exit;
  1087. }
  1088. psl_req = (struct digital_psl_req *)resp->data;
  1089. if (resp->len != sizeof(struct digital_psl_req) ||
  1090. psl_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
  1091. psl_req->cmd != DIGITAL_CMD_PSL_REQ) {
  1092. rc = -EIO;
  1093. goto exit;
  1094. }
  1095. dsi = (psl_req->brs >> 3) & 0x07;
  1096. switch (dsi) {
  1097. case 0:
  1098. rf_tech = NFC_DIGITAL_RF_TECH_106A;
  1099. break;
  1100. case 1:
  1101. rf_tech = NFC_DIGITAL_RF_TECH_212F;
  1102. break;
  1103. case 2:
  1104. rf_tech = NFC_DIGITAL_RF_TECH_424F;
  1105. break;
  1106. default:
  1107. pr_err("Unsupported dsi value %d\n", dsi);
  1108. goto exit;
  1109. }
  1110. payload_bits = DIGITAL_PAYLOAD_FSL_TO_BITS(psl_req->fsl);
  1111. payload_size = digital_payload_bits_to_size(payload_bits);
  1112. if (!payload_size || (payload_size > min(ddev->local_payload_max,
  1113. ddev->remote_payload_max))) {
  1114. rc = -EINVAL;
  1115. goto exit;
  1116. }
  1117. ddev->local_payload_max = payload_size;
  1118. ddev->remote_payload_max = payload_size;
  1119. rc = digital_tg_send_psl_res(ddev, psl_req->did, rf_tech);
  1120. exit:
  1121. kfree_skb(resp);
  1122. }
  1123. static void digital_tg_send_atr_res_complete(struct nfc_digital_dev *ddev,
  1124. void *arg, struct sk_buff *resp)
  1125. {
  1126. int offset;
  1127. if (IS_ERR(resp)) {
  1128. digital_poll_next_tech(ddev);
  1129. return;
  1130. }
  1131. offset = 2;
  1132. if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB)
  1133. offset++;
  1134. ddev->atn_count = 0;
  1135. if (resp->data[offset] == DIGITAL_CMD_PSL_REQ)
  1136. digital_tg_recv_psl_req(ddev, arg, resp);
  1137. else
  1138. digital_tg_recv_dep_req(ddev, arg, resp);
  1139. }
  1140. static int digital_tg_send_atr_res(struct nfc_digital_dev *ddev,
  1141. struct digital_atr_req *atr_req)
  1142. {
  1143. struct digital_atr_res *atr_res;
  1144. struct sk_buff *skb;
  1145. u8 *gb, payload_bits;
  1146. size_t gb_len;
  1147. int rc;
  1148. gb = nfc_get_local_general_bytes(ddev->nfc_dev, &gb_len);
  1149. if (!gb)
  1150. gb_len = 0;
  1151. skb = digital_skb_alloc(ddev, sizeof(struct digital_atr_res) + gb_len);
  1152. if (!skb)
  1153. return -ENOMEM;
  1154. skb_put(skb, sizeof(struct digital_atr_res));
  1155. atr_res = (struct digital_atr_res *)skb->data;
  1156. memset(atr_res, 0, sizeof(struct digital_atr_res));
  1157. atr_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
  1158. atr_res->cmd = DIGITAL_CMD_ATR_RES;
  1159. memcpy(atr_res->nfcid3, atr_req->nfcid3, sizeof(atr_req->nfcid3));
  1160. atr_res->to = DIGITAL_NFC_DEP_TG_MAX_WT;
  1161. ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX;
  1162. payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
  1163. atr_res->pp = DIGITAL_PAYLOAD_BITS_TO_PP(payload_bits);
  1164. if (gb_len) {
  1165. skb_put(skb, gb_len);
  1166. atr_res->pp |= DIGITAL_GB_BIT;
  1167. memcpy(atr_res->gb, gb, gb_len);
  1168. }
  1169. digital_skb_push_dep_sod(ddev, skb);
  1170. ddev->skb_add_crc(skb);
  1171. ddev->curr_nfc_dep_pni = 0;
  1172. rc = digital_tg_send_cmd(ddev, skb, 999,
  1173. digital_tg_send_atr_res_complete, NULL);
  1174. if (rc)
  1175. kfree_skb(skb);
  1176. return rc;
  1177. }
  1178. void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg,
  1179. struct sk_buff *resp)
  1180. {
  1181. int rc;
  1182. struct digital_atr_req *atr_req;
  1183. size_t gb_len, min_size;
  1184. u8 poll_tech_count, payload_bits;
  1185. if (IS_ERR(resp)) {
  1186. rc = PTR_ERR(resp);
  1187. resp = NULL;
  1188. goto exit;
  1189. }
  1190. if (!resp->len) {
  1191. rc = -EIO;
  1192. goto exit;
  1193. }
  1194. if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB) {
  1195. min_size = DIGITAL_ATR_REQ_MIN_SIZE + 2;
  1196. digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_106A);
  1197. } else {
  1198. min_size = DIGITAL_ATR_REQ_MIN_SIZE + 1;
  1199. digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_212F);
  1200. }
  1201. if (resp->len < min_size) {
  1202. rc = -EIO;
  1203. goto exit;
  1204. }
  1205. ddev->curr_protocol = NFC_PROTO_NFC_DEP_MASK;
  1206. rc = ddev->skb_check_crc(resp);
  1207. if (rc) {
  1208. PROTOCOL_ERR("14.4.1.6");
  1209. goto exit;
  1210. }
  1211. rc = digital_skb_pull_dep_sod(ddev, resp);
  1212. if (rc) {
  1213. PROTOCOL_ERR("14.4.1.2");
  1214. goto exit;
  1215. }
  1216. atr_req = (struct digital_atr_req *)resp->data;
  1217. if (atr_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
  1218. atr_req->cmd != DIGITAL_CMD_ATR_REQ ||
  1219. atr_req->did > DIGITAL_DID_MAX) {
  1220. rc = -EINVAL;
  1221. goto exit;
  1222. }
  1223. payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_req->pp);
  1224. ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits);
  1225. if (!ddev->remote_payload_max) {
  1226. rc = -EINVAL;
  1227. goto exit;
  1228. }
  1229. ddev->did = atr_req->did;
  1230. rc = digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
  1231. NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED);
  1232. if (rc)
  1233. goto exit;
  1234. rc = digital_tg_send_atr_res(ddev, atr_req);
  1235. if (rc)
  1236. goto exit;
  1237. gb_len = resp->len - sizeof(struct digital_atr_req);
  1238. poll_tech_count = ddev->poll_tech_count;
  1239. ddev->poll_tech_count = 0;
  1240. rc = nfc_tm_activated(ddev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
  1241. NFC_COMM_PASSIVE, atr_req->gb, gb_len);
  1242. if (rc) {
  1243. ddev->poll_tech_count = poll_tech_count;
  1244. goto exit;
  1245. }
  1246. rc = 0;
  1247. exit:
  1248. if (rc)
  1249. digital_poll_next_tech(ddev);
  1250. dev_kfree_skb(resp);
  1251. }