[Skiboot] [PATCH v2 09/31] libstb: add rom interface
Claudio Carvalho
cclaudio at linux.vnet.ibm.com
Wed Sep 28 18:01:08 AEST 2016
This adds rom.c, which is the ROM interface for libstb.
- rom_init(): load a compatible driver for the ibm,secureboot node
- rom_set_driver(): set the romcode driver that will be used to access the
verification code functions
Signed-off-by: Claudio Carvalho <cclaudio at linux.vnet.ibm.com>
---
libstb/Makefile.inc | 2 +-
libstb/rom.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
libstb/rom.h | 43 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 93 insertions(+), 1 deletion(-)
create mode 100644 libstb/rom.c
create mode 100644 libstb/rom.h
diff --git a/libstb/Makefile.inc b/libstb/Makefile.inc
index 15cdfbe..3beafba 100644
--- a/libstb/Makefile.inc
+++ b/libstb/Makefile.inc
@@ -4,7 +4,7 @@ LIBSTB_DIR = libstb
SUBDIRS += $(LIBSTB_DIR)
-LIBSTB_SRCS = container.c
+LIBSTB_SRCS = container.c rom.c
LIBSTB_OBJS = $(LIBSTB_SRCS:%.c=%.o)
LIBSTB = $(LIBSTB_DIR)/built-in.o
diff --git a/libstb/rom.c b/libstb/rom.c
new file mode 100644
index 0000000..9d2c6d7
--- /dev/null
+++ b/libstb/rom.c
@@ -0,0 +1,49 @@
+/* Copyright 2013-2016 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <skiboot.h>
+#include "rom.h"
+
+static struct rom_driver_ops *rom_driver = NULL;
+
+struct rom_driver_ops* rom_init(const struct dt_node *node)
+{
+ if (rom_driver)
+ goto end;
+
+ /* ROM drivers supported */
+
+ if (!rom_driver)
+ prlog(PR_NOTICE, "ROM: no rom driver found\n");
+end:
+ return rom_driver;
+}
+
+void rom_set_driver(struct rom_driver_ops *driver)
+{
+ if (rom_driver) {
+ /**
+ * @fwts-label ROMAlreadyRegistered
+ * @fwts-advice ibm,secureboot already registered. Check if
+ * rom_init called twice or the same driver is probed twice
+ */
+ prlog(PR_WARNING, "ROM: %s driver already registered\n",
+ driver->name);
+ return;
+ }
+ rom_driver = driver;
+ prlog(PR_NOTICE, "ROM: %s driver registered\n", driver->name);
+}
diff --git a/libstb/rom.h b/libstb/rom.h
new file mode 100644
index 0000000..e1a7497
--- /dev/null
+++ b/libstb/rom.h
@@ -0,0 +1,43 @@
+/* Copyright 2013-2016 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __ROM_H
+#define __ROM_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include "container.h"
+
+struct rom_driver_ops {
+ const char* name;
+ int (*verify)(void *container);
+ void (*sha512)(const uint8_t *data, size_t len, uint8_t *digest);
+ void (*cleanup)(void);
+};
+
+/*
+ * Load a compatible driver to access the functions of the
+ * verification code flashed in the secure ROM
+ */
+extern struct rom_driver_ops* rom_init(const struct dt_node *node);
+
+/*
+ * Set the rom driver that will be used
+ */
+extern void rom_set_driver(struct rom_driver_ops *driver);
+
+#endif /* __ROM_H */
--
1.9.1
More information about the Skiboot
mailing list