public inbox for ecos-patches@sourceware.org
 help / color / mirror / Atom feed
* Re: LPC2xxx CAN bugfixes
@ 2007-08-17  7:44 cetoni GmbH - Uwe Kindler
  2007-08-17  8:11 ` Andrew Lunn
  0 siblings, 1 reply; 7+ messages in thread
From: cetoni GmbH - Uwe Kindler @ 2007-08-17  7:44 UTC (permalink / raw)
  To: ecos-patches; +Cc: rosenfeld

[-- Attachment #1: Type: text/plain, Size: 287 bytes --]

Hello,

the following LPC2xxx CAN patch fixes the issues mentioned by Hans 
Rosenfeld.


Dipl. Inf. (FH)
Uwe Kindler
Software Engineering

--

cetoni GmbH
Am Wiesenring 6
D-07554 Korbussen

Tel.: +49 (0) 36602 338 28
Fax:  +49 (0) 36602 338 11
uwe.kindler@cetoni.de
http://www.cetoni.de

[-- Attachment #2: can_lpc2xxx.patch --]
[-- Type: text/plain, Size: 10728 bytes --]

diff -ruN ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/ChangeLog ecos/ecos/packages/devs/can/arm/lpc2xxx/current/ChangeLog
--- ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/ChangeLog	2007-08-02 10:48:00.000000000 +0200
+++ ecos/ecos/packages/devs/can/arm/lpc2xxx/current/ChangeLog	2007-08-17 08:12:30.000000000 +0200
@@ -1,3 +1,13 @@
+2007-08-17  Uwe Kindler <uwe_kindler@web.de>
+	
+	* include/can_lpc2xxx_baudrates.h: Removed all prefixed zeros from
+	  baudrate table entries (they aren't intended to be interpreted as 
+	  octal)
+	  
+	* tests/can_baudrates.c
+	  tests/can_busload.c
+	  tests/can_rx_tx.c: removed #include pkgconf/devs_can_loop.h
+	
 2007-08-02  Alexey Shusharin <mrfinch@mail.ru>
 	
 	* src/can_lpc2xxx.c: Added acknowledging call in rx interrupt
diff -ruN ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h ecos/ecos/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h
--- ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h	2007-07-31 09:53:36.000000000 +0200
+++ ecos/ecos/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h	2007-08-17 07:57:01.000000000 +0200
@@ -75,16 +75,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(300, 15, 02, 0, 1), // 10  kbaud
-    CAN_BR_TBL_ENTRY(150, 15, 02, 0, 1), // 20  kbaud
-    CAN_BR_TBL_ENTRY(59,  15, 02, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(39,  11, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(29,  12, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(14,  12, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(07,  11, 01, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(04,  11, 01, 0, 0), // 800 kbaud
-    CAN_BR_TBL_ENTRY(03,  11, 01, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00,  00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY(300, 15, 2, 0, 1), // 10  kbaud
+    CAN_BR_TBL_ENTRY(150, 15, 2, 0, 1), // 20  kbaud
+    CAN_BR_TBL_ENTRY(59,  15, 2, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY(39,  11, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY(29,  12, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY(14,  12, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 7,  11, 1, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 4,  11, 1, 0, 0), // 800 kbaud
+    CAN_BR_TBL_ENTRY( 3,  11, 1, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,   0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 60000000
@@ -95,16 +95,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 10  kbaud - not supported
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 20  kbaud - not supported
-    CAN_BR_TBL_ENTRY(59, 15, 02, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(39, 11, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(29, 12, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(14, 12, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(07, 11, 01, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(04, 11, 01, 0, 0), // 800 kbaud
-    CAN_BR_TBL_ENTRY(03, 11, 01, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 10  kbaud - not supported
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 20  kbaud - not supported
+    CAN_BR_TBL_ENTRY(59, 15, 2, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY(39, 11, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY(29, 12, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY(14, 12, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 7, 11, 1, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 4, 11, 1, 0, 0), // 800 kbaud
+    CAN_BR_TBL_ENTRY( 3, 11, 1, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 30000000
@@ -115,16 +115,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(59, 15, 07, 0, 1), // 10  kbaud
-    CAN_BR_TBL_ENTRY(49, 11, 01, 0, 1), // 20  kbaud
-    CAN_BR_TBL_ENTRY(19, 11, 01, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(09, 11, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(07, 11, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(03, 11, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(01, 11, 01, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 800 kbaud - not supported
-    CAN_BR_TBL_ENTRY(00, 11, 01, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY(59, 15, 7, 0, 1), // 10  kbaud
+    CAN_BR_TBL_ENTRY(49, 11, 1, 0, 1), // 20  kbaud
+    CAN_BR_TBL_ENTRY(19, 11, 1, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY( 9, 11, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY( 7, 11, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY( 3, 11, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 1, 11, 1, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 800 kbaud - not supported
+    CAN_BR_TBL_ENTRY( 0, 11, 1, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 15000000
@@ -135,16 +135,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 10  kbaud - not supported
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 20  kbaud - not supported
-    CAN_BR_TBL_ENTRY(59, 12, 01, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(29, 12, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(23, 12, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(11, 12, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(05, 12, 01, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(03, 11, 01, 0, 0), // 800 kbaud
-    CAN_BR_TBL_ENTRY(02, 12, 01, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 10  kbaud - not supported
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 20  kbaud - not supported
+    CAN_BR_TBL_ENTRY(59, 12, 1, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY(29, 12, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY(23, 12, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY(11, 12, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 5, 12, 1, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 3, 11, 1, 0, 0), // 800 kbaud
+    CAN_BR_TBL_ENTRY( 2, 12, 1, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 48000000
@@ -155,16 +155,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // 10  kbaud - not supported
-    CAN_BR_TBL_ENTRY(59, 15, 02, 0, 1), // 20  kbaud
-    CAN_BR_TBL_ENTRY(29, 12, 01, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(14, 12, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(11, 12, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(05, 12, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(02, 12, 01, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(01, 11, 01, 0, 0), // 800 kbaud
-    CAN_BR_TBL_ENTRY(01, 05, 00, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // 10  kbaud - not supported
+    CAN_BR_TBL_ENTRY(59, 15, 2, 0, 1), // 20  kbaud
+    CAN_BR_TBL_ENTRY(29, 12, 1, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY(14, 12, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY(11, 12, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY( 5, 12, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 2, 12, 1, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 1, 11, 1, 0, 0), // 800 kbaud
+    CAN_BR_TBL_ENTRY( 1,  5, 0, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 24000000
@@ -175,16 +175,16 @@
 //
 static const cyg_uint32 lpc2xxx_br_tbl[] =
 {
-    CAN_BR_TBL_ENTRY(59, 15, 02, 0, 1), // 10  kbaud - not supported
-    CAN_BR_TBL_ENTRY(39, 11, 01, 0, 1), // 20  kbaud
-    CAN_BR_TBL_ENTRY(14, 12, 01, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(07, 11, 01, 0, 1), // 100 kbaud
-    CAN_BR_TBL_ENTRY(05, 12, 01, 0, 1), // 125 kbaud
-    CAN_BR_TBL_ENTRY(02, 12, 01, 0, 1), // 250 kbaud
-    CAN_BR_TBL_ENTRY(02, 05, 00, 0, 0), // 500 kbaud
-    CAN_BR_TBL_ENTRY(00, 11, 01, 0, 0), // 800 kbaud
-    CAN_BR_TBL_ENTRY(00, 09, 00, 0, 0), // 1000 kbaud
-    CAN_BR_TBL_ENTRY(00, 00, 00, 0, 0), // Autobaud  - not supported
+    CAN_BR_TBL_ENTRY(59, 15, 2, 0, 1), // 10  kbaud - not supported
+    CAN_BR_TBL_ENTRY(39, 11, 1, 0, 1), // 20  kbaud
+    CAN_BR_TBL_ENTRY(14, 12, 1, 0, 1), // 50  kbaud
+    CAN_BR_TBL_ENTRY( 7, 11, 1, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY( 5, 12, 1, 0, 1), // 125 kbaud
+    CAN_BR_TBL_ENTRY( 2, 12, 1, 0, 1), // 250 kbaud
+    CAN_BR_TBL_ENTRY( 2, 05, 0, 0, 0), // 500 kbaud
+    CAN_BR_TBL_ENTRY( 0, 11, 1, 0, 0), // 800 kbaud
+    CAN_BR_TBL_ENTRY( 0,  9, 0, 0, 0), // 1000 kbaud
+    CAN_BR_TBL_ENTRY( 0,  0, 0, 0, 0), // Autobaud  - not supported
 };
 #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1
 #endif // CYGNUM_CAN_LPC2XXX_VPB_CLK == 12000000
diff -ruN ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_baudrates.c ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_baudrates.c
--- ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_baudrates.c	2007-07-03 16:49:05.000000000 +0200
+++ ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_baudrates.c	2007-08-17 07:57:22.000000000 +0200
@@ -62,7 +62,6 @@
 #include <pkgconf/kernel.h>
 #include <cyg/io/io.h>
 #include <cyg/io/canio.h>
-#include <pkgconf/devs_can_loop.h>
 
 
 // Package option requirements
diff -ruN ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_busload.c ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_busload.c
--- ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_busload.c	2007-07-03 16:49:05.000000000 +0200
+++ ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_busload.c	2007-08-17 07:57:31.000000000 +0200
@@ -62,7 +62,6 @@
 #include <pkgconf/kernel.h>
 #include <cyg/io/io.h>
 #include <cyg/io/canio.h>
-#include <pkgconf/devs_can_loop.h>
 
 
 // Package option requirements
diff -ruN ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_rx_tx.c ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_rx_tx.c
--- ecos_web_cvs/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_rx_tx.c	2007-07-03 16:49:05.000000000 +0200
+++ ecos/ecos/packages/devs/can/arm/lpc2xxx/current/tests/can_rx_tx.c	2007-08-17 07:57:45.000000000 +0200
@@ -62,7 +62,6 @@
 #include <pkgconf/kernel.h>
 #include <cyg/io/io.h>
 #include <cyg/io/canio.h>
-#include <pkgconf/devs_can_loop.h>
 
 
 // Package option requirements

^ permalink raw reply	[flat|nested] 7+ messages in thread
* Re: LPC2xxx CAN bugfixes
@ 2007-08-17  5:55 cetoni GmbH - Uwe Kindler
  0 siblings, 0 replies; 7+ messages in thread
From: cetoni GmbH - Uwe Kindler @ 2007-08-17  5:55 UTC (permalink / raw)
  To: ecos-patches; +Cc: rosenfeld

Hello Hans,

----->
I've noticed another strange thing, is there a specific reason that
tests/can_baudrates.c, tests/can_busload.c and tests/can_rx_tx.c all
#include pkgconf/devs_can_loop.h?
<----

This is simply a copy & paste issue. I forgot to remove these lines. You 
can remove them and create a patch.

Thank you.



Dipl. Inf. (FH)
Uwe Kindler
Software Engineering

--

cetoni GmbH
Am Wiesenring 6
D-07554 Korbussen

Tel.: +49 (0) 36602 338 28
Fax:  +49 (0) 36602 338 11
uwe.kindler@cetoni.de
http://www.cetoni.de

^ permalink raw reply	[flat|nested] 7+ messages in thread
* LPC2xxx CAN bugfixes
@ 2007-08-16 16:32 Hans Rosenfeld
  2007-08-16 17:04 ` Hans Rosenfeld
  0 siblings, 1 reply; 7+ messages in thread
