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()
210 info->hdev->stat.byte_tx += len; in bt3c_write_wakeup()
216 static void bt3c_receive(struct bt3c_info *info) in bt3c_receive() argument
221 if (!info) { in bt3c_receive()
226 iobase = info->p_dev->resource[0]->start; in bt3c_receive()
233 info->hdev->stat.byte_rx++; in bt3c_receive()
236 if (!info->rx_skb) { in bt3c_receive()
237 info->rx_state = RECV_WAIT_PACKET_TYPE; in bt3c_receive()
238 info->rx_count = 0; in bt3c_receive()
239 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); in bt3c_receive()
240 if (!info->rx_skb) { in bt3c_receive()
247 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { in bt3c_receive()
249 bt_cb(info->rx_skb)->pkt_type = inb(iobase + DATA_L); in bt3c_receive()
252 switch (bt_cb(info->rx_skb)->pkt_type) { in bt3c_receive()
255 info->rx_state = RECV_WAIT_EVENT_HEADER; in bt3c_receive()
256 info->rx_count = HCI_EVENT_HDR_SIZE; in bt3c_receive()
260 info->rx_state = RECV_WAIT_ACL_HEADER; in bt3c_receive()
261 info->rx_count = HCI_ACL_HDR_SIZE; in bt3c_receive()
265 info->rx_state = RECV_WAIT_SCO_HEADER; in bt3c_receive()
266 info->rx_count = HCI_SCO_HDR_SIZE; in bt3c_receive()
271 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); in bt3c_receive()
272 info->hdev->stat.err_rx++; in bt3c_receive()
274 kfree_skb(info->rx_skb); in bt3c_receive()
275 info->rx_skb = NULL; in bt3c_receive()
284 *skb_put(info->rx_skb, 1) = x; in bt3c_receive()
286 info->rx_count--; in bt3c_receive()
288 if (info->rx_count == 0) { in bt3c_receive()
295 switch (info->rx_state) { in bt3c_receive()
298 eh = hci_event_hdr(info->rx_skb); in bt3c_receive()
299 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
300 info->rx_count = eh->plen; in bt3c_receive()
304 ah = hci_acl_hdr(info->rx_skb); in bt3c_receive()
306 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
307 info->rx_count = dlen; in bt3c_receive()
311 sh = hci_sco_hdr(info->rx_skb); in bt3c_receive()
312 info->rx_state = RECV_WAIT_DATA; in bt3c_receive()
313 info->rx_count = sh->dlen; in bt3c_receive()
317 hci_recv_frame(info->hdev, info->rx_skb); in bt3c_receive()
318 info->rx_skb = NULL; in bt3c_receive()
335 struct bt3c_info *info = dev_inst; in bt3c_interrupt() local
340 if (!info || !info->hdev) in bt3c_interrupt()
344 iobase = info->p_dev->resource[0]->start; in bt3c_interrupt()
346 spin_lock(&(info->lock)); in bt3c_interrupt()
357 BT_INFO("%s: Antenna %s", info->hdev->name, in bt3c_interrupt()
361 bt3c_receive(info); in bt3c_interrupt()
363 clear_bit(XMIT_SENDING, &(info->tx_state)); in bt3c_interrupt()
364 bt3c_write_wakeup(info); in bt3c_interrupt()
374 spin_unlock(&(info->lock)); in bt3c_interrupt()
386 struct bt3c_info *info = hci_get_drvdata(hdev); in bt3c_hci_flush() local
389 skb_queue_purge(&(info->txq)); in bt3c_hci_flush()
411 struct bt3c_info *info = hci_get_drvdata(hdev); in bt3c_hci_send_frame() local
428 skb_queue_tail(&(info->txq), skb); in bt3c_hci_send_frame()
430 spin_lock_irqsave(&(info->lock), flags); in bt3c_hci_send_frame()
432 bt3c_write_wakeup(info); in bt3c_hci_send_frame()
434 spin_unlock_irqrestore(&(info->lock), flags); in bt3c_hci_send_frame()
444 static int bt3c_load_firmware(struct bt3c_info *info, in bt3c_load_firmware() argument
454 iobase = info->p_dev->resource[0]->start; in bt3c_load_firmware()
534 static int bt3c_open(struct bt3c_info *info) in bt3c_open() argument
540 spin_lock_init(&(info->lock)); in bt3c_open()
542 skb_queue_head_init(&(info->txq)); in bt3c_open()
544 info->rx_state = RECV_WAIT_PACKET_TYPE; in bt3c_open()
545 info->rx_count = 0; in bt3c_open()
546 info->rx_skb = NULL; in bt3c_open()
555 info->hdev = hdev; in bt3c_open()
558 hci_set_drvdata(hdev, info); in bt3c_open()
559 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); in bt3c_open()
567 err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev); in bt3c_open()
573 err = bt3c_load_firmware(info, firmware->data, firmware->size); in bt3c_open()
595 info->hdev = NULL; in bt3c_open()
601 static int bt3c_close(struct bt3c_info *info) in bt3c_close() argument
603 struct hci_dev *hdev = info->hdev; in bt3c_close()
618 struct bt3c_info *info; in bt3c_probe() local
621 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); in bt3c_probe()
622 if (!info) in bt3c_probe()
625 info->p_dev = link; in bt3c_probe()
626 link->priv = info; in bt3c_probe()
681 struct bt3c_info *info = link->priv; in bt3c_config() local
709 if (bt3c_open(info) != 0) in bt3c_config()
722 struct bt3c_info *info = link->priv; in bt3c_release() local
724 bt3c_close(info); in bt3c_release()