Re: [Xen-devel] [PATCH v3 22/27] Ovmf/Xen: add Xen PV console SerialPortLib driver

2015-02-10 Thread Laszlo Ersek
On 02/03/15 20:20, Ard Biesheuvel wrote:
 This implements a SerialPortLib instance that wires up to the
 PV console ring used by domU guests. Also imports the required
 upstream Xen io/console.h header.
 
 Contributed-under: TianoCore Contribution Agreement 1.0
 Reviewed-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
 Signed-off-by: Ard Biesheuvel ard.biesheu...@linaro.org
 ---
  OvmfPkg/Include/IndustryStandard/Xen/io/console.h  |  51 +++
  .../XenConsoleSerialPortLib.c  | 156 
 +
  .../XenConsoleSerialPortLib.inf|  35 +
  3 files changed, 242 insertions(+)
  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/io/console.h
  create mode 100644 
 OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
  create mode 100644 
 OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf

You added the comment I asked for, hence

Acked-by: Laszlo Ersek ler...@redhat.com


___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel


[Xen-devel] [PATCH v3 22/27] Ovmf/Xen: add Xen PV console SerialPortLib driver

2015-02-03 Thread Ard Biesheuvel
This implements a SerialPortLib instance that wires up to the
PV console ring used by domU guests. Also imports the required
upstream Xen io/console.h header.

Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Stefano Stabellini stefano.stabell...@eu.citrix.com
Signed-off-by: Ard Biesheuvel ard.biesheu...@linaro.org
---
 OvmfPkg/Include/IndustryStandard/Xen/io/console.h  |  51 +++
 .../XenConsoleSerialPortLib.c  | 156 +
 .../XenConsoleSerialPortLib.inf|  35 +
 3 files changed, 242 insertions(+)
 create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/io/console.h
 create mode 100644 
OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
 create mode 100644 
OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf

diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/console.h 
b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h
new file mode 100644
index ..f1caa9765bcf
--- /dev/null
+++ b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h
@@ -0,0 +1,51 @@
+/**
+ * console.h
+ *
+ * Console I/O interface for Xen guest OSes.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the Software), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Copyright (c) 2005, Keir Fraser
+ */
+
+#ifndef __XEN_PUBLIC_IO_CONSOLE_H__
+#define __XEN_PUBLIC_IO_CONSOLE_H__
+
+typedef UINT32 XENCONS_RING_IDX;
+
+#define MASK_XENCONS_IDX(idx, ring) ((idx)  (sizeof(ring)-1))
+
+struct xencons_interface {
+char in[1024];
+char out[2048];
+XENCONS_RING_IDX in_cons, in_prod;
+XENCONS_RING_IDX out_cons, out_prod;
+};
+
+#endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: BSD
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c 
b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
new file mode 100644
index ..98022354cf31
--- /dev/null
+++ b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
@@ -0,0 +1,156 @@
+/** @file
+  Xen console SerialPortLib instance
+
+  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 Base.h
+#include Uefi/UefiBaseType.h
+
+#include Library/BaseLib.h
+#include Library/SerialPortLib.h
+#include Library/XenHypercallLib.h
+
+#include IndustryStandard/Xen/io/console.h
+#include IndustryStandard/Xen/hvm/params.h
+#include IndustryStandard/Xen/event_channel.h
+
+//
+// The code below expects these global variables to be mutable, even in the 
case
+// that we have been incorporated into SEC or PEIM phase modules (which is
+// allowed by our INF description). While this is a dangerous assumption to 
make
+// in general, it is actually fine for the Xen domU (guest) environment that
+// this module is intended for, as UEFI always executes from DRAM in that case.
+//
+STATIC evtchn_send_t  mXenConsoleEventChain;
+STATIC struct xencons_interface   *mXenConsoleInterface;
+
+RETURN_STATUS
+EFIAPI
+SerialPortInitialize (
+  VOID
+  )
+{
+  if (!mXenConsoleInterface) {
+mXenConsoleEventChain.port = (UINT32)XenHypercallHvmGetParam 
(HVM_PARAM_CONSOLE_EVTCHN);
+mXenConsoleInterface = (struct xencons_interface *)(UINTN)
+  (XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_PFN)  EFI_PAGE_SHIFT);
+
+//
+// No point in ASSERT'ing here as we won't be seeing the output
+//
+  }
+  return RETURN_SUCCESS;