linux/drivers/nfc/pn533.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2011 Instituto Nokia de Tecnologia
   3 * Copyright (C) 2012-2013 Tieto Poland
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, see <http://www.gnu.org/licenses/>.
  17 */
  18
  19#include <linux/device.h>
  20#include <linux/kernel.h>
  21#include <linux/module.h>
  22#include <linux/slab.h>
  23#include <linux/usb.h>
  24#include <linux/nfc.h>
  25#include <linux/netdevice.h>
  26#include <net/nfc/nfc.h>
  27
  28#define VERSION "0.2"
  29
  30#define PN533_VENDOR_ID 0x4CC
  31#define PN533_PRODUCT_ID 0x2533
  32
  33#define SCM_VENDOR_ID 0x4E6
  34#define SCL3711_PRODUCT_ID 0x5591
  35
  36#define SONY_VENDOR_ID         0x054c
  37#define PASORI_PRODUCT_ID      0x02e1
  38
  39#define ACS_VENDOR_ID 0x072f
  40#define ACR122U_PRODUCT_ID 0x2200
  41
  42#define PN533_DEVICE_STD     0x1
  43#define PN533_DEVICE_PASORI  0x2
  44#define PN533_DEVICE_ACR122U 0x3
  45
  46#define PN533_ALL_PROTOCOLS (NFC_PROTO_JEWEL_MASK | NFC_PROTO_MIFARE_MASK |\
  47                             NFC_PROTO_FELICA_MASK | NFC_PROTO_ISO14443_MASK |\
  48                             NFC_PROTO_NFC_DEP_MASK |\
  49                             NFC_PROTO_ISO14443_B_MASK)
  50
  51#define PN533_NO_TYPE_B_PROTOCOLS (NFC_PROTO_JEWEL_MASK | \
  52                                   NFC_PROTO_MIFARE_MASK | \
  53                                   NFC_PROTO_FELICA_MASK | \
  54                                   NFC_PROTO_ISO14443_MASK | \
  55                                   NFC_PROTO_NFC_DEP_MASK)
  56
  57static const struct usb_device_id pn533_table[] = {
  58        { USB_DEVICE(PN533_VENDOR_ID, PN533_PRODUCT_ID),
  59          .driver_info = PN533_DEVICE_STD },
  60        { USB_DEVICE(SCM_VENDOR_ID, SCL3711_PRODUCT_ID),
  61          .driver_info = PN533_DEVICE_STD },
  62        { USB_DEVICE(SONY_VENDOR_ID, PASORI_PRODUCT_ID),
  63          .driver_info = PN533_DEVICE_PASORI },
  64        { USB_DEVICE(ACS_VENDOR_ID, ACR122U_PRODUCT_ID),
  65          .driver_info = PN533_DEVICE_ACR122U },
  66        { }
  67};
  68MODULE_DEVICE_TABLE(usb, pn533_table);
  69
  70/* How much time we spend listening for initiators */
  71#define PN533_LISTEN_TIME 2
  72/* Delay between each poll frame (ms) */
  73#define PN533_POLL_INTERVAL 10
  74
  75/* Standard pn533 frame definitions (standard and extended)*/
  76#define PN533_STD_FRAME_HEADER_LEN (sizeof(struct pn533_std_frame) \
  77                                        + 2) /* data[0] TFI, data[1] CC */
  78#define PN533_STD_FRAME_TAIL_LEN 2 /* data[len] DCS, data[len + 1] postamble*/
  79
  80#define PN533_EXT_FRAME_HEADER_LEN (sizeof(struct pn533_ext_frame) \
  81                                        + 2) /* data[0] TFI, data[1] CC */
  82
  83#define PN533_CMD_DATAEXCH_DATA_MAXLEN  262
  84#define PN533_CMD_DATAFRAME_MAXLEN      240     /* max data length (send) */
  85
  86/*
  87 * Max extended frame payload len, excluding TFI and CC
  88 * which are already in PN533_FRAME_HEADER_LEN.
  89 */
  90#define PN533_STD_FRAME_MAX_PAYLOAD_LEN 263
  91
  92#define PN533_STD_FRAME_ACK_SIZE 6 /* Preamble (1), SoPC (2), ACK Code (2),
  93                                  Postamble (1) */
  94#define PN533_STD_FRAME_CHECKSUM(f) (f->data[f->datalen])
  95#define PN533_STD_FRAME_POSTAMBLE(f) (f->data[f->datalen + 1])
  96/* Half start code (3), LEN (4) should be 0xffff for extended frame */
  97#define PN533_STD_IS_EXTENDED(hdr) ((hdr)->datalen == 0xFF \
  98                                        && (hdr)->datalen_checksum == 0xFF)
  99#define PN533_EXT_FRAME_CHECKSUM(f) (f->data[be16_to_cpu(f->datalen)])
 100
 101/* start of frame */
 102#define PN533_STD_FRAME_SOF 0x00FF
 103
 104/* standard frame identifier: in/out/error */
 105#define PN533_STD_FRAME_IDENTIFIER(f) (f->data[0]) /* TFI */
 106#define PN533_STD_FRAME_DIR_OUT 0xD4
 107#define PN533_STD_FRAME_DIR_IN 0xD5
 108
 109/* ACS ACR122 pn533 frame definitions */
 110#define PN533_ACR122_TX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_tx_frame) \
 111                                          + 2)
 112#define PN533_ACR122_TX_FRAME_TAIL_LEN 0
 113#define PN533_ACR122_RX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_rx_frame) \
 114                                          + 2)
 115#define PN533_ACR122_RX_FRAME_TAIL_LEN 2
 116#define PN533_ACR122_FRAME_MAX_PAYLOAD_LEN PN533_STD_FRAME_MAX_PAYLOAD_LEN
 117
 118/* CCID messages types */
 119#define PN533_ACR122_PC_TO_RDR_ICCPOWERON 0x62
 120#define PN533_ACR122_PC_TO_RDR_ESCAPE 0x6B
 121
 122#define PN533_ACR122_RDR_TO_PC_ESCAPE 0x83
 123
 124/* PN533 Commands */
 125#define PN533_FRAME_CMD(f) (f->data[1])
 126
 127#define PN533_CMD_GET_FIRMWARE_VERSION 0x02
 128#define PN533_CMD_RF_CONFIGURATION 0x32
 129#define PN533_CMD_IN_DATA_EXCHANGE 0x40
 130#define PN533_CMD_IN_COMM_THRU     0x42
 131#define PN533_CMD_IN_LIST_PASSIVE_TARGET 0x4A
 132#define PN533_CMD_IN_ATR 0x50
 133#define PN533_CMD_IN_RELEASE 0x52
 134#define PN533_CMD_IN_JUMP_FOR_DEP 0x56
 135
 136#define PN533_CMD_TG_INIT_AS_TARGET 0x8c
 137#define PN533_CMD_TG_GET_DATA 0x86
 138#define PN533_CMD_TG_SET_DATA 0x8e
 139#define PN533_CMD_TG_SET_META_DATA 0x94
 140#define PN533_CMD_UNDEF 0xff
 141
 142#define PN533_CMD_RESPONSE(cmd) (cmd + 1)
 143
 144/* PN533 Return codes */
 145#define PN533_CMD_RET_MASK 0x3F
 146#define PN533_CMD_MI_MASK 0x40
 147#define PN533_CMD_RET_SUCCESS 0x00
 148
 149struct pn533;
 150
 151typedef int (*pn533_send_async_complete_t) (struct pn533 *dev, void *arg,
 152                                        struct sk_buff *resp);
 153
 154/* structs for pn533 commands */
 155
 156/* PN533_CMD_GET_FIRMWARE_VERSION */
 157struct pn533_fw_version {
 158        u8 ic;
 159        u8 ver;
 160        u8 rev;
 161        u8 support;
 162};
 163
 164/* PN533_CMD_RF_CONFIGURATION */
 165#define PN533_CFGITEM_RF_FIELD    0x01
 166#define PN533_CFGITEM_TIMING      0x02
 167#define PN533_CFGITEM_MAX_RETRIES 0x05
 168#define PN533_CFGITEM_PASORI      0x82
 169
 170#define PN533_CFGITEM_RF_FIELD_AUTO_RFCA 0x2
 171#define PN533_CFGITEM_RF_FIELD_ON        0x1
 172#define PN533_CFGITEM_RF_FIELD_OFF       0x0
 173
 174#define PN533_CONFIG_TIMING_102 0xb
 175#define PN533_CONFIG_TIMING_204 0xc
 176#define PN533_CONFIG_TIMING_409 0xd
 177#define PN533_CONFIG_TIMING_819 0xe
 178
 179#define PN533_CONFIG_MAX_RETRIES_NO_RETRY 0x00
 180#define PN533_CONFIG_MAX_RETRIES_ENDLESS 0xFF
 181
 182struct pn533_config_max_retries {
 183        u8 mx_rty_atr;
 184        u8 mx_rty_psl;
 185        u8 mx_rty_passive_act;
 186} __packed;
 187
 188struct pn533_config_timing {
 189        u8 rfu;
 190        u8 atr_res_timeout;
 191        u8 dep_timeout;
 192} __packed;
 193
 194/* PN533_CMD_IN_LIST_PASSIVE_TARGET */
 195
 196/* felica commands opcode */
 197#define PN533_FELICA_OPC_SENSF_REQ 0
 198#define PN533_FELICA_OPC_SENSF_RES 1
 199/* felica SENSF_REQ parameters */
 200#define PN533_FELICA_SENSF_SC_ALL 0xFFFF
 201#define PN533_FELICA_SENSF_RC_NO_SYSTEM_CODE 0
 202#define PN533_FELICA_SENSF_RC_SYSTEM_CODE 1
 203#define PN533_FELICA_SENSF_RC_ADVANCED_PROTOCOL 2
 204
 205/* type B initiator_data values */
 206#define PN533_TYPE_B_AFI_ALL_FAMILIES 0
 207#define PN533_TYPE_B_POLL_METHOD_TIMESLOT 0
 208#define PN533_TYPE_B_POLL_METHOD_PROBABILISTIC 1
 209
 210union pn533_cmd_poll_initdata {
 211        struct {
 212                u8 afi;
 213                u8 polling_method;
 214        } __packed type_b;
 215        struct {
 216                u8 opcode;
 217                __be16 sc;
 218                u8 rc;
 219                u8 tsn;
 220        } __packed felica;
 221};
 222
 223/* Poll modulations */
 224enum {
 225        PN533_POLL_MOD_106KBPS_A,
 226        PN533_POLL_MOD_212KBPS_FELICA,
 227        PN533_POLL_MOD_424KBPS_FELICA,
 228        PN533_POLL_MOD_106KBPS_JEWEL,
 229        PN533_POLL_MOD_847KBPS_B,
 230        PN533_LISTEN_MOD,
 231
 232        __PN533_POLL_MOD_AFTER_LAST,
 233};
 234#define PN533_POLL_MOD_MAX (__PN533_POLL_MOD_AFTER_LAST - 1)
 235
 236struct pn533_poll_modulations {
 237        struct {
 238                u8 maxtg;
 239                u8 brty;
 240                union pn533_cmd_poll_initdata initiator_data;
 241        } __packed data;
 242        u8 len;
 243};
 244
 245static const struct pn533_poll_modulations poll_mod[] = {
 246        [PN533_POLL_MOD_106KBPS_A] = {
 247                .data = {
 248                        .maxtg = 1,
 249                        .brty = 0,
 250                },
 251                .len = 2,
 252        },
 253        [PN533_POLL_MOD_212KBPS_FELICA] = {
 254                .data = {
 255                        .maxtg = 1,
 256                        .brty = 1,
 257                        .initiator_data.felica = {
 258                                .opcode = PN533_FELICA_OPC_SENSF_REQ,
 259                                .sc = PN533_FELICA_SENSF_SC_ALL,
 260                                .rc = PN533_FELICA_SENSF_RC_SYSTEM_CODE,
 261                                .tsn = 0x03,
 262                        },
 263                },
 264                .len = 7,
 265        },
 266        [PN533_POLL_MOD_424KBPS_FELICA] = {
 267                .data = {
 268                        .maxtg = 1,
 269                        .brty = 2,
 270                        .initiator_data.felica = {
 271                                .opcode = PN533_FELICA_OPC_SENSF_REQ,
 272                                .sc = PN533_FELICA_SENSF_SC_ALL,
 273                                .rc = PN533_FELICA_SENSF_RC_SYSTEM_CODE,
 274                                .tsn = 0x03,
 275                        },
 276                 },
 277                .len = 7,
 278        },
 279        [PN533_POLL_MOD_106KBPS_JEWEL] = {
 280                .data = {
 281                        .maxtg = 1,
 282                        .brty = 4,
 283                },
 284                .len = 2,
 285        },
 286        [PN533_POLL_MOD_847KBPS_B] = {
 287                .data = {
 288                        .maxtg = 1,
 289                        .brty = 8,
 290                        .initiator_data.type_b = {
 291                                .afi = PN533_TYPE_B_AFI_ALL_FAMILIES,
 292                                .polling_method =
 293                                        PN533_TYPE_B_POLL_METHOD_TIMESLOT,
 294                        },
 295                },
 296                .len = 3,
 297        },
 298        [PN533_LISTEN_MOD] = {
 299                .len = 0,
 300        },
 301};
 302
 303/* PN533_CMD_IN_ATR */
 304
 305struct pn533_cmd_activate_response {
 306        u8 status;
 307        u8 nfcid3t[10];
 308        u8 didt;
 309        u8 bst;
 310        u8 brt;
 311        u8 to;
 312        u8 ppt;
 313        /* optional */
 314        u8 gt[];
 315} __packed;
 316
 317struct pn533_cmd_jump_dep_response {
 318        u8 status;
 319        u8 tg;
 320        u8 nfcid3t[10];
 321        u8 didt;
 322        u8 bst;
 323        u8 brt;
 324        u8 to;
 325        u8 ppt;
 326        /* optional */
 327        u8 gt[];
 328} __packed;
 329
 330
 331/* PN533_TG_INIT_AS_TARGET */
 332#define PN533_INIT_TARGET_PASSIVE 0x1
 333#define PN533_INIT_TARGET_DEP 0x2
 334
 335#define PN533_INIT_TARGET_RESP_FRAME_MASK 0x3
 336#define PN533_INIT_TARGET_RESP_ACTIVE     0x1
 337#define PN533_INIT_TARGET_RESP_DEP        0x4
 338
 339enum  pn533_protocol_type {
 340        PN533_PROTO_REQ_ACK_RESP = 0,
 341        PN533_PROTO_REQ_RESP
 342};
 343
 344struct pn533 {
 345        struct usb_device *udev;
 346        struct usb_interface *interface;
 347        struct nfc_dev *nfc_dev;
 348        u32 device_type;
 349        enum pn533_protocol_type protocol_type;
 350
 351        struct urb *out_urb;
 352        struct urb *in_urb;
 353
 354        struct sk_buff_head resp_q;
 355        struct sk_buff_head fragment_skb;
 356
 357        struct workqueue_struct *wq;
 358        struct work_struct cmd_work;
 359        struct work_struct cmd_complete_work;
 360        struct delayed_work poll_work;
 361        struct work_struct mi_rx_work;
 362        struct work_struct mi_tx_work;
 363        struct work_struct mi_tm_rx_work;
 364        struct work_struct mi_tm_tx_work;
 365        struct work_struct tg_work;
 366        struct work_struct rf_work;
 367
 368        struct list_head cmd_queue;
 369        struct pn533_cmd *cmd;
 370        u8 cmd_pending;
 371        struct mutex cmd_lock;  /* protects cmd queue */
 372
 373        void *cmd_complete_mi_arg;
 374        void *cmd_complete_dep_arg;
 375
 376        struct pn533_poll_modulations *poll_mod_active[PN533_POLL_MOD_MAX + 1];
 377        u8 poll_mod_count;
 378        u8 poll_mod_curr;
 379        u8 poll_dep;
 380        u32 poll_protocols;
 381        u32 listen_protocols;
 382        struct timer_list listen_timer;
 383        int cancel_listen;
 384
 385        u8 *gb;
 386        size_t gb_len;
 387
 388        u8 tgt_available_prots;
 389        u8 tgt_active_prot;
 390        u8 tgt_mode;
 391
 392        struct pn533_frame_ops *ops;
 393};
 394
 395struct pn533_cmd {
 396        struct list_head queue;
 397        u8 code;
 398        int status;
 399        struct sk_buff *req;
 400        struct sk_buff *resp;
 401        int resp_len;
 402        pn533_send_async_complete_t  complete_cb;
 403        void *complete_cb_context;
 404};
 405
 406struct pn533_std_frame {
 407        u8 preamble;
 408        __be16 start_frame;
 409        u8 datalen;
 410        u8 datalen_checksum;
 411        u8 data[];
 412} __packed;
 413
 414struct pn533_ext_frame {        /* Extended Information frame */
 415        u8 preamble;
 416        __be16 start_frame;
 417        __be16 eif_flag;        /* fixed to 0xFFFF */
 418        __be16 datalen;
 419        u8 datalen_checksum;
 420        u8 data[];
 421} __packed;
 422
 423struct pn533_frame_ops {
 424        void (*tx_frame_init)(void *frame, u8 cmd_code);
 425        void (*tx_frame_finish)(void *frame);
 426        void (*tx_update_payload_len)(void *frame, int len);
 427        int tx_header_len;
 428        int tx_tail_len;
 429
 430        bool (*rx_is_frame_valid)(void *frame, struct pn533 *dev);
 431        int (*rx_frame_size)(void *frame);
 432        int rx_header_len;
 433        int rx_tail_len;
 434
 435        int max_payload_len;
 436        u8 (*get_cmd_code)(void *frame);
 437};
 438
 439struct pn533_acr122_ccid_hdr {
 440        u8 type;
 441        u32 datalen;
 442        u8 slot;
 443        u8 seq;
 444        u8 params[3]; /* 3 msg specific bytes or status, error and 1 specific
 445                         byte for reposnse msg */
 446        u8 data[]; /* payload */
 447} __packed;
 448
 449struct pn533_acr122_apdu_hdr {
 450        u8 class;
 451        u8 ins;
 452        u8 p1;
 453        u8 p2;
 454} __packed;
 455
 456struct pn533_acr122_tx_frame {
 457        struct pn533_acr122_ccid_hdr ccid;
 458        struct pn533_acr122_apdu_hdr apdu;
 459        u8 datalen;
 460        u8 data[]; /* pn533 frame: TFI ... */
 461} __packed;
 462
 463struct pn533_acr122_rx_frame {
 464        struct pn533_acr122_ccid_hdr ccid;
 465        u8 data[]; /* pn533 frame : TFI ... */
 466} __packed;
 467
 468static void pn533_acr122_tx_frame_init(void *_frame, u8 cmd_code)
 469{
 470        struct pn533_acr122_tx_frame *frame = _frame;
 471
 472        frame->ccid.type = PN533_ACR122_PC_TO_RDR_ESCAPE;
 473        frame->ccid.datalen = sizeof(frame->apdu) + 1; /* sizeof(apdu_hdr) +
 474                                                          sizeof(datalen) */
 475        frame->ccid.slot = 0;
 476        frame->ccid.seq = 0;
 477        frame->ccid.params[0] = 0;
 478        frame->ccid.params[1] = 0;
 479        frame->ccid.params[2] = 0;
 480
 481        frame->data[0] = PN533_STD_FRAME_DIR_OUT;
 482        frame->data[1] = cmd_code;
 483        frame->datalen = 2;  /* data[0] + data[1] */
 484
 485        frame->apdu.class = 0xFF;
 486        frame->apdu.ins = 0;
 487        frame->apdu.p1 = 0;
 488        frame->apdu.p2 = 0;
 489}
 490
 491static void pn533_acr122_tx_frame_finish(void *_frame)
 492{
 493        struct pn533_acr122_tx_frame *frame = _frame;
 494
 495        frame->ccid.datalen += frame->datalen;
 496}
 497
 498static void pn533_acr122_tx_update_payload_len(void *_frame, int len)
 499{
 500        struct pn533_acr122_tx_frame *frame = _frame;
 501
 502        frame->datalen += len;
 503}
 504
 505static bool pn533_acr122_is_rx_frame_valid(void *_frame, struct pn533 *dev)
 506{
 507        struct pn533_acr122_rx_frame *frame = _frame;
 508
 509        if (frame->ccid.type != 0x83)
 510                return false;
 511
 512        if (!frame->ccid.datalen)
 513                return false;
 514
 515        if (frame->data[frame->ccid.datalen - 2] == 0x63)
 516                return false;
 517
 518        return true;
 519}
 520
 521static int pn533_acr122_rx_frame_size(void *frame)
 522{
 523        struct pn533_acr122_rx_frame *f = frame;
 524
 525        /* f->ccid.datalen already includes tail length */
 526        return sizeof(struct pn533_acr122_rx_frame) + f->ccid.datalen;
 527}
 528
 529static u8 pn533_acr122_get_cmd_code(void *frame)
 530{
 531        struct pn533_acr122_rx_frame *f = frame;
 532
 533        return PN533_FRAME_CMD(f);
 534}
 535
 536static struct pn533_frame_ops pn533_acr122_frame_ops = {
 537        .tx_frame_init = pn533_acr122_tx_frame_init,
 538        .tx_frame_finish = pn533_acr122_tx_frame_finish,
 539        .tx_update_payload_len = pn533_acr122_tx_update_payload_len,
 540        .tx_header_len = PN533_ACR122_TX_FRAME_HEADER_LEN,
 541        .tx_tail_len = PN533_ACR122_TX_FRAME_TAIL_LEN,
 542
 543        .rx_is_frame_valid = pn533_acr122_is_rx_frame_valid,
 544        .rx_header_len = PN533_ACR122_RX_FRAME_HEADER_LEN,
 545        .rx_tail_len = PN533_ACR122_RX_FRAME_TAIL_LEN,
 546        .rx_frame_size = pn533_acr122_rx_frame_size,
 547
 548        .max_payload_len = PN533_ACR122_FRAME_MAX_PAYLOAD_LEN,
 549        .get_cmd_code = pn533_acr122_get_cmd_code,
 550};
 551
 552/* The rule: value(high byte) + value(low byte) + checksum = 0 */
 553static inline u8 pn533_ext_checksum(u16 value)
 554{
 555        return ~(u8)(((value & 0xFF00) >> 8) + (u8)(value & 0xFF)) + 1;
 556}
 557
 558/* The rule: value + checksum = 0 */
 559static inline u8 pn533_std_checksum(u8 value)
 560{
 561        return ~value + 1;
 562}
 563
 564/* The rule: sum(data elements) + checksum = 0 */
 565static u8 pn533_std_data_checksum(u8 *data, int datalen)
 566{
 567        u8 sum = 0;
 568        int i;
 569
 570        for (i = 0; i < datalen; i++)
 571                sum += data[i];
 572
 573        return pn533_std_checksum(sum);
 574}
 575
 576static void pn533_std_tx_frame_init(void *_frame, u8 cmd_code)
 577{
 578        struct pn533_std_frame *frame = _frame;
 579
 580        frame->preamble = 0;
 581        frame->start_frame = cpu_to_be16(PN533_STD_FRAME_SOF);
 582        PN533_STD_FRAME_IDENTIFIER(frame) = PN533_STD_FRAME_DIR_OUT;
 583        PN533_FRAME_CMD(frame) = cmd_code;
 584        frame->datalen = 2;
 585}
 586
 587static void pn533_std_tx_frame_finish(void *_frame)
 588{
 589        struct pn533_std_frame *frame = _frame;
 590
 591        frame->datalen_checksum = pn533_std_checksum(frame->datalen);
 592
 593        PN533_STD_FRAME_CHECKSUM(frame) =
 594                pn533_std_data_checksum(frame->data, frame->datalen);
 595
 596        PN533_STD_FRAME_POSTAMBLE(frame) = 0;
 597}
 598
 599static void pn533_std_tx_update_payload_len(void *_frame, int len)
 600{
 601        struct pn533_std_frame *frame = _frame;
 602
 603        frame->datalen += len;
 604}
 605
 606static bool pn533_std_rx_frame_is_valid(void *_frame, struct pn533 *dev)
 607{
 608        u8 checksum;
 609        struct pn533_std_frame *stdf = _frame;
 610
 611        if (stdf->start_frame != cpu_to_be16(PN533_STD_FRAME_SOF))
 612                return false;
 613
 614        if (likely(!PN533_STD_IS_EXTENDED(stdf))) {
 615                /* Standard frame code */
 616                dev->ops->rx_header_len = PN533_STD_FRAME_HEADER_LEN;
 617
 618                checksum = pn533_std_checksum(stdf->datalen);
 619                if (checksum != stdf->datalen_checksum)
 620                        return false;
 621
 622                checksum = pn533_std_data_checksum(stdf->data, stdf->datalen);
 623                if (checksum != PN533_STD_FRAME_CHECKSUM(stdf))
 624                        return false;
 625        } else {
 626                /* Extended */
 627                struct pn533_ext_frame *eif = _frame;
 628
 629                dev->ops->rx_header_len = PN533_EXT_FRAME_HEADER_LEN;
 630
 631                checksum = pn533_ext_checksum(be16_to_cpu(eif->datalen));
 632                if (checksum != eif->datalen_checksum)
 633                        return false;
 634
 635                /* check data checksum */
 636                checksum = pn533_std_data_checksum(eif->data,
 637                                                   be16_to_cpu(eif->datalen));
 638                if (checksum != PN533_EXT_FRAME_CHECKSUM(eif))
 639                        return false;
 640        }
 641
 642        return true;
 643}
 644
 645static bool pn533_std_rx_frame_is_ack(struct pn533_std_frame *frame)
 646{
 647        if (frame->start_frame != cpu_to_be16(PN533_STD_FRAME_SOF))
 648                return false;
 649
 650        if (frame->datalen != 0 || frame->datalen_checksum != 0xFF)
 651                return false;
 652
 653        return true;
 654}
 655
 656static inline int pn533_std_rx_frame_size(void *frame)
 657{
 658        struct pn533_std_frame *f = frame;
 659
 660        /* check for Extended Information frame */
 661        if (PN533_STD_IS_EXTENDED(f)) {
 662                struct pn533_ext_frame *eif = frame;
 663
 664                return sizeof(struct pn533_ext_frame)
 665                        + be16_to_cpu(eif->datalen) + PN533_STD_FRAME_TAIL_LEN;
 666        }
 667
 668        return sizeof(struct pn533_std_frame) + f->datalen +
 669               PN533_STD_FRAME_TAIL_LEN;
 670}
 671
 672static u8 pn533_std_get_cmd_code(void *frame)
 673{
 674        struct pn533_std_frame *f = frame;
 675        struct pn533_ext_frame *eif = frame;
 676
 677        if (PN533_STD_IS_EXTENDED(f))
 678                return PN533_FRAME_CMD(eif);
 679        else
 680                return PN533_FRAME_CMD(f);
 681}
 682
 683static struct pn533_frame_ops pn533_std_frame_ops = {
 684        .tx_frame_init = pn533_std_tx_frame_init,
 685        .tx_frame_finish = pn533_std_tx_frame_finish,
 686        .tx_update_payload_len = pn533_std_tx_update_payload_len,
 687        .tx_header_len = PN533_STD_FRAME_HEADER_LEN,
 688        .tx_tail_len = PN533_STD_FRAME_TAIL_LEN,
 689
 690        .rx_is_frame_valid = pn533_std_rx_frame_is_valid,
 691        .rx_frame_size = pn533_std_rx_frame_size,
 692        .rx_header_len = PN533_STD_FRAME_HEADER_LEN,
 693        .rx_tail_len = PN533_STD_FRAME_TAIL_LEN,
 694
 695        .max_payload_len =  PN533_STD_FRAME_MAX_PAYLOAD_LEN,
 696        .get_cmd_code = pn533_std_get_cmd_code,
 697};
 698
 699static bool pn533_rx_frame_is_cmd_response(struct pn533 *dev, void *frame)
 700{
 701        return (dev->ops->get_cmd_code(frame) ==
 702                                PN533_CMD_RESPONSE(dev->cmd->code));
 703}
 704
 705static void pn533_recv_response(struct urb *urb)
 706{
 707        struct pn533 *dev = urb->context;
 708        struct pn533_cmd *cmd = dev->cmd;
 709        u8 *in_frame;
 710
 711        cmd->status = urb->status;
 712
 713        switch (urb->status) {
 714        case 0:
 715                break; /* success */
 716        case -ECONNRESET:
 717        case -ENOENT:
 718                dev_dbg(&dev->interface->dev,
 719                        "The urb has been canceled (status %d)\n",
 720                        urb->status);
 721                goto sched_wq;
 722        case -ESHUTDOWN:
 723        default:
 724                nfc_err(&dev->interface->dev,
 725                        "Urb failure (status %d)\n", urb->status);
 726                goto sched_wq;
 727        }
 728
 729        in_frame = dev->in_urb->transfer_buffer;
 730
 731        dev_dbg(&dev->interface->dev, "Received a frame\n");
 732        print_hex_dump_debug("PN533 RX: ", DUMP_PREFIX_NONE, 16, 1, in_frame,
 733                             dev->ops->rx_frame_size(in_frame), false);
 734
 735        if (!dev->ops->rx_is_frame_valid(in_frame, dev)) {
 736                nfc_err(&dev->interface->dev, "Received an invalid frame\n");
 737                cmd->status = -EIO;
 738                goto sched_wq;
 739        }
 740
 741        if (!pn533_rx_frame_is_cmd_response(dev, in_frame)) {
 742                nfc_err(&dev->interface->dev,
 743                        "It it not the response to the last command\n");
 744                cmd->status = -EIO;
 745                goto sched_wq;
 746        }
 747
 748sched_wq:
 749        queue_work(dev->wq, &dev->cmd_complete_work);
 750}
 751
 752static int pn533_submit_urb_for_response(struct pn533 *dev, gfp_t flags)
 753{
 754        dev->in_urb->complete = pn533_recv_response;
 755
 756        return usb_submit_urb(dev->in_urb, flags);
 757}
 758
 759static void pn533_recv_ack(struct urb *urb)
 760{
 761        struct pn533 *dev = urb->context;
 762        struct pn533_cmd *cmd = dev->cmd;
 763        struct pn533_std_frame *in_frame;
 764        int rc;
 765
 766        cmd->status = urb->status;
 767
 768        switch (urb->status) {
 769        case 0:
 770                break; /* success */
 771        case -ECONNRESET:
 772        case -ENOENT:
 773                dev_dbg(&dev->interface->dev,
 774                        "The urb has been stopped (status %d)\n",
 775                        urb->status);
 776                goto sched_wq;
 777        case -ESHUTDOWN:
 778        default:
 779                nfc_err(&dev->interface->dev,
 780                        "Urb failure (status %d)\n", urb->status);
 781                goto sched_wq;
 782        }
 783
 784        in_frame = dev->in_urb->transfer_buffer;
 785
 786        if (!pn533_std_rx_frame_is_ack(in_frame)) {
 787                nfc_err(&dev->interface->dev, "Received an invalid ack\n");
 788                cmd->status = -EIO;
 789                goto sched_wq;
 790        }
 791
 792        rc = pn533_submit_urb_for_response(dev, GFP_ATOMIC);
 793        if (rc) {
 794                nfc_err(&dev->interface->dev,
 795                        "usb_submit_urb failed with result %d\n", rc);
 796                cmd->status = rc;
 797                goto sched_wq;
 798        }
 799
 800        return;
 801
 802sched_wq:
 803        queue_work(dev->wq, &dev->cmd_complete_work);
 804}
 805
 806static int pn533_submit_urb_for_ack(struct pn533 *dev, gfp_t flags)
 807{
 808        dev->in_urb->complete = pn533_recv_ack;
 809
 810        return usb_submit_urb(dev->in_urb, flags);
 811}
 812
 813static int pn533_send_ack(struct pn533 *dev, gfp_t flags)
 814{
 815        u8 ack[PN533_STD_FRAME_ACK_SIZE] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
 816        /* spec 7.1.1.3:  Preamble, SoPC (2), ACK Code (2), Postamble */
 817        int rc;
 818
 819        dev->out_urb->transfer_buffer = ack;
 820        dev->out_urb->transfer_buffer_length = sizeof(ack);
 821        rc = usb_submit_urb(dev->out_urb, flags);
 822
 823        return rc;
 824}
 825
 826static int __pn533_send_frame_async(struct pn533 *dev,
 827                                        struct sk_buff *out,
 828                                        struct sk_buff *in,
 829                                        int in_len)
 830{
 831        int rc;
 832
 833        dev->out_urb->transfer_buffer = out->data;
 834        dev->out_urb->transfer_buffer_length = out->len;
 835
 836        dev->in_urb->transfer_buffer = in->data;
 837        dev->in_urb->transfer_buffer_length = in_len;
 838
 839        print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE, 16, 1,
 840                             out->data, out->len, false);
 841
 842        rc = usb_submit_urb(dev->out_urb, GFP_KERNEL);
 843        if (rc)
 844                return rc;
 845
 846        if (dev->protocol_type == PN533_PROTO_REQ_RESP) {
 847                /* request for response for sent packet directly */
 848                rc = pn533_submit_urb_for_response(dev, GFP_ATOMIC);
 849                if (rc)
 850                        goto error;
 851        } else if (dev->protocol_type == PN533_PROTO_REQ_ACK_RESP) {
 852                /* request for ACK if that's the case */
 853                rc = pn533_submit_urb_for_ack(dev, GFP_KERNEL);
 854                if (rc)
 855                        goto error;
 856        }
 857
 858        return 0;
 859
 860error:
 861        usb_unlink_urb(dev->out_urb);
 862        return rc;
 863}
 864
 865static void pn533_build_cmd_frame(struct pn533 *dev, u8 cmd_code,
 866                                  struct sk_buff *skb)
 867{
 868        /* payload is already there, just update datalen */
 869        int payload_len = skb->len;
 870        struct pn533_frame_ops *ops = dev->ops;
 871
 872
 873        skb_push(skb, ops->tx_header_len);
 874        skb_put(skb, ops->tx_tail_len);
 875
 876        ops->tx_frame_init(skb->data, cmd_code);
 877        ops->tx_update_payload_len(skb->data, payload_len);
 878        ops->tx_frame_finish(skb->data);
 879}
 880
 881static int pn533_send_async_complete(struct pn533 *dev)
 882{
 883        struct pn533_cmd *cmd = dev->cmd;
 884        int status = cmd->status;
 885
 886        struct sk_buff *req = cmd->req;
 887        struct sk_buff *resp = cmd->resp;
 888
 889        int rc;
 890
 891        dev_kfree_skb(req);
 892
 893        if (status < 0) {
 894                rc = cmd->complete_cb(dev, cmd->complete_cb_context,
 895                                      ERR_PTR(status));
 896                dev_kfree_skb(resp);
 897                goto done;
 898        }
 899
 900        skb_put(resp, dev->ops->rx_frame_size(resp->data));
 901        skb_pull(resp, dev->ops->rx_header_len);
 902        skb_trim(resp, resp->len - dev->ops->rx_tail_len);
 903
 904        rc = cmd->complete_cb(dev, cmd->complete_cb_context, resp);
 905
 906done:
 907        kfree(cmd);
 908        dev->cmd = NULL;
 909        return rc;
 910}
 911
 912static int __pn533_send_async(struct pn533 *dev, u8 cmd_code,
 913                              struct sk_buff *req, struct sk_buff *resp,
 914                              int resp_len,
 915                              pn533_send_async_complete_t complete_cb,
 916                              void *complete_cb_context)
 917{
 918        struct pn533_cmd *cmd;
 919        int rc = 0;
 920
 921        dev_dbg(&dev->interface->dev, "Sending command 0x%x\n", cmd_code);
 922
 923        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
 924        if (!cmd)
 925                return -ENOMEM;
 926
 927        cmd->code = cmd_code;
 928        cmd->req = req;
 929        cmd->resp = resp;
 930        cmd->resp_len = resp_len;
 931        cmd->complete_cb = complete_cb;
 932        cmd->complete_cb_context = complete_cb_context;
 933
 934        pn533_build_cmd_frame(dev, cmd_code, req);
 935
 936        mutex_lock(&dev->cmd_lock);
 937
 938        if (!dev->cmd_pending) {
 939                rc = __pn533_send_frame_async(dev, req, resp, resp_len);
 940                if (rc)
 941                        goto error;
 942
 943                dev->cmd_pending = 1;
 944                dev->cmd = cmd;
 945                goto unlock;
 946        }
 947
 948        dev_dbg(&dev->interface->dev, "%s Queueing command 0x%x\n",
 949                __func__, cmd_code);
 950
 951        INIT_LIST_HEAD(&cmd->queue);
 952        list_add_tail(&cmd->queue, &dev->cmd_queue);
 953
 954        goto unlock;
 955
 956error:
 957        kfree(cmd);
 958unlock:
 959        mutex_unlock(&dev->cmd_lock);
 960        return rc;
 961}
 962
 963static int pn533_send_data_async(struct pn533 *dev, u8 cmd_code,
 964                                 struct sk_buff *req,
 965                                 pn533_send_async_complete_t complete_cb,
 966                                 void *complete_cb_context)
 967{
 968        struct sk_buff *resp;
 969        int rc;
 970        int  resp_len = dev->ops->rx_header_len +
 971                        dev->ops->max_payload_len +
 972                        dev->ops->rx_tail_len;
 973
 974        resp = nfc_alloc_recv_skb(resp_len, GFP_KERNEL);
 975        if (!resp)
 976                return -ENOMEM;
 977
 978        rc = __pn533_send_async(dev, cmd_code, req, resp, resp_len, complete_cb,
 979                                complete_cb_context);
 980        if (rc)
 981                dev_kfree_skb(resp);
 982
 983        return rc;
 984}
 985
 986static int pn533_send_cmd_async(struct pn533 *dev, u8 cmd_code,
 987                                struct sk_buff *req,
 988                                pn533_send_async_complete_t complete_cb,
 989                                void *complete_cb_context)
 990{
 991        struct sk_buff *resp;
 992        int rc;
 993        int  resp_len = dev->ops->rx_header_len +
 994                        dev->ops->max_payload_len +
 995                        dev->ops->rx_tail_len;
 996
 997        resp = alloc_skb(resp_len, GFP_KERNEL);
 998        if (!resp)
 999                return -ENOMEM;
1000
1001        rc = __pn533_send_async(dev, cmd_code, req, resp, resp_len, complete_cb,
1002                                complete_cb_context);
1003        if (rc)
1004                dev_kfree_skb(resp);
1005
1006        return rc;
1007}
1008
1009/*
1010 * pn533_send_cmd_direct_async
1011 *
1012 * The function sends a piority cmd directly to the chip omiting the cmd
1013 * queue. It's intended to be used by chaining mechanism of received responses
1014 * where the host has to request every single chunk of data before scheduling
1015 * next cmd from the queue.
1016 */
1017static int pn533_send_cmd_direct_async(struct pn533 *dev, u8 cmd_code,
1018                                       struct sk_buff *req,
1019                                       pn533_send_async_complete_t complete_cb,
1020                                       void *complete_cb_context)
1021{
1022        struct sk_buff *resp;
1023        struct pn533_cmd *cmd;
1024        int rc;
1025        int resp_len = dev->ops->rx_header_len +
1026                       dev->ops->max_payload_len +
1027                       dev->ops->rx_tail_len;
1028
1029        resp = alloc_skb(resp_len, GFP_KERNEL);
1030        if (!resp)
1031                return -ENOMEM;
1032
1033        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
1034        if (!cmd) {
1035                dev_kfree_skb(resp);
1036                return -ENOMEM;
1037        }
1038
1039        cmd->code = cmd_code;
1040        cmd->req = req;
1041        cmd->resp = resp;
1042        cmd->resp_len = resp_len;
1043        cmd->complete_cb = complete_cb;
1044        cmd->complete_cb_context = complete_cb_context;
1045
1046        pn533_build_cmd_frame(dev, cmd_code, req);
1047
1048        rc = __pn533_send_frame_async(dev, req, resp, resp_len);
1049        if (rc < 0) {
1050                dev_kfree_skb(resp);
1051                kfree(cmd);
1052        } else {
1053                dev->cmd = cmd;
1054        }
1055
1056        return rc;
1057}
1058
1059static void pn533_wq_cmd_complete(struct work_struct *work)
1060{
1061        struct pn533 *dev = container_of(work, struct pn533, cmd_complete_work);
1062        int rc;
1063
1064        rc = pn533_send_async_complete(dev);
1065        if (rc != -EINPROGRESS)
1066                queue_work(dev->wq, &dev->cmd_work);
1067}
1068
1069static void pn533_wq_cmd(struct work_struct *work)
1070{
1071        struct pn533 *dev = container_of(work, struct pn533, cmd_work);
1072        struct pn533_cmd *cmd;
1073        int rc;
1074
1075        mutex_lock(&dev->cmd_lock);
1076
1077        if (list_empty(&dev->cmd_queue)) {
1078                dev->cmd_pending = 0;
1079                mutex_unlock(&dev->cmd_lock);
1080                return;
1081        }
1082
1083        cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue);
1084
1085        list_del(&cmd->queue);
1086
1087        mutex_unlock(&dev->cmd_lock);
1088
1089        rc = __pn533_send_frame_async(dev, cmd->req, cmd->resp, cmd->resp_len);
1090        if (rc < 0) {
1091                dev_kfree_skb(cmd->req);
1092                dev_kfree_skb(cmd->resp);
1093                kfree(cmd);
1094                return;
1095        }
1096
1097        dev->cmd = cmd;
1098}
1099
1100struct pn533_sync_cmd_response {
1101        struct sk_buff *resp;
1102        struct completion done;
1103};
1104
1105static int pn533_send_sync_complete(struct pn533 *dev, void *_arg,
1106                                    struct sk_buff *resp)
1107{
1108        struct pn533_sync_cmd_response *arg = _arg;
1109
1110        arg->resp = resp;
1111        complete(&arg->done);
1112
1113        return 0;
1114}
1115
1116/*  pn533_send_cmd_sync
1117 *
1118 *  Please note the req parameter is freed inside the function to
1119 *  limit a number of return value interpretations by the caller.
1120 *
1121 *  1. negative in case of error during TX path -> req should be freed
1122 *
1123 *  2. negative in case of error during RX path -> req should not be freed
1124 *     as it's been already freed at the begining of RX path by
1125 *     async_complete_cb.
1126 *
1127 *  3. valid pointer in case of succesfult RX path
1128 *
1129 *  A caller has to check a return value with IS_ERR macro. If the test pass,
1130 *  the returned pointer is valid.
1131 *
1132 * */
1133static struct sk_buff *pn533_send_cmd_sync(struct pn533 *dev, u8 cmd_code,
1134                                               struct sk_buff *req)
1135{
1136        int rc;
1137        struct pn533_sync_cmd_response arg;
1138
1139        init_completion(&arg.done);
1140
1141        rc = pn533_send_cmd_async(dev, cmd_code, req,
1142                                  pn533_send_sync_complete, &arg);
1143        if (rc) {
1144                dev_kfree_skb(req);
1145                return ERR_PTR(rc);
1146        }
1147
1148        wait_for_completion(&arg.done);
1149
1150        return arg.resp;
1151}
1152
1153static void pn533_send_complete(struct urb *urb)
1154{
1155        struct pn533 *dev = urb->context;
1156
1157        switch (urb->status) {
1158        case 0:
1159                break; /* success */
1160        case -ECONNRESET:
1161        case -ENOENT:
1162                dev_dbg(&dev->interface->dev,
1163                        "The urb has been stopped (status %d)\n",
1164                        urb->status);
1165                break;
1166        case -ESHUTDOWN:
1167        default:
1168                nfc_err(&dev->interface->dev, "Urb failure (status %d)\n",
1169                        urb->status);
1170        }
1171}
1172
1173static void pn533_abort_cmd(struct pn533 *dev, gfp_t flags)
1174{
1175        /* ACR122U does not support any command which aborts last
1176         * issued command i.e. as ACK for standard PN533. Additionally,
1177         * it behaves stange, sending broken or incorrect responses,
1178         * when we cancel urb before the chip will send response.
1179         */
1180        if (dev->device_type == PN533_DEVICE_ACR122U)
1181                return;
1182
1183        /* An ack will cancel the last issued command */
1184        pn533_send_ack(dev, flags);
1185
1186        /* cancel the urb request */
1187        usb_kill_urb(dev->in_urb);
1188}
1189
1190static struct sk_buff *pn533_alloc_skb(struct pn533 *dev, unsigned int size)
1191{
1192        struct sk_buff *skb;
1193
1194        skb = alloc_skb(dev->ops->tx_header_len +
1195                        size +
1196                        dev->ops->tx_tail_len, GFP_KERNEL);
1197
1198        if (skb)
1199                skb_reserve(skb, dev->ops->tx_header_len);
1200
1201        return skb;
1202}
1203
1204struct pn533_target_type_a {
1205        __be16 sens_res;
1206        u8 sel_res;
1207        u8 nfcid_len;
1208        u8 nfcid_data[];
1209} __packed;
1210
1211
1212#define PN533_TYPE_A_SENS_RES_NFCID1(x) ((u8)((be16_to_cpu(x) & 0x00C0) >> 6))
1213#define PN533_TYPE_A_SENS_RES_SSD(x) ((u8)((be16_to_cpu(x) & 0x001F) >> 0))
1214#define PN533_TYPE_A_SENS_RES_PLATCONF(x) ((u8)((be16_to_cpu(x) & 0x0F00) >> 8))
1215
1216#define PN533_TYPE_A_SENS_RES_SSD_JEWEL 0x00
1217#define PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL 0x0C
1218
1219#define PN533_TYPE_A_SEL_PROT(x) (((x) & 0x60) >> 5)
1220#define PN533_TYPE_A_SEL_CASCADE(x) (((x) & 0x04) >> 2)
1221
1222#define PN533_TYPE_A_SEL_PROT_MIFARE 0
1223#define PN533_TYPE_A_SEL_PROT_ISO14443 1
1224#define PN533_TYPE_A_SEL_PROT_DEP 2
1225#define PN533_TYPE_A_SEL_PROT_ISO14443_DEP 3
1226
1227static bool pn533_target_type_a_is_valid(struct pn533_target_type_a *type_a,
1228                                                        int target_data_len)
1229{
1230        u8 ssd;
1231        u8 platconf;
1232
1233        if (target_data_len < sizeof(struct pn533_target_type_a))
1234                return false;
1235
1236        /* The lenght check of nfcid[] and ats[] are not being performed because
1237           the values are not being used */
1238
1239        /* Requirement 4.6.3.3 from NFC Forum Digital Spec */
1240        ssd = PN533_TYPE_A_SENS_RES_SSD(type_a->sens_res);
1241        platconf = PN533_TYPE_A_SENS_RES_PLATCONF(type_a->sens_res);
1242
1243        if ((ssd == PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
1244             platconf != PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL) ||
1245            (ssd != PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
1246             platconf == PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL))
1247                return false;
1248
1249        /* Requirements 4.8.2.1, 4.8.2.3, 4.8.2.5 and 4.8.2.7 from NFC Forum */
1250        if (PN533_TYPE_A_SEL_CASCADE(type_a->sel_res) != 0)
1251                return false;
1252
1253        return true;
1254}
1255
1256static int pn533_target_found_type_a(struct nfc_target *nfc_tgt, u8 *tgt_data,
1257                                                        int tgt_data_len)
1258{
1259        struct pn533_target_type_a *tgt_type_a;
1260
1261        tgt_type_a = (struct pn533_target_type_a *)tgt_data;
1262
1263        if (!pn533_target_type_a_is_valid(tgt_type_a, tgt_data_len))
1264                return -EPROTO;
1265
1266        switch (PN533_TYPE_A_SEL_PROT(tgt_type_a->sel_res)) {
1267        case PN533_TYPE_A_SEL_PROT_MIFARE:
1268                nfc_tgt->supported_protocols = NFC_PROTO_MIFARE_MASK;
1269                break;
1270        case PN533_TYPE_A_SEL_PROT_ISO14443:
1271                nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_MASK;
1272                break;
1273        case PN533_TYPE_A_SEL_PROT_DEP:
1274                nfc_tgt->supported_protocols = NFC_PROTO_NFC_DEP_MASK;
1275                break;
1276        case PN533_TYPE_A_SEL_PROT_ISO14443_DEP:
1277                nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_MASK |
1278                                                        NFC_PROTO_NFC_DEP_MASK;
1279                break;
1280        }
1281
1282        nfc_tgt->sens_res = be16_to_cpu(tgt_type_a->sens_res);
1283        nfc_tgt->sel_res = tgt_type_a->sel_res;
1284        nfc_tgt->nfcid1_len = tgt_type_a->nfcid_len;
1285        memcpy(nfc_tgt->nfcid1, tgt_type_a->nfcid_data, nfc_tgt->nfcid1_len);
1286
1287        return 0;
1288}
1289
1290struct pn533_target_felica {
1291        u8 pol_res;
1292        u8 opcode;
1293        u8 nfcid2[NFC_NFCID2_MAXSIZE];
1294        u8 pad[8];
1295        /* optional */
1296        u8 syst_code[];
1297} __packed;
1298
1299#define PN533_FELICA_SENSF_NFCID2_DEP_B1 0x01
1300#define PN533_FELICA_SENSF_NFCID2_DEP_B2 0xFE
1301
1302static bool pn533_target_felica_is_valid(struct pn533_target_felica *felica,
1303                                                        int target_data_len)
1304{
1305        if (target_data_len < sizeof(struct pn533_target_felica))
1306                return false;
1307
1308        if (felica->opcode != PN533_FELICA_OPC_SENSF_RES)
1309                return false;
1310
1311        return true;
1312}
1313
1314static int pn533_target_found_felica(struct nfc_target *nfc_tgt, u8 *tgt_data,
1315                                                        int tgt_data_len)
1316{
1317        struct pn533_target_felica *tgt_felica;
1318
1319        tgt_felica = (struct pn533_target_felica *)tgt_data;
1320
1321        if (!pn533_target_felica_is_valid(tgt_felica, tgt_data_len))
1322                return -EPROTO;
1323
1324        if ((tgt_felica->nfcid2[0] == PN533_FELICA_SENSF_NFCID2_DEP_B1) &&
1325            (tgt_felica->nfcid2[1] == PN533_FELICA_SENSF_NFCID2_DEP_B2))
1326                nfc_tgt->supported_protocols = NFC_PROTO_NFC_DEP_MASK;
1327        else
1328                nfc_tgt->supported_protocols = NFC_PROTO_FELICA_MASK;
1329
1330        memcpy(nfc_tgt->sensf_res, &tgt_felica->opcode, 9);
1331        nfc_tgt->sensf_res_len = 9;
1332
1333        memcpy(nfc_tgt->nfcid2, tgt_felica->nfcid2, NFC_NFCID2_MAXSIZE);
1334        nfc_tgt->nfcid2_len = NFC_NFCID2_MAXSIZE;
1335
1336        return 0;
1337}
1338
1339struct pn533_target_jewel {
1340        __be16 sens_res;
1341        u8 jewelid[4];
1342} __packed;
1343
1344static bool pn533_target_jewel_is_valid(struct pn533_target_jewel *jewel,
1345                                                        int target_data_len)
1346{
1347        u8 ssd;
1348        u8 platconf;
1349
1350        if (target_data_len < sizeof(struct pn533_target_jewel))
1351                return false;
1352
1353        /* Requirement 4.6.3.3 from NFC Forum Digital Spec */
1354        ssd = PN533_TYPE_A_SENS_RES_SSD(jewel->sens_res);
1355        platconf = PN533_TYPE_A_SENS_RES_PLATCONF(jewel->sens_res);
1356
1357        if ((ssd == PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
1358             platconf != PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL) ||
1359            (ssd != PN533_TYPE_A_SENS_RES_SSD_JEWEL &&
1360             platconf == PN533_TYPE_A_SENS_RES_PLATCONF_JEWEL))
1361                return false;
1362
1363        return true;
1364}
1365
1366static int pn533_target_found_jewel(struct nfc_target *nfc_tgt, u8 *tgt_data,
1367                                                        int tgt_data_len)
1368{
1369        struct pn533_target_jewel *tgt_jewel;
1370
1371        tgt_jewel = (struct pn533_target_jewel *)tgt_data;
1372
1373        if (!pn533_target_jewel_is_valid(tgt_jewel, tgt_data_len))
1374                return -EPROTO;
1375
1376        nfc_tgt->supported_protocols = NFC_PROTO_JEWEL_MASK;
1377        nfc_tgt->sens_res = be16_to_cpu(tgt_jewel->sens_res);
1378        nfc_tgt->nfcid1_len = 4;
1379        memcpy(nfc_tgt->nfcid1, tgt_jewel->jewelid, nfc_tgt->nfcid1_len);
1380
1381        return 0;
1382}
1383
1384struct pn533_type_b_prot_info {
1385        u8 bitrate;
1386        u8 fsci_type;
1387        u8 fwi_adc_fo;
1388} __packed;
1389
1390#define PN533_TYPE_B_PROT_FCSI(x) (((x) & 0xF0) >> 4)
1391#define PN533_TYPE_B_PROT_TYPE(x) (((x) & 0x0F) >> 0)
1392#define PN533_TYPE_B_PROT_TYPE_RFU_MASK 0x8
1393
1394struct pn533_type_b_sens_res {
1395        u8 opcode;
1396        u8 nfcid[4];
1397        u8 appdata[4];
1398        struct pn533_type_b_prot_info prot_info;
1399} __packed;
1400
1401#define PN533_TYPE_B_OPC_SENSB_RES 0x50
1402
1403struct pn533_target_type_b {
1404        struct pn533_type_b_sens_res sensb_res;
1405        u8 attrib_res_len;
1406        u8 attrib_res[];
1407} __packed;
1408
1409static bool pn533_target_type_b_is_valid(struct pn533_target_type_b *type_b,
1410                                                        int target_data_len)
1411{
1412        if (target_data_len < sizeof(struct pn533_target_type_b))
1413                return false;
1414
1415        if (type_b->sensb_res.opcode != PN533_TYPE_B_OPC_SENSB_RES)
1416                return false;
1417
1418        if (PN533_TYPE_B_PROT_TYPE(type_b->sensb_res.prot_info.fsci_type) &
1419                                                PN533_TYPE_B_PROT_TYPE_RFU_MASK)
1420                return false;
1421
1422        return true;
1423}
1424
1425static int pn533_target_found_type_b(struct nfc_target *nfc_tgt, u8 *tgt_data,
1426                                                        int tgt_data_len)
1427{
1428        struct pn533_target_type_b *tgt_type_b;
1429
1430        tgt_type_b = (struct pn533_target_type_b *)tgt_data;
1431
1432        if (!pn533_target_type_b_is_valid(tgt_type_b, tgt_data_len))
1433                return -EPROTO;
1434
1435        nfc_tgt->supported_protocols = NFC_PROTO_ISO14443_B_MASK;
1436
1437        return 0;
1438}
1439
1440static int pn533_target_found(struct pn533 *dev, u8 tg, u8 *tgdata,
1441                              int tgdata_len)
1442{
1443        struct nfc_target nfc_tgt;
1444        int rc;
1445
1446        dev_dbg(&dev->interface->dev, "%s: modulation=%d\n",
1447                __func__, dev->poll_mod_curr);
1448
1449        if (tg != 1)
1450                return -EPROTO;
1451
1452        memset(&nfc_tgt, 0, sizeof(struct nfc_target));
1453
1454        switch (dev->poll_mod_curr) {
1455        case PN533_POLL_MOD_106KBPS_A:
1456                rc = pn533_target_found_type_a(&nfc_tgt, tgdata, tgdata_len);
1457                break;
1458        case PN533_POLL_MOD_212KBPS_FELICA:
1459        case PN533_POLL_MOD_424KBPS_FELICA:
1460                rc = pn533_target_found_felica(&nfc_tgt, tgdata, tgdata_len);
1461                break;
1462        case PN533_POLL_MOD_106KBPS_JEWEL:
1463                rc = pn533_target_found_jewel(&nfc_tgt, tgdata, tgdata_len);
1464                break;
1465        case PN533_POLL_MOD_847KBPS_B:
1466                rc = pn533_target_found_type_b(&nfc_tgt, tgdata, tgdata_len);
1467                break;
1468        default:
1469                nfc_err(&dev->interface->dev,
1470                        "Unknown current poll modulation\n");
1471                return -EPROTO;
1472        }
1473
1474        if (rc)
1475                return rc;
1476
1477        if (!(nfc_tgt.supported_protocols & dev->poll_protocols)) {
1478                dev_dbg(&dev->interface->dev,
1479                        "The Tg found doesn't have the desired protocol\n");
1480                return -EAGAIN;
1481        }
1482
1483        dev_dbg(&dev->interface->dev,
1484                "Target found - supported protocols: 0x%x\n",
1485                nfc_tgt.supported_protocols);
1486
1487        dev->tgt_available_prots = nfc_tgt.supported_protocols;
1488
1489        nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1);
1490
1491        return 0;
1492}
1493
1494static inline void pn533_poll_next_mod(struct pn533 *dev)
1495{
1496        dev->poll_mod_curr = (dev->poll_mod_curr + 1) % dev->poll_mod_count;
1497}
1498
1499static void pn533_poll_reset_mod_list(struct pn533 *dev)
1500{
1501        dev->poll_mod_count = 0;
1502}
1503
1504static void pn533_poll_add_mod(struct pn533 *dev, u8 mod_index)
1505{
1506        dev->poll_mod_active[dev->poll_mod_count] =
1507                (struct pn533_poll_modulations *)&poll_mod[mod_index];
1508        dev->poll_mod_count++;
1509}
1510
1511static void pn533_poll_create_mod_list(struct pn533 *dev,
1512                                       u32 im_protocols, u32 tm_protocols)
1513{
1514        pn533_poll_reset_mod_list(dev);
1515
1516        if ((im_protocols & NFC_PROTO_MIFARE_MASK) ||
1517            (im_protocols & NFC_PROTO_ISO14443_MASK) ||
1518            (im_protocols & NFC_PROTO_NFC_DEP_MASK))
1519                pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_A);
1520
1521        if (im_protocols & NFC_PROTO_FELICA_MASK ||
1522            im_protocols & NFC_PROTO_NFC_DEP_MASK) {
1523                pn533_poll_add_mod(dev, PN533_POLL_MOD_212KBPS_FELICA);
1524                pn533_poll_add_mod(dev, PN533_POLL_MOD_424KBPS_FELICA);
1525        }
1526
1527        if (im_protocols & NFC_PROTO_JEWEL_MASK)
1528                pn533_poll_add_mod(dev, PN533_POLL_MOD_106KBPS_JEWEL);
1529
1530        if (im_protocols & NFC_PROTO_ISO14443_B_MASK)
1531                pn533_poll_add_mod(dev, PN533_POLL_MOD_847KBPS_B);
1532
1533        if (tm_protocols)
1534                pn533_poll_add_mod(dev, PN533_LISTEN_MOD);
1535}
1536
1537static int pn533_start_poll_complete(struct pn533 *dev, struct sk_buff *resp)
1538{
1539        u8 nbtg, tg, *tgdata;
1540        int rc, tgdata_len;
1541
1542        /* Toggle the DEP polling */
1543        dev->poll_dep = 1;
1544
1545        nbtg = resp->data[0];
1546        tg = resp->data[1];
1547        tgdata = &resp->data[2];
1548        tgdata_len = resp->len - 2;  /* nbtg + tg */
1549
1550        if (nbtg) {
1551                rc = pn533_target_found(dev, tg, tgdata, tgdata_len);
1552
1553                /* We must stop the poll after a valid target found */
1554                if (rc == 0) {
1555                        pn533_poll_reset_mod_list(dev);
1556                        return 0;
1557                }
1558        }
1559
1560        return -EAGAIN;
1561}
1562
1563static struct sk_buff *pn533_alloc_poll_tg_frame(struct pn533 *dev)
1564{
1565        struct sk_buff *skb;
1566        u8 *felica, *nfcid3, *gb;
1567
1568        u8 *gbytes = dev->gb;
1569        size_t gbytes_len = dev->gb_len;
1570
1571        u8 felica_params[18] = {0x1, 0xfe, /* DEP */
1572                                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* random */
1573                                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
1574                                0xff, 0xff}; /* System code */
1575
1576        u8 mifare_params[6] = {0x1, 0x1, /* SENS_RES */
1577                               0x0, 0x0, 0x0,
1578                               0x40}; /* SEL_RES for DEP */
1579
1580        unsigned int skb_len = 36 + /* mode (1), mifare (6),
1581                                       felica (18), nfcid3 (10), gb_len (1) */
1582                               gbytes_len +
1583                               1;  /* len Tk*/
1584
1585        skb = pn533_alloc_skb(dev, skb_len);
1586        if (!skb)
1587                return NULL;
1588
1589        /* DEP support only */
1590        *skb_put(skb, 1) = PN533_INIT_TARGET_DEP;
1591
1592        /* MIFARE params */
1593        memcpy(skb_put(skb, 6), mifare_params, 6);
1594
1595        /* Felica params */
1596        felica = skb_put(skb, 18);
1597        memcpy(felica, felica_params, 18);
1598        get_random_bytes(felica + 2, 6);
1599
1600        /* NFCID3 */
1601        nfcid3 = skb_put(skb, 10);
1602        memset(nfcid3, 0, 10);
1603        memcpy(nfcid3, felica, 8);
1604
1605        /* General bytes */
1606        *skb_put(skb, 1) = gbytes_len;
1607
1608        gb = skb_put(skb, gbytes_len);
1609        memcpy(gb, gbytes, gbytes_len);
1610
1611        /* Len Tk */
1612        *skb_put(skb, 1) = 0;
1613
1614        return skb;
1615}
1616
1617#define PN533_CMD_DATAEXCH_HEAD_LEN 1
1618#define PN533_CMD_DATAEXCH_DATA_MAXLEN 262
1619static void pn533_wq_tm_mi_recv(struct work_struct *work);
1620static struct sk_buff *pn533_build_response(struct pn533 *dev);
1621
1622static int pn533_tm_get_data_complete(struct pn533 *dev, void *arg,
1623                                      struct sk_buff *resp)
1624{
1625        struct sk_buff *skb;
1626        u8 status, ret, mi;
1627        int rc;
1628
1629        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1630
1631        if (IS_ERR(resp)) {
1632                skb_queue_purge(&dev->resp_q);
1633                return PTR_ERR(resp);
1634        }
1635
1636        status = resp->data[0];
1637
1638        ret = status & PN533_CMD_RET_MASK;
1639        mi = status & PN533_CMD_MI_MASK;
1640
1641        skb_pull(resp, sizeof(status));
1642
1643        if (ret != PN533_CMD_RET_SUCCESS) {
1644                rc = -EIO;
1645                goto error;
1646        }
1647
1648        skb_queue_tail(&dev->resp_q, resp);
1649
1650        if (mi) {
1651                queue_work(dev->wq, &dev->mi_tm_rx_work);
1652                return -EINPROGRESS;
1653        }
1654
1655        skb = pn533_build_response(dev);
1656        if (!skb) {
1657                rc = -EIO;
1658                goto error;
1659        }
1660
1661        return nfc_tm_data_received(dev->nfc_dev, skb);
1662
1663error:
1664        nfc_tm_deactivated(dev->nfc_dev);
1665        dev->tgt_mode = 0;
1666        skb_queue_purge(&dev->resp_q);
1667        dev_kfree_skb(resp);
1668
1669        return rc;
1670}
1671
1672static void pn533_wq_tm_mi_recv(struct work_struct *work)
1673{
1674        struct pn533 *dev = container_of(work, struct pn533, mi_tm_rx_work);
1675        struct sk_buff *skb;
1676        int rc;
1677
1678        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1679
1680        skb = pn533_alloc_skb(dev, 0);
1681        if (!skb)
1682                return;
1683
1684        rc = pn533_send_cmd_direct_async(dev,
1685                                        PN533_CMD_TG_GET_DATA,
1686                                        skb,
1687                                        pn533_tm_get_data_complete,
1688                                        NULL);
1689
1690        if (rc < 0)
1691                dev_kfree_skb(skb);
1692
1693        return;
1694}
1695
1696static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
1697                                  struct sk_buff *resp);
1698static void pn533_wq_tm_mi_send(struct work_struct *work)
1699{
1700        struct pn533 *dev = container_of(work, struct pn533, mi_tm_tx_work);
1701        struct sk_buff *skb;
1702        int rc;
1703
1704        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1705
1706        /* Grab the first skb in the queue */
1707        skb = skb_dequeue(&dev->fragment_skb);
1708        if (skb == NULL) {      /* No more data */
1709                /* Reset the queue for future use */
1710                skb_queue_head_init(&dev->fragment_skb);
1711                goto error;
1712        }
1713
1714        /* last entry - remove MI bit */
1715        if (skb_queue_len(&dev->fragment_skb) == 0) {
1716                rc = pn533_send_cmd_direct_async(dev, PN533_CMD_TG_SET_DATA,
1717                                        skb, pn533_tm_send_complete, NULL);
1718        } else
1719                rc = pn533_send_cmd_direct_async(dev,
1720                                        PN533_CMD_TG_SET_META_DATA,
1721                                        skb, pn533_tm_send_complete, NULL);
1722
1723        if (rc == 0) /* success */
1724                return;
1725
1726        dev_err(&dev->interface->dev,
1727                "Error %d when trying to perform set meta data_exchange", rc);
1728
1729        dev_kfree_skb(skb);
1730
1731error:
1732        pn533_send_ack(dev, GFP_KERNEL);
1733        queue_work(dev->wq, &dev->cmd_work);
1734}
1735
1736static void pn533_wq_tg_get_data(struct work_struct *work)
1737{
1738        struct pn533 *dev = container_of(work, struct pn533, tg_work);
1739        struct sk_buff *skb;
1740        int rc;
1741
1742        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1743
1744        skb = pn533_alloc_skb(dev, 0);
1745        if (!skb)
1746                return;
1747
1748        rc = pn533_send_data_async(dev, PN533_CMD_TG_GET_DATA, skb,
1749                                   pn533_tm_get_data_complete, NULL);
1750
1751        if (rc < 0)
1752                dev_kfree_skb(skb);
1753
1754        return;
1755}
1756
1757#define ATR_REQ_GB_OFFSET 17
1758static int pn533_init_target_complete(struct pn533 *dev, struct sk_buff *resp)
1759{
1760        u8 mode, *cmd, comm_mode = NFC_COMM_PASSIVE, *gb;
1761        size_t gb_len;
1762        int rc;
1763
1764        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1765
1766        if (resp->len < ATR_REQ_GB_OFFSET + 1)
1767                return -EINVAL;
1768
1769        mode = resp->data[0];
1770        cmd = &resp->data[1];
1771
1772        dev_dbg(&dev->interface->dev, "Target mode 0x%x len %d\n",
1773                mode, resp->len);
1774
1775        if ((mode & PN533_INIT_TARGET_RESP_FRAME_MASK) ==
1776            PN533_INIT_TARGET_RESP_ACTIVE)
1777                comm_mode = NFC_COMM_ACTIVE;
1778
1779        if ((mode & PN533_INIT_TARGET_RESP_DEP) == 0)  /* Only DEP supported */
1780                return -EOPNOTSUPP;
1781
1782        gb = cmd + ATR_REQ_GB_OFFSET;
1783        gb_len = resp->len - (ATR_REQ_GB_OFFSET + 1);
1784
1785        rc = nfc_tm_activated(dev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
1786                              comm_mode, gb, gb_len);
1787        if (rc < 0) {
1788                nfc_err(&dev->interface->dev,
1789                        "Error when signaling target activation\n");
1790                return rc;
1791        }
1792
1793        dev->tgt_mode = 1;
1794        queue_work(dev->wq, &dev->tg_work);
1795
1796        return 0;
1797}
1798
1799static void pn533_listen_mode_timer(unsigned long data)
1800{
1801        struct pn533 *dev = (struct pn533 *)data;
1802
1803        dev_dbg(&dev->interface->dev, "Listen mode timeout\n");
1804
1805        dev->cancel_listen = 1;
1806
1807        pn533_poll_next_mod(dev);
1808
1809        queue_delayed_work(dev->wq, &dev->poll_work,
1810                           msecs_to_jiffies(PN533_POLL_INTERVAL));
1811}
1812
1813static int pn533_rf_complete(struct pn533 *dev, void *arg,
1814                             struct sk_buff *resp)
1815{
1816        int rc = 0;
1817
1818        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1819
1820        if (IS_ERR(resp)) {
1821                rc = PTR_ERR(resp);
1822
1823                nfc_err(&dev->interface->dev, "RF setting error %d\n", rc);
1824
1825                return rc;
1826        }
1827
1828        queue_delayed_work(dev->wq, &dev->poll_work,
1829                           msecs_to_jiffies(PN533_POLL_INTERVAL));
1830
1831        dev_kfree_skb(resp);
1832        return rc;
1833}
1834
1835static void pn533_wq_rf(struct work_struct *work)
1836{
1837        struct pn533 *dev = container_of(work, struct pn533, rf_work);
1838        struct sk_buff *skb;
1839        int rc;
1840
1841        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1842
1843        skb = pn533_alloc_skb(dev, 2);
1844        if (!skb)
1845                return;
1846
1847        *skb_put(skb, 1) = PN533_CFGITEM_RF_FIELD;
1848        *skb_put(skb, 1) = PN533_CFGITEM_RF_FIELD_AUTO_RFCA;
1849
1850        rc = pn533_send_cmd_async(dev, PN533_CMD_RF_CONFIGURATION, skb,
1851                                  pn533_rf_complete, NULL);
1852        if (rc < 0) {
1853                dev_kfree_skb(skb);
1854                nfc_err(&dev->interface->dev, "RF setting error %d\n", rc);
1855        }
1856
1857        return;
1858}
1859
1860static int pn533_poll_dep_complete(struct pn533 *dev, void *arg,
1861                                   struct sk_buff *resp)
1862{
1863        struct pn533_cmd_jump_dep_response *rsp;
1864        struct nfc_target nfc_target;
1865        u8 target_gt_len;
1866        int rc;
1867
1868        if (IS_ERR(resp))
1869                return PTR_ERR(resp);
1870
1871        rsp = (struct pn533_cmd_jump_dep_response *)resp->data;
1872
1873        rc = rsp->status & PN533_CMD_RET_MASK;
1874        if (rc != PN533_CMD_RET_SUCCESS) {
1875                /* Not target found, turn radio off */
1876                queue_work(dev->wq, &dev->rf_work);
1877
1878                dev_kfree_skb(resp);
1879                return 0;
1880        }
1881
1882        dev_dbg(&dev->interface->dev, "Creating new target");
1883
1884        nfc_target.supported_protocols = NFC_PROTO_NFC_DEP_MASK;
1885        nfc_target.nfcid1_len = 10;
1886        memcpy(nfc_target.nfcid1, rsp->nfcid3t, nfc_target.nfcid1_len);
1887        rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1);
1888        if (rc)
1889                goto error;
1890
1891        dev->tgt_available_prots = 0;
1892        dev->tgt_active_prot = NFC_PROTO_NFC_DEP;
1893
1894        /* ATR_RES general bytes are located at offset 17 */
1895        target_gt_len = resp->len - 17;
1896        rc = nfc_set_remote_general_bytes(dev->nfc_dev,
1897                                          rsp->gt, target_gt_len);
1898        if (!rc) {
1899                rc = nfc_dep_link_is_up(dev->nfc_dev,
1900                                        dev->nfc_dev->targets[0].idx,
1901                                        0, NFC_RF_INITIATOR);
1902
1903                if (!rc)
1904                        pn533_poll_reset_mod_list(dev);
1905        }
1906error:
1907        dev_kfree_skb(resp);
1908        return rc;
1909}
1910
1911#define PASSIVE_DATA_LEN 5
1912static int pn533_poll_dep(struct nfc_dev *nfc_dev)
1913{
1914        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
1915        struct sk_buff *skb;
1916        int rc, skb_len;
1917        u8 *next, nfcid3[NFC_NFCID3_MAXSIZE];
1918        u8 passive_data[PASSIVE_DATA_LEN] = {0x00, 0xff, 0xff, 0x00, 0x3};
1919
1920        dev_dbg(&dev->interface->dev, "%s", __func__);
1921
1922        if (!dev->gb) {
1923                dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len);
1924
1925                if (!dev->gb || !dev->gb_len) {
1926                        dev->poll_dep = 0;
1927                        queue_work(dev->wq, &dev->rf_work);
1928                }
1929        }
1930
1931        skb_len = 3 + dev->gb_len; /* ActPass + BR + Next */
1932        skb_len += PASSIVE_DATA_LEN;
1933
1934        /* NFCID3 */
1935        skb_len += NFC_NFCID3_MAXSIZE;
1936        nfcid3[0] = 0x1;
1937        nfcid3[1] = 0xfe;
1938        get_random_bytes(nfcid3 + 2, 6);
1939
1940        skb = pn533_alloc_skb(dev, skb_len);
1941        if (!skb)
1942                return -ENOMEM;
1943
1944        *skb_put(skb, 1) = 0x01;  /* Active */
1945        *skb_put(skb, 1) = 0x02;  /* 424 kbps */
1946
1947        next = skb_put(skb, 1);  /* Next */
1948        *next = 0;
1949
1950        /* Copy passive data */
1951        memcpy(skb_put(skb, PASSIVE_DATA_LEN), passive_data, PASSIVE_DATA_LEN);
1952        *next |= 1;
1953
1954        /* Copy NFCID3 (which is NFCID2 from SENSF_RES) */
1955        memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), nfcid3,
1956               NFC_NFCID3_MAXSIZE);
1957        *next |= 2;
1958
1959        memcpy(skb_put(skb, dev->gb_len), dev->gb, dev->gb_len);
1960        *next |= 4; /* We have some Gi */
1961
1962        rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb,
1963                                  pn533_poll_dep_complete, NULL);
1964
1965        if (rc < 0)
1966                dev_kfree_skb(skb);
1967
1968        return rc;
1969}
1970
1971static int pn533_poll_complete(struct pn533 *dev, void *arg,
1972                               struct sk_buff *resp)
1973{
1974        struct pn533_poll_modulations *cur_mod;
1975        int rc;
1976
1977        dev_dbg(&dev->interface->dev, "%s\n", __func__);
1978
1979        if (IS_ERR(resp)) {
1980                rc = PTR_ERR(resp);
1981
1982                nfc_err(&dev->interface->dev, "%s  Poll complete error %d\n",
1983                        __func__, rc);
1984
1985                if (rc == -ENOENT) {
1986                        if (dev->poll_mod_count != 0)
1987                                return rc;
1988                        else
1989                                goto stop_poll;
1990                } else if (rc < 0) {
1991                        nfc_err(&dev->interface->dev,
1992                                "Error %d when running poll\n", rc);
1993                        goto stop_poll;
1994                }
1995        }
1996
1997        cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
1998
1999        if (cur_mod->len == 0) { /* Target mode */
2000                del_timer(&dev->listen_timer);
2001                rc = pn533_init_target_complete(dev, resp);
2002                goto done;
2003        }
2004
2005        /* Initiator mode */
2006        rc = pn533_start_poll_complete(dev, resp);
2007        if (!rc)
2008                goto done;
2009
2010        if (!dev->poll_mod_count) {
2011                dev_dbg(&dev->interface->dev, "Polling has been stopped\n");
2012                goto done;
2013        }
2014
2015        pn533_poll_next_mod(dev);
2016        /* Not target found, turn radio off */
2017        queue_work(dev->wq, &dev->rf_work);
2018
2019done:
2020        dev_kfree_skb(resp);
2021        return rc;
2022
2023stop_poll:
2024        nfc_err(&dev->interface->dev, "Polling operation has been stopped\n");
2025
2026        pn533_poll_reset_mod_list(dev);
2027        dev->poll_protocols = 0;
2028        return rc;
2029}
2030
2031static struct sk_buff *pn533_alloc_poll_in_frame(struct pn533 *dev,
2032                                        struct pn533_poll_modulations *mod)
2033{
2034        struct sk_buff *skb;
2035
2036        skb = pn533_alloc_skb(dev, mod->len);
2037        if (!skb)
2038                return NULL;
2039
2040        memcpy(skb_put(skb, mod->len), &mod->data, mod->len);
2041
2042        return skb;
2043}
2044
2045static int pn533_send_poll_frame(struct pn533 *dev)
2046{
2047        struct pn533_poll_modulations *mod;
2048        struct sk_buff *skb;
2049        int rc;
2050        u8 cmd_code;
2051
2052        mod = dev->poll_mod_active[dev->poll_mod_curr];
2053
2054        dev_dbg(&dev->interface->dev, "%s mod len %d\n",
2055                __func__, mod->len);
2056
2057        if (dev->poll_dep)  {
2058                dev->poll_dep = 0;
2059                return pn533_poll_dep(dev->nfc_dev);
2060        }
2061
2062        if (mod->len == 0) {  /* Listen mode */
2063                cmd_code = PN533_CMD_TG_INIT_AS_TARGET;
2064                skb = pn533_alloc_poll_tg_frame(dev);
2065        } else {  /* Polling mode */
2066                cmd_code =  PN533_CMD_IN_LIST_PASSIVE_TARGET;
2067                skb = pn533_alloc_poll_in_frame(dev, mod);
2068        }
2069
2070        if (!skb) {
2071                nfc_err(&dev->interface->dev, "Failed to allocate skb\n");
2072                return -ENOMEM;
2073        }
2074
2075        rc = pn533_send_cmd_async(dev, cmd_code, skb, pn533_poll_complete,
2076                                  NULL);
2077        if (rc < 0) {
2078                dev_kfree_skb(skb);
2079                nfc_err(&dev->interface->dev, "Polling loop error %d\n", rc);
2080        }
2081
2082        return rc;
2083}
2084
2085static void pn533_wq_poll(struct work_struct *work)
2086{
2087        struct pn533 *dev = container_of(work, struct pn533, poll_work.work);
2088        struct pn533_poll_modulations *cur_mod;
2089        int rc;
2090
2091        cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
2092
2093        dev_dbg(&dev->interface->dev,
2094                "%s cancel_listen %d modulation len %d\n",
2095                __func__, dev->cancel_listen, cur_mod->len);
2096
2097        if (dev->cancel_listen == 1) {
2098                dev->cancel_listen = 0;
2099                pn533_abort_cmd(dev, GFP_ATOMIC);
2100        }
2101
2102        rc = pn533_send_poll_frame(dev);
2103        if (rc)
2104                return;
2105
2106        if (cur_mod->len == 0 && dev->poll_mod_count > 1)
2107                mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ);
2108
2109        return;
2110}
2111
2112static int pn533_start_poll(struct nfc_dev *nfc_dev,
2113                            u32 im_protocols, u32 tm_protocols)
2114{
2115        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2116        struct pn533_poll_modulations *cur_mod;
2117        u8 rand_mod;
2118        int rc;
2119
2120        dev_dbg(&dev->interface->dev,
2121                "%s: im protocols 0x%x tm protocols 0x%x\n",
2122                __func__, im_protocols, tm_protocols);
2123
2124        if (dev->tgt_active_prot) {
2125                nfc_err(&dev->interface->dev,
2126                        "Cannot poll with a target already activated\n");
2127                return -EBUSY;
2128        }
2129
2130        if (dev->tgt_mode) {
2131                nfc_err(&dev->interface->dev,
2132                        "Cannot poll while already being activated\n");
2133                return -EBUSY;
2134        }
2135
2136        if (tm_protocols) {
2137                dev->gb = nfc_get_local_general_bytes(nfc_dev, &dev->gb_len);
2138                if (dev->gb == NULL)
2139                        tm_protocols = 0;
2140        }
2141
2142        pn533_poll_create_mod_list(dev, im_protocols, tm_protocols);
2143        dev->poll_protocols = im_protocols;
2144        dev->listen_protocols = tm_protocols;
2145
2146        /* Do not always start polling from the same modulation */
2147        get_random_bytes(&rand_mod, sizeof(rand_mod));
2148        rand_mod %= dev->poll_mod_count;
2149        dev->poll_mod_curr = rand_mod;
2150
2151        cur_mod = dev->poll_mod_active[dev->poll_mod_curr];
2152
2153        rc = pn533_send_poll_frame(dev);
2154
2155        /* Start listen timer */
2156        if (!rc && cur_mod->len == 0 && dev->poll_mod_count > 1)
2157                mod_timer(&dev->listen_timer, jiffies + PN533_LISTEN_TIME * HZ);
2158
2159        return rc;
2160}
2161
2162static void pn533_stop_poll(struct nfc_dev *nfc_dev)
2163{
2164        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2165
2166        del_timer(&dev->listen_timer);
2167
2168        if (!dev->poll_mod_count) {
2169                dev_dbg(&dev->interface->dev,
2170                        "Polling operation was not running\n");
2171                return;
2172        }
2173
2174        pn533_abort_cmd(dev, GFP_KERNEL);
2175        flush_delayed_work(&dev->poll_work);
2176        pn533_poll_reset_mod_list(dev);
2177}
2178
2179static int pn533_activate_target_nfcdep(struct pn533 *dev)
2180{
2181        struct pn533_cmd_activate_response *rsp;
2182        u16 gt_len;
2183        int rc;
2184        struct sk_buff *skb;
2185        struct sk_buff *resp;
2186
2187        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2188
2189        skb = pn533_alloc_skb(dev, sizeof(u8) * 2); /*TG + Next*/
2190        if (!skb)
2191                return -ENOMEM;
2192
2193        *skb_put(skb, sizeof(u8)) = 1; /* TG */
2194        *skb_put(skb, sizeof(u8)) = 0; /* Next */
2195
2196        resp = pn533_send_cmd_sync(dev, PN533_CMD_IN_ATR, skb);
2197        if (IS_ERR(resp))
2198                return PTR_ERR(resp);
2199
2200        rsp = (struct pn533_cmd_activate_response *)resp->data;
2201        rc = rsp->status & PN533_CMD_RET_MASK;
2202        if (rc != PN533_CMD_RET_SUCCESS) {
2203                nfc_err(&dev->interface->dev,
2204                        "Target activation failed (error 0x%x)\n", rc);
2205                dev_kfree_skb(resp);
2206                return -EIO;
2207        }
2208
2209        /* ATR_RES general bytes are located at offset 16 */
2210        gt_len = resp->len - 16;
2211        rc = nfc_set_remote_general_bytes(dev->nfc_dev, rsp->gt, gt_len);
2212
2213        dev_kfree_skb(resp);
2214        return rc;
2215}
2216
2217static int pn533_activate_target(struct nfc_dev *nfc_dev,
2218                                 struct nfc_target *target, u32 protocol)
2219{
2220        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2221        int rc;
2222
2223        dev_dbg(&dev->interface->dev, "%s: protocol=%u\n", __func__, protocol);
2224
2225        if (dev->poll_mod_count) {
2226                nfc_err(&dev->interface->dev,
2227                        "Cannot activate while polling\n");
2228                return -EBUSY;
2229        }
2230
2231        if (dev->tgt_active_prot) {
2232                nfc_err(&dev->interface->dev,
2233                        "There is already an active target\n");
2234                return -EBUSY;
2235        }
2236
2237        if (!dev->tgt_available_prots) {
2238                nfc_err(&dev->interface->dev,
2239                        "There is no available target to activate\n");
2240                return -EINVAL;
2241        }
2242
2243        if (!(dev->tgt_available_prots & (1 << protocol))) {
2244                nfc_err(&dev->interface->dev,
2245                        "Target doesn't support requested proto %u\n",
2246                        protocol);
2247                return -EINVAL;
2248        }
2249
2250        if (protocol == NFC_PROTO_NFC_DEP) {
2251                rc = pn533_activate_target_nfcdep(dev);
2252                if (rc) {
2253                        nfc_err(&dev->interface->dev,
2254                                "Activating target with DEP failed %d\n", rc);
2255                        return rc;
2256                }
2257        }
2258
2259        dev->tgt_active_prot = protocol;
2260        dev->tgt_available_prots = 0;
2261
2262        return 0;
2263}
2264
2265static void pn533_deactivate_target(struct nfc_dev *nfc_dev,
2266                                    struct nfc_target *target, u8 mode)
2267{
2268        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2269        struct sk_buff *skb;
2270        struct sk_buff *resp;
2271        int rc;
2272
2273        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2274
2275        if (!dev->tgt_active_prot) {
2276                nfc_err(&dev->interface->dev, "There is no active target\n");
2277                return;
2278        }
2279
2280        dev->tgt_active_prot = 0;
2281        skb_queue_purge(&dev->resp_q);
2282
2283        skb = pn533_alloc_skb(dev, sizeof(u8));
2284        if (!skb)
2285                return;
2286
2287        *skb_put(skb, 1) = 1; /* TG*/
2288
2289        resp = pn533_send_cmd_sync(dev, PN533_CMD_IN_RELEASE, skb);
2290        if (IS_ERR(resp))
2291                return;
2292
2293        rc = resp->data[0] & PN533_CMD_RET_MASK;
2294        if (rc != PN533_CMD_RET_SUCCESS)
2295                nfc_err(&dev->interface->dev,
2296                        "Error 0x%x when releasing the target\n", rc);
2297
2298        dev_kfree_skb(resp);
2299        return;
2300}
2301
2302
2303static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg,
2304                                         struct sk_buff *resp)
2305{
2306        struct pn533_cmd_jump_dep_response *rsp;
2307        u8 target_gt_len;
2308        int rc;
2309        u8 active = *(u8 *)arg;
2310
2311        kfree(arg);
2312
2313        if (IS_ERR(resp))
2314                return PTR_ERR(resp);
2315
2316        if (dev->tgt_available_prots &&
2317            !(dev->tgt_available_prots & (1 << NFC_PROTO_NFC_DEP))) {
2318                nfc_err(&dev->interface->dev,
2319                        "The target does not support DEP\n");
2320                rc =  -EINVAL;
2321                goto error;
2322        }
2323
2324        rsp = (struct pn533_cmd_jump_dep_response *)resp->data;
2325
2326        rc = rsp->status & PN533_CMD_RET_MASK;
2327        if (rc != PN533_CMD_RET_SUCCESS) {
2328                nfc_err(&dev->interface->dev,
2329                        "Bringing DEP link up failed (error 0x%x)\n", rc);
2330                goto error;
2331        }
2332
2333        if (!dev->tgt_available_prots) {
2334                struct nfc_target nfc_target;
2335
2336                dev_dbg(&dev->interface->dev, "Creating new target\n");
2337
2338                nfc_target.supported_protocols = NFC_PROTO_NFC_DEP_MASK;
2339                nfc_target.nfcid1_len = 10;
2340                memcpy(nfc_target.nfcid1, rsp->nfcid3t, nfc_target.nfcid1_len);
2341                rc = nfc_targets_found(dev->nfc_dev, &nfc_target, 1);
2342                if (rc)
2343                        goto error;
2344
2345                dev->tgt_available_prots = 0;
2346        }
2347
2348        dev->tgt_active_prot = NFC_PROTO_NFC_DEP;
2349
2350        /* ATR_RES general bytes are located at offset 17 */
2351        target_gt_len = resp->len - 17;
2352        rc = nfc_set_remote_general_bytes(dev->nfc_dev,
2353                                          rsp->gt, target_gt_len);
2354        if (rc == 0)
2355                rc = nfc_dep_link_is_up(dev->nfc_dev,
2356                                        dev->nfc_dev->targets[0].idx,
2357                                        !active, NFC_RF_INITIATOR);
2358
2359error:
2360        dev_kfree_skb(resp);
2361        return rc;
2362}
2363
2364static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf);
2365static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target,
2366                             u8 comm_mode, u8 *gb, size_t gb_len)
2367{
2368        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2369        struct sk_buff *skb;
2370        int rc, skb_len;
2371        u8 *next, *arg, nfcid3[NFC_NFCID3_MAXSIZE];
2372        u8 passive_data[PASSIVE_DATA_LEN] = {0x00, 0xff, 0xff, 0x00, 0x3};
2373
2374        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2375
2376        if (dev->poll_mod_count) {
2377                nfc_err(&dev->interface->dev,
2378                        "Cannot bring the DEP link up while polling\n");
2379                return -EBUSY;
2380        }
2381
2382        if (dev->tgt_active_prot) {
2383                nfc_err(&dev->interface->dev,
2384                        "There is already an active target\n");
2385                return -EBUSY;
2386        }
2387
2388        skb_len = 3 + gb_len; /* ActPass + BR + Next */
2389        skb_len += PASSIVE_DATA_LEN;
2390
2391        /* NFCID3 */
2392        skb_len += NFC_NFCID3_MAXSIZE;
2393        if (target && !target->nfcid2_len) {
2394                nfcid3[0] = 0x1;
2395                nfcid3[1] = 0xfe;
2396                get_random_bytes(nfcid3 + 2, 6);
2397        }
2398
2399        skb = pn533_alloc_skb(dev, skb_len);
2400        if (!skb)
2401                return -ENOMEM;
2402
2403        *skb_put(skb, 1) = !comm_mode;  /* ActPass */
2404        *skb_put(skb, 1) = 0x02;  /* 424 kbps */
2405
2406        next = skb_put(skb, 1);  /* Next */
2407        *next = 0;
2408
2409        /* Copy passive data */
2410        memcpy(skb_put(skb, PASSIVE_DATA_LEN), passive_data, PASSIVE_DATA_LEN);
2411        *next |= 1;
2412
2413        /* Copy NFCID3 (which is NFCID2 from SENSF_RES) */
2414        if (target && target->nfcid2_len)
2415                memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), target->nfcid2,
2416                       target->nfcid2_len);
2417        else
2418                memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), nfcid3,
2419                       NFC_NFCID3_MAXSIZE);
2420        *next |= 2;
2421
2422        if (gb != NULL && gb_len > 0) {
2423                memcpy(skb_put(skb, gb_len), gb, gb_len);
2424                *next |= 4; /* We have some Gi */
2425        } else {
2426                *next = 0;
2427        }
2428
2429        arg = kmalloc(sizeof(*arg), GFP_KERNEL);
2430        if (!arg) {
2431                dev_kfree_skb(skb);
2432                return -ENOMEM;
2433        }
2434
2435        *arg = !comm_mode;
2436
2437        pn533_rf_field(dev->nfc_dev, 0);
2438
2439        rc = pn533_send_cmd_async(dev, PN533_CMD_IN_JUMP_FOR_DEP, skb,
2440                                  pn533_in_dep_link_up_complete, arg);
2441
2442        if (rc < 0) {
2443                dev_kfree_skb(skb);
2444                kfree(arg);
2445        }
2446
2447        return rc;
2448}
2449
2450static int pn533_dep_link_down(struct nfc_dev *nfc_dev)
2451{
2452        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2453
2454        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2455
2456        pn533_poll_reset_mod_list(dev);
2457
2458        if (dev->tgt_mode || dev->tgt_active_prot)
2459                pn533_abort_cmd(dev, GFP_KERNEL);
2460
2461        dev->tgt_active_prot = 0;
2462        dev->tgt_mode = 0;
2463
2464        skb_queue_purge(&dev->resp_q);
2465
2466        return 0;
2467}
2468
2469struct pn533_data_exchange_arg {
2470        data_exchange_cb_t cb;
2471        void *cb_context;
2472};
2473
2474static struct sk_buff *pn533_build_response(struct pn533 *dev)
2475{
2476        struct sk_buff *skb, *tmp, *t;
2477        unsigned int skb_len = 0, tmp_len = 0;
2478
2479        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2480
2481        if (skb_queue_empty(&dev->resp_q))
2482                return NULL;
2483
2484        if (skb_queue_len(&dev->resp_q) == 1) {
2485                skb = skb_dequeue(&dev->resp_q);
2486                goto out;
2487        }
2488
2489        skb_queue_walk_safe(&dev->resp_q, tmp, t)
2490                skb_len += tmp->len;
2491
2492        dev_dbg(&dev->interface->dev, "%s total length %d\n",
2493                __func__, skb_len);
2494
2495        skb = alloc_skb(skb_len, GFP_KERNEL);
2496        if (skb == NULL)
2497                goto out;
2498
2499        skb_put(skb, skb_len);
2500
2501        skb_queue_walk_safe(&dev->resp_q, tmp, t) {
2502                memcpy(skb->data + tmp_len, tmp->data, tmp->len);
2503                tmp_len += tmp->len;
2504        }
2505
2506out:
2507        skb_queue_purge(&dev->resp_q);
2508
2509        return skb;
2510}
2511
2512static int pn533_data_exchange_complete(struct pn533 *dev, void *_arg,
2513                                        struct sk_buff *resp)
2514{
2515        struct pn533_data_exchange_arg *arg = _arg;
2516        struct sk_buff *skb;
2517        int rc = 0;
2518        u8 status, ret, mi;
2519
2520        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2521
2522        if (IS_ERR(resp)) {
2523                rc = PTR_ERR(resp);
2524                goto _error;
2525        }
2526
2527        status = resp->data[0];
2528        ret = status & PN533_CMD_RET_MASK;
2529        mi = status & PN533_CMD_MI_MASK;
2530
2531        skb_pull(resp, sizeof(status));
2532
2533        if (ret != PN533_CMD_RET_SUCCESS) {
2534                nfc_err(&dev->interface->dev,
2535                        "Exchanging data failed (error 0x%x)\n", ret);
2536                rc = -EIO;
2537                goto error;
2538        }
2539
2540        skb_queue_tail(&dev->resp_q, resp);
2541
2542        if (mi) {
2543                dev->cmd_complete_mi_arg = arg;
2544                queue_work(dev->wq, &dev->mi_rx_work);
2545                return -EINPROGRESS;
2546        }
2547
2548        /* Prepare for the next round */
2549        if (skb_queue_len(&dev->fragment_skb) > 0) {
2550                dev->cmd_complete_dep_arg = arg;
2551                queue_work(dev->wq, &dev->mi_tx_work);
2552
2553                return -EINPROGRESS;
2554        }
2555
2556        skb = pn533_build_response(dev);
2557        if (!skb) {
2558                rc = -ENOMEM;
2559                goto error;
2560        }
2561
2562        arg->cb(arg->cb_context, skb, 0);
2563        kfree(arg);
2564        return 0;
2565
2566error:
2567        dev_kfree_skb(resp);
2568_error:
2569        skb_queue_purge(&dev->resp_q);
2570        arg->cb(arg->cb_context, NULL, rc);
2571        kfree(arg);
2572        return rc;
2573}
2574
2575/* Split the Tx skb into small chunks */
2576static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb)
2577{
2578        struct sk_buff *frag;
2579        int  frag_size;
2580
2581        do {
2582                /* Remaining size */
2583                if (skb->len > PN533_CMD_DATAFRAME_MAXLEN)
2584                        frag_size = PN533_CMD_DATAFRAME_MAXLEN;
2585                else
2586                        frag_size = skb->len;
2587
2588                /* Allocate and reserve */
2589                frag = pn533_alloc_skb(dev, frag_size);
2590                if (!frag) {
2591                        skb_queue_purge(&dev->fragment_skb);
2592                        break;
2593                }
2594
2595                if (!dev->tgt_mode) {
2596                        /* Reserve the TG/MI byte */
2597                        skb_reserve(frag, 1);
2598
2599                        /* MI + TG */
2600                        if (frag_size  == PN533_CMD_DATAFRAME_MAXLEN)
2601                                *skb_push(frag, sizeof(u8)) =
2602                                                        (PN533_CMD_MI_MASK | 1);
2603                        else
2604                                *skb_push(frag, sizeof(u8)) =  1; /* TG */
2605                }
2606
2607                memcpy(skb_put(frag, frag_size), skb->data, frag_size);
2608
2609                /* Reduce the size of incoming buffer */
2610                skb_pull(skb, frag_size);
2611
2612                /* Add this to skb_queue */
2613                skb_queue_tail(&dev->fragment_skb, frag);
2614
2615        } while (skb->len > 0);
2616
2617        dev_kfree_skb(skb);
2618
2619        return skb_queue_len(&dev->fragment_skb);
2620}
2621
2622static int pn533_transceive(struct nfc_dev *nfc_dev,
2623                            struct nfc_target *target, struct sk_buff *skb,
2624                            data_exchange_cb_t cb, void *cb_context)
2625{
2626        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2627        struct pn533_data_exchange_arg *arg = NULL;
2628        int rc;
2629
2630        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2631
2632        if (!dev->tgt_active_prot) {
2633                nfc_err(&dev->interface->dev,
2634                        "Can't exchange data if there is no active target\n");
2635                rc = -EINVAL;
2636                goto error;
2637        }
2638
2639        arg = kmalloc(sizeof(*arg), GFP_KERNEL);
2640        if (!arg) {
2641                rc = -ENOMEM;
2642                goto error;
2643        }
2644
2645        arg->cb = cb;
2646        arg->cb_context = cb_context;
2647
2648        switch (dev->device_type) {
2649        case PN533_DEVICE_PASORI:
2650                if (dev->tgt_active_prot == NFC_PROTO_FELICA) {
2651                        rc = pn533_send_data_async(dev, PN533_CMD_IN_COMM_THRU,
2652                                                   skb,
2653                                                   pn533_data_exchange_complete,
2654                                                   arg);
2655
2656                        break;
2657                }
2658        default:
2659                /* jumbo frame ? */
2660                if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
2661                        rc = pn533_fill_fragment_skbs(dev, skb);
2662                        if (rc <= 0)
2663                                goto error;
2664
2665                        skb = skb_dequeue(&dev->fragment_skb);
2666                        if (!skb) {
2667                                rc = -EIO;
2668                                goto error;
2669                        }
2670                } else {
2671                        *skb_push(skb, sizeof(u8)) =  1; /* TG */
2672                }
2673
2674                rc = pn533_send_data_async(dev, PN533_CMD_IN_DATA_EXCHANGE,
2675                                           skb, pn533_data_exchange_complete,
2676                                           arg);
2677
2678                break;
2679        }
2680
2681        if (rc < 0) /* rc from send_async */
2682                goto error;
2683
2684        return 0;
2685
2686error:
2687        kfree(arg);
2688        dev_kfree_skb(skb);
2689        return rc;
2690}
2691
2692static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
2693                                  struct sk_buff *resp)
2694{
2695        u8 status;
2696
2697        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2698
2699        if (IS_ERR(resp))
2700                return PTR_ERR(resp);
2701
2702        status = resp->data[0];
2703
2704        /* Prepare for the next round */
2705        if (skb_queue_len(&dev->fragment_skb) > 0) {
2706                queue_work(dev->wq, &dev->mi_tm_tx_work);
2707                return -EINPROGRESS;
2708        }
2709        dev_kfree_skb(resp);
2710
2711        if (status != 0) {
2712                nfc_tm_deactivated(dev->nfc_dev);
2713
2714                dev->tgt_mode = 0;
2715
2716                return 0;
2717        }
2718
2719        queue_work(dev->wq, &dev->tg_work);
2720
2721        return 0;
2722}
2723
2724static int pn533_tm_send(struct nfc_dev *nfc_dev, struct sk_buff *skb)
2725{
2726        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
2727        int rc;
2728
2729        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2730
2731        /* let's split in multiple chunks if size's too big */
2732        if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
2733                rc = pn533_fill_fragment_skbs(dev, skb);
2734                if (rc <= 0)
2735                        goto error;
2736
2737                /* get the first skb */
2738                skb = skb_dequeue(&dev->fragment_skb);
2739                if (!skb) {
2740                        rc = -EIO;
2741                        goto error;
2742                }
2743
2744                rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_META_DATA, skb,
2745                                                pn533_tm_send_complete, NULL);
2746        } else {
2747                /* Send th skb */
2748                rc = pn533_send_data_async(dev, PN533_CMD_TG_SET_DATA, skb,
2749                                                pn533_tm_send_complete, NULL);
2750        }
2751
2752error:
2753        if (rc < 0) {
2754                dev_kfree_skb(skb);
2755                skb_queue_purge(&dev->fragment_skb);
2756        }
2757
2758        return rc;
2759}
2760
2761static void pn533_wq_mi_recv(struct work_struct *work)
2762{
2763        struct pn533 *dev = container_of(work, struct pn533, mi_rx_work);
2764        struct sk_buff *skb;
2765        int rc;
2766
2767        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2768
2769        skb = pn533_alloc_skb(dev, PN533_CMD_DATAEXCH_HEAD_LEN);
2770        if (!skb)
2771                goto error;
2772
2773        switch (dev->device_type) {
2774        case PN533_DEVICE_PASORI:
2775                if (dev->tgt_active_prot == NFC_PROTO_FELICA) {
2776                        rc = pn533_send_cmd_direct_async(dev,
2777                                                PN533_CMD_IN_COMM_THRU,
2778                                                skb,
2779                                                pn533_data_exchange_complete,
2780                                                 dev->cmd_complete_mi_arg);
2781
2782                        break;
2783                }
2784        default:
2785                *skb_put(skb, sizeof(u8)) =  1; /*TG*/
2786
2787                rc = pn533_send_cmd_direct_async(dev,
2788                                                 PN533_CMD_IN_DATA_EXCHANGE,
2789                                                 skb,
2790                                                 pn533_data_exchange_complete,
2791                                                 dev->cmd_complete_mi_arg);
2792
2793                break;
2794        }
2795
2796        if (rc == 0) /* success */
2797                return;
2798
2799        nfc_err(&dev->interface->dev,
2800                "Error %d when trying to perform data_exchange\n", rc);
2801
2802        dev_kfree_skb(skb);
2803        kfree(dev->cmd_complete_mi_arg);
2804
2805error:
2806        pn533_send_ack(dev, GFP_KERNEL);
2807        queue_work(dev->wq, &dev->cmd_work);
2808}
2809
2810static void pn533_wq_mi_send(struct work_struct *work)
2811{
2812        struct pn533 *dev = container_of(work, struct pn533, mi_tx_work);
2813        struct sk_buff *skb;
2814        int rc;
2815
2816        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2817
2818        /* Grab the first skb in the queue */
2819        skb = skb_dequeue(&dev->fragment_skb);
2820
2821        if (skb == NULL) {      /* No more data */
2822                /* Reset the queue for future use */
2823                skb_queue_head_init(&dev->fragment_skb);
2824                goto error;
2825        }
2826
2827        switch (dev->device_type) {
2828        case PN533_DEVICE_PASORI:
2829                if (dev->tgt_active_prot != NFC_PROTO_FELICA) {
2830                        rc = -EIO;
2831                        break;
2832                }
2833
2834                rc = pn533_send_cmd_direct_async(dev, PN533_CMD_IN_COMM_THRU,
2835                                                 skb,
2836                                                 pn533_data_exchange_complete,
2837                                                 dev->cmd_complete_dep_arg);
2838
2839                break;
2840
2841        default:
2842                /* Still some fragments? */
2843                rc = pn533_send_cmd_direct_async(dev,PN533_CMD_IN_DATA_EXCHANGE,
2844                                                 skb,
2845                                                 pn533_data_exchange_complete,
2846                                                 dev->cmd_complete_dep_arg);
2847
2848                break;
2849        }
2850
2851        if (rc == 0) /* success */
2852                return;
2853
2854        nfc_err(&dev->interface->dev,
2855                "Error %d when trying to perform data_exchange\n", rc);
2856
2857        dev_kfree_skb(skb);
2858        kfree(dev->cmd_complete_dep_arg);
2859
2860error:
2861        pn533_send_ack(dev, GFP_KERNEL);
2862        queue_work(dev->wq, &dev->cmd_work);
2863}
2864
2865static int pn533_set_configuration(struct pn533 *dev, u8 cfgitem, u8 *cfgdata,
2866                                                                u8 cfgdata_len)
2867{
2868        struct sk_buff *skb;
2869        struct sk_buff *resp;
2870        int skb_len;
2871
2872        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2873
2874        skb_len = sizeof(cfgitem) + cfgdata_len; /* cfgitem + cfgdata */
2875
2876        skb = pn533_alloc_skb(dev, skb_len);
2877        if (!skb)
2878                return -ENOMEM;
2879
2880        *skb_put(skb, sizeof(cfgitem)) = cfgitem;
2881        memcpy(skb_put(skb, cfgdata_len), cfgdata, cfgdata_len);
2882
2883        resp = pn533_send_cmd_sync(dev, PN533_CMD_RF_CONFIGURATION, skb);
2884        if (IS_ERR(resp))
2885                return PTR_ERR(resp);
2886
2887        dev_kfree_skb(resp);
2888        return 0;
2889}
2890
2891static int pn533_get_firmware_version(struct pn533 *dev,
2892                                      struct pn533_fw_version *fv)
2893{
2894        struct sk_buff *skb;
2895        struct sk_buff *resp;
2896
2897        skb = pn533_alloc_skb(dev, 0);
2898        if (!skb)
2899                return -ENOMEM;
2900
2901        resp = pn533_send_cmd_sync(dev, PN533_CMD_GET_FIRMWARE_VERSION, skb);
2902        if (IS_ERR(resp))
2903                return PTR_ERR(resp);
2904
2905        fv->ic = resp->data[0];
2906        fv->ver = resp->data[1];
2907        fv->rev = resp->data[2];
2908        fv->support = resp->data[3];
2909
2910        dev_kfree_skb(resp);
2911        return 0;
2912}
2913
2914static int pn533_pasori_fw_reset(struct pn533 *dev)
2915{
2916        struct sk_buff *skb;
2917        struct sk_buff *resp;
2918
2919        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2920
2921        skb = pn533_alloc_skb(dev, sizeof(u8));
2922        if (!skb)
2923                return -ENOMEM;
2924
2925        *skb_put(skb, sizeof(u8)) = 0x1;
2926
2927        resp = pn533_send_cmd_sync(dev, 0x18, skb);
2928        if (IS_ERR(resp))
2929                return PTR_ERR(resp);
2930
2931        dev_kfree_skb(resp);
2932
2933        return 0;
2934}
2935
2936struct pn533_acr122_poweron_rdr_arg {
2937        int rc;
2938        struct completion done;
2939};
2940
2941static void pn533_acr122_poweron_rdr_resp(struct urb *urb)
2942{
2943        struct pn533_acr122_poweron_rdr_arg *arg = urb->context;
2944
2945        dev_dbg(&urb->dev->dev, "%s\n", __func__);
2946
2947        print_hex_dump_debug("ACR122 RX: ", DUMP_PREFIX_NONE, 16, 1,
2948                       urb->transfer_buffer, urb->transfer_buffer_length,
2949                       false);
2950
2951        arg->rc = urb->status;
2952        complete(&arg->done);
2953}
2954
2955static int pn533_acr122_poweron_rdr(struct pn533 *dev)
2956{
2957        /* Power on th reader (CCID cmd) */
2958        u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON,
2959                      0, 0, 0, 0, 0, 0, 3, 0, 0};
2960        u8 buf[255];
2961        int rc;
2962        void *cntx;
2963        struct pn533_acr122_poweron_rdr_arg arg;
2964
2965        dev_dbg(&dev->interface->dev, "%s\n", __func__);
2966
2967        init_completion(&arg.done);
2968        cntx = dev->in_urb->context;  /* backup context */
2969
2970        dev->in_urb->transfer_buffer = buf;
2971        dev->in_urb->transfer_buffer_length = 255;
2972        dev->in_urb->complete = pn533_acr122_poweron_rdr_resp;
2973        dev->in_urb->context = &arg;
2974
2975        dev->out_urb->transfer_buffer = cmd;
2976        dev->out_urb->transfer_buffer_length = sizeof(cmd);
2977
2978        print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE, 16, 1,
2979                       cmd, sizeof(cmd), false);
2980
2981        rc = usb_submit_urb(dev->out_urb, GFP_KERNEL);
2982        if (rc) {
2983                nfc_err(&dev->interface->dev,
2984                        "Reader power on cmd error %d\n", rc);
2985                return rc;
2986        }
2987
2988        rc =  usb_submit_urb(dev->in_urb, GFP_KERNEL);
2989        if (rc) {
2990                nfc_err(&dev->interface->dev,
2991                        "Can't submit reader poweron cmd response %d\n", rc);
2992                return rc;
2993        }
2994
2995        wait_for_completion(&arg.done);
2996        dev->in_urb->context = cntx; /* restore context */
2997
2998        return arg.rc;
2999}
3000
3001static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf)
3002{
3003        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
3004        u8 rf_field = !!rf;
3005        int rc;
3006
3007        rf_field |= PN533_CFGITEM_RF_FIELD_AUTO_RFCA;
3008
3009        rc = pn533_set_configuration(dev, PN533_CFGITEM_RF_FIELD,
3010                                     (u8 *)&rf_field, 1);
3011        if (rc) {
3012                nfc_err(&dev->interface->dev, "Error on setting RF field\n");
3013                return rc;
3014        }
3015
3016        return rc;
3017}
3018
3019static int pn533_dev_up(struct nfc_dev *nfc_dev)
3020{
3021        return pn533_rf_field(nfc_dev, 1);
3022}
3023
3024static int pn533_dev_down(struct nfc_dev *nfc_dev)
3025{
3026        return pn533_rf_field(nfc_dev, 0);
3027}
3028
3029static struct nfc_ops pn533_nfc_ops = {
3030        .dev_up = pn533_dev_up,
3031        .dev_down = pn533_dev_down,
3032        .dep_link_up = pn533_dep_link_up,
3033        .dep_link_down = pn533_dep_link_down,
3034        .start_poll = pn533_start_poll,
3035        .stop_poll = pn533_stop_poll,
3036        .activate_target = pn533_activate_target,
3037        .deactivate_target = pn533_deactivate_target,
3038        .im_transceive = pn533_transceive,
3039        .tm_send = pn533_tm_send,
3040};
3041
3042static int pn533_setup(struct pn533 *dev)
3043{
3044        struct pn533_config_max_retries max_retries;
3045        struct pn533_config_timing timing;
3046        u8 pasori_cfg[3] = {0x08, 0x01, 0x08};
3047        int rc;
3048
3049        switch (dev->device_type) {
3050        case PN533_DEVICE_STD:
3051        case PN533_DEVICE_PASORI:
3052        case PN533_DEVICE_ACR122U:
3053                max_retries.mx_rty_atr = 0x2;
3054                max_retries.mx_rty_psl = 0x1;
3055                max_retries.mx_rty_passive_act =
3056                        PN533_CONFIG_MAX_RETRIES_NO_RETRY;
3057
3058                timing.rfu = PN533_CONFIG_TIMING_102;
3059                timing.atr_res_timeout = PN533_CONFIG_TIMING_102;
3060                timing.dep_timeout = PN533_CONFIG_TIMING_204;
3061
3062                break;
3063
3064        default:
3065                nfc_err(&dev->interface->dev, "Unknown device type %d\n",
3066                        dev->device_type);
3067                return -EINVAL;
3068        }
3069
3070        rc = pn533_set_configuration(dev, PN533_CFGITEM_MAX_RETRIES,
3071                                     (u8 *)&max_retries, sizeof(max_retries));
3072        if (rc) {
3073                nfc_err(&dev->interface->dev,
3074                        "Error on setting MAX_RETRIES config\n");
3075                return rc;
3076        }
3077
3078
3079        rc = pn533_set_configuration(dev, PN533_CFGITEM_TIMING,
3080                                     (u8 *)&timing, sizeof(timing));
3081        if (rc) {
3082                nfc_err(&dev->interface->dev, "Error on setting RF timings\n");
3083                return rc;
3084        }
3085
3086        switch (dev->device_type) {
3087        case PN533_DEVICE_STD:
3088                break;
3089
3090        case PN533_DEVICE_PASORI:
3091                pn533_pasori_fw_reset(dev);
3092
3093                rc = pn533_set_configuration(dev, PN533_CFGITEM_PASORI,
3094                                             pasori_cfg, 3);
3095                if (rc) {
3096                        nfc_err(&dev->interface->dev,
3097                                "Error while settings PASORI config\n");
3098                        return rc;
3099                }
3100
3101                pn533_pasori_fw_reset(dev);
3102
3103                break;
3104        }
3105
3106        return 0;
3107}
3108
3109static int pn533_probe(struct usb_interface *interface,
3110                        const struct usb_device_id *id)
3111{
3112        struct pn533_fw_version fw_ver;
3113        struct pn533 *dev;
3114        struct usb_host_interface *iface_desc;
3115        struct usb_endpoint_descriptor *endpoint;
3116        int in_endpoint = 0;
3117        int out_endpoint = 0;
3118        int rc = -ENOMEM;
3119        int i;
3120        u32 protocols;
3121
3122        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3123        if (!dev)
3124                return -ENOMEM;
3125
3126        dev->udev = usb_get_dev(interface_to_usbdev(interface));
3127        dev->interface = interface;
3128        mutex_init(&dev->cmd_lock);
3129
3130        iface_desc = interface->cur_altsetting;
3131        for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
3132                endpoint = &iface_desc->endpoint[i].desc;
3133
3134                if (!in_endpoint && usb_endpoint_is_bulk_in(endpoint))
3135                        in_endpoint = endpoint->bEndpointAddress;
3136
3137                if (!out_endpoint && usb_endpoint_is_bulk_out(endpoint))
3138                        out_endpoint = endpoint->bEndpointAddress;
3139        }
3140
3141        if (!in_endpoint || !out_endpoint) {
3142                nfc_err(&interface->dev,
3143                        "Could not find bulk-in or bulk-out endpoint\n");
3144                rc = -ENODEV;
3145                goto error;
3146        }
3147
3148        dev->in_urb = usb_alloc_urb(0, GFP_KERNEL);
3149        dev->out_urb = usb_alloc_urb(0, GFP_KERNEL);
3150
3151        if (!dev->in_urb || !dev->out_urb)
3152                goto error;
3153
3154        usb_fill_bulk_urb(dev->in_urb, dev->udev,
3155                          usb_rcvbulkpipe(dev->udev, in_endpoint),
3156                          NULL, 0, NULL, dev);
3157        usb_fill_bulk_urb(dev->out_urb, dev->udev,
3158                          usb_sndbulkpipe(dev->udev, out_endpoint),
3159                          NULL, 0, pn533_send_complete, dev);
3160
3161        INIT_WORK(&dev->cmd_work, pn533_wq_cmd);
3162        INIT_WORK(&dev->cmd_complete_work, pn533_wq_cmd_complete);
3163        INIT_WORK(&dev->mi_rx_work, pn533_wq_mi_recv);
3164        INIT_WORK(&dev->mi_tx_work, pn533_wq_mi_send);
3165        INIT_WORK(&dev->tg_work, pn533_wq_tg_get_data);
3166        INIT_WORK(&dev->mi_tm_rx_work, pn533_wq_tm_mi_recv);
3167        INIT_WORK(&dev->mi_tm_tx_work, pn533_wq_tm_mi_send);
3168        INIT_DELAYED_WORK(&dev->poll_work, pn533_wq_poll);
3169        INIT_WORK(&dev->rf_work, pn533_wq_rf);
3170        dev->wq = alloc_ordered_workqueue("pn533", 0);
3171        if (dev->wq == NULL)
3172                goto error;
3173
3174        init_timer(&dev->listen_timer);
3175        dev->listen_timer.data = (unsigned long) dev;
3176        dev->listen_timer.function = pn533_listen_mode_timer;
3177
3178        skb_queue_head_init(&dev->resp_q);
3179        skb_queue_head_init(&dev->fragment_skb);
3180
3181        INIT_LIST_HEAD(&dev->cmd_queue);
3182
3183        usb_set_intfdata(interface, dev);
3184
3185        dev->ops = &pn533_std_frame_ops;
3186
3187        dev->protocol_type = PN533_PROTO_REQ_ACK_RESP;
3188        dev->device_type = id->driver_info;
3189        switch (dev->device_type) {
3190        case PN533_DEVICE_STD:
3191                protocols = PN533_ALL_PROTOCOLS;
3192                break;
3193
3194        case PN533_DEVICE_PASORI:
3195                protocols = PN533_NO_TYPE_B_PROTOCOLS;
3196                break;
3197
3198        case PN533_DEVICE_ACR122U:
3199                protocols = PN533_NO_TYPE_B_PROTOCOLS;
3200                dev->ops = &pn533_acr122_frame_ops;
3201                dev->protocol_type = PN533_PROTO_REQ_RESP,
3202
3203                rc = pn533_acr122_poweron_rdr(dev);
3204                if (rc < 0) {
3205                        nfc_err(&dev->interface->dev,
3206                                "Couldn't poweron the reader (error %d)\n", rc);
3207                        goto destroy_wq;
3208                }
3209                break;
3210
3211        default:
3212                nfc_err(&dev->interface->dev, "Unknown device type %d\n",
3213                        dev->device_type);
3214                rc = -EINVAL;
3215                goto destroy_wq;
3216        }
3217
3218        memset(&fw_ver, 0, sizeof(fw_ver));
3219        rc = pn533_get_firmware_version(dev, &fw_ver);
3220        if (rc < 0)
3221                goto destroy_wq;
3222
3223        nfc_info(&dev->interface->dev,
3224                 "NXP PN5%02X firmware ver %d.%d now attached\n",
3225                 fw_ver.ic, fw_ver.ver, fw_ver.rev);
3226
3227
3228        dev->nfc_dev = nfc_allocate_device(&pn533_nfc_ops, protocols,
3229                                           dev->ops->tx_header_len +
3230                                           PN533_CMD_DATAEXCH_HEAD_LEN,
3231                                           dev->ops->tx_tail_len);
3232        if (!dev->nfc_dev) {
3233                rc = -ENOMEM;
3234                goto destroy_wq;
3235        }
3236
3237        nfc_set_parent_dev(dev->nfc_dev, &interface->dev);
3238        nfc_set_drvdata(dev->nfc_dev, dev);
3239
3240        rc = nfc_register_device(dev->nfc_dev);
3241        if (rc)
3242                goto free_nfc_dev;
3243
3244        rc = pn533_setup(dev);
3245        if (rc)
3246                goto unregister_nfc_dev;
3247
3248        return 0;
3249
3250unregister_nfc_dev:
3251        nfc_unregister_device(dev->nfc_dev);
3252
3253free_nfc_dev:
3254        nfc_free_device(dev->nfc_dev);
3255
3256destroy_wq:
3257        destroy_workqueue(dev->wq);
3258error:
3259        usb_free_urb(dev->in_urb);
3260        usb_free_urb(dev->out_urb);
3261        usb_put_dev(dev->udev);
3262        kfree(dev);
3263        return rc;
3264}
3265
3266static void pn533_disconnect(struct usb_interface *interface)
3267{
3268        struct pn533 *dev;
3269        struct pn533_cmd *cmd, *n;
3270
3271        dev = usb_get_intfdata(interface);
3272        usb_set_intfdata(interface, NULL);
3273
3274        nfc_unregister_device(dev->nfc_dev);
3275        nfc_free_device(dev->nfc_dev);
3276
3277        usb_kill_urb(dev->in_urb);
3278        usb_kill_urb(dev->out_urb);
3279
3280        flush_delayed_work(&dev->poll_work);
3281        destroy_workqueue(dev->wq);
3282
3283        skb_queue_purge(&dev->resp_q);
3284
3285        del_timer(&dev->listen_timer);
3286
3287        list_for_each_entry_safe(cmd, n, &dev->cmd_queue, queue) {
3288                list_del(&cmd->queue);
3289                kfree(cmd);
3290        }
3291
3292        usb_free_urb(dev->in_urb);
3293        usb_free_urb(dev->out_urb);
3294        kfree(dev);
3295
3296        nfc_info(&interface->dev, "NXP PN533 NFC device disconnected\n");
3297}
3298
3299static struct usb_driver pn533_driver = {
3300        .name =         "pn533",
3301        .probe =        pn533_probe,
3302        .disconnect =   pn533_disconnect,
3303        .id_table =     pn533_table,
3304};
3305
3306module_usb_driver(pn533_driver);
3307
3308MODULE_AUTHOR("Lauro Ramos Venancio <lauro.venancio@openbossa.org>");
3309MODULE_AUTHOR("Aloisio Almeida Jr <aloisio.almeida@openbossa.org>");
3310MODULE_AUTHOR("Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>");
3311MODULE_DESCRIPTION("PN533 usb driver ver " VERSION);
3312MODULE_VERSION(VERSION);
3313MODULE_LICENSE("GPL");
3314