All of lore.kernel.org
 help / color / mirror / Atom feed
From: Larry Finger <larry.finger@lwfinger.net>
To: Michael Wu <flamingice@sourmilk.net>
Cc: Dan Williams <dcbw@redhat.com>,
	John Linville <linville@tuxdriver.com>,
	Michael Buesch <mb@bu3sch.de>,
	Bcm43xx-dev@lists.berlios.de, linux-wireless@vger.kernel.org,
	Jiri Benc <jbenc@suse.cz>
Subject: Re: [PATCH] mac80211: Report correct wireless statistics
Date: Mon, 09 Apr 2007 19:59:12 -0500	[thread overview]
Message-ID: <461AE160.6060404@lwfinger.net> (raw)
In-Reply-To: <200704091902.14301.flamingice@sourmilk.net>

Michael Wu wrote:
>>
> Absolutely - it is confusing since dBm can also be specified in addition to 
> RSSI. Renaming signal to qual or something along those lines would also be 
> useful IMHO, but if you're okay with it as it stands, I don't mind it.

I changed signal to qual and (r)ssi to level. Once these changes were made, iwconfig gives me the 
following:

Link Quality=57/100  Signal level=-37 dBm  Noise level=-70 dBm

The patch is pretty large and touches a lot of files, but if one is to be able to bisect around it, 
it has to be a single commit. As the patch entitled "[PATCH] bcm43xx-mac80211: Fix error in 
initiallizing max RSSI and max signal" has been accepted into Michael Buesch's tree, I have assumed 
that it is already included.

Larry
---

