diff options
| author | John W. Linville <linville@tuxdriver.com> | 2014-01-17 14:43:17 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2014-01-17 14:43:17 -0500 |
| commit | 7916a075571f0ccd0830cf3da293188a8b6045e3 (patch) | |
| tree | 119c5bb9e513c8205efed485c2dc7b8271123326 /net/nfc | |
| parent | cf84eb0b09c0f09b4c70a648b9dfeec78be61f07 (diff) | |
| parent | e4e19c031901e95dc7d1cf0a2c9c50525d71651f (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'net/nfc')
| -rw-r--r-- | net/nfc/core.c | 7 | ||||
| -rw-r--r-- | net/nfc/digital_core.c | 28 | ||||
| -rw-r--r-- | net/nfc/digital_dep.c | 54 | ||||
| -rw-r--r-- | net/nfc/hci/core.c | 7 | ||||
| -rw-r--r-- | net/nfc/llcp_commands.c | 6 | ||||
| -rw-r--r-- | net/nfc/llcp_core.c | 1 | ||||
| -rw-r--r-- | net/nfc/llcp_sock.c | 1 | ||||
| -rw-r--r-- | net/nfc/nci/core.c | 27 |
8 files changed, 91 insertions, 40 deletions
diff --git a/net/nfc/core.c b/net/nfc/core.c index b675fa4a6f19..ca1e65f4b133 100644 --- a/net/nfc/core.c +++ b/net/nfc/core.c | |||
| @@ -133,11 +133,8 @@ int nfc_dev_up(struct nfc_dev *dev) | |||
| 133 | dev->dev_up = true; | 133 | dev->dev_up = true; |
| 134 | 134 | ||
| 135 | /* We have to enable the device before discovering SEs */ | 135 | /* We have to enable the device before discovering SEs */ |
| 136 | if (dev->ops->discover_se) { | 136 | if (dev->ops->discover_se && dev->ops->discover_se(dev)) |
| 137 | rc = dev->ops->discover_se(dev); | 137 | pr_err("SE discovery failed\n"); |
| 138 | if (rc) | ||
| 139 | pr_warn("SE discovery failed\n"); | ||
| 140 | } | ||
| 141 | 138 | ||
| 142 | error: | 139 | error: |
| 143 | device_unlock(&dev->dev); | 140 | device_unlock(&dev->dev); |
diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c index 09fc95439955..c129d1571ca6 100644 --- a/net/nfc/digital_core.c +++ b/net/nfc/digital_core.c | |||
| @@ -339,7 +339,6 @@ int digital_target_found(struct nfc_digital_dev *ddev, | |||
| 339 | pr_debug("rf_tech=%d, protocol=%d\n", rf_tech, protocol); | 339 | pr_debug("rf_tech=%d, protocol=%d\n", rf_tech, protocol); |
| 340 | 340 | ||
| 341 | ddev->curr_rf_tech = rf_tech; | 341 | ddev->curr_rf_tech = rf_tech; |
| 342 | ddev->curr_protocol = protocol; | ||
| 343 | 342 | ||
| 344 | if (DIGITAL_DRV_CAPS_IN_CRC(ddev)) { | 343 | if (DIGITAL_DRV_CAPS_IN_CRC(ddev)) { |
| 345 | ddev->skb_add_crc = digital_skb_add_crc_none; | 344 | ddev->skb_add_crc = digital_skb_add_crc_none; |
| @@ -541,8 +540,14 @@ static int digital_dep_link_up(struct nfc_dev *nfc_dev, | |||
| 541 | __u8 comm_mode, __u8 *gb, size_t gb_len) | 540 | __u8 comm_mode, __u8 *gb, size_t gb_len) |
| 542 | { | 541 | { |
| 543 | struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); | 542 | struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); |
| 543 | int rc; | ||
| 544 | |||
| 545 | rc = digital_in_send_atr_req(ddev, target, comm_mode, gb, gb_len); | ||
| 544 | 546 | ||
| 545 | return digital_in_send_atr_req(ddev, target, comm_mode, gb, gb_len); | 547 | if (!rc) |
| 548 | ddev->curr_protocol = NFC_PROTO_NFC_DEP; | ||
| 549 | |||
| 550 | return rc; | ||
| 546 | } | 551 | } |
| 547 | 552 | ||
| 548 | static int digital_dep_link_down(struct nfc_dev *nfc_dev) | 553 | static int digital_dep_link_down(struct nfc_dev *nfc_dev) |
| @@ -557,6 +562,20 @@ static int digital_dep_link_down(struct nfc_dev *nfc_dev) | |||
| 557 | static int digital_activate_target(struct nfc_dev *nfc_dev, | 562 | static int digital_activate_target(struct nfc_dev *nfc_dev, |
| 558 | struct nfc_target *target, __u32 protocol) | 563 | struct nfc_target *target, __u32 protocol) |
| 559 | { | 564 | { |
| 565 | struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); | ||
| 566 | |||
| 567 | if (ddev->poll_tech_count) { | ||
| 568 | pr_err("Can't activate a target while polling\n"); | ||
| 569 | return -EBUSY; | ||
| 570 | } | ||
| 571 | |||
| 572 | if (ddev->curr_protocol) { | ||
| 573 | pr_err("A target is already active\n"); | ||
| 574 | return -EBUSY; | ||
| 575 | } | ||
| 576 | |||
| 577 | ddev->curr_protocol = protocol; | ||
| 578 | |||
| 560 | return 0; | 579 | return 0; |
| 561 | } | 580 | } |
| 562 | 581 | ||
| @@ -565,6 +584,11 @@ static void digital_deactivate_target(struct nfc_dev *nfc_dev, | |||
| 565 | { | 584 | { |
| 566 | struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); | 585 | struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); |
| 567 | 586 | ||
| 587 | if (!ddev->curr_protocol) { | ||
| 588 | pr_err("No active target\n"); | ||
| 589 | return; | ||
| 590 | } | ||
| 591 | |||
| 568 | ddev->curr_protocol = 0; | 592 | ddev->curr_protocol = 0; |
| 569 | } | 593 | } |
| 570 | 594 | ||
diff --git a/net/nfc/digital_dep.c b/net/nfc/digital_dep.c index 07bbc24fb4c7..43e450f78d0a 100644 --- a/net/nfc/digital_dep.c +++ b/net/nfc/digital_dep.c | |||
| @@ -32,7 +32,6 @@ | |||
| 32 | #define DIGITAL_ATR_REQ_MIN_SIZE 16 | 32 | #define DIGITAL_ATR_REQ_MIN_SIZE 16 |
| 33 | #define DIGITAL_ATR_REQ_MAX_SIZE 64 | 33 | #define DIGITAL_ATR_REQ_MAX_SIZE 64 |
| 34 | 34 | ||
| 35 | #define DIGITAL_NFCID3_LEN ((u8)8) | ||
| 36 | #define DIGITAL_LR_BITS_PAYLOAD_SIZE_254B 0x30 | 35 | #define DIGITAL_LR_BITS_PAYLOAD_SIZE_254B 0x30 |
| 37 | #define DIGITAL_GB_BIT 0x02 | 36 | #define DIGITAL_GB_BIT 0x02 |
| 38 | 37 | ||
| @@ -206,10 +205,9 @@ int digital_in_send_atr_req(struct nfc_digital_dev *ddev, | |||
| 206 | atr_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT; | 205 | atr_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT; |
| 207 | atr_req->cmd = DIGITAL_CMD_ATR_REQ; | 206 | atr_req->cmd = DIGITAL_CMD_ATR_REQ; |
| 208 | if (target->nfcid2_len) | 207 | if (target->nfcid2_len) |
| 209 | memcpy(atr_req->nfcid3, target->nfcid2, | 208 | memcpy(atr_req->nfcid3, target->nfcid2, NFC_NFCID2_MAXSIZE); |
| 210 | max(target->nfcid2_len, DIGITAL_NFCID3_LEN)); | ||
| 211 | else | 209 | else |
| 212 | get_random_bytes(atr_req->nfcid3, DIGITAL_NFCID3_LEN); | 210 | get_random_bytes(atr_req->nfcid3, NFC_NFCID3_MAXSIZE); |
| 213 | 211 | ||
| 214 | atr_req->did = 0; | 212 | atr_req->did = 0; |
| 215 | atr_req->bs = 0; | 213 | atr_req->bs = 0; |
| @@ -382,6 +380,33 @@ int digital_in_send_dep_req(struct nfc_digital_dev *ddev, | |||
| 382 | data_exch); | 380 | data_exch); |
| 383 | } | 381 | } |
| 384 | 382 | ||
| 383 | static void digital_tg_set_rf_tech(struct nfc_digital_dev *ddev, u8 rf_tech) | ||
| 384 | { | ||
| 385 | ddev->curr_rf_tech = rf_tech; | ||
| 386 | |||
| 387 | ddev->skb_add_crc = digital_skb_add_crc_none; | ||
| 388 | ddev->skb_check_crc = digital_skb_check_crc_none; | ||
| 389 | |||
| 390 | if (DIGITAL_DRV_CAPS_TG_CRC(ddev)) | ||
| 391 | return; | ||
| 392 | |||
| 393 | switch (ddev->curr_rf_tech) { | ||
| 394 | case NFC_DIGITAL_RF_TECH_106A: | ||
| 395 | ddev->skb_add_crc = digital_skb_add_crc_a; | ||
| 396 | ddev->skb_check_crc = digital_skb_check_crc_a; | ||
| 397 | break; | ||
| 398 | |||
| 399 | case NFC_DIGITAL_RF_TECH_212F: | ||
| 400 | case NFC_DIGITAL_RF_TECH_424F: | ||
| 401 | ddev->skb_add_crc = digital_skb_add_crc_f; | ||
| 402 | ddev->skb_check_crc = digital_skb_check_crc_f; | ||
| 403 | break; | ||
| 404 | |||
| 405 | default: | ||
| 406 | break; | ||
| 407 | } | ||
| 408 | } | ||
| 409 | |||
| 385 | static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg, | 410 | static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg, |
| 386 | struct sk_buff *resp) | 411 | struct sk_buff *resp) |
| 387 | { | 412 | { |
| @@ -472,11 +497,13 @@ int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb) | |||
| 472 | static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev, | 497 | static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev, |
| 473 | void *arg, struct sk_buff *resp) | 498 | void *arg, struct sk_buff *resp) |
| 474 | { | 499 | { |
| 475 | u8 rf_tech = PTR_ERR(arg); | 500 | u8 rf_tech = (unsigned long)arg; |
| 476 | 501 | ||
| 477 | if (IS_ERR(resp)) | 502 | if (IS_ERR(resp)) |
| 478 | return; | 503 | return; |
| 479 | 504 | ||
| 505 | digital_tg_set_rf_tech(ddev, rf_tech); | ||
| 506 | |||
| 480 | digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech); | 507 | digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech); |
| 481 | 508 | ||
| 482 | digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL); | 509 | digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL); |
| @@ -508,7 +535,7 @@ static int digital_tg_send_psl_res(struct nfc_digital_dev *ddev, u8 did, | |||
| 508 | ddev->skb_add_crc(skb); | 535 | ddev->skb_add_crc(skb); |
| 509 | 536 | ||
| 510 | rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete, | 537 | rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete, |
| 511 | ERR_PTR(rf_tech)); | 538 | (void *)(unsigned long)rf_tech); |
| 512 | 539 | ||
| 513 | if (rc) | 540 | if (rc) |
| 514 | kfree_skb(skb); | 541 | kfree_skb(skb); |
| @@ -661,16 +688,10 @@ void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg, | |||
| 661 | 688 | ||
| 662 | if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB) { | 689 | if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB) { |
| 663 | min_size = DIGITAL_ATR_REQ_MIN_SIZE + 2; | 690 | min_size = DIGITAL_ATR_REQ_MIN_SIZE + 2; |
| 664 | 691 | digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_106A); | |
| 665 | ddev->curr_rf_tech = NFC_DIGITAL_RF_TECH_106A; | ||
| 666 | ddev->skb_add_crc = digital_skb_add_crc_a; | ||
| 667 | ddev->skb_check_crc = digital_skb_check_crc_a; | ||
| 668 | } else { | 692 | } else { |
| 669 | min_size = DIGITAL_ATR_REQ_MIN_SIZE + 1; | 693 | min_size = DIGITAL_ATR_REQ_MIN_SIZE + 1; |
| 670 | 694 | digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_212F); | |
| 671 | ddev->curr_rf_tech = NFC_DIGITAL_RF_TECH_212F; | ||
| 672 | ddev->skb_add_crc = digital_skb_add_crc_f; | ||
| 673 | ddev->skb_check_crc = digital_skb_check_crc_f; | ||
| 674 | } | 695 | } |
| 675 | 696 | ||
| 676 | if (resp->len < min_size) { | 697 | if (resp->len < min_size) { |
| @@ -678,10 +699,7 @@ void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg, | |||
| 678 | goto exit; | 699 | goto exit; |
| 679 | } | 700 | } |
| 680 | 701 | ||
| 681 | if (DIGITAL_DRV_CAPS_TG_CRC(ddev)) { | 702 | ddev->curr_protocol = NFC_PROTO_NFC_DEP_MASK; |
| 682 | ddev->skb_add_crc = digital_skb_add_crc_none; | ||
| 683 | ddev->skb_check_crc = digital_skb_check_crc_none; | ||
| 684 | } | ||
| 685 | 703 | ||
| 686 | rc = ddev->skb_check_crc(resp); | 704 | rc = ddev->skb_check_crc(resp); |
| 687 | if (rc) { | 705 | if (rc) { |
diff --git a/net/nfc/hci/core.c b/net/nfc/hci/core.c index 3b9610031baa..d45b638e77c7 100644 --- a/net/nfc/hci/core.c +++ b/net/nfc/hci/core.c | |||
| @@ -335,11 +335,8 @@ exit: | |||
| 335 | kfree_skb(skb); | 335 | kfree_skb(skb); |
| 336 | 336 | ||
| 337 | exit_noskb: | 337 | exit_noskb: |
| 338 | if (r) { | 338 | if (r) |
| 339 | /* TODO: There was an error dispatching the event, | 339 | nfc_hci_driver_failure(hdev, r); |
| 340 | * how to propagate up to nfc core? | ||
| 341 | */ | ||
| 342 | } | ||
| 343 | } | 340 | } |
| 344 | 341 | ||
| 345 | static void nfc_hci_cmd_timeout(unsigned long data) | 342 | static void nfc_hci_cmd_timeout(unsigned long data) |
diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c index 693cd1aad582..bec6ed15f503 100644 --- a/net/nfc/llcp_commands.c +++ b/net/nfc/llcp_commands.c | |||
| @@ -675,7 +675,7 @@ int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock, | |||
| 675 | 675 | ||
| 676 | do { | 676 | do { |
| 677 | remote_miu = sock->remote_miu > LLCP_MAX_MIU ? | 677 | remote_miu = sock->remote_miu > LLCP_MAX_MIU ? |
| 678 | local->remote_miu : sock->remote_miu; | 678 | LLCP_DEFAULT_MIU : sock->remote_miu; |
| 679 | 679 | ||
| 680 | frag_len = min_t(size_t, remote_miu, remaining_len); | 680 | frag_len = min_t(size_t, remote_miu, remaining_len); |
| 681 | 681 | ||
| @@ -684,8 +684,10 @@ int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock, | |||
| 684 | 684 | ||
| 685 | pdu = llcp_allocate_pdu(sock, LLCP_PDU_I, | 685 | pdu = llcp_allocate_pdu(sock, LLCP_PDU_I, |
| 686 | frag_len + LLCP_SEQUENCE_SIZE); | 686 | frag_len + LLCP_SEQUENCE_SIZE); |
| 687 | if (pdu == NULL) | 687 | if (pdu == NULL) { |
| 688 | kfree(msg_data); | ||
| 688 | return -ENOMEM; | 689 | return -ENOMEM; |
| 690 | } | ||
| 689 | 691 | ||
| 690 | skb_put(pdu, LLCP_SEQUENCE_SIZE); | 692 | skb_put(pdu, LLCP_SEQUENCE_SIZE); |
| 691 | 693 | ||
diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c index 1349074e1ffc..6184bd1fba3a 100644 --- a/net/nfc/llcp_core.c +++ b/net/nfc/llcp_core.c | |||
| @@ -943,7 +943,6 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local, | |||
| 943 | new_sock->local = nfc_llcp_local_get(local); | 943 | new_sock->local = nfc_llcp_local_get(local); |
| 944 | new_sock->rw = sock->rw; | 944 | new_sock->rw = sock->rw; |
| 945 | new_sock->miux = sock->miux; | 945 | new_sock->miux = sock->miux; |
| 946 | new_sock->remote_miu = local->remote_miu; | ||
| 947 | new_sock->nfc_protocol = sock->nfc_protocol; | 946 | new_sock->nfc_protocol = sock->nfc_protocol; |
| 948 | new_sock->dsap = ssap; | 947 | new_sock->dsap = ssap; |
| 949 | new_sock->target_idx = local->target_idx; | 948 | new_sock->target_idx = local->target_idx; |
diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 69fbc8dadba7..4a53bb58a463 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c | |||
| @@ -700,7 +700,6 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, | |||
| 700 | 700 | ||
| 701 | llcp_sock->dev = dev; | 701 | llcp_sock->dev = dev; |
| 702 | llcp_sock->local = nfc_llcp_local_get(local); | 702 | llcp_sock->local = nfc_llcp_local_get(local); |
| 703 | llcp_sock->remote_miu = llcp_sock->local->remote_miu; | ||
| 704 | llcp_sock->ssap = nfc_llcp_get_local_ssap(local); | 703 | llcp_sock->ssap = nfc_llcp_get_local_ssap(local); |
| 705 | if (llcp_sock->ssap == LLCP_SAP_MAX) { | 704 | if (llcp_sock->ssap == LLCP_SAP_MAX) { |
| 706 | ret = -ENOMEM; | 705 | ret = -ENOMEM; |
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index f0e955e3a385..46bda010bf11 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c | |||
| @@ -301,6 +301,9 @@ static int nci_open_device(struct nci_dev *ndev) | |||
| 301 | rc = __nci_request(ndev, nci_reset_req, 0, | 301 | rc = __nci_request(ndev, nci_reset_req, 0, |
| 302 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); | 302 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); |
| 303 | 303 | ||
| 304 | if (ndev->ops->setup(ndev)) | ||
| 305 | ndev->ops->setup(ndev); | ||
| 306 | |||
| 304 | if (!rc) { | 307 | if (!rc) { |
| 305 | rc = __nci_request(ndev, nci_init_req, 0, | 308 | rc = __nci_request(ndev, nci_init_req, 0, |
| 306 | msecs_to_jiffies(NCI_INIT_TIMEOUT)); | 309 | msecs_to_jiffies(NCI_INIT_TIMEOUT)); |
| @@ -361,6 +364,8 @@ static int nci_close_device(struct nci_dev *ndev) | |||
| 361 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); | 364 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); |
| 362 | clear_bit(NCI_INIT, &ndev->flags); | 365 | clear_bit(NCI_INIT, &ndev->flags); |
| 363 | 366 | ||
| 367 | del_timer_sync(&ndev->cmd_timer); | ||
| 368 | |||
| 364 | /* Flush cmd wq */ | 369 | /* Flush cmd wq */ |
| 365 | flush_workqueue(ndev->cmd_wq); | 370 | flush_workqueue(ndev->cmd_wq); |
| 366 | 371 | ||
| @@ -408,12 +413,26 @@ static int nci_dev_down(struct nfc_dev *nfc_dev) | |||
| 408 | return nci_close_device(ndev); | 413 | return nci_close_device(ndev); |
| 409 | } | 414 | } |
| 410 | 415 | ||
| 416 | int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val) | ||
| 417 | { | ||
| 418 | struct nci_set_config_param param; | ||
| 419 | |||
| 420 | if (!val || !len) | ||
| 421 | return 0; | ||
| 422 | |||
| 423 | param.id = id; | ||
| 424 | param.len = len; | ||
| 425 | param.val = val; | ||
| 426 | |||
| 427 | return __nci_request(ndev, nci_set_config_req, (unsigned long)¶m, | ||
| 428 | msecs_to_jiffies(NCI_SET_CONFIG_TIMEOUT)); | ||
| 429 | } | ||
| 430 | EXPORT_SYMBOL(nci_set_config); | ||
| 431 | |||
| 411 | static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev) | 432 | static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev) |
| 412 | { | 433 | { |
| 413 | struct nci_dev *ndev = nfc_get_drvdata(nfc_dev); | 434 | struct nci_dev *ndev = nfc_get_drvdata(nfc_dev); |
| 414 | struct nci_set_config_param param; | 435 | struct nci_set_config_param param; |
| 415 | __u8 local_gb[NFC_MAX_GT_LEN]; | ||
| 416 | int i; | ||
| 417 | 436 | ||
| 418 | param.val = nfc_get_local_general_bytes(nfc_dev, ¶m.len); | 437 | param.val = nfc_get_local_general_bytes(nfc_dev, ¶m.len); |
| 419 | if ((param.val == NULL) || (param.len == 0)) | 438 | if ((param.val == NULL) || (param.len == 0)) |
| @@ -422,11 +441,7 @@ static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev) | |||
| 422 | if (param.len > NFC_MAX_GT_LEN) | 441 | if (param.len > NFC_MAX_GT_LEN) |
| 423 | return -EINVAL; | 442 | return -EINVAL; |
| 424 | 443 | ||
| 425 | for (i = 0; i < param.len; i++) | ||
| 426 | local_gb[param.len-1-i] = param.val[i]; | ||
| 427 | |||
| 428 | param.id = NCI_PN_ATR_REQ_GEN_BYTES; | 444 | param.id = NCI_PN_ATR_REQ_GEN_BYTES; |
| 429 | param.val = local_gb; | ||
| 430 | 445 | ||
| 431 | return nci_request(ndev, nci_set_config_req, (unsigned long)¶m, | 446 | return nci_request(ndev, nci_set_config_req, (unsigned long)¶m, |
| 432 | msecs_to_jiffies(NCI_SET_CONFIG_TIMEOUT)); | 447 | msecs_to_jiffies(NCI_SET_CONFIG_TIMEOUT)); |
