173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  you may not use this file except in compliance with the License.
673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  You may obtain a copy of the License at
773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  See the License for the specific language governing permissions and
1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  limitations under the License.
1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== cmmdefs.h ========
2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  DSP-BIOS Bridge driver support functions for TI OMAP processors.
2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Global MEM constants and types.
2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History:
2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================
2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 12-Nov-2001 ag  CMM_KERNMAPTYPE added for dsp<->device process addr map'n.
2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 This allows addr conversion from drvr process <-> DSP addr.
2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 29-Aug-2001 ag  Added CMM_ALLSEGMENTS.
2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 08-Dec-2000 ag  Added bus address conversion type CMM_POMAPEMIF2DSPBUS.
3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 05-Dec-2000 ag  Added default CMM_DEFLTCONVFACTOR & CMM_DEFLTDSPADDROFFSET.
3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 29-Oct-2000 ag  Added converstion factor for GPP DSP Pa translation.
3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 15-Oct-2000 ag  Added address translator attributes and defaults.
3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 12-Jul-2000 ag  Created.
3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef CMMDEFS_
3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define CMMDEFS_
3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus
4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern "C" {
4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <list.h>
4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* Cmm attributes used in CMM_Create() */
4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_MGRATTRS {
4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulMinBlockSize;	/* Minimum SM allocation; default 32 bytes.  */
4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	};
4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* Attributes for CMM_AllocBuf() & CMM_AllocDesc() */
5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_ATTRS {
5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulSegId;	/*  1,2... are SM segments. 0 is not. */
5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulAlignment;	/*  0,1,2,4....ulMinBlockSize */
5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  DSPPa to GPPPa Conversion Factor.
5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  For typical platforms:
6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      converted Address = PaDSP + ( cFactor * addressToConvert).
6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	typedef enum {
6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_SUBFROMDSPPA = -1,
6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_POMAPEMIF2DSPBUS = 0,	/* PreOMAP is special case: not simple offset */
6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_ADDTODSPPA = 1
6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} CMM_CNVTTYPE;
6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define CMM_DEFLTDSPADDROFFSET  0
6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define CMM_DEFLTCONVFACTOR     CMM_POMAPEMIF2DSPBUS	/* PreOMAP DSPBUS<->EMIF */
7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define CMM_ALLSEGMENTS         0xFFFFFF	/* All SegIds */
7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define CMM_MAXGPPSEGS          1	/* Maximum # of SM segs */
7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  SMSEGs are SM segments the DSP allocates from.
7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  This info is used by the GPP to xlate DSP allocated PAs.
7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	 struct CMM_SMSEG {
7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwSMBasePA;	/* Physical SM Base address(GPP). */
8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulTotalSizePA;	/* Size of SM segment in GPP bytes. */
8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwPAPAConvert;	/* DSP PA to GPP PA Conversion.  */
8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_CNVTTYPE cFactor;	/* CMM_ADDTOPA=1, CMM_SUBFROMPA=-1 */
8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* Fixed size memory descriptor */
8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	 struct CMM_FDESC {
8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		struct LST_ELEM link;	/* must be 1st element */
8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwPA;
8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwVA;
9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwSize;
9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwAttrs;	/*  [31-1 reserved ][0 - SM]  */
9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_SEGINFO {
9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwSegBasePa;	/* Start Phys address of SM segment */
9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulTotalSegSize;	/* Total size in bytes of segment: DSP+GPP */
9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwGPPBasePA;	/* Start Phys addr of Gpp SM seg */
9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulGPPSize;	/* Size of Gpp SM seg in bytes */
9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwDSPBaseVA;	/* DSP virt base byte address */
10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulDSPSize;	/* DSP seg size in bytes */
10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulInUseCnt;	/* # of current GPP allocations from this segment */
10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwSegBaseVa;	/* Start Virt address of SM seg */
10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* CMM useful information */
10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_INFO {
10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulNumGPPSMSegs;	/* # of SM segments registered with this Cmm. */
10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulTotalInUseCnt;	/* Total # of allocations outstanding for CMM */
11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Min SM block size allocation from CMM_Create() */
11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulMinBlockSize;
11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Info per registered SM segment. */
11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		struct CMM_SEGINFO segInfo[CMM_MAXGPPSEGS];
11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* XlatorCreate attributes */
11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_XLATORATTRS {
11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		ULONG ulSegId;	/* segment Id used for SM allocations */
11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwDSPBufs;	/* # of DSP-side bufs */
12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwDSPBufSize;	/* size of DSP-side bufs in GPP bytes */
12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		PVOID pVmBase;	/* Vm base address alloc'd in client process context */
12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DWORD dwVmSize;	/* dwVmSize must be >= (dwMaxNumBufs * dwMaxSize) */
12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} ;
12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* Descriptor attributes */
12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	typedef enum {
12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_LOCAL = 0,	/* Bit 0 =0 is local memory from default heap */
12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_SHARED = 1,	/* Bit 0 =1 descriptor is SM */
12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Bits 1- 31 RESERVED for future use */
13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} CMM_DESCTYPE;
13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Cmm translation types. Use to map SM addresses to process context.
13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	typedef enum {
13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_VA2PA = 0,	/* Virtual to GPP physical address xlation */
13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_PA2VA = 1,	/* GPP Physical to virtual  */
13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_VA2DSPPA = 2,	/* Va to DSP Pa  */
13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_PA2DSPPA = 3,	/* GPP Pa to DSP Pa */
14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_DSPPA2PA = 4,	/* DSP Pa to GPP Pa */
14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} CMM_XLATETYPE;
14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Used to "map" between device process virt addr and dsp addr.
14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	typedef enum {
14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_KERNVA2DSP = 0,	/* Device process context to dsp address. */
14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		CMM_DSP2KERNVA = 1,	/* Dsp address to device process context. */
14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} CMM_KERNMAPTYPE;
15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_OBJECT;
15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	/*typedef struct CMM_OBJECT *CMM_HMGR;*/
15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_XLATOROBJECT;
15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	/*typedef struct CMM_XLATOROBJECT *CMM_HXLATOR;*/
15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus
15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif				/* CMMDEFS_ */
160