From 6f8935475b9918c94b779314b693476e40af4662 Mon Sep 17 00:00:00 2001 From: SangYoun Kwak Date: Tue, 15 Mar 2022 16:13:40 +0900 Subject: [PATCH] Add new API to manipulate the "cloned" flag Change-Id: I9f6fbbdc7526280a3c59c9febcc4bd82e3067f8c Signed-off-by: SangYoun Kwak --- include/backend/hal-board-interface.h | 8 +++- include/hal-board.h | 8 +++- src/board.c | 78 ++++++++++++++++++++++++++++------- 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/include/backend/hal-board-interface.h b/include/backend/hal-board-interface.h index 8b6a517..049037a 100644 --- a/include/backend/hal-board-interface.h +++ b/include/backend/hal-board-interface.h @@ -26,11 +26,17 @@ typedef struct _hal_backend_board_funcs { /* Serial number of this device */ int (*get_device_serial_number)(char *buffer, int len); int (*get_device_revision)(int *revision); - int (*switch_partition)(int argc, char *argv[]); + int (*set_boot_success)(void); int (*clear_boot_mode)(void); int (*get_boot_mode)(char *buffer, int len); int (*get_boot_reason)(char *buffer, int len); + + int (*switch_partition)(int argc, char *argv[]); + int (*set_partition_ab_cloned)(void); + int (*clear_partition_ab_cloned)(void); + int (*get_partition_ab_cloned)(int *cloned); + } hal_backend_board_funcs; #ifdef __cplusplus diff --git a/include/hal-board.h b/include/hal-board.h index aa3c679..5d6c319 100644 --- a/include/hal-board.h +++ b/include/hal-board.h @@ -26,14 +26,20 @@ extern "C" { int hal_device_board_get_backend(void); int hal_device_board_put_backend(void); + int hal_device_board_get_device_serial_number(char *buffer, int len); int hal_device_board_get_device_revision(int *revision); -int hal_device_board_switch_partition(int argc, char *argv[]); + int hal_device_board_set_boot_success(void); int hal_device_board_clear_boot_mode(void); int hal_device_board_get_boot_mode(char *buffer, int len); int hal_device_board_get_boot_reason(char *buffer, int len); +int hal_device_board_switch_partition(int argc, char *argv[]); +int hal_device_board_set_partition_ab_cloned(void); +int hal_device_board_clear_partition_ab_cloned(void); +int hal_device_board_get_partition_ab_cloned(int *cloned); + #ifdef __cplusplus } #endif diff --git a/src/board.c b/src/board.c index 41b8254..c4bdbbf 100644 --- a/src/board.c +++ b/src/board.c @@ -90,7 +90,7 @@ int hal_device_board_get_device_revision(int *revision) return hal_board_funcs->get_device_revision(revision); } -int hal_device_board_switch_partition(int argc, char *argv[]) +int hal_device_board_set_boot_success(void) { int ret; @@ -100,13 +100,14 @@ int hal_device_board_switch_partition(int argc, char *argv[]) } if (!hal_board_funcs || - !hal_board_funcs->switch_partition) + !hal_board_funcs->set_boot_success) return -ENODEV; - return hal_board_funcs->switch_partition(argc, argv); + return hal_board_funcs->set_boot_success(); } -int hal_device_board_set_boot_success(void) + +int hal_device_board_clear_boot_mode(void) { int ret; @@ -116,14 +117,29 @@ int hal_device_board_set_boot_success(void) } if (!hal_board_funcs || - !hal_board_funcs->set_boot_success) + !hal_board_funcs->clear_boot_mode) return -ENODEV; - return hal_board_funcs->set_boot_success(); + return hal_board_funcs->clear_boot_mode(); } +int hal_device_board_get_boot_mode(char *buffer, int len) +{ + int ret; -int hal_device_board_clear_boot_mode(void) + if (!hal_board_funcs && !hal_initialized) { + if ((ret = hal_device_board_get_backend()) < 0) + return ret; + } + + if (!hal_board_funcs || + !hal_board_funcs->get_boot_mode) + return -ENODEV; + + return hal_board_funcs->get_boot_mode(buffer, len); +} + +int hal_device_board_get_boot_reason(char *buffer, int len) { int ret; @@ -133,13 +149,13 @@ int hal_device_board_clear_boot_mode(void) } if (!hal_board_funcs || - !hal_board_funcs->clear_boot_mode) + !hal_board_funcs->get_boot_reason) return -ENODEV; - return hal_board_funcs->clear_boot_mode(); + return hal_board_funcs->get_boot_reason(buffer, len); } -int hal_device_board_get_boot_mode(char *buffer, int len) +int hal_device_board_switch_partition(int argc, char *argv[]) { int ret; @@ -149,13 +165,13 @@ int hal_device_board_get_boot_mode(char *buffer, int len) } if (!hal_board_funcs || - !hal_board_funcs->get_boot_mode) + !hal_board_funcs->switch_partition) return -ENODEV; - return hal_board_funcs->get_boot_mode(buffer, len); + return hal_board_funcs->switch_partition(argc, argv); } -int hal_device_board_get_boot_reason(char *buffer, int len) +int hal_device_board_set_partition_ab_cloned(void) { int ret; @@ -165,8 +181,40 @@ int hal_device_board_get_boot_reason(char *buffer, int len) } if (!hal_board_funcs || - !hal_board_funcs->get_boot_reason) + !hal_board_funcs->set_partition_ab_cloned) return -ENODEV; - return hal_board_funcs->get_boot_reason(buffer, len); + return hal_board_funcs->set_partition_ab_cloned(); +} + +int hal_device_board_clear_partition_ab_cloned(void) +{ + int ret; + + if (!hal_board_funcs && !hal_initialized) { + if ((ret = hal_device_board_get_backend()) < 0) + return ret; + } + + if (!hal_board_funcs || + !hal_board_funcs->clear_partition_ab_cloned) + return -ENODEV; + + return hal_board_funcs->clear_partition_ab_cloned(); +} + +int hal_device_board_get_partition_ab_cloned(int *cloned) +{ + int ret; + + if (!hal_board_funcs && !hal_initialized) { + if ((ret = hal_device_board_get_backend()) < 0) + return ret; + } + + if (!hal_board_funcs || + !hal_board_funcs->get_partition_ab_cloned) + return -ENODEV; + + return hal_board_funcs->get_partition_ab_cloned(cloned); } -- 2.7.4