From: Hans Rosenfeld @ 2007-08-16 16:32 UTC (permalink / raw)
  To: ecos-patches

[-- Attachment #1: Type: text/plain, Size: 449 bytes --]

There are two bugs in the CAN driver for the LPC2xxx.

One is in include/can_lpc2xxx_baudrates.h: numbers shouldn't be prefixed
with 0 if they aren't intended to be interpreted as octal. I fixed this
only where it actually breaks, but the rest should be changed, too.

The other is in src/can_lpc2xxx.c, the definition of "info" is missing
when only one CAN channel is configured.


-- 
%SYSTEM-F-ANARCHISM, The operating system has been overthrown

[-- Attachment #2: can_lpc2xxx.diff --]
[-- Type: text/plain, Size: 683 bytes --]

Index: can_lpc2xxx.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/can/arm/lpc2xxx/current/src/can_lpc2xxx.c,v
retrieving revision 1.3
diff -u -r1.3 can_lpc2xxx.c
--- can_lpc2xxx.c	2 Aug 2007 08:48:00 -0000	1.3
+++ can_lpc2xxx.c	16 Aug 2007 16:20:29 -0000
@@ -928,7 +928,7 @@
 static Cyg_ErrNo lpc2xxx_can_lookup(struct cyg_devtab_entry** tab, struct cyg_devtab_entry* sub_tab, const char* name)
 {
     can_channel* chan    = (can_channel*) (*tab)->priv;
-    CAN_DECLARE_INFO(chan);
+    lpc2xxx_can_info_t *info = (lpc2xxx_can_info_t *)chan->dev_priv;
     cyg_uint32   regval;
 
     chan->callbacks->can_init(chan); 

[-- Attachment #3: can_lpc2xxx_baudrates.diff --]
[-- Type: text/plain, Size: 824 bytes --]

Index: can_lpc2xxx_baudrates.h
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h,v
retrieving revision 1.2
diff -u -r1.2 can_lpc2xxx_baudrates.h
--- can_lpc2xxx_baudrates.h	31 Jul 2007 07:53:36 -0000	1.2
+++ can_lpc2xxx_baudrates.h	16 Aug 2007 16:30:55 -0000
@@ -118,7 +118,7 @@
     CAN_BR_TBL_ENTRY(59, 15, 07, 0, 1), // 10  kbaud
     CAN_BR_TBL_ENTRY(49, 11, 01, 0, 1), // 20  kbaud
     CAN_BR_TBL_ENTRY(19, 11, 01, 0, 1), // 50  kbaud
-    CAN_BR_TBL_ENTRY(09, 11, 01, 0, 1), // 100 kbaud
+    CAN_BR_TBL_ENTRY( 9, 11, 01, 0, 1), // 100 kbaud
     CAN_BR_TBL_ENTRY(07, 11, 01, 0, 1), // 125 kbaud
     CAN_BR_TBL_ENTRY(03, 11, 01, 0, 1), // 250 kbaud
     CAN_BR_TBL_ENTRY(01, 11, 01, 0, 0), // 500 kbaud

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

end of thread, other threads:[~2007-08-17  8:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-08-17  7:44 LPC2xxx CAN bugfixes cetoni GmbH - Uwe Kindler
2007-08-17  8:11 ` Andrew Lunn
2007-08-17  8:33   ` cetoni GmbH - Uwe Kindler
2007-08-17  8:49     ` Andrew Lunn
  -- strict thread matches above, loose matches on Subject: below --
2007-08-17  5:55 cetoni GmbH - Uwe Kindler
2007-08-16 16:32 Hans Rosenfeld
2007-08-16 17:04 ` Hans Rosenfeld

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 read-only IMAP folder(s) and NNTP newsgroup(s).