#ifndef __DAL_AUX_ENGINE_H__
#define __DAL_AUX_ENGINE_H__
#include "dc_ddc_types.h"
struct aux_engine;
struct aux_engine_funcs {
void (*destroy)(
struct aux_engine **ptr);
bool (*acquire_engine)(
struct aux_engine *engine);
void (*configure)(
struct aux_engine *engine,
union aux_config cfg);
void (*submit_channel_request)(
struct aux_engine *engine,
struct aux_request_transaction_data *request);
void (*process_channel_reply)(
struct aux_engine *engine,
struct aux_reply_transaction_data *reply);
int (*read_channel_reply)(
struct aux_engine *engine,
uint32_t size,
uint8_t *buffer,
uint8_t *reply_result,
uint32_t *sw_status);
enum aux_channel_operation_result (*get_channel_status)(
struct aux_engine *engine,
uint8_t *returned_bytes);
bool (*is_engine_available) (
struct aux_engine *engine);
};
struct aux_engine {
struct engine base;
const struct aux_engine_funcs *funcs;
uint32_t delay;
uint32_t max_defer_write_retry;
bool acquire_reset;
};
void dal_aux_engine_construct(
struct aux_engine *engine,
struct dc_context *ctx);
void dal_aux_engine_destruct(
struct aux_engine *engine);
bool dal_aux_engine_submit_request(
struct engine *ptr,
struct i2caux_transaction_request *request,
bool middle_of_transaction);
bool dal_aux_engine_acquire(
struct engine *ptr,
struct ddc *ddc);
enum i2caux_engine_type dal_aux_engine_get_engine_type(
const struct engine *engine);
#endif