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

Commit 0e3afe5b authored by Ivo van Doorn's avatar Ivo van Doorn Committed by John W. Linville
Browse files

rt2x00: Correctly kill beacon queue



USB devices upload their beacon and then automatically send
it out every beacon interval. However when killing a TX queue
we only kill the URB and not the actual transmission of the beacon.

This will reset the Beacon register to prevent any beacons from
being transmitted.

Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Acked-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e0540879
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -1196,6 +1196,14 @@ static int rt2500usb_get_tx_data_len(struct queue_entry *entry)
	return length;
	return length;
}
}


static void rt2500usb_kill_tx_queue(struct data_queue *queue)
{
	if (queue->qid == QID_BEACON)
		rt2500usb_register_write(queue->rt2x00dev, TXRX_CSR19, 0);

	rt2x00usb_kill_tx_queue(queue);
}

/*
/*
 * RX control handlers
 * RX control handlers
 */
 */
@@ -1794,7 +1802,7 @@ static const struct rt2x00lib_ops rt2500usb_rt2x00_ops = {
	.write_beacon		= rt2500usb_write_beacon,
	.write_beacon		= rt2500usb_write_beacon,
	.get_tx_data_len	= rt2500usb_get_tx_data_len,
	.get_tx_data_len	= rt2500usb_get_tx_data_len,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kill_tx_queue		= rt2x00usb_kill_tx_queue,
	.kill_tx_queue		= rt2500usb_kill_tx_queue,
	.fill_rxdone		= rt2500usb_fill_rxdone,
	.fill_rxdone		= rt2500usb_fill_rxdone,
	.config_shared_key	= rt2500usb_config_key,
	.config_shared_key	= rt2500usb_config_key,
	.config_pairwise_key	= rt2500usb_config_key,
	.config_pairwise_key	= rt2500usb_config_key,
+9 −1
Original line number Original line Diff line number Diff line
@@ -335,6 +335,14 @@ static void rt2800usb_work_txdone(struct work_struct *work)
	}
	}
}
}


static void rt2800usb_kill_tx_queue(struct data_queue *queue)
{
	if (queue->qid == QID_BEACON)
		rt2x00usb_register_write(queue->rt2x00dev, BCN_TIME_CFG, 0);

	rt2x00usb_kill_tx_queue(queue);
}

/*
/*
 * RX control handlers
 * RX control handlers
 */
 */
@@ -533,7 +541,7 @@ static const struct rt2x00lib_ops rt2800usb_rt2x00_ops = {
	.write_beacon		= rt2800_write_beacon,
	.write_beacon		= rt2800_write_beacon,
	.get_tx_data_len	= rt2800usb_get_tx_data_len,
	.get_tx_data_len	= rt2800usb_get_tx_data_len,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kill_tx_queue		= rt2x00usb_kill_tx_queue,
	.kill_tx_queue		= rt2800usb_kill_tx_queue,
	.fill_rxdone		= rt2800usb_fill_rxdone,
	.fill_rxdone		= rt2800usb_fill_rxdone,
	.config_shared_key	= rt2800_config_shared_key,
	.config_shared_key	= rt2800_config_shared_key,
	.config_pairwise_key	= rt2800_config_pairwise_key,
	.config_pairwise_key	= rt2800_config_pairwise_key,
+9 −1
Original line number Original line Diff line number Diff line
@@ -1573,6 +1573,14 @@ static int rt73usb_get_tx_data_len(struct queue_entry *entry)
	return length;
	return length;
}
}


static void rt73usb_kill_tx_queue(struct data_queue *queue)
{
	if (queue->qid == QID_BEACON)
		rt2x00usb_register_write(queue->rt2x00dev, TXRX_CSR9, 0);

	rt2x00usb_kill_tx_queue(queue);
}

/*
/*
 * RX control handlers
 * RX control handlers
 */
 */
@@ -2262,7 +2270,7 @@ static const struct rt2x00lib_ops rt73usb_rt2x00_ops = {
	.write_beacon		= rt73usb_write_beacon,
	.write_beacon		= rt73usb_write_beacon,
	.get_tx_data_len	= rt73usb_get_tx_data_len,
	.get_tx_data_len	= rt73usb_get_tx_data_len,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kick_tx_queue		= rt2x00usb_kick_tx_queue,
	.kill_tx_queue		= rt2x00usb_kill_tx_queue,
	.kill_tx_queue		= rt73usb_kill_tx_queue,
	.fill_rxdone		= rt73usb_fill_rxdone,
	.fill_rxdone		= rt73usb_fill_rxdone,
	.config_shared_key	= rt73usb_config_shared_key,
	.config_shared_key	= rt73usb_config_shared_key,
	.config_pairwise_key	= rt73usb_config_pairwise_key,
	.config_pairwise_key	= rt73usb_config_pairwise_key,