Add hal board function to get/switch partition_ab 65/277765/2
authorSangYoun Kwak <sy.kwak@samsung.com>
Wed, 13 Jul 2022 04:46:46 +0000 (13:46 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Wed, 13 Jul 2022 05:01:06 +0000 (14:01 +0900)
Change-Id: Ic217a5077414e9f51c79c6394cff2429cc806e55
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
hw/board/CMakeLists.txt
hw/board/board.c

index de3acea9a55e024e5347a8976cd50844d2d0f119..52340914c4ebbeb9be78b4490decf3965166df9b 100644 (file)
@@ -4,7 +4,10 @@ PROJECT(hal-backend-device-board C)
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(hal-backend-device-board_pkgs REQUIRED hal-backend-device-common)
+pkg_check_modules(hal-backend-device-board_pkgs REQUIRED
+       hal-backend-device-common
+       libsyscommon
+       )
 
 FOREACH(flag ${hal-backend-device-board_pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 05525c3f4c162b31127f5fb45c61dfa5853aa1ab..061e51146bb9d5a54748b177b857f9f5cb9f7cf9 100644 (file)
 #include <string.h>
 
 #include </hal/include/device/hal-backend-common.h>
+#include <libsyscommon/file.h>
 
-#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
-#define LINE_LEN 64
+#define PARTITION_PARAM_PATH "/mnt/inform/partition-param.bin"
+#define SERIAL_FILE_PATH     "/sys/firmware/devicetree/base/serial-number"
+#define LINE_LEN             64
 
 static int get_device_serial_number(char *buffer, int len)
 {
@@ -48,6 +50,48 @@ static int get_device_serial_number(char *buffer, int len)
        return 0;
 }
 
+static int get_current_partition(char *partition_ab)
+{
+       int ret_parse = libsys_parse_cmdline_scanf("partition_ab=%c", partition_ab);
+
+       if (ret_parse <= 0) {
+               return -ENOENT;
+       }
+
+       return 0;
+
+}
+
+static int switch_partition(char partition_ab)
+{
+       char cur_partition_ab;
+       char next_partition_ab[2];
+
+       next_partition_ab[0] = partition_ab;
+       next_partition_ab[1] = '\0';
+
+       if (partition_ab == '\0') {
+               /* Toggle partition a/b */
+               int ret_cur_part = get_current_partition(&cur_partition_ab);
+
+               if (ret_cur_part < 0) {
+                       return ret_cur_part;
+               }
+
+               if (cur_partition_ab == 'a') {
+                       next_partition_ab[0] = 'b';
+               } else if(cur_partition_ab == 'b') {
+                       next_partition_ab[0] = 'a';
+               } else {
+                       return -ENOENT;
+               }
+       } else if(partition_ab != 'a' && partition_ab != 'b') {
+               return -EINVAL;
+       }
+
+       return sys_write_buf(PARTITION_PARAM_PATH, next_partition_ab);
+}
+
 static int board_init(void **data)
 {
        hal_backend_board_funcs *board_funcs;
@@ -57,6 +101,8 @@ static int board_init(void **data)
                return -ENOMEM;
 
        board_funcs->get_device_serial_number = get_device_serial_number;
+       board_funcs->get_current_partition = get_current_partition;
+       board_funcs->switch_partition = switch_partition;
 
        *data = (void *)board_funcs;