Lines Matching refs:data

64 	struct vhci_data *data = hci_get_drvdata(hdev);  in vhci_close_dev()  local
66 skb_queue_purge(&data->readq); in vhci_close_dev()
73 struct vhci_data *data = hci_get_drvdata(hdev); in vhci_flush() local
75 skb_queue_purge(&data->readq); in vhci_flush()
82 struct vhci_data *data = hci_get_drvdata(hdev); in vhci_send_frame() local
85 skb_queue_tail(&data->readq, skb); in vhci_send_frame()
87 wake_up_interruptible(&data->read_wait); in vhci_send_frame()
91 static int __vhci_create_device(struct vhci_data *data, __u8 opcode) in __vhci_create_device() argument
97 if (data->hdev) in __vhci_create_device()
120 data->hdev = hdev; in __vhci_create_device()
124 hci_set_drvdata(hdev, data); in __vhci_create_device()
142 data->hdev = NULL; in __vhci_create_device()
152 skb_queue_tail(&data->readq, skb); in __vhci_create_device()
154 wake_up_interruptible(&data->read_wait); in __vhci_create_device()
158 static int vhci_create_device(struct vhci_data *data, __u8 opcode) in vhci_create_device() argument
162 mutex_lock(&data->open_mutex); in vhci_create_device()
163 err = __vhci_create_device(data, opcode); in vhci_create_device()
164 mutex_unlock(&data->open_mutex); in vhci_create_device()
169 static inline ssize_t vhci_get_user(struct vhci_data *data, in vhci_get_user() argument
189 pkt_type = *((__u8 *) skb->data); in vhci_get_user()
196 if (!data->hdev) { in vhci_get_user()
203 ret = hci_recv_frame(data->hdev, skb); in vhci_get_user()
207 cancel_delayed_work_sync(&data->open_timeout); in vhci_get_user()
209 opcode = *((__u8 *) skb->data); in vhci_get_user()
219 ret = vhci_create_device(data, opcode); in vhci_get_user()
230 static inline ssize_t vhci_put_user(struct vhci_data *data, in vhci_put_user() argument
239 if (copy_to_user(ptr, skb->data, len)) in vhci_put_user()
242 if (!data->hdev) in vhci_put_user()
245 data->hdev->stat.byte_tx += len; in vhci_put_user()
249 data->hdev->stat.cmd_tx++; in vhci_put_user()
252 data->hdev->stat.acl_tx++; in vhci_put_user()
255 data->hdev->stat.sco_tx++; in vhci_put_user()
265 struct vhci_data *data = file->private_data; in vhci_read() local
270 skb = skb_dequeue(&data->readq); in vhci_read()
272 ret = vhci_put_user(data, skb, buf, count); in vhci_read()
274 skb_queue_head(&data->readq, skb); in vhci_read()
285 ret = wait_event_interruptible(data->read_wait, in vhci_read()
286 !skb_queue_empty(&data->readq)); in vhci_read()
297 struct vhci_data *data = file->private_data; in vhci_write() local
299 return vhci_get_user(data, from); in vhci_write()
304 struct vhci_data *data = file->private_data; in vhci_poll() local
306 poll_wait(file, &data->read_wait, wait); in vhci_poll()
308 if (!skb_queue_empty(&data->readq)) in vhci_poll()
316 struct vhci_data *data = container_of(work, struct vhci_data, in vhci_open_timeout() local
319 vhci_create_device(data, amp ? HCI_AMP : HCI_BREDR); in vhci_open_timeout()
324 struct vhci_data *data; in vhci_open() local
326 data = kzalloc(sizeof(struct vhci_data), GFP_KERNEL); in vhci_open()
327 if (!data) in vhci_open()
330 skb_queue_head_init(&data->readq); in vhci_open()
331 init_waitqueue_head(&data->read_wait); in vhci_open()
333 mutex_init(&data->open_mutex); in vhci_open()
334 INIT_DELAYED_WORK(&data->open_timeout, vhci_open_timeout); in vhci_open()
336 file->private_data = data; in vhci_open()
339 schedule_delayed_work(&data->open_timeout, msecs_to_jiffies(1000)); in vhci_open()
346 struct vhci_data *data = file->private_data; in vhci_release() local
349 cancel_delayed_work_sync(&data->open_timeout); in vhci_release()
351 hdev = data->hdev; in vhci_release()
358 skb_queue_purge(&data->readq); in vhci_release()
360 kfree(data); in vhci_release()