Index: wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
+++ wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
@@ -3760,7 +3760,7 @@ static int bcm43xx_wireless_init(struct
  		    IEEE80211_HW_MONITOR_DURING_OPER |
  		    IEEE80211_HW_DEVICE_HIDES_WEP |
  		    IEEE80211_HW_WEP_INCLUDE_IV;
-	hw->max_signal = -110;
+	hw->max_qual = 100;
  	hw->max_rssi = BCM43xx_RX_MAX_SSI;
  	hw->max_noise = -110;
  	hw->queues = 1;
Index: wireless-dev/include/net/mac80211.h
===================================================================
--- wireless-dev.orig/include/net/mac80211.h
+++ wireless-dev/include/net/mac80211.h
@@ -227,8 +227,8 @@ struct ieee80211_rx_status {
  	int freq; /* receive frequency in Mhz */
  	int channel;
  	int phymode;
-	int ssi;
-	int signal; /* used as qual in statistics reporting */
+	int level;  /* used in statistics reporting */
+	int qual; /* used in statistics reporting */
  	int noise;
  	int antenna;
  	int rate;
@@ -540,7 +540,7 @@ struct ieee80211_hw {
  	/* Maximum values for various statistics.
  	 * Leave at 0 to indicate no support. Use negative numbers for dBm. */
  	s8 max_rssi;
-	s8 max_signal;
+	s8 max_qual;
  	s8 max_noise;

  	/* Number of available hardware TX queues for data packets.
Index: wireless-dev/net/mac80211/ieee80211.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211.c
+++ wireless-dev/net/mac80211/ieee80211.c
@@ -2705,7 +2705,7 @@ ieee80211_fill_frame_info(struct ieee802
  		fi->antenna = htonl(status->antenna);
  		fi->priority = 0xffffffff; /* no clue */
  		fi->ssi_type = htonl(ieee80211_ssi_raw);
-		fi->ssi_signal = htonl(status->ssi);
+		fi->ssi_signal = htonl(status->level);
  		fi->ssi_noise = 0x00000000;
  		fi->encoding = 0;
  	} else {
@@ -3352,10 +3352,10 @@ ieee80211_rx_h_sta_process(struct ieee80

  	sta->rx_fragments++;
  	sta->rx_bytes += rx->skb->len;
-	sta->last_rssi = (sta->last_rssi * 15 +
-			  rx->u.rx.status->ssi) / 16;
-	sta->last_signal = (sta->last_signal * 15 +
-			    rx->u.rx.status->signal) / 16;
+	sta->last_level = (sta->last_level * 15 +
+			  rx->u.rx.status->level) / 16;
+	sta->last_qual = (sta->last_qual * 15 +
+			    rx->u.rx.status->qual) / 16;
  	sta->last_noise = (sta->last_noise * 15 +
  			   rx->u.rx.status->noise) / 16;

@@ -4643,7 +4643,7 @@ int ieee80211_register_hw(struct ieee802

  	local->wstats_flags |= local->hw.max_rssi ?
  			       IW_QUAL_LEVEL_UPDATED : IW_QUAL_LEVEL_INVALID;
-	local->wstats_flags |= local->hw.max_signal ?
+	local->wstats_flags |= local->hw.max_qual ?
  			       IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID;
  	local->wstats_flags |= local->hw.max_noise ?
  			       IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID;
Index: wireless-dev/net/mac80211/ieee80211_sta.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_sta.c
+++ wireless-dev/net/mac80211/ieee80211_sta.c
@@ -1192,8 +1192,8 @@ static void ieee80211_rx_mgmt_assoc_resp
  		}
  		bss = ieee80211_rx_bss_get(dev, ifsta->bssid);
  		if (bss) {
-			sta->last_rssi = bss->rssi;
-			sta->last_signal = bss->signal;
+			sta->last_level = bss->level;
+			sta->last_qual = bss->qual;
  			sta->last_noise = bss->noise;
  			ieee80211_rx_bss_put(dev, bss);
  		}
@@ -1582,8 +1582,8 @@ static void ieee80211_rx_bss_info(struct
  	}
  	bss->timestamp = timestamp;
  	bss->last_update = jiffies;
-	bss->rssi = rx_status->ssi;
-	bss->signal = rx_status->signal;
+	bss->level = rx_status->level;
+	bss->qual = rx_status->qual;
  	bss->noise = rx_status->noise;
  	if (!beacon)
  		bss->probe_resp++;
@@ -2060,7 +2060,7 @@ static int ieee80211_sta_config_auth(str
  	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
  	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
  	struct ieee80211_sta_bss *bss, *selected = NULL;
-	int top_rssi = 0, freq;
+	int top_level = 0, freq;

  	if (!ifsta->auto_channel_sel && !ifsta->auto_bssid_sel &&
  	    !ifsta->auto_ssid_sel) {
@@ -2090,9 +2090,9 @@ static int ieee80211_sta_config_auth(str
  		    !ieee80211_sta_match_ssid(ifsta, bss->ssid, bss->ssid_len))
  			continue;

-		if (top_rssi < bss->rssi) {
+		if (top_level < bss->level) {
  			selected = bss;
-			top_rssi = bss->rssi;
+			top_level = bss->level;
  		}
  	}
  	if (selected)
@@ -2822,8 +2822,8 @@ ieee80211_sta_scan_result(struct net_dev

  	memset(&iwe, 0, sizeof(iwe));
  	iwe.cmd = IWEVQUAL;
-	iwe.u.qual.qual = bss->signal;
-	iwe.u.qual.level = bss->rssi;
+	iwe.u.qual.qual = bss->qual;
+	iwe.u.qual.level = bss->level;
  	iwe.u.qual.noise = bss->noise;
  	iwe.u.qual.updated = local->wstats_flags;
  	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
@@ -2908,7 +2908,7 @@ ieee80211_sta_scan_result(struct net_dev

  		memset(&iwe, 0, sizeof(iwe));
  		iwe.cmd = IWEVCUSTOM;
-		sprintf(buf, "rssi=%d", bss->rssi);
+		sprintf(buf, "level=%d", bss->level);
  		iwe.u.data.length = strlen(buf);
  		current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe,
  						  buf);
Index: wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
+++ wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
@@ -460,7 +460,7 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
  	u16 phystat0, phystat3, chanstat, mactime;
  	u32 macstat;
  	u16 chanid;
-	u8 jssi;
+	u8 qual;
  	int padding;

  	memset(&status, 0, sizeof(status));
@@ -468,7 +468,7 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
  	/* Get metadata about the frame from the header. */
  	phystat0 = le16_to_cpu(rxhdr->phy_status0);
  	phystat3 = le16_to_cpu(rxhdr->phy_status3);
-	jssi = rxhdr->jssi;
+	qual = rxhdr->jssi;
  	macstat = le32_to_cpu(rxhdr->mac_status);
  	mactime = le16_to_cpu(rxhdr->mac_time);
  	chanstat = le16_to_cpu(rxhdr->channel);
@@ -529,12 +529,12 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
  		}
  	}

-	status.signal = bcm43xx_rssi_postprocess(dev, jssi,
+	status.level = bcm43xx_rssi_postprocess(dev, qual,
  					      (phystat0 & BCM43xx_RX_PHYST0_OFDM),
  					      (phystat0 & BCM43xx_RX_PHYST0_GAINCTL),
  					      (phystat3 & BCM43xx_RX_PHYST3_TRSTATE));
  	status.noise = dev->stats.link_noise;
-	status.ssi = jssi;
+	status.qual = qual;
  	if (phystat0 & BCM43xx_RX_PHYST0_OFDM)
  		status.rate = bcm43xx_plcp_get_bitrate_ofdm(plcp);
  	else
Index: wireless-dev/net/mac80211/debugfs_sta.c
===================================================================
--- wireless-dev.orig/net/mac80211/debugfs_sta.c
+++ wireless-dev/net/mac80211/debugfs_sta.c
@@ -76,8 +76,8 @@ STA_FILE(txrate, txrate, RATE);
  STA_FILE(last_txrate, last_txrate, RATE);
  STA_FILE(tx_retry_failed, tx_retry_failed, LU);
  STA_FILE(tx_retry_count, tx_retry_count, LU);
-STA_FILE(last_rssi, last_rssi, D);
-STA_FILE(last_signal, last_signal, D);
+STA_FILE(last_level, last_level, D);
+STA_FILE(last_qual, last_qual, D);
  STA_FILE(last_noise, last_noise, D);
  STA_FILE(channel_use, channel_use, D);
  STA_FILE(wep_weak_iv_count, wep_weak_iv_count, D);
Index: wireless-dev/net/mac80211/ieee80211_i.h
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_i.h
+++ wireless-dev/net/mac80211/ieee80211_i.h
@@ -82,7 +82,7 @@ struct ieee80211_sta_bss {
  	int hw_mode;
  	int channel;
  	int freq;
-	int rssi, signal, noise;
+	int level, qual, noise;
  	u8 *wpa_ie;
  	size_t wpa_ie_len;
  	u8 *rsn_ie;
Index: wireless-dev/net/mac80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c
+++ wireless-dev/net/mac80211/ieee80211_ioctl.c
@@ -445,7 +445,7 @@ static int ieee80211_ioctl_get_info_sta(
  		skb_queue_len(&sta->ps_tx_buf);
  	param->u.get_info_sta.tx_retry_failed = sta->tx_retry_failed;
  	param->u.get_info_sta.tx_retry_count = sta->tx_retry_count;
-	param->u.get_info_sta.last_rssi = sta->last_rssi;
+	param->u.get_info_sta.last_rssi = sta->last_level;
  	param->u.get_info_sta.last_ack_rssi = sta->last_ack_rssi[2];

  	sta_info_put(sta);
@@ -1593,12 +1593,12 @@ static int ieee80211_ioctl_giwrange(stru
  	range->min_frag = 256;
  	range->max_frag = 2346;

-	range->max_qual.qual = local->hw.max_signal;
+	range->max_qual.qual = local->hw.max_qual;
  	range->max_qual.level = local->hw.max_rssi;
  	range->max_qual.noise = local->hw.max_noise;
  	range->max_qual.updated = local->wstats_flags;

-	range->avg_qual.qual = local->hw.max_signal/2;
+	range->avg_qual.qual = local->hw.max_qual/2;
  	range->avg_qual.level = 0;
  	range->avg_qual.noise = 0;
  	range->avg_qual.updated = local->wstats_flags;
@@ -3084,8 +3084,8 @@ static struct iw_statistics *ieee80211_g
  		wstats->qual.noise = 0;
  		wstats->qual.updated = IW_QUAL_ALL_INVALID;
  	} else {
-		wstats->qual.level = sta->last_rssi;
-		wstats->qual.qual = sta->last_signal;
+		wstats->qual.level = sta->last_level;
+		wstats->qual.qual = sta->last_qual;
  		wstats->qual.noise = sta->last_noise;
  		wstats->qual.updated = local->wstats_flags;
  		sta_info_put(sta);
Index: wireless-dev/net/mac80211/sta_info.h
===================================================================
--- wireless-dev.orig/net/mac80211/sta_info.h
+++ wireless-dev/net/mac80211/sta_info.h
@@ -82,8 +82,8 @@ struct sta_info {
  	unsigned long rx_fragments; /* number of received MPDUs */
  	unsigned long rx_dropped; /* number of dropped MPDUs from this STA */

-	int last_rssi; /* RSSI of last received frame from this STA */
-	int last_signal; /* signal of last received frame from this STA */
+	int last_level; /* level of last received frame from this STA */
+	int last_qual; /* qual of last received frame from this STA */
  	int last_noise; /* noise of last received frame from this STA */
  	int last_ack_rssi[3]; /* RSSI of last received ACKs from this STA */
  	unsigned long last_ack;
Index: wireless-dev/drivers/net/wireless/mac80211/adm8211/adm8211.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/adm8211/adm8211.c
+++ wireless-dev/drivers/net/wireless/mac80211/adm8211/adm8211.c
@@ -540,9 +540,9 @@ static void adm8211_interrupt_rci(struct
  			struct ieee80211_rx_status rx_status = {0};

  			if (priv->revid < ADM8211_REV_CA)
-				rx_status.ssi = rssi;
+				rx_status.level = rssi;
  			else
-				rx_status.ssi = 100 - rssi;
+				rx_status.level = 100 - rssi;

  			if (rate <= 4)
  				rx_status.rate = rate_tbl[rate];
Index: wireless-dev/drivers/net/wireless/mac80211/p54/prism54common.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/p54/prism54common.c
+++ wireless-dev/drivers/net/wireless/mac80211/p54/prism54common.c
@@ -282,7 +282,7 @@ static void p54_rx_data(struct ieee80211
  	struct ieee80211_rx_status rx_status = {0};
  	u16 freq = le16_to_cpu(hdr->freq);

-	rx_status.ssi = hdr->rssi;	/* TODO: check this */
+	rx_status.level = hdr->rssi;	/* TODO: check this */
  	rx_status.rate = min(hdr->rate + 1, 12);	/* TODO: check this */
  	rx_status.channel = freq == 2484 ? 14 : (freq - 2407)/5;
  	rx_status.freq = freq;
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
@@ -1742,7 +1742,7 @@ static void rt2500pci_rxdone(struct work
  		 * Update link statistics
  		 */
  		rt2x00_update_link_rssi(&rt2x00dev->link,
-			rt2x00dev->rx_status.ssi);
+			rt2x00dev->rx_status.level);

  skip_entry:
  		rt2x00_set_field32(&word0, RXD_W0_OWNER_NIC, 1);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
@@ -1702,7 +1702,7 @@ static void rt2500usb_interrupt_rxdone(s
  	/*
  	 * Update link statistics
  	 */
-	rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.ssi);
+	rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.level);

  skip_entry:
  	if (!GET_FLAG(ring->rt2x00dev, DEVICE_ENABLED_RADIO))
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
@@ -157,7 +157,7 @@ void rt2x00lib_update_rx_stats(struct rt
  	}

  	rt2x00dev->rx_status.rate = val;
-	rt2x00dev->rx_status.ssi = rssi;
+	rt2x00dev->rx_status.level = rssi;
  	rt2x00dev->rx_status.noise = rt2x00_get_link_noise(&rt2x00dev->link);
  }
  EXPORT_SYMBOL_GPL(rt2x00lib_update_rx_stats);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
@@ -2047,7 +2047,7 @@ static void rt61pci_rxdone(struct work_s
  		 * Update link statistics
  		 */
  		rt2x00_update_link_rssi(&rt2x00dev->link,
-			rt2x00dev->rx_status.ssi);
+			rt2x00dev->rx_status.level);

  skip_entry:
  		rt2x00_set_field32(&word0, RXD_W0_OWNER_NIC, 1);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
@@ -1858,7 +1858,7 @@ static void rt73usb_interrupt_rxdone(str
  	/*
  	 * Update link statistics
  	 */
-	rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.ssi);
+	rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.level);

  skip_entry:
  	if (!GET_FLAG(ring->rt2x00dev, DEVICE_ENABLED_RADIO))
Index: wireless-dev/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
+++ wireless-dev/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
@@ -161,8 +161,8 @@ static void rtl8187_rx_cb(struct urb *ur
  	}

  	rx_status.antenna = (hdr->signal >> 7) & 1;
-	rx_status.signal = 64 - min(hdr->noise, (u8)64);
-	rx_status.ssi = signal;
+	rx_status.qual = 64 - min(hdr->noise, (u8)64);
+	rx_status.level = signal;
  	rx_status.rate = priv->rates[rate].rate;
  	rx_status.freq = dev->conf.freq;
  	rx_status.channel = dev->conf.channel;
@@ -609,7 +609,7 @@ static int __devinit rtl8187_probe(struc
  	dev->extra_tx_headroom = sizeof(struct rtl8187_tx_hdr);
  	dev->queues = 1;
  	dev->max_rssi = 65;
-	dev->max_signal = 64;
+	dev->max_qual = 64;

  	for (i = 0; i < 2; i++)
  		if ((err = ieee80211_register_hwmode(dev, &priv->modes[i])))
Index: wireless-dev/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
+++ wireless-dev/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
@@ -407,8 +407,8 @@ static int fill_rx_stats(struct ieee8021
  	stats->channel = _zd_chip_get_channel(&mac->chip);
  	stats->freq = zd_channels[stats->channel - 1].freq;
  	stats->phymode = MODE_IEEE80211G;
-	stats->ssi = zd_rx_strength_percent(status->signal_strength);
-	stats->signal = zd_rx_qual_percent(buffer,
+	stats->level = zd_rx_strength_percent(status->signal_strength);
+	stats->qual = zd_rx_qual_percent(buffer,
  		                          length - sizeof(struct rx_status),
  		                          status);
  	stats->rate = zd_rx_rate(buffer, status);
@@ -453,7 +453,7 @@ static int filter_ack(struct ieee80211_h
  	if (control) {
  		memcpy(&status.control, control, sizeof(status.control));
  		status.flags = IEEE80211_TX_STATUS_ACK;
-		status.ack_signal = stats->ssi;
+		status.ack_signal = stats->level;
  		ieee80211_tx_status_irqsafe(dev, skb, &status);
  		kfree(control);
  	} else
@@ -631,7 +631,7 @@ struct ieee80211_hw *zd_mac_alloc(struct
  	dev->flags = IEEE80211_HW_RX_INCLUDES_FCS |
  		     IEEE80211_HW_WEP_INCLUDE_IV;
  	dev->max_rssi = 100;
-	dev->max_signal = 100;
+	dev->max_qual = 100;

  	dev->queues = 1;
  	dev->extra_tx_headroom = sizeof(struct zd_ctrlset);

----




  reply	other threads:[~2007-04-10  0:58 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-08  5:04 [PATCH] mac80211: Report correct wireless statistics Larry Finger
2007-04-08  7:48 ` Tomas Winkler
2007-04-08 15:35 ` Michael Wu
2007-04-08 22:26   ` Larry Finger
2007-04-08 23:02     ` Michael Wu
2007-04-08 23:32       ` Larry Finger
2007-04-08 23:41         ` Michael Wu
2007-04-09  0:02           ` Larry Finger
2007-04-09  0:31             ` Michael Wu
2007-04-09  3:54               ` Larry Finger
2007-04-09  4:43                 ` Michael Wu
2007-04-09  5:06                   ` Larry Finger
2007-04-09 12:07                   ` Dan Williams
2007-04-09 12:21                     ` Dan Williams
2007-04-09 15:49                     ` Larry Finger
2007-04-09 17:16                       ` Michael Wu
2007-04-09 21:12                         ` Larry Finger
2007-04-09 23:02                           ` Michael Wu
2007-04-10  0:59                             ` Larry Finger [this message]
2007-04-13 23:18                               ` Michael Wu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=461AE160.6060404@lwfinger.net \
    --to=larry.finger@lwfinger.net \
    --cc=Bcm43xx-dev@lists.berlios.de \
    --cc=dcbw@redhat.com \
    --cc=flamingice@sourmilk.net \
    --cc=jbenc@suse.cz \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=mb@bu3sch.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.