original files of m241
This commit is contained in:
@@ -0,0 +1,265 @@
|
||||
/* aimCacheLib.h - AIM header for Cache Functions */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2005, 2008, 2010 Wind River Systems, Inc.
|
||||
*
|
||||
* The right to copy, distribute, modify or otherwise make use
|
||||
* of this software may be licensed only pursuant to the terms
|
||||
* of an applicable Wind River license agreement.
|
||||
*/
|
||||
|
||||
/*
|
||||
modification history
|
||||
--------------------
|
||||
01k,27may10,pad Added 'extern C' statement.
|
||||
01j,27aug08,jpb Renamed VSB header file
|
||||
01i,18jun08,jpb Added include path for kernel configurations options set in
|
||||
vsb.
|
||||
01h,08may08,jpb Modifications for source build. Renamed INCLUDE_MEM_ALLOT to
|
||||
_WRS_CONFIG_MEM_ALLOT.
|
||||
01g,24aug05,h_k converted INCLUDE_CACHE_xxx to arch feature.
|
||||
01f,19jul05,mil Scaled out features for minimal kernel.
|
||||
01e,19nov03,scm flush out cache AIM lock/unlock...
|
||||
01d,22oct03,jb Incorporating changes from inspection
|
||||
01d,24sep03,jb Continuing Development
|
||||
01c,09jun03,jb Continue development
|
||||
01b,01may03,jb Continue development
|
||||
01a,04apr03,jb written
|
||||
*/
|
||||
|
||||
#ifndef __INCaimCacheLibh
|
||||
#define __INCaimCacheLibh
|
||||
|
||||
/* Includes Section */
|
||||
|
||||
#include <vsbConfig.h>
|
||||
|
||||
#include <cacheLib.h>
|
||||
#include <vwModNum.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Defines Section */
|
||||
|
||||
/*
|
||||
* AIM cache errors
|
||||
*/
|
||||
|
||||
/* temporary until vwModNum.h is updated */
|
||||
|
||||
#define M_aimcacheLib (190 << 16)
|
||||
|
||||
enum aimCacheErrors {
|
||||
S_aimCacheLib_UNKNOWN_CACHE_TYPE = (M_aimcacheLib + 1 ),
|
||||
S_aimCacheLib_UNSUPPORTED_CACHE_FUNC,
|
||||
S_aimCacheLib_UNKNOWN_CACHE_OP
|
||||
};
|
||||
|
||||
/* definitions of function argument types */
|
||||
|
||||
#define C_FLG_MASK 0xFFFFFF00 /* Extract function types */
|
||||
#define C_FLG_OP_MASK 0x000000FF /* Extract cache operation */
|
||||
#define C_FLG_NOOP 0x00000100 /* Operation not supported */
|
||||
#define C_FLG_MGMT 0x00000200 /* Management function, enable/disable */
|
||||
#define C_FLG_VIRT 0x00000400 /* Function takes a Virtual Address */
|
||||
#ifdef _WRS_SUPPORT_CACHE_ISPHYSICAL
|
||||
#define C_FLG_PHYS 0x00000800 /* Function takes a Physical Address */
|
||||
#endif /* _WRS_SUPPORT_CACHE_ISPHYSICAL */
|
||||
#ifdef _WRS_SUPPORT_CACHE_ISINDEXED
|
||||
#define C_FLG_IDX_ONED 0x00001000 /* Function operates on a Indexed, */
|
||||
/* one dimensional array */
|
||||
#define C_FLG_IDX_TWOD 0x00002000 /* Function operates on a Indexed, */
|
||||
/* two dimensional array */
|
||||
#endif /* _WRS_SUPPORT_CACHE_ISINDEXED */
|
||||
#define C_FLG_ALL 0x00004000 /* Operates on the entire cache*/
|
||||
#define C_FLG_DISP 0x00008000 /* Flush uses displacement */
|
||||
#ifdef _WRS_SUPPORT_CACHE_LOCK
|
||||
#define C_FLG_LOCKPRTKT 0x00010000 /* Protect locked areas */
|
||||
#endif /* _WRS_SUPPORT_CACHE_LOCK */
|
||||
#define C_FLG_ORDER_RV 0x00020000 /* Reverse calling order from */
|
||||
/* Primary, Secondary, Tertiary */
|
||||
/* when sub caches are */
|
||||
/* supportable by AIM */
|
||||
#define C_FLG_FORCE 0x10000000 /* Top level API must call */
|
||||
/* this directly, this forces a*/
|
||||
/* passthrough to the architecture */
|
||||
/* defined routine */
|
||||
|
||||
/* Flags used within aimCacheLib.c */
|
||||
|
||||
#define CACHE_IS_VTOP 0x00100000 /* Virt to Phys needed */
|
||||
#define CACHE_IS_PTOV 0x00200000 /* Phys to Virt needed */
|
||||
#define CACHE_IS_VIRTUAL 0x00400000 /* The cache op is virtual */
|
||||
#define CACHE_IS_PHYSICAL 0x00800000 /* The cache op is physical */
|
||||
#define CACHE_IS_INDEXED 0x01000000 /* The cache op is indexed */
|
||||
#define CACHE_IS_HARVARD 0x02000000
|
||||
#define CACHE_IS_UNIFIED 0x04000000
|
||||
#define CACHE_IS_MULTISIZE 0x08000000 /* Different line sizes */
|
||||
|
||||
#define CACHE_MODE_MASK ( CACHE_IS_VIRTUAL | CACHE_IS_PHYSICAL | CACHE_IS_INDEXED)
|
||||
|
||||
/* Typedefs Section */
|
||||
|
||||
/*
|
||||
* enumeration of cache types
|
||||
* Note: The initial enumeration is to assure compatibility
|
||||
* with vxWorks 5.X
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CACHE_TYPE_I = _INSTRUCTION_CACHE, /* Instruction Cache */
|
||||
CACHE_TYPE_D = _DATA_CACHE, /* Data Cache */
|
||||
#ifdef _WRS_SUPPORT_CACHE_EXTRA
|
||||
CACHE_TYPE_B = _BRANCH_CACHE, /* Branch Cache */
|
||||
CACHE_TYPE_S, /* Secondary Cache */
|
||||
CACHE_TYPE_T, /* Tertiary Cache */
|
||||
CACHE_TYPE_IL, /* Instruction TLB Cache */
|
||||
CACHE_TYPE_DL, /* Data TLB Cache */
|
||||
CACHE_TYPE_A, /* Alternate Primary Cache */
|
||||
/* Xscale has a "mini-cache" */
|
||||
#endif /* _WRS_SUPPORT_CACHE_EXTRA */
|
||||
|
||||
CACHE_TYPE_MAX_SUPPORTED
|
||||
}CACHETYPES;
|
||||
|
||||
/* enumeration of Primitive functions */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CACHE_OP_NOOP, /* NO OP */
|
||||
CACHE_OP_ENABLE, /* CACHENABLE() */
|
||||
CACHE_OP_DISABLE, /* CACHEDISABLE() */
|
||||
#ifdef _WRS_SUPPORT_CACHE_LOCK
|
||||
CACHE_OP_LOCK, /* CACHELOCK() */
|
||||
CACHE_OP_UNLOCK, /* CACHEUNLOCK() */
|
||||
#endif /* _WRS_SUPPORT_CACHE_LOCK */
|
||||
CACHE_OP_FLUSH, /* CACHEFLUSH() */
|
||||
CACHE_OP_INVALIDATE, /* CACHEINVALIDATE() */
|
||||
CACHE_OP_CLEAR, /* CACHECLEAR() */
|
||||
CACHE_OP_TEXTUPDATE, /* CACHETEXTUPDATE() */
|
||||
CACHE_OP_PIPEFLUSH, /* CACHEPIPEFLUSH() */
|
||||
#ifdef _WRS_SUPPORT_CACHE_XLATE
|
||||
CACHE_OP_DMAVIRTOPHYS, /* VIRTUAL-TO-PHYSICAL TRANSLATION */
|
||||
CACHE_OP_DMAPHYSTOVIRT, /* PHYSICAL-TO-VIRTUAL TRANSLATION */
|
||||
#endif /* _WRS_SUPPORT_CACHE_XLATE */
|
||||
#ifdef _WRS_SUPPORT_CACHE_EXTRA
|
||||
CACHE_OP_FENCE, /* Memory synchronization */
|
||||
CACHE_OP_PREFETCH, /* Prefetch a range of memory */
|
||||
#endif /* _WRS_SUPPORT_CACHE_EXTRA */
|
||||
#ifndef _WRS_CONFIG_MEM_ALLOT
|
||||
CACHE_OP_DMAMALLOC, /* Allocate a dma safe buffer */
|
||||
CACHE_OP_DMAFREE, /* Free buffer allocated via DMAMALLOC */
|
||||
#endif /* !_WRS_CONFIG_MEM_ALLOT */
|
||||
CACHE_OP_ISON, /* Is Cache On */
|
||||
#ifdef _WRS_SUPPORT_CACHE_EXTRA
|
||||
CACHE_OP_EXP_0, /* Architecture specific expansion */
|
||||
CACHE_OP_EXP_1,
|
||||
CACHE_OP_EXP_2,
|
||||
CACHE_OP_LAST = (CACHE_OP_EXP_2 + 3) /* This keeps _ALL functions */
|
||||
/* from overflowing the array */
|
||||
#else /* _WRS_SUPPORT_CACHE_EXTRA */
|
||||
CACHE_OP_LAST = (CACHE_OP_ISON + 3)
|
||||
#endif /* _WRS_SUPPORT_CACHE_EXTRA */
|
||||
} CACHE_OPS;
|
||||
|
||||
/* cache Attributes structure */
|
||||
|
||||
typedef struct cacheAttributes
|
||||
{
|
||||
CACHETYPES cacheType; /* One of CACHETYPES */
|
||||
UINT32 cacheModeDefault; /* copyback, writethrough, etc. */
|
||||
UINT32 cacheModeSupported;/* copyback, writethrough, etc. */
|
||||
UINT32 cacheSize; /* 0 for "not present" */
|
||||
UINT32 lineSize; /* in bytes */
|
||||
UINT32 lineStep; /* increment between cache lines */
|
||||
UINT32 numWays; /* number of way in the cache */
|
||||
UINT32 wayStep; /* increment between cache ways */
|
||||
UINT32 numSegs; /* number of segments in a segmented cache */
|
||||
UINT32 segStep; /* increment between segments */
|
||||
void * cacheBase; /* Index or displacement cache ops */
|
||||
} CACHEATTRIBUTES;
|
||||
|
||||
/* Description of cache primitive */
|
||||
|
||||
typedef struct cacheOp
|
||||
{
|
||||
UINT32 opType; /* From C_FLG defines */
|
||||
FUNCPTR opPtr; /* Pointer to the Primitive */
|
||||
} CACHEOP;
|
||||
|
||||
|
||||
/* Description of a cache or portion of a cache */
|
||||
|
||||
typedef struct cachePrimitive
|
||||
{
|
||||
CACHEATTRIBUTES cacheAttr; /* This could be a pointer */
|
||||
CACHEOP cacheOps[CACHE_OP_LAST];
|
||||
}CACHEPRIMITIVE;
|
||||
|
||||
/*
|
||||
* cacheConfig is the structure that encapsulates a CPU's
|
||||
* cache properties.
|
||||
*/
|
||||
|
||||
typedef struct cacheConfig
|
||||
{
|
||||
UINT32 nCaches; /* Number of caches described in this struct */
|
||||
CACHEPRIMITIVE cachePrimitives[CACHE_TYPE_MAX_SUPPORTED];
|
||||
}CACHECONFIG;
|
||||
|
||||
/* The following data elements are initialized and maintained */
|
||||
/* by the cache AIM based on the data passed to it via the */
|
||||
/* CACHECONFIG structure */
|
||||
|
||||
/*
|
||||
* Cache attributes structure for use in cacheAimInfo.
|
||||
*/
|
||||
|
||||
typedef struct cacheGlobalAttr
|
||||
{
|
||||
UINT32 cacheExists; /* Indicates that this entry in the array is valid */
|
||||
UINT32 cacheType; /* Type of cache, I,D */
|
||||
UINT32 cacheSize; /* Size in bytes of this cache */
|
||||
UINT32 cacheLineSize; /* Line size for this cache */
|
||||
UINT32 cacheModes; /* Modes supported by this cache */
|
||||
UINT32 cacheModeCurrent; /* Current mode of this cache */
|
||||
}CACHEGLOBALATTR;
|
||||
|
||||
/*
|
||||
* Lock database structure.
|
||||
* Keeps track of locked areas, facilitating the protection of locked areas
|
||||
* from invalidates. The Lock database uses virtual addresses, a flat memory
|
||||
* model allows this.
|
||||
*
|
||||
* Dynamically allocated by the AIM for lock management.
|
||||
*/
|
||||
|
||||
typedef struct cacheLockNode *lockNodePtr;
|
||||
typedef struct cacheLockNode
|
||||
{
|
||||
lockNodePtr pNext;
|
||||
lockNodePtr pPrev;
|
||||
UINT32 cacheLockStart;
|
||||
UINT32 cacheLockEnd;
|
||||
}CACHELOCKNODE;
|
||||
|
||||
/* Globally visible array of attributes */
|
||||
|
||||
extern CACHEGLOBALATTR cacheAimInfo[CACHE_TYPE_MAX_SUPPORTED];
|
||||
|
||||
extern UINT32 cacheLineSize; /* Cache line size. Used for alignment */
|
||||
extern UINT32 cacheAddrAlign; /* Increment for address alignment */
|
||||
extern UINT32 cacheLineMask; /* Mask to align to a cache line */
|
||||
|
||||
/* Forward Declarations */
|
||||
|
||||
STATUS aimCacheInit ( CACHECONFIG * cacheConfig );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCaimCacheLibh */
|
||||
Reference in New Issue
Block a user