All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org
Cc: Solomon Peachy <pizza@shaftnet.org>, Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 26/49] Staging: wlan-ng: Eliminate more <2.6 kernel support.
Date: Wed, 29 Oct 2008 15:39:53 -0700	[thread overview]
Message-ID: <1225320016-21803-26-git-send-email-greg@kroah.com> (raw)
In-Reply-To: <20081029223832.GC21657@kroah.com>

From: Solomon Peachy <pizza@shaftnet.org>

Signed-off-by: Solomon Peachy <pizza@shaftnet.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 drivers/staging/wlan-ng/hfa384x_usb.c  |   86 +----------------------------
 drivers/staging/wlan-ng/p80211mod.c    |   13 ----
 drivers/staging/wlan-ng/p80211netdev.c |   95 --------------------------------
 drivers/staging/wlan-ng/p80211netdev.h |   25 --------
 drivers/staging/wlan-ng/prism2sta.c    |   10 ---
 drivers/staging/wlan-ng/wlan_compat.h  |    4 -
 6 files changed, 1 insertions(+), 232 deletions(-)

diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c
index 376ba58..2cd376e 100644
--- a/drivers/staging/wlan-ng/hfa384x_usb.c
+++ b/drivers/staging/wlan-ng/hfa384x_usb.c
@@ -171,23 +171,7 @@ out:
 }
 #endif
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)
-static void
-usb_init_urb(struct urb *urb)
-{
-	memset(urb, 0, sizeof(*urb));
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* tune me! */
-	urb->count = (atomic_t)ATOMIC_INIT(1);
-#endif
-	spin_lock_init(&urb->lock);
-}
-#endif
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* tune me! */
-#  define SUBMIT_URB(u,f)  usb_submit_urb(u,f)
-#else
-#  define SUBMIT_URB(u,f)  usb_submit_urb(u)
-#endif
+#define SUBMIT_URB(u,f)  usb_submit_urb(u,f)
 
 /*================================================================*/
 /* Project Includes */
