diff options
| author | David S. Miller <davem@davemloft.net> | 2011-05-05 14:09:28 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-05-05 14:09:28 -0700 | 
| commit | 90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2 (patch) | |
| tree | 6951c8d0e529dbfc7c4cec75d4cec63350e39b7c /drivers/net/wireless/wl12xx/rx.c | |
| parent | 228e548e602061b08ee8e8966f567c12aa079682 (diff) | |
| parent | a70171dce9cd44cb06c7d299eba9fa87a8933045 (diff) | |
| download | olio-linux-3.10-90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2.tar.xz olio-linux-3.10-90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2.zip  | |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/wl12xx/rx.c')
| -rw-r--r-- | drivers/net/wireless/wl12xx/rx.c | 44 | 
1 files changed, 24 insertions, 20 deletions
diff --git a/drivers/net/wireless/wl12xx/rx.c b/drivers/net/wireless/wl12xx/rx.c index 919b59f0030..2a581495d5c 100644 --- a/drivers/net/wireless/wl12xx/rx.c +++ b/drivers/net/wireless/wl12xx/rx.c @@ -48,18 +48,14 @@ static void wl1271_rx_status(struct wl1271 *wl,  			     struct ieee80211_rx_status *status,  			     u8 beacon)  { -	enum ieee80211_band desc_band; -  	memset(status, 0, sizeof(struct ieee80211_rx_status)); -	status->band = wl->band; -  	if ((desc->flags & WL1271_RX_DESC_BAND_MASK) == WL1271_RX_DESC_BAND_BG) -		desc_band = IEEE80211_BAND_2GHZ; +		status->band = IEEE80211_BAND_2GHZ;  	else -		desc_band = IEEE80211_BAND_5GHZ; +		status->band = IEEE80211_BAND_5GHZ; -	status->rate_idx = wl1271_rate_to_idx(desc->rate, desc_band); +	status->rate_idx = wl1271_rate_to_idx(desc->rate, status->band);  #ifdef CONFIG_WL12XX_HT  	/* 11n support */ @@ -76,7 +72,8 @@ static void wl1271_rx_status(struct wl1271 *wl,  	 */  	wl->noise = desc->rssi - (desc->snr >> 1); -	status->freq = ieee80211_channel_to_frequency(desc->channel, desc_band); +	status->freq = ieee80211_channel_to_frequency(desc->channel, +						      status->band);  	if (desc->flags & WL1271_RX_DESC_ENCRYPT_MASK) {  		status->flag |= RX_FLAG_IV_STRIPPED | RX_FLAG_MMIC_STRIPPED; @@ -163,18 +160,25 @@ void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_common_status *status)  			break;  		} -		/* -		 * Choose the block we want to read -		 * For aggregated packets, only the first memory block should -		 * be retrieved. The FW takes care of the rest. -		 */ -		mem_block = wl1271_rx_get_mem_block(status, drv_rx_counter); -		wl->rx_mem_pool_addr.addr = (mem_block << 8) + -			le32_to_cpu(wl_mem_map->packet_memory_pool_start); -		wl->rx_mem_pool_addr.addr_extra = -			wl->rx_mem_pool_addr.addr + 4; -		wl1271_write(wl, WL1271_SLV_REG_DATA, &wl->rx_mem_pool_addr, -				sizeof(wl->rx_mem_pool_addr), false); +		if (wl->chip.id != CHIP_ID_1283_PG20) { +			/* +			 * Choose the block we want to read +			 * For aggregated packets, only the first memory block +			 * should be retrieved. The FW takes care of the rest. +			 */ +			mem_block = wl1271_rx_get_mem_block(status, +							    drv_rx_counter); + +			wl->rx_mem_pool_addr.addr = (mem_block << 8) + +			   le32_to_cpu(wl_mem_map->packet_memory_pool_start); + +			wl->rx_mem_pool_addr.addr_extra = +				wl->rx_mem_pool_addr.addr + 4; + +			wl1271_write(wl, WL1271_SLV_REG_DATA, +				     &wl->rx_mem_pool_addr, +				     sizeof(wl->rx_mem_pool_addr), false); +		}  		/* Read all available packets at once */  		wl1271_read(wl, WL1271_SLV_MEM_DATA, wl->aggr_buf,  |