Author: adrian
Date: Sat Jan 29 05:08:21 2011
New Revision: 218058
URL: http://svn.freebsd.org/changeset/base/218058

Log:
  Break out the debug macros from if_ath.c into if_ath_debug.[ch] .
  
  This is prep work for breaking out the TX path into a separate
  set of source files.

Added:
  head/sys/dev/ath/if_ath_debug.c   (contents, props changed)
  head/sys/dev/ath/if_ath_debug.h   (contents, props changed)
Modified:
  head/sys/conf/files
  head/sys/dev/ath/if_ath.c
  head/sys/modules/ath/Makefile

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files Sat Jan 29 04:34:30 2011        (r218057)
+++ head/sys/conf/files Sat Jan 29 05:08:21 2011        (r218058)
@@ -566,6 +566,8 @@ dev/ata/atapi-cam.c         optional atapicam
 #
 dev/ath/if_ath.c               optional ath \
        compile-with "${NORMAL_C} -I$S/dev/ath"
+dev/ath/if_ath_debug.c         optional ath \
+       compile-with "${NORMAL_C} -I$S/dev/ath"
 dev/ath/if_ath_pci.c           optional ath pci \
        compile-with "${NORMAL_C} -I$S/dev/ath"
 dev/ath/ah_osdep.c             optional ath \

Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c   Sat Jan 29 04:34:30 2011        (r218057)
+++ head/sys/dev/ath/if_ath.c   Sat Jan 29 05:08:21 2011        (r218058)
@@ -89,6 +89,8 @@ __FBSDID("$FreeBSD$");
 #include <dev/ath/ath_hal/ah_devid.h>          /* XXX for softled */
 #include <dev/ath/ath_hal/ah_diagcodes.h>
 
+#include <dev/ath/if_ath_debug.h>
+
 #ifdef ATH_TX99_DIAG
 #include <dev/ath/ath_tx99/ath_tx99.h>
 #endif
