You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.5 KiB
92 lines
3.5 KiB
/*******************************************************************************
|
|
* Copyright (C) 2018 Cadence Design Systems, Inc.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
* "Software"), to use this Software with Cadence processor cores only and
|
|
* not with any other processors and platforms, subject to
|
|
* the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included
|
|
* in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* xf-component.h
|
|
*
|
|
* Xtensa processing framework component definition
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#ifndef __XF_H
|
|
#error "xf-component.h mustn't be included directly"
|
|
#endif
|
|
|
|
/*******************************************************************************
|
|
* Types definitions
|
|
******************************************************************************/
|
|
|
|
/* ...component literal identifier */
|
|
typedef const char * const xf_id_t;
|
|
|
|
/* ...component descriptor (base structure) */
|
|
typedef struct xf_component
|
|
{
|
|
/* ...scheduler node */
|
|
xf_task_t task;
|
|
|
|
/* ...component id */
|
|
u32 id;
|
|
|
|
/* ...message-processing function */
|
|
int (*entry)(struct xf_component *, xf_message_t *);
|
|
|
|
/* ...component destructor function */
|
|
int (*exit)(struct xf_component *, xf_message_t *);
|
|
#ifndef XAF_ENABLE_NON_HIKEY
|
|
/* ...output port accessor */
|
|
xf_output_port_t * (*port)(struct xf_component *, u32);
|
|
#endif
|
|
|
|
} xf_component_t;
|
|
|
|
/*******************************************************************************
|
|
* Helpers
|
|
******************************************************************************/
|
|
|
|
/* ...return core-id of the component */
|
|
static inline u32 xf_component_core(xf_component_t *component)
|
|
{
|
|
return XF_PORT_CORE(component->id);
|
|
}
|
|
|
|
/* ...schedule component execution */
|
|
#define xf_component_schedule(c, dts) \
|
|
({ \
|
|
xf_sched_t *__sched = &XF_CORE_DATA(xf_component_core((c)))->sched; \
|
|
xf_sched_put(__sched, &(c)->task, xf_sched_timestamp(__sched) + (dts)); \
|
|
})
|
|
|
|
/* ...cancel component execution */
|
|
#define xf_component_cancel(c) \
|
|
({ \
|
|
xf_sched_t *__sched = &XF_CORE_DATA(xf_component_core((c)))->sched; \
|
|
xf_sched_cancel(__sched, &(c)->task); \
|
|
})
|
|
|
|
/*******************************************************************************
|
|
* API functions
|
|
******************************************************************************/
|
|
|
|
/* ...component factory */
|
|
extern xf_component_t * xf_component_factory(u32 core, xf_id_t id, u32 length);
|