Lines Matching full:local
23 static void nfc_llcp_rx_skb(struct nfc_llcp_local *local, struct sk_buff *skb);
47 struct nfc_llcp_local *local = sock->local; in nfc_llcp_socket_purge() local
53 if (local == NULL) in nfc_llcp_socket_purge()
56 /* Search for local pending SKBs that are related to this socket */ in nfc_llcp_socket_purge()
57 skb_queue_walk_safe(&local->tx_queue, s, tmp) { in nfc_llcp_socket_purge()
61 skb_unlink(s, &local->tx_queue); in nfc_llcp_socket_purge()
66 static void nfc_llcp_socket_release(struct nfc_llcp_local *local, bool device, in nfc_llcp_socket_release() argument
73 skb_queue_purge(&local->tx_queue); in nfc_llcp_socket_release()
75 write_lock(&local->sockets.lock); in nfc_llcp_socket_release()
77 sk_for_each_safe(sk, tmp, &local->sockets.head) { in nfc_llcp_socket_release()
118 write_unlock(&local->sockets.lock); in nfc_llcp_socket_release()
124 write_lock(&local->raw_sockets.lock); in nfc_llcp_socket_release()
126 sk_for_each_safe(sk, tmp, &local->raw_sockets.head) { in nfc_llcp_socket_release()
143 write_unlock(&local->raw_sockets.lock); in nfc_llcp_socket_release()
146 static struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) in nfc_llcp_local_get() argument
149 * we hold a reference to local, we also need to hold a reference to in nfc_llcp_local_get()
152 if (!nfc_get_device(local->dev->idx)) in nfc_llcp_local_get()
155 kref_get(&local->ref); in nfc_llcp_local_get()
157 return local; in nfc_llcp_local_get()
160 static void local_cleanup(struct nfc_llcp_local *local) in local_cleanup() argument
162 nfc_llcp_socket_release(local, false, ENXIO); in local_cleanup()
163 timer_delete_sync(&local->link_timer); in local_cleanup()
164 skb_queue_purge(&local->tx_queue); in local_cleanup()
165 cancel_work_sync(&local->tx_work); in local_cleanup()
166 cancel_work_sync(&local->rx_work); in local_cleanup()
167 cancel_work_sync(&local->timeout_work); in local_cleanup()
168 kfree_skb(local->rx_pending); in local_cleanup()
169 local->rx_pending = NULL; in local_cleanup()
170 timer_delete_sync(&local->sdreq_timer); in local_cleanup()
171 cancel_work_sync(&local->sdreq_timeout_work); in local_cleanup()
172 nfc_llcp_free_sdp_tlv_list(&local->pending_sdreqs); in local_cleanup()
177 struct nfc_llcp_local *local; in local_release() local
179 local = container_of(ref, struct nfc_llcp_local, ref); in local_release()
181 local_cleanup(local); in local_release()
182 kfree(local); in local_release()
185 int nfc_llcp_local_put(struct nfc_llcp_local *local) in nfc_llcp_local_put() argument
190 if (local == NULL) in nfc_llcp_local_put()
193 dev = local->dev; in nfc_llcp_local_put()
195 ret = kref_put(&local->ref, local_release); in nfc_llcp_local_put()
201 static struct nfc_llcp_sock *nfc_llcp_sock_get(struct nfc_llcp_local *local, in nfc_llcp_sock_get() argument
212 read_lock(&local->sockets.lock); in nfc_llcp_sock_get()
216 sk_for_each(sk, &local->sockets.head) { in nfc_llcp_sock_get()
226 read_unlock(&local->sockets.lock); in nfc_llcp_sock_get()
238 struct nfc_llcp_local *local = container_of(work, struct nfc_llcp_local, in nfc_llcp_timeout_work() local
241 nfc_dep_link_down(local->dev); in nfc_llcp_timeout_work()
246 struct nfc_llcp_local *local = timer_container_of(local, t, in nfc_llcp_symm_timer() local
251 schedule_work(&local->timeout_work); in nfc_llcp_symm_timer()
260 struct nfc_llcp_local *local = container_of(work, struct nfc_llcp_local, in nfc_llcp_sdreq_timeout_work() local
263 mutex_lock(&local->sdreq_lock); in nfc_llcp_sdreq_timeout_work()
265 time = jiffies - msecs_to_jiffies(3 * local->remote_lto); in nfc_llcp_sdreq_timeout_work()
267 hlist_for_each_entry_safe(sdp, n, &local->pending_sdreqs, node) { in nfc_llcp_sdreq_timeout_work()
278 if (!hlist_empty(&local->pending_sdreqs)) in nfc_llcp_sdreq_timeout_work()
279 mod_timer(&local->sdreq_timer, in nfc_llcp_sdreq_timeout_work()
280 jiffies + msecs_to_jiffies(3 * local->remote_lto)); in nfc_llcp_sdreq_timeout_work()
282 mutex_unlock(&local->sdreq_lock); in nfc_llcp_sdreq_timeout_work()
285 nfc_genl_llc_send_sdres(local->dev, &nl_sdres_list); in nfc_llcp_sdreq_timeout_work()
290 struct nfc_llcp_local *local = timer_container_of(local, t, in nfc_llcp_sdreq_timer() local
293 schedule_work(&local->sdreq_timeout_work); in nfc_llcp_sdreq_timer()
298 struct nfc_llcp_local *local; in nfc_llcp_find_local() local
302 list_for_each_entry(local, &llcp_devices, list) in nfc_llcp_find_local()
303 if (local->dev == dev) { in nfc_llcp_find_local()
304 res = nfc_llcp_local_get(local); in nfc_llcp_find_local()
314 struct nfc_llcp_local *local, *tmp; in nfc_llcp_remove_local() local
317 list_for_each_entry_safe(local, tmp, &llcp_devices, list) in nfc_llcp_remove_local()
318 if (local->dev == dev) { in nfc_llcp_remove_local()
319 spin_lock(&local->tx_queue.lock); in nfc_llcp_remove_local()
320 list_del_init(&local->list); in nfc_llcp_remove_local()
321 spin_unlock(&local->tx_queue.lock); in nfc_llcp_remove_local()
323 return local; in nfc_llcp_remove_local()
363 struct nfc_llcp_sock *nfc_llcp_sock_from_sn(struct nfc_llcp_local *local, in nfc_llcp_sock_from_sn() argument
375 read_lock(&local->sockets.lock); in nfc_llcp_sock_from_sn()
379 sk_for_each(sk, &local->sockets.head) { in nfc_llcp_sock_from_sn()
407 read_unlock(&local->sockets.lock); in nfc_llcp_sock_from_sn()
414 u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local, in nfc_llcp_get_sdp_ssap() argument
417 mutex_lock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
427 if (test_bit(ssap, &local->local_wks)) { in nfc_llcp_get_sdp_ssap()
428 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
433 set_bit(ssap, &local->local_wks); in nfc_llcp_get_sdp_ssap()
434 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
443 if (nfc_llcp_sock_from_sn(local, sock->service_name, in nfc_llcp_get_sdp_ssap()
446 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
451 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
456 if (!test_bit(sock->ssap, &local->local_wks)) { in nfc_llcp_get_sdp_ssap()
457 set_bit(sock->ssap, &local->local_wks); in nfc_llcp_get_sdp_ssap()
458 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
464 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_sdp_ssap()
469 u8 nfc_llcp_get_local_ssap(struct nfc_llcp_local *local) in nfc_llcp_get_local_ssap() argument
473 mutex_lock(&local->sdp_lock); in nfc_llcp_get_local_ssap()
475 local_ssap = find_first_zero_bit(&local->local_sap, LLCP_LOCAL_NUM_SAP); in nfc_llcp_get_local_ssap()
477 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_local_ssap()
481 set_bit(local_ssap, &local->local_sap); in nfc_llcp_get_local_ssap()
483 mutex_unlock(&local->sdp_lock); in nfc_llcp_get_local_ssap()
488 void nfc_llcp_put_ssap(struct nfc_llcp_local *local, u8 ssap) in nfc_llcp_put_ssap() argument
495 sdp = &local->local_wks; in nfc_llcp_put_ssap()
500 sdp = &local->local_sdp; in nfc_llcp_put_ssap()
501 client_cnt = &local->local_sdp_cnt[local_ssap]; in nfc_llcp_put_ssap()
505 mutex_lock(&local->sdp_lock); in nfc_llcp_put_ssap()
515 l_sock = nfc_llcp_sock_get(local, ssap, LLCP_SAP_SDP); in nfc_llcp_put_ssap()
522 mutex_unlock(&local->sdp_lock); in nfc_llcp_put_ssap()
527 sdp = &local->local_sap; in nfc_llcp_put_ssap()
532 mutex_lock(&local->sdp_lock); in nfc_llcp_put_ssap()
536 mutex_unlock(&local->sdp_lock); in nfc_llcp_put_ssap()
539 static u8 nfc_llcp_reserve_sdp_ssap(struct nfc_llcp_local *local) in nfc_llcp_reserve_sdp_ssap() argument
543 mutex_lock(&local->sdp_lock); in nfc_llcp_reserve_sdp_ssap()
545 ssap = find_first_zero_bit(&local->local_sdp, LLCP_SDP_NUM_SAP); in nfc_llcp_reserve_sdp_ssap()
547 mutex_unlock(&local->sdp_lock); in nfc_llcp_reserve_sdp_ssap()
554 set_bit(ssap, &local->local_sdp); in nfc_llcp_reserve_sdp_ssap()
556 mutex_unlock(&local->sdp_lock); in nfc_llcp_reserve_sdp_ssap()
561 static int nfc_llcp_build_gb(struct nfc_llcp_local *local) in nfc_llcp_build_gb() argument
567 __be16 wks = cpu_to_be16(local->local_wks); in nfc_llcp_build_gb()
580 lto_tlv = nfc_llcp_build_tlv(LLCP_TLV_LTO, &local->lto, 1, <o_length); in nfc_llcp_build_gb()
587 pr_debug("Local wks 0x%lx\n", local->local_wks); in nfc_llcp_build_gb()
595 miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&local->miux, 0, in nfc_llcp_build_gb()
610 gb_cur = local->gb; in nfc_llcp_build_gb()
627 local->gb_len = gb_len; in nfc_llcp_build_gb()
640 struct nfc_llcp_local *local; in nfc_llcp_general_bytes() local
642 local = nfc_llcp_find_local(dev); in nfc_llcp_general_bytes()
643 if (local == NULL) { in nfc_llcp_general_bytes()
648 nfc_llcp_build_gb(local); in nfc_llcp_general_bytes()
650 *general_bytes_len = local->gb_len; in nfc_llcp_general_bytes()
652 nfc_llcp_local_put(local); in nfc_llcp_general_bytes()
654 return local->gb; in nfc_llcp_general_bytes()
659 struct nfc_llcp_local *local; in nfc_llcp_set_remote_gb() local
665 local = nfc_llcp_find_local(dev); in nfc_llcp_set_remote_gb()
666 if (local == NULL) { in nfc_llcp_set_remote_gb()
671 memset(local->remote_gb, 0, NFC_MAX_GT_LEN); in nfc_llcp_set_remote_gb()
672 memcpy(local->remote_gb, gb, gb_len); in nfc_llcp_set_remote_gb()
673 local->remote_gb_len = gb_len; in nfc_llcp_set_remote_gb()
675 if (memcmp(local->remote_gb, llcp_magic, 3)) { in nfc_llcp_set_remote_gb()
681 err = nfc_llcp_parse_gb_tlv(local, in nfc_llcp_set_remote_gb()
682 &local->remote_gb[3], in nfc_llcp_set_remote_gb()
683 local->remote_gb_len - 3); in nfc_llcp_set_remote_gb()
685 nfc_llcp_local_put(local); in nfc_llcp_set_remote_gb()
721 void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local, in nfc_llcp_send_to_raw_sock() argument
728 read_lock(&local->raw_sockets.lock); in nfc_llcp_send_to_raw_sock()
730 sk_for_each(sk, &local->raw_sockets.head) { in nfc_llcp_send_to_raw_sock()
743 data[0] = local->dev ? local->dev->idx : 0xFF; in nfc_llcp_send_to_raw_sock()
756 read_unlock(&local->raw_sockets.lock); in nfc_llcp_send_to_raw_sock()
763 struct nfc_llcp_local *local = container_of(work, struct nfc_llcp_local, in nfc_llcp_tx_work() local
769 skb = skb_dequeue(&local->tx_queue); in nfc_llcp_tx_work()
776 nfc_llcp_send_symm(local->dev); in nfc_llcp_tx_work()
778 skb_queue_head(&local->tx_queue, skb); in nfc_llcp_tx_work()
779 nfc_llcp_send_symm(local->dev); in nfc_llcp_tx_work()
794 nfc_llcp_send_to_raw_sock(local, skb, in nfc_llcp_tx_work()
797 ret = nfc_data_exchange(local->dev, local->target_idx, in nfc_llcp_tx_work()
798 skb, nfc_llcp_recv, local); in nfc_llcp_tx_work()
810 nfc_llcp_send_symm(local->dev); in nfc_llcp_tx_work()
814 mod_timer(&local->link_timer, in nfc_llcp_tx_work()
815 jiffies + msecs_to_jiffies(2 * local->remote_lto)); in nfc_llcp_tx_work()
818 static struct nfc_llcp_sock *nfc_llcp_connecting_sock_get(struct nfc_llcp_local *local, in nfc_llcp_connecting_sock_get() argument
824 read_lock(&local->connecting_sockets.lock); in nfc_llcp_connecting_sock_get()
826 sk_for_each(sk, &local->connecting_sockets.head) { in nfc_llcp_connecting_sock_get()
838 read_unlock(&local->connecting_sockets.lock); in nfc_llcp_connecting_sock_get()
843 static struct nfc_llcp_sock *nfc_llcp_sock_get_sn(struct nfc_llcp_local *local, in nfc_llcp_sock_get_sn() argument
846 return nfc_llcp_sock_from_sn(local, sn, sn_len, true); in nfc_llcp_sock_get_sn()
873 static void nfc_llcp_recv_ui(struct nfc_llcp_local *local, in nfc_llcp_recv_ui() argument
890 llcp_sock = nfc_llcp_sock_get(local, dsap, LLCP_SAP_SDP); in nfc_llcp_recv_ui()
909 static void nfc_llcp_recv_connect(struct nfc_llcp_local *local, in nfc_llcp_recv_connect() argument
922 sock = nfc_llcp_sock_get(local, dsap, LLCP_SAP_SDP); in nfc_llcp_recv_connect()
939 sock = nfc_llcp_sock_get_sn(local, sn, sn_len); in nfc_llcp_recv_connect()
958 u8 ssap = nfc_llcp_reserve_sdp_ssap(local); in nfc_llcp_recv_connect()
982 new_sock->local = nfc_llcp_local_get(local); in nfc_llcp_recv_connect()
983 if (!new_sock->local) { in nfc_llcp_recv_connect()
991 new_sock->dev = local->dev; in nfc_llcp_recv_connect()
996 new_sock->target_idx = local->target_idx; in nfc_llcp_recv_connect()
1005 &local->local_sdp_cnt[sock->ssap - LLCP_WKS_NUM_SAP]; in nfc_llcp_recv_connect()
1016 nfc_llcp_sock_link(&local->sockets, new_sk); in nfc_llcp_recv_connect()
1020 nfc_get_device(local->dev->idx); in nfc_llcp_recv_connect()
1037 nfc_llcp_send_dm(local, dsap, ssap, reason); in nfc_llcp_recv_connect()
1043 struct nfc_llcp_local *local = sock->local; in nfc_llcp_queue_i_frames() local
1061 skb_queue_tail(&local->tx_queue, pdu); in nfc_llcp_queue_i_frames()
1068 static void nfc_llcp_recv_hdlc(struct nfc_llcp_local *local, in nfc_llcp_recv_hdlc() argument
1083 llcp_sock = nfc_llcp_sock_get(local, dsap, ssap); in nfc_llcp_recv_hdlc()
1085 nfc_llcp_send_dm(local, dsap, ssap, LLCP_DM_NOCONN); in nfc_llcp_recv_hdlc()
1139 skb_queue_head(&local->tx_queue, s); in nfc_llcp_recv_hdlc()
1155 static void nfc_llcp_recv_disc(struct nfc_llcp_local *local, in nfc_llcp_recv_disc() argument
1167 nfc_dep_link_down(local->dev); in nfc_llcp_recv_disc()
1171 llcp_sock = nfc_llcp_sock_get(local, dsap, ssap); in nfc_llcp_recv_disc()
1173 nfc_llcp_send_dm(local, dsap, ssap, LLCP_DM_NOCONN); in nfc_llcp_recv_disc()
1188 nfc_put_device(local->dev); in nfc_llcp_recv_disc()
1193 nfc_llcp_send_dm(local, dsap, ssap, LLCP_DM_DISC); in nfc_llcp_recv_disc()
1199 static void nfc_llcp_recv_cc(struct nfc_llcp_local *local, in nfc_llcp_recv_cc() argument
1209 llcp_sock = nfc_llcp_connecting_sock_get(local, dsap); in nfc_llcp_recv_cc()
1212 nfc_llcp_send_dm(local, dsap, ssap, LLCP_DM_NOCONN); in nfc_llcp_recv_cc()
1220 nfc_llcp_sock_unlink(&local->connecting_sockets, sk); in nfc_llcp_recv_cc()
1221 nfc_llcp_sock_link(&local->sockets, sk); in nfc_llcp_recv_cc()
1233 static void nfc_llcp_recv_dm(struct nfc_llcp_local *local, in nfc_llcp_recv_dm() argument
1249 llcp_sock = nfc_llcp_connecting_sock_get(local, dsap); in nfc_llcp_recv_dm()
1253 llcp_sock = nfc_llcp_sock_get(local, dsap, ssap); in nfc_llcp_recv_dm()
1271 static void nfc_llcp_recv_snl(struct nfc_llcp_local *local, in nfc_llcp_recv_snl() argument
1319 llcp_sock = nfc_llcp_sock_from_sn(local, service_name, in nfc_llcp_recv_snl()
1335 sap = nfc_llcp_reserve_sdp_ssap(local); in nfc_llcp_recv_snl()
1346 &local->local_sdp_cnt[sap - in nfc_llcp_recv_snl()
1370 mutex_lock(&local->sdreq_lock); in nfc_llcp_recv_snl()
1374 hlist_for_each_entry(sdp, &local->pending_sdreqs, node) { in nfc_llcp_recv_snl()
1390 mutex_unlock(&local->sdreq_lock); in nfc_llcp_recv_snl()
1404 nfc_genl_llc_send_sdres(local->dev, &nl_sdres_list); in nfc_llcp_recv_snl()
1407 nfc_llcp_send_snl_sdres(local, &llc_sdres_list, sdres_tlvs_len); in nfc_llcp_recv_snl()
1410 static void nfc_llcp_recv_agf(struct nfc_llcp_local *local, struct sk_buff *skb) in nfc_llcp_recv_agf() argument
1446 nfc_llcp_rx_skb(local, new_skb); in nfc_llcp_recv_agf()
1454 static void nfc_llcp_rx_skb(struct nfc_llcp_local *local, struct sk_buff *skb) in nfc_llcp_rx_skb() argument
1475 nfc_llcp_recv_ui(local, skb); in nfc_llcp_rx_skb()
1480 nfc_llcp_recv_connect(local, skb); in nfc_llcp_rx_skb()
1485 nfc_llcp_recv_disc(local, skb); in nfc_llcp_rx_skb()
1490 nfc_llcp_recv_cc(local, skb); in nfc_llcp_rx_skb()
1495 nfc_llcp_recv_dm(local, skb); in nfc_llcp_rx_skb()
1500 nfc_llcp_recv_snl(local, skb); in nfc_llcp_rx_skb()
1507 nfc_llcp_recv_hdlc(local, skb); in nfc_llcp_rx_skb()
1512 nfc_llcp_recv_agf(local, skb); in nfc_llcp_rx_skb()
1519 struct nfc_llcp_local *local = container_of(work, struct nfc_llcp_local, in nfc_llcp_rx_work() local
1523 skb = local->rx_pending; in nfc_llcp_rx_work()
1531 nfc_llcp_send_to_raw_sock(local, skb, NFC_DIRECTION_RX); in nfc_llcp_rx_work()
1533 nfc_llcp_rx_skb(local, skb); in nfc_llcp_rx_work()
1535 schedule_work(&local->tx_work); in nfc_llcp_rx_work()
1536 kfree_skb(local->rx_pending); in nfc_llcp_rx_work()
1537 local->rx_pending = NULL; in nfc_llcp_rx_work()
1540 static void __nfc_llcp_recv(struct nfc_llcp_local *local, struct sk_buff *skb) in __nfc_llcp_recv() argument
1542 local->rx_pending = skb; in __nfc_llcp_recv()
1543 timer_delete(&local->link_timer); in __nfc_llcp_recv()
1544 schedule_work(&local->rx_work); in __nfc_llcp_recv()
1549 struct nfc_llcp_local *local = (struct nfc_llcp_local *) data; in nfc_llcp_recv() local
1556 __nfc_llcp_recv(local, skb); in nfc_llcp_recv()
1561 struct nfc_llcp_local *local; in nfc_llcp_data_received() local
1563 local = nfc_llcp_find_local(dev); in nfc_llcp_data_received()
1564 if (local == NULL) { in nfc_llcp_data_received()
1569 __nfc_llcp_recv(local, skb); in nfc_llcp_data_received()
1571 nfc_llcp_local_put(local); in nfc_llcp_data_received()
1578 struct nfc_llcp_local *local; in nfc_llcp_mac_is_down() local
1580 local = nfc_llcp_find_local(dev); in nfc_llcp_mac_is_down()
1581 if (local == NULL) in nfc_llcp_mac_is_down()
1584 local->remote_miu = LLCP_DEFAULT_MIU; in nfc_llcp_mac_is_down()
1585 local->remote_lto = LLCP_DEFAULT_LTO; in nfc_llcp_mac_is_down()
1588 nfc_llcp_socket_release(local, true, 0); in nfc_llcp_mac_is_down()
1590 nfc_llcp_local_put(local); in nfc_llcp_mac_is_down()
1596 struct nfc_llcp_local *local; in nfc_llcp_mac_is_up() local
1600 local = nfc_llcp_find_local(dev); in nfc_llcp_mac_is_up()
1601 if (local == NULL) in nfc_llcp_mac_is_up()
1604 local->target_idx = target_idx; in nfc_llcp_mac_is_up()
1605 local->comm_mode = comm_mode; in nfc_llcp_mac_is_up()
1606 local->rf_mode = rf_mode; in nfc_llcp_mac_is_up()
1611 schedule_work(&local->tx_work); in nfc_llcp_mac_is_up()
1613 mod_timer(&local->link_timer, in nfc_llcp_mac_is_up()
1614 jiffies + msecs_to_jiffies(local->remote_lto)); in nfc_llcp_mac_is_up()
1617 nfc_llcp_local_put(local); in nfc_llcp_mac_is_up()
1622 struct nfc_llcp_local *local; in nfc_llcp_register_device() local
1624 local = kzalloc_obj(struct nfc_llcp_local); in nfc_llcp_register_device()
1625 if (local == NULL) in nfc_llcp_register_device()
1628 /* As we are going to initialize local's refcount, we need to get the in nfc_llcp_register_device()
1632 local->dev = nfc_get_device(ndev->idx); in nfc_llcp_register_device()
1633 if (!local->dev) { in nfc_llcp_register_device()
1634 kfree(local); in nfc_llcp_register_device()
1638 INIT_LIST_HEAD(&local->list); in nfc_llcp_register_device()
1639 kref_init(&local->ref); in nfc_llcp_register_device()
1640 mutex_init(&local->sdp_lock); in nfc_llcp_register_device()
1641 timer_setup(&local->link_timer, nfc_llcp_symm_timer, 0); in nfc_llcp_register_device()
1643 skb_queue_head_init(&local->tx_queue); in nfc_llcp_register_device()
1644 INIT_WORK(&local->tx_work, nfc_llcp_tx_work); in nfc_llcp_register_device()
1646 local->rx_pending = NULL; in nfc_llcp_register_device()
1647 INIT_WORK(&local->rx_work, nfc_llcp_rx_work); in nfc_llcp_register_device()
1649 INIT_WORK(&local->timeout_work, nfc_llcp_timeout_work); in nfc_llcp_register_device()
1651 rwlock_init(&local->sockets.lock); in nfc_llcp_register_device()
1652 rwlock_init(&local->connecting_sockets.lock); in nfc_llcp_register_device()
1653 rwlock_init(&local->raw_sockets.lock); in nfc_llcp_register_device()
1655 local->lto = 150; /* 1500 ms */ in nfc_llcp_register_device()
1656 local->rw = LLCP_MAX_RW; in nfc_llcp_register_device()
1657 local->miux = cpu_to_be16(LLCP_MAX_MIUX); in nfc_llcp_register_device()
1658 local->local_wks = 0x1; /* LLC Link Management */ in nfc_llcp_register_device()
1660 nfc_llcp_build_gb(local); in nfc_llcp_register_device()
1662 local->remote_miu = LLCP_DEFAULT_MIU; in nfc_llcp_register_device()
1663 local->remote_lto = LLCP_DEFAULT_LTO; in nfc_llcp_register_device()
1665 mutex_init(&local->sdreq_lock); in nfc_llcp_register_device()
1666 INIT_HLIST_HEAD(&local->pending_sdreqs); in nfc_llcp_register_device()
1667 timer_setup(&local->sdreq_timer, nfc_llcp_sdreq_timer, 0); in nfc_llcp_register_device()
1668 INIT_WORK(&local->sdreq_timeout_work, nfc_llcp_sdreq_timeout_work); in nfc_llcp_register_device()
1671 list_add(&local->list, &llcp_devices); in nfc_llcp_register_device()
1679 struct nfc_llcp_local *local = nfc_llcp_remove_local(dev); in nfc_llcp_unregister_device() local
1681 if (local == NULL) { in nfc_llcp_unregister_device()
1686 local_cleanup(local); in nfc_llcp_unregister_device()
1688 nfc_llcp_local_put(local); in nfc_llcp_unregister_device()