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

Commit e775ed7c authored by David Woodhouse's avatar David Woodhouse Committed by David S. Miller
Browse files

libertas: Consolidate lbs_host_to_card_done() function.



As we move towards having this done by a state machine, start by having
a single 'stuff sent' function, which is called by if_usb/if_sdio/if_cs
after sending both data and commands.

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f5ece8fc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -86,5 +86,6 @@ int lbs_stop_card(struct lbs_private *priv);
int lbs_add_mesh(struct lbs_private *priv, struct device *dev);
void lbs_remove_mesh(struct lbs_private *priv);
int lbs_reset_device(struct lbs_private *priv);
void lbs_host_to_card_done(struct lbs_private *priv);

#endif
+3 −9
Original line number Diff line number Diff line
@@ -258,14 +258,8 @@ static irqreturn_t if_cs_interrupt(int irq, void *data)
		card->priv->adapter->surpriseremoved = 1;

	} else {
		if(int_cause & IF_CS_H_IC_TX_OVER) {
			card->priv->dnld_sent = DNLD_RES_RECEIVED;
			if (!card->priv->adapter->cur_cmd)
				wake_up_interruptible(&card->priv->waitq);

			if (card->priv->adapter->connect_status == LBS_CONNECTED)
				netif_wake_queue(card->priv->dev);
		}
		if (int_cause & IF_CS_H_IC_TX_OVER)
			lbs_host_to_card_done(card->priv);

		/* clear interrupt */
		if_cs_write16(card, IF_CS_C_INT_CAUSE, int_cause & IF_CS_C_IC_MASK);
+3 −6
Original line number Diff line number Diff line
@@ -835,12 +835,9 @@ static void if_sdio_interrupt(struct sdio_func *func)
	 * Ignore the define name, this really means the card has
	 * successfully received the command.
	 */
	if (cause & IF_SDIO_H_INT_DNLD) {
		if ((card->priv->dnld_sent == DNLD_DATA_SENT) &&
			(card->priv->adapter->connect_status == LBS_CONNECTED))
			netif_wake_queue(card->priv->dev);
		card->priv->dnld_sent = DNLD_RES_RECEIVED;
	}
	if (cause & IF_SDIO_H_INT_DNLD)
		lbs_host_to_card_done(card->priv);


	if (cause & IF_SDIO_H_INT_UPLD) {
		ret = if_sdio_card_to_host(card);
+2 −16
Original line number Diff line number Diff line
@@ -66,22 +66,8 @@ static void if_usb_write_bulk_callback(struct urb *urb)
		/* Used for both firmware TX and regular TX.  priv isn't
		 * valid at firmware load time.
		 */
		if (priv) {
			struct lbs_adapter *adapter = priv->adapter;
			struct net_device *dev = priv->dev;

			priv->dnld_sent = DNLD_RES_RECEIVED;

			/* Wake main thread if commands are pending */
			if (!adapter->cur_cmd)
				wake_up_interruptible(&priv->waitq);

			if (adapter->connect_status == LBS_CONNECTED)
				netif_wake_queue(dev);

			if (priv->mesh_dev && (adapter->mesh_connect_status == LBS_CONNECTED))
				netif_wake_queue(priv->mesh_dev);
		}
		if (priv)
			lbs_host_to_card_done(priv);
	} else {
		/* print the failure status number for debug */
		lbs_pr_info("URB in failure status: %d\n", urb->status);
+18 −0
Original line number Diff line number Diff line
@@ -616,6 +616,24 @@ static void lbs_tx_timeout(struct net_device *dev)
	lbs_deb_leave(LBS_DEB_TX);
}

void lbs_host_to_card_done(struct lbs_private *priv)
{
	struct lbs_adapter *adapter = priv->adapter;

	priv->dnld_sent = DNLD_RES_RECEIVED;

	/* Wake main thread if commands are pending */
	if (!adapter->cur_cmd)
		wake_up_interruptible(&priv->waitq);

	if (priv->dev && adapter->connect_status == LBS_CONNECTED)
		netif_wake_queue(priv->dev);

	if (priv->mesh_dev && adapter->mesh_connect_status == LBS_CONNECTED)
		netif_wake_queue(priv->mesh_dev);
}
EXPORT_SYMBOL_GPL(lbs_host_to_card_done);

/**
 *  @brief This function returns the network statistics
 *