Files | |
file | workload_types.h |
[host/MPU] MARS Workload Types | |
file | module.h |
[MPU] MARS Workload Module API | |
Defines | |
#define | MARS_WORKLOAD_MODULE_BASE_ADDR 0x3000 |
Base address of workload module. | |
#define | MARS_WORKLOAD_MODULE_NAME_LEN_MAX 23 |
Maximum length of workload module name. | |
Functions | |
void | mars_module_main (void) |
[MPU] Entry point for workload module. | |
uint32_t | mars_module_get_ticks (void) |
[MPU] Gets tick counter value. | |
uint64_t | mars_module_get_mars_context_ea (void) |
[MPU] Gets ea of MARS context. | |
uint16_t | mars_module_get_kernel_id (void) |
[MPU] Gets id of kernel that the module is being executed on. | |
uint16_t | mars_module_get_workload_id (void) |
[MPU] Gets id of current workload context. | |
struct mars_workload_context * | mars_module_get_workload (void) |
[MPU] Gets pointer to current workload context. | |
struct mars_workload_context * | mars_module_get_workload_by_id (uint16_t id) |
[MPU] Gets pointer to workload context specified by id. | |
int | mars_module_workload_query (uint16_t id, int query) |
[MPU] Returns whether or not specified query is satisfied. | |
int | mars_module_workload_wait_set (uint16_t id) |
[MPU] Sets calling workload to wait for completion of specified workload. | |
int | mars_module_workload_wait_reset (void) |
[MPU] Sets calling workload to not wait for completion of any workloads. | |
int | mars_module_workload_signal_set (uint16_t id) |
[MPU] Sets signal for specified workload. | |
int | mars_module_workload_signal_reset (void) |
[MPU] Resets signal for specified workload. | |
int | mars_module_workload_schedule_begin (uint16_t id, uint8_t priority, struct mars_workload_context **workload) |
[MPU] Begins scheduling of specified workload. | |
int | mars_module_workload_schedule_end (uint16_t id, int cancel) |
[MPU] Ends scheduling of specified workload. | |
int | mars_module_workload_unschedule_begin (uint16_t id, struct mars_workload_context **workload) |
[MPU] Begins unscheduling of specified workload. | |
int | mars_module_workload_unschedule_end (uint16_t id) |
[MPU] Ends unscheduling of specified workload. | |
void | mars_module_workload_wait (void) |
[MPU] Returns execution to kernel with workload in wait state. | |
void | mars_module_workload_yield (void) |
[MPU] Returns execution to kernel with workload in ready state. | |
void | mars_module_workload_finish (void) |
[MPU] Returns execution to kernel with workload in finished state. | |
int | mars_module_host_signal_send (uint64_t watch_point_ea) |
[MPU] Notify host a particular 32-bit area is modified. | |
int | mars_module_host_callback_set (uint64_t callback_ea, const struct mars_callback_args *in) |
[MPU] Request host to call registered callback. | |
int | mars_module_host_callback_reset (struct mars_callback_args *out) |
[MPU] Resets a host callback request and requests result. | |
int | mars_module_mutex_lock_get (uint64_t mutex_ea, struct mars_mutex *mutex) |
[MPU] Locks a mutex. | |
int | mars_module_mutex_unlock_put (uint64_t mutex_ea, struct mars_mutex *mutex) |
[MPU] Unlocks a mutex. | |
int | mars_module_dma_get (void *ls, uint64_t ea, uint32_t size, uint32_t tag) |
[MPU] DMA transfer from host storage to MPU storage. | |
int | mars_module_dma_put (const void *ls, uint64_t ea, uint32_t size, uint32_t tag) |
[MPU] DMA transfer from MPU storage to host storage. | |
int | mars_module_dma_wait (uint32_t tag) |
[MPU] Waits for completion of requested DMA transfer. |
The workload module API provides the basic functions to get various workload information, schedule other workloads, handle workload signals, and also functions to transition the workload state and return execution back to the MARS kernel.
void mars_module_main | ( | void | ) |
[MPU] Entry point for workload module.
This function is the main entry point for the workload module. All workload modules will need to have a definition of this function. This function is called from the MARS kernel when a workload context that specifies this workload module is scheduled for execution.
uint32_t mars_module_get_ticks | ( | void | ) |
[MPU] Gets tick counter value.
uint64_t mars_module_get_mars_context_ea | ( | void | ) |
[MPU] Gets ea of MARS context.
uint16_t mars_module_get_kernel_id | ( | void | ) |
[MPU] Gets id of kernel that the module is being executed on.
uint16_t mars_module_get_workload_id | ( | void | ) |
[MPU] Gets id of current workload context.
struct mars_workload_context* mars_module_get_workload | ( | void | ) | [read] |
[MPU] Gets pointer to current workload context.
struct mars_workload_context* mars_module_get_workload_by_id | ( | uint16_t | id | ) | [read] |
[MPU] Gets pointer to workload context specified by id.
[in] | id | - id of workload |
int mars_module_workload_query | ( | uint16_t | id, | |
int | query | |||
) |
[MPU] Returns whether or not specified query is satisfied.
[in] | id | - id of workload |
[in] | query | - query type |
int mars_module_workload_wait_set | ( | uint16_t | id | ) |
[MPU] Sets calling workload to wait for completion of specified workload.
[in] | id | - id of workload |
int mars_module_workload_wait_reset | ( | void | ) |
[MPU] Sets calling workload to not wait for completion of any workloads.
int mars_module_workload_signal_set | ( | uint16_t | id | ) |
[MPU] Sets signal for specified workload.
[in] | id | - id of workload |
int mars_module_workload_signal_reset | ( | void | ) |
[MPU] Resets signal for specified workload.
int mars_module_workload_schedule_begin | ( | uint16_t | id, | |
uint8_t | priority, | |||
struct mars_workload_context ** | workload | |||
) |
[MPU] Begins scheduling of specified workload.
This function will begin scheduling the workload specified. This only initiates the scheduling of the workload. This function must be completed with a matching call to mars_module_workload_schedule_end to guarantee the completion of the scheduling.
The workload scheduling process is not complete until the matching call to mars_module_workload_schedule_end is made. The user should make any necessary updates to the returned workload context in between this begin call and the end call.
[in] | id | - id of workload |
[in] | priority | - scheduling priority of workload |
[out] | workload | - address of pointer to workload context |
int mars_module_workload_schedule_end | ( | uint16_t | id, | |
int | cancel | |||
) |
[MPU] Ends scheduling of specified workload.
This function will complete a schedule operation previously initiated with mars_module_workload_schedule_begin. This function must be called in pair for each call to mars_module_workload_schedule_begin to guarantee the completion of the initiated schedule operation.
[in] | id | - id of workload |
[in] | cancel | - cancels the schedule operation |
int mars_module_workload_unschedule_begin | ( | uint16_t | id, | |
struct mars_workload_context ** | workload | |||
) |
[MPU] Begins unscheduling of specified workload.
This function will begin unscheduling the workload specified. This only initiates the unscheduling of the workload. This function must be completed with a matching call to mars_module_workload_unschedule_end to guarantee the completion of the unscheduling.
The workload unscheduling process is not complete until the matching call to mars_module_workload_unschedule_end is made. The user should make any necessary updates to the returned workload context in between this begin call and the end call.
When a workload is unscheduled, it will be put into a finished state and any entities waiting on the workload to finish will be resumed.
If a scheduled workload is unscheduled before execution, the workload will not be executed until a subsequent scheduling request is made.
If the workload is currently in a waiting state, calling unschedule will finish the workload and will not be resumed from the waiting state.
If the workload is currently in a running state, calling unschedule will immediately put the workload into a finished state. However, execution of the workload will only be suspended when the workload yields, waits, or finishes.
[in] | id | - id of workload |
[out] | workload | - address of pointer to workload context |
int mars_module_workload_unschedule_end | ( | uint16_t | id | ) |
[MPU] Ends unscheduling of specified workload.
This function will complete an unschedule operation previously initiated with mars_module_workload_unschedule_begin. This function must be called in pair for each call to mars_module_workload_unschedule_begin to guarantee the completion of the initiated unschedule operation.
void mars_module_workload_wait | ( | void | ) |
[MPU] Returns execution to kernel with workload in wait state.
This function will yield execution of the calling workload module and return execution back to the kernel. The workload currently being processed will be put into a waiting state.
void mars_module_workload_yield | ( | void | ) |
[MPU] Returns execution to kernel with workload in ready state.
This function will yield execution of the calling workload module and return execution back to the kernel. The workload currently being processed will be put into a ready state.
void mars_module_workload_finish | ( | void | ) |
[MPU] Returns execution to kernel with workload in finished state.
This function will yield execution of the calling workload module and return execution back to the kernel. The workload currently being processed will be put into a finished state.
int mars_module_host_signal_send | ( | uint64_t | watch_point_ea | ) |
[MPU] Notify host a particular 32-bit area is modified.
[in] | watch_point_ea | - ea of modified area |
int mars_module_host_callback_set | ( | uint64_t | callback_ea, | |
const struct mars_callback_args * | in | |||
) |
[MPU] Request host to call registered callback.
[in] | callback_ea | - ea of function of type mars_callback |
[in] | in | - pointer to input args in MPU storage |
int mars_module_host_callback_reset | ( | struct mars_callback_args * | out | ) |
[MPU] Resets a host callback request and requests result.
[out] | out | - pointer to output args to store result |
int mars_module_mutex_lock_get | ( | uint64_t | mutex_ea, | |
struct mars_mutex * | mutex | |||
) |
[MPU] Locks a mutex.
This function locks a mutex and blocks other requests to lock it. It also loads the mutex instance from the effective address specified into the local mutex instance.
[in] | mutex_ea | - ea of mutex instance to lock |
[in] | mutex | - pointer to local mutex instance |
int mars_module_mutex_unlock_put | ( | uint64_t | mutex_ea, | |
struct mars_mutex * | mutex | |||
) |
[MPU] Unlocks a mutex.
This function unlocks a previously locked mutex to allow other lock requests. It also stores the local mutex instance into the effective address specified.
[in] | mutex_ea | - ea of mutex instance to unlock |
[in] | mutex | - pointer to local mutex instance |
int mars_module_dma_get | ( | void * | ls, | |
uint64_t | ea, | |||
uint32_t | size, | |||
uint32_t | tag | |||
) |
[MPU] DMA transfer from host storage to MPU storage.
This function begins a DMA transfer request from host storage to MPU storage. Transfer completion is not guaranteed until calling mars_module_dma_wait with the corresponding tag used to request the transfer.
[in] | ls | - address of MPU storage to transfer to |
[in] | ea | - ea of host storage to transfer from |
[in] | size | - size of dma transfer |
[in] | tag | - tag of dma transfer |
int mars_module_dma_put | ( | const void * | ls, | |
uint64_t | ea, | |||
uint32_t | size, | |||
uint32_t | tag | |||
) |
[MPU] DMA transfer from MPU storage to host storage.
This function begins a DMA transfer request from MPU storage to host storage. Transfer completion is not guaranteed until calling mars_module_dma_wait with the corresponding tag used to request the transfer.
[in] | ls | - address of MPU storage to transfer to |
[in] | ea | - ea of host storage to transfer from |
[in] | size | - size of dma transfer |
[in] | tag | - tag of dma transfer |
int mars_module_dma_wait | ( | uint32_t | tag | ) |
[MPU] Waits for completion of requested DMA transfer.
This function waits until completion of all previously started DMA transfer requests with the same tag.
[in] | tag | - tag of dma transfer |