diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ethosu_driver.h | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/include/ethosu_driver.h b/include/ethosu_driver.h index ff8d1eb..bf6a578 100644 --- a/include/ethosu_driver.h +++ b/include/ethosu_driver.h @@ -48,17 +48,35 @@ extern "C" { // Forward declare struct ethosu_device; +enum ethosu_job_state +{ + ETHOSU_JOB_IDLE = 0, + ETHOSU_JOB_RUNNING, + ETHOSU_JOB_DONE +}; + +struct ethosu_job +{ + volatile enum ethosu_job_state state; + const void *custom_data_ptr; + int custom_data_size; + const uint64_t *base_addr; + const size_t *base_addr_size; + int num_base_addr; + void *user_arg; +}; + struct ethosu_driver { struct ethosu_device *dev; struct ethosu_driver *next; + struct ethosu_job job; void *semaphore; uint64_t fast_memory; size_t fast_memory_size; bool status_error; bool dev_power_always_on; bool reserved; - volatile bool irq_triggered; uint8_t clock_request; uint8_t power_request; }; @@ -159,6 +177,33 @@ int ethosu_invoke_v3(struct ethosu_driver *drv, ethosu_invoke_v3(drv, custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr, 0) /** + * Invoke Vela command stream using async interface. + * Must be followed by call(s) to ethosu_wait() upon successful return. + * Returns + * -1 on error + * 0 on success + */ +int ethosu_invoke_async(struct ethosu_driver *drv, + 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, + void *user_arg); + +/** + * Wait for inference to complete (block=true) + * Poll status or finish up if inference is complete (block=false) + * (This function is only intended to be used in conjuction with ethosu_invoke_async) + * Returns + * 1 on inference running (only for block=false) + * 0 on inference success + * -1 on inference error + * -2 on inference not invoked + */ +int ethosu_wait(struct ethosu_driver *drv, bool block); + +/** * Set Ethos-U power mode. */ void ethosu_set_power_mode(struct ethosu_driver *drv, bool always_on); |