@@ -291,65 +293,6 @@ static     int ath_bstuck_threshold = 4;           /*
 SYSCTL_INT(_hw_ath, OID_AUTO, bstuck, CTLFLAG_RW, &ath_bstuck_threshold,
            0, "max missed beacon xmits before chip reset");
 
-#ifdef ATH_DEBUG
-enum {
-       ATH_DEBUG_XMIT          = 0x00000001,   /* basic xmit operation */
-       ATH_DEBUG_XMIT_DESC     = 0x00000002,   /* xmit descriptors */
-       ATH_DEBUG_RECV          = 0x00000004,   /* basic recv operation */
-       ATH_DEBUG_RECV_DESC     = 0x00000008,   /* recv descriptors */
-       ATH_DEBUG_RATE          = 0x00000010,   /* rate control */
-       ATH_DEBUG_RESET         = 0x00000020,   /* reset processing */
-       ATH_DEBUG_MODE          = 0x00000040,   /* mode init/setup */
-       ATH_DEBUG_BEACON        = 0x00000080,   /* beacon handling */
-       ATH_DEBUG_WATCHDOG      = 0x00000100,   /* watchdog timeout */
-       ATH_DEBUG_INTR          = 0x00001000,   /* ISR */
-       ATH_DEBUG_TX_PROC       = 0x00002000,   /* tx ISR proc */
-       ATH_DEBUG_RX_PROC       = 0x00004000,   /* rx ISR proc */
-       ATH_DEBUG_BEACON_PROC   = 0x00008000,   /* beacon ISR proc */
-       ATH_DEBUG_CALIBRATE     = 0x00010000,   /* periodic calibration */
-       ATH_DEBUG_KEYCACHE      = 0x00020000,   /* key cache management */
-       ATH_DEBUG_STATE         = 0x00040000,   /* 802.11 state transitions */
-       ATH_DEBUG_NODE          = 0x00080000,   /* node management */
-       ATH_DEBUG_LED           = 0x00100000,   /* led management */
-       ATH_DEBUG_FF            = 0x00200000,   /* fast frames */
-       ATH_DEBUG_DFS           = 0x00400000,   /* DFS processing */
-       ATH_DEBUG_TDMA          = 0x00800000,   /* TDMA processing */
-       ATH_DEBUG_TDMA_TIMER    = 0x01000000,   /* TDMA timer processing */
-       ATH_DEBUG_REGDOMAIN     = 0x02000000,   /* regulatory processing */
-       ATH_DEBUG_FATAL         = 0x80000000,   /* fatal errors */
-       ATH_DEBUG_ANY           = 0xffffffff
-};
-static int ath_debug = 0;
-SYSCTL_INT(_hw_ath, OID_AUTO, debug, CTLFLAG_RW, &ath_debug,
-           0, "control debugging printfs");
-TUNABLE_INT("hw.ath.debug", &ath_debug);
-
-#define        IFF_DUMPPKTS(sc, m) \
-       ((sc->sc_debug & (m)) || \
-           (sc->sc_ifp->if_flags & (IFF_DEBUG|IFF_LINK2)) == 
(IFF_DEBUG|IFF_LINK2))
-#define        DPRINTF(sc, m, fmt, ...) do {                           \
-       if (sc->sc_debug & (m))                                 \
-               device_printf(sc->sc_dev, fmt, __VA_ARGS__);            \
-} while (0)
-#define        KEYPRINTF(sc, ix, hk, mac) do {                         \
-       if (sc->sc_debug & ATH_DEBUG_KEYCACHE)                  \
-               ath_keyprint(sc, __func__, ix, hk, mac);        \
-} while (0)
-static void ath_printrxbuf(struct ath_softc *, const struct ath_buf *bf,
-       u_int ix, int);
-static void ath_printtxbuf(struct ath_softc *, const struct ath_buf *bf,
-       u_int qnum, u_int ix, int done);
-#else
-#define        IFF_DUMPPKTS(sc, m) \
-       ((sc->sc_ifp->if_flags & (IFF_DEBUG|IFF_LINK2)) == 
(IFF_DEBUG|IFF_LINK2))
-#define        DPRINTF(sc, m, fmt, ...) do {                           \
-       (void) sc;                                              \
-} while (0)
-#define        KEYPRINTF(sc, k, ix, mac) do {                          \
-       (void) sc;                                              \
-} while (0)
-#endif
-
 MALLOC_DEFINE(M_ATHDEV, "athdev", "ath driver dma buffers");
 
 int
@@ -6089,65 +6032,6 @@ ath_setcurmode(struct ath_softc *sc, enu
 #undef N
 }
 
