Lines Matching refs:info
130 static void btuart_write_wakeup(struct btuart_info *info) in btuart_write_wakeup() argument
132 if (!info) { in btuart_write_wakeup()
137 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) { in btuart_write_wakeup()
138 set_bit(XMIT_WAKEUP, &(info->tx_state)); in btuart_write_wakeup()
143 unsigned int iobase = info->p_dev->resource[0]->start; in btuart_write_wakeup()
147 clear_bit(XMIT_WAKEUP, &(info->tx_state)); in btuart_write_wakeup()
149 if (!pcmcia_dev_present(info->p_dev)) in btuart_write_wakeup()
152 skb = skb_dequeue(&(info->txq)); in btuart_write_wakeup()
158 set_bit(XMIT_WAKEUP, &(info->tx_state)); in btuart_write_wakeup()
164 skb_queue_head(&(info->txq), skb); in btuart_write_wakeup()
167 info->hdev->stat.byte_tx += len; in btuart_write_wakeup()
169 } while (test_bit(XMIT_WAKEUP, &(info->tx_state))); in btuart_write_wakeup()
171 clear_bit(XMIT_SENDING, &(info->tx_state)); in btuart_write_wakeup()
175 static void btuart_receive(struct btuart_info *info) in btuart_receive() argument
180 if (!info) { in btuart_receive()
185 iobase = info->p_dev->resource[0]->start; in btuart_receive()
188 info->hdev->stat.byte_rx++; in btuart_receive()
191 if (info->rx_skb == NULL) { in btuart_receive()
192 info->rx_state = RECV_WAIT_PACKET_TYPE; in btuart_receive()
193 info->rx_count = 0; in btuart_receive()
194 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); in btuart_receive()
195 if (!info->rx_skb) { in btuart_receive()
201 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { in btuart_receive()
203 bt_cb(info->rx_skb)->pkt_type = inb(iobase + UART_RX); in btuart_receive()
205 switch (bt_cb(info->rx_skb)->pkt_type) { in btuart_receive()
208 info->rx_state = RECV_WAIT_EVENT_HEADER; in btuart_receive()
209 info->rx_count = HCI_EVENT_HDR_SIZE; in btuart_receive()
213 info->rx_state = RECV_WAIT_ACL_HEADER; in btuart_receive()
214 info->rx_count = HCI_ACL_HDR_SIZE; in btuart_receive()
218 info->rx_state = RECV_WAIT_SCO_HEADER; in btuart_receive()
219 info->rx_count = HCI_SCO_HDR_SIZE; in btuart_receive()
224 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); in btuart_receive()
225 info->hdev->stat.err_rx++; in btuart_receive()
226 clear_bit(HCI_RUNNING, &(info->hdev->flags)); in btuart_receive()
228 kfree_skb(info->rx_skb); in btuart_receive()
229 info->rx_skb = NULL; in btuart_receive()
236 *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); in btuart_receive()
237 info->rx_count--; in btuart_receive()
239 if (info->rx_count == 0) { in btuart_receive()
247 switch (info->rx_state) { in btuart_receive()
250 eh = hci_event_hdr(info->rx_skb); in btuart_receive()
251 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
252 info->rx_count = eh->plen; in btuart_receive()
256 ah = hci_acl_hdr(info->rx_skb); in btuart_receive()
258 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
259 info->rx_count = dlen; in btuart_receive()
263 sh = hci_sco_hdr(info->rx_skb); in btuart_receive()
264 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
265 info->rx_count = sh->dlen; in btuart_receive()
269 hci_recv_frame(info->hdev, info->rx_skb); in btuart_receive()
270 info->rx_skb = NULL; in btuart_receive()
289 struct btuart_info *info = dev_inst; in btuart_interrupt() local
295 if (!info || !info->hdev) in btuart_interrupt()
299 iobase = info->p_dev->resource[0]->start; in btuart_interrupt()
301 spin_lock(&(info->lock)); in btuart_interrupt()
316 btuart_receive(info); in btuart_interrupt()
321 btuart_write_wakeup(info); in btuart_interrupt()
337 spin_unlock(&(info->lock)); in btuart_interrupt()
343 static void btuart_change_speed(struct btuart_info *info, in btuart_change_speed() argument
352 if (!info) { in btuart_change_speed()
357 iobase = info->p_dev->resource[0]->start; in btuart_change_speed()
359 spin_lock_irqsave(&(info->lock), flags); in btuart_change_speed()
391 spin_unlock_irqrestore(&(info->lock), flags); in btuart_change_speed()
401 struct btuart_info *info = hci_get_drvdata(hdev); in btuart_hci_flush() local
404 skb_queue_purge(&(info->txq)); in btuart_hci_flush()
431 struct btuart_info *info = hci_get_drvdata(hdev); in btuart_hci_send_frame() local
447 skb_queue_tail(&(info->txq), skb); in btuart_hci_send_frame()
449 btuart_write_wakeup(info); in btuart_hci_send_frame()
459 static int btuart_open(struct btuart_info *info) in btuart_open() argument
462 unsigned int iobase = info->p_dev->resource[0]->start; in btuart_open()
465 spin_lock_init(&(info->lock)); in btuart_open()
467 skb_queue_head_init(&(info->txq)); in btuart_open()
469 info->rx_state = RECV_WAIT_PACKET_TYPE; in btuart_open()
470 info->rx_count = 0; in btuart_open()
471 info->rx_skb = NULL; in btuart_open()
480 info->hdev = hdev; in btuart_open()
483 hci_set_drvdata(hdev, info); in btuart_open()
484 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); in btuart_open()
491 spin_lock_irqsave(&(info->lock), flags); in btuart_open()
506 spin_unlock_irqrestore(&(info->lock), flags); in btuart_open()
508 btuart_change_speed(info, DEFAULT_BAUD_RATE); in btuart_open()
516 info->hdev = NULL; in btuart_open()
525 static int btuart_close(struct btuart_info *info) in btuart_close() argument
528 unsigned int iobase = info->p_dev->resource[0]->start; in btuart_close()
529 struct hci_dev *hdev = info->hdev; in btuart_close()
536 spin_lock_irqsave(&(info->lock), flags); in btuart_close()
544 spin_unlock_irqrestore(&(info->lock), flags); in btuart_close()
554 struct btuart_info *info; in btuart_probe() local
557 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); in btuart_probe()
558 if (!info) in btuart_probe()
561 info->p_dev = link; in btuart_probe()
562 link->priv = info; in btuart_probe()
617 struct btuart_info *info = link->priv; in btuart_config() local
645 if (btuart_open(info) != 0) in btuart_config()
658 struct btuart_info *info = link->priv; in btuart_release() local
660 btuart_close(info); in btuart_release()