| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Driver for Audio DSP. |
| * |
| * Copyright (C) 2023 ASRMicro |
| * |
| * Author: Wang Yan <yjgwang@asrmicro.com> |
| */ |
| |
| |
| /****************************************************************************** |
| * MODULE IMPLEMENTATION FILE |
| ******************************************************************************* |
| * Title: Header for ADSP in AP subsystem |
| * |
| * Filename: adsp.h |
| * |
| * Authors: Wang Yan |
| * |
| * Description: Header file for ADSP. |
| * |
| * Last Updated: |
| * |
| * Notes: |
| ******************************************************************************/ |
| #ifndef _ADSP_H_ |
| #define _ADSP_H_ |
| |
| // Opcodes: |
| enum AudioCtrlCmd { |
| START_AUDIO_PATH = 0x0000 |
| , END_AUDIO_PATH = 0x0001 |
| , SET_CODEC = 0x0005 |
| , DATA_INDICATION = 0x0020 |
| , VOLUME_CONTROL = 0x0022 |
| , MUTE_CONTROL = 0x0023 |
| }; |
| |
| enum AudioCtrlMsg { |
| VOICE_DEBUG_CONTROL = 0x0011 |
| , ADSP_EXCEPTION = 0x201B |
| , POWER_OFF_REQ = 0x001E |
| , DATA_REQ = 0x0020 |
| , RECORD_DATA = 0x2021 |
| , LOG_WAVE_DATA = 0x0022 |
| , MP3_INFO_REPORT = 0x0023 |
| , END_AUDIO_PATH_ACK = 0x0024 |
| , VOICE_PCM_VIA_IPC = 0x204A |
| }; |
| |
| //length in u16 |
| #define START_AUDIO_PATH_PLAY_WAV_CMD_LENGTH 4 |
| #define START_AUDIO_PATH_PLAY_MP3_CMD_LENGTH 2 |
| #define START_AUDIO_PATH_RECORD_NORMAL_CMD_LENGTH 2 |
| #define START_AUDIO_PATH_RECORD_CALL_CMD_LENGTH 3 |
| #define END_AUDIO_PATH_CMD_LENGTH 1 |
| #define SET_CODEC_CMD_LENGTH 2 |
| #define DATA_INDICATION_CMD_LENGTH 2 |
| #define VOLUME_CONTROL_CMD_LENGTH 2 |
| #define MUTE_CONTROL_CMD_LENGTH 2 |
| |
| |
| /*from audio_ipc.h*/ |
| #define UINT32 unsigned int |
| #define UINT16 unsigned short |
| #define UINT8 unsigned char |
| #define Word32 signed int |
| |
| // Return status type |
| typedef enum { |
| IPC_ERROR = -1, |
| IPC_OK, |
| IPC_MSG_QUEUE_OVERFLOW |
| } IpcReturnCodeType; |
| |
| enum { |
| IPCfromCP = 0, |
| IPCfromAP = 1, |
| }; |
| |
| // Set-ID type |
| typedef enum { |
| IPC_SETID_INVALID = -1, |
| IPC_SETID_SYSTEM_MUSIC = 0, |
| IPC_SETID_VOICE = 1, |
| IPC_SETID_NUMBERS, |
| } IpcSetIDType; |
| |
| // IPC registers |
| typedef struct { |
| UINT32 IPC_ISRR_REG; //ISRR |
| UINT32 IPC_CPUPOLL_REG; //WDR |
| UINT32 IPC_DSP2CPU_INTSET_REG; //ISRW |
| UINT32 IPC_DSP_INTCLR_REG; //ICR |
| UINT32 IPC_INT_IDENTIFY_REG; //IIR |
| UINT32 IPC_DSPPOLL_REG; //RDR |
| } IPCRegType; |
| |
| // Send/Receive Parameters structure |
| typedef struct { |
| UINT16 SubOpcode; |
| UINT16 CmdMsgLength; |
| UINT32 *CmdMsgPtr; |
| } IpcSetParamsType; |
| |
| // Data Parameters structure |
| typedef struct { |
| UINT8 resev0; // ChId; |
| UINT8 resev1; //CopyFlag; |
| UINT16 Length; |
| UINT32 *Ptr; // Pointer of sent data |
| } IpcDataParamsType; |
| |
| typedef struct { |
| UINT16 Header; |
| UINT16 UserLength; |
| } IpcCmdMsgHeaderType; |
| |
| enum { |
| IPC_HEADER_SUBSET_BITNUM, |
| IPC_HEADER_SETID_BITNUM = 6, |
| IPC_HEADER_SETID_RESERVED = 8, |
| IPC_HEADER_GENERAL_RESERVED, |
| IPC_HEADER_DATA_BITNUM = 13, |
| IPC_HEADER_URGENT_BITNUM, |
| IPC_HEADER_LONG_BITNUM |
| }; |
| |
| |
| /*from vpath_AudioIsland.h*/ |
| //Max size of one SPI transmission (Tx/Rx) |
| #define AUDIOISLAND_MAX_TRANSMISSIONSIZE 360 //SSP_DMA_SIZE, count in "short" |
| #define AUDIOISLAND_NBPCMSIZE 160 //count in "short" |
| #define AUDIOISLAND_WBPCMSIZE 320 //count in "short" |
| |
| |
| //DATA_INDICATION |
| typedef struct { |
| UINT8 resev0; |
| UINT8 resev1; |
| UINT16 Length; |
| UINT32 *Ptr; |
| UINT16 StreamIDType; |
| } DATA_INDICATION_Type; |
| |
| |
| #endif /* _ADSP_H_ */ |