From df386e00295e32e05b9a76758ca5767b4d021848 Mon Sep 17 00:00:00 2001 From: Anton Moberg Date: Tue, 2 Feb 2021 11:26:48 +0100 Subject: MLBEDSW-3868 - Driver multiNPU locking Added: Weak linked symbols for locking if RTOS overrides Added: Semaphore Producer (release a reserved driver) Added: Semaphore Consumer (all drivers reserved and waiting for returned driver) Added: Mutex protect thread sensitive driver access Added: Weak linked symbols for yielding & resuming thread/task while waiting for IRQ Added: static inline function of ethosu_invoke_v2(...) for backwards compatibility Change-Id: If415a73b01b2357b31bb6da86f3038344c4245c6 --- include/ethosu_driver.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/ethosu_driver.h b/include/ethosu_driver.h index 70e3110..2ce59c2 100644 --- a/include/ethosu_driver.h +++ b/include/ethosu_driver.h @@ -124,8 +124,6 @@ int ethosu_invoke_v3(struct ethosu_driver *drv, #define ethosu_invoke(custom_data_ptr, custom_data_size, base_addr, num_base_addr) \ ethosu_invoke_v2(custom_data_ptr, custom_data_size, base_addr, NULL, num_base_addr) -#define ethosu_invoke_v2(custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr) \ - ethosu_invoke_v3(ðosu_drv, custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr) /** * Abort Ethos-U inference. @@ -159,7 +157,7 @@ int ethosu_register_driver(struct ethosu_driver *drv); int ethosu_deregister_driver(struct ethosu_driver *drv); /** - * Find, reserve, and return the first available driver + * Reserves a driver to execute inference with */ struct ethosu_driver *ethosu_reserve_driver(void); @@ -168,6 +166,21 @@ struct ethosu_driver *ethosu_reserve_driver(void); */ void ethosu_release_driver(struct ethosu_driver *drv); +/** + * Static inline for backwards-compatibility + */ +static inline int ethosu_invoke_v2(const void *custom_data_ptr, + const int custom_data_size, + const uint64_t *base_addr, + const size_t *base_addr_size, + const int num_base_addr) +{ + struct ethosu_driver *drv = ethosu_reserve_driver(); + int result = ethosu_invoke_v3(drv, custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr); + ethosu_release_driver(drv); + return result; +} + #ifdef __cplusplus } #endif -- cgit v1.2.1