/*****************************************************************************

    AudioScience HPI driver
    Copyright (C) 1997-2003  AudioScience Inc. <support@audioscience.com>

    This program is free software; you can redistribute it and/or modify
    it under the terms of version 2 of the GNU General Public License as
    published by the Free Software Foundation;

    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.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Public declarations for DSP Proramming Interface to TI C6701

(C) Copyright AudioScience Inc. 1998-2003
******************************************************************************/

#ifndef _HPI6000_H_
#define _HPI6000_H_

#define HPI_NMIXER_CONTROLS 200	//(NMIXER_VOLUME_CONTROLS + NMIXER_LEVEL_CONTROLS + NMIXER_PEAK_METERS + NMIXER_AES3 + 4)

/*
* Control caching is always supported in the HPI code.
* The DSP should make sure that dwControlCacheSizeInBytes is initialized to 0
* during boot to make it in-active.
*/
typedef struct {
	u32 dwHostCmd;
	u32 dwDspAck;
	u32 dwAddress;
	u32 dwLength;
	u32 dwMessageBufferAddress;
	u32 dwResponseBufferAddress;
	u32 dwDspNumber;
	u32 dwAdapterInfo;
	u32 dwControlCacheIsDirty;
	u32 dwControlCacheAddress;
	u32 dwControlCacheSizeInBytes;
} HPI_HIF_6000;

#define HPI_HIF_BASE (0x00000200)	/* start of C67xx internal RAM */
#define HPI_HIF_OFS_HOSTCMD (0)	/* byte offsets */
#define HPI_HIF_OFS_DSPACK (4)
#define HPI_HIF_OFS_ADDRESS (8)
#define HPI_HIF_OFS_LENGTH (12)
#define HPI_HIF_OFS_MSG_BUFFER_ADR (16)
#define HPI_HIF_OFS_RESP_BUFFER_ADR (20)
#define HPI_HIF_OFS_DSP_NUMBER (24)
#define HPI_HIF_OFS_ADAPTER_INFO (28)
#define HPI_HIF_OFS_CONTROL_CACHE_IS_DIRTY (32)
#define HPI_HIF_OFS_CONTROL_CACHE_ADDRESS (36)
#define HPI_HIF_OFS_CONTROL_CACHE_SIZE_IN_BYTES (40)

#define HPI_HIF_PACK_ADAPTER_INFO(adapter,versionMajor,versionMinor) ((adapter<<16)|(versionMajor<<8) | versionMinor)
#define HPI_HIF_ADAPTER_INFO_EXTRACT_ADAPTER(adapterinfo) ((adapterinfo>>16)&0xffff)
#define HPI_HIF_ADAPTER_INFO_EXTRACT_HWVERSION_MAJOR(adapterinfo) ((adapterinfo>> 8)&0xff)
#define HPI_HIF_ADAPTER_INFO_EXTRACT_HWVERSION_MINOR(adapterinfo) (adapterinfo&0xff)

#define HPI_HIF_IDLE            0
#define HPI_HIF_SEND_MSG        1
#define HPI_HIF_GET_RESP        2
#define HPI_HIF_DATA_MASK       0x10
#define HPI_HIF_SEND_DATA       0x13
#define HPI_HIF_GET_DATA        0x14
#define HPI_HIF_SEND_DONE       5
#define HPI_HIF_RESET           9

#define HPI_HIF_ERROR_MASK      0x4000

///////////////////////////////////////////////////////////////////////////////
// HIF errors get listed here

#define HPI6000_ERROR_MSG_RESP_IDLE_TIMEOUT             901
#define HPI6000_ERROR_MSG_RESP_SEND_MSG_ACK     902
#define HPI6000_ERROR_MSG_RESP_GET_RESP_ACK             903
#define HPI6000_ERROR_MSG_GET_ADR                               904
#define HPI6000_ERROR_RESP_GET_ADR                              905
#define HPI6000_ERROR_MSG_RESP_BLOCKWRITE32     906
#define HPI6000_ERROR_MSG_RESP_BLOCKREAD32      907
#define HPI6000_ERROR_MSG_INVALID_DSP_INDEX     908
#define HPI6000_ERROR_CONTROL_CACHE_PARAMS              909

#define HPI6000_ERROR_SEND_DATA_IDLE_TIMEOUT    911
#define HPI6000_ERROR_SEND_DATA_ACK                     912
#define HPI6000_ERROR_SEND_DATA_ADR                     913
#define HPI6000_ERROR_SEND_DATA_TIMEOUT                 914
#define HPI6000_ERROR_SEND_DATA_CMD                             915
#define HPI6000_ERROR_SEND_DATA_WRITE                   916
#define HPI6000_ERROR_SEND_DATA_IDLECMD                 917

#define HPI6000_ERROR_GET_DATA_IDLE_TIMEOUT     921
#define HPI6000_ERROR_GET_DATA_ACK                              922
#define HPI6000_ERROR_GET_DATA_CMD                              923
#define HPI6000_ERROR_GET_DATA_READ                             924
#define HPI6000_ERROR_GET_DATA_IDLECMD                  925

#define HPI6000_ERROR_CONTROL_CACHE_ADDRLEN             931
#define HPI6000_ERROR_CONTROL_CACHE_READ                932
#define HPI6000_ERROR_CONTROL_CACHE_FLUSH               933

#define HPI6000_ERROR_MSG_RESP_GETRESPCMD               941
#define HPI6000_ERROR_MSG_RESP_IDLECMD                  942

// adapter init errors
// 931 - can't access PCI2040
// 932 - can't access DSP HPI i/f
// 933 - can't access internal DSP memory
// 934 - can't access SDRAM - test#1
// 935 - can't access SDRAM - test#2
// 936 - timeout while waiting for DSP code to respond
// 937 -

#endif				// _HPI6000_H_

/////////////////////////////////////////////////////////////////