@@ -1594,78 +1578,10 @@ hfa384x_copy_to_aux(
 ----------------------------------------------------------------*/
 int hfa384x_corereset(hfa384x_t *hw, int holdtime, int settletime, int genesis)
 {
-#if 0
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-	struct usb_device	*parent = hw->usb->parent;
-	int			i;
-	int			port = -1;
-#endif
-#endif
 	int 			result = 0;
 
-
-#define P2_USB_RT_PORT		(USB_TYPE_CLASS | USB_RECIP_OTHER)
-#define P2_USB_FEAT_RESET	4
-#define P2_USB_FEAT_C_RESET	20
-
 	DBFENTER;
 
-#if 0
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-	/* Find the hub port */
-	for ( i = 0; i < parent->maxchild; i++) {
-		if (parent->children[i] == hw->usb) {
-			port = i;
-			break;
-		}
-	}
-	if (port < 0) return -ENOENT;
-
-	/* Set and clear the reset */
-	usb_control_msg(parent, usb_sndctrlpipe(parent, 0),
-		USB_REQ_SET_FEATURE, P2_USB_RT_PORT, P2_USB_FEAT_RESET,
-		port+1, NULL, 0, 1*HZ);
-	wait_ms(holdtime);
-	usb_control_msg(parent, usb_sndctrlpipe(parent, 0),
-		USB_REQ_CLEAR_FEATURE, P2_USB_RT_PORT, P2_USB_FEAT_C_RESET,
-		port+1, NULL, 0, 1*HZ);
-	wait_ms(settletime);
-
-	/* Set the device address */
-	result=usb_set_address(hw->usb);
-	if (result < 0) {
-		WLAN_LOG_ERROR("reset_usbdev: Dev not accepting address, "
-			"result=%d\n", result);
-		clear_bit(hw->usb->devnum, &hw->usb->bus->devmap.devicemap);
-		hw->usb->devnum = -1;
-		goto done;
-	}
-	/* Let the address settle */
-	wait_ms(20);
-
-	/* Assume we're reusing the original descriptor data */
-
-	/* Set the configuration. */
-	WLAN_LOG_DEBUG(3, "Setting Configuration %d\n",
-		hw->usb->config[0].bConfigurationValue);
-	result=usb_set_configuration(hw->usb, hw->usb->config[0].bConfigurationValue);
-	if ( result ) {
-		WLAN_LOG_ERROR("usb_set_configuration() failed, result=%d.\n",
-				result);
-		goto done;
-	}
-	/* Let the configuration settle */
-	wait_ms(20);
-
- done:
-#else
-	result=usb_reset_device(hw->usb);
-	if(result<0) {
-		WLAN_LOG_ERROR("usb_reset_device() failed, result=%d.\n",result);
-	}
-#endif
-#endif
-
 	result=usb_reset_device(hw->usb);
 	if(result<0) {
 		WLAN_LOG_ERROR("usb_reset_device() failed, result=%d.\n",result);
diff --git a/drivers/staging/wlan-ng/p80211mod.c b/drivers/staging/wlan-ng/p80211mod.c
index 605c11b..d1add78 100644
--- a/drivers/staging/wlan-ng/p80211mod.c
+++ b/drivers/staging/wlan-ng/p80211mod.c
@@ -60,9 +60,7 @@
 #include <linux/version.h>
 
 #include <linux/module.h>
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,25))
 #include <linux/moduleparam.h>
-#endif
 
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -154,14 +152,7 @@ int init_module(void)
 {
         DBFENTER;
 
-#if 0
-        printk(KERN_NOTICE "%s (%s) Loaded\n", version, WLAN_BUILD_DATE);
-#endif
-
 	p80211netdev_startup();
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(NULL, WLAN_HOTPLUG_STARTUP);
-#endif
 
         DBFEXIT;
         return 0;
@@ -191,11 +182,7 @@ void cleanup_module(void)
 {
         DBFENTER;
 
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(NULL, WLAN_HOTPLUG_SHUTDOWN);
-#endif
 	p80211netdev_shutdown();
-        printk(KERN_NOTICE "%s Unloaded\n", version);
 
         DBFEXIT;
         return;
diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c
index 11f84a8..2b3abba 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -285,9 +285,6 @@ static int p80211knetdev_open( netdevice_t *netdev )
 	if ( wlandev->open != NULL) {
 		result = wlandev->open(wlandev);
 		if ( result == 0 ) {
-#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,3,43) )
-			netdev->interrupt = 0;
-#endif
 			p80211netdev_start_queue(wlandev);
 			wlandev->state = WLAN_DEVICE_OPEN;
 		}
@@ -478,15 +475,6 @@ static int p80211knetdev_hard_start_xmit( struct sk_buff *skb, netdevice_t *netd
 	memset(&p80211_hdr, 0, sizeof(p80211_hdr_t));
 	memset(&p80211_wep, 0, sizeof(p80211_metawep_t));
 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-	if ( test_and_set_bit(0, (void*)&(netdev->tbusy)) != 0 ) {
-		/* We've been called w/ tbusy set, has the tx */
-		/* path stalled?   */
-		WLAN_LOG_DEBUG(1, "called when tbusy set\n");
-		result = 1;
-		goto failed;
-	}
-#else
 	if ( netif_queue_stopped(netdev) ) {
 		WLAN_LOG_DEBUG(1, "called when queue stopped.\n");
 		result = 1;
@@ -495,12 +483,6 @@ static int p80211knetdev_hard_start_xmit( struct sk_buff *skb, netdevice_t *netd
 
 	netif_stop_queue(netdev);
 
-	/* No timeout handling here, 2.3.38+ kernels call the
-	 * timeout function directly.
-	 * TODO: Add timeout handling.
-	*/
-#endif
-
 	/* Check to see that a valid mode is set */
 	switch( wlandev->macmode ) {
 	case WLAN_MACMODE_IBSS_STA:
@@ -792,15 +774,9 @@ static int p80211knetdev_set_mac_address(netdevice_t *dev, void *addr)
 
 	DBFENTER;
 	/* If we're running, we don't allow MAC address changes */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-	if ( dev->start) {
-		return -EBUSY;
-	}
-#else
 	if (netif_running(dev)) {
 		return -EBUSY;
 	}
-#endif
 
 	/* Set up some convenience pointers. */
 	mibattr = &dot11req.mibattribute;
@@ -939,12 +915,7 @@ int wlan_setup(wlandevice_t *wlandev)
 #endif
 #endif
 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-		dev->tbusy = 1;
-		dev->start = 0;
-#else
 		netif_stop_queue(dev);
-#endif
 #ifdef HAVE_CHANGE_MTU
 		dev->change_mtu = wlan_change_mtu;
 #endif
@@ -1039,11 +1010,7 @@ int register_wlandev(wlandevice_t *wlandev)
 		return -EIO;
 	}
 
-#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) )
-	dev->name = wlandev->name;
-#else
 	strcpy(wlandev->name, dev->name);
-#endif
 
 #ifdef CONFIG_PROC_FS
 	if (proc_p80211) {
@@ -1062,10 +1029,6 @@ int register_wlandev(wlandevice_t *wlandev)
 	}
 #endif
 
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(wlandev, WLAN_HOTPLUG_REGISTER);
-#endif
-
 	DBFEXIT;
 	return 0;
 }
@@ -1094,10 +1057,6 @@ int unregister_wlandev(wlandevice_t *wlandev)
 
 	DBFENTER;
 
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(wlandev, WLAN_HOTPLUG_REMOVE);
-#endif
-
 #ifdef CONFIG_PROC_FS
 	if ( wlandev->procwlandev ) {
 		remove_proc_entry("wlandev", wlandev->procdir);
@@ -1416,61 +1375,11 @@ static int p80211_rx_typedrop( wlandevice_t *wlandev, UINT16 fc)
 	return drop;
 }
 
-#ifdef CONFIG_HOTPLUG
-/* Notify userspace when a netdevice event occurs,
- * by running '/sbin/hotplug net' with certain
- * environment variables set.
- */
-int p80211_run_sbin_hotplug(wlandevice_t *wlandev, char *action)
-{
-        char *argv[3], *envp[7], ifname[12 + IFNAMSIZ], action_str[32];
-	char nsdname[32], wlan_wext[32];
-        int i;
-
-	if (wlandev) {
-		sprintf(ifname, "INTERFACE=%s", wlandev->name);
-		sprintf(nsdname, "NSDNAME=%s", wlandev->nsdname);
-	} else {
-		sprintf(ifname, "INTERFACE=null");
-		sprintf(nsdname, "NSDNAME=null");
-	}
-
-	sprintf(wlan_wext, "WLAN_WEXT=%s", wlan_wext_write ? "y" : "");
-        sprintf(action_str, "ACTION=%s", action);
-
-        i = 0;
-        argv[i++] = hotplug_path;
-        argv[i++] = "wlan";
-        argv[i] = NULL;
-
-        i = 0;
-        /* minimal command environment */
-        envp [i++] = "HOME=/";
-        envp [i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
-        envp [i++] = ifname;
-        envp [i++] = action_str;
-        envp [i++] = nsdname;
-        envp [i++] = wlan_wext;
-        envp [i] = NULL;
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,62))
-        return call_usermodehelper(argv [0], argv, envp);
-#else
-        return call_usermodehelper(argv [0], argv, envp, 0);
-#endif
-}
-
-#endif
-
 
 void    p80211_suspend(wlandevice_t *wlandev)
 {
 	DBFENTER;
 
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(wlandev, WLAN_HOTPLUG_SUSPEND);
-#endif
-
 	DBFEXIT;
 }
 
@@ -1478,10 +1387,6 @@ void    p80211_resume(wlandevice_t *wlandev)
 {
 	DBFENTER;
 
-#ifdef CONFIG_HOTPLUG
-	p80211_run_sbin_hotplug(wlandev, WLAN_HOTPLUG_RESUME);
-#endif
-
 	DBFEXIT;
 }
 
diff --git a/drivers/staging/wlan-ng/p80211netdev.h b/drivers/staging/wlan-ng/p80211netdev.h
index 9b2e0cd..12b8730 100644
--- a/drivers/staging/wlan-ng/p80211netdev.h
+++ b/drivers/staging/wlan-ng/p80211netdev.h
@@ -289,12 +289,7 @@ p80211netdev_stop_queue(wlandevice_t *wlandev)
 {
 	if ( !wlandev ) return;
 	if ( !wlandev->netdev ) return;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-	wlandev->netdev->tbusy = 1;
-	wlandev->netdev->start = 0;
-#else
 	netif_stop_queue(wlandev->netdev);
-#endif
 }
 
 static inline void
@@ -302,12 +297,7 @@ p80211netdev_start_queue(wlandevice_t *wlandev)
 {
 	if ( !wlandev ) return;
 	if ( !wlandev->netdev ) return;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-	wlandev->netdev->tbusy = 0;
-	wlandev->netdev->start = 1;
-#else
 	netif_start_queue(wlandev->netdev);
-#endif
 }
 
 static inline void
@@ -315,22 +305,7 @@ p80211netdev_wake_queue(wlandevice_t *wlandev)
 {
 	if ( !wlandev ) return;
 	if ( !wlandev->netdev ) return;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,38) )
-	wlandev->netdev->tbusy = 0;
-	mark_bh(NET_BH);
-#else
 	netif_wake_queue(wlandev->netdev);
-#endif
 }
 
-#ifdef CONFIG_HOTPLUG
-#define WLAN_HOTPLUG_REGISTER "register"
-#define WLAN_HOTPLUG_REMOVE   "remove"
-#define WLAN_HOTPLUG_STARTUP  "startup"
-#define WLAN_HOTPLUG_SHUTDOWN "shutdown"
-#define WLAN_HOTPLUG_SUSPEND "suspend"
-#define WLAN_HOTPLUG_RESUME "resume"
-int p80211_run_sbin_hotplug(wlandevice_t *wlandev, char *action);
-#endif
-
 #endif
diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c
index 397143e..819dadd 100644
--- a/drivers/staging/wlan-ng/prism2sta.c
+++ b/drivers/staging/wlan-ng/prism2sta.c
@@ -56,14 +56,9 @@
 
 #include "version.h"
 
-
 #include <linux/version.h>
-
 #include <linux/module.h>
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,25))
 #include <linux/moduleparam.h>
-#endif
-
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/types.h>
@@ -71,12 +66,7 @@
 #include <linux/slab.h>
 #include <linux/wireless.h>
 #include <linux/netdevice.h>
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-#include <linux/tqueue.h>
-#else
 #include <linux/workqueue.h>
-#endif
 
 #include <asm/io.h>
 #include <linux/delay.h>
diff --git a/drivers/staging/wlan-ng/wlan_compat.h b/drivers/staging/wlan-ng/wlan_compat.h
index 772d1a3..610078d 100644
--- a/drivers/staging/wlan-ng/wlan_compat.h
+++ b/drivers/staging/wlan-ng/wlan_compat.h
@@ -267,10 +267,6 @@ typedef struct net_device netdevice_t;
 typedef u32 pm_message_t;
 #endif
 
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9))
-#define hotplug_path  "/etc/hotplug/wlan.agent"
-#endif
-
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9))
 #define eth_hdr(x)           (x)->mac.ethernet
 #endif
