From: Laszlo Ersek <lersek@redhat.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
edk2-devel@lists.sourceforge.net, olivier.martin@arm.com,
roy.franz@linaro.org, leif.lindholm@linaro.org,
stefano.stabellini@eu.citrix.com, ian.campbell@citrix.com,
anthony.perard@citrix.com, christoffer.dall@linaro.org,
xen-devel@lists.xen.org, ilias.biris@linaro.org
Subject: Re: [PATCH v2 25/29] Ovmf/Xen: implement dummy RealTimeClockLib for Xen
Date: Mon, 02 Feb 2015 18:33:31 +0100 [thread overview]
Message-ID: <54CFB4EB.5050903__36656.3512398445$1422898540$gmane$org@redhat.com> (raw)
In-Reply-To: <1422299011-2409-26-git-send-email-ard.biesheuvel@linaro.org>
On 01/26/15 20:03, Ard Biesheuvel wrote:
> This implements a dummy RealTimeClockLib for Xen, as there is no
> guest interface to access the time kept by Xen that can be shared
> between UEFI and the OS.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf | 38 ++++++++++++++++
> 2 files changed, 234 insertions(+)
>
> diff --git a/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
> new file mode 100644
> index 000000000000..70204ac22a92
> --- /dev/null
> +++ b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
> @@ -0,0 +1,196 @@
> +/** @file
> + Implement EFI RealTimeClock runtime services via Xen shared info page
> +
> + Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR>
> +
> + This program and the accompanying materials
> + are licensed and made available under the terms and conditions of the BSD License
> + which accompanies this distribution. The full text of the license may be found at
> + http://opensource.org/licenses/bsd-license.php
> +
> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +
> +#include <Uefi.h>
> +#include <PiDxe.h>
> +#include <Library/BaseLib.h>
> +#include <Library/DebugLib.h>
> +
> +/**
> + Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME
> + **/
> +STATIC
> +VOID
> +EpochToEfiTime (
> + IN UINTN EpochSeconds,
> + OUT EFI_TIME *Time
> + )
> +{
> + UINTN a;
> + UINTN b;
> + UINTN c;
> + UINTN d;
> + UINTN g;
> + UINTN j;
> + UINTN m;
> + UINTN y;
> + UINTN da;
> + UINTN db;
> + UINTN dc;
> + UINTN dg;
> + UINTN hh;
> + UINTN mm;
> + UINTN ss;
> + UINTN J;
> +
> + J = (EpochSeconds / 86400) + 2440588;
> + j = J + 32044;
> + g = j / 146097;
> + dg = j % 146097;
> + c = (((dg / 36524) + 1) * 3) / 4;
> + dc = dg - (c * 36524);
> + b = dc / 1461;
> + db = dc % 1461;
> + a = (((db / 365) + 1) * 3) / 4;
> + da = db - (a * 365);
> + y = (g * 400) + (c * 100) + (b * 4) + a;
> + m = (((da * 5) + 308) / 153) - 2;
> + d = da - (((m + 4) * 153) / 5) + 122;
> +
> + Time->Year = y - 4800 + ((m + 2) / 12);
> + Time->Month = ((m + 2) % 12) + 1;
> + Time->Day = d + 1;
> +
> + ss = EpochSeconds % 60;
> + a = (EpochSeconds - ss) / 60;
> + mm = a % 60;
> + b = (a - mm) / 60;
> + hh = b % 24;
> +
> + Time->Hour = hh;
> + Time->Minute = mm;
> + Time->Second = ss;
> + Time->Nanosecond = 0;
> +
> +}
> +
> +/**
> + Returns the current time and date information, and the time-keeping capabilities
> + of the hardware platform.
> +
> + @param Time A pointer to storage to receive a snapshot of the current time.
> + @param Capabilities An optional pointer to a buffer to receive the real time clock
> + device's capabilities.
> +
> + @retval EFI_SUCCESS The operation completed successfully.
> + @retval EFI_INVALID_PARAMETER Time is NULL.
> + @retval EFI_DEVICE_ERROR The time could not be retrieved due to hardware error.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibGetTime (
> + OUT EFI_TIME *Time,
> + OUT EFI_TIME_CAPABILITIES *Capabilities
> + )
> +{
> + ASSERT (Time != NULL);
> +
> + //
> + // For now, there is nothing that we can do besides returning a bogus time,
> + // as Xen's timekeeping uses a shared info page which cannot be shared
> + // between UEFI and the OS
> + //
> + EpochToEfiTime(1421770011, Time);
> +
> + return EFI_SUCCESS;
> +}
> +
> +/**
> + Sets the current local time and date information.
> +
> + @param Time A pointer to the current time.
> +
> + @retval EFI_SUCCESS The operation completed successfully.
> + @retval EFI_INVALID_PARAMETER A time field is out of range.
> + @retval EFI_DEVICE_ERROR The time could not be set due due to hardware error.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibSetTime (
> + IN EFI_TIME *Time
> + )
> +{
> + return EFI_DEVICE_ERROR;
> +}
> +
> +
> +/**
> + Returns the current wakeup alarm clock setting.
> +
> + @param Enabled Indicates if the alarm is currently enabled or disabled.
> + @param Pending Indicates if the alarm signal is pending and requires acknowledgement.
> + @param Time The current alarm setting.
> +
> + @retval EFI_SUCCESS The alarm settings were returned.
> + @retval EFI_INVALID_PARAMETER Any parameter is NULL.
> + @retval EFI_DEVICE_ERROR The wakeup time could not be retrieved due to a hardware error.
> + @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibGetWakeupTime (
> + OUT BOOLEAN *Enabled,
> + OUT BOOLEAN *Pending,
> + OUT EFI_TIME *Time
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + Sets the system wakeup alarm clock time.
> +
> + @param Enabled Enable or disable the wakeup alarm.
> + @param Time If Enable is TRUE, the time to set the wakeup alarm for.
> +
> + @retval EFI_SUCCESS If Enable is TRUE, then the wakeup alarm was enabled. If
> + Enable is FALSE, then the wakeup alarm was disabled.
> + @retval EFI_INVALID_PARAMETER A time field is out of range.
> + @retval EFI_DEVICE_ERROR The wakeup time could not be set due to a hardware error.
> + @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibSetWakeupTime (
> + IN BOOLEAN Enabled,
> + OUT EFI_TIME *Time
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + This is the declaration of an EFI image entry point. This can be the entry point to an application
> + written to this specification, an EFI boot service driver, or an EFI runtime driver.
> +
> + @param ImageHandle Handle that identifies the loaded image.
> + @param SystemTable System Table for this image.
> +
> + @retval EFI_SUCCESS The operation completed successfully.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibRtcInitialize (
> + IN EFI_HANDLE ImageHandle,
> + IN EFI_SYSTEM_TABLE *SystemTable
> + )
> +{
> + return EFI_SUCCESS;
> +}
> diff --git a/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf
> new file mode 100644
> index 000000000000..aafbfda6b491
> --- /dev/null
> +++ b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf
> @@ -0,0 +1,38 @@
> +#/** @file
> +#
> +# Copyright (c) 2015, L Ltd. All rights reserved.<BR>
> +#
> +# This program and the accompanying materials
> +# are licensed and made available under the terms and conditions of the BSD License
> +# which accompanies this distribution. The full text of the license may be found at
> +# http://opensource.org/licenses/bsd-license.php
> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +#
> +#
> +#**/
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = XenRealTimeClockLib
> + FILE_GUID = EC2557E8-7005-430B-9F6F-9BA109698248
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = RealTimeClockLib|DXE_CORE DXE_DRIVER UEFI_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION
> +
> +[Sources.common]
> + XenRealTimeClockLib.c
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + OvmfPkg/OvmfPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> +
> +[LibraryClasses]
> + UefiLib
> + DebugLib
> + DxeServicesTableLib
> + UefiRuntimeLib
> +
> +[Guids]
> + gEfiEventVirtualAddressChangeGuid
>
I think this library belongs under
"ArmPlatformPkg/ArmVirtualizationPkg/Library/".
The RealTimeClockLib library class (interface) is declared in
"EmbeddedPkg/Include/Library/RealTimeClockLib.h", and it is completely
unused in OVMF. OTOH ArmPlatformPkg uses the library class in a number
of places, and it even provides one library instance
(PL031RealTimeClockLib).
Thanks,
Laszlo
next prev parent reply other threads:[~2015-02-02 17:33 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1422299011-2409-1-git-send-email-ard.biesheuvel@linaro.org>
2015-01-26 19:03 ` [PATCH v2 01/29] ArmPkg: allow HYP timer interrupt to be omitted Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 02/29] ArmPkg: allow patchable PCDs for memory, FD and FV addresses Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 03/29] ArmPlatformPkg: allow patchable PCD for FD base address Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 04/29] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 05/29] ArmVirtualizationPkg: allow patchable PCD for device tree base address Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 06/29] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 07/29] ArmVirtualizationPkg: use a HOB to store device tree blob Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 08/29] ArmVirtualizationPkg: add padding to FDT allocation Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 09/29] ArmPlatformPkg/PrePi: allow use of patchable PCDs Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 10/29] ArmPlatformPkg/PrePi: allow unicore PrePi on multicore capable CPU Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 11/29] ArmPlatformPkg/PrePi: add a relocatable version of PrePi Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 12/29] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 13/29] ArmVirtualizationPkg: allow patchable PCD for FV base address Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 14/29] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 15/29] Ovmf/Xen: move Xen interface version to <xen.h> Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 16/29] Ovmf/Xen: fix pointer to int cast in XenBusDxe Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 17/29] Ovmf/Xen: refactor XenBusDxe hypercall implementation Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 18/29] Ovmf/Xen: move XenBusDxe hypercall code to separate library Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 19/29] Ovmf/Xen: introduce XENIO_PROTOCOL Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 20/29] Ovmf/Xen: add separate driver for Xen PCI device Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 21/29] Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 22/29] Ovmf/Xen: implement XenHypercallLib for ARM Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 23/29] Ovmf/Xen: add ARM and AArch64 support to XenBusDxe Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 24/29] Ovmf/Xen: add Xen PV console SerialPortLib driver Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 25/29] Ovmf/Xen: implement dummy RealTimeClockLib for Xen Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 26/29] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 27/29] ArmVirtualizationPkg: add XenIoMmioLib Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 28/29] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Ard Biesheuvel
2015-01-26 19:03 ` [PATCH v2 29/29] ArmVirtualizationPkg: add platform description for Xen guests Ard Biesheuvel
[not found] ` <1422299011-2409-18-git-send-email-ard.biesheuvel@linaro.org>
2015-01-27 12:43 ` [PATCH v2 17/29] Ovmf/Xen: refactor XenBusDxe hypercall implementation Stefano Stabellini
2015-01-27 12:46 ` Ard Biesheuvel
[not found] ` <CAKv+Gu9T2toY5O+wNtOpXPG7bHcG2C=OATHYA4=4OUznG5KpHg@mail.gmail.com>
2015-01-27 13:10 ` Ard Biesheuvel
[not found] ` <CAKv+Gu_FZ-fJU3LTEE4p+VXvZ9BJg9Y7SOPfwcV9_M+BJRMvzg@mail.gmail.com>
2015-02-02 13:29 ` Laszlo Ersek
[not found] ` <1422299011-2409-30-git-send-email-ard.biesheuvel@linaro.org>
2015-01-27 12:44 ` [PATCH v2 29/29] ArmVirtualizationPkg: add platform description for Xen guests Julien Grall
2015-01-27 12:50 ` Ard Biesheuvel
2015-02-03 12:14 ` Laszlo Ersek
[not found] ` <54D0BBBA.4040900@redhat.com>
2015-02-03 12:19 ` Ard Biesheuvel
[not found] ` <1422299011-2409-23-git-send-email-ard.biesheuvel@linaro.org>
2015-01-27 12:50 ` [PATCH v2 22/29] Ovmf/Xen: implement XenHypercallLib for ARM Stefano Stabellini
[not found] ` <1422299011-2409-2-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 12:26 ` [PATCH v2 01/29] ArmPkg: allow HYP timer interrupt to be omitted Laszlo Ersek
[not found] ` <1422299011-2409-4-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 14:29 ` [PATCH v2 03/29] ArmPlatformPkg: allow patchable PCD for FD base address Olivier Martin
[not found] ` <1422299011-2409-3-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 12:30 ` [PATCH v2 02/29] ArmPkg: allow patchable PCDs for memory, FD and FV addresses Laszlo Ersek
2015-01-28 14:36 ` Olivier Martin
[not found] ` <1422299011-2409-8-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 15:04 ` [PATCH v2 07/29] ArmVirtualizationPkg: use a HOB to store device tree blob Olivier Martin
[not found] ` <54c8fa6e.05e2e50a.2d22.0377SMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-28 16:04 ` Ard Biesheuvel
[not found] ` <CAKv+Gu-Tttj044s044M9vro5ZAQs1Kv6d+EK56HyDS4Yi7BrpQ@mail.gmail.com>
2015-01-30 10:53 ` Laszlo Ersek
[not found] ` <1422299011-2409-9-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 15:13 ` [PATCH v2 08/29] ArmVirtualizationPkg: add padding to FDT allocation Olivier Martin
[not found] ` <54c8fc99.a76db40a.3409.ffff9415SMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-28 16:18 ` Ard Biesheuvel
[not found] ` <CAKv+Gu8rxq-=Z_aNwYBnG46CWjSCM7Ce8d3fOZWe0CAqJJN5fA@mail.gmail.com>
2015-01-30 10:57 ` Laszlo Ersek
[not found] ` <1422299011-2409-10-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 15:28 ` [PATCH v2 09/29] ArmPlatformPkg/PrePi: allow use of patchable PCDs Olivier Martin
[not found] ` <54c9003a.69ecc20a.7d1c.ffffc4cfSMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-28 16:59 ` Ard Biesheuvel
[not found] ` <1422299011-2409-6-git-send-email-ard.biesheuvel@linaro.org>
2015-01-28 14:38 ` [PATCH v2 05/29] ArmVirtualizationPkg: allow patchable PCD for device tree base address Olivier Martin
2015-01-30 10:29 ` Laszlo Ersek
[not found] ` <1422299011-2409-13-git-send-email-ard.biesheuvel@linaro.org>
2015-01-30 11:09 ` [PATCH v2 12/29] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Laszlo Ersek
[not found] ` <1422299011-2409-14-git-send-email-ard.biesheuvel@linaro.org>
2015-01-30 11:17 ` [PATCH v2 13/29] ArmVirtualizationPkg: allow patchable PCD for FV base address Laszlo Ersek
[not found] ` <1422299011-2409-15-git-send-email-ard.biesheuvel@linaro.org>
2015-01-30 11:19 ` [PATCH v2 14/29] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Laszlo Ersek
[not found] ` <1422299011-2409-17-git-send-email-ard.biesheuvel@linaro.org>
2015-01-30 11:33 ` [PATCH v2 16/29] Ovmf/Xen: fix pointer to int cast in XenBusDxe Laszlo Ersek
[not found] ` <1422299011-2409-19-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 15:21 ` [PATCH v2 18/29] Ovmf/Xen: move XenBusDxe hypercall code to separate library Laszlo Ersek
[not found] ` <1422299011-2409-20-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 15:28 ` [PATCH v2 19/29] Ovmf/Xen: introduce XENIO_PROTOCOL Laszlo Ersek
[not found] ` <1422299011-2409-21-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 16:13 ` [PATCH v2 20/29] Ovmf/Xen: add separate driver for Xen PCI device Laszlo Ersek
[not found] ` <1422299011-2409-22-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 17:10 ` [PATCH v2 21/29] Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL Laszlo Ersek
[not found] ` <1422299011-2409-25-git-send-email-ard.biesheuvel@linaro.org>
2015-01-27 11:48 ` [PATCH v2 24/29] Ovmf/Xen: add Xen PV console SerialPortLib driver Julien Grall
2015-01-27 12:33 ` Stefano Stabellini
2015-02-02 17:22 ` Laszlo Ersek
[not found] ` <1422299011-2409-27-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 17:28 ` [PATCH v2 26/29] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Laszlo Ersek
[not found] ` <1422299011-2409-26-git-send-email-ard.biesheuvel@linaro.org>
2015-02-02 17:33 ` Laszlo Ersek [this message]
[not found] ` <1422299011-2409-28-git-send-email-ard.biesheuvel@linaro.org>
2015-02-03 11:45 ` [PATCH v2 27/29] ArmVirtualizationPkg: add XenIoMmioLib Laszlo Ersek
2015-02-03 11:50 ` Laszlo Ersek
[not found] ` <54D0B4D4.7060408@redhat.com>
2015-02-03 11:55 ` Laszlo Ersek
[not found] ` <54D0B740.1060408@redhat.com>
2015-02-03 12:01 ` Ard Biesheuvel
[not found] ` <1422299011-2409-29-git-send-email-ard.biesheuvel@linaro.org>
2015-01-27 11:57 ` [PATCH v2 28/29] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Julien Grall
2015-01-27 12:08 ` Ard Biesheuvel
2015-02-03 12:01 ` Laszlo Ersek
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='54CFB4EB.5050903__36656.3512398445$1422898540$gmane$org@redhat.com' \
--to=lersek@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=ard.biesheuvel@linaro.org \
--cc=christoffer.dall@linaro.org \
--cc=edk2-devel@lists.sourceforge.net \
--cc=ian.campbell@citrix.com \
--cc=ilias.biris@linaro.org \
--cc=leif.lindholm@linaro.org \
--cc=olivier.martin@arm.com \
--cc=roy.franz@linaro.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.org \
/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: link
Be 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.