* [PATCH 1/5] temac: Add Virtex4 address mappings
@ 2010-02-22 19:06 gfilip
2010-02-22 19:06 ` [PATCH 2/5] temac: dma init for Virtex4 gfilip
2010-02-22 22:10 ` [PATCH 1/5] temac: Add Virtex4 address mappings Grant Likely
0 siblings, 2 replies; 8+ messages in thread
From: gfilip @ 2010-02-22 19:06 UTC (permalink / raw)
To: netdev; +Cc: glikely, Filip Gospodinov
This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
---
drivers/net/ll_temac.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
index 1af66a1..95dd650 100644
--- a/drivers/net/ll_temac.h
+++ b/drivers/net/ll_temac.h
@@ -56,7 +56,52 @@ This option defaults to enabled (set) */
XTE_OPTION_RXEN)
/* XPS_LL_TEMAC SDMA registers definition */
+#ifdef CONFIG_XILINX_VIRTEX_4_FX
+#define TX_NXTDESC_PTR 0x00 /* r */
+#define TX_CURBUF_ADDR 0x04 /* r */
+#define TX_CURBUF_LENGTH 0x08 /* r */
+#define TX_CURDESC_PTR 0x0C /* rw */
+#define TX_TAILDESC_PTR 0x10 /* rw */
+#define TX_CHNL_CTRL 0x14 /* rw */
+#define CHNL_CTRL_IRQ_IOE (1 << 9)
+#define CHNL_CTRL_IRQ_EN (1 << 7)
+#define CHNL_CTRL_IRQ_ERR_EN (1 << 2)
+#define CHNL_CTRL_IRQ_DLY_EN (1 << 1)
+#define CHNL_CTRL_IRQ_COAL_EN (1 << 0)
+#define TX_IRQ_REG 0x18 /* rw */
+#define TX_CHNL_STS 0x1C /* r */
+#define RX_NXTDESC_PTR 0x20 /* r */
+#define RX_CURBUF_ADDR 0x24 /* r */
+#define RX_CURBUF_LENGTH 0x28 /* r */
+#define RX_CURDESC_PTR 0x2C /* rw */
+#define RX_TAILDESC_PTR 0x30 /* rw */
+#define RX_CHNL_CTRL 0x34 /* rw */
+#define RX_IRQ_REG 0x38 /* rw */
+#define IRQ_COAL (1 << 0)
+#define IRQ_DLY (1 << 1)
+#define IRQ_ERR (1 << 2)
+#define IRQ_DMAERR (1 << 7) /* this is not documented ??? */
+#define RX_CHNL_STS 0x3C /* r */
+#define CHNL_STS_ENGBUSY (1 << 1)
+#define CHNL_STS_EOP (1 << 2)
+#define CHNL_STS_SOP (1 << 3)
+#define CHNL_STS_CMPLT (1 << 4)
+#define CHNL_STS_SOE (1 << 5)
+#define CHNL_STS_IOE (1 << 6)
+#define CHNL_STS_ERR (1 << 7)
+
+#define CHNL_STS_BSYWR (1 << 16)
+#define CHNL_STS_CURPERR (1 << 17)
+#define CHNL_STS_NXTPERR (1 << 18)
+#define CHNL_STS_ADDRERR (1 << 19)
+#define CHNL_STS_CMPERR (1 << 20)
+#define CHNL_STS_TAILERR (1 << 21)
+
+#define DMA_CONTROL_REG 0x40 /* rw */
+#define DMA_CONTROL_RST (1 << 0)
+#define DMA_TAIL_ENABLE (1 << 2)
+#else
#define TX_NXTDESC_PTR 0x00 /* r */
#define TX_CURBUF_ADDR 0x01 /* r */
#define TX_CURBUF_LENGTH 0x02 /* r */
@@ -182,6 +227,7 @@ This option defaults to enabled (set) */
#define DMA_CONTROL_REG 0x10 /* rw */
#define DMA_CONTROL_RST (1 << 0)
#define DMA_TAIL_ENABLE (1 << 2)
+#endif /*CONFIG_XILINX_VIRTEX_4_FX*/
/* XPS_LL_TEMAC direct registers definition */
--
1.6.4.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/5] temac: dma init for Virtex4
2010-02-22 19:06 [PATCH 1/5] temac: Add Virtex4 address mappings gfilip
@ 2010-02-22 19:06 ` gfilip
2010-02-22 19:06 ` [PATCH 3/5] temac: dma deinit gfilip
2010-02-22 22:23 ` [PATCH 2/5] temac: dma init for Virtex4 Grant Likely
2010-02-22 22:10 ` [PATCH 1/5] temac: Add Virtex4 address mappings Grant Likely
1 sibling, 2 replies; 8+ messages in thread
From: gfilip @ 2010-02-22 19:06 UTC (permalink / raw)
To: netdev; +Cc: glikely, Filip Gospodinov
This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
---
drivers/net/ll_temac.h | 4 ++++
drivers/net/ll_temac_main.c | 17 ++++++++++++++++-
2 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
index 95dd650..51824a8 100644
--- a/drivers/net/ll_temac.h
+++ b/drivers/net/ll_temac.h
@@ -383,7 +383,11 @@ struct temac_local {
/* IO registers and IRQs */
void __iomem *regs;
+#ifdef CONFIG_XILINX_VIRTEX_4_FX
+ void __iomem *dma_regs;
+#else
dcr_host_t sdma_dcrs;
+#endif
int tx_irq;
int rx_irq;
int emac_num;
diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
index a8522bd..0d4b1c5 100644
--- a/drivers/net/ll_temac_main.c
+++ b/drivers/net/ll_temac_main.c
@@ -812,7 +812,6 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
struct net_device *ndev;
const void *addr;
int size, rc = 0;
- unsigned int dcrs;
/* Init network device structure */
ndev = alloc_etherdev(sizeof(*lp));
@@ -862,6 +861,21 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
goto nodev;
}
+#ifdef CONFIG_XILINX_VIRTEX_4_FX
+ unsigned int ds;
+ const u32 *dr = of_get_property(np, "reg", &ds);
+ if (dr == NULL || ds & 1 || 0 >= ds ) {
+ dev_err(&op->dev, "could not get DMA register address\n");
+ goto nodev;
+ }
+ lp->dma_regs = (u32) ioremap(*dr, 4096);
+ if (!lp->dma_regs) {
+ dev_err(&op->dev, "could not get DMA virtual address\n");
+ goto nodev;
+ }
+ dev_dbg(&op->dev, "DMA base: %x\n", lp->dma_regs);
+#else /*CONFIG_XILINX_VIRTEX_4_FX*/
+ unsigned int dcrs;
dcrs = dcr_resource_start(np, 0);
if (dcrs == 0) {
dev_err(&op->dev, "could not get DMA register address\n");
@@ -869,6 +883,7 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
}
lp->sdma_dcrs = dcr_map(np, dcrs, dcr_resource_len(np, 0));
dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
+#endif /*CONFIG_XILINX_VIRTEX_4_FX*/'
lp->rx_irq = irq_of_parse_and_map(np, 0);
lp->tx_irq = irq_of_parse_and_map(np, 1);
--
1.6.4.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/5] temac: dma deinit
2010-02-22 19:06 ` [PATCH 2/5] temac: dma init for Virtex4 gfilip
@ 2010-02-22 19:06 ` gfilip
2010-02-22 19:07 ` [PATCH 4/5] temac: dma MMIO for Virtex4 gfilip
2010-02-22 22:23 ` [PATCH 2/5] temac: dma init for Virtex4 Grant Likely
1 sibling, 1 reply; 8+ messages in thread
From: gfilip @ 2010-02-22 19:06 UTC (permalink / raw)
To: netdev; +Cc: glikely, Filip Gospodinov
This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
---
drivers/net/ll_temac_main.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
index 0d4b1c5..2e7421c 100644
--- a/drivers/net/ll_temac_main.c
+++ b/drivers/net/ll_temac_main.c
@@ -946,6 +946,9 @@ static int __devexit temac_of_remove(struct of_device *op)
if (lp->phy_node)
of_node_put(lp->phy_node);
lp->phy_node = NULL;
+#ifdef CONFIG_XILINX_VIRTEX_4_FX
+ iounmap((void *) lp->dma_regs);
+#endif
dev_set_drvdata(&op->dev, NULL);
free_netdev(ndev);
return 0;
--
1.6.4.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/5] temac: dma MMIO for Virtex4
2010-02-22 19:06 ` [PATCH 3/5] temac: dma deinit gfilip
@ 2010-02-22 19:07 ` gfilip
2010-02-22 19:07 ` [PATCH 5/5] temac: add missing mask gfilip
0 siblings, 1 reply; 8+ messages in thread
From: gfilip @ 2010-02-22 19:07 UTC (permalink / raw)
To: netdev; +Cc: glikely, Filip Gospodinov
This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
---
drivers/net/ll_temac_main.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
index 2e7421c..8b4e1b9 100644
--- a/drivers/net/ll_temac_main.c
+++ b/drivers/net/ll_temac_main.c
@@ -115,6 +115,17 @@ void temac_indirect_out32(struct temac_local *lp, int reg, u32 value)
temac_iow(lp, XTE_CTL0_OFFSET, CNTLREG_WRITE_ENABLE_MASK | reg);
}
+#ifdef CONFIG_XILINX_VIRTEX_4_FX
+static u32 temac_dma_in32(struct temac_local *lp, int reg)
+{
+ return in_be32((u32 *)(lp->dma_regs + reg));
+}
+
+static void temac_dma_out32(struct temac_local *lp, int reg, u32 value)
+{
+ out_be32((u32 *)(lp->dma_regs + reg), value);
+}
+#else
static u32 temac_dma_in32(struct temac_local *lp, int reg)
{
return dcr_read(lp->sdma_dcrs, reg);
@@ -124,6 +135,7 @@ static void temac_dma_out32(struct temac_local *lp, int reg, u32 value)
{
dcr_write(lp->sdma_dcrs, reg, value);
}
+#endif
/**
* temac_dma_bd_init - Setup buffer descriptor rings
--
1.6.4.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/5] temac: add missing mask
2010-02-22 19:07 ` [PATCH 4/5] temac: dma MMIO for Virtex4 gfilip
@ 2010-02-22 19:07 ` gfilip
2010-02-22 22:25 ` Grant Likely
0 siblings, 1 reply; 8+ messages in thread
From: gfilip @ 2010-02-22 19:07 UTC (permalink / raw)
To: netdev; +Cc: glikely, Filip Gospodinov
For Virtex4-FX this mask is necessary. I think this is also true for Virtex5. Please test.
Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
---
drivers/net/ll_temac_main.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
index 8b4e1b9..43d51b7 100644
--- a/drivers/net/ll_temac_main.c
+++ b/drivers/net/ll_temac_main.c
@@ -627,7 +627,7 @@ static void ll_temac_recv(struct net_device *ndev)
while ((bdstat & STS_CTRL_APP0_CMPLT)) {
skb = lp->rx_skb[lp->rx_bd_ci];
- length = cur_p->app4;
+ length = (cur_p->app4 & 0x3fff);
skb_vaddr = virt_to_bus(skb->data);
dma_unmap_single(ndev->dev.parent, skb_vaddr, length,
--
1.6.4.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] temac: Add Virtex4 address mappings
2010-02-22 19:06 [PATCH 1/5] temac: Add Virtex4 address mappings gfilip
2010-02-22 19:06 ` [PATCH 2/5] temac: dma init for Virtex4 gfilip
@ 2010-02-22 22:10 ` Grant Likely
1 sibling, 0 replies; 8+ messages in thread
From: Grant Likely @ 2010-02-22 22:10 UTC (permalink / raw)
To: gfilip; +Cc: netdev
On Mon, Feb 22, 2010 at 12:06 PM, <gfilip@ee.ethz.ch> wrote:
> This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
>
> Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
> ---
> drivers/net/ll_temac.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
> index 1af66a1..95dd650 100644
> --- a/drivers/net/ll_temac.h
> +++ b/drivers/net/ll_temac.h
> @@ -56,7 +56,52 @@ This option defaults to enabled (set) */
> XTE_OPTION_RXEN)
>
> /* XPS_LL_TEMAC SDMA registers definition */
> +#ifdef CONFIG_XILINX_VIRTEX_4_FX
> +#define TX_NXTDESC_PTR 0x00 /* r */
> +#define TX_CURBUF_ADDR 0x04 /* r */
> +#define TX_CURBUF_LENGTH 0x08 /* r */
> +#define TX_CURDESC_PTR 0x0C /* rw */
> +#define TX_TAILDESC_PTR 0x10 /* rw */
> +#define TX_CHNL_CTRL 0x14 /* rw */
> +#define CHNL_CTRL_IRQ_IOE (1 << 9)
> +#define CHNL_CTRL_IRQ_EN (1 << 7)
> +#define CHNL_CTRL_IRQ_ERR_EN (1 << 2)
> +#define CHNL_CTRL_IRQ_DLY_EN (1 << 1)
> +#define CHNL_CTRL_IRQ_COAL_EN (1 << 0)
> +#define TX_IRQ_REG 0x18 /* rw */
> +#define TX_CHNL_STS 0x1C /* r */
> +#define RX_NXTDESC_PTR 0x20 /* r */
> +#define RX_CURBUF_ADDR 0x24 /* r */
> +#define RX_CURBUF_LENGTH 0x28 /* r */
> +#define RX_CURDESC_PTR 0x2C /* rw */
> +#define RX_TAILDESC_PTR 0x30 /* rw */
> +#define RX_CHNL_CTRL 0x34 /* rw */
> +#define RX_IRQ_REG 0x38 /* rw */
> +#define IRQ_COAL (1 << 0)
> +#define IRQ_DLY (1 << 1)
> +#define IRQ_ERR (1 << 2)
> +#define IRQ_DMAERR (1 << 7) /* this is not documented ??? */
> +#define RX_CHNL_STS 0x3C /* r */
> +#define CHNL_STS_ENGBUSY (1 << 1)
> +#define CHNL_STS_EOP (1 << 2)
> +#define CHNL_STS_SOP (1 << 3)
> +#define CHNL_STS_CMPLT (1 << 4)
> +#define CHNL_STS_SOE (1 << 5)
> +#define CHNL_STS_IOE (1 << 6)
> +#define CHNL_STS_ERR (1 << 7)
> +
> +#define CHNL_STS_BSYWR (1 << 16)
> +#define CHNL_STS_CURPERR (1 << 17)
> +#define CHNL_STS_NXTPERR (1 << 18)
> +#define CHNL_STS_ADDRERR (1 << 19)
> +#define CHNL_STS_CMPERR (1 << 20)
> +#define CHNL_STS_TAILERR (1 << 21)
> +
> +#define DMA_CONTROL_REG 0x40 /* rw */
> +#define DMA_CONTROL_RST (1 << 0)
> +#define DMA_TAIL_ENABLE (1 << 2)
>
Oh, ugly. The register definitions are identical for virtex4 mmio
access and virtex5 DCR access. The only difference is the multiplier
(DCRs increase by 1, mmio increments by 4) to the register. Rather
than defining a whole new register block, just multiply the offset by
4 when doing an MMIO access.
g.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/5] temac: dma init for Virtex4
2010-02-22 19:06 ` [PATCH 2/5] temac: dma init for Virtex4 gfilip
2010-02-22 19:06 ` [PATCH 3/5] temac: dma deinit gfilip
@ 2010-02-22 22:23 ` Grant Likely
1 sibling, 0 replies; 8+ messages in thread
From: Grant Likely @ 2010-02-22 22:23 UTC (permalink / raw)
To: gfilip; +Cc: netdev
On Mon, Feb 22, 2010 at 12:06 PM, <gfilip@ee.ethz.ch> wrote:
> This patch belongs to a set of patches which extends the temac driver to support Virtex4-FX. It was successfully tested on the ML403 evaluation board.
>
> Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
> ---
> drivers/net/ll_temac.h | 4 ++++
> drivers/net/ll_temac_main.c | 17 ++++++++++++++++-
> 2 files changed, 20 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
> index 95dd650..51824a8 100644
> --- a/drivers/net/ll_temac.h
> +++ b/drivers/net/ll_temac.h
> @@ -383,7 +383,11 @@ struct temac_local {
>
> /* IO registers and IRQs */
> void __iomem *regs;
> +#ifdef CONFIG_XILINX_VIRTEX_4_FX
> + void __iomem *dma_regs;
> +#else
> dcr_host_t sdma_dcrs;
> +#endif
Hi Filip,
Rather than using a CONFIG symbol to select between MMIO and DCR
modes, you should look at how this patch implemented it:
http://www.gossamer-threads.com/lists/linux/kernel/1184834?page=last
John Tyner's approach is pretty good, but it needs a bit more work
before merging and he is no longer working on a virtex platform so he
isn't planning to finish it. Basically, there is no reason for the
driver to have to choose at compile time whether DCR or MMIO will be
used.
g.
> int tx_irq;
> int rx_irq;
> int emac_num;
> diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
> index a8522bd..0d4b1c5 100644
> --- a/drivers/net/ll_temac_main.c
> +++ b/drivers/net/ll_temac_main.c
> @@ -812,7 +812,6 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
> struct net_device *ndev;
> const void *addr;
> int size, rc = 0;
> - unsigned int dcrs;
>
> /* Init network device structure */
> ndev = alloc_etherdev(sizeof(*lp));
> @@ -862,6 +861,21 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
> goto nodev;
> }
>
> +#ifdef CONFIG_XILINX_VIRTEX_4_FX
> + unsigned int ds;
> + const u32 *dr = of_get_property(np, "reg", &ds);
> + if (dr == NULL || ds & 1 || 0 >= ds ) {
> + dev_err(&op->dev, "could not get DMA register address\n");
> + goto nodev;
> + }
> + lp->dma_regs = (u32) ioremap(*dr, 4096);
> + if (!lp->dma_regs) {
> + dev_err(&op->dev, "could not get DMA virtual address\n");
> + goto nodev;
> + }
> + dev_dbg(&op->dev, "DMA base: %x\n", lp->dma_regs);
> +#else /*CONFIG_XILINX_VIRTEX_4_FX*/
> + unsigned int dcrs;
> dcrs = dcr_resource_start(np, 0);
> if (dcrs == 0) {
> dev_err(&op->dev, "could not get DMA register address\n");
> @@ -869,6 +883,7 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
> }
> lp->sdma_dcrs = dcr_map(np, dcrs, dcr_resource_len(np, 0));
> dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
> +#endif /*CONFIG_XILINX_VIRTEX_4_FX*/'
>
> lp->rx_irq = irq_of_parse_and_map(np, 0);
> lp->tx_irq = irq_of_parse_and_map(np, 1);
> --
> 1.6.4.4
>
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 5/5] temac: add missing mask
2010-02-22 19:07 ` [PATCH 5/5] temac: add missing mask gfilip
@ 2010-02-22 22:25 ` Grant Likely
0 siblings, 0 replies; 8+ messages in thread
From: Grant Likely @ 2010-02-22 22:25 UTC (permalink / raw)
To: gfilip; +Cc: netdev
On Mon, Feb 22, 2010 at 12:07 PM, <gfilip@ee.ethz.ch> wrote:
> For Virtex4-FX this mask is necessary. I think this is also true for Virtex5. Please test.
>
> Signed-off-by: Filip Gospodinov <gfilip@ee.ethz.ch>
> ---
> drivers/net/ll_temac_main.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
> index 8b4e1b9..43d51b7 100644
> --- a/drivers/net/ll_temac_main.c
> +++ b/drivers/net/ll_temac_main.c
> @@ -627,7 +627,7 @@ static void ll_temac_recv(struct net_device *ndev)
> while ((bdstat & STS_CTRL_APP0_CMPLT)) {
>
> skb = lp->rx_skb[lp->rx_bd_ci];
> - length = cur_p->app4;
> + length = (cur_p->app4 & 0x3fff);
A patch making this change has already been merged into david's next tree.
g.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-02-22 22:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-22 19:06 [PATCH 1/5] temac: Add Virtex4 address mappings gfilip
2010-02-22 19:06 ` [PATCH 2/5] temac: dma init for Virtex4 gfilip
2010-02-22 19:06 ` [PATCH 3/5] temac: dma deinit gfilip
2010-02-22 19:07 ` [PATCH 4/5] temac: dma MMIO for Virtex4 gfilip
2010-02-22 19:07 ` [PATCH 5/5] temac: add missing mask gfilip
2010-02-22 22:25 ` Grant Likely
2010-02-22 22:23 ` [PATCH 2/5] temac: dma init for Virtex4 Grant Likely
2010-02-22 22:10 ` [PATCH 1/5] temac: Add Virtex4 address mappings Grant Likely
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).