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

Commit 8e9f33f0 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by John W. Linville
Browse files

mwl8k: properly report rate on received 40MHz packets



On 8366, bit 6 in the rx descriptor rate field indicates whether the
packet was received on a 20MHz or 40MHz channel, and is not part of
the MCS index.  Handle this properly, which then prevents hitting the
WARN_ON and being dropped in ieee80211_rx().

Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent ca009301
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -782,6 +782,10 @@ struct mwl8k_rxd_8366 {
	__u8 rx_ctrl;
	__u8 rx_ctrl;
} __attribute__((packed));
} __attribute__((packed));


#define MWL8K_8366_RATE_INFO_MCS_FORMAT		0x80
#define MWL8K_8366_RATE_INFO_40MHZ		0x40
#define MWL8K_8366_RATE_INFO_RATEID(x)		((x) & 0x3f)

#define MWL8K_8366_RX_CTRL_OWNED_BY_HOST	0x80
#define MWL8K_8366_RX_CTRL_OWNED_BY_HOST	0x80


static void mwl8k_rxd_8366_init(void *_rxd, dma_addr_t next_dma_addr)
static void mwl8k_rxd_8366_init(void *_rxd, dma_addr_t next_dma_addr)
@@ -817,9 +821,11 @@ mwl8k_rxd_8366_process(void *_rxd, struct ieee80211_rx_status *status,
	status->signal = -rxd->rssi;
	status->signal = -rxd->rssi;
	status->noise = -rxd->noise_floor;
	status->noise = -rxd->noise_floor;


	if (rxd->rate & 0x80) {
	if (rxd->rate & MWL8K_8366_RATE_INFO_MCS_FORMAT) {
		status->flag |= RX_FLAG_HT;
		status->flag |= RX_FLAG_HT;
		status->rate_idx = rxd->rate & 0x7f;
		if (rxd->rate & MWL8K_8366_RATE_INFO_40MHZ)
			status->flag |= RX_FLAG_40MHZ;
		status->rate_idx = MWL8K_8366_RATE_INFO_RATEID(rxd->rate);
	} else {
	} else {
		int i;
		int i;