-#ifdef ATH_DEBUG
-static void
-ath_printrxbuf(struct ath_softc *sc, const struct ath_buf *bf,
-       u_int ix, int done)
-{
-       const struct ath_rx_status *rs = &bf->bf_status.ds_rxstat;
-       struct ath_hal *ah = sc->sc_ah;
-       const struct ath_desc *ds;
-       int i;
-
-       for (i = 0, ds = bf->bf_desc; i < bf->bf_nseg; i++, ds++) {
-               printf("R[%2u] (DS.V:%p DS.P:%p) L:%08x D:%08x%s\n"
-                      "      %08x %08x %08x %08x\n",
-                   ix, ds, (const struct ath_desc *)bf->bf_daddr + i,
-                   ds->ds_link, ds->ds_data,
-                   !done ? "" : (rs->rs_status == 0) ? " *" : " !",
-                   ds->ds_ctl0, ds->ds_ctl1,
-                   ds->ds_hw[0], ds->ds_hw[1]);
-               if (ah->ah_magic == 0x20065416) {
-                       printf("        %08x %08x %08x %08x %08x %08x %08x\n",
-                           ds->ds_hw[2], ds->ds_hw[3], ds->ds_hw[4],
-                           ds->ds_hw[5], ds->ds_hw[6], ds->ds_hw[7],
-                           ds->ds_hw[8]);
-               }
-       }
-}
-
-static void
-ath_printtxbuf(struct ath_softc *sc, const struct ath_buf *bf,
-       u_int qnum, u_int ix, int done)
-{
-       const struct ath_tx_status *ts = &bf->bf_status.ds_txstat;
-       struct ath_hal *ah = sc->sc_ah;
-       const struct ath_desc *ds;
-       int i;
-
-       printf("Q%u[%3u]", qnum, ix);
-       for (i = 0, ds = bf->bf_desc; i < bf->bf_nseg; i++, ds++) {
-               printf(" (DS.V:%p DS.P:%p) L:%08x D:%08x F:04%x%s\n"
-                      "        %08x %08x %08x %08x %08x %08x\n",
-                   ds, (const struct ath_desc *)bf->bf_daddr + i,
-                   ds->ds_link, ds->ds_data, bf->bf_txflags,
-                   !done ? "" : (ts->ts_status == 0) ? " *" : " !",
-                   ds->ds_ctl0, ds->ds_ctl1,
-                   ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3]);
-               if (ah->ah_magic == 0x20065416) {
-                       printf("        %08x %08x %08x %08x %08x %08x %08x 
%08x\n",
-                           ds->ds_hw[4], ds->ds_hw[5], ds->ds_hw[6],
-                           ds->ds_hw[7], ds->ds_hw[8], ds->ds_hw[9],
-                           ds->ds_hw[10],ds->ds_hw[11]);
-                       printf("        %08x %08x %08x %08x %08x %08x %08x 
%08x\n",
-                           ds->ds_hw[12],ds->ds_hw[13],ds->ds_hw[14],
-                           ds->ds_hw[15],ds->ds_hw[16],ds->ds_hw[17],
-                           ds->ds_hw[18], ds->ds_hw[19]);
-               }
-       }
-}
-#endif /* ATH_DEBUG */
-
 static void
 ath_watchdog(void *arg)
 {

Added: head/sys/dev/ath/if_ath_debug.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/ath/if_ath_debug.c     Sat Jan 29 05:08:21 2011        
(r218058)
@@ -0,0 +1,156 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ *    redistribution must be conditioned upon including a substantially
+ *    similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_inet.h"
+#include "opt_ath.h"
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/errno.h>
+#include <sys/callout.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
+#include <sys/priv.h>
+
+#include <machine/bus.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_llc.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_regdomain.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+#ifdef IEEE80211_SUPPORT_TDMA
+#include <net80211/ieee80211_tdma.h>
+#endif
+
+#include <net/bpf.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
+#include <dev/ath/if_athvar.h>
+#include <dev/ath/ath_hal/ah_devid.h>          /* XXX for softled */
+#include <dev/ath/ath_hal/ah_diagcodes.h>
+
+#ifdef ATH_TX99_DIAG
+#include <dev/ath/ath_tx99/ath_tx99.h>
+#endif
+
+#ifdef ATH_DEBUG
+#include <dev/ath/if_ath_debug.h>
+
+int ath_debug = 0;
+
+SYSCTL_DECL(_hw_ath);
+SYSCTL_INT(_hw_ath, OID_AUTO, debug, CTLFLAG_RW, &ath_debug,
+           0, "control debugging printfs");
+TUNABLE_INT("hw.ath.debug", &ath_debug);
+
+void
+ath_printrxbuf(struct ath_softc *sc, const struct ath_buf *bf,
+       u_int ix, int done)
+{
+       const struct ath_rx_status *rs = &bf->bf_status.ds_rxstat;
+       struct ath_hal *ah = sc->sc_ah;
+       const struct ath_desc *ds;
+       int i;
+
+       for (i = 0, ds = bf->bf_desc; i < bf->bf_nseg; i++, ds++) {
+               printf("R[%2u] (DS.V:%p DS.P:%p) L:%08x D:%08x%s\n"
+                      "      %08x %08x %08x %08x\n",
+                   ix, ds, (const struct ath_desc *)bf->bf_daddr + i,
+                   ds->ds_link, ds->ds_data,
+                   !done ? "" : (rs->rs_status == 0) ? " *" : " !",
+                   ds->ds_ctl0, ds->ds_ctl1,
+                   ds->ds_hw[0], ds->ds_hw[1]);
+               if (ah->ah_magic == 0x20065416) {
+                       printf("        %08x %08x %08x %08x %08x %08x %08x\n",
+                           ds->ds_hw[2], ds->ds_hw[3], ds->ds_hw[4],
+                           ds->ds_hw[5], ds->ds_hw[6], ds->ds_hw[7],
+                           ds->ds_hw[8]);
+               }
+       }
+}
+
+void
+ath_printtxbuf(struct ath_softc *sc, const struct ath_buf *bf,
+       u_int qnum, u_int ix, int done)
+{
+       const struct ath_tx_status *ts = &bf->bf_status.ds_txstat;
+       struct ath_hal *ah = sc->sc_ah;
+       const struct ath_desc *ds;
+       int i;
+
+       printf("Q%u[%3u]", qnum, ix);
+       for (i = 0, ds = bf->bf_desc; i < bf->bf_nseg; i++, ds++) {
+               printf(" (DS.V:%p DS.P:%p) L:%08x D:%08x F:04%x%s\n"
+                      "        %08x %08x %08x %08x %08x %08x\n",
+                   ds, (const struct ath_desc *)bf->bf_daddr + i,
+                   ds->ds_link, ds->ds_data, bf->bf_txflags,
+                   !done ? "" : (ts->ts_status == 0) ? " *" : " !",
+                   ds->ds_ctl0, ds->ds_ctl1,
+                   ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3]);
+               if (ah->ah_magic == 0x20065416) {
+                       printf("        %08x %08x %08x %08x %08x %08x %08x 
%08x\n",
+                           ds->ds_hw[4], ds->ds_hw[5], ds->ds_hw[6],
+                           ds->ds_hw[7], ds->ds_hw[8], ds->ds_hw[9],
+                           ds->ds_hw[10],ds->ds_hw[11]);
+                       printf("        %08x %08x %08x %08x %08x %08x %08x 
%08x\n",
+                           ds->ds_hw[12],ds->ds_hw[13],ds->ds_hw[14],
+                           ds->ds_hw[15],ds->ds_hw[16],ds->ds_hw[17],
+                           ds->ds_hw[18], ds->ds_hw[19]);
+               }
+       }
+}
+
+#endif /* ATH_DEBUG */