-- 
1.6.0.2


  parent reply	other threads:[~2008-10-29 22:52 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-29 22:38 [GIT PATCH] STAGING patches for 2.6-git Greg KH
2008-10-29 22:39 ` [PATCH 01/49] staging: correct dubious use of !x & y Greg KH
2008-10-29 22:39 ` [PATCH 02/49] Staging: make usbip depend on CONFIG_NET Greg KH
2008-10-29 22:39 ` [PATCH 03/49] Staging: w35und: make wb35_probe() and wb35_disconnect() funtions static Greg KH
2008-10-29 22:39 ` [PATCH 04/49] Staging: w35und: remove unused wb35_open() and wb35_close() functions Greg KH
2008-10-29 22:39 ` [PATCH 05/49] Staging: w35und: use msleep() and udelay() Greg KH
2008-10-29 22:39 ` [PATCH 06/49] Staging: w35und: remove the no-op pa_stall_execution macro Greg KH
2008-10-29 22:39 ` [PATCH 07/49] Staging: w35und: purb typedef removal Greg KH
2008-10-29 22:39 ` [PATCH 08/49] Staging: w35und: reg queue struct " Greg KH
2008-10-29 22:39 ` [PATCH 09/49] Staging: w35und: wb35reg " Greg KH
2008-10-29 22:39 ` [PATCH 10/49] Staging: w35und: padapter " Greg KH
2008-10-29 22:39 ` [PATCH 11/49] Staging: w35und: merge wblinux struct to adapter Greg KH
2008-10-29 22:39 ` [PATCH 12/49] Staging: w35und: wb35_probe() cleanup Greg KH
2008-10-29 22:39 ` [PATCH 13/49] Staging: w35und: remove usb_submit_urb wrapper function Greg KH
2008-10-29 23:09   ` Pavel Machek
2008-10-29 22:39 ` [PATCH 14/49] Staging: w35und: remove usb_alloc_urb " Greg KH
2008-10-29 23:10   ` Pavel Machek
2008-10-29 22:39 ` [PATCH 15/49] w35und: remove dead code from wbusb_f.h Greg KH
2008-10-29 22:39 ` [PATCH 16/49] Staging: w35und: remove true/false boolean macros Greg KH
2008-10-29 22:39 ` [PATCH 17/49] Staging: w35und: OS_MEMORY_ALLOC wrapper removal Greg KH
2008-10-29 22:39 ` [PATCH 18/49] Staging: w35und: usb_put_dev() is missing from wb35_disconnect() Greg KH
2008-10-29 22:39 ` [PATCH 19/49] Staging: w35und: remove macro magic from MLME_GetNextPacket() Greg KH
2008-10-29 22:39 ` [PATCH 20/49] Staging: w35und: plug memory leak in wbsoft_tx() Greg KH
2008-10-29 22:39 ` [PATCH 21/49] Staging: w35und: move supported band initialization out of wb35_probe() Greg KH
2008-10-29 22:39 ` [PATCH 22/49] Staging: wlan-ng: Remove PCI/PLX/PCMCIA files Greg KH
2008-10-29 22:39 ` [PATCH 23/49] Staging: wlan-ng: Update Help text to mention prism3 devices Greg KH
2008-10-29 22:39 ` [PATCH 24/49] Staging: wlan-ng: Delete PCI/PLX/PCMCIA-specific code Greg KH
2008-10-29 22:39 ` [PATCH 25/49] Staging: wlan-ng: Make wlan-ng use WEXT mode by default Greg KH
2008-10-29 22:39 ` Greg KH [this message]
2008-10-29 22:39 ` [PATCH 27/49] Staging: wlan-ng: Eliminate all backwards-compatibility for <2.6.13 kernels Greg KH
2008-10-29 22:39 ` [PATCH 28/49] Staging: wlan-ng: Eliminate a boatload of tertiaryAP-only code Greg KH
2008-10-29 22:39 ` [PATCH 29/49] Staging: wlan-ng: Remove AP-only code from MLME functions Greg KH
2008-10-29 22:39 ` [PATCH 30/49] Staging: wlan-ng: Get rid of the MTU tests in the rx conversion path Greg KH
2008-10-29 22:39 ` [PATCH 31/49] Staging: wlan-ng: Eliminate one more rx mtu test Greg KH
2008-10-29 22:39 ` [PATCH 32/49] Staging: wlan-ng: Eliminate local 'version.h' Greg KH
2008-10-29 22:40 ` [PATCH 33/49] Staging: wlan-ng: Eliminate usage of procfs Greg KH
2008-10-29 22:40 ` [PATCH 34/49] Staging: at76_usb: update drivers/staging/at76_usb w/ mac80211 port Greg KH
2008-10-29 22:40 ` [PATCH 35/49] Staging: at76_usb: remove compiler warnings Greg KH
2008-10-29 22:40 ` [PATCH 36/49] Staging: at76_usb: fix up all remaining checkpatch.pl warnings Greg KH
2008-10-29 22:40 ` [PATCH 37/49] Staging: poch: Block size bug fix Greg KH
2008-10-29 22:40 ` [PATCH 38/49] Staging: poch: Update TODO list Greg KH
2008-10-29 22:40 ` [PATCH 39/49] Staging: poch: Correct pages from bytes Greg KH
2008-10-29 22:40 ` [PATCH 40/49] Staging: poch: minor fixes Greg KH
2008-10-29 22:40 ` [PATCH 41/49] Staging: poch: Fix build warnings Greg KH
2008-10-29 22:40 ` [PATCH 42/49] Staging: poch: Rx control register init Greg KH
2008-10-29 22:40 ` [PATCH 43/49] Staging: poch: Fix user space protocol syncing Greg KH
2008-10-29 22:40 ` [PATCH 44/49] Staging: poch: Fine grained locking Greg KH
2008-10-29 22:40 ` [PATCH 45/49] Staging: sxg: remove typedefs Greg KH
2008-10-29 22:40 ` [PATCH 46/49] Staging: sxg: break the build in a cleaner way when !x86 Greg KH
2008-10-29 22:40 ` [PATCH 47/49] Staging: add agnx wireless driver Greg KH

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=1225320016-21803-26-git-send-email-greg@kroah.com \
    --to=greg@kroah.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pizza@shaftnet.org \
    /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.