}
-static void bt3c_write_wakeup(bt3c_info_t *info, int from)
+static void bt3c_write_wakeup(bt3c_info_t *info)
{
- unsigned long flags;
-
if (!info) {
BT_ERR("Unknown device");
return;
if (test_and_set_bit(XMIT_SENDING, &(info->tx_state)))
return;
- spin_lock_irqsave(&(info->lock), flags);
-
do {
register unsigned int iobase = info->link.io.BasePort1;
register struct sk_buff *skb;
info->hdev->stat.byte_tx += len;
} while (0);
-
- spin_unlock_irqrestore(&(info->lock), flags);
}
if (stat & 0x0002) {
//BT_ERR("Ack (stat=0x%04x)", stat);
clear_bit(XMIT_SENDING, &(info->tx_state));
- bt3c_write_wakeup(info, 1);
+ bt3c_write_wakeup(info);
}
bt3c_io_write(iobase, 0x7001, 0x0000);
{
bt3c_info_t *info;
struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
+ unsigned long flags;
if (!hdev) {
BT_ERR("Frame for unknown HCI device (hdev=NULL)");
memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
skb_queue_tail(&(info->txq), skb);
- bt3c_write_wakeup(info, 0);
+ spin_lock_irqsave(&(info->lock), flags);
+
+ bt3c_write_wakeup(info);
+
+ spin_unlock_irqrestore(&(info->lock), flags);
return 0;
}