diff --git a/c8_payloads/CMakeLists.txt b/c8_payloads/CMakeLists.txt index 49edbac..4dc1a46 100644 --- a/c8_payloads/CMakeLists.txt +++ b/c8_payloads/CMakeLists.txt @@ -12,26 +12,22 @@ endif() set(CMAKE_C_FLAGS "-nostdlib -O") set(PAYLOADS - payload_aes - payload_aes_busy - payload_aes_sw - payload_sync - payload_sysreg) - -add_executable(payload_aes src/aes.c) -add_executable(payload_aes_busy src/aes_busy.c) -add_executable(payload_aes_sw src/aes_sw.c) -add_executable(payload_sync src/sync.c) -add_executable(payload_sysreg src/sysreg.c) + aes + aes_busy + aes_sw + sync + sysreg + task_sleep_test) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/) set_directory_properties(PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/bin/") foreach(BINARY ${PAYLOADS}) - add_custom_command(TARGET ${BINARY} POST_BUILD - BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BINARY}.bin + add_executable(payload_${BINARY} src/${BINARY}.c) + add_custom_command(TARGET payload_${BINARY} POST_BUILD + BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/payload_${BINARY}.bin COMMAND ${CMAKE_OBJCOPY} ARGS -O binary -j .text -j .payload_text -j .payload_data - ${CMAKE_CURRENT_BINARY_DIR}/${BINARY} - ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BINARY}.bin) + ${CMAKE_CURRENT_BINARY_DIR}/payload_${BINARY} + ${CMAKE_CURRENT_SOURCE_DIR}/bin/payload_${BINARY}.bin) endforeach(BINARY) \ No newline at end of file diff --git a/c8_payloads/bin/payload_task_sleep_test.bin b/c8_payloads/bin/payload_task_sleep_test.bin new file mode 100644 index 0000000..61d4edd Binary files /dev/null and b/c8_payloads/bin/payload_task_sleep_test.bin differ diff --git a/c8_payloads/include/brfunc_aes.h b/c8_payloads/include/brfunc_aes.h index e26d8b5..f66f682 100644 --- a/c8_payloads/include/brfunc_aes.h +++ b/c8_payloads/include/brfunc_aes.h @@ -3,7 +3,6 @@ #include "brfunc_common.h" -PAYLOAD_SECTION int aes_hw_crypto_cmd(unsigned long long cmd, unsigned char *src, unsigned char *dst, int len, unsigned long long opts, diff --git a/c8_payloads/include/brfunc_timing.h b/c8_payloads/include/brfunc_timing.h index 9abea32..b3eac15 100644 --- a/c8_payloads/include/brfunc_timing.h +++ b/c8_payloads/include/brfunc_timing.h @@ -7,10 +7,4 @@ #define SYSTEM_TIME ((BOOTROM_FUNC) ADDR_SYSTEM_TIME) #define TIME_HAS_ELAPSED ((BOOTROM_FUNC) ADDR_TIME_HAS_ELAPSED) -PAYLOAD_SECTION -void task_sleep(unsigned int usec) -{ - ((BOOTROM_FUNC) ADDR_TASK_SLEEP)(usec); -} - #endif //CHECKM8_TOOL_BRFUNC_TIMING_H diff --git a/c8_payloads/src/task_sleep_test.c b/c8_payloads/src/task_sleep_test.c new file mode 100644 index 0000000..423c04f --- /dev/null +++ b/c8_payloads/src/task_sleep_test.c @@ -0,0 +1,20 @@ +#include "util.h" +#include "brfunc_common.h" + +PAYLOAD_SECTION +void task_sleep(unsigned int usec) +{ + ((BOOTROM_FUNC) ADDR_TASK_SLEEP)(usec); +} + +TEXT_SECTION +unsigned long long _start(unsigned int usec) +{ + unsigned long long start, end; + + __asm__ volatile ("mrs %0, cntpct_el0" : "=r" (start)); + task_sleep(usec); + __asm__ volatile ("mrs %0, cntpct_el0" : "=r" (end)); + + return end - start; +} \ No newline at end of file diff --git a/c8_remote/include/payload.h b/c8_remote/include/payload.h index e15ea30..8587178 100644 --- a/c8_remote/include/payload.h +++ b/c8_remote/include/payload.h @@ -8,6 +8,7 @@ #define PAYLOAD_AES_SW_BIN CHECKM8_BIN_BASE "payloads/payload_aes_sw.bin" #define PAYLOAD_SYNC_BIN CHECKM8_BIN_BASE "payloads/payload_sync.bin" #define PAYLOAD_SYSREG_BIN CHECKM8_BIN_BASE "payloads/payload_sysreg.bin" +#define PAYLOAD_TASK_SLEEP_TEST_BIN CHECKM8_BIN_BASE "payloads/payload_task_sleep_test.bin" typedef enum { @@ -16,6 +17,7 @@ typedef enum PAYLOAD_AES_SW, PAYLOAD_SYNC, PAYLOAD_SYSREG, + PAYLOAD_TASK_SLEEP_TEST } PAYLOAD_T; typedef enum diff --git a/c8_remote/src/payload.c b/c8_remote/src/payload.c index 8a29839..bd83570 100644 --- a/c8_remote/src/payload.c +++ b/c8_remote/src/payload.c @@ -47,6 +47,10 @@ struct payload *get_payload(PAYLOAD_T p) path = PAYLOAD_SYSREG_BIN; break; + case PAYLOAD_TASK_SLEEP_TEST: + path = PAYLOAD_TASK_SLEEP_TEST_BIN; + break; + default: return NULL; }