Added: head/sys/dev/ath/if_ath_debug.h
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/ath/if_ath_debug.h     Sat Jan 29 05:08:21 2011        
(r218058)
@@ -0,0 +1,93 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ *    redistribution must be conditioned upon including a substantially
+ *    similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef        __IF_ATH_DEBUG_H__
+#define        __IF_ATH_DEBUG_H__
+
+#ifdef ATH_DEBUG
+
+enum { 
+       ATH_DEBUG_XMIT          = 0x00000001,   /* basic xmit operation */
+       ATH_DEBUG_XMIT_DESC     = 0x00000002,   /* xmit descriptors */
+       ATH_DEBUG_RECV          = 0x00000004,   /* basic recv operation */
+       ATH_DEBUG_RECV_DESC     = 0x00000008,   /* recv descriptors */
+       ATH_DEBUG_RATE          = 0x00000010,   /* rate control */
+       ATH_DEBUG_RESET         = 0x00000020,   /* reset processing */
+       ATH_DEBUG_MODE          = 0x00000040,   /* mode init/setup */
+       ATH_DEBUG_BEACON        = 0x00000080,   /* beacon handling */
+       ATH_DEBUG_WATCHDOG      = 0x00000100,   /* watchdog timeout */
+       ATH_DEBUG_INTR          = 0x00001000,   /* ISR */
+       ATH_DEBUG_TX_PROC       = 0x00002000,   /* tx ISR proc */
+       ATH_DEBUG_RX_PROC       = 0x00004000,   /* rx ISR proc */
+       ATH_DEBUG_BEACON_PROC   = 0x00008000,   /* beacon ISR proc */
+       ATH_DEBUG_CALIBRATE     = 0x00010000,   /* periodic calibration */
+       ATH_DEBUG_KEYCACHE      = 0x00020000,   /* key cache management */
+       ATH_DEBUG_STATE         = 0x00040000,   /* 802.11 state transitions */
+       ATH_DEBUG_NODE          = 0x00080000,   /* node management */
+       ATH_DEBUG_LED           = 0x00100000,   /* led management */
+       ATH_DEBUG_FF            = 0x00200000,   /* fast frames */
+       ATH_DEBUG_DFS           = 0x00400000,   /* DFS processing */
+       ATH_DEBUG_TDMA          = 0x00800000,   /* TDMA processing */
+       ATH_DEBUG_TDMA_TIMER    = 0x01000000,   /* TDMA timer processing */
+       ATH_DEBUG_REGDOMAIN     = 0x02000000,   /* regulatory processing */
+       ATH_DEBUG_FATAL         = 0x80000000,   /* fatal errors */
+       ATH_DEBUG_ANY           = 0xffffffff
+};
+
+extern int     ath_debug;
+
+#define        IFF_DUMPPKTS(sc, m) \
+       ((sc->sc_debug & (m)) || \
+           (sc->sc_ifp->if_flags & (IFF_DEBUG|IFF_LINK2)) == 
(IFF_DEBUG|IFF_LINK2))
+#define        DPRINTF(sc, m, fmt, ...) do {                           \
+       if (sc->sc_debug & (m))                                 \
+               device_printf(sc->sc_dev, fmt, __VA_ARGS__);            \
+} while (0)
+#define        KEYPRINTF(sc, ix, hk, mac) do {                         \
+       if (sc->sc_debug & ATH_DEBUG_KEYCACHE)                  \
+               ath_keyprint(sc, __func__, ix, hk, mac);        \
+} while (0)
+
+extern void ath_printrxbuf(struct ath_softc *, const struct ath_buf *bf,
+       u_int ix, int);
+extern void ath_printtxbuf(struct ath_softc *, const struct ath_buf *bf,
+       u_int qnum, u_int ix, int done);
+#else  /* ATH_DEBUG */
+#define        IFF_DUMPPKTS(sc, m) \
+       ((sc->sc_ifp->if_flags & (IFF_DEBUG|IFF_LINK2)) == 
(IFF_DEBUG|IFF_LINK2))
+#define        DPRINTF(sc, m, fmt, ...) do {                           \
+       (void) sc;                                              \
+} while (0)
+#define        KEYPRINTF(sc, k, ix, mac) do {                          \
+       (void) sc;                                              \
+} while (0)
+#endif /* ATH_DEBUG */
+
+#endif

Modified: head/sys/modules/ath/Makefile
==============================================================================
--- head/sys/modules/ath/Makefile       Sat Jan 29 04:34:30 2011        
(r218057)
+++ head/sys/modules/ath/Makefile       Sat Jan 29 05:08:21 2011        
(r218058)
@@ -35,7 +35,7 @@ ATH_RATE?=    sample          # tx rate control alg
 .PATH: ${.CURDIR}/../../dev/ath/ath_hal
 
 KMOD=  if_ath
-SRCS=  if_ath.c if_ath_pci.c
+SRCS=  if_ath.c if_ath_pci.c if_ath_debug.c
 # NB: v3 eeprom support used by both AR5211 and AR5212; just include it
 SRCS+= ah_osdep.c ah.c ah_regdomain.c ah_eeprom_v3.c
 SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to