static void release_lock(void) { struct hci_smd_data *hsmd = &hs; BT_DBG("Releasing Rx Lock"); if (is_rx_q_empty((unsigned long)hsmd->hdev) && wake_lock_active(&hs.wake_lock_rx)) wake_unlock(&hs.wake_lock_rx); }
static void schedule_timer(unsigned long arg) { struct hci_dev *hdev = (struct hci_dev *) arg; struct hci_smd_data *hsmd = &hs; BT_DBG("%s Schedule Rx timer", hdev->name); if (is_rx_q_empty(arg) && wake_lock_active(&hs.wake_lock_rx)) { BT_DBG("%s RX queue empty", hdev->name); wake_unlock(&hs.wake_lock_rx); } else{ BT_DBG("%s RX queue not empty", hdev->name); mod_timer(&hsmd->rx_q_timer, jiffies + msecs_to_jiffies(RX_Q_MONITOR)); } }
/* Rx timer callback function */ static void schedule_timer(unsigned long arg) { struct hci_dev *hdev = (struct hci_dev *) arg; struct hci_smd_data *hsmd = &hs; BT_DBG("%s Schedule Rx timer", hdev->name); if (is_rx_q_empty(arg) && wake_lock_active(&hs.wake_lock_rx)) { BT_DBG("%s RX queue empty", hdev->name); /* * Since the queue is empty, its ideal * to release the wake lock on Rx */ wake_unlock(&hs.wake_lock_rx); } else{ BT_DBG("%s RX queue not empty", hdev->name); /* * Restart the timer to monitor whether the Rx queue is * empty for releasing the Rx wake lock */ mod_timer(&hsmd->rx_q_timer, jiffies + msecs_to_jiffies(RX_Q_MONITOR)); } }