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

Commit 832d80ac authored by David S. Miller's avatar David S. Miller
Browse files
parents d5c073ca eb18fa5b
Loading
Loading
Loading
Loading
+10 −15
Original line number Original line Diff line number Diff line
@@ -478,27 +478,22 @@ out_no_pci:
	return err;
	return err;
}
}


static void iwl_pci_down(struct iwl_bus *bus)
{
	struct iwl_pci_bus *pci_bus = (struct iwl_pci_bus *) bus->bus_specific;

	pci_disable_msi(pci_bus->pci_dev);
	pci_iounmap(pci_bus->pci_dev, pci_bus->hw_base);
	pci_release_regions(pci_bus->pci_dev);
	pci_disable_device(pci_bus->pci_dev);
	pci_set_drvdata(pci_bus->pci_dev, NULL);

	kfree(bus);
}

static void __devexit iwl_pci_remove(struct pci_dev *pdev)
static void __devexit iwl_pci_remove(struct pci_dev *pdev)
{
{
	struct iwl_priv *priv = pci_get_drvdata(pdev);
	struct iwl_priv *priv = pci_get_drvdata(pdev);
	void *bus_specific = priv->bus->bus_specific;
	struct iwl_bus *bus = priv->bus;
	struct iwl_pci_bus *pci_bus = IWL_BUS_GET_PCI_BUS(bus);
	struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus);


	iwl_remove(priv);
	iwl_remove(priv);


	iwl_pci_down(bus_specific);
	pci_disable_msi(pci_dev);
	pci_iounmap(pci_dev, pci_bus->hw_base);
	pci_release_regions(pci_dev);
	pci_disable_device(pci_dev);
	pci_set_drvdata(pci_dev, NULL);

	kfree(bus);
}
}


#ifdef CONFIG_PM
#ifdef CONFIG_PM
+15 −5
Original line number Original line Diff line number Diff line
@@ -464,6 +464,15 @@ static bool rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
	int wcid, ack, pid;
	int wcid, ack, pid;
	int tx_wcid, tx_ack, tx_pid;
	int tx_wcid, tx_ack, tx_pid;


	if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
	    !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) {
		WARNING(entry->queue->rt2x00dev,
			"Data pending for entry %u in queue %u\n",
			entry->entry_idx, entry->queue->qid);
		cond_resched();
		return false;
	}

	wcid	= rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
	wcid	= rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
	ack	= rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
	ack	= rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
	pid	= rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
	pid	= rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
@@ -529,11 +538,10 @@ static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
			entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
			entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
			if (rt2800usb_txdone_entry_check(entry, reg))
			if (rt2800usb_txdone_entry_check(entry, reg))
				break;
				break;
			entry = NULL;
		}
		}


		if (!entry || rt2x00queue_empty(queue))
		if (entry)
			break;

			rt2800_txdone_entry(entry, reg);
			rt2800_txdone_entry(entry, reg);
	}
	}
}
}
@@ -558,8 +566,10 @@ static void rt2800usb_work_txdone(struct work_struct *work)
		while (!rt2x00queue_empty(queue)) {
		while (!rt2x00queue_empty(queue)) {
			entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
			entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);


			if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
			if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
			    !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
				break;
				break;

			if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
			if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
				rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
				rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
			else if (rt2x00queue_status_timeout(entry))
			else if (rt2x00queue_status_timeout(entry))
+7 −10
Original line number Original line Diff line number Diff line
@@ -262,23 +262,20 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb)
	struct queue_entry *entry = (struct queue_entry *)urb->context;
	struct queue_entry *entry = (struct queue_entry *)urb->context;
	struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
	struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;


	if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
	if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
		return;
		return;

	if (rt2x00dev->ops->lib->tx_dma_done)
		rt2x00dev->ops->lib->tx_dma_done(entry);

	/*
	 * Report the frame as DMA done
	 */
	rt2x00lib_dmadone(entry);

	/*
	/*
	 * Check if the frame was correctly uploaded
	 * Check if the frame was correctly uploaded
	 */
	 */
	if (urb->status)
	if (urb->status)
		set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
		set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
	/*
	 * Report the frame as DMA done
	 */
	rt2x00lib_dmadone(entry);


	if (rt2x00dev->ops->lib->tx_dma_done)
		rt2x00dev->ops->lib->tx_dma_done(entry);
	/*
	/*
	 * Schedule the delayed work for reading the TX status
	 * Schedule the delayed work for reading the TX status
	 * from the device.
	 * from the device.
+1 −5
Original line number Original line Diff line number Diff line
@@ -77,8 +77,6 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth)
	auth->sleep_auth = sleep_auth;
	auth->sleep_auth = sleep_auth;


	ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth));
	ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth));
	if (ret < 0)
		return ret;


out:
out:
	kfree(auth);
	kfree(auth);
@@ -624,10 +622,8 @@ int wl1271_acx_cca_threshold(struct wl1271 *wl)


	ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD,
	ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD,
				   detection, sizeof(*detection));
				   detection, sizeof(*detection));
	if (ret < 0) {
	if (ret < 0)
		wl1271_warning("failed to set cca threshold: %d", ret);
		wl1271_warning("failed to set cca threshold: %d", ret);
		return ret;
	}


out:
out:
	kfree(detection);
	kfree(detection);
+4 −1
Original line number Original line Diff line number Diff line
@@ -139,12 +139,15 @@ static int wl1271_tm_cmd_interrogate(struct wl1271 *wl, struct nlattr *tb[])


	if (ret < 0) {
	if (ret < 0) {
		wl1271_warning("testmode cmd interrogate failed: %d", ret);
		wl1271_warning("testmode cmd interrogate failed: %d", ret);
		kfree(cmd);
		return ret;
		return ret;
	}
	}


	skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd));
	skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd));
	if (!skb)
	if (!skb) {
		kfree(cmd);
		return -ENOMEM;
		return -ENOMEM;
	}


	NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd);
	NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd);