#ifndef __SST_MFLD_DSP_H__ #define __SST_MFLD_DSP_H__ /* * sst_mfld_dsp.h - Intel SST Driver for audio engine * * Copyright (C) 2008-14 Intel Corporation * Authors: Vinod Koul * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #define SST_MAX_BIN_BYTES 1024 #define MAX_DBG_RW_BYTES 80 #define MAX_NUM_SCATTER_BUFFERS 8 #define MAX_LOOP_BACK_DWORDS 8 /* IPC base address and mailbox, timestamp offsets */ #define SST_MAILBOX_SIZE 0x0400 #define SST_MAILBOX_SEND 0x0000 #define SST_TIME_STAMP 0x1800 #define SST_TIME_STAMP_MRFLD 0x800 #define SST_RESERVED_OFFSET 0x1A00 #define SST_SCU_LPE_MAILBOX 0x1000 #define SST_LPE_SCU_MAILBOX 0x1400 #define SST_SCU_LPE_LOG_BUF (SST_SCU_LPE_MAILBOX+16) #define PROCESS_MSG 0x80 /* Message ID's for IPC messages */ /* Bits B7: SST or IA/SC ; B6-B4: Msg Category; B3-B0: Msg Type */ /* I2L Firmware/Codec Download msgs */ #define IPC_IA_PREP_LIB_DNLD 0x01 #define IPC_IA_LIB_DNLD_CMPLT 0x02 #define IPC_IA_GET_FW_VERSION 0x04 #define IPC_IA_GET_FW_BUILD_INF 0x05 #define IPC_IA_GET_FW_INFO 0x06 #define IPC_IA_GET_FW_CTXT 0x07 #define IPC_IA_SET_FW_CTXT 0x08 #define IPC_IA_PREPARE_SHUTDOWN 0x31 /* I2L Codec Config/control msgs */ #define IPC_PREP_D3 0x10 #define IPC_IA_SET_CODEC_PARAMS 0x10 #define IPC_IA_GET_CODEC_PARAMS 0x11 #define IPC_IA_SET_PPP_PARAMS 0x12 #define IPC_IA_GET_PPP_PARAMS 0x13 #define IPC_SST_PERIOD_ELAPSED_MRFLD 0xA #define IPC_IA_ALG_PARAMS 0x1A #define IPC_IA_TUNING_PARAMS 0x1B #define IPC_IA_SET_RUNTIME_PARAMS 0x1C #define IPC_IA_SET_PARAMS 0x1 #define IPC_IA_GET_PARAMS 0x2 #define IPC_EFFECTS_CREATE 0xE #define IPC_EFFECTS_DESTROY 0xF /* I2L Stream config/control msgs */ #define IPC_IA_ALLOC_STREAM_MRFLD 0x2 #define IPC_IA_ALLOC_STREAM 0x20 /* Allocate a stream ID */ #define IPC_IA_FREE_STREAM_MRFLD 0x03 #define IPC_IA_FREE_STREAM 0x21 /* Free the stream ID */ #define IPC_IA_SET_STREAM_PARAMS 0x22 #define IPC_IA_SET_STREAM_PARAMS_MRFLD 0x12 #define IPC_IA_GET_STREAM_PARAMS 0x23 #define IPC_IA_PAUSE_STREAM 0x24 #define IPC_IA_PAUSE_STREAM_MRFLD 0x4 #define IPC_IA_RESUME_STREAM 0x25 #define IPC_IA_RESUME_STREAM_MRFLD 0x5 #define IPC_IA_DROP_STREAM 0x26 #define IPC_IA_DROP_STREAM_MRFLD 0x07 #define IPC_IA_DRAIN_STREAM 0x27 /* Short msg with str_id */ #define IPC_IA_DRAIN_STREAM_MRFLD 0x8 #define IPC_IA_CONTROL_ROUTING 0x29 #define IPC_IA_VTSV_UPDATE_MODULES 0x20 #define IPC_IA_VTSV_DETECTED 0x21 #define IPC_IA_START_STREAM_MRFLD 0X06 #define IPC_IA_START_STREAM 0x30 /* Short msg with str_id */ #define IPC_IA_SET_GAIN_MRFLD 0x21 /* Debug msgs */ #define IPC_IA_DBG_MEM_READ 0x40 #define IPC_IA_DBG_MEM_WRITE 0x41 #define IPC_IA_DBG_LOOP_BACK 0x42 #define IPC_IA_DBG_LOG_ENABLE 0x45 #define IPC_IA_DBG_SET_PROBE_PARAMS 0x47 /* L2I Firmware/Codec Download msgs */ #define IPC_IA_FW_INIT_CMPLT 0x81 #define IPC_IA_FW_INIT_CMPLT_MRFLD 0x01 #define IPC_IA_FW_ASYNC_ERR_MRFLD 0x11 /* L2I Codec Config/control msgs */ #define IPC_SST_FRAGMENT_ELPASED 0x90 /* Request IA more data */ #define IPC_SST_BUF_UNDER_RUN 0x92 /* PB Under run and stopped */ #define IPC_SST_BUF_OVER_RUN 0x93 /* CAP Under run and stopped */ #define IPC_SST_DRAIN_END 0x94 /* PB Drain complete and stopped */ #define IPC_SST_CHNGE_SSP_PARAMS 0x95 /* PB SSP parameters changed */ #define IPC_SST_STREAM_PROCESS_FATAL_ERR 0x96/* error in processing a stream */ #define IPC_SST_PERIOD_ELAPSED 0x97 /* period elapsed */ #define IPC_SST_ERROR_EVENT 0x99 /* Buffer over run occurred */ /* L2S messages */ #define IPC_SC_DDR_LINK_UP 0xC0 #define IPC_SC_DDR_LINK_DOWN 0xC1 #define IPC_SC_SET_LPECLK_REQ 0xC2 #define IPC_SC_SSP_BIT_BANG 0xC3 /* L2I Error reporting msgs */ #define IPC_IA_MEM_ALLOC_FAIL 0xE0 #define IPC_IA_PROC_ERR 0xE1 /* error in processing a stream can be used by playback and capture modules */ /* L2I Debug msgs */ #define IPC_IA_PRINT_STRING 0xF0 /* Buffer under-run */ #define IPC_IA_BUF_UNDER_RUN_MRFLD 0x0B /* Mrfld specific defines: * For asynchronous messages(INIT_CMPLT, PERIOD_ELAPSED, ASYNC_ERROR) * received from FW, the format is: * - IPC High: pvt_id is set to zero. Always short message. * - msg_id is in lower 16-bits of IPC low payload. * - pipe_id is in higher 16-bits of IPC low payload for period_elapsed. * - error id is in higher 16-bits of IPC low payload for async errors. */ #define SST_ASYNC_DRV_ID 0 /* Command Response or Acknowledge message to any IPC message will have * same message ID and stream ID information which is sent. * There is no specific Ack message ID. The data field is used as response * meaning. */ enum ackData { IPC_ACK_SUCCESS = 0, IPC_ACK_FAILURE, }; enum ipc_ia_msg_id { IPC_CMD = 1, /*!< Task Control message ID */ IPC_SET_PARAMS = 2,/*!< Task Set param message ID */ IPC_GET_PARAMS = 3, /*!< Task Get param message ID */ IPC_INVALID = 0xFF, /*!