Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'nfc-next-4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next

Samuel Ortiz says:

====================
NFC 4.8 pull request

This is the first NFC pull request for 4.8. We have:

- A fairly large NFC digital stack patchset:
* RTOX fixes.
* Proper DEP RWT support.
* ACK and NACK PDUs handling fixes, in both initiator
and target modes.
* A few memory leak fixes.

- A conversion of the nfcsim driver to use the digital stack.
The driver supports the DEP protocol in both NFC-A and NFC-F.

- Error injection through debugfs for the nfcsim driver.

- Improvements to the port100 driver for the Sony USB chipset, in
particular to the command abort and cancellation code paths.

- A few minor fixes for the pn533, trf7970a and fdp drivers.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+793 -654
+1
drivers/nfc/Kconfig
··· 40 40 41 41 config NFC_SIM 42 42 tristate "NFC hardware simulator driver" 43 + depends on NFC_DIGITAL 43 44 help 44 45 This driver declares two virtual NFC devices supporting NFC-DEP 45 46 protocol. An LLCP connection can be established between them and
+3 -3
drivers/nfc/fdp/fdp.c
··· 345 345 346 346 if (info->ram_patch) { 347 347 release_firmware(info->ram_patch); 348 - info->otp_patch = NULL; 348 + info->ram_patch = NULL; 349 349 } 350 350 } 351 351 ··· 353 353 { 354 354 struct fdp_nci_info *info = nci_get_drvdata(ndev); 355 355 struct device *dev = &info->phy->i2c_dev->dev; 356 - u8 conn_id; 356 + int conn_id; 357 357 int r = 0; 358 358 359 359 if (info->otp_version >= info->otp_patch_version) ··· 424 424 { 425 425 struct fdp_nci_info *info = nci_get_drvdata(ndev); 426 426 struct device *dev = &info->phy->i2c_dev->dev; 427 - u8 conn_id; 427 + int conn_id; 428 428 int r = 0; 429 429 430 430 if (info->ram_version >= info->ram_patch_version)
+441 -474
drivers/nfc/nfcsim.c
··· 16 16 #include <linux/device.h> 17 17 #include <linux/kernel.h> 18 18 #include <linux/module.h> 19 + #include <linux/ctype.h> 20 + #include <linux/debugfs.h> 19 21 #include <linux/nfc.h> 20 22 #include <net/nfc/nfc.h> 23 + #include <net/nfc/digital.h> 21 24 22 - #define DEV_ERR(_dev, fmt, args...) nfc_err(&_dev->nfc_dev->dev, \ 23 - "%s: " fmt, __func__, ## args) 25 + #define NFCSIM_ERR(d, fmt, args...) nfc_err(&d->nfc_digital_dev->nfc_dev->dev, \ 26 + "%s: " fmt, __func__, ## args) 24 27 25 - #define DEV_DBG(_dev, fmt, args...) dev_dbg(&_dev->nfc_dev->dev, \ 26 - "%s: " fmt, __func__, ## args) 28 + #define NFCSIM_DBG(d, fmt, args...) dev_dbg(&d->nfc_digital_dev->nfc_dev->dev, \ 29 + "%s: " fmt, __func__, ## args) 27 30 28 - #define NFCSIM_VERSION "0.1" 31 + #define NFCSIM_VERSION "0.2" 29 32 30 - #define NFCSIM_POLL_NONE 0 31 - #define NFCSIM_POLL_INITIATOR 1 32 - #define NFCSIM_POLL_TARGET 2 33 - #define NFCSIM_POLL_DUAL (NFCSIM_POLL_INITIATOR | NFCSIM_POLL_TARGET) 33 + #define NFCSIM_MODE_NONE 0 34 + #define NFCSIM_MODE_INITIATOR 1 35 + #define NFCSIM_MODE_TARGET 2 34 36 35 - #define RX_DEFAULT_DELAY 5 37 + #define NFCSIM_CAPABILITIES (NFC_DIGITAL_DRV_CAPS_IN_CRC | \ 38 + NFC_DIGITAL_DRV_CAPS_TG_CRC) 36 39 37 40 struct nfcsim { 38 - struct nfc_dev *nfc_dev; 41 + struct nfc_digital_dev *nfc_digital_dev; 39 42 43 + struct work_struct recv_work; 44 + struct delayed_work send_work; 45 + 46 + struct nfcsim_link *link_in; 47 + struct nfcsim_link *link_out; 48 + 49 + bool up; 50 + u8 mode; 51 + u8 rf_tech; 52 + 53 + u16 recv_timeout; 54 + 55 + nfc_digital_cmd_complete_t cb; 56 + void *arg; 57 + 58 + u8 dropframe; 59 + }; 60 + 61 + struct nfcsim_link { 40 62 struct mutex lock; 41 63 42 - struct delayed_work recv_work; 64 + u8 rf_tech; 65 + u8 mode; 43 66 44 - struct sk_buff *clone_skb; 67 + u8 shutdown; 45 68 46 - struct delayed_work poll_work; 47 - u8 polling_mode; 48 - u8 curr_polling_mode; 49 - 50 - u8 shutting_down; 51 - 52 - u8 up; 53 - 54 - u8 initiator; 55 - 56 - u32 rx_delay; 57 - 58 - data_exchange_cb_t cb; 59 - void *cb_context; 60 - 61 - struct nfcsim *peer_dev; 69 + struct sk_buff *skb; 70 + wait_queue_head_t recv_wait; 71 + u8 cond; 62 72 }; 73 + 74 + static struct nfcsim_link *nfcsim_link_new(void) 75 + { 76 + struct nfcsim_link *link; 77 + 78 + link = kzalloc(sizeof(struct nfcsim_link), GFP_KERNEL); 79 + if (!link) 80 + return NULL; 81 + 82 + mutex_init(&link->lock); 83 + init_waitqueue_head(&link->recv_wait); 84 + 85 + return link; 86 + } 87 + 88 + static void nfcsim_link_free(struct nfcsim_link *link) 89 + { 90 + dev_kfree_skb(link->skb); 91 + kfree(link); 92 + } 93 + 94 + static void nfcsim_link_recv_wake(struct nfcsim_link *link) 95 + { 96 + link->cond = 1; 97 + wake_up_interruptible(&link->recv_wait); 98 + } 99 + 100 + static void nfcsim_link_set_skb(struct nfcsim_link *link, struct sk_buff *skb, 101 + u8 rf_tech, u8 mode) 102 + { 103 + mutex_lock(&link->lock); 104 + 105 + dev_kfree_skb(link->skb); 106 + link->skb = skb; 107 + link->rf_tech = rf_tech; 108 + link->mode = mode; 109 + 110 + mutex_unlock(&link->lock); 111 + } 112 + 113 + static void nfcsim_link_recv_cancel(struct nfcsim_link *link) 114 + { 115 + mutex_lock(&link->lock); 116 + 117 + link->mode = NFCSIM_MODE_NONE; 118 + 119 + mutex_unlock(&link->lock); 120 + 121 + nfcsim_link_recv_wake(link); 122 + } 123 + 124 + static void nfcsim_link_shutdown(struct nfcsim_link *link) 125 + { 126 + mutex_lock(&link->lock); 127 + 128 + link->shutdown = 1; 129 + link->mode = NFCSIM_MODE_NONE; 130 + 131 + mutex_unlock(&link->lock); 132 + 133 + nfcsim_link_recv_wake(link); 134 + } 135 + 136 + static struct sk_buff *nfcsim_link_recv_skb(struct nfcsim_link *link, 137 + int timeout, u8 rf_tech, u8 mode) 138 + { 139 + int rc; 140 + struct sk_buff *skb; 141 + 142 + rc = wait_event_interruptible_timeout(link->recv_wait, 143 + link->cond, 144 + msecs_to_jiffies(timeout)); 145 + 146 + mutex_lock(&link->lock); 147 + 148 + skb = link->skb; 149 + link->skb = NULL; 150 + 151 + if (!rc) { 152 + rc = -ETIMEDOUT; 153 + goto done; 154 + } 155 + 156 + if (!skb || link->rf_tech != rf_tech || link->mode == mode) { 157 + rc = -EINVAL; 158 + goto done; 159 + } 160 + 161 + if (link->shutdown) { 162 + rc = -ENODEV; 163 + goto done; 164 + } 165 + 166 + done: 167 + mutex_unlock(&link->lock); 168 + 169 + if (rc < 0) { 170 + dev_kfree_skb(skb); 171 + skb = ERR_PTR(rc); 172 + } 173 + 174 + link->cond = 0; 175 + 176 + return skb; 177 + } 178 + 179 + static void nfcsim_send_wq(struct work_struct *work) 180 + { 181 + struct nfcsim *dev = container_of(work, struct nfcsim, send_work.work); 182 + 183 + /* 184 + * To effectively send data, the device just wake up its link_out which 185 + * is the link_in of the peer device. The exchanged skb has already been 186 + * stored in the dev->link_out through nfcsim_link_set_skb(). 187 + */ 188 + nfcsim_link_recv_wake(dev->link_out); 189 + } 190 + 191 + static void nfcsim_recv_wq(struct work_struct *work) 192 + { 193 + struct nfcsim *dev = container_of(work, struct nfcsim, recv_work); 194 + struct sk_buff *skb; 195 + 196 + skb = nfcsim_link_recv_skb(dev->link_in, dev->recv_timeout, 197 + dev->rf_tech, dev->mode); 198 + 199 + if (!dev->up) { 200 + NFCSIM_ERR(dev, "Device is down\n"); 201 + 202 + if (!IS_ERR(skb)) 203 + dev_kfree_skb(skb); 204 + 205 + skb = ERR_PTR(-ENODEV); 206 + } 207 + 208 + dev->cb(dev->nfc_digital_dev, dev->arg, skb); 209 + } 210 + 211 + static int nfcsim_send(struct nfc_digital_dev *ddev, struct sk_buff *skb, 212 + u16 timeout, nfc_digital_cmd_complete_t cb, void *arg) 213 + { 214 + struct nfcsim *dev = nfc_digital_get_drvdata(ddev); 215 + u8 delay; 216 + 217 + if (!dev->up) { 218 + NFCSIM_ERR(dev, "Device is down\n"); 219 + return -ENODEV; 220 + } 221 + 222 + dev->recv_timeout = timeout; 223 + dev->cb = cb; 224 + dev->arg = arg; 225 + 226 + schedule_work(&dev->recv_work); 227 + 228 + if (dev->dropframe) { 229 + NFCSIM_DBG(dev, "dropping frame (out of %d)\n", dev->dropframe); 230 + dev_kfree_skb(skb); 231 + dev->dropframe--; 232 + 233 + return 0; 234 + } 235 + 236 + if (skb) { 237 + nfcsim_link_set_skb(dev->link_out, skb, dev->rf_tech, 238 + dev->mode); 239 + 240 + /* Add random delay (between 3 and 10 ms) before sending data */ 241 + get_random_bytes(&delay, 1); 242 + delay = 3 + (delay & 0x07); 243 + 244 + schedule_delayed_work(&dev->send_work, msecs_to_jiffies(delay)); 245 + } 246 + 247 + return 0; 248 + } 249 + 250 + static void nfcsim_abort_cmd(struct nfc_digital_dev *ddev) 251 + { 252 + struct nfcsim *dev = nfc_digital_get_drvdata(ddev); 253 + 254 + nfcsim_link_recv_cancel(dev->link_in); 255 + } 256 + 257 + static int nfcsim_switch_rf(struct nfc_digital_dev *ddev, bool on) 258 + { 259 + struct nfcsim *dev = nfc_digital_get_drvdata(ddev); 260 + 261 + dev->up = on; 262 + 263 + return 0; 264 + } 265 + 266 + static int nfcsim_in_configure_hw(struct nfc_digital_dev *ddev, 267 + int type, int param) 268 + { 269 + struct nfcsim *dev = nfc_digital_get_drvdata(ddev); 270 + 271 + switch (type) { 272 + case NFC_DIGITAL_CONFIG_RF_TECH: 273 + dev->up = true; 274 + dev->mode = NFCSIM_MODE_INITIATOR; 275 + dev->rf_tech = param; 276 + break; 277 + 278 + case NFC_DIGITAL_CONFIG_FRAMING: 279 + break; 280 + 281 + default: 282 + NFCSIM_ERR(dev, "Invalid configuration type: %d\n", type); 283 + return -EINVAL; 284 + } 285 + 286 + return 0; 287 + } 288 + 289 + static int nfcsim_in_send_cmd(struct nfc_digital_dev *ddev, 290 + struct sk_buff *skb, u16 timeout, 291 + nfc_digital_cmd_complete_t cb, void *arg) 292 + { 293 + return nfcsim_send(ddev, skb, timeout, cb, arg); 294 + } 295 + 296 + static int nfcsim_tg_configure_hw(struct nfc_digital_dev *ddev, 297 + int type, int param) 298 + { 299 + struct nfcsim *dev = nfc_digital_get_drvdata(ddev); 300 + 301 + switch (type) { 302 + case NFC_DIGITAL_CONFIG_RF_TECH: 303 + dev->up = true; 304 + dev->mode = NFCSIM_MODE_TARGET; 305 + dev->rf_tech = param; 306 + break; 307 + 308 + case NFC_DIGITAL_CONFIG_FRAMING: 309 + break; 310 + 311 + default: 312 + NFCSIM_ERR(dev, "Invalid configuration type: %d\n", type); 313 + return -EINVAL; 314 + } 315 + 316 + return 0; 317 + } 318 + 319 + static int nfcsim_tg_send_cmd(struct nfc_digital_dev *ddev, 320 + struct sk_buff *skb, u16 timeout, 321 + nfc_digital_cmd_complete_t cb, void *arg) 322 + { 323 + return nfcsim_send(ddev, skb, timeout, cb, arg); 324 + } 325 + 326 + static int nfcsim_tg_listen(struct nfc_digital_dev *ddev, u16 timeout, 327 + nfc_digital_cmd_complete_t cb, void *arg) 328 + { 329 + return nfcsim_send(ddev, NULL, timeout, cb, arg); 330 + } 331 + 332 + static struct nfc_digital_ops nfcsim_digital_ops = { 333 + .in_configure_hw = nfcsim_in_configure_hw, 334 + .in_send_cmd = nfcsim_in_send_cmd, 335 + 336 + .tg_listen = nfcsim_tg_listen, 337 + .tg_configure_hw = nfcsim_tg_configure_hw, 338 + .tg_send_cmd = nfcsim_tg_send_cmd, 339 + 340 + .abort_cmd = nfcsim_abort_cmd, 341 + .switch_rf = nfcsim_switch_rf, 342 + }; 343 + 344 + static struct dentry *nfcsim_debugfs_root; 345 + 346 + static void nfcsim_debugfs_init(void) 347 + { 348 + nfcsim_debugfs_root = debugfs_create_dir("nfcsim", NULL); 349 + 350 + if (!nfcsim_debugfs_root) 351 + pr_err("Could not create debugfs entry\n"); 352 + 353 + } 354 + 355 + static void nfcsim_debugfs_remove(void) 356 + { 357 + debugfs_remove_recursive(nfcsim_debugfs_root); 358 + } 359 + 360 + static void nfcsim_debugfs_init_dev(struct nfcsim *dev) 361 + { 362 + struct dentry *dev_dir; 363 + char devname[5]; /* nfcX\0 */ 364 + u32 idx; 365 + int n; 366 + 367 + if (!nfcsim_debugfs_root) { 368 + NFCSIM_ERR(dev, "nfcsim debugfs not initialized\n"); 369 + return; 370 + } 371 + 372 + idx = dev->nfc_digital_dev->nfc_dev->idx; 373 + n = snprintf(devname, sizeof(devname), "nfc%d", idx); 374 + if (n >= sizeof(devname)) { 375 + NFCSIM_ERR(dev, "Could not compute dev name for dev %d\n", idx); 376 + return; 377 + } 378 + 379 + dev_dir = debugfs_create_dir(devname, nfcsim_debugfs_root); 380 + if (!dev_dir) { 381 + NFCSIM_ERR(dev, "Could not create debugfs entries for nfc%d\n", 382 + idx); 383 + return; 384 + } 385 + 386 + debugfs_create_u8("dropframe", 0664, dev_dir, &dev->dropframe); 387 + } 388 + 389 + static struct nfcsim *nfcsim_device_new(struct nfcsim_link *link_in, 390 + struct nfcsim_link *link_out) 391 + { 392 + struct nfcsim *dev; 393 + int rc; 394 + 395 + dev = kzalloc(sizeof(struct nfcsim), GFP_KERNEL); 396 + if (!dev) 397 + return ERR_PTR(-ENOMEM); 398 + 399 + INIT_DELAYED_WORK(&dev->send_work, nfcsim_send_wq); 400 + INIT_WORK(&dev->recv_work, nfcsim_recv_wq); 401 + 402 + dev->nfc_digital_dev = 403 + nfc_digital_allocate_device(&nfcsim_digital_ops, 404 + NFC_PROTO_NFC_DEP_MASK, 405 + NFCSIM_CAPABILITIES, 406 + 0, 0); 407 + if (!dev->nfc_digital_dev) { 408 + kfree(dev); 409 + return ERR_PTR(-ENOMEM); 410 + } 411 + 412 + nfc_digital_set_drvdata(dev->nfc_digital_dev, dev); 413 + 414 + dev->link_in = link_in; 415 + dev->link_out = link_out; 416 + 417 + rc = nfc_digital_register_device(dev->nfc_digital_dev); 418 + if (rc) { 419 + pr_err("Could not register digital device (%d)\n", rc); 420 + nfc_digital_free_device(dev->nfc_digital_dev); 421 + kfree(dev); 422 + 423 + return ERR_PTR(rc); 424 + } 425 + 426 + nfcsim_debugfs_init_dev(dev); 427 + 428 + return dev; 429 + } 430 + 431 + static void nfcsim_device_free(struct nfcsim *dev) 432 + { 433 + nfc_digital_unregister_device(dev->nfc_digital_dev); 434 + 435 + dev->up = false; 436 + 437 + nfcsim_link_shutdown(dev->link_in); 438 + 439 + cancel_delayed_work_sync(&dev->send_work); 440 + cancel_work_sync(&dev->recv_work); 441 + 442 + nfc_digital_free_device(dev->nfc_digital_dev); 443 + 444 + kfree(dev); 445 + } 63 446 64 447 static struct nfcsim *dev0; 65 448 static struct nfcsim *dev1; 66 449 67 - static struct workqueue_struct *wq; 68 - 69 - static void nfcsim_cleanup_dev(struct nfcsim *dev, u8 shutdown) 70 - { 71 - DEV_DBG(dev, "shutdown=%d\n", shutdown); 72 - 73 - mutex_lock(&dev->lock); 74 - 75 - dev->polling_mode = NFCSIM_POLL_NONE; 76 - dev->shutting_down = shutdown; 77 - dev->cb = NULL; 78 - dev_kfree_skb(dev->clone_skb); 79 - dev->clone_skb = NULL; 80 - 81 - mutex_unlock(&dev->lock); 82 - 83 - cancel_delayed_work_sync(&dev->poll_work); 84 - cancel_delayed_work_sync(&dev->recv_work); 85 - } 86 - 87 - static int nfcsim_target_found(struct nfcsim *dev) 88 - { 89 - struct nfc_target nfc_tgt; 90 - 91 - DEV_DBG(dev, "\n"); 92 - 93 - memset(&nfc_tgt, 0, sizeof(struct nfc_target)); 94 - 95 - nfc_tgt.supported_protocols = NFC_PROTO_NFC_DEP_MASK; 96 - nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1); 97 - 98 - return 0; 99 - } 100 - 101 - static int nfcsim_dev_up(struct nfc_dev *nfc_dev) 102 - { 103 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 104 - 105 - DEV_DBG(dev, "\n"); 106 - 107 - mutex_lock(&dev->lock); 108 - 109 - dev->up = 1; 110 - 111 - mutex_unlock(&dev->lock); 112 - 113 - return 0; 114 - } 115 - 116 - static int nfcsim_dev_down(struct nfc_dev *nfc_dev) 117 - { 118 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 119 - 120 - DEV_DBG(dev, "\n"); 121 - 122 - mutex_lock(&dev->lock); 123 - 124 - dev->up = 0; 125 - 126 - mutex_unlock(&dev->lock); 127 - 128 - return 0; 129 - } 130 - 131 - static int nfcsim_dep_link_up(struct nfc_dev *nfc_dev, 132 - struct nfc_target *target, 133 - u8 comm_mode, u8 *gb, size_t gb_len) 134 - { 135 - int rc; 136 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 137 - struct nfcsim *peer = dev->peer_dev; 138 - u8 *remote_gb; 139 - size_t remote_gb_len; 140 - 141 - DEV_DBG(dev, "target_idx: %d, comm_mode: %d\n", target->idx, comm_mode); 142 - 143 - mutex_lock(&peer->lock); 144 - 145 - nfc_tm_activated(peer->nfc_dev, NFC_PROTO_NFC_DEP_MASK, 146 - NFC_COMM_ACTIVE, gb, gb_len); 147 - 148 - remote_gb = nfc_get_local_general_bytes(peer->nfc_dev, &remote_gb_len); 149 - if (!remote_gb) { 150 - DEV_ERR(peer, "Can't get remote general bytes\n"); 151 - 152 - mutex_unlock(&peer->lock); 153 - return -EINVAL; 154 - } 155 - 156 - mutex_unlock(&peer->lock); 157 - 158 - mutex_lock(&dev->lock); 159 - 160 - rc = nfc_set_remote_general_bytes(nfc_dev, remote_gb, remote_gb_len); 161 - if (rc) { 162 - DEV_ERR(dev, "Can't set remote general bytes\n"); 163 - mutex_unlock(&dev->lock); 164 - return rc; 165 - } 166 - 167 - rc = nfc_dep_link_is_up(nfc_dev, target->idx, NFC_COMM_ACTIVE, 168 - NFC_RF_INITIATOR); 169 - 170 - mutex_unlock(&dev->lock); 171 - 172 - return rc; 173 - } 174 - 175 - static int nfcsim_dep_link_down(struct nfc_dev *nfc_dev) 176 - { 177 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 178 - 179 - DEV_DBG(dev, "\n"); 180 - 181 - nfcsim_cleanup_dev(dev, 0); 182 - 183 - return 0; 184 - } 185 - 186 - static int nfcsim_start_poll(struct nfc_dev *nfc_dev, 187 - u32 im_protocols, u32 tm_protocols) 188 - { 189 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 190 - int rc; 191 - 192 - mutex_lock(&dev->lock); 193 - 194 - if (dev->polling_mode != NFCSIM_POLL_NONE) { 195 - DEV_ERR(dev, "Already in polling mode\n"); 196 - rc = -EBUSY; 197 - goto exit; 198 - } 199 - 200 - if (im_protocols & NFC_PROTO_NFC_DEP_MASK) 201 - dev->polling_mode |= NFCSIM_POLL_INITIATOR; 202 - 203 - if (tm_protocols & NFC_PROTO_NFC_DEP_MASK) 204 - dev->polling_mode |= NFCSIM_POLL_TARGET; 205 - 206 - if (dev->polling_mode == NFCSIM_POLL_NONE) { 207 - DEV_ERR(dev, "Unsupported polling mode\n"); 208 - rc = -EINVAL; 209 - goto exit; 210 - } 211 - 212 - dev->initiator = 0; 213 - dev->curr_polling_mode = NFCSIM_POLL_NONE; 214 - 215 - queue_delayed_work(wq, &dev->poll_work, 0); 216 - 217 - DEV_DBG(dev, "Start polling: im: 0x%X, tm: 0x%X\n", im_protocols, 218 - tm_protocols); 219 - 220 - rc = 0; 221 - exit: 222 - mutex_unlock(&dev->lock); 223 - 224 - return rc; 225 - } 226 - 227 - static void nfcsim_stop_poll(struct nfc_dev *nfc_dev) 228 - { 229 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 230 - 231 - DEV_DBG(dev, "Stop poll\n"); 232 - 233 - mutex_lock(&dev->lock); 234 - 235 - dev->polling_mode = NFCSIM_POLL_NONE; 236 - 237 - mutex_unlock(&dev->lock); 238 - 239 - cancel_delayed_work_sync(&dev->poll_work); 240 - } 241 - 242 - static int nfcsim_activate_target(struct nfc_dev *nfc_dev, 243 - struct nfc_target *target, u32 protocol) 244 - { 245 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 246 - 247 - DEV_DBG(dev, "\n"); 248 - 249 - return -ENOTSUPP; 250 - } 251 - 252 - static void nfcsim_deactivate_target(struct nfc_dev *nfc_dev, 253 - struct nfc_target *target, u8 mode) 254 - { 255 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 256 - 257 - DEV_DBG(dev, "\n"); 258 - } 259 - 260 - static void nfcsim_wq_recv(struct work_struct *work) 261 - { 262 - struct nfcsim *dev = container_of(work, struct nfcsim, 263 - recv_work.work); 264 - 265 - mutex_lock(&dev->lock); 266 - 267 - if (dev->shutting_down || !dev->up || !dev->clone_skb) { 268 - dev_kfree_skb(dev->clone_skb); 269 - goto exit; 270 - } 271 - 272 - if (dev->initiator) { 273 - if (!dev->cb) { 274 - DEV_ERR(dev, "Null recv callback\n"); 275 - dev_kfree_skb(dev->clone_skb); 276 - goto exit; 277 - } 278 - 279 - dev->cb(dev->cb_context, dev->clone_skb, 0); 280 - dev->cb = NULL; 281 - } else { 282 - nfc_tm_data_received(dev->nfc_dev, dev->clone_skb); 283 - } 284 - 285 - exit: 286 - dev->clone_skb = NULL; 287 - 288 - mutex_unlock(&dev->lock); 289 - } 290 - 291 - static int nfcsim_tx(struct nfc_dev *nfc_dev, struct nfc_target *target, 292 - struct sk_buff *skb, data_exchange_cb_t cb, 293 - void *cb_context) 294 - { 295 - struct nfcsim *dev = nfc_get_drvdata(nfc_dev); 296 - struct nfcsim *peer = dev->peer_dev; 297 - int err; 298 - 299 - mutex_lock(&dev->lock); 300 - 301 - if (dev->shutting_down || !dev->up) { 302 - mutex_unlock(&dev->lock); 303 - err = -ENODEV; 304 - goto exit; 305 - } 306 - 307 - dev->cb = cb; 308 - dev->cb_context = cb_context; 309 - 310 - mutex_unlock(&dev->lock); 311 - 312 - mutex_lock(&peer->lock); 313 - 314 - peer->clone_skb = skb_clone(skb, GFP_KERNEL); 315 - 316 - if (!peer->clone_skb) { 317 - DEV_ERR(dev, "skb_clone failed\n"); 318 - mutex_unlock(&peer->lock); 319 - err = -ENOMEM; 320 - goto exit; 321 - } 322 - 323 - /* This simulates an arbitrary transmission delay between the 2 devices. 324 - * If packet transmission occurs immediately between them, we have a 325 - * non-stop flow of several tens of thousands SYMM packets per second 326 - * and a burning cpu. 327 - */ 328 - queue_delayed_work(wq, &peer->recv_work, 329 - msecs_to_jiffies(dev->rx_delay)); 330 - 331 - mutex_unlock(&peer->lock); 332 - 333 - err = 0; 334 - exit: 335 - dev_kfree_skb(skb); 336 - 337 - return err; 338 - } 339 - 340 - static int nfcsim_im_transceive(struct nfc_dev *nfc_dev, 341 - struct nfc_target *target, struct sk_buff *skb, 342 - data_exchange_cb_t cb, void *cb_context) 343 - { 344 - return nfcsim_tx(nfc_dev, target, skb, cb, cb_context); 345 - } 346 - 347 - static int nfcsim_tm_send(struct nfc_dev *nfc_dev, struct sk_buff *skb) 348 - { 349 - return nfcsim_tx(nfc_dev, NULL, skb, NULL, NULL); 350 - } 351 - 352 - static struct nfc_ops nfcsim_nfc_ops = { 353 - .dev_up = nfcsim_dev_up, 354 - .dev_down = nfcsim_dev_down, 355 - .dep_link_up = nfcsim_dep_link_up, 356 - .dep_link_down = nfcsim_dep_link_down, 357 - .start_poll = nfcsim_start_poll, 358 - .stop_poll = nfcsim_stop_poll, 359 - .activate_target = nfcsim_activate_target, 360 - .deactivate_target = nfcsim_deactivate_target, 361 - .im_transceive = nfcsim_im_transceive, 362 - .tm_send = nfcsim_tm_send, 363 - }; 364 - 365 - static void nfcsim_set_polling_mode(struct nfcsim *dev) 366 - { 367 - if (dev->polling_mode == NFCSIM_POLL_NONE) { 368 - dev->curr_polling_mode = NFCSIM_POLL_NONE; 369 - return; 370 - } 371 - 372 - if (dev->curr_polling_mode == NFCSIM_POLL_NONE) { 373 - if (dev->polling_mode & NFCSIM_POLL_INITIATOR) 374 - dev->curr_polling_mode = NFCSIM_POLL_INITIATOR; 375 - else 376 - dev->curr_polling_mode = NFCSIM_POLL_TARGET; 377 - 378 - return; 379 - } 380 - 381 - if (dev->polling_mode == NFCSIM_POLL_DUAL) { 382 - if (dev->curr_polling_mode == NFCSIM_POLL_TARGET) 383 - dev->curr_polling_mode = NFCSIM_POLL_INITIATOR; 384 - else 385 - dev->curr_polling_mode = NFCSIM_POLL_TARGET; 386 - } 387 - } 388 - 389 - static void nfcsim_wq_poll(struct work_struct *work) 390 - { 391 - struct nfcsim *dev = container_of(work, struct nfcsim, poll_work.work); 392 - struct nfcsim *peer = dev->peer_dev; 393 - 394 - /* These work items run on an ordered workqueue and are therefore 395 - * serialized. So we can take both mutexes without being dead locked. 396 - */ 397 - mutex_lock(&dev->lock); 398 - mutex_lock(&peer->lock); 399 - 400 - nfcsim_set_polling_mode(dev); 401 - 402 - if (dev->curr_polling_mode == NFCSIM_POLL_NONE) { 403 - DEV_DBG(dev, "Not polling\n"); 404 - goto unlock; 405 - } 406 - 407 - DEV_DBG(dev, "Polling as %s", 408 - dev->curr_polling_mode == NFCSIM_POLL_INITIATOR ? 409 - "initiator\n" : "target\n"); 410 - 411 - if (dev->curr_polling_mode == NFCSIM_POLL_TARGET) 412 - goto sched_work; 413 - 414 - if (peer->curr_polling_mode == NFCSIM_POLL_TARGET) { 415 - peer->polling_mode = NFCSIM_POLL_NONE; 416 - dev->polling_mode = NFCSIM_POLL_NONE; 417 - 418 - dev->initiator = 1; 419 - 420 - nfcsim_target_found(dev); 421 - 422 - goto unlock; 423 - } 424 - 425 - sched_work: 426 - /* This defines the delay for an initiator to check if the other device 427 - * is polling in target mode. 428 - * If the device starts in dual mode polling, it switches between 429 - * initiator and target at every round. 430 - * Because the wq is ordered and only 1 work item is executed at a time, 431 - * we'll always have one device polling as initiator and the other as 432 - * target at some point, even if both are started in dual mode. 433 - */ 434 - queue_delayed_work(wq, &dev->poll_work, msecs_to_jiffies(200)); 435 - 436 - unlock: 437 - mutex_unlock(&peer->lock); 438 - mutex_unlock(&dev->lock); 439 - } 440 - 441 - static struct nfcsim *nfcsim_init_dev(void) 442 - { 443 - struct nfcsim *dev; 444 - int rc = -ENOMEM; 445 - 446 - dev = kzalloc(sizeof(*dev), GFP_KERNEL); 447 - if (dev == NULL) 448 - return ERR_PTR(-ENOMEM); 449 - 450 - mutex_init(&dev->lock); 451 - 452 - INIT_DELAYED_WORK(&dev->recv_work, nfcsim_wq_recv); 453 - INIT_DELAYED_WORK(&dev->poll_work, nfcsim_wq_poll); 454 - 455 - dev->nfc_dev = nfc_allocate_device(&nfcsim_nfc_ops, 456 - NFC_PROTO_NFC_DEP_MASK, 457 - 0, 0); 458 - if (!dev->nfc_dev) 459 - goto error; 460 - 461 - nfc_set_drvdata(dev->nfc_dev, dev); 462 - 463 - rc = nfc_register_device(dev->nfc_dev); 464 - if (rc) 465 - goto free_nfc_dev; 466 - 467 - dev->rx_delay = RX_DEFAULT_DELAY; 468 - return dev; 469 - 470 - free_nfc_dev: 471 - nfc_free_device(dev->nfc_dev); 472 - 473 - error: 474 - kfree(dev); 475 - 476 - return ERR_PTR(rc); 477 - } 478 - 479 - static void nfcsim_free_device(struct nfcsim *dev) 480 - { 481 - nfc_unregister_device(dev->nfc_dev); 482 - 483 - nfc_free_device(dev->nfc_dev); 484 - 485 - kfree(dev); 486 - } 487 - 488 450 static int __init nfcsim_init(void) 489 451 { 452 + struct nfcsim_link *link0, *link1; 490 453 int rc; 491 454 492 - /* We need an ordered wq to ensure that poll_work items are executed 493 - * one at a time. 494 - */ 495 - wq = alloc_ordered_workqueue("nfcsim", 0); 496 - if (!wq) { 455 + link0 = nfcsim_link_new(); 456 + link1 = nfcsim_link_new(); 457 + if (!link0 || !link1) { 497 458 rc = -ENOMEM; 498 - goto exit; 459 + goto exit_err; 499 460 } 500 461 501 - dev0 = nfcsim_init_dev(); 462 + nfcsim_debugfs_init(); 463 + 464 + dev0 = nfcsim_device_new(link0, link1); 502 465 if (IS_ERR(dev0)) { 503 466 rc = PTR_ERR(dev0); 504 - goto exit; 467 + goto exit_err; 505 468 } 506 469 507 - dev1 = nfcsim_init_dev(); 470 + dev1 = nfcsim_device_new(link1, link0); 508 471 if (IS_ERR(dev1)) { 509 - kfree(dev0); 472 + nfcsim_device_free(dev0); 510 473 511 474 rc = PTR_ERR(dev1); 512 - goto exit; 475 + goto exit_err; 513 476 } 514 477 515 - dev0->peer_dev = dev1; 516 - dev1->peer_dev = dev0; 478 + pr_info("nfcsim " NFCSIM_VERSION " initialized\n"); 517 479 518 - pr_debug("NFCsim " NFCSIM_VERSION " initialized\n"); 480 + return 0; 519 481 520 - rc = 0; 521 - exit: 522 - if (rc) 523 - pr_err("Failed to initialize nfcsim driver (%d)\n", 524 - rc); 482 + exit_err: 483 + pr_err("Failed to initialize nfcsim driver (%d)\n", rc); 484 + 485 + nfcsim_link_free(link0); 486 + nfcsim_link_free(link1); 525 487 526 488 return rc; 527 489 } 528 490 529 491 static void __exit nfcsim_exit(void) 530 492 { 531 - nfcsim_cleanup_dev(dev0, 1); 532 - nfcsim_cleanup_dev(dev1, 1); 493 + struct nfcsim_link *link0, *link1; 533 494 534 - nfcsim_free_device(dev0); 535 - nfcsim_free_device(dev1); 495 + link0 = dev0->link_in; 496 + link1 = dev0->link_out; 536 497 537 - destroy_workqueue(wq); 498 + nfcsim_device_free(dev0); 499 + nfcsim_device_free(dev1); 500 + 501 + nfcsim_link_free(link0); 502 + nfcsim_link_free(link1); 503 + 504 + nfcsim_debugfs_remove(); 538 505 } 539 506 540 507 module_init(nfcsim_init);
+3 -6
drivers/nfc/pn533/usb.c
··· 464 464 return -ENOMEM; 465 465 466 466 in_buf = kzalloc(in_buf_len, GFP_KERNEL); 467 - if (!in_buf) { 468 - rc = -ENOMEM; 469 - goto out_free_phy; 470 - } 467 + if (!in_buf) 468 + return -ENOMEM; 471 469 472 470 phy->udev = usb_get_dev(interface_to_usbdev(interface)); 473 471 phy->interface = interface; ··· 552 554 usb_free_urb(phy->out_urb); 553 555 usb_put_dev(phy->udev); 554 556 kfree(in_buf); 555 - out_free_phy: 556 - kfree(phy); 557 + 557 558 return rc; 558 559 } 559 560
+76 -6
drivers/nfc/port100.c
··· 343 343 }, 344 344 [NFC_DIGITAL_FRAMING_NFCF_NFC_DEP] = { 345 345 /* nfc_digital_framing_nfcf */ 346 - { PORT100_IN_PROT_END, 0 }, 346 + { PORT100_IN_PROT_INITIAL_GUARD_TIME, 18 }, 347 + { PORT100_IN_PROT_ADD_CRC, 1 }, 348 + { PORT100_IN_PROT_CHECK_CRC, 1 }, 349 + { PORT100_IN_PROT_MULTI_CARD, 0 }, 350 + { PORT100_IN_PROT_ADD_PARITY, 0 }, 351 + { PORT100_IN_PROT_CHECK_PARITY, 0 }, 352 + { PORT100_IN_PROT_BITWISE_AC_RECV_MODE, 0 }, 353 + { PORT100_IN_PROT_VALID_BIT_NUMBER, 8 }, 354 + { PORT100_IN_PROT_CRYPTO1, 0 }, 355 + { PORT100_IN_PROT_ADD_SOF, 0 }, 356 + { PORT100_IN_PROT_CHECK_SOF, 0 }, 357 + { PORT100_IN_PROT_ADD_EOF, 0 }, 358 + { PORT100_IN_PROT_CHECK_EOF, 0 }, 359 + { PORT100_IN_PROT_DEAF_TIME, 4 }, 360 + { PORT100_IN_PROT_CRM, 0 }, 361 + { PORT100_IN_PROT_CRM_MIN_LEN, 0 }, 362 + { PORT100_IN_PROT_T1_TAG_FRAME, 0 }, 363 + { PORT100_IN_PROT_RFCA, 0 }, 364 + { PORT100_IN_PROT_GUARD_TIME_AT_INITIATOR, 6 }, 365 + { PORT100_IN_PROT_END, 0 }, 347 366 }, 348 367 [NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED] = { 349 368 { PORT100_IN_PROT_END, 0 }, ··· 456 437 struct urb *out_urb; 457 438 struct urb *in_urb; 458 439 440 + /* This mutex protects the out_urb and avoids to submit a new command 441 + * through port100_send_frame_async() while the previous one is being 442 + * canceled through port100_abort_cmd(). 443 + */ 444 + struct mutex out_urb_lock; 445 + 459 446 struct work_struct cmd_complete_work; 460 447 461 448 u8 cmd_type; ··· 470 445 * for any queuing/locking mechanism at driver level. 471 446 */ 472 447 struct port100_cmd *cmd; 448 + 449 + bool cmd_cancel; 450 + struct completion cmd_cancel_done; 473 451 }; 474 452 475 453 struct port100_cmd { ··· 727 699 { 728 700 int rc; 729 701 702 + mutex_lock(&dev->out_urb_lock); 703 + 704 + init_completion(&dev->cmd_cancel_done); 705 + 706 + usb_kill_urb(dev->out_urb); 707 + 730 708 dev->out_urb->transfer_buffer = ack_frame; 731 709 dev->out_urb->transfer_buffer_length = sizeof(ack_frame); 732 710 rc = usb_submit_urb(dev->out_urb, GFP_KERNEL); 711 + 712 + /* Set the cmd_cancel flag only if the URB has been successfully 713 + * submitted. It will be reset by the out URB completion callback 714 + * port100_send_complete(). 715 + */ 716 + dev->cmd_cancel = !rc; 717 + 718 + mutex_unlock(&dev->out_urb_lock); 719 + 720 + if (!rc) 721 + wait_for_completion(&dev->cmd_cancel_done); 733 722 734 723 return rc; 735 724 } ··· 755 710 struct sk_buff *in, int in_len) 756 711 { 757 712 int rc; 713 + 714 + mutex_lock(&dev->out_urb_lock); 715 + 716 + /* A command cancel frame as been sent through dev->out_urb. Don't try 717 + * to submit a new one. 718 + */ 719 + if (dev->cmd_cancel) { 720 + rc = -EAGAIN; 721 + goto exit; 722 + } 758 723 759 724 dev->out_urb->transfer_buffer = out->data; 760 725 dev->out_urb->transfer_buffer_length = out->len; ··· 777 722 778 723 rc = usb_submit_urb(dev->out_urb, GFP_KERNEL); 779 724 if (rc) 780 - return rc; 725 + goto exit; 781 726 782 727 rc = port100_submit_urb_for_ack(dev, GFP_KERNEL); 783 728 if (rc) 784 - goto error; 729 + usb_unlink_urb(dev->out_urb); 785 730 786 - return 0; 731 + exit: 732 + mutex_unlock(&dev->out_urb_lock); 787 733 788 - error: 789 - usb_unlink_urb(dev->out_urb); 790 734 return rc; 791 735 } 792 736 ··· 843 789 int resp_len = PORT100_FRAME_HEADER_LEN + 844 790 PORT100_FRAME_MAX_PAYLOAD_LEN + 845 791 PORT100_FRAME_TAIL_LEN; 792 + 793 + if (dev->cmd) { 794 + nfc_err(&dev->interface->dev, 795 + "A command is still in process\n"); 796 + return -EBUSY; 797 + } 846 798 847 799 resp = alloc_skb(resp_len, GFP_KERNEL); 848 800 if (!resp) ··· 926 866 static void port100_send_complete(struct urb *urb) 927 867 { 928 868 struct port100 *dev = urb->context; 869 + 870 + if (dev->cmd_cancel) { 871 + dev->cmd_cancel = false; 872 + complete(&dev->cmd_cancel_done); 873 + } 929 874 930 875 switch (urb->status) { 931 876 case 0: ··· 1049 984 return -ENOMEM; 1050 985 1051 986 *skb_put(skb, 1) = on ? 1 : 0; 987 + 988 + /* Cancel the last command if the device is being switched off */ 989 + if (!on) 990 + port100_abort_cmd(ddev); 1052 991 1053 992 resp = port100_send_cmd_sync(dev, PORT100_CMD_SWITCH_RF, skb); 1054 993 ··· 1499 1430 if (!dev) 1500 1431 return -ENOMEM; 1501 1432 1433 + mutex_init(&dev->out_urb_lock); 1502 1434 dev->udev = usb_get_dev(interface_to_usbdev(interface)); 1503 1435 dev->interface = interface; 1504 1436 usb_set_intfdata(interface, dev);
+4
drivers/nfc/trf7970a.c
··· 1048 1048 if (ret) 1049 1049 goto err_out; 1050 1050 1051 + ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL, 0); 1052 + if (ret) 1053 + goto err_out; 1054 + 1051 1055 usleep_range(1000, 2000); 1052 1056 1053 1057 trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON;
+2 -2
include/net/nfc/digital.h
··· 220 220 struct list_head cmd_queue; 221 221 struct mutex cmd_lock; 222 222 223 - struct work_struct poll_work; 223 + struct delayed_work poll_work; 224 224 225 225 u8 curr_protocol; 226 226 u8 curr_rf_tech; 227 227 u8 curr_nfc_dep_pni; 228 228 u8 did; 229 + u16 dep_rwt; 229 230 230 231 u8 local_payload_max; 231 232 u8 remote_payload_max; ··· 238 237 int nack_count; 239 238 240 239 struct sk_buff *saved_skb; 241 - unsigned int saved_skb_len; 242 240 243 241 u16 target_fsc; 244 242
-4
include/net/nfc/llc.h
··· 37 37 int tx_tailroom, llc_failure_t llc_failure); 38 38 void nfc_llc_free(struct nfc_llc *llc); 39 39 40 - void nfc_llc_get_rx_head_tail_room(struct nfc_llc *llc, int *rx_headroom, 41 - int *rx_tailroom); 42 - 43 - 44 40 int nfc_llc_start(struct nfc_llc *llc); 45 41 int nfc_llc_stop(struct nfc_llc *llc); 46 42 void nfc_llc_rcv_from_drv(struct nfc_llc *llc, struct sk_buff *skb);
+22 -6
net/nfc/digital_core.c
··· 30 30 31 31 #define DIGITAL_PROTO_ISO15693_RF_TECH NFC_PROTO_ISO15693_MASK 32 32 33 + /* Delay between each poll frame (ms) */ 34 + #define DIGITAL_POLL_INTERVAL 10 35 + 33 36 struct digital_cmd { 34 37 struct list_head queue; 35 38 ··· 175 172 mutex_unlock(&ddev->cmd_lock); 176 173 return; 177 174 } 175 + 176 + cmd->pending = 1; 178 177 179 178 mutex_unlock(&ddev->cmd_lock); 180 179 ··· 424 419 425 420 mutex_unlock(&ddev->poll_lock); 426 421 427 - schedule_work(&ddev->poll_work); 422 + schedule_delayed_work(&ddev->poll_work, 423 + msecs_to_jiffies(DIGITAL_POLL_INTERVAL)); 428 424 } 429 425 430 426 static void digital_wq_poll(struct work_struct *work) ··· 434 428 struct digital_poll_tech *poll_tech; 435 429 struct nfc_digital_dev *ddev = container_of(work, 436 430 struct nfc_digital_dev, 437 - poll_work); 431 + poll_work.work); 438 432 mutex_lock(&ddev->poll_lock); 439 433 440 434 if (!ddev->poll_tech_count) { ··· 549 543 return -EINVAL; 550 544 } 551 545 552 - schedule_work(&ddev->poll_work); 546 + schedule_delayed_work(&ddev->poll_work, 0); 553 547 554 548 return 0; 555 549 } ··· 570 564 571 565 mutex_unlock(&ddev->poll_lock); 572 566 573 - cancel_work_sync(&ddev->poll_work); 567 + cancel_delayed_work_sync(&ddev->poll_work); 574 568 575 569 digital_abort_cmd(ddev); 576 570 } ··· 611 605 static int digital_dep_link_down(struct nfc_dev *nfc_dev) 612 606 { 613 607 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); 608 + 609 + digital_abort_cmd(ddev); 614 610 615 611 ddev->curr_protocol = 0; 616 612 ··· 778 770 INIT_WORK(&ddev->cmd_complete_work, digital_wq_cmd_complete); 779 771 780 772 mutex_init(&ddev->poll_lock); 781 - INIT_WORK(&ddev->poll_work, digital_wq_poll); 773 + INIT_DELAYED_WORK(&ddev->poll_work, digital_wq_poll); 782 774 783 775 if (supported_protocols & NFC_PROTO_JEWEL_MASK) 784 776 ddev->protocols |= NFC_PROTO_JEWEL_MASK; ··· 840 832 ddev->poll_tech_count = 0; 841 833 mutex_unlock(&ddev->poll_lock); 842 834 843 - cancel_work_sync(&ddev->poll_work); 835 + cancel_delayed_work_sync(&ddev->poll_work); 844 836 cancel_work_sync(&ddev->cmd_work); 845 837 cancel_work_sync(&ddev->cmd_complete_work); 846 838 847 839 list_for_each_entry_safe(cmd, n, &ddev->cmd_queue, queue) { 848 840 list_del(&cmd->queue); 841 + 842 + /* Call the command callback if any and pass it a ENODEV error. 843 + * This gives a chance to the command issuer to free any 844 + * allocated buffer. 845 + */ 846 + if (cmd->cmd_cb) 847 + cmd->cmd_cb(ddev, cmd->cb_context, ERR_PTR(-ENODEV)); 848 + 849 849 kfree(cmd->mdaa_params); 850 850 kfree(cmd); 851 851 }
+220 -114
net/nfc/digital_dep.c
··· 35 35 #define DIGITAL_ATR_REQ_MIN_SIZE 16 36 36 #define DIGITAL_ATR_REQ_MAX_SIZE 64 37 37 38 + #define DIGITAL_ATR_RES_TO_WT(s) ((s) & 0xF) 39 + 38 40 #define DIGITAL_DID_MAX 14 39 41 40 42 #define DIGITAL_PAYLOAD_SIZE_MAX 254 ··· 64 62 #define DIGITAL_NFC_DEP_NAD_BIT_SET(pfb) ((pfb) & 0x08) 65 63 #define DIGITAL_NFC_DEP_DID_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_DID_BIT) 66 64 #define DIGITAL_NFC_DEP_PFB_PNI(pfb) ((pfb) & 0x03) 65 + 66 + #define DIGITAL_NFC_DEP_RTOX_VALUE(data) ((data) & 0x3F) 67 + #define DIGITAL_NFC_DEP_RTOX_MAX 59 67 68 68 69 #define DIGITAL_NFC_DEP_PFB_I_PDU 0x00 69 70 #define DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU 0x40 ··· 125 120 [1] = 128, 126 121 [2] = 192, 127 122 [3] = 254 123 + }; 124 + 125 + /* Response Waiting Time for ATR_RES PDU in ms 126 + * 127 + * RWT(ATR_RES) = RWT(nfcdep,activation) + dRWT(nfcdep) + dT(nfcdep,initiator) 128 + * 129 + * with: 130 + * RWT(nfcdep,activation) = 4096 * 2^12 / f(c) s 131 + * dRWT(nfcdep) = 16 / f(c) s 132 + * dT(nfcdep,initiator) = 100 ms 133 + * f(c) = 13560000 Hz 134 + */ 135 + #define DIGITAL_ATR_RES_RWT 1337 136 + 137 + /* Response Waiting Time for other DEP PDUs in ms 138 + * 139 + * max_rwt = rwt + dRWT(nfcdep) + dT(nfcdep,initiator) 140 + * 141 + * with: 142 + * rwt = (256 * 16 / f(c)) * 2^wt s 143 + * dRWT(nfcdep) = 16 / f(c) s 144 + * dT(nfcdep,initiator) = 100 ms 145 + * f(c) = 13560000 Hz 146 + * 0 <= wt <= 14 (given by the target by the TO field of ATR_RES response) 147 + */ 148 + #define DIGITAL_NFC_DEP_IN_MAX_WT 14 149 + #define DIGITAL_NFC_DEP_TG_MAX_WT 8 150 + static const u16 digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT + 1] = { 151 + 100, 101, 101, 102, 105, 152 + 110, 119, 139, 177, 255, 153 + 409, 719, 1337, 2575, 5049, 128 154 }; 129 155 130 156 static u8 digital_payload_bits_to_size(u8 payload_bits) ··· 226 190 return ERR_PTR(-ENOMEM); 227 191 } 228 192 229 - skb_reserve(new_skb, ddev->tx_headroom + NFC_HEADER_SIZE + 230 - DIGITAL_NFC_DEP_REQ_RES_HEADROOM); 231 193 memcpy(skb_put(new_skb, ddev->remote_payload_max), skb->data, 232 194 ddev->remote_payload_max); 233 195 skb_pull(skb, ddev->remote_payload_max); ··· 402 368 403 369 ddev->skb_add_crc(skb); 404 370 405 - rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_psl_res, 406 - target); 371 + rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt, 372 + digital_in_recv_psl_res, target); 407 373 if (rc) 408 374 kfree_skb(skb); 409 375 ··· 416 382 struct nfc_target *target = arg; 417 383 struct digital_atr_res *atr_res; 418 384 u8 gb_len, payload_bits; 385 + u8 wt; 419 386 int rc; 420 387 421 388 if (IS_ERR(resp)) { ··· 445 410 gb_len = resp->len - sizeof(struct digital_atr_res); 446 411 447 412 atr_res = (struct digital_atr_res *)resp->data; 413 + 414 + wt = DIGITAL_ATR_RES_TO_WT(atr_res->to); 415 + if (wt > DIGITAL_NFC_DEP_IN_MAX_WT) 416 + wt = DIGITAL_NFC_DEP_IN_MAX_WT; 417 + ddev->dep_rwt = digital_rwt_map[wt]; 448 418 449 419 payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_res->pp); 450 420 ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits); ··· 532 492 533 493 ddev->skb_add_crc(skb); 534 494 535 - rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_atr_res, 536 - target); 495 + rc = digital_in_send_cmd(ddev, skb, DIGITAL_ATR_RES_RWT, 496 + digital_in_recv_atr_res, target); 537 497 if (rc) 538 498 kfree_skb(skb); 539 499 ··· 564 524 565 525 ddev->skb_add_crc(skb); 566 526 567 - ddev->saved_skb = skb_get(skb); 568 - ddev->saved_skb_len = skb->len; 527 + ddev->saved_skb = pskb_copy(skb, GFP_KERNEL); 569 528 570 - rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, 571 - data_exch); 529 + rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt, 530 + digital_in_recv_dep_res, data_exch); 572 531 if (rc) { 573 532 kfree_skb(skb); 574 533 kfree_skb(ddev->saved_skb); ··· 601 562 602 563 ddev->skb_add_crc(skb); 603 564 604 - rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, 605 - data_exch); 565 + rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt, 566 + digital_in_recv_dep_res, data_exch); 606 567 if (rc) 607 568 kfree_skb(skb); 608 569 ··· 632 593 633 594 ddev->skb_add_crc(skb); 634 595 635 - rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, 636 - data_exch); 596 + rc = digital_in_send_cmd(ddev, skb, ddev->dep_rwt, 597 + digital_in_recv_dep_res, data_exch); 637 598 if (rc) 638 599 kfree_skb(skb); 639 600 ··· 646 607 struct digital_dep_req_res *dep_req; 647 608 struct sk_buff *skb; 648 609 int rc; 610 + u16 rwt_int; 611 + 612 + rwt_int = ddev->dep_rwt * rtox; 613 + if (rwt_int > digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT]) 614 + rwt_int = digital_rwt_map[DIGITAL_NFC_DEP_IN_MAX_WT]; 649 615 650 616 skb = digital_skb_alloc(ddev, 1); 651 617 if (!skb) ··· 671 627 672 628 ddev->skb_add_crc(skb); 673 629 674 - ddev->saved_skb = skb_get(skb); 675 - ddev->saved_skb_len = skb->len; 676 - 677 - rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, 678 - data_exch); 679 - if (rc) { 630 + rc = digital_in_send_cmd(ddev, skb, rwt_int, 631 + digital_in_recv_dep_res, data_exch); 632 + if (rc) 680 633 kfree_skb(skb); 681 - kfree_skb(ddev->saved_skb); 682 - ddev->saved_skb = NULL; 683 - } 684 634 685 635 return rc; 686 636 } ··· 682 644 static int digital_in_send_saved_skb(struct nfc_digital_dev *ddev, 683 645 struct digital_data_exch *data_exch) 684 646 { 685 - skb_get(ddev->saved_skb); 686 - skb_push(ddev->saved_skb, ddev->saved_skb_len); 647 + int rc; 687 648 688 - return digital_in_send_cmd(ddev, ddev->saved_skb, 1500, 689 - digital_in_recv_dep_res, data_exch); 649 + if (!ddev->saved_skb) 650 + return -EINVAL; 651 + 652 + skb_get(ddev->saved_skb); 653 + 654 + rc = digital_in_send_cmd(ddev, ddev->saved_skb, ddev->dep_rwt, 655 + digital_in_recv_dep_res, data_exch); 656 + if (rc) 657 + kfree_skb(ddev->saved_skb); 658 + 659 + return rc; 690 660 } 691 661 692 662 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg, ··· 705 659 u8 pfb; 706 660 uint size; 707 661 int rc; 662 + u8 rtox; 708 663 709 664 if (IS_ERR(resp)) { 710 665 rc = PTR_ERR(resp); 711 666 resp = NULL; 712 667 713 - if (((rc != -ETIMEDOUT) || ddev->nack_count) && 668 + if ((rc == -EIO || (rc == -ETIMEDOUT && ddev->nack_count)) && 714 669 (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) { 715 670 ddev->atn_count = 0; 716 671 ··· 830 783 break; 831 784 832 785 case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU: 786 + if (DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { 787 + PROTOCOL_ERR("14.12.4.5"); 788 + rc = -EIO; 789 + goto exit; 790 + } 791 + 833 792 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) { 834 793 PROTOCOL_ERR("14.12.3.3"); 835 794 rc = -EIO; ··· 845 792 ddev->curr_nfc_dep_pni = 846 793 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1); 847 794 848 - if (ddev->chaining_skb && !DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { 849 - kfree_skb(ddev->saved_skb); 850 - ddev->saved_skb = NULL; 851 - 852 - rc = digital_in_send_dep_req(ddev, NULL, 853 - ddev->chaining_skb, 854 - ddev->data_exch); 855 - if (rc) 856 - goto error; 857 - 858 - return; 795 + if (!ddev->chaining_skb) { 796 + PROTOCOL_ERR("14.12.4.3"); 797 + rc = -EIO; 798 + goto exit; 859 799 } 860 800 861 - pr_err("Received a ACK/NACK PDU\n"); 862 - rc = -EINVAL; 863 - goto exit; 801 + /* The initiator has received a valid ACK. Free the last sent 802 + * PDU and keep on sending chained skb. 803 + */ 804 + kfree_skb(ddev->saved_skb); 805 + ddev->saved_skb = NULL; 806 + 807 + rc = digital_in_send_dep_req(ddev, NULL, 808 + ddev->chaining_skb, 809 + ddev->data_exch); 810 + if (rc) 811 + goto error; 812 + 813 + goto free_resp; 864 814 865 815 case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU: 866 816 if (!DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) { /* ATN */ 867 817 rc = digital_in_send_saved_skb(ddev, data_exch); 868 - if (rc) { 869 - kfree_skb(ddev->saved_skb); 818 + if (rc) 870 819 goto error; 871 - } 872 820 873 - return; 821 + goto free_resp; 874 822 } 875 823 876 - kfree_skb(ddev->saved_skb); 877 - ddev->saved_skb = NULL; 824 + if (ddev->atn_count || ddev->nack_count) { 825 + PROTOCOL_ERR("14.12.4.4"); 826 + rc = -EIO; 827 + goto error; 828 + } 878 829 879 - rc = digital_in_send_rtox(ddev, data_exch, resp->data[0]); 830 + rtox = DIGITAL_NFC_DEP_RTOX_VALUE(resp->data[0]); 831 + if (!rtox || rtox > DIGITAL_NFC_DEP_RTOX_MAX) { 832 + PROTOCOL_ERR("14.8.4.1"); 833 + rc = -EIO; 834 + goto error; 835 + } 836 + 837 + rc = digital_in_send_rtox(ddev, data_exch, rtox); 880 838 if (rc) 881 839 goto error; 882 840 883 - kfree_skb(resp); 884 - return; 841 + goto free_resp; 885 842 } 886 843 887 844 exit: ··· 908 845 909 846 if (rc) 910 847 kfree_skb(resp); 848 + 849 + return; 850 + 851 + free_resp: 852 + dev_kfree_skb(resp); 911 853 } 912 854 913 855 int digital_in_send_dep_req(struct nfc_digital_dev *ddev, ··· 944 876 945 877 ddev->skb_add_crc(tmp_skb); 946 878 947 - ddev->saved_skb = skb_get(tmp_skb); 948 - ddev->saved_skb_len = tmp_skb->len; 879 + ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL); 949 880 950 - rc = digital_in_send_cmd(ddev, tmp_skb, 1500, digital_in_recv_dep_res, 951 - data_exch); 881 + rc = digital_in_send_cmd(ddev, tmp_skb, ddev->dep_rwt, 882 + digital_in_recv_dep_res, data_exch); 952 883 if (rc) { 953 884 if (tmp_skb != skb) 954 885 kfree_skb(tmp_skb); ··· 1023 956 1024 957 ddev->skb_add_crc(skb); 1025 958 1026 - ddev->saved_skb = skb_get(skb); 1027 - ddev->saved_skb_len = skb->len; 959 + ddev->saved_skb = pskb_copy(skb, GFP_KERNEL); 1028 960 1029 961 rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req, 1030 962 data_exch); ··· 1075 1009 1076 1010 static int digital_tg_send_saved_skb(struct nfc_digital_dev *ddev) 1077 1011 { 1078 - skb_get(ddev->saved_skb); 1079 - skb_push(ddev->saved_skb, ddev->saved_skb_len); 1012 + int rc; 1080 1013 1081 - return digital_tg_send_cmd(ddev, ddev->saved_skb, 1500, 1082 - digital_tg_recv_dep_req, NULL); 1014 + if (!ddev->saved_skb) 1015 + return -EINVAL; 1016 + 1017 + skb_get(ddev->saved_skb); 1018 + 1019 + rc = digital_tg_send_cmd(ddev, ddev->saved_skb, 1500, 1020 + digital_tg_recv_dep_req, NULL); 1021 + if (rc) 1022 + kfree_skb(ddev->saved_skb); 1023 + 1024 + return rc; 1083 1025 } 1084 1026 1085 1027 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg, ··· 1160 1086 case DIGITAL_NFC_DEP_PFB_I_PDU: 1161 1087 pr_debug("DIGITAL_NFC_DEP_PFB_I_PDU\n"); 1162 1088 1163 - if ((ddev->atn_count && (DIGITAL_NFC_DEP_PFB_PNI(pfb - 1) != 1164 - ddev->curr_nfc_dep_pni)) || 1165 - (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni)) { 1089 + if (ddev->atn_count) { 1090 + /* The target has received (and replied to) at least one 1091 + * ATN DEP_REQ. 1092 + */ 1093 + ddev->atn_count = 0; 1094 + 1095 + /* pni of resp PDU equal to the target current pni - 1 1096 + * means resp is the previous DEP_REQ PDU received from 1097 + * the initiator so the target replies with saved_skb 1098 + * which is the previous DEP_RES saved in 1099 + * digital_tg_send_dep_res(). 1100 + */ 1101 + if (DIGITAL_NFC_DEP_PFB_PNI(pfb) == 1102 + DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni - 1)) { 1103 + rc = digital_tg_send_saved_skb(ddev); 1104 + if (rc) 1105 + goto exit; 1106 + 1107 + goto free_resp; 1108 + } 1109 + 1110 + /* atn_count > 0 and PDU pni != curr_nfc_dep_pni - 1 1111 + * means the target probably did not received the last 1112 + * DEP_REQ PDU sent by the initiator. The target 1113 + * fallbacks to normal processing then. 1114 + */ 1115 + } 1116 + 1117 + if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) { 1166 1118 PROTOCOL_ERR("14.12.3.4"); 1167 1119 rc = -EIO; 1168 1120 goto exit; 1169 - } 1170 - 1171 - if (ddev->atn_count) { 1172 - ddev->atn_count = 0; 1173 - 1174 - rc = digital_tg_send_saved_skb(ddev); 1175 - if (rc) 1176 - goto exit; 1177 - 1178 - return; 1179 1121 } 1180 1122 1181 1123 kfree_skb(ddev->saved_skb); ··· 1215 1125 rc = 0; 1216 1126 break; 1217 1127 case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU: 1218 - if (!DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { /* ACK */ 1219 - if ((ddev->atn_count && 1220 - (DIGITAL_NFC_DEP_PFB_PNI(pfb - 1) != 1221 - ddev->curr_nfc_dep_pni)) || 1222 - (DIGITAL_NFC_DEP_PFB_PNI(pfb) != 1223 - ddev->curr_nfc_dep_pni) || 1224 - !ddev->chaining_skb || !ddev->saved_skb) { 1225 - rc = -EIO; 1226 - goto exit; 1227 - } 1228 - 1229 - if (ddev->atn_count) { 1230 - ddev->atn_count = 0; 1231 - 1232 - rc = digital_tg_send_saved_skb(ddev); 1233 - if (rc) 1234 - goto exit; 1235 - 1236 - return; 1237 - } 1238 - 1239 - kfree_skb(ddev->saved_skb); 1240 - ddev->saved_skb = NULL; 1241 - 1242 - rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb); 1243 - if (rc) 1244 - goto exit; 1245 - } else { /* NACK */ 1246 - if ((DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) != 1247 - ddev->curr_nfc_dep_pni) || 1248 - !ddev->saved_skb) { 1128 + if (DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { /* NACK */ 1129 + if (DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) != 1130 + ddev->curr_nfc_dep_pni) { 1249 1131 rc = -EIO; 1250 1132 goto exit; 1251 1133 } ··· 1225 1163 ddev->atn_count = 0; 1226 1164 1227 1165 rc = digital_tg_send_saved_skb(ddev); 1228 - if (rc) { 1229 - kfree_skb(ddev->saved_skb); 1166 + if (rc) 1230 1167 goto exit; 1231 - } 1168 + 1169 + goto free_resp; 1232 1170 } 1233 1171 1234 - return; 1172 + /* ACK */ 1173 + if (ddev->atn_count) { 1174 + /* The target has previously recevied one or more ATN 1175 + * PDUs. 1176 + */ 1177 + ddev->atn_count = 0; 1178 + 1179 + /* If the ACK PNI is equal to the target PNI - 1 means 1180 + * that the initiator did not receive the previous PDU 1181 + * sent by the target so re-send it. 1182 + */ 1183 + if (DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) == 1184 + ddev->curr_nfc_dep_pni) { 1185 + rc = digital_tg_send_saved_skb(ddev); 1186 + if (rc) 1187 + goto exit; 1188 + 1189 + goto free_resp; 1190 + } 1191 + 1192 + /* Otherwise, the target did not receive the previous 1193 + * ACK PDU from the initiator. Fallback to normal 1194 + * processing of chained PDU then. 1195 + */ 1196 + } 1197 + 1198 + /* Keep on sending chained PDU */ 1199 + if (!ddev->chaining_skb || 1200 + DIGITAL_NFC_DEP_PFB_PNI(pfb) != 1201 + ddev->curr_nfc_dep_pni) { 1202 + rc = -EIO; 1203 + goto exit; 1204 + } 1205 + 1206 + kfree_skb(ddev->saved_skb); 1207 + ddev->saved_skb = NULL; 1208 + 1209 + rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb); 1210 + if (rc) 1211 + goto exit; 1212 + 1213 + goto free_resp; 1235 1214 case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU: 1236 1215 if (DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) { 1237 1216 rc = -EINVAL; ··· 1285 1182 1286 1183 ddev->atn_count++; 1287 1184 1288 - kfree_skb(resp); 1289 - return; 1185 + goto free_resp; 1290 1186 } 1291 1187 1292 1188 rc = nfc_tm_data_received(ddev->nfc_dev, resp); ··· 1301 1199 1302 1200 if (rc) 1303 1201 kfree_skb(resp); 1202 + 1203 + return; 1204 + 1205 + free_resp: 1206 + dev_kfree_skb(resp); 1304 1207 } 1305 1208 1306 1209 int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb) ··· 1342 1235 1343 1236 ddev->skb_add_crc(tmp_skb); 1344 1237 1345 - ddev->saved_skb = skb_get(tmp_skb); 1346 - ddev->saved_skb_len = tmp_skb->len; 1238 + ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL); 1347 1239 1348 1240 rc = digital_tg_send_cmd(ddev, tmp_skb, 1500, digital_tg_recv_dep_req, 1349 1241 NULL); ··· 1526 1420 atr_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN; 1527 1421 atr_res->cmd = DIGITAL_CMD_ATR_RES; 1528 1422 memcpy(atr_res->nfcid3, atr_req->nfcid3, sizeof(atr_req->nfcid3)); 1529 - atr_res->to = 8; 1423 + atr_res->to = DIGITAL_NFC_DEP_TG_MAX_WT; 1530 1424 1531 1425 ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX; 1532 1426 payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
+1 -10
net/nfc/digital_technology.c
··· 1257 1257 int digital_tg_listen_nfcf(struct nfc_digital_dev *ddev, u8 rf_tech) 1258 1258 { 1259 1259 int rc; 1260 - u8 *nfcid2; 1261 1260 1262 1261 rc = digital_tg_config_nfcf(ddev, rf_tech); 1263 1262 if (rc) 1264 1263 return rc; 1265 1264 1266 - nfcid2 = kzalloc(NFC_NFCID2_MAXSIZE, GFP_KERNEL); 1267 - if (!nfcid2) 1268 - return -ENOMEM; 1269 - 1270 - nfcid2[0] = DIGITAL_SENSF_NFCID2_NFC_DEP_B1; 1271 - nfcid2[1] = DIGITAL_SENSF_NFCID2_NFC_DEP_B2; 1272 - get_random_bytes(nfcid2 + 2, NFC_NFCID2_MAXSIZE - 2); 1273 - 1274 - return digital_tg_listen(ddev, 300, digital_tg_recv_sensf_req, nfcid2); 1265 + return digital_tg_listen(ddev, 300, digital_tg_recv_sensf_req, NULL); 1275 1266 } 1276 1267 1277 1268 void digital_tg_recv_md_req(struct nfc_digital_dev *ddev, void *arg,
+5 -12
net/nfc/hci/llc.c
··· 133 133 kfree(llc); 134 134 } 135 135 136 - inline void nfc_llc_get_rx_head_tail_room(struct nfc_llc *llc, int *rx_headroom, 137 - int *rx_tailroom) 138 - { 139 - *rx_headroom = llc->rx_headroom; 140 - *rx_tailroom = llc->rx_tailroom; 141 - } 142 - 143 - inline int nfc_llc_start(struct nfc_llc *llc) 136 + int nfc_llc_start(struct nfc_llc *llc) 144 137 { 145 138 return llc->ops->start(llc); 146 139 } 147 140 EXPORT_SYMBOL(nfc_llc_start); 148 141 149 - inline int nfc_llc_stop(struct nfc_llc *llc) 142 + int nfc_llc_stop(struct nfc_llc *llc) 150 143 { 151 144 return llc->ops->stop(llc); 152 145 } 153 146 EXPORT_SYMBOL(nfc_llc_stop); 154 147 155 - inline void nfc_llc_rcv_from_drv(struct nfc_llc *llc, struct sk_buff *skb) 148 + void nfc_llc_rcv_from_drv(struct nfc_llc *llc, struct sk_buff *skb) 156 149 { 157 150 llc->ops->rcv_from_drv(llc, skb); 158 151 } 159 152 160 - inline int nfc_llc_xmit_from_hci(struct nfc_llc *llc, struct sk_buff *skb) 153 + int nfc_llc_xmit_from_hci(struct nfc_llc *llc, struct sk_buff *skb) 161 154 { 162 155 return llc->ops->xmit_from_hci(llc, skb); 163 156 } 164 157 165 - inline void *nfc_llc_get_data(struct nfc_llc *llc) 158 + void *nfc_llc_get_data(struct nfc_llc *llc) 166 159 { 167 160 return llc->data; 168 161 }
+11 -12
net/nfc/llcp_commands.c
··· 438 438 goto error_tlv; 439 439 } 440 440 441 - if (service_name_tlv != NULL) 442 - skb = llcp_add_tlv(skb, service_name_tlv, 443 - service_name_tlv_length); 444 - 445 - skb = llcp_add_tlv(skb, miux_tlv, miux_tlv_length); 446 - skb = llcp_add_tlv(skb, rw_tlv, rw_tlv_length); 441 + llcp_add_tlv(skb, service_name_tlv, service_name_tlv_length); 442 + llcp_add_tlv(skb, miux_tlv, miux_tlv_length); 443 + llcp_add_tlv(skb, rw_tlv, rw_tlv_length); 447 444 448 445 skb_queue_tail(&local->tx_queue, skb); 449 446 450 - return 0; 447 + err = 0; 451 448 452 449 error_tlv: 453 - pr_err("error %d\n", err); 450 + if (err) 451 + pr_err("error %d\n", err); 454 452 455 453 kfree(service_name_tlv); 456 454 kfree(miux_tlv); ··· 491 493 goto error_tlv; 492 494 } 493 495 494 - skb = llcp_add_tlv(skb, miux_tlv, miux_tlv_length); 495 - skb = llcp_add_tlv(skb, rw_tlv, rw_tlv_length); 496 + llcp_add_tlv(skb, miux_tlv, miux_tlv_length); 497 + llcp_add_tlv(skb, rw_tlv, rw_tlv_length); 496 498 497 499 skb_queue_tail(&local->tx_queue, skb); 498 500 499 - return 0; 501 + err = 0; 500 502 501 503 error_tlv: 502 - pr_err("error %d\n", err); 504 + if (err) 505 + pr_err("error %d\n", err); 503 506 504 507 kfree(miux_tlv); 505 508 kfree(rw_tlv);
+4 -5
net/nfc/llcp_core.c
··· 732 732 int ret; 733 733 734 734 pr_debug("Sending pending skb\n"); 735 - print_hex_dump(KERN_DEBUG, "LLCP Tx: ", 736 - DUMP_PREFIX_OFFSET, 16, 1, 737 - skb->data, skb->len, true); 735 + print_hex_dump_debug("LLCP Tx: ", DUMP_PREFIX_OFFSET, 736 + 16, 1, skb->data, skb->len, true); 738 737 739 738 if (ptype == LLCP_PDU_DISC && sk != NULL && 740 739 sk->sk_state == LLCP_DISCONNECTING) { ··· 1411 1412 pr_debug("ptype 0x%x dsap 0x%x ssap 0x%x\n", ptype, dsap, ssap); 1412 1413 1413 1414 if (ptype != LLCP_PDU_SYMM) 1414 - print_hex_dump(KERN_DEBUG, "LLCP Rx: ", DUMP_PREFIX_OFFSET, 1415 - 16, 1, skb->data, skb->len, true); 1415 + print_hex_dump_debug("LLCP Rx: ", DUMP_PREFIX_OFFSET, 16, 1, 1416 + skb->data, skb->len, true); 1416 1417 1417 1418 switch (ptype) { 1418 1419 case LLCP_PDU_SYMM: