Lines Matching refs:data
49 struct vhci_data *data = hci_get_drvdata(hdev);
51 skb_queue_purge(&data->readq);
58 struct vhci_data *data = hci_get_drvdata(hdev);
60 skb_queue_purge(&data->readq);
67 struct vhci_data *data = hci_get_drvdata(hdev);
71 mutex_lock(&data->open_mutex);
72 skb_queue_tail(&data->readq, skb);
73 mutex_unlock(&data->open_mutex);
75 wake_up_interruptible(&data->read_wait);
79 static int __vhci_create_device(struct vhci_data *data, __u8 opcode)
85 if (data->hdev)
108 data->hdev = hdev;
112 hci_set_drvdata(hdev, data);
132 data->hdev = NULL;
142 skb_queue_tail(&data->readq, skb);
144 wake_up_interruptible(&data->read_wait);
148 static int vhci_create_device(struct vhci_data *data, __u8 opcode)
152 mutex_lock(&data->open_mutex);
153 err = __vhci_create_device(data, opcode);
154 mutex_unlock(&data->open_mutex);
159 static inline ssize_t vhci_get_user(struct vhci_data *data,
179 pkt_type = *((__u8 *) skb->data);
187 if (!data->hdev) {
194 ret = hci_recv_frame(data->hdev, skb);
198 cancel_delayed_work_sync(&data->open_timeout);
200 opcode = *((__u8 *) skb->data);
210 ret = vhci_create_device(data, opcode);
221 static inline ssize_t vhci_put_user(struct vhci_data *data,
230 if (copy_to_user(ptr, skb->data, len))
233 if (!data->hdev)
236 data->hdev->stat.byte_tx += len;
240 data->hdev->stat.cmd_tx++;
243 data->hdev->stat.acl_tx++;
246 data->hdev->stat.sco_tx++;
256 struct vhci_data *data = file->private_data;
261 skb = skb_dequeue(&data->readq);
263 ret = vhci_put_user(data, skb, buf, count);
265 skb_queue_head(&data->readq, skb);
276 ret = wait_event_interruptible(data->read_wait,
277 !skb_queue_empty(&data->readq));
288 struct vhci_data *data = file->private_data;
290 return vhci_get_user(data, from);
295 struct vhci_data *data = file->private_data;
297 poll_wait(file, &data->read_wait, wait);
299 if (!skb_queue_empty(&data->readq))
307 struct vhci_data *data = container_of(work, struct vhci_data,
310 vhci_create_device(data, amp ? HCI_AMP : HCI_PRIMARY);
315 struct vhci_data *data;
317 data = kzalloc(sizeof(struct vhci_data), GFP_KERNEL);
318 if (!data)
321 skb_queue_head_init(&data->readq);
322 init_waitqueue_head(&data->read_wait);
324 mutex_init(&data->open_mutex);
325 INIT_DELAYED_WORK(&data->open_timeout, vhci_open_timeout);
327 file->private_data = data;
330 schedule_delayed_work(&data->open_timeout, msecs_to_jiffies(1000));
337 struct vhci_data *data = file->private_data;
340 cancel_delayed_work_sync(&data->open_timeout);
342 hdev = data->hdev;
349 skb_queue_purge(&data->readq);
351 kfree(data);