From: Maxime Ripard <maxime.ripard@free-electrons.com> To: Vinod Koul <vinod.koul@intel.com>, dmaengine@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, "Laurent Pinchart" <laurent.pinchart@ideasonboard.com>, "Antoine Ténart" <antoine@free-electrons.com>, "Russell King" <linux@arm.linux.org.uk>, lars@metafoo.de, "Maxime Ripard" <maxime.ripard@free-electrons.com> Subject: [PATCH v5 40/61] dmaengine: sirf: Split device_control Date: Mon, 17 Nov 2014 14:42:34 +0100 [thread overview] Message-ID: <1416231775-31252-41-git-send-email-maxime.ripard@free-electrons.com> (raw) In-Reply-To: <1416231775-31252-1-git-send-email-maxime.ripard@free-electrons.com> Split the device_control callback of the SiRF Prima 2 DMA driver to make use of the newly introduced callbacks, that will eventually be used to retrieve slave capabilities. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- drivers/dma/sirf-dma.c | 43 +++++++++++++------------------------------ 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index e0aa759139f3..eeb2af440b9f 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c @@ -281,9 +281,10 @@ static dma_cookie_t sirfsoc_dma_tx_submit(struct dma_async_tx_descriptor *txd) return cookie; } -static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, - struct dma_slave_config *config) +static int sirfsoc_dma_slave_config(struct dma_chan *chan, + struct dma_slave_config *config) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); unsigned long flags; if ((config->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || @@ -297,8 +298,9 @@ static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, return 0; } -static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_terminate_all(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -327,8 +329,9 @@ static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_pause_chan(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -348,8 +351,9 @@ static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_resume_chan(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -369,30 +373,6 @@ static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, - unsigned long arg) -{ - struct dma_slave_config *config; - struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); - - switch (cmd) { - case DMA_PAUSE: - return sirfsoc_dma_pause_chan(schan); - case DMA_RESUME: - return sirfsoc_dma_resume_chan(schan); - case DMA_TERMINATE_ALL: - return sirfsoc_dma_terminate_all(schan); - case DMA_SLAVE_CONFIG: - config = (struct dma_slave_config *)arg; - return sirfsoc_dma_slave_config(schan, config); - - default: - break; - } - - return -ENOSYS; -} - /* Alloc channel resources */ static int sirfsoc_dma_alloc_chan_resources(struct dma_chan *chan) { @@ -739,7 +719,10 @@ static int sirfsoc_dma_probe(struct platform_device *op) dma->device_alloc_chan_resources = sirfsoc_dma_alloc_chan_resources; dma->device_free_chan_resources = sirfsoc_dma_free_chan_resources; dma->device_issue_pending = sirfsoc_dma_issue_pending; - dma->device_control = sirfsoc_dma_control; + dma->device_config = sirfsoc_dma_slave_config; + dma->device_pause = sirfsoc_dma_pause_chan; + dma->device_resume = sirfsoc_dma_resume_chan; + dma->device_terminate_all = sirfsoc_dma_terminate_all; dma->device_tx_status = sirfsoc_dma_tx_status; dma->device_prep_interleaved_dma = sirfsoc_dma_prep_interleaved; dma->device_prep_dma_cyclic = sirfsoc_dma_prep_cyclic; -- 2.1.1
WARNING: multiple messages have this Message-ID (diff)
From: maxime.ripard@free-electrons.com (Maxime Ripard) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 40/61] dmaengine: sirf: Split device_control Date: Mon, 17 Nov 2014 14:42:34 +0100 [thread overview] Message-ID: <1416231775-31252-41-git-send-email-maxime.ripard@free-electrons.com> (raw) In-Reply-To: <1416231775-31252-1-git-send-email-maxime.ripard@free-electrons.com> Split the device_control callback of the SiRF Prima 2 DMA driver to make use of the newly introduced callbacks, that will eventually be used to retrieve slave capabilities. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- drivers/dma/sirf-dma.c | 43 +++++++++++++------------------------------ 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index e0aa759139f3..eeb2af440b9f 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c @@ -281,9 +281,10 @@ static dma_cookie_t sirfsoc_dma_tx_submit(struct dma_async_tx_descriptor *txd) return cookie; } -static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, - struct dma_slave_config *config) +static int sirfsoc_dma_slave_config(struct dma_chan *chan, + struct dma_slave_config *config) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); unsigned long flags; if ((config->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || @@ -297,8 +298,9 @@ static int sirfsoc_dma_slave_config(struct sirfsoc_dma_chan *schan, return 0; } -static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_terminate_all(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -327,8 +329,9 @@ static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_pause_chan(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -348,8 +351,9 @@ static int sirfsoc_dma_pause_chan(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) +static int sirfsoc_dma_resume_chan(struct dma_chan *chan) { + struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); int cid = schan->chan.chan_id; unsigned long flags; @@ -369,30 +373,6 @@ static int sirfsoc_dma_resume_chan(struct sirfsoc_dma_chan *schan) return 0; } -static int sirfsoc_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, - unsigned long arg) -{ - struct dma_slave_config *config; - struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); - - switch (cmd) { - case DMA_PAUSE: - return sirfsoc_dma_pause_chan(schan); - case DMA_RESUME: - return sirfsoc_dma_resume_chan(schan); - case DMA_TERMINATE_ALL: - return sirfsoc_dma_terminate_all(schan); - case DMA_SLAVE_CONFIG: - config = (struct dma_slave_config *)arg; - return sirfsoc_dma_slave_config(schan, config); - - default: - break; - } - - return -ENOSYS; -} - /* Alloc channel resources */ static int sirfsoc_dma_alloc_chan_resources(struct dma_chan *chan) { @@ -739,7 +719,10 @@ static int sirfsoc_dma_probe(struct platform_device *op) dma->device_alloc_chan_resources = sirfsoc_dma_alloc_chan_resources; dma->device_free_chan_resources = sirfsoc_dma_free_chan_resources; dma->device_issue_pending = sirfsoc_dma_issue_pending; - dma->device_control = sirfsoc_dma_control; + dma->device_config = sirfsoc_dma_slave_config; + dma->device_pause = sirfsoc_dma_pause_chan; + dma->device_resume = sirfsoc_dma_resume_chan; + dma->device_terminate_all = sirfsoc_dma_terminate_all; dma->device_tx_status = sirfsoc_dma_tx_status; dma->device_prep_interleaved_dma = sirfsoc_dma_prep_interleaved; dma->device_prep_dma_cyclic = sirfsoc_dma_prep_cyclic; -- 2.1.1
next prev parent reply other threads:[~2014-11-17 13:45 UTC|newest] Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-11-17 13:41 [PATCH v5 00/61] dmaengine: Implement generic slave capabilities retrieval Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:41 ` [PATCH v5 01/61] serial: at91: Use dmaengine_slave_config API Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:41 ` [PATCH v5 02/61] crypto: ux500: Use dmaengine_terminate_all API Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:41 ` [PATCH v5 03/61] dmaengine: Make the destination abbreviation coherent Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:41 ` [PATCH v5 04/61] dmaengine: Rework dma_chan_get Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:41 ` [PATCH v5 05/61] dmaengine: Make channel allocation callbacks optional Maxime Ripard 2014-11-17 13:41 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 06/61] dmaengine: Introduce a device_config callback Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 07/61] dmaengine: split out pause/resume operations from device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 08/61] dmaengine: Add device_terminate_all callback Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 09/61] dmaengine: Remove the need to declare device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 10/61] dmaengine: Create a generic dma_slave_caps callback Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 11/61] dmaengine: pl08x: Split device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 12/61] dmaengine: hdmac: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 13/61] dmaengine: at_xdmac: split device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 14/61] dmaengine: bcm2835: Split device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 15/61] dmaengine: coh901318: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 16/61] dmaengine: cppi41: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 17/61] dmaengine: jz4740: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 18/61] dmaengine: dw: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 19/61] dmaengine: edma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 20/61] dmaengine: ep93xx: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 21/61] dmaengine: fsl-edma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 22/61] dmaengine: imx: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 23/61] dmaengine: imx-sdma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 24/61] dmaengine: intel-mid-dma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 25/61] dmaengine: ipu-idmac: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 26/61] dmaengine: k3: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 27/61] dmaengine: mmp-pdma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 28/61] dmaengine: mmp-tdma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 29/61] dmaengine: moxart: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 30/61] dmaengine: fsl-dma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 31/61] dmaengine: mpc512x: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 32/61] dmaengine: mxs: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-12-05 14:29 ` Vinod Koul 2014-12-05 14:29 ` Vinod Koul 2014-11-17 13:42 ` [PATCH v5 33/61] dmaengine: nbpfaxi: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 34/61] dmaengine: omap: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-12-05 14:27 ` Vinod Koul 2014-12-05 14:27 ` Vinod Koul 2014-12-05 14:33 ` Maxime Ripard 2014-12-05 14:33 ` Maxime Ripard 2014-12-05 14:56 ` Vinod Koul 2014-12-05 14:56 ` Vinod Koul 2014-12-05 17:07 ` Maxime Ripard 2014-12-05 17:07 ` Maxime Ripard 2014-12-05 17:39 ` Vinod Koul 2014-12-05 17:39 ` Vinod Koul 2014-11-17 13:42 ` [PATCH v5 35/61] dmaengine: pl330: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 36/61] dmaengine: bam-dma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 37/61] dmaengine: s3c24xx: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 38/61] dmaengine: sa11x0: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 39/61] dmaengine: sh: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard [this message] 2014-11-17 13:42 ` [PATCH v5 40/61] dmaengine: sirf: " Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 41/61] dmaengine: sun6i: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 42/61] dmaengine: d40: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 43/61] dmaengine: tegra20: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 44/61] dmaengine: xilinx: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 45/61] dmaengine: mv_xor: Remove device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 46/61] dmaengine: pch-dma: Rename device_control Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 47/61] dmaengine: td: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 48/61] dmaengine: txx9: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 49/61] dmaengine: rapidio: tsi721: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 50/61] dmaengine: at_xdmac: Declare slave capabilities for the generic code Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 51/61] dmaengine: bcm2835: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 52/61] dmaengine: fsl-edma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 53/61] dmaengine: edma: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 54/61] dmaengine: nbpfaxi: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 55/61] dmaengine: omap: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 56/61] dmaengine: pl330: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 57/61] dmaengine: sirf: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 58/61] dmaengine: sun6i: " Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 59/61] dmaengine: Add a warning for drivers not using the generic slave caps retrieval Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2015-02-19 7:57 ` Viresh Kumar 2015-02-19 7:57 ` Viresh Kumar 2015-02-19 8:09 ` Jean Delvare 2015-02-19 8:09 ` Jean Delvare 2015-02-19 8:53 ` Viresh Kumar 2015-02-19 8:53 ` Viresh Kumar 2015-02-20 6:24 ` Vinod Koul 2015-02-20 6:24 ` Vinod Koul 2014-11-17 13:42 ` [PATCH v5 60/61] dmaengine: Remove device_control and device_slave_caps Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-11-17 13:42 ` [PATCH v5 61/61] Documentation: dmaengine: Update the documentation Maxime Ripard 2014-11-17 13:42 ` Maxime Ripard 2014-12-08 6:17 ` [PATCH v5 00/61] dmaengine: Implement generic slave capabilities retrieval Vinod Koul 2014-12-08 6:17 ` Vinod Koul 2014-12-08 9:32 ` Ludovic Desroches 2014-12-08 9:32 ` Ludovic Desroches 2014-12-08 13:30 ` Vinod Koul 2014-12-08 13:30 ` Vinod Koul 2014-12-08 14:31 ` Maxime Ripard 2014-12-08 14:31 ` Maxime Ripard 2014-12-08 14:18 ` Maxime Ripard 2014-12-08 14:18 ` Maxime Ripard 2014-12-08 16:28 ` Vinod Koul 2014-12-08 16:28 ` Vinod Koul 2014-12-08 18:38 ` Maxime Ripard 2014-12-08 18:38 ` Maxime Ripard 2014-12-08 21:49 ` Lars-Peter Clausen 2014-12-08 21:49 ` Lars-Peter Clausen 2014-12-11 17:03 ` Maxime Ripard 2014-12-11 17:03 ` Maxime Ripard 2014-12-09 4:43 ` Vinod Koul 2014-12-09 4:43 ` Vinod Koul
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=1416231775-31252-41-git-send-email-maxime.ripard@free-electrons.com \ --to=maxime.ripard@free-electrons.com \ --cc=antoine@free-electrons.com \ --cc=dmaengine@vger.kernel.org \ --cc=lars@metafoo.de \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=vinod.koul@intel.com \ /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: linkBe 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.