311 lines
5.9 KiB
C
311 lines
5.9 KiB
C
/* sound/soc/samsung/abox/abox_ipc.h
|
|
*
|
|
* ALSA SoC - Samsung Abox driver
|
|
*
|
|
* Copyright (c) 2016 Samsung Electronics Co. Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __SND_SOC_ABOX_IPC_H
|
|
#define __SND_SOC_ABOX_IPC_H
|
|
|
|
/******** IPC signal ID *********************/
|
|
enum SIGNAL_ID {
|
|
SIGID_SYSTEM = 1,
|
|
SIGID_PCMOUT_TASK0,
|
|
SIGID_PCMOUT_TASK1,
|
|
SIGID_PCMOUT_TASK2,
|
|
SIGID_PCMOUT_TASK3,
|
|
SIGID_PCMIN_TASK0,
|
|
SIGID_PCMIN_TASK1,
|
|
SIGID_OFFLOAD,
|
|
SIGID_ERAP,
|
|
SIGID_ASB,
|
|
};
|
|
|
|
/******** PCMTASK IPC ***********************/
|
|
enum PCMMSG {
|
|
PCM_OPEN = 1,
|
|
PCM_CLOSE = 2,
|
|
PCM_CPUDAI_TRIGGER = 3,
|
|
PCM_CPUDAI_HW_PARAMS = 4,
|
|
PCM_CPUDAI_SET_FMT = 5,
|
|
PCM_CPUDAI_SET_CLKDIV = 6,
|
|
PCM_CPUDAI_SET_SYSCLK = 7,
|
|
PCM_CPUDAI_STARTUP = 8,
|
|
PCM_CPUDAI_SHUTDOWN = 9,
|
|
PCM_CPUDAI_DELAY = 10,
|
|
PCM_PLTDAI_OPEN = 11,
|
|
PCM_PLTDAI_CLOSE = 12,
|
|
PCM_PLTDAI_IOCTL = 13,
|
|
PCM_PLTDAI_HW_PARAMS = 14,
|
|
PCM_PLTDAI_HW_FREE = 15,
|
|
PCM_PLTDAI_PREPARE = 16,
|
|
PCM_PLTDAI_TRIGGER = 17,
|
|
PCM_PLTDAI_POINTER = 18,
|
|
PCM_PLTDAI_MMAP = 19,
|
|
PCM_SET_BUFFER = 20,
|
|
PCM_SYNCHRONIZE = 21,
|
|
};
|
|
|
|
struct PCMTASK_HW_PARAMS {
|
|
int sample_rate;
|
|
int bit_depth;
|
|
int channels;
|
|
};
|
|
|
|
struct PCMTASK_SET_BUFFER {
|
|
int phyaddr;
|
|
int size;
|
|
int count;
|
|
};
|
|
|
|
/* Parameter of the PCMTASK command */
|
|
struct IPC_PCMTASK_MSG {
|
|
enum PCMMSG msgtype;
|
|
int channel_id;
|
|
union {
|
|
struct PCMTASK_HW_PARAMS hw_params;
|
|
struct PCMTASK_SET_BUFFER setbuff;
|
|
unsigned int pointer;
|
|
int trigger;
|
|
int synchronize;
|
|
} param;
|
|
};
|
|
|
|
/******** OFFLOAD IPC ***********************/
|
|
enum OFFLOADMSG {
|
|
OFFLOAD_OPEN = 1,
|
|
OFFLOAD_CLOSE,
|
|
OFFLOAD_SETPARAM,
|
|
OFFLOAD_START,
|
|
OFFLOAD_WRITE,
|
|
OFFLOAD_PAUSE,
|
|
OFFLOAD_STOP,
|
|
};
|
|
|
|
/* The parameter of the set_param */
|
|
struct OFFLOAD_SET_PARAM {
|
|
int sample_rate;
|
|
int chunk_size;
|
|
};
|
|
|
|
/* The parameter of the start */
|
|
struct OFFLOAD_START {
|
|
int id;
|
|
};
|
|
|
|
/* The parameter of the write */
|
|
struct OFFLOAD_WRITE {
|
|
int id;
|
|
int buff;
|
|
int size;
|
|
};
|
|
|
|
/* Parameter of the OFFLOADTASK command */
|
|
struct IPC_OFFLOADTASK_MSG {
|
|
enum OFFLOADMSG msgtype;
|
|
int channel_id;
|
|
union {
|
|
struct OFFLOAD_SET_PARAM setparam;
|
|
struct OFFLOAD_START start;
|
|
struct OFFLOAD_WRITE write;
|
|
} param;
|
|
};
|
|
|
|
/******** ABOX_LOOPBACK IPC ***********************/
|
|
enum ABOX_ERAP_MSG {
|
|
REALTIME_OPEN = 1,
|
|
REALTIME_CLOSE,
|
|
REALTIME_OUTPUT_SRATE,
|
|
REALTIME_INPUT_SRATE,
|
|
REALTIME_BIND_CHANNEL,
|
|
REALTIME_START,
|
|
REALTIME_STOP,
|
|
REALTIME_PREDSM_AUDIO,
|
|
REALTIME_PREDSM_VI_SENSE,
|
|
REALTIME_TONEGEN = 0x20,
|
|
REALTIME_EXTRA = 0xea,
|
|
};
|
|
|
|
enum ABOX_ERAP_TYPE {
|
|
ERAP_ECHO_CANCEL,
|
|
ERAP_VI_SENSE,
|
|
ERAP_TYPE_COUNT,
|
|
};
|
|
|
|
struct ERAP_ONOFF_PARAM {
|
|
enum ABOX_ERAP_TYPE type;
|
|
int channel_no;
|
|
int version;
|
|
};
|
|
|
|
struct ERAP_SET_SRATE_PARAM {
|
|
int channel_no;
|
|
int srate;
|
|
};
|
|
|
|
struct ERAP_BIND_CHANNEL_PARAM {
|
|
int input_channel;
|
|
int output_channel;
|
|
};
|
|
|
|
struct ERAP_RAW_PARAM {
|
|
unsigned int params[188];
|
|
};
|
|
|
|
struct IPC_ERAP_MSG {
|
|
enum ABOX_ERAP_MSG msgtype;
|
|
union {
|
|
struct ERAP_ONOFF_PARAM onoff;
|
|
struct ERAP_BIND_CHANNEL_PARAM bind;
|
|
struct ERAP_SET_SRATE_PARAM srate;
|
|
struct ERAP_RAW_PARAM raw;
|
|
} param;
|
|
};
|
|
|
|
/******** ABOX_CONFIG IPC ***********************/
|
|
enum ABOX_CONFIGMSG {
|
|
SET_MIXER_SAMPLE_RATE = 1,
|
|
SET_OUT1_SAMPLE_RATE,
|
|
SET_OUT2_SAMPLE_RATE,
|
|
SET_RECP_SAMPLE_RATE,
|
|
SET_INMUX0_SAMPLE_RATE,
|
|
SET_INMUX1_SAMPLE_RATE,
|
|
SET_INMUX2_SAMPLE_RATE,
|
|
SET_INMUX3_SAMPLE_RATE,
|
|
SET_INMUX4_SAMPLE_RATE,
|
|
SET_MIXER_FORMAT = 0x10,
|
|
SET_OUT1_FORMAT,
|
|
SET_OUT2_FORMAT,
|
|
SET_RECP_FORMAT,
|
|
SET_INMUX0_FORMAT,
|
|
SET_INMUX1_FORMAT,
|
|
SET_INMUX2_FORMAT,
|
|
SET_INMUX3_FORMAT,
|
|
SET_INMUX4_FORMAT,
|
|
};
|
|
|
|
struct IPC_ABOX_CONFIG_MSG {
|
|
enum ABOX_CONFIGMSG msgtype;
|
|
int param1;
|
|
int param2;
|
|
};
|
|
|
|
/******** ABOX_ASB_TEST IPC ***********************/
|
|
enum ABOX_TEST_MSG {
|
|
ASB_MULTITX_SINGLERX = 1,
|
|
ASB_SINGLETX_MULTIRX,
|
|
ASB_MULTITX_MULTIRX,
|
|
ASB_FFT_TEST,
|
|
};
|
|
|
|
struct IPC_ABOX_TEST_MSG {
|
|
enum ABOX_TEST_MSG msgtype;
|
|
int param1;
|
|
int param2;
|
|
};
|
|
|
|
/******** IPC_ABOX_SYSTEM_MSG IPC ***********************/
|
|
enum ABOX_SYSTEM_MSG {
|
|
ABOX_SUSPEND = 1,
|
|
ABOX_RESUME,
|
|
ABOX_BOOT_DONE,
|
|
ABOX_CHANGE_GEAR,
|
|
ABOX_START_L2C_CONTROL,
|
|
ABOX_END_L2C_CONTROL,
|
|
ABOX_REQUEST_SYSCLK,
|
|
ABOX_REQUEST_L2C,
|
|
ABOX_CHANGED_GEAR,
|
|
ABOX_REPORT_LOG = 0x10,
|
|
ABOX_FLUSH_LOG,
|
|
ABOX_REPORT_DUMP = 0x20,
|
|
ABOX_REQUEST_DUMP,
|
|
ABOX_FLUSH_DUMP,
|
|
ABOX_REPORT_SRAM = 0x40,
|
|
ABOX_START_CLAIM_SRAM,
|
|
ABOX_END_CLAIM_SRAM,
|
|
ABOX_START_RECLAIM_SRAM,
|
|
ABOX_END_RECLAIM_SRAM,
|
|
ABOX_REPORT_DRAM,
|
|
ABOX_SET_TYPE = 0x60,
|
|
ABOX_START_VSS = 0xA0,
|
|
ABOX_REPORT_COMPONENT = 0xC0,
|
|
ABOX_UPDATE_COMPONENT_CONTROL,
|
|
ABOX_REQUEST_COMPONENT_CONTROL,
|
|
ABOX_REPORT_COMPONENT_CONTROL,
|
|
ABOX_BT_SCO_ENABLE = 0xD0,
|
|
ABOX_REQUEST_DEBUG = 0xDE,
|
|
ABOX_REPORT_FAULT = 0xFA,
|
|
};
|
|
|
|
struct IPC_SYSTEM_MSG {
|
|
enum ABOX_SYSTEM_MSG msgtype;
|
|
int param1;
|
|
int param2;
|
|
int param3;
|
|
union {
|
|
int param_s32[0];
|
|
char param_bundle[740];
|
|
} bundle;
|
|
};
|
|
|
|
struct ABOX_LOG_BUFFER {
|
|
unsigned int index_writer;
|
|
unsigned int index_reader;
|
|
unsigned int size;
|
|
char buffer[0];
|
|
};
|
|
|
|
struct ABOX_COMPONENT_CONTROL {
|
|
unsigned int id;
|
|
char name[16];
|
|
unsigned int count;
|
|
int min, max;
|
|
};
|
|
|
|
struct ABOX_COMPONENT_DESCRIPTIOR {
|
|
unsigned int id;
|
|
char name[16];
|
|
unsigned int control_count;
|
|
struct ABOX_COMPONENT_CONTROL controls[];
|
|
};
|
|
|
|
/************ IPC DEFINITION ***************/
|
|
/* Categorized IPC, */
|
|
enum IPC_ID {
|
|
IPC_RECEIVED,
|
|
IPC_SYSTEM = 1,
|
|
IPC_PCMPLAYBACK,
|
|
IPC_PCMCAPTURE,
|
|
IPC_OFFLOAD,
|
|
IPC_ERAP,
|
|
WDMA0_BUF_FULL = 0x8,
|
|
WDMA1_BUF_FULL = 0x9,
|
|
IPC_ABOX_CONFIG = 0xA,
|
|
RDMA0_BUF_EMPTY = 0xB,
|
|
RDMA1_BUF_EMPTY = 0xC,
|
|
RDMA2_BUF_EMPTY = 0xD,
|
|
RDMA3_BUF_EMPTY = 0xE,
|
|
IPC_ASB_TEST = 0xF,
|
|
IPC_ID_COUNT,
|
|
};
|
|
|
|
typedef struct {
|
|
enum IPC_ID ipcid;
|
|
int task_id;
|
|
union IPC_MSG {
|
|
struct IPC_SYSTEM_MSG system;
|
|
struct IPC_PCMTASK_MSG pcmtask;
|
|
struct IPC_OFFLOADTASK_MSG offload;
|
|
struct IPC_ERAP_MSG erap;
|
|
struct IPC_ABOX_CONFIG_MSG config;
|
|
struct IPC_ABOX_TEST_MSG asb;
|
|
} msg;
|
|
} ABOX_IPC_MSG;
|
|
|
|
#endif /* __SND_SOC_ABOX_IPC_H */
|