linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: Orinoco driver update
       [not found] <20020927025227.GC1898@zax>
@ 2002-09-27 19:56 ` Jeff Garzik
  2002-09-30  5:08   ` [Orinoco-devel] " David Gibson
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Garzik @ 2002-09-27 19:56 UTC (permalink / raw)
  To: David Gibson; +Cc: Linus Torvalds, Orinoco Development List, linux-kernel

David,

This doesn't compile at all...  stuff like "static void 
orinoco_reset[...]" in orinoco.c being called from orinoco_pci.c could 
never hope to build...

Linus applied it... would you mind sending an update patch please?

	Jeff




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Orinoco-devel] Re: Orinoco driver update
  2002-09-27 19:56 ` Orinoco driver update Jeff Garzik
@ 2002-09-30  5:08   ` David Gibson
  2002-09-30  5:37     ` Jeff Garzik
  0 siblings, 1 reply; 5+ messages in thread
From: David Gibson @ 2002-09-30  5:08 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linus Torvalds, Orinoco Development List, linux-kernel

On Fri, Sep 27, 2002 at 03:56:37PM -0400, Jeff Garzik wrote:
> David,
> 
> This doesn't compile at all...  stuff like "static void 
> orinoco_reset[...]" in orinoco.c being called from orinoco_pci.c could 
> never hope to build...
> 
> Linus applied it... would you mind sending an update patch please?

Crud.  Looks like my patch making script was borken, so orinoco_pci.c
wasn't updated properly.  The patch below should fix that, and adds
some other minor updates (driver version 0.13a) as well.

diff -uNr linux-2.5-pristine/drivers/net/wireless/airport.c linux-orinoco/drivers/net/wireless/airport.c
--- linux-2.5-pristine/drivers/net/wireless/airport.c	2002-09-28 08:12:21.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/airport.c	2002-09-30 14:46:30.000000000 +1000
@@ -1,4 +1,4 @@
-/* airport.c 0.13
+/* airport.c 0.13a
  *
  * A driver for "Hermes" chipset based Apple Airport wireless
  * card.
@@ -264,7 +264,7 @@
 	kfree(dev);
 }				/* airport_detach */
 
-static char version[] __initdata = "airport.c 0.13 (Benjamin Herrenschmidt <benh@kernel.crashing.org>)";
+static char version[] __initdata = "airport.c 0.13a (Benjamin Herrenschmidt <benh@kernel.crashing.org>)";
 MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>");
 MODULE_DESCRIPTION("Driver for the Apple Airport wireless card.");
 MODULE_LICENSE("Dual MPL/GPL");
diff -uNr linux-2.5-pristine/drivers/net/wireless/hermes.h linux-orinoco/drivers/net/wireless/hermes.h
--- linux-2.5-pristine/drivers/net/wireless/hermes.h	2002-09-28 08:12:21.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/hermes.h	2002-09-30 14:46:30.000000000 +1000
@@ -251,6 +251,18 @@
 	struct hermes_scan_apinfo aps[35];        /* Scan result */
 } __attribute__ ((packed));
 
+#define HERMES_LINKSTATUS_NOT_CONNECTED   (0x0000)  
+#define HERMES_LINKSTATUS_CONNECTED       (0x0001)
+#define HERMES_LINKSTATUS_DISCONNECTED    (0x0002)
+#define HERMES_LINKSTATUS_AP_CHANGE       (0x0003)
+#define HERMES_LINKSTATUS_AP_OUT_OF_RANGE (0x0004)
+#define HERMES_LINKSTATUS_AP_IN_RANGE     (0x0005)
+#define HERMES_LINKSTATUS_ASSOC_FAILED    (0x0006)
+  
+struct hermes_linkstatus {
+	u16 linkstatus;         /* Link status */
+} __attribute__ ((packed));
+
 // #define HERMES_DEBUG_BUFFER 1
 #define HERMES_DEBUG_BUFSIZE 4096
 struct hermes_debug_entry {
diff -uNr linux-2.5-pristine/drivers/net/wireless/orinoco.c linux-orinoco/drivers/net/wireless/orinoco.c
--- linux-2.5-pristine/drivers/net/wireless/orinoco.c	2002-09-28 08:12:22.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/orinoco.c	2002-09-30 14:46:30.000000000 +1000
@@ -1,4 +1,4 @@
-/* orinoco.c 0.13	- (formerly known as dldwd_cs.c and orinoco_cs.c)
+/* orinoco.c 0.13a	- (formerly known as dldwd_cs.c and orinoco_cs.c)
  *
  * A driver for Hermes or Prism 2 chipset based PCMCIA wireless
  * adaptors, with Lucent/Agere, Intersil or Symbol firmware.
@@ -316,16 +316,22 @@
  *	o No longer ignore the hard_reset argument to
  *	  alloc_orinocodev().  Oops.
  *
- * v0.12c -> v0.13 - 13 Sep 2002 - David Gibson
+ * v0.12c -> v0.13beta1 - 13 Sep 2002 - David Gibson
  *	o Revert the broken 0.12* locking scheme and go to a new yet
  *	  simpler scheme.
  *	o Do firmware resets only in orinoco_init() and when waking
  *	  the card from hard sleep.
  *
- * v0.13 -> v0.13 - 27 Sep 2002 - David Gibson
+ * v0.13beta1 -> v0.13 - 27 Sep 2002 - David Gibson
  *	o Re-introduced full resets (via schedule_task()) on Tx
  *	  timeout.
  *
+ * v0.13 -> v0.13a - 30 Sep 2002 - David Gibson
+ *	o Minor cleanups to info frame handling.  Add basic support
+ *	  for linkstatus info frames.
+ *	o Include required kernel headers in orinoco.h, to avoid
+ *	  compile problems.
+ *
  * TODO
  *	o New wireless extensions API (patch forthcoming from Moustafa
  *	  Youssef).
@@ -1424,6 +1430,7 @@
 		u16 len;
 		u16 type;
 	} __attribute__ ((packed)) info;
+	int len, type;
 	int err;
 
 	/* This is an answer to an INQUIRE command that we did earlier,
@@ -1441,25 +1448,29 @@
 		return;
 	}
 	
-	switch (le16_to_cpu(info.type)) {
+	len = HERMES_RECLEN_TO_BYTES(le16_to_cpu(info.len));
+	type = le16_to_cpu(info.type);
+
+	switch (type) {
 	case HERMES_INQ_TALLIES: {
 		struct hermes_tallies_frame tallies;
 		struct iw_statistics *wstats = &priv->wstats;
-		int len = le16_to_cpu(info.len) - 1;
 		
-		if (len > (sizeof(tallies) / 2)) {
-			DEBUG(1, "%s: tallies frame too long.\n", dev->name);
-			len = sizeof(tallies) / 2;
+		if (len > sizeof(tallies)) {
+			printk(KERN_WARNING "%s: Tallies frame too long (%d bytes)\n",
+			       dev->name, len);
+			len = sizeof(tallies);
 		}
 		
 		/* Read directly the data (no seek) */
-		hermes_read_words(hw, HERMES_DATA1, (void *) &tallies, len);
+		hermes_read_words(hw, HERMES_DATA1, (void *) &tallies,
+				  len / 2); /* FIXME: blech! */
 		
 		/* Increment our various counters */
 		/* wstats->discard.nwid - no wrong BSSID stuff */
 		wstats->discard.code +=
 			le16_to_cpu(tallies.RxWEPUndecryptable);
-		if (len == (sizeof(tallies) / 2))  
+		if (len == sizeof(tallies))  
 			wstats->discard.code +=
 				le16_to_cpu(tallies.RxDiscards_WEPICVError) +
 				le16_to_cpu(tallies.RxDiscards_WEPExcluded);
@@ -1474,9 +1485,54 @@
 #endif /* WIRELESS_EXT > 11 */
 	}
 	break;
+	case HERMES_INQ_LINKSTATUS: {
+		struct hermes_linkstatus linkstatus;
+		u16 newstatus;
+		const char *s;
+		
+		if (len != sizeof(linkstatus)) {
+			printk(KERN_WARNING "%s: Unexpected size for linkstatus frame (%d bytes)\n",
+			       dev->name, len);
+			break;
+		}
+
+		hermes_read_words(hw, HERMES_DATA1, (void *) &linkstatus,
+				  len / 2);
+		newstatus = le16_to_cpu(linkstatus.linkstatus);
+
+		switch (newstatus) {
+		case HERMES_LINKSTATUS_NOT_CONNECTED:
+			s = "Not Connected";
+                       break;
+               case HERMES_LINKSTATUS_CONNECTED:
+		       s = "Connected";
+                       break;
+               case HERMES_LINKSTATUS_DISCONNECTED:
+		       s = "Disconnected";
+                       break;
+               case HERMES_LINKSTATUS_AP_CHANGE:
+		       s = "AP Changed";
+                       break;
+               case HERMES_LINKSTATUS_AP_OUT_OF_RANGE:
+		       s = "AP Out of Range";
+                       break;
+               case HERMES_LINKSTATUS_AP_IN_RANGE:
+		       s = "AP In Range";
+                       break;
+               case HERMES_LINKSTATUS_ASSOC_FAILED:
+		       s = "Association Failed";
+		       break;
+		default:
+			s = "UNKNOWN";
+		}
+
+		printk(KERN_INFO "%s: New link status: %s (%04x)\n",
+		       dev->name, s, newstatus);
+	}
+	break;
 	default:
-		DEBUG(1, "%s: Unknown information frame received (type %04x).\n",
-		      priv->ndev->name, le16_to_cpu(info.type));
+		printk(KERN_DEBUG "%s: Unknown information frame received (type %04x).\n",
+		      dev->name, type);
 		/* We don't actually do anything about it */
 		break;
 	}
@@ -4206,7 +4262,7 @@
 
 /* Can't be declared "const" or the whole __initdata section will
  * become const */
-static char version[] __initdata = "orinoco.c 0.13 (David Gibson <hermes@gibson.dropbear.id.au> and others)";
+static char version[] __initdata = "orinoco.c 0.13a (David Gibson <hermes@gibson.dropbear.id.au> and others)";
 
 static int __init init_orinoco(void)
 {
diff -uNr linux-2.5-pristine/drivers/net/wireless/orinoco.h linux-orinoco/drivers/net/wireless/orinoco.h
--- linux-2.5-pristine/drivers/net/wireless/orinoco.h	2002-09-28 08:12:22.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/orinoco.h	2002-09-30 14:46:30.000000000 +1000
@@ -7,6 +7,11 @@
 #ifndef _ORINOCO_H
 #define _ORINOCO_H
 
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/netdevice.h>
+#include <linux/wireless.h>
+#include <linux/tqueue.h>
 #include "hermes.h"
 
 /* To enable debug messages */
diff -uNr linux-2.5-pristine/drivers/net/wireless/orinoco_cs.c linux-orinoco/drivers/net/wireless/orinoco_cs.c
--- linux-2.5-pristine/drivers/net/wireless/orinoco_cs.c	2002-09-28 08:12:22.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/orinoco_cs.c	2002-09-30 14:46:30.000000000 +1000
@@ -1,4 +1,4 @@
-/* orinoco_cs.c 0.13	- (formerly known as dldwd_cs.c)
+/* orinoco_cs.c 0.13a	- (formerly known as dldwd_cs.c)
  *
  * A driver for "Hermes" chipset based PCMCIA wireless adaptors, such
  * as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/
@@ -693,7 +693,7 @@
 
 /* Can't be declared "const" or the whole __initdata section will
  * become const */
-static char version[] __initdata = "orinoco_cs.c 0.13 (David Gibson <hermes@gibson.dropbear.id.au> and others)";
+static char version[] __initdata = "orinoco_cs.c 0.13a (David Gibson <hermes@gibson.dropbear.id.au> and others)";
 
 static int __init
 init_orinoco_cs(void)
diff -uNr linux-2.5-pristine/drivers/net/wireless/orinoco_pci.c linux-orinoco/drivers/net/wireless/orinoco_pci.c
--- linux-2.5-pristine/drivers/net/wireless/orinoco_pci.c	2002-08-14 13:13:13.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/orinoco_pci.c	2002-09-30 14:46:30.000000000 +1000
@@ -1,4 +1,4 @@
-/* orinoco_pci.c 0.01
+/* orinoco_pci.c 0.13a
  * 
  * Driver for Prism II devices that have a direct PCI interface
  * (i.e., not in a Pcmcia or PLX bridge)
@@ -122,41 +122,6 @@
 #define HERMES_PCI_COR_OFFT	(500)		/* ms */
 #define HERMES_PCI_COR_BUSYT	(500)		/* ms */
 
-MODULE_AUTHOR("Jean Tourrilhes <jt@hpl.hp.com>");
-MODULE_DESCRIPTION("Driver for wireless LAN cards using direct PCI interface");
-MODULE_LICENSE("Dual MPL/GPL");
-
-static int orinoco_pci_open(struct net_device *dev)
-{
-	struct orinoco_private *priv = (struct orinoco_private *) dev->priv;
-	int err;
-
-	netif_device_attach(dev);
-
-	err = orinoco_reset(priv);
-	if (err)
-		printk(KERN_ERR "%s: orinoco_reset failed in orinoco_pci_open()",
-		       dev->name);
-	else
-		netif_start_queue(dev);
-
-	return err;
-}
-
-static int orinoco_pci_stop(struct net_device *dev)
-{
-	struct orinoco_private *priv = (struct orinoco_private *) dev->priv;
-	netif_stop_queue(dev);
-	orinoco_shutdown(priv);
-	return 0;
-}
-
-static void
-orinoco_pci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
-	orinoco_interrupt(irq, (struct orinoco_private *)dev_id, regs);
-}
-
 /*
  * Do a soft reset of the PCI card using the Configuration Option Register
  * We need this to get going...
@@ -179,7 +144,6 @@
 
 	TRACE_ENTER(priv->ndev->name);
 
-
 	/* Assert the reset until the card notice */
 	hermes_write_regn(hw, PCI_COR, HERMES_PCI_COR_MASK);
 	printk(KERN_NOTICE "Reset done");
@@ -235,8 +199,6 @@
 	struct net_device *dev = NULL;
 	int netdev_registered = 0;
 
-	TRACE_ENTER("orinoco_pci");
-
 	err = pci_enable_device(pdev);
 	if (err)
 		return -EIO;
@@ -249,7 +211,7 @@
 		goto fail;
 
 	/* Usual setup of structures */
-	dev = alloc_orinocodev(0);
+	dev = alloc_orinocodev(0, NULL);
 	if (! dev) {
 		err = -ENOMEM;
 		goto fail;
@@ -259,9 +221,6 @@
 	dev->base_addr = (int) pci_ioaddr;
         dev->mem_start = (unsigned long) pci_iorange;
         dev->mem_end = ((unsigned long) pci_iorange) + pci_iolen - 1;
-	dev->open = orinoco_pci_open;
-	dev->stop = orinoco_pci_stop;
-/*  	priv->card_reset_handler = orinoco_pci_cor_reset; */
 
 	SET_MODULE_OWNER(dev);
 
@@ -270,9 +229,9 @@
 	       pdev->slot_name, dev->mem_start, dev->mem_end, pci_ioaddr, pdev->irq);
 
 	hermes_struct_init(&(priv->hw), dev->base_addr, HERMES_MEM, HERMES_32BIT_REGSPACING);
-	pci_set_drvdata(pdev, priv);
+	pci_set_drvdata(pdev, dev);
 
-	err = request_irq(pdev->irq, orinoco_pci_interrupt, SA_SHIRQ, dev->name, priv);
+	err = request_irq(pdev->irq, orinoco_interrupt, SA_SHIRQ, dev->name, priv);
 	if (err) {
 		printk(KERN_ERR "orinoco_pci: Error allocating IRQ %d.\n", pdev->irq);
 		err = -EBUSY;
@@ -291,32 +250,30 @@
 	priv->firmware_type = FIRMWARE_TYPE_INTERSIL;
 
 	err = register_netdev(dev);
-	if (err)
+	if (err) {
+		printk(KERN_ERR "%s: Failed to register net device\n", dev->name);
 		goto fail;
+	}
 	netdev_registered = 1;
 
-	err = orinoco_proc_dev_init(priv);
+	err = orinoco_proc_dev_init(dev);
 	if (err) {
 		printk(KERN_ERR "%s: Failed to create /proc node\n", dev->name);
 		err = -EIO;
 		goto fail;
 	}
 
-	TRACE_EXIT("orinoco_pci");
-
         return 0;               /* succeeded */
  fail:
-	printk(KERN_DEBUG "orinoco_pci: init_one(), FAIL!\n");
-
-	if (priv) {
-		orinoco_proc_dev_cleanup(priv);
+	if (dev) {
+		orinoco_proc_dev_cleanup(dev);
 		if (netdev_registered)
 			unregister_netdev(dev);
 
 		if (dev->irq)
 			free_irq(dev->irq, priv);
 
-		kfree(priv);
+		kfree(dev);
 	}
 
 	if (pci_ioaddr)
@@ -327,15 +284,13 @@
 
 static void __devexit orinoco_pci_remove_one(struct pci_dev *pdev)
 {
-	struct orinoco_private *priv = pci_get_drvdata(pdev);
-	struct net_device *dev = priv->ndev;
-
-	TRACE_ENTER("orinoco_pci");
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct orinoco_private *priv = dev->priv;
 
-	if (!priv)
+	if (! dev)
 		BUG();
 
-	orinoco_proc_dev_cleanup(priv);
+	orinoco_proc_dev_cleanup(dev);
 
 	unregister_netdev(dev);
 
@@ -345,14 +300,11 @@
 	if (priv->hw.iobase)
 		iounmap((unsigned char *) priv->hw.iobase);
 
-	kfree(priv);
+	kfree(dev);
 
 	pci_disable_device(pdev);
-
-	TRACE_EXIT("orinoco_pci");
 }
 
-
 static struct pci_device_id orinoco_pci_pci_id_table[] __devinitdata = {
 	{0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID,},
 	{0,},
@@ -365,10 +317,18 @@
 	.id_table	= orinoco_pci_pci_id_table,
 	.probe		= orinoco_pci_init_one,
 	.remove		= __devexit_p(orinoco_pci_remove_one),
+	.suspend	= 0,
+	.resume		= 0
 };
 
+static char version[] __initdata = "orinoco_pci.c 0.13a (Jean Tourrilhes <jt@hpl.hp.com>)";
+MODULE_AUTHOR("Jean Tourrilhes <jt@hpl.hp.com>");
+MODULE_DESCRIPTION("Driver for wireless LAN cards using direct PCI interface");
+MODULE_LICENSE("Dual MPL/GPL");
+
 static int __init orinoco_pci_init(void)
 {
+	printk(KERN_DEBUG "%s\n", version);
 	return pci_module_init(&orinoco_pci_driver);
 }
 
diff -uNr linux-2.5-pristine/drivers/net/wireless/orinoco_plx.c linux-orinoco/drivers/net/wireless/orinoco_plx.c
--- linux-2.5-pristine/drivers/net/wireless/orinoco_plx.c	2002-09-28 08:12:22.000000000 +1000
+++ linux-orinoco/drivers/net/wireless/orinoco_plx.c	2002-09-30 14:46:30.000000000 +1000
@@ -1,4 +1,4 @@
-/* orinoco_plx.c 0.13
+/* orinoco_plx.c 0.13a
  * 
  * Driver for Prism II devices which would usually be driven by orinoco_cs,
  * but are connected to the PCI bus by a PLX9052. 
@@ -341,7 +341,7 @@
 	.resume		= 0,
 };
 
-static char version[] __initdata = "orinoco_plx.c 0.13 (Daniel Barlow <dan@telent.net>, David Gibson <hermes@gibson.dropbear.id.au>)";
+static char version[] __initdata = "orinoco_plx.c 0.13a (Daniel Barlow <dan@telent.net>, David Gibson <hermes@gibson.dropbear.id.au>)";
 MODULE_AUTHOR("Daniel Barlow <dan@telent.net>");
 MODULE_DESCRIPTION("Driver for wireless LAN cards using the PLX9052 PCI bridge");
 #ifdef MODULE_LICENSE


-- 
David Gibson			| For every complex problem there is a
david@gibson.dropbear.id.au	| solution which is simple, neat and
				| wrong.
http://www.ozlabs.org/people/dgibson

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Orinoco-devel] Re: Orinoco driver update
  2002-09-30  5:08   ` [Orinoco-devel] " David Gibson
@ 2002-09-30  5:37     ` Jeff Garzik
  2002-09-30  6:22       ` David Gibson
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Garzik @ 2002-09-30  5:37 UTC (permalink / raw)
  To: David Gibson; +Cc: Linus Torvalds, Orinoco Development List, linux-kernel

David,

Linus applied 0.13a and that fixes things, thanks.

Two quick comments:
* you need pci_set_drvdata(pdev,NULL) after pci_disable_disable in your 
pci_driver::remove hook
* I think it would look better to remove the struct pci_driver ->suspend 
and ->resume hook references, if they are NULL (0)...



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Orinoco-devel] Re: Orinoco driver update
  2002-09-30  5:37     ` Jeff Garzik
@ 2002-09-30  6:22       ` David Gibson
  2002-09-30  6:34         ` Jeff Garzik
  0 siblings, 1 reply; 5+ messages in thread
From: David Gibson @ 2002-09-30  6:22 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linus Torvalds, Orinoco Development List, linux-kernel

On Mon, Sep 30, 2002 at 01:37:18AM -0400, Jeff Garzik wrote:
> David,
> 
> Linus applied 0.13a and that fixes things, thanks.
> 
> Two quick comments:
> * you need pci_set_drvdata(pdev,NULL) after pci_disable_disable in your 
> pci_driver::remove hook

Ok, I've added that before kfree()ing the net_device structure in both
orinoco_pci.c and orinoco_plx.c

> * I think it would look better to remove the struct pci_driver ->suspend 
> and ->resume hook references, if they are NULL (0)...

Hmm... I'd kind of prefer to leave them there, to remind me that the
suspend/resume hooks need to be implemented.

-- 
David Gibson			| For every complex problem there is a
david@gibson.dropbear.id.au	| solution which is simple, neat and
				| wrong.
http://www.ozlabs.org/people/dgibson

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Orinoco-devel] Re: Orinoco driver update
  2002-09-30  6:22       ` David Gibson
@ 2002-09-30  6:34         ` Jeff Garzik
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff Garzik @ 2002-09-30  6:34 UTC (permalink / raw)
  To: David Gibson; +Cc: Linus Torvalds, Orinoco Development List, linux-kernel

David Gibson wrote:
> On Mon, Sep 30, 2002 at 01:37:18AM -0400, Jeff Garzik wrote:
>>* I think it would look better to remove the struct pci_driver ->suspend 
>>and ->resume hook references, if they are NULL (0)...
> 
> 
> Hmm... I'd kind of prefer to leave them there, to remind me that the
> suspend/resume hooks need to be implemented.

heh, with that argument I'm certainly convinced :)



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-09-30  6:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20020927025227.GC1898@zax>
2002-09-27 19:56 ` Orinoco driver update Jeff Garzik
2002-09-30  5:08   ` [Orinoco-devel] " David Gibson
2002-09-30  5:37     ` Jeff Garzik
2002-09-30  6:22       ` David Gibson
2002-09-30  6:34         ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).