On 05/04/2015 03:22 AM, Quan Xu wrote:
This patch adds infrastructure for xen front drivers living in qemu,
so drivers don't need to implement common stuff on their own.  It's
mostly xenbus management stuff: some functions to access XenStore,
setting up XenStore watches, callbacks on device discovery and state
changes, and handle event channel between the virtual machines.

Call xen_fe_register() function to register XenDevOps, and make sure,
          [...]
     3 = ""
      [...]
      device = "" (frontend device, the backend is running in QEMU/.etc)
       vkbd = ""
        [...]
       vif = ""
        [...]

  ..

(QEMU) xen_vtpmdev_ops is initialized with the following process:
   xen_hvm_init()
     [...]
     -->xen_fe_register("vtpm", ...)
       -->xenstore_fe_scan()
         -->xen_fe_try_init(ops)
           --> XenDevOps.init()
         -->xen_fe_get_xendev()
           --> XenDevOps.alloc()
         -->xen_fe_check()
           -->xen_fe_try_initialise()
             --> XenDevOps.initialise()
           -->xen_fe_try_connected()
             --> XenDevOps.connected()
         -->xs_watch()
     [...]

Signed-off-by: Quan Xu <quan...@intel.com>

--Changes in v6:
  -Replace buf_size with PAGE_SIZE and use length rather than
   shr->length.
---
  hw/tpm/Makefile.objs         |   1 +
  hw/tpm/xen_vtpm_frontend.c   | 315 +++++++++++++++++++++++++++++++++++++++++++
  hw/xen/xen_frontend.c        |  20 +++
  include/hw/xen/xen_backend.h |   5 +
  include/hw/xen/xen_common.h  |   6 +
  xen-hvm.c                    |   5 +
  6 files changed, 352 insertions(+)
  create mode 100644 hw/tpm/xen_vtpm_frontend.c

diff --git a/hw/tpm/Makefile.objs b/hw/tpm/Makefile.objs
index 99f5983..57919fa 100644
--- a/hw/tpm/Makefile.objs
+++ b/hw/tpm/Makefile.objs
@@ -1,2 +1,3 @@
  common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o
  common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o
+common-obj-$(CONFIG_TPM_XENSTUBDOMS) += xen_vtpm_frontend.o
diff --git a/hw/tpm/xen_vtpm_frontend.c b/hw/tpm/xen_vtpm_frontend.c
new file mode 100644
index 0000000..d6e7cc6
--- /dev/null
+++ b/hw/tpm/xen_vtpm_frontend.c
@@ -0,0 +1,315 @@
+/*
+ * Connect to Xen vTPM stubdom domain
+ *
+ *  Copyright (c) 2015 Intel Corporation
+ *  Authors:
+ *    Quan Xu <quan...@intel.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <inttypes.h>
+#include <time.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <sys/uio.h>
+
+#include "hw/hw.h"
+#include "block/aio.h"
+#include "hw/xen/xen_backend.h"
+
+#ifndef XS_STUBDOM_VTPM_ENABLE
+#define XS_STUBDOM_VTPM_ENABLE    "1"
+#endif
+
+#ifndef PAGE_SIZE
+#define PAGE_SIZE      4096
+#endif

You should be able to use TARGET_PAGE_SIZE from exec/cpu-all.h I think.

With this change: Reviewed-by: Stefan Berger <stef...@linux.vnet.ibm.com>

Regards,
    Stefan


Reply via email to