summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Gagniuc <alexandrux.gagniuc@intel.com>2015-10-30 18:05:57 -0700
committerMartin Roth <martinroth@google.com>2016-06-08 22:35:18 +0200
commit6a587343a96167c21d63ace1857ee2d55cdebfa0 (patch)
tree822c3a01cf1327849dd0ad16be214a4f02cff833
parent0f61da85820c518341240ce0b60ebfec70187fc0 (diff)
drivers/intel/fsp2.0: Add semantic patch for FspUpdVpd.h header
Previous FSP implementations in coreboot have included FspUpdVpd.h directly, along with with efi headers. Instead of taking that approach in FSP 2.0, we provide a semantic patch that, with minimal modifications, makes FspUpdVpd.h easier to include in coreboot, and eliminates reliance on external headers and definitions. Change-Id: I0c2a6f7baf6fb50ae22b64e08e653cfe1aefdaf9 Signed-off-by: Alexandru Gagniuc <alexandrux.gagniuc@intel.com> Reviewed-on: https://review.coreboot.org/13331 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--src/drivers/intel/fsp2_0/header_util/fspupdvpd.spatch187
-rw-r--r--src/drivers/intel/fsp2_0/header_util/fspupdvpd_sanitize.sh33
2 files changed, 220 insertions, 0 deletions
diff --git a/src/drivers/intel/fsp2_0/header_util/fspupdvpd.spatch b/src/drivers/intel/fsp2_0/header_util/fspupdvpd.spatch
new file mode 100644
index 0000000000..d6bc820c48
--- /dev/null
+++ b/src/drivers/intel/fsp2_0/header_util/fspupdvpd.spatch
@@ -0,0 +1,187 @@
+/*
+ * Semantic patch for fspupdvpd_sanitize.sh. Please call the script directly.
+ *
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2015 Intel Corp.
+ * (Written by Alexandru Gagniuc <alexandrux.gagniuc@intel.com> for Intel Corp.)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This semantic patch 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 General Public License for more details.
+ */
+
+@ kill_pragma_pack @
+@@
+- #pragma pack(...)
+
+/*
+ * Convert named typedef'd structs
+ * Example : typedef struct name {} name_t; -> struct name {};
+ */
+@ named_struct @
+identifier i;
+type t;
+@@
+typedef struct i { ... } t;
+
+/* Make typename usable as identifier */
+@ script:python named_struct_type @
+t << named_struct.t;
+i;
+@@
+coccinelle.i = t.rstrip('_t')
+
+
+@ convert_named_struct_decls @
+type named_struct.t;
+identifier named_struct_type.i;
+identifier g;
+@@
+- typedef struct g {
++ struct i {
+...
+}
+- t
+;
+
+/* Replace type with struct */
+@ named_typedef_to_struct @
+type named_struct.t;
+identifier named_struct_type.i;
+@@
+- t
++ struct i
+
+
+/*
+ * Convert unnamed typedef'd structs
+ * Example : typedef struct {} name_t; -> struct name {};
+ */
+@ unnamed_struct @
+type t;
+@@
+typedef struct { ... } t;
+
+/* Make typename usable as identifier */
+@ script:python unnamed_struct_type @
+t << unnamed_struct.t;
+i;
+@@
+coccinelle.i = t.rstrip('_t')
+
+@ convert_unnamed_struct_decls @
+type unnamed_struct.t;
+identifier unnamed_struct_type.i;
+@@
+-typedef struct {
++struct i {
+ ...
+}
+- t
+;
+
+/*
+ * Convert unnamed typedef'd enums
+ */
+@ unnamed_enum @
+type t;
+@@
+typedef enum { ... } t;
+
+/* Make typename usable as identifier */
+@ script:python unnamed_enum_type @
+t << unnamed_enum.t;
+i;
+@@
+coccinelle.i = t.rstrip('_t')
+
+@ convert_unnamed_enum_decls @
+type unnamed_enum.t;
+identifier unnamed_enum_type.i;
+@@
+-typedef enum {
++enum i {
+ ...
+}
+- t
+;
+
+/* Replace type with struct */
+@ unnamed_typedef_to_struct @
+type unnamed_struct.t;
+identifier unnamed_struct_type.i;
+@@
+-t
++struct i
+
+/*
+ * Pack _ALL_ structs
+ */
+@ pack_structs @
+identifier s;
+@@
+
+struct s {
+...
+}
++ __attribute__((packed))
+;
+
+/*
+ * BIGINT to stdint
+ */
+@ uint8_t @
+typedef UINT8;
+typedef uint8_t;
+@@
+- UINT8
++ uint8_t
+
+@ uint16_t @
+typedef UINT16;
+typedef uint16_t;
+@@
+- UINT16
++ uint16_t
+
+@ uint32_t @
+typedef UINT32;
+typedef uint32_t;
+@@
+- UINT32
++ uint32_t
+
+@ uint64_t @
+typedef UINT64;
+typedef uint64_t;
+@@
+- UINT64
++ uint64_t
+
+@ bool @
+typedef BOOLEAN;
+typedef bool;
+@@
+- BOOLEAN
++ bool
+
+@ wchar_t @
+typedef CHAR16;
+typedef wchar_t;
+@@
+- CHAR16
++ wchar_t
+
+/* This rule can't be named "void" */
+@ replace_uppercase_void @
+typedef VOID;
+@@
+- VOID
++ void
diff --git a/src/drivers/intel/fsp2_0/header_util/fspupdvpd_sanitize.sh b/src/drivers/intel/fsp2_0/header_util/fspupdvpd_sanitize.sh
new file mode 100644
index 0000000000..2b500539b7
--- /dev/null
+++ b/src/drivers/intel/fsp2_0/header_util/fspupdvpd_sanitize.sh
@@ -0,0 +1,33 @@
+#
+# Convert the FspUpdVpd.h header file into a format usable by coreboot
+# Usage:
+# fspupdvpd_sanitize.sh <path/to/FspUpdVpd.h>
+#
+# This file is part of the coreboot project.
+#
+# Copyright (C) 2015-2016 Intel Corp.
+# (Written by Alexandru Gagniuc <alexandrux.gagniuc@intel.com> for Intel Corp.)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+
+PWD=$(dirname "${BASH_SOURCE[0]}")
+
+SPATCH=spatch
+
+# Fix line terminations
+dos2unix $1
+
+# Clean up trailing whitespace
+sed -e "s, $,,g" -i $1
+
+# Now fix the actual coding style
+$SPATCH -sp_file ${PWD}/fspupdvpd.spatch \
+ -in_place $1