blob: 40f53c506f3695b79507d17715188b852f46c7f4 [file] [log] [blame]
// 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_ */