Lines Matching refs:info

178 static void bt3c_write_wakeup(struct bt3c_info *info)  in bt3c_write_wakeup()  argument
180 if (!info) { in bt3c_write_wakeup()
185 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) in bt3c_write_wakeup()
189 unsigned int iobase = info->p_dev->resource[0]->start; in bt3c_write_wakeup()
193 if (!pcmcia_dev_present(info->p_dev)) in bt3c_write_wakeup()
196 skb = skb_dequeue(&(info->txq)); in bt3c_write_wakeup()
198 clear_bit(XMIT_SENDING, &(info->tx_state)); in bt3c_write_wakeup()
211 info->hdev->stat.byte_tx += len; in bt3c_write_wakeup()
217 static void bt3c_receive(struct bt3c_info *info) in bt3c_receive() argument
222 if (!info) { in bt3c_receive()
227 iobase = info->p_dev->resource[0]->start; in bt3c_receive()
234 info->hdev->stat.byte_rx++; in bt3c_receive()
237 if (info->rx_skb == NULL) { in bt3c_receive()
238 info->rx_state = RECV_WAIT_PACKET_TYPE; in bt3c_receive()
239 info->rx_count = 0; in bt3c_receive()
240 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); in bt3c_receive()
241 if (!info->rx_skb) { in bt3c_receive()
248 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { in bt3c_receive()
250 bt_cb(info->rx_skb)->pkt_type = inb(iobase + DATA_L); in bt3c_receive()
253 switch (bt_cb(info->rx_skb)->pkt_type) { in bt3c_receive()
256 info->rx_state = RECV_WAIT_EVENT_HEADER; in bt3c_receive()
257 info->rx_count = HCI_EVENT_HDR_SIZE; in bt3c_receive()
261 info->rx_state = RECV_WAIT_ACL_HEADER; in bt3c_receive()
262 info->rx_count = HCI_ACL_HDR_SIZE; in bt3c_receive()
266 info->rx_state = RECV_WAIT_SCO_HEADER; in bt3c_receive()
267 info->rx_count = HCI_SCO_HDR_SIZE; in bt3c_receive()
272 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); in bt3c_receive()
273 info->hdev->stat.err_rx++; in bt3c_receive()
274 clear_bit(HCI_RUNNING, &(info->hdev->flags)); in bt3c_receive()
276 kfree_skb(info->rx_skb); in bt3c_receive()
277 info->rx_skb = NULL; in bt3c_receive()
286 *skb_put(info->rx_skb, 1) = x; in bt3c_receive()
288 info->rx_count--; in bt3c_receive()
290 if (info->rx_count == 0) { in bt3c_receive()
297 switch (info->rx_state) { in bt3c_receive()
300 eh = hci_event_hdr(info->rx_skb); in bt3c_receive()
301 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
302 info->rx_count = eh->plen; in bt3c_receive()
306 ah = hci_acl_hdr(info->rx_skb); in bt3c_receive()
308 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
309 info->rx_count = dlen; in bt3c_receive()
313 sh = hci_sco_hdr(info->rx_skb); in bt3c_receive()
314 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
315 info->rx_count = sh->dlen; in bt3c_receive()
319 hci_recv_frame(info->hdev, info->rx_skb); in bt3c_receive()
320 info->rx_skb = NULL; in bt3c_receive()
337 struct bt3c_info *info = dev_inst; in bt3c_interrupt() local
342 if (!info || !info->hdev) in bt3c_interrupt()
346 iobase = info->p_dev->resource[0]->start; in bt3c_interrupt()
348 spin_lock(&(info->lock)); in bt3c_interrupt()
359 BT_INFO("%s: Antenna %s", info->hdev->name, in bt3c_interrupt()
363 bt3c_receive(info); in bt3c_interrupt()
365 clear_bit(XMIT_SENDING, &(info->tx_state)); in bt3c_interrupt()
366 bt3c_write_wakeup(info); in bt3c_interrupt()
376 spin_unlock(&(info->lock)); in bt3c_interrupt()
388 struct bt3c_info *info = hci_get_drvdata(hdev); in bt3c_hci_flush() local
391 skb_queue_purge(&(info->txq)); in bt3c_hci_flush()
418 struct bt3c_info *info = hci_get_drvdata(hdev); in bt3c_hci_send_frame() local
435 skb_queue_tail(&(info->txq), skb); in bt3c_hci_send_frame()
437 spin_lock_irqsave(&(info->lock), flags); in bt3c_hci_send_frame()
439 bt3c_write_wakeup(info); in bt3c_hci_send_frame()
441 spin_unlock_irqrestore(&(info->lock), flags); in bt3c_hci_send_frame()
451 static int bt3c_load_firmware(struct bt3c_info *info, in bt3c_load_firmware() argument
460 iobase = info->p_dev->resource[0]->start; in bt3c_load_firmware()
537 static int bt3c_open(struct bt3c_info *info) in bt3c_open() argument
543 spin_lock_init(&(info->lock)); in bt3c_open()
545 skb_queue_head_init(&(info->txq)); in bt3c_open()
547 info->rx_state = RECV_WAIT_PACKET_TYPE; in bt3c_open()
548 info->rx_count = 0; in bt3c_open()
549 info->rx_skb = NULL; in bt3c_open()
558 info->hdev = hdev; in bt3c_open()
561 hci_set_drvdata(hdev, info); in bt3c_open()
562 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); in bt3c_open()
570 err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev); in bt3c_open()
576 err = bt3c_load_firmware(info, firmware->data, firmware->size); in bt3c_open()
598 info->hdev = NULL; in bt3c_open()
604 static int bt3c_close(struct bt3c_info *info) in bt3c_close() argument
606 struct hci_dev *hdev = info->hdev; in bt3c_close()
621 struct bt3c_info *info; in bt3c_probe() local
624 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); in bt3c_probe()
625 if (!info) in bt3c_probe()
628 info->p_dev = link; in bt3c_probe()
629 link->priv = info; in bt3c_probe()
684 struct bt3c_info *info = link->priv; in bt3c_config() local
712 if (bt3c_open(info) != 0) in bt3c_config()
725 struct bt3c_info *info = link->priv; in bt3c_release() local
727 bt3c_close(info); in bt3c_release()