コード例 #1
0
void iwl_bg_rx_replenish(struct work_struct *data)
{
	struct iwl_trans_pcie *trans_pcie =
	    container_of(data, struct iwl_trans_pcie, rx_replenish);

	iwlagn_rx_replenish(trans_pcie->trans);
}
void iwl_bg_rx_replenish(struct work_struct *data)
{
	struct iwl_trans_pcie *trans_pcie =
	    container_of(data, struct iwl_trans_pcie, rx_replenish);
	struct iwl_trans *trans = trans_pcie->trans;

	if (test_bit(STATUS_EXIT_PENDING, &trans->shrd->status))
		return;

	mutex_lock(&trans->shrd->mutex);
	iwlagn_rx_replenish(trans);
	mutex_unlock(&trans->shrd->mutex);
}
コード例 #3
0
static int iwl_rx_init(struct iwl_priv *priv)
{
	struct iwl_rx_queue *rxq = &priv->rxq;
	int i, err;
	unsigned long flags;

	if (!rxq->bd) {
		err = iwl_trans_rx_alloc(priv);
		if (err)
			return err;
	}

	spin_lock_irqsave(&rxq->lock, flags);
	INIT_LIST_HEAD(&rxq->rx_free);
	INIT_LIST_HEAD(&rxq->rx_used);

	iwl_trans_rxq_free_rx_bufs(priv);

	for (i = 0; i < RX_QUEUE_SIZE; i++)
		rxq->queue[i] = NULL;

	/* Set us so that we have processed and used all buffers, but have
	 * not restocked the Rx queue with fresh buffers */
	rxq->read = rxq->write = 0;
	rxq->write_actual = 0;
	rxq->free_count = 0;
	spin_unlock_irqrestore(&rxq->lock, flags);

	iwlagn_rx_replenish(priv);

	iwl_trans_rx_hw_init(priv, rxq);

	spin_lock_irqsave(&priv->lock, flags);
	rxq->need_update = 1;
	iwl_rx_queue_update_write_ptr(priv, rxq);
	spin_unlock_irqrestore(&priv->lock, flags);

	return 0;
}