Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9ca8bf1 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg
Browse files

Bluetooth: Move handling of HCI_RUNNING flag into core



Setting and clearing of HCI_RUNNING flag in each and every driver is
just duplicating the same code all over the place. So instead of having
the driver do it in their hdev->open and hdev->close callbacks, set it
globally in the core transport handling.

Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 73d0d3c8
Loading
Loading
Loading
Loading
+0 −8
Original line number Original line Diff line number Diff line
@@ -422,17 +422,12 @@ static int bfusb_open(struct hci_dev *hdev)


	BT_DBG("hdev %p bfusb %p", hdev, data);
	BT_DBG("hdev %p bfusb %p", hdev, data);


	if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
		return 0;

	write_lock_irqsave(&data->lock, flags);
	write_lock_irqsave(&data->lock, flags);


	err = bfusb_rx_submit(data, NULL);
	err = bfusb_rx_submit(data, NULL);
	if (!err) {
	if (!err) {
		for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
		for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
			bfusb_rx_submit(data, NULL);
			bfusb_rx_submit(data, NULL);
	} else {
		clear_bit(HCI_RUNNING, &hdev->flags);
	}
	}


	write_unlock_irqrestore(&data->lock, flags);
	write_unlock_irqrestore(&data->lock, flags);
@@ -458,9 +453,6 @@ static int bfusb_close(struct hci_dev *hdev)


	BT_DBG("hdev %p bfusb %p", hdev, data);
	BT_DBG("hdev %p bfusb %p", hdev, data);


	if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
		return 0;

	write_lock_irqsave(&data->lock, flags);
	write_lock_irqsave(&data->lock, flags);
	write_unlock_irqrestore(&data->lock, flags);
	write_unlock_irqrestore(&data->lock, flags);


+0 −6
Original line number Original line Diff line number Diff line
@@ -628,9 +628,6 @@ static int bluecard_hci_open(struct hci_dev *hdev)
	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
		bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
		bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);


	if (test_and_set_bit(HCI_RUNNING, &(hdev->flags)))
		return 0;

	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
		unsigned int iobase = info->p_dev->resource[0]->start;
		unsigned int iobase = info->p_dev->resource[0]->start;


@@ -646,9 +643,6 @@ static int bluecard_hci_close(struct hci_dev *hdev)
{
{
	struct bluecard_info *info = hci_get_drvdata(hdev);
	struct bluecard_info *info = hci_get_drvdata(hdev);


	if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
		return 0;

	bluecard_hci_flush(hdev);
	bluecard_hci_flush(hdev);


	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
	if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
+0 −8
Original line number Original line Diff line number Diff line
@@ -304,9 +304,6 @@ static int bpa10x_open(struct hci_dev *hdev)


	BT_DBG("%s", hdev->name);
	BT_DBG("%s", hdev->name);


	if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
		return 0;

	err = bpa10x_submit_intr_urb(hdev);
	err = bpa10x_submit_intr_urb(hdev);
	if (err < 0)
	if (err < 0)
		goto error;
		goto error;
@@ -320,8 +317,6 @@ static int bpa10x_open(struct hci_dev *hdev)
error:
error:
	usb_kill_anchored_urbs(&data->rx_anchor);
	usb_kill_anchored_urbs(&data->rx_anchor);


	clear_bit(HCI_RUNNING, &hdev->flags);

	return err;
	return err;
}
}


@@ -331,9 +326,6 @@ static int bpa10x_close(struct hci_dev *hdev)


	BT_DBG("%s", hdev->name);
	BT_DBG("%s", hdev->name);


	if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
		return 0;

	usb_kill_anchored_urbs(&data->rx_anchor);
	usb_kill_anchored_urbs(&data->rx_anchor);


	return 0;
	return 0;
+0 −6
Original line number Original line Diff line number Diff line
@@ -270,7 +270,6 @@ static void bt3c_receive(struct bt3c_info *info)
				/* Unknown packet */
				/* Unknown packet */
				BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type);
				BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type);
				info->hdev->stat.err_rx++;
				info->hdev->stat.err_rx++;
				clear_bit(HCI_RUNNING, &(info->hdev->flags));


				kfree_skb(info->rx_skb);
				kfree_skb(info->rx_skb);
				info->rx_skb = NULL;
				info->rx_skb = NULL;
@@ -395,17 +394,12 @@ static int bt3c_hci_flush(struct hci_dev *hdev)


static int bt3c_hci_open(struct hci_dev *hdev)
static int bt3c_hci_open(struct hci_dev *hdev)
{
{
	set_bit(HCI_RUNNING, &(hdev->flags));

	return 0;
	return 0;
}
}




static int bt3c_hci_close(struct hci_dev *hdev)
static int bt3c_hci_close(struct hci_dev *hdev)
{
{
	if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
		return 0;

	bt3c_hci_flush(hdev);
	bt3c_hci_flush(hdev);


	return 0;
	return 0;
+0 −5
Original line number Original line Diff line number Diff line
@@ -470,9 +470,6 @@ static int btmrvl_close(struct hci_dev *hdev)
{
{
	struct btmrvl_private *priv = hci_get_drvdata(hdev);
	struct btmrvl_private *priv = hci_get_drvdata(hdev);


	if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
		return 0;

	skb_queue_purge(&priv->adapter->tx_queue);
	skb_queue_purge(&priv->adapter->tx_queue);


	return 0;
	return 0;
@@ -480,8 +477,6 @@ static int btmrvl_close(struct hci_dev *hdev)


static int btmrvl_open(struct hci_dev *hdev)
static int btmrvl_open(struct hci_dev *hdev)
{
{
	set_bit(HCI_RUNNING, &hdev->flags);

	return 0;
	return 0;
}
}


Loading