159 lines
5 KiB
C
159 lines
5 KiB
C
/*
|
|
* dspbridge/mpu_api/inc/cmmdefs.h
|
|
*
|
|
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
|
|
*
|
|
* Copyright (C) 2007 Texas Instruments, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published
|
|
* by the Free Software Foundation version 2.1 of the License.
|
|
*
|
|
* This program is distributed .as is. WITHOUT ANY WARRANTY of any kind,
|
|
* whether express or implied; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*/
|
|
|
|
|
|
/*
|
|
* ======== cmmdefs.h ========
|
|
* Purpose:
|
|
* Global MEM constants and types.
|
|
*
|
|
*! Revision History:
|
|
*! ================
|
|
*! 12-Nov-2001 ag CMM_KERNMAPTYPE added for dsp<->device process addr map'n.
|
|
*! This allows addr conversion from drvr process <-> DSP addr.
|
|
*! 29-Aug-2001 ag Added CMM_ALLSEGMENTS.
|
|
*! 08-Dec-2000 ag Added bus address conversion type CMM_POMAPEMIF2DSPBUS.
|
|
*! 05-Dec-2000 ag Added default CMM_DEFLTCONVFACTOR & CMM_DEFLTDSPADDROFFSET.
|
|
*! 29-Oct-2000 ag Added converstion factor for GPP DSP Pa translation.
|
|
*! 15-Oct-2000 ag Added address translator attributes and defaults.
|
|
*! 12-Jul-2000 ag Created.
|
|
*/
|
|
|
|
#ifndef CMMDEFS_
|
|
#define CMMDEFS_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <list.h>
|
|
|
|
/* Cmm attributes used in CMM_Create() */
|
|
struct CMM_MGRATTRS {
|
|
ULONG ulMinBlockSize; /* Minimum SM allocation; default 32 bytes. */
|
|
};
|
|
|
|
/* Attributes for CMM_AllocBuf() & CMM_AllocDesc() */
|
|
struct CMM_ATTRS {
|
|
ULONG ulSegId; /* 1,2... are SM segments. 0 is not. */
|
|
ULONG ulAlignment; /* 0,1,2,4....ulMinBlockSize */
|
|
} ;
|
|
|
|
/*
|
|
* DSPPa to GPPPa Conversion Factor.
|
|
*
|
|
* For typical platforms:
|
|
* converted Address = PaDSP + ( cFactor * addressToConvert).
|
|
*/
|
|
typedef enum {
|
|
CMM_SUBFROMDSPPA = -1,
|
|
CMM_POMAPEMIF2DSPBUS = 0, /* PreOMAP is special case: not simple offset */
|
|
CMM_ADDTODSPPA = 1
|
|
} CMM_CNVTTYPE;
|
|
|
|
#define CMM_DEFLTDSPADDROFFSET 0
|
|
#define CMM_DEFLTCONVFACTOR CMM_POMAPEMIF2DSPBUS /* PreOMAP DSPBUS<->EMIF */
|
|
#define CMM_ALLSEGMENTS 0xFFFFFF /* All SegIds */
|
|
#define CMM_MAXGPPSEGS 1 /* Maximum # of SM segs */
|
|
|
|
/*
|
|
* SMSEGs are SM segments the DSP allocates from.
|
|
*
|
|
* This info is used by the GPP to xlate DSP allocated PAs.
|
|
*/
|
|
struct CMM_SMSEG {
|
|
DWORD dwSMBasePA; /* Physical SM Base address(GPP). */
|
|
ULONG ulTotalSizePA; /* Size of SM segment in GPP bytes. */
|
|
DWORD dwPAPAConvert; /* DSP PA to GPP PA Conversion. */
|
|
CMM_CNVTTYPE cFactor; /* CMM_ADDTOPA=1, CMM_SUBFROMPA=-1 */
|
|
} ;
|
|
|
|
/* Fixed size memory descriptor */
|
|
struct CMM_FDESC {
|
|
struct LST_ELEM link; /* must be 1st element */
|
|
DWORD dwPA;
|
|
DWORD dwVA;
|
|
DWORD dwSize;
|
|
DWORD dwAttrs; /* [31-1 reserved ][0 - SM] */
|
|
} ;
|
|
|
|
struct CMM_SEGINFO {
|
|
DWORD dwSegBasePa; /* Start Phys address of SM segment */
|
|
ULONG ulTotalSegSize; /* Total size in bytes of segment: DSP+GPP */
|
|
DWORD dwGPPBasePA; /* Start Phys addr of Gpp SM seg */
|
|
ULONG ulGPPSize; /* Size of Gpp SM seg in bytes */
|
|
DWORD dwDSPBaseVA; /* DSP virt base byte address */
|
|
ULONG ulDSPSize; /* DSP seg size in bytes */
|
|
ULONG ulInUseCnt; /* # of current GPP allocations from this segment */
|
|
DWORD dwSegBaseVa; /* Start Virt address of SM seg */
|
|
|
|
} ;
|
|
|
|
/* CMM useful information */
|
|
struct CMM_INFO {
|
|
ULONG ulNumGPPSMSegs; /* # of SM segments registered with this Cmm. */
|
|
ULONG ulTotalInUseCnt; /* Total # of allocations outstanding for CMM */
|
|
/* Min SM block size allocation from CMM_Create() */
|
|
ULONG ulMinBlockSize;
|
|
/* Info per registered SM segment. */
|
|
struct CMM_SEGINFO segInfo[CMM_MAXGPPSEGS];
|
|
} ;
|
|
|
|
/* XlatorCreate attributes */
|
|
struct CMM_XLATORATTRS {
|
|
ULONG ulSegId; /* segment Id used for SM allocations */
|
|
DWORD dwDSPBufs; /* # of DSP-side bufs */
|
|
DWORD dwDSPBufSize; /* size of DSP-side bufs in GPP bytes */
|
|
PVOID pVmBase; /* Vm base address alloc'd in client process context */
|
|
DWORD dwVmSize; /* dwVmSize must be >= (dwMaxNumBufs * dwMaxSize) */
|
|
} ;
|
|
|
|
/* Descriptor attributes */
|
|
typedef enum {
|
|
CMM_LOCAL = 0, /* Bit 0 =0 is local memory from default heap */
|
|
CMM_SHARED = 1, /* Bit 0 =1 descriptor is SM */
|
|
/* Bits 1- 31 RESERVED for future use */
|
|
} CMM_DESCTYPE;
|
|
|
|
/*
|
|
* Cmm translation types. Use to map SM addresses to process context.
|
|
*/
|
|
typedef enum {
|
|
CMM_VA2PA = 0, /* Virtual to GPP physical address xlation */
|
|
CMM_PA2VA = 1, /* GPP Physical to virtual */
|
|
CMM_VA2DSPPA = 2, /* Va to DSP Pa */
|
|
CMM_PA2DSPPA = 3, /* GPP Pa to DSP Pa */
|
|
CMM_DSPPA2PA = 4, /* DSP Pa to GPP Pa */
|
|
} CMM_XLATETYPE;
|
|
|
|
/*
|
|
* Used to "map" between device process virt addr and dsp addr.
|
|
*/
|
|
typedef enum {
|
|
CMM_KERNVA2DSP = 0, /* Device process context to dsp address. */
|
|
CMM_DSP2KERNVA = 1, /* Dsp address to device process context. */
|
|
} CMM_KERNMAPTYPE;
|
|
|
|
struct CMM_OBJECT;
|
|
/*typedef struct CMM_OBJECT *CMM_HMGR;*/
|
|
struct CMM_XLATOROBJECT;
|
|
/*typedef struct CMM_XLATOROBJECT *CMM_HXLATOR;*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* CMMDEFS_ */
|