Lines Matching refs:info

129 static void dtl1_write_wakeup(struct dtl1_info *info)  in dtl1_write_wakeup()  argument
131 if (!info) { in dtl1_write_wakeup()
136 if (test_bit(XMIT_WAITING, &(info->tx_state))) { in dtl1_write_wakeup()
137 set_bit(XMIT_WAKEUP, &(info->tx_state)); in dtl1_write_wakeup()
141 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) { in dtl1_write_wakeup()
142 set_bit(XMIT_WAKEUP, &(info->tx_state)); in dtl1_write_wakeup()
147 unsigned int iobase = info->p_dev->resource[0]->start; in dtl1_write_wakeup()
151 clear_bit(XMIT_WAKEUP, &(info->tx_state)); in dtl1_write_wakeup()
153 if (!pcmcia_dev_present(info->p_dev)) in dtl1_write_wakeup()
156 skb = skb_dequeue(&(info->txq)); in dtl1_write_wakeup()
164 set_bit(XMIT_WAITING, &(info->tx_state)); in dtl1_write_wakeup()
168 skb_queue_head(&(info->txq), skb); in dtl1_write_wakeup()
171 info->hdev->stat.byte_tx += len; in dtl1_write_wakeup()
173 } while (test_bit(XMIT_WAKEUP, &(info->tx_state))); in dtl1_write_wakeup()
175 clear_bit(XMIT_SENDING, &(info->tx_state)); in dtl1_write_wakeup()
179 static void dtl1_control(struct dtl1_info *info, struct sk_buff *skb) in dtl1_control() argument
191 if (((info->flowmask & 0x07) == 0) && ((flowmask & 0x07) != 0)) { in dtl1_control()
192 clear_bit(XMIT_WAITING, &(info->tx_state)); in dtl1_control()
193 dtl1_write_wakeup(info); in dtl1_control()
196 info->flowmask = flowmask; in dtl1_control()
202 static void dtl1_receive(struct dtl1_info *info) in dtl1_receive() argument
208 if (!info) { in dtl1_receive()
213 iobase = info->p_dev->resource[0]->start; in dtl1_receive()
216 info->hdev->stat.byte_rx++; in dtl1_receive()
219 if (info->rx_skb == NULL) { in dtl1_receive()
220 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); in dtl1_receive()
221 if (!info->rx_skb) { in dtl1_receive()
223 info->rx_state = RECV_WAIT_NSH; in dtl1_receive()
224 info->rx_count = NSHL; in dtl1_receive()
229 *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); in dtl1_receive()
230 nsh = (struct nsh *)info->rx_skb->data; in dtl1_receive()
232 info->rx_count--; in dtl1_receive()
234 if (info->rx_count == 0) { in dtl1_receive()
236 switch (info->rx_state) { in dtl1_receive()
238 info->rx_state = RECV_WAIT_DATA; in dtl1_receive()
239 info->rx_count = nsh->len + (nsh->len & 0x0001); in dtl1_receive()
242 bt_cb(info->rx_skb)->pkt_type = nsh->type; in dtl1_receive()
246 info->rx_skb->tail--; in dtl1_receive()
247 info->rx_skb->len--; in dtl1_receive()
251 skb_pull(info->rx_skb, NSHL); in dtl1_receive()
253 switch (bt_cb(info->rx_skb)->pkt_type) { in dtl1_receive()
256 dtl1_control(info, info->rx_skb); in dtl1_receive()
262 bt_cb(info->rx_skb)->pkt_type &= 0x0f; in dtl1_receive()
263 hci_recv_frame(info->hdev, info->rx_skb); in dtl1_receive()
267 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); in dtl1_receive()
268 kfree_skb(info->rx_skb); in dtl1_receive()
272 info->rx_state = RECV_WAIT_NSH; in dtl1_receive()
273 info->rx_count = NSHL; in dtl1_receive()
274 info->rx_skb = NULL; in dtl1_receive()
290 struct dtl1_info *info = dev_inst; in dtl1_interrupt() local
297 if (!info || !info->hdev) in dtl1_interrupt()
301 iobase = info->p_dev->resource[0]->start; in dtl1_interrupt()
303 spin_lock(&(info->lock)); in dtl1_interrupt()
318 dtl1_receive(info); in dtl1_interrupt()
323 dtl1_write_wakeup(info); in dtl1_interrupt()
341 if (info->ri_latch ^ (msr & UART_MSR_RI)) { in dtl1_interrupt()
342 info->ri_latch = msr & UART_MSR_RI; in dtl1_interrupt()
343 clear_bit(XMIT_WAITING, &(info->tx_state)); in dtl1_interrupt()
344 dtl1_write_wakeup(info); in dtl1_interrupt()
348 spin_unlock(&(info->lock)); in dtl1_interrupt()
366 struct dtl1_info *info = hci_get_drvdata(hdev); in dtl1_hci_flush() local
369 skb_queue_purge(&(info->txq)); in dtl1_hci_flush()
385 struct dtl1_info *info = hci_get_drvdata(hdev); in dtl1_hci_send_frame() local
420 skb_queue_tail(&(info->txq), s); in dtl1_hci_send_frame()
422 dtl1_write_wakeup(info); in dtl1_hci_send_frame()
434 static int dtl1_open(struct dtl1_info *info) in dtl1_open() argument
437 unsigned int iobase = info->p_dev->resource[0]->start; in dtl1_open()
440 spin_lock_init(&(info->lock)); in dtl1_open()
442 skb_queue_head_init(&(info->txq)); in dtl1_open()
444 info->rx_state = RECV_WAIT_NSH; in dtl1_open()
445 info->rx_count = NSHL; in dtl1_open()
446 info->rx_skb = NULL; in dtl1_open()
448 set_bit(XMIT_WAITING, &(info->tx_state)); in dtl1_open()
457 info->hdev = hdev; in dtl1_open()
460 hci_set_drvdata(hdev, info); in dtl1_open()
461 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); in dtl1_open()
468 spin_lock_irqsave(&(info->lock), flags); in dtl1_open()
480 info->ri_latch = inb(info->p_dev->resource[0]->start + UART_MSR) in dtl1_open()
486 spin_unlock_irqrestore(&(info->lock), flags); in dtl1_open()
494 info->hdev = NULL; in dtl1_open()
503 static int dtl1_close(struct dtl1_info *info) in dtl1_close() argument
506 unsigned int iobase = info->p_dev->resource[0]->start; in dtl1_close()
507 struct hci_dev *hdev = info->hdev; in dtl1_close()
514 spin_lock_irqsave(&(info->lock), flags); in dtl1_close()
522 spin_unlock_irqrestore(&(info->lock), flags); in dtl1_close()
532 struct dtl1_info *info; in dtl1_probe() local
535 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); in dtl1_probe()
536 if (!info) in dtl1_probe()
539 info->p_dev = link; in dtl1_probe()
540 link->priv = info; in dtl1_probe()
550 struct dtl1_info *info = link->priv; in dtl1_detach() local
552 dtl1_close(info); in dtl1_detach()
569 struct dtl1_info *info = link->priv; in dtl1_config() local
586 ret = dtl1_open(info); in dtl1_config()