#ifndef _VCA_HWMOD_H
#define _VCA_HWMOD_H

#ifndef __RTL__
#include <inttypes.h>
#else /*__RTL__*/
#include <linux/types.h>
#endif /*__RTL__*/

#include "sui_dinfo.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef void* vcaHwModule_workingThread_fn_t(void *param);

int vcaHwModule_initModule(void);
void vcaHwModule_cleanupModule(void);

/**
 * vcaHwModule_getDinfoCnt
 *
 * Return: number of offered dinfos
 */
int vcaHwModule_getDinfoCnt(void);

/**
 * vcaHwModule_getDinfoRef - returns dinfo on %dinfo_ix and increment its reference count
 *
 * Return: reference to HW module dinfo on index @dinfo_ix
 */
sui_dinfo_t *vcaHwModule_getDinfoRef(int dinfo_ix);
/**
 * vcaHwModule_getDinfoObjectIndex - returns object to which dinfo s supposed to be mapped
 *
 * Return: 24 bits index | 8bits subindex or 0 if index does not match any dinfo
 */
uint32_t vcaHwModule_getDinfoObjectIndex(int dinfo_ix);

/**
 * vcaHwModule_getWorkingThreadFunction
 *
 * Return: pointer to HW module thread function or NULL
 */
vcaHwModule_workingThread_fn_t* vcaHwModule_getWorkingThreadFunction(void);

#ifdef __cplusplus
} /* extern "C"*/
#endif

#endif
