Lines Matching refs:link

67 	struct nfcsim_link *link;  in nfcsim_link_new()  local
69 link = kzalloc(sizeof(struct nfcsim_link), GFP_KERNEL); in nfcsim_link_new()
70 if (!link) in nfcsim_link_new()
73 mutex_init(&link->lock); in nfcsim_link_new()
74 init_waitqueue_head(&link->recv_wait); in nfcsim_link_new()
76 return link; in nfcsim_link_new()
79 static void nfcsim_link_free(struct nfcsim_link *link) in nfcsim_link_free() argument
81 dev_kfree_skb(link->skb); in nfcsim_link_free()
82 kfree(link); in nfcsim_link_free()
85 static void nfcsim_link_recv_wake(struct nfcsim_link *link) in nfcsim_link_recv_wake() argument
87 link->cond = 1; in nfcsim_link_recv_wake()
88 wake_up_interruptible(&link->recv_wait); in nfcsim_link_recv_wake()
91 static void nfcsim_link_set_skb(struct nfcsim_link *link, struct sk_buff *skb, in nfcsim_link_set_skb() argument
94 mutex_lock(&link->lock); in nfcsim_link_set_skb()
96 dev_kfree_skb(link->skb); in nfcsim_link_set_skb()
97 link->skb = skb; in nfcsim_link_set_skb()
98 link->rf_tech = rf_tech; in nfcsim_link_set_skb()
99 link->mode = mode; in nfcsim_link_set_skb()
101 mutex_unlock(&link->lock); in nfcsim_link_set_skb()
104 static void nfcsim_link_recv_cancel(struct nfcsim_link *link) in nfcsim_link_recv_cancel() argument
106 mutex_lock(&link->lock); in nfcsim_link_recv_cancel()
108 link->mode = NFCSIM_MODE_NONE; in nfcsim_link_recv_cancel()
110 mutex_unlock(&link->lock); in nfcsim_link_recv_cancel()
112 nfcsim_link_recv_wake(link); in nfcsim_link_recv_cancel()
115 static void nfcsim_link_shutdown(struct nfcsim_link *link) in nfcsim_link_shutdown() argument
117 mutex_lock(&link->lock); in nfcsim_link_shutdown()
119 link->shutdown = 1; in nfcsim_link_shutdown()
120 link->mode = NFCSIM_MODE_NONE; in nfcsim_link_shutdown()
122 mutex_unlock(&link->lock); in nfcsim_link_shutdown()
124 nfcsim_link_recv_wake(link); in nfcsim_link_shutdown()
127 static struct sk_buff *nfcsim_link_recv_skb(struct nfcsim_link *link, in nfcsim_link_recv_skb() argument
133 rc = wait_event_interruptible_timeout(link->recv_wait, in nfcsim_link_recv_skb()
134 link->cond, in nfcsim_link_recv_skb()
137 mutex_lock(&link->lock); in nfcsim_link_recv_skb()
139 skb = link->skb; in nfcsim_link_recv_skb()
140 link->skb = NULL; in nfcsim_link_recv_skb()
147 if (!skb || link->rf_tech != rf_tech || link->mode == mode) { in nfcsim_link_recv_skb()
152 if (link->shutdown) { in nfcsim_link_recv_skb()
158 mutex_unlock(&link->lock); in nfcsim_link_recv_skb()
165 link->cond = 0; in nfcsim_link_recv_skb()