zephyr: Added hooks for example
Example (very basic) hook implementation.
Added case description for test-build with these hooks
and multi-image feature.
Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
diff --git a/boot/zephyr/hooks_sample.c b/boot/zephyr/hooks_sample.c
new file mode 100644
index 0000000..a4dbfb5
--- /dev/null
+++ b/boot/zephyr/hooks_sample.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2021 Nordic Semiconductor ASA
+ *
+ * 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 <assert.h>
+#include <zephyr.h>
+#include "bootutil/image.h"
+#include "bootutil/bootutil.h"
+#include "bootutil/fault_injection_hardening.h"
+#include "flash_map_backend/flash_map_backend.h"
+
+/* @retval 0: header was read/populated
+ * FIH_FAILURE: image is invalid,
+ * BOOT_HOOK_REGULAR if hook not implemented for the image-slot,
+ * othervise an error-code value.
+ */
+int boot_read_image_header_hook(int img_index, int slot,
+ struct image_header *img_hed)
+{
+ if (img_index == 1 && slot == 0) {
+ img_hed->ih_magic = IMAGE_MAGIC;
+ return 0;
+ }
+
+ return BOOT_HOOK_REGULAR;
+}
+
+/* @retval FIH_SUCCESS: image is valid,
+ * FIH_FAILURE: image is invalid,
+ * fih encoded BOOT_HOOK_REGULAR if hook not implemented for
+ * the image-slot.
+ */
+fih_int boot_image_check_hook(int img_index, int slot)
+{
+ if (img_index == 1 && slot == 0) {
+ FIH_RET(FIH_SUCCESS);
+ }
+
+ FIH_RET(fih_int_encode(BOOT_HOOK_REGULAR));
+}
+
+int boot_perform_update_hook(int img_index, struct image_header *img_head,
+ const struct flash_area *area)
+{
+ if (img_index == 1) {
+ return 0;
+ }
+
+ return BOOT_HOOK_REGULAR;
+}
+
+int boot_read_swap_state_primary_slot_hook(int image_index,
+ struct boot_swap_state *state)
+{
+ if (image_index == 1) {
+ state->magic = BOOT_MAGIC_UNSET;
+ state->swap_type = BOOT_SWAP_TYPE_NONE;
+ state->image_num = image_index ; // ?
+ state->copy_done = BOOT_FLAG_UNSET;
+ state->image_ok = BOOT_FLAG_UNSET;
+
+ return 0;
+ }
+
+ return BOOT_HOOK_REGULAR;
+}
+
+int boot_copy_region_post_hook(int img_index, const struct flash_area *area,
+ size_t size)
+{
+ return 0;
+}
+
+int boot_serial_uploaded_hook(int img_index, const struct flash_area *area,
+ size_t size)
+{
+ return 0;
+}
+
+int boot_img_install_stat_hook(int image_index, int slot, int *img_install_stat)
+{
+ return BOOT_HOOK_REGULAR;
+}