diff mbox

[RFC,20/20] acpi: Make ACPI builder available to hypervisor code

Message ID 1459905949-10358-21-git-send-email-boris.ostrovsky@oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Boris Ostrovsky April 6, 2016, 1:25 a.m. UTC
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
---
 xen/common/Makefile          |  2 +-
 xen/common/libacpi/Makefile  | 15 ++++++++++++---
 xen/common/libacpi/acpi2_0.h |  6 ++++++
 xen/common/libacpi/build.c   | 15 +++++++++++++++
 xen/common/libacpi/mk_dsdt.c |  4 ++++
 5 files changed, 38 insertions(+), 4 deletions(-)

Comments

Jan Beulich June 6, 2016, 1:48 p.m. UTC | #1
>>> On 06.04.16 at 03:25, <boris.ostrovsky@oracle.com> wrote:
> --- a/xen/common/libacpi/Makefile
> +++ b/xen/common/libacpi/Makefile
> @@ -21,7 +21,16 @@ C_SRC  = build.c dsdt_anycpu.c dsdt_15cpu.c static_tables.c
>  C_SRC += dsdt_anycpu_qemu_xen.c dsdt_empty.c
>  OBJS  = $(patsubst %.c,%.o,$(C_SRC))
>  
> -CFLAGS_xeninclude = -I$(XEN_ROOT)/tools/include
> +ifneq (,$(findstring -D__XEN__,$(CFLAGS)))
> +# Hypervisor
> +obj-y	= $(OBJS)
> +$(OBJS): all
> +CFLAGS  += -I$(XEN_ROOT)/xen/include/public
> +CFLAGS_MKDSDT = -I$(XEN_ROOT)/xen/include/public/hvm -D__XEN__
> +else
> +# Toolstack
> +CFLAGS_MKDSDT = -I$(XEN_ROOT)/tools/include
> +endif

This again speaks against makefile sharing. Note that libelf doesn't
have anything like that.

> --- a/xen/common/libacpi/acpi2_0.h
> +++ b/xen/common/libacpi/acpi2_0.h
> @@ -17,10 +17,16 @@
>  #ifndef _ACPI_2_0_H_
>  #define _ACPI_2_0_H_
>  
> +#ifndef __XEN__
>  #include <stdint.h>
>  #include <xen/xen.h>
>  #include <xen/hvm/ioreq.h>
>  #include <xen/memory.h>
> +#else
> +#include <xen/lib.h>
> +#include <memory.h>
> +#include <hvm/ioreq.h>
> +#endif

I'm not sure this should be done here, albeit I do see the analogy to
how libelf deals with the dual use in this regard (perhaps doing this
in .c files of header other than this particular one would be fine). In
any event I am missing public/ prefixes above (preferably you would
drop the explicit .../public include path, but even if that's needed for
some reason, please don't obscure the inclusion of public headers
here by omitting that prefix).

> --- a/xen/common/libacpi/build.c
> +++ b/xen/common/libacpi/build.c
> @@ -15,8 +15,13 @@
>   * this program; If not, see <http://www.gnu.org/licenses/>.
>   */
>  
> +#ifndef __XEN__
>  #include <stdio.h>
>  #include <string.h>
> +#else
> +#include <xen/lib.h>
> +#define printf printk
> +#endif

I think we should strive to not introduce bunches of new log-level-less
printk()-s. (But I do appreciate you not introducing stdio.h here.)

> @@ -24,14 +29,24 @@
>  #include "ssdt_tpm.h"
>  #include "ssdt_pm.h"
>  #include "x86.h"
> +#ifndef __XEN__
>  #include <xen/hvm/hvm_info_table.h>
>  #include <xen/hvm/hvm_xs_strings.h>
>  #include <xen/hvm/params.h>
> +#else
> +#include <hvm/hvm_info_table.h>
> +#include <hvm/hvm_xs_strings.h>
> +#include <hvm/params.h>
> +#endif
>  
>  #define ACPI_MAX_SECONDARY_TABLES 16
>  
>  #define align16(sz)        (((sz) + 15) & ~15)
> +#ifndef __XEN__
>  #define fixed_strcpy(d, s) strncpy((d), (s), sizeof(d))
> +#else
> +#define fixed_strcpy(d, s) strlcpy((d), (s), sizeof(d))
> +#endif

I'd rather see you ditch the stray parentheses in the pre-existing
instance than introduce further ones.

Jan
diff mbox

Patch

diff --git a/xen/common/Makefile b/xen/common/Makefile
index 77de27e..6e0ac8b 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -73,5 +73,5 @@  subdir-$(CONFIG_X86) += hvm
 
 subdir-$(coverage) += gcov
 
-subdir-y += libelf
+subdir-y += libelf libacpi
 subdir-$(CONFIG_HAS_DEVICE_TREE) += libfdt
diff --git a/xen/common/libacpi/Makefile b/xen/common/libacpi/Makefile
index a1f233f..6cf98db 100644
--- a/xen/common/libacpi/Makefile
+++ b/xen/common/libacpi/Makefile
@@ -21,7 +21,16 @@  C_SRC  = build.c dsdt_anycpu.c dsdt_15cpu.c static_tables.c
 C_SRC += dsdt_anycpu_qemu_xen.c dsdt_empty.c
 OBJS  = $(patsubst %.c,%.o,$(C_SRC))
 
-CFLAGS_xeninclude = -I$(XEN_ROOT)/tools/include
+ifneq (,$(findstring -D__XEN__,$(CFLAGS)))
+# Hypervisor
+obj-y	= $(OBJS)
+$(OBJS): all
+CFLAGS  += -I$(XEN_ROOT)/xen/include/public
+CFLAGS_MKDSDT = -I$(XEN_ROOT)/xen/include/public/hvm -D__XEN__
+else
+# Toolstack
+CFLAGS_MKDSDT = -I$(XEN_ROOT)/tools/include
+endif
 
 vpath iasl $(PATH)
 all: $(C_SRC) ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h
@@ -32,7 +41,7 @@  ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
 	rm -f $*.hex $*.aml
 
 mk_dsdt: mk_dsdt.c
-	$(HOSTCC) $(HOSTCFLAGS) $(CFLAGS_xeninclude) -o $@ mk_dsdt.c
+	$(HOSTCC) $(HOSTCFLAGS) $(CFLAGS_MKDSDT) -o $@ mk_dsdt.c
 
 dsdt_anycpu_qemu_xen.asl: dsdt.asl mk_dsdt
 	awk 'NR > 1 {print s} {s=$$0}' $< > $@
@@ -57,7 +66,7 @@  iasl:
 	@echo 
 	@exit 1
 
-clean:
+clean::
 	rm -rf *.o $(IASL_VER) $(IASL_VER).tar.gz $(DEPS)
 	rm -rf ssdt_*.h dsdt*.c *~ *.aml *.hex mk_dsdt dsdt_*cpu*.asl
 
diff --git a/xen/common/libacpi/acpi2_0.h b/xen/common/libacpi/acpi2_0.h
index 458fb49..d47ad84 100644
--- a/xen/common/libacpi/acpi2_0.h
+++ b/xen/common/libacpi/acpi2_0.h
@@ -17,10 +17,16 @@ 
 #ifndef _ACPI_2_0_H_
 #define _ACPI_2_0_H_
 
+#ifndef __XEN__
 #include <stdint.h>
 #include <xen/xen.h>
 #include <xen/hvm/ioreq.h>
 #include <xen/memory.h>
+#else
+#include <xen/lib.h>
+#include <memory.h>
+#include <hvm/ioreq.h>
+#endif
 
 #define ASCII32(a,b,c,d)         \
     (((a) <<  0) | ((b) <<  8) | ((c) << 16) | ((d) << 24))
diff --git a/xen/common/libacpi/build.c b/xen/common/libacpi/build.c
index 7f2662a..cbde7f9 100644
--- a/xen/common/libacpi/build.c
+++ b/xen/common/libacpi/build.c
@@ -15,8 +15,13 @@ 
  * this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifndef __XEN__
 #include <stdio.h>
 #include <string.h>
+#else
+#include <xen/lib.h>
+#define printf printk
+#endif
 
 #include "acpi2_0.h"
 #include "ssdt_s3.h"
@@ -24,14 +29,24 @@ 
 #include "ssdt_tpm.h"
 #include "ssdt_pm.h"
 #include "x86.h"
+#ifndef __XEN__
 #include <xen/hvm/hvm_info_table.h>
 #include <xen/hvm/hvm_xs_strings.h>
 #include <xen/hvm/params.h>
+#else
+#include <hvm/hvm_info_table.h>
+#include <hvm/hvm_xs_strings.h>
+#include <hvm/params.h>
+#endif
 
 #define ACPI_MAX_SECONDARY_TABLES 16
 
 #define align16(sz)        (((sz) + 15) & ~15)
+#ifndef __XEN__
 #define fixed_strcpy(d, s) strncpy((d), (s), sizeof(d))
+#else
+#define fixed_strcpy(d, s) strlcpy((d), (s), sizeof(d))
+#endif
 #ifndef offsetof
 #define offsetof(t, m) ((unsigned long)&((t *)0)->m)
 #endif
diff --git a/xen/common/libacpi/mk_dsdt.c b/xen/common/libacpi/mk_dsdt.c
index b567b38..e38a2f2 100644
--- a/xen/common/libacpi/mk_dsdt.c
+++ b/xen/common/libacpi/mk_dsdt.c
@@ -5,7 +5,11 @@ 
 #include <getopt.h>
 #include <stdlib.h>
 #include <stdbool.h>
+#ifndef __XEN__
 #include <xen/hvm/hvm_info_table.h>
+#else
+#include <hvm_info_table.h>
+#endif
 
 static unsigned int indent_level;
 static bool debug = false;