From 80fd4f6b4c3c2f121a474723b8deeb8132537677 Mon Sep 17 00:00:00 2001 From: Gregor Haas Date: Tue, 11 Feb 2020 14:37:32 -0500 Subject: [PATCH] Some restructuring for libbootrom --- c8_remote/lib/CMakeLists.txt | 5 +- c8_remote/lib/payload/CMakeLists.txt | 4 +- c8_remote/lib/payload/bootrom_dev.c | 123 ------------------- c8_remote/lib/payload/include/bootrom_func.h | 116 +++++++++++++---- c8_remote/lib/payload/include/dev_util.h | 11 +- 5 files changed, 108 insertions(+), 151 deletions(-) delete mode 100644 c8_remote/lib/payload/bootrom_dev.c diff --git a/c8_remote/lib/CMakeLists.txt b/c8_remote/lib/CMakeLists.txt index b65cf0a..f6c3411 100644 --- a/c8_remote/lib/CMakeLists.txt +++ b/c8_remote/lib/CMakeLists.txt @@ -5,7 +5,8 @@ set(PL_NAMES aes_sw exit_usb_task floppysleep - sync) + sync + ) foreach(NAME ${PL_NAMES}) list(APPEND PL_TARGETS "payload_${NAME}") @@ -34,5 +35,5 @@ add_dependencies(payload payload_sources) add_custom_command(TARGET payload POST_BUILD BYPRODUCTS ${CMAKE_SOURCE_DIR}/c8_remote/include/libpayload.h COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/scripts/headerize.py - ${CMAKE_CURRENT_BINARY_DIR}/lib + ${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles ${CMAKE_SOURCE_DIR}/c8_remote/include) \ No newline at end of file diff --git a/c8_remote/lib/payload/CMakeLists.txt b/c8_remote/lib/payload/CMakeLists.txt index 86b3b53..23f0da9 100644 --- a/c8_remote/lib/payload/CMakeLists.txt +++ b/c8_remote/lib/payload/CMakeLists.txt @@ -18,8 +18,6 @@ endif() set(CMAKE_C_FLAGS "-nostdlib -O -Wl,--gc-sections") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) -add_library(bootrom_dev bootrom_dev.c) - foreach(NAME ${PL_NAMES}) if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S) add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c @@ -32,7 +30,7 @@ foreach(NAME ${PL_NAMES}) add_custom_command(TARGET payload_${NAME} POST_BUILD BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin COMMAND ${CMAKE_OBJCOPY} - ARGS -O binary -j .text -j .payload_text -j .bootrom_lib.* + ARGS -O binary -j .text -j .payload_text ${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME} ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin) endforeach(NAME) \ No newline at end of file diff --git a/c8_remote/lib/payload/bootrom_dev.c b/c8_remote/lib/payload/bootrom_dev.c deleted file mode 100644 index c407b60..0000000 --- a/c8_remote/lib/payload/bootrom_dev.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "bootrom_addr.h" -#include "dev_util.h" - -/* Crypto */ -BRLIB_SECTION("crypto") -int hardware_aes(unsigned long long cmd, - unsigned char *src, unsigned char *dst, - int len, unsigned long long opts, - unsigned char *key, unsigned char *iv) -{ - return ((BOOTROM_FUNC_I) ADDR_HARDWARE_AES)(cmd, src, dst, len, opts, key, iv); -} - -/* Timing */ -BRLIB_SECTION("timing.power") -int clock_gate(int device, int power) -{ - return ((BOOTROM_FUNC_I) ADDR_CLOCK_GATE)(device, power); -} - -BRLIB_SECTION("timing.time") -unsigned long long get_time() -{ - return ((BOOTROM_FUNC_ULL) ADDR_GET_TIME)(); -} - -BRLIB_SECTION("timing.sleep") -void timer_register_int(unsigned long long dl) -{ - ((BOOTROM_FUNC_V) ADDR_TIMER_REGISTER_INT)(dl, ADDR_RANDOM_RET); -} - -BRLIB_SECTION("timing.sleep") -void wfi() -{ - ((BOOTROM_FUNC_V) ADDR_WFI)(); -} - -/* Tasking */ -BRLIB_SECTION("tasking.task") -void *task_new(char *name, BOOTROM_FUNC_I func, void *args, int ssize) -{ - return ((BOOTROM_FUNC_PTR) ADDR_TASK_NEW)(name, func, args, ssize); -} - -void task_run(void *task) -{ - ((BOOTROM_FUNC_V) ADDR_TASK_RUN)(task); -} - -BRLIB_SECTION("tasking.task") -void task_pause(int usec) -{ - ((BOOTROM_FUNC_V) ADDR_TASK_PAUSE)(usec); -} - -BRLIB_SECTION("tasking.task") -void task_resched() -{ - ((BOOTROM_FUNC_V) ADDR_TASK_RESCHED)(); -} - -BRLIB_SECTION("tasking.task") -void task_free(void *task) -{ - ((BOOTROM_FUNC_V) ADDR_TASK_FREE)(task); -} - -BRLIB_SECTION("tasking.event") -void event_new(void *dst, int flags, int state) -{ - ((BOOTROM_FUNC_V) ADDR_EVENT_NEW)(dst, flags, state); -} - -BRLIB_SECTION("tasking.event") -void event_notify(void *ev) -{ - ((BOOTROM_FUNC_V) ADDR_EVENT_NOTIFY)(ev); -} - -BRLIB_SECTION("tasking.event") -void event_wait(void *ev) -{ - ((BOOTROM_FUNC_V) ADDR_EVENT_WAIT)(ev); -} - -/* Heap */ -BRLIB_SECTION("heap.mgmt") -void calc_chksum(unsigned long long *dst, unsigned long long *src, - int len, unsigned long long *cookie) -{ - ((BOOTROM_FUNC_V) ADDR_CALC_CHKSUM)(dst, src, len, cookie); -} - -BRLIB_SECTION("heap.mgmt") -void check_block_chksum(void *ptr) -{ - ((BOOTROM_FUNC_V) ADDR_CHECK_BLOCK_CKSUM)(ptr); -} - -BRLIB_SECTION("heap.mgmt") -void check_all_chksums() -{ - ((BOOTROM_FUNC_V) ADDR_CHECK_ALL_CHKSUMS)(); -} - -BRLIB_SECTION("heap.alloc") -void *dev_malloc(int size) -{ - return ((BOOTROM_FUNC_PTR) ADDR_DEV_MALLOC)(size); -} - -BRLIB_SECTION("heap.alloc") -void *dev_memalign(int size, int constr) -{ - return ((BOOTROM_FUNC_PTR) ADDR_DEV_MEMALIGN)(size, constr); -} - -BRLIB_SECTION("heap.alloc") -void dev_free(void *ptr) -{ - ((BOOTROM_FUNC_PTR) ADDR_DEV_FREE)(ptr); -} \ No newline at end of file diff --git a/c8_remote/lib/payload/include/bootrom_func.h b/c8_remote/lib/payload/include/bootrom_func.h index 9587c5e..2c8a2c0 100644 --- a/c8_remote/lib/payload/include/bootrom_func.h +++ b/c8_remote/lib/payload/include/bootrom_func.h @@ -1,38 +1,110 @@ #ifndef CHECKM8_TOOL_BOOTROM_FUNC_H #define CHECKM8_TOOL_BOOTROM_FUNC_H +#include "bootrom_addr.h" #include "dev_util.h" /* Crypto */ -int hardware_aes(unsigned long long cmd, - unsigned char *src, unsigned char *dst, - int len, unsigned long long opts, - unsigned char *key, unsigned char *iv); +static inline int hardware_aes(unsigned long long cmd, + unsigned char *src, unsigned char *dst, + int len, unsigned long long opts, + unsigned char *key, unsigned char *iv) +{ + return ((BOOTROM_FUNC_I) ADDR_HARDWARE_AES)(cmd, src, dst, len, opts, key, iv); +} /* Timing */ -int clock_gate(int device, int power); -unsigned long long get_time(); -void timer_register_int(unsigned long long dl); -void wfi(); +static inline int clock_gate(int device, int power) +{ + return ((BOOTROM_FUNC_I) ADDR_CLOCK_GATE)(device, power); +} + +static inline unsigned long long get_time() +{ + return ((BOOTROM_FUNC_ULL) ADDR_GET_TIME)(); +} + +static inline void timer_register_int(unsigned long long dl) +{ + ((BOOTROM_FUNC_V) ADDR_TIMER_REGISTER_INT)(dl, ADDR_RANDOM_RET); +} + +static inline void wfi() +{ + ((BOOTROM_FUNC_V) ADDR_WFI)(); +} /* Tasking */ -void *task_new(char *name, BOOTROM_FUNC_I func, void *args, int ssize); -void task_run(void *task); -void task_pause(int usec); -void task_resched(); -void task_free(void *task); +static inline void *task_new(char *name, BOOTROM_FUNC_I func, void *args, int ssize) +{ + return ((BOOTROM_FUNC_PTR) ADDR_TASK_NEW)(name, func, args, ssize); +} -void event_new(void *dst, int flags, int state); -void event_notify(void *ev); -void event_wait(void *ev); +static inline void task_run(void *task) +{ + ((BOOTROM_FUNC_V) ADDR_TASK_RUN)(task); +} + +static inline void task_pause(int usec) +{ + ((BOOTROM_FUNC_V) ADDR_TASK_PAUSE)(usec); +} + +static inline void task_resched() +{ + ((BOOTROM_FUNC_V) ADDR_TASK_RESCHED)(); +} + +static inline void task_free(void *task) +{ + ((BOOTROM_FUNC_V) ADDR_TASK_FREE)(task); +} + +static inline void event_new(void *dst, int flags, int state) +{ + ((BOOTROM_FUNC_V) ADDR_EVENT_NEW)(dst, flags, state); +} + +static inline void event_notify(void *ev) +{ + ((BOOTROM_FUNC_V) ADDR_EVENT_NOTIFY)(ev); +} + +static inline void event_wait(void *ev) +{ + ((BOOTROM_FUNC_V) ADDR_EVENT_WAIT)(ev); +} /* Heap */ -void calc_chksum(unsigned long long *dst, unsigned long long *src, int len, unsigned long long *cookie); -void check_block_chksum(void *ptr); -void check_all_chksums(); +static inline void calc_chksum(unsigned long long *dst, unsigned long long *src, + int len, unsigned long long *cookie) +{ + ((BOOTROM_FUNC_V) ADDR_CALC_CHKSUM)(dst, src, len, cookie); +} -void *dev_malloc(int size); -void *dev_memalign(int size, int constr); -void dev_free(void *ptr); +static inline void check_block_chksum(void *ptr) +{ + ((BOOTROM_FUNC_V) ADDR_CHECK_BLOCK_CKSUM)(ptr); +} + +static inline void check_all_chksums() +{ + ((BOOTROM_FUNC_V) ADDR_CHECK_ALL_CHKSUMS)(); +} + +static inline void *dev_malloc(int size) +{ + return ((BOOTROM_FUNC_PTR) ADDR_DEV_MALLOC)(size); +} + +static inline void *dev_memalign(int size, int constr) +{ + return ((BOOTROM_FUNC_PTR) ADDR_DEV_MEMALIGN)(size, constr); +} + +static inline void dev_free(void *ptr) +{ + ((BOOTROM_FUNC_PTR) ADDR_DEV_FREE)(ptr); +} #endif //CHECKM8_TOOL_BOOTROM_FUNC_H diff --git a/c8_remote/lib/payload/include/dev_util.h b/c8_remote/lib/payload/include/dev_util.h index ba582da..e830797 100644 --- a/c8_remote/lib/payload/include/dev_util.h +++ b/c8_remote/lib/payload/include/dev_util.h @@ -6,8 +6,17 @@ typedef int (*BOOTROM_FUNC_I)(); typedef unsigned long long (*BOOTROM_FUNC_ULL)(); typedef void (*(*BOOTROM_FUNC_PTR)()); +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef long long int64_t; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + #define PAYLOAD_SECTION __attribute__ ((section (".payload_text"))) #define TEXT_SECTION __attribute__ ((section (".text"))) -#define BRLIB_SECTION(s) __attribute__ ((section (".bootrom_lib."s))) #endif //CHECKM8_TOOL_DEV_UTIL_H