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) { 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()
227 kfree_skb(info->rx_skb); in btuart_receive()
228 info->rx_skb = NULL; in btuart_receive()
235 *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); in btuart_receive()
236 info->rx_count--; in btuart_receive()
238 if (info->rx_count == 0) { in btuart_receive()
246 switch (info->rx_state) { in btuart_receive()
249 eh = hci_event_hdr(info->rx_skb); in btuart_receive()
250 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
251 info->rx_count = eh->plen; in btuart_receive()
255 ah = hci_acl_hdr(info->rx_skb); in btuart_receive()
257 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
258 info->rx_count = dlen; in btuart_receive()
262 sh = hci_sco_hdr(info->rx_skb); in btuart_receive()
263 info->rx_state = RECV_WAIT_DATA; in btuart_receive()
264 info->rx_count = sh->dlen; in btuart_receive()
268 hci_recv_frame(info->hdev, info->rx_skb); in btuart_receive()
269 info->rx_skb = NULL; in btuart_receive()
288 struct btuart_info *info = dev_inst; in btuart_interrupt() local
294 if (!info || !info->hdev) in btuart_interrupt()
298 iobase = info->p_dev->resource[0]->start; in btuart_interrupt()
300 spin_lock(&(info->lock)); in btuart_interrupt()
315 btuart_receive(info); in btuart_interrupt()
320 btuart_write_wakeup(info); in btuart_interrupt()
336 spin_unlock(&(info->lock)); in btuart_interrupt()
342 static void btuart_change_speed(struct btuart_info *info, in btuart_change_speed() argument
351 if (!info) { in btuart_change_speed()
356 iobase = info->p_dev->resource[0]->start; in btuart_change_speed()
358 spin_lock_irqsave(&(info->lock), flags); in btuart_change_speed()
390 spin_unlock_irqrestore(&(info->lock), flags); in btuart_change_speed()
400 struct btuart_info *info = hci_get_drvdata(hdev); in btuart_hci_flush() local
403 skb_queue_purge(&(info->txq)); in btuart_hci_flush()
425 struct btuart_info *info = hci_get_drvdata(hdev); in btuart_hci_send_frame() local
441 skb_queue_tail(&(info->txq), skb); in btuart_hci_send_frame()
443 btuart_write_wakeup(info); in btuart_hci_send_frame()
453 static int btuart_open(struct btuart_info *info) in btuart_open() argument
456 unsigned int iobase = info->p_dev->resource[0]->start; in btuart_open()
459 spin_lock_init(&(info->lock)); in btuart_open()
461 skb_queue_head_init(&(info->txq)); in btuart_open()
463 info->rx_state = RECV_WAIT_PACKET_TYPE; in btuart_open()
464 info->rx_count = 0; in btuart_open()
465 info->rx_skb = NULL; in btuart_open()
474 info->hdev = hdev; in btuart_open()
477 hci_set_drvdata(hdev, info); in btuart_open()
478 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); in btuart_open()
485 spin_lock_irqsave(&(info->lock), flags); in btuart_open()
500 spin_unlock_irqrestore(&(info->lock), flags); in btuart_open()
502 btuart_change_speed(info, DEFAULT_BAUD_RATE); in btuart_open()
510 info->hdev = NULL; in btuart_open()
519 static int btuart_close(struct btuart_info *info) in btuart_close() argument
522 unsigned int iobase = info->p_dev->resource[0]->start; in btuart_close()
523 struct hci_dev *hdev = info->hdev; in btuart_close()
530 spin_lock_irqsave(&(info->lock), flags); in btuart_close()
538 spin_unlock_irqrestore(&(info->lock), flags); in btuart_close()
548 struct btuart_info *info; in btuart_probe() local
551 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); in btuart_probe()
552 if (!info) in btuart_probe()
555 info->p_dev = link; in btuart_probe()
556 link->priv = info; in btuart_probe()
611 struct btuart_info *info = link->priv; in btuart_config() local
639 if (btuart_open(info) != 0) in btuart_config()
652 struct btuart_info *info = link->priv; in btuart_release() local
654 btuart_close(info); in btuart_release()