Hi Marcel,
On Sat, Feb 16, 2013, Marcel Holtmann wrote:
quoted
static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
{
+ struct hci_transaction *transaction;
struct sk_buff *skb;
BT_DBG("%s %ld", hdev->name, opt);
/* Driver initialization */
+ if (hci_start_transaction(hdev) < 0)
+ return;
+
+ hci_transaction_lock(hdev);
+
+ transaction = hdev->build_transaction;
+
/* Special commands */
while ((skb = skb_dequeue(&hdev->driver_init))) {
bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
skb->dev = (void *) hdev;
-
- skb_queue_tail(&hdev->cmd_q, skb);
- queue_work(hdev->workqueue, &hdev->cmd_work);
+ skb_queue_tail(&transaction->cmd_q, skb);
}
skb_queue_purge(&hdev->driver_init);
if we have to touch this one, then please look at my hdev->setup()
patches I send a while back. We should get these merged so that drivers
can use a transaction within the driver and remove the driver_init queue
actually.
Alright. I'll look into it.
Johan