[PATCH, take 3] libertas: convert RSSI to a direct command

Dan Williams dcbw at redhat.com
Thu Mar 27 17:24:02 EDT 2008


On Wed, 2008-03-26 at 10:21 +0100, Holger Schurig wrote:
> Besided the direct conversion of the CMD_802_11_RSSI command, this
> patch also changes the following things:
> 
> * calls CMD_802_11_RSSI either asynchronosly (in the background)
>   when main.c thinks the firmware is hosed and just want's to
>   get a command through
> * calls CMD_802_11_RSSI synchronously when called to get wireless
>   statistics.
> * don't do in-driver averaging anymore, this and the previous point
>   eliminates the need for any "struct lbs_private" values
> * use a 100% quality in a  special ADHOC case
> 
> Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>

Acked-by: Dan Williams <dcbw at redhat.com>

> Index: wireless-testing/drivers/net/wireless/libertas/cmd.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/cmd.c	2008-03-26 09:18:24.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/cmd.c	2008-03-26 09:18:31.000000000 +0100
> @@ -692,6 +692,44 @@ static int lbs_cmd_802_11_rate_adapt_rat
>  	return 0;
>  }
>  
> +int lbs_get_rssi(struct lbs_private *priv, u16 *snr, u16 *nf)
> +{
> +	struct cmd_ds_802_11_rssi cmd;
> +	struct cmd_ds_802_11_rssi_rsp rsp;
> +	int ret;
> +	u16 _snr, _nf;
> +
> +	lbs_deb_enter(LBS_DEB_CMD);
> +
> +	cmd.hdr.size = cpu_to_le16(sizeof(cmd));
> +	cmd.avg_factor = cpu_to_le16(1);
> +	rsp.hdr.size = cpu_to_le16(sizeof(rsp));
> +
> +	/* main.c might have called us just to un-break a hanging firmware */
> +	if (!snr && !nf) {
> +		lbs_cmd_async(priv, CMD_802_11_RSSI, &cmd.hdr, sizeof(cmd));
> +		return 0;
> +	}
> +
> +	ret = lbs_cmd(priv, CMD_802_11_RSSI,
> +		&cmd, lbs_cmd_copyback, (unsigned long) &rsp);
> +
> +	if (!ret) {
> +		_snr = le16_to_cpu(rsp.SNR);
> +		_nf  = le16_to_cpu(rsp.NF);
> +	} else {
> +		_snr = 0;
> +		_nf  = abs(MRVDRV_NF_DEFAULT_SCAN_VALUE);
> +	}
> +
> +	if (*snr) *snr = _snr;
> +	if (*nf)  *nf  = _nf;
> +
> +	lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
> +
> +	return ret;
> +}
> +
>  /**
>   *  @brief Get the current data rate
>   *
> @@ -858,27 +896,6 @@ out:
>  	return ret;
>  }
>  
> -static int lbs_cmd_802_11_rssi(struct lbs_private *priv,
> -				struct cmd_ds_command *cmd)
> -{
> -
> -	lbs_deb_enter(LBS_DEB_CMD);
> -	cmd->command = cpu_to_le16(CMD_802_11_RSSI);
> -	cmd->size = cpu_to_le16(sizeof(struct cmd_ds_802_11_rssi) + S_DS_GEN);
> -	cmd->params.rssi.N = cpu_to_le16(DEFAULT_BCN_AVG_FACTOR);
> -
> -	/* reset Beacon SNR/NF/RSSI values */
> -	priv->SNR[TYPE_BEACON][TYPE_NOAVG] = 0;
> -	priv->SNR[TYPE_BEACON][TYPE_AVG] = 0;
> -	priv->NF[TYPE_BEACON][TYPE_NOAVG] = 0;
> -	priv->NF[TYPE_BEACON][TYPE_AVG] = 0;
> -	priv->RSSI[TYPE_BEACON][TYPE_NOAVG] = 0;
> -	priv->RSSI[TYPE_BEACON][TYPE_AVG] = 0;
> -
> -	lbs_deb_leave(LBS_DEB_CMD);
> -	return 0;
> -}
> -
>  static int lbs_cmd_reg_access(struct cmd_ds_command *cmdptr,
>  			       u8 cmd_action, void *pdata_buf)
>  {
> @@ -1383,10 +1400,6 @@ int lbs_prepare_and_send_command(struct 
>  		ret = lbs_cmd_80211_ad_hoc_join(priv, cmdptr, pdata_buf);
>  		break;
>  
> -	case CMD_802_11_RSSI:
> -		ret = lbs_cmd_802_11_rssi(priv, cmdptr);
> -		break;
> -
>  	case CMD_802_11_AD_HOC_STOP:
>  		ret = lbs_cmd_80211_ad_hoc_stop(cmdptr);
>  		break;
> Index: wireless-testing/drivers/net/wireless/libertas/cmdresp.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/cmdresp.c	2008-03-26 09:18:24.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/cmdresp.c	2008-03-26 09:18:51.000000000 +0100
> @@ -51,15 +51,6 @@ void lbs_mac_event_disconnected(struct l
>  	kfree_skb(priv->currenttxskb);
>  	priv->currenttxskb = NULL;
>  	priv->tx_pending_len = 0;
> -
> -	/* reset SNR/NF/RSSI values */
> -	memset(priv->SNR, 0x00, sizeof(priv->SNR));
> -	memset(priv->NF, 0x00, sizeof(priv->NF));
> -	memset(priv->RSSI, 0x00, sizeof(priv->RSSI));
> -	memset(priv->rawSNR, 0x00, sizeof(priv->rawSNR));
> -	memset(priv->rawNF, 0x00, sizeof(priv->rawNF));
> -	priv->nextSNRNF = 0;
> -	priv->numSNRNF = 0;
>  	priv->connect_status = LBS_DISCONNECTED;
>  
>  	/* Clear out associated SSID and BSSID since connection is
> @@ -219,36 +210,6 @@ static int lbs_ret_802_11_rate_adapt_rat
>  	return 0;
>  }
>  
> -static int lbs_ret_802_11_rssi(struct lbs_private *priv,
> -				struct cmd_ds_command *resp)
> -{
> -	struct cmd_ds_802_11_rssi_rsp *rssirsp = &resp->params.rssirsp;
> -
> -	lbs_deb_enter(LBS_DEB_CMD);
> -
> -	/* store the non average value */
> -	priv->SNR[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->SNR);
> -	priv->NF[TYPE_BEACON][TYPE_NOAVG] = le16_to_cpu(rssirsp->noisefloor);
> -
> -	priv->SNR[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgSNR);
> -	priv->NF[TYPE_BEACON][TYPE_AVG] = le16_to_cpu(rssirsp->avgnoisefloor);
> -
> -	priv->RSSI[TYPE_BEACON][TYPE_NOAVG] =
> -	    CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_NOAVG],
> -		     priv->NF[TYPE_BEACON][TYPE_NOAVG]);
> -
> -	priv->RSSI[TYPE_BEACON][TYPE_AVG] =
> -	    CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_AVG] / AVG_SCALE,
> -		     priv->NF[TYPE_BEACON][TYPE_AVG] / AVG_SCALE);
> -
> -	lbs_deb_cmd("RSSI: beacon %d, avg %d\n",
> -	       priv->RSSI[TYPE_BEACON][TYPE_NOAVG],
> -	       priv->RSSI[TYPE_BEACON][TYPE_AVG]);
> -
> -	lbs_deb_leave(LBS_DEB_CMD);
> -	return 0;
> -}
> -
>  static int lbs_ret_802_11_bcn_ctrl(struct lbs_private * priv,
>  					struct cmd_ds_command *resp)
>  {
> @@ -326,10 +287,6 @@ static inline int handle_cmd_response(st
>  		ret = lbs_ret_802_11_rate_adapt_rateset(priv, resp);
>  		break;
>  
> -	case CMD_RET(CMD_802_11_RSSI):
> -		ret = lbs_ret_802_11_rssi(priv, resp);
> -		break;
> -
>  	case CMD_RET(CMD_802_11_AD_HOC_STOP):
>  		ret = lbs_ret_80211_ad_hoc_stop(priv);
>  		break;
> Index: wireless-testing/drivers/net/wireless/libertas/hostcmd.h
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/hostcmd.h	2008-03-26 09:18:21.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/hostcmd.h	2008-03-26 09:18:31.000000000 +0100
> @@ -411,19 +411,21 @@ struct cmd_ds_802_11_rf_channel {
>  };
>  
>  struct cmd_ds_802_11_rssi {
> -	/* weighting factor */
> -	__le16 N;
> +	struct cmd_header hdr;
>  
> +	__le16 avg_factor;
>  	__le16 reserved_0;
>  	__le16 reserved_1;
>  	__le16 reserved_2;
>  };
>  
>  struct cmd_ds_802_11_rssi_rsp {
> +	struct cmd_header hdr;
> +
>  	__le16 SNR;
> -	__le16 noisefloor;
> +	__le16 NF;
>  	__le16 avgSNR;
> -	__le16 avgnoisefloor;
> +	__le16 avgNF;
>  };
>  
>  struct cmd_ds_802_11_mac_address {
> @@ -708,8 +710,6 @@ struct cmd_ds_command {
>  		struct cmd_ds_802_11_rate_adapt_rateset rateset;
>  		struct cmd_ds_mac_multicast_adr madr;
>  		struct cmd_ds_802_11_ad_hoc_join adj;
> -		struct cmd_ds_802_11_rssi rssi;
> -		struct cmd_ds_802_11_rssi_rsp rssirsp;
>  		struct cmd_ds_802_11_disassociate dassociate;
>  		struct cmd_ds_mac_reg_access macreg;
>  		struct cmd_ds_bbp_reg_access bbpreg;
> Index: wireless-testing/drivers/net/wireless/libertas/assoc.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/assoc.c	2008-03-26 09:17:22.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/assoc.c	2008-03-26 09:18:31.000000000 +0100
> @@ -621,9 +621,6 @@ void lbs_association_worker(struct work_
>  		if (success) {
>  			lbs_deb_assoc("associated to %s\n",
>  				print_mac(mac, priv->curbssparams.bssid));
> -			lbs_prepare_and_send_command(priv,
> -				CMD_802_11_RSSI,
> -				0, CMD_OPTION_WAITFORRSP, 0, NULL);
>  		} else {
>  			ret = -1;
>  		}
> Index: wireless-testing/drivers/net/wireless/libertas/main.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/main.c	2008-03-26 09:18:21.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/main.c	2008-03-26 09:18:31.000000000 +0100
> @@ -487,8 +487,7 @@ static void lbs_tx_timeout(struct net_de
>  	   firmware has crapped itself -- rather than just a very
>  	   busy medium. So send a harmless command, and if/when
>  	   _that_ times out, we'll kick it in the head. */
> -	lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0,
> -				     0, 0, NULL);
> +	lbs_get_rssi(priv, NULL, NULL);
>  
>  	lbs_deb_leave(LBS_DEB_TX);
>  }
> @@ -901,8 +900,7 @@ int lbs_resume(struct lbs_private *priv)
>  
>  	/* Firmware doesn't seem to give us RX packets any more
>  	   until we send it some command. Might as well update */
> -	lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0,
> -				     0, 0, NULL);
> +	lbs_get_rssi(priv, NULL, NULL);
>  
>  	netif_device_attach(priv->dev);
>  	if (priv->mesh_dev)
> Index: wireless-testing/drivers/net/wireless/libertas/scan.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/scan.c	2008-03-26 09:17:22.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/scan.c	2008-03-26 09:18:31.000000000 +0100
> @@ -1194,12 +1194,6 @@ static inline char *lbs_translate_scan(s
>  	if (iwe.u.qual.qual > 100)
>  		iwe.u.qual.qual = 100;
>  
> -	if (priv->NF[TYPE_BEACON][TYPE_NOAVG] == 0) {
> -		iwe.u.qual.noise = MRVDRV_NF_DEFAULT_SCAN_VALUE;
> -	} else {
> -		iwe.u.qual.noise = CAL_NF(priv->NF[TYPE_BEACON][TYPE_NOAVG]);
> -	}
> -
>  	/* Locally created ad-hoc BSSs won't have beacons if this is the
>  	 * only station in the adhoc network; so get signal strength
>  	 * from receive statistics.
> @@ -1208,11 +1202,9 @@ static inline char *lbs_translate_scan(s
>  	    && !lbs_ssid_cmp(priv->curbssparams.ssid,
>  			     priv->curbssparams.ssid_len,
>  			     bss->ssid, bss->ssid_len)) {
> -		int snr, nf;
> -		snr = priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
> -		nf = priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
> -		iwe.u.qual.level = CAL_RSSI(snr, nf);
> +		iwe.u.qual.level = 100;
>  	}
> +	iwe.u.qual.noise = MRVDRV_NF_DEFAULT_SCAN_VALUE;
>  	start = iwe_stream_add_event(start, stop, &iwe, IW_EV_QUAL_LEN);
>  
>  	/* Add encryption capability */
> @@ -1369,11 +1361,6 @@ int lbs_get_scan(struct net_device *dev,
>  	if (priv->scan_channel)
>  		return -EAGAIN;
>  
> -	/* Update RSSI if current BSS is a locally created ad-hoc BSS */
> -	if ((priv->mode == IW_MODE_ADHOC) && priv->adhoccreate)
> -		lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0,
> -					     CMD_OPTION_WAITFORRSP, 0, NULL);
> -
>  	mutex_lock(&priv->lock);
>  	list_for_each_entry_safe (iter_bss, safe, &priv->network_list, list) {
>  		char *next_ev;
> Index: wireless-testing/drivers/net/wireless/libertas/cmd.h
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/cmd.h	2008-03-26 09:17:22.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/cmd.h	2008-03-26 09:18:31.000000000 +0100
> @@ -34,6 +34,8 @@ int lbs_update_hw_spec(struct lbs_privat
>  int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action,
>  		    struct cmd_ds_mesh_access *cmd);
>  
> +int lbs_get_rssi(struct lbs_private *priv, u16 *snr, u16 *nf);
> +
>  int lbs_get_data_rate(struct lbs_private *priv);
>  int lbs_set_data_rate(struct lbs_private *priv, u8 rate);
>  
> Index: wireless-testing/drivers/net/wireless/libertas/dev.h
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/dev.h	2008-03-26 09:18:21.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/dev.h	2008-03-26 09:18:31.000000000 +0100
> @@ -288,15 +288,6 @@ struct lbs_private {
>  	u8 wpa_ie[MAX_WPA_IE_LEN];
>  	u8 wpa_ie_len;
>  
> -	/** Requested Signal Strength*/
> -	u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
> -	u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
> -	u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
> -	u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
> -	u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
> -	u16 nextSNRNF;
> -	u16 numSNRNF;
> -
>  	u8 radioon;
>  	u32 preamble;
>  
> Index: wireless-testing/drivers/net/wireless/libertas/join.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/join.c	2008-03-26 09:17:22.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/join.c	2008-03-26 09:18:31.000000000 +0100
> @@ -751,14 +751,6 @@ int lbs_ret_80211_associate(struct lbs_p
>  	priv->curbssparams.ssid_len = bss->ssid_len;
>  	memcpy(priv->curbssparams.bssid, bss->bssid, ETH_ALEN);
>  
> -	priv->SNR[TYPE_RXPD][TYPE_AVG] = 0;
> -	priv->NF[TYPE_RXPD][TYPE_AVG] = 0;
> -
> -	memset(priv->rawSNR, 0x00, sizeof(priv->rawSNR));
> -	memset(priv->rawNF, 0x00, sizeof(priv->rawNF));
> -	priv->nextSNRNF = 0;
> -	priv->numSNRNF = 0;
> -
>  	netif_carrier_on(priv->dev);
>  	if (!priv->tx_pending_len)
>  		netif_wake_queue(priv->dev);
> Index: wireless-testing/drivers/net/wireless/libertas/wext.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/wext.c	2008-03-26 09:17:22.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/wext.c	2008-03-26 09:18:31.000000000 +0100
> @@ -811,6 +811,7 @@ static struct iw_statistics *lbs_get_wir
>  	u8 rssi;
>  	u32 tx_retries;
>  	struct cmd_ds_802_11_get_log log;
> +	u16 snr, nf;
>  
>  	lbs_deb_enter(LBS_DEB_WEXT);
>  
> @@ -821,17 +822,11 @@ static struct iw_statistics *lbs_get_wir
>  	    (priv->mesh_connect_status != LBS_CONNECTED))
>  		goto out;
>  
> -	/* Quality by RSSI */
> -	priv->wstats.qual.level =
> -	    CAL_RSSI(priv->SNR[TYPE_BEACON][TYPE_NOAVG],
> -	     priv->NF[TYPE_BEACON][TYPE_NOAVG]);
> +	lbs_get_rssi(priv, &snr, &nf);
>  
> -	if (priv->NF[TYPE_BEACON][TYPE_NOAVG] == 0) {
> -		priv->wstats.qual.noise = MRVDRV_NF_DEFAULT_SCAN_VALUE;
> -	} else {
> -		priv->wstats.qual.noise =
> -		    CAL_NF(priv->NF[TYPE_BEACON][TYPE_NOAVG]);
> -	}
> +	/* Quality by RSSI */
> +	priv->wstats.qual.level = CAL_RSSI(snr, nf);
> +	priv->wstats.qual.noise = CAL_NF(nf);
>  
>  	lbs_deb_wext("signal level %#x\n", priv->wstats.qual.level);
>  	lbs_deb_wext("noise %#x\n", priv->wstats.qual.noise);
> @@ -883,9 +878,6 @@ static struct iw_statistics *lbs_get_wir
>  	priv->wstats.qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
>  	stats_valid = 1;
>  
> -	/* update stats asynchronously for future calls */
> -	lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0,
> -					0, 0, NULL);
>  out:
>  	if (!stats_valid) {
>  		priv->wstats.miss.beacon = 0;
> Index: wireless-testing/drivers/net/wireless/libertas/rx.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/rx.c	2008-03-26 09:18:21.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/rx.c	2008-03-26 09:18:31.000000000 +0100
> @@ -39,99 +39,6 @@ static int process_rxed_802_11_packet(st
>  	struct sk_buff *skb);
>  
>  /**
> - *  @brief This function computes the avgSNR .
> - *
> - *  @param priv    A pointer to struct lbs_private structure
> - *  @return 	   avgSNR
> - */
> -static u8 lbs_getavgsnr(struct lbs_private *priv)
> -{
> -	u8 i;
> -	u16 temp = 0;
> -	if (priv->numSNRNF == 0)
> -		return 0;
> -	for (i = 0; i < priv->numSNRNF; i++)
> -		temp += priv->rawSNR[i];
> -	return (u8) (temp / priv->numSNRNF);
> -
> -}
> -
> -/**
> - *  @brief This function computes the AvgNF
> - *
> - *  @param priv    A pointer to struct lbs_private structure
> - *  @return 	   AvgNF
> - */
> -static u8 lbs_getavgnf(struct lbs_private *priv)
> -{
> -	u8 i;
> -	u16 temp = 0;
> -	if (priv->numSNRNF == 0)
> -		return 0;
> -	for (i = 0; i < priv->numSNRNF; i++)
> -		temp += priv->rawNF[i];
> -	return (u8) (temp / priv->numSNRNF);
> -
> -}
> -
> -/**
> - *  @brief This function save the raw SNR/NF to our internel buffer
> - *
> - *  @param priv    A pointer to struct lbs_private structure
> - *  @param prxpd   A pointer to rxpd structure of received packet
> - *  @return 	   n/a
> - */
> -static void lbs_save_rawSNRNF(struct lbs_private *priv, struct rxpd *p_rx_pd)
> -{
> -	if (priv->numSNRNF < DEFAULT_DATA_AVG_FACTOR)
> -		priv->numSNRNF++;
> -	priv->rawSNR[priv->nextSNRNF] = p_rx_pd->snr;
> -	priv->rawNF[priv->nextSNRNF] = p_rx_pd->nf;
> -	priv->nextSNRNF++;
> -	if (priv->nextSNRNF >= DEFAULT_DATA_AVG_FACTOR)
> -		priv->nextSNRNF = 0;
> -	return;
> -}
> -
> -/**
> - *  @brief This function computes the RSSI in received packet.
> - *
> - *  @param priv    A pointer to struct lbs_private structure
> - *  @param prxpd   A pointer to rxpd structure of received packet
> - *  @return 	   n/a
> - */
> -static void lbs_compute_rssi(struct lbs_private *priv, struct rxpd *p_rx_pd)
> -{
> -
> -	lbs_deb_enter(LBS_DEB_RX);
> -
> -	lbs_deb_rx("rxpd: SNR %d, NF %d\n", p_rx_pd->snr, p_rx_pd->nf);
> -	lbs_deb_rx("before computing SNR: SNR-avg = %d, NF-avg = %d\n",
> -	       priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE,
> -	       priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE);
> -
> -	priv->SNR[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->snr;
> -	priv->NF[TYPE_RXPD][TYPE_NOAVG] = p_rx_pd->nf;
> -	lbs_save_rawSNRNF(priv, p_rx_pd);
> -
> -	priv->SNR[TYPE_RXPD][TYPE_AVG] = lbs_getavgsnr(priv) * AVG_SCALE;
> -	priv->NF[TYPE_RXPD][TYPE_AVG] = lbs_getavgnf(priv) * AVG_SCALE;
> -	lbs_deb_rx("after computing SNR: SNR-avg = %d, NF-avg = %d\n",
> -	       priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE,
> -	       priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE);
> -
> -	priv->RSSI[TYPE_RXPD][TYPE_NOAVG] =
> -	    CAL_RSSI(priv->SNR[TYPE_RXPD][TYPE_NOAVG],
> -		     priv->NF[TYPE_RXPD][TYPE_NOAVG]);
> -
> -	priv->RSSI[TYPE_RXPD][TYPE_AVG] =
> -	    CAL_RSSI(priv->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE,
> -		     priv->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE);
> -
> -	lbs_deb_leave(LBS_DEB_RX);
> -}
> -
> -/**
>   *  @brief This function processes received packet and forwards it
>   *  to kernel/upper layer
>   *
> @@ -240,8 +147,6 @@ int lbs_process_rxed_packet(struct lbs_p
>  	if (priv->auto_rate)
>  		priv->cur_rate = lbs_fw_index_to_data_rate(p_rx_pd->rx_rate);
>  
> -	lbs_compute_rssi(priv, p_rx_pd);
> -
>  	lbs_deb_rx("rx data: size of actual packet %d\n", skb->len);
>  	priv->stats.rx_bytes += skb->len;
>  	priv->stats.rx_packets++;
> @@ -359,7 +264,7 @@ static int process_rxed_802_11_packet(st
>  	/* known values */
>  	radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate);
>  	/* XXX must check no carryout */
> -	radiotap_hdr.antsignal = prxpd->snr + prxpd->nf;
> +	radiotap_hdr.antsignal = CAL_RSSI(prxpd->snr, prxpd->nf);
>  	radiotap_hdr.rx_flags = 0;
>  	if (!(prxpd->status & cpu_to_le16(MRVDRV_RXPD_STATUS_OK)))
>  		radiotap_hdr.rx_flags |= IEEE80211_RADIOTAP_F_RX_BADFCS;
> @@ -386,8 +291,6 @@ static int process_rxed_802_11_packet(st
>  	if (priv->auto_rate)
>  		priv->cur_rate = lbs_fw_index_to_data_rate(prxpd->rx_rate);
>  
> -	lbs_compute_rssi(priv, prxpd);
> -
>  	lbs_deb_rx("rx data: size of actual packet %d\n", skb->len);
>  	priv->stats.rx_bytes += skb->len;
>  	priv->stats.rx_packets++;




More information about the libertas-dev mailing list