/*
 * Copyright (c) 2019 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef AUDIO_CORE__H
#define AUDIO_CORE__H

/* scheduling priority used by each thread */
#define TUN_DRV_IO_THREAD_PRIORITY		-3
#define AUDIO_DRIVER_THREAD_PRIORITY		2
#define AUDIO_SM_BLOCK_PROC_THREAD_PRIORITY	3
#define AUDIO_LG_BLOCK_PROC_THREAD_PRIORITY	4
#define FRAMEWORK_BG_THREAD_PRIORITY		99

/* size of stack area used by each thread */
#define AUDIO_DRIVER_THREAD_STACKSIZE		2048
#define TUN_DRV_IO_THREAD_STACK_SIZE		1024
#define FRAMEWORK_BG_THREAD_STACK_SIZE		1024
#define AUDIO_SM_BLOCK_PROC_THREAD_STACK_SIZE	1024
#define AUDIO_LG_BLOCK_PROC_THREAD_STACK_SIZE	1024

/* input audio channels */
#define AUDIO_MIC_INPUT_CHANNEL_COUNT		8
#define AUDIO_HOST_INPUT_CHANNEL_COUNT		2
#define	AUDIO_INPUT_CHANNEL_COUNT		\
	(AUDIO_MIC_INPUT_CHANNEL_COUNT +	\
	 AUDIO_HOST_OUTPUT_CHANNEL_COUNT)

/* output audio channels */
#define AUDIO_SPEAKER_OUTPUT_CHANNEL_COUNT	2
#define AUDIO_HOST_OUTPUT_CHANNEL_COUNT		2
#define AUDIO_OUTPUT_CHANNEL_COUNT		\
	(AUDIO_SPEAKER_OUTPUT_CHANNEL_COUNT +	\
	 AUDIO_HOST_OUTPUT_CHANNEL_COUNT)

/* samples per frame */
#define AUDIO_SAMPLES_PER_FRAME			192

int audio_core_initialize(void);
int audio_core_process_mic_source(int32_t *buffer, int channels);
int audio_core_process_host_source(int32_t *buffer, int channels);
int audio_core_process_speaker_sink(int32_t *buffer, int channels);
int audio_core_process_host_sink(int32_t *buffer, int channels);
int audio_core_notify_frame_tick(void);

/* tuning interface prototypes */
int audio_core_tuning_interface_init(uint32_t *command_buffer,
		uint32_t size_in_words);
int audio_core_notify_tuning_cmd(void);
bool audio_core_is_tuning_reply_ready(void);

/* audio driver prototypes */
int audio_driver_start(void);
int audio_driver_stop(void);

/* tick for processing background tasks, called from the background thread */
int audio_core_process_background_tasks(void);

/* tick for processing small audio blocks */
int audio_core_process_small_blocks(void);
int audio_core_process_large_blocks(void);

#endif /* AUDIO_CORE__H */
