Initial import of NFC GNSS SDK project
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
/*------------------------------------------------------------
|
||||
(C) Copyright [2006-2008] Marvell International Ltd.
|
||||
All Rights Reserved
|
||||
------------------------------------------------------------*/
|
||||
|
||||
/* ###########################################################################
|
||||
### Intel Confidential
|
||||
### Copyright (c) Intel Corporation 1995-2001
|
||||
### All Rights Reserved.
|
||||
### -------------------------------------------------------------------------
|
||||
### Package: MMU
|
||||
###
|
||||
### Module: Mmu.h - API definitions for MMU package
|
||||
###
|
||||
### $Archive: /MMU/INC/Mmu_api.h $
|
||||
### $Revision: 80 $
|
||||
### $Date: 8/01/02
|
||||
### $Author: Irit Studniberg
|
||||
### $NoKeywords $
|
||||
###########################################################################*/
|
||||
|
||||
#ifndef _MMU_H
|
||||
#define _MMU_H
|
||||
|
||||
#include "gbl_types.h"
|
||||
|
||||
// Define MMU attributes (can be or-combined)
|
||||
// Please, do not alter the values
|
||||
#define MMU_ATT_CACHEABLE 0x0002
|
||||
#define MMU_ATT_BUFFERABLE 0x0001
|
||||
|
||||
#define MMU_ATT_CACH_BUFFER_WTHROUGH MMU_ATT_CACHEABLE
|
||||
#define MMU_ATT_NO_CACH_BUFFER MMU_ATT_BUFFERABLE
|
||||
#define MMU_ATT_CACHE_COPYBACK (MMU_ATT_CACHEABLE|MMU_ATT_BUFFERABLE)
|
||||
#define MMU_ATT_NO_CACH_NO_BUFFER 0x0000
|
||||
#define MMU_ATT_X_BIT 0x0010
|
||||
|
||||
#define MMU_ATT_WRITE_PERMISSION 0x0008
|
||||
#define MMU_ATT_READ_PERMISSION 0x0004
|
||||
#define MMU_ATT_READ_WRITE_PERMISSION 0x000C
|
||||
#define MMU_ATT_NOACCESS 0x0020
|
||||
|
||||
#define MMU_ATT_DEFAULT (MMU_ATT_C | MMU_ATT_B)
|
||||
#define MMU_ATT_IO 0 // C=0, B=0
|
||||
|
||||
// Size constants
|
||||
#define _1KB (0x400)
|
||||
#define _4KB (0x1000)
|
||||
#define _16KB (0x4000)
|
||||
#define _32KB (0x8000)
|
||||
#define _64KB (0x10000)
|
||||
#define _128KB (0x20000)
|
||||
#define _256KB (0x40000)
|
||||
#define _512KB (0x80000)
|
||||
|
||||
|
||||
#define _1MB (0x00100000)
|
||||
#define _2MB (0x00200000)
|
||||
#define _3MB (0x00300000)
|
||||
#define _4MB (0x00400000)
|
||||
#define _8MB (0x00800000)
|
||||
#define _16MB (0x01000000)
|
||||
#define _32MB (0x02000000)
|
||||
#define _48MB (0x03000000)
|
||||
#define _56MB (0x03800000)
|
||||
#define _64MB (0x04000000)
|
||||
#define _128MB (0x08000000)
|
||||
#define _256MB (0x10000000)
|
||||
#define _512MB (0x20000000)
|
||||
#define _1GB (0x40000000)
|
||||
|
||||
#define CACHELINESIZE (0x20)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 ic; // I-Cache size (bytes)
|
||||
UINT16 dc; // D-Cache size (bytes)
|
||||
UINT16 minidc; // Mini D-Cache size (bytes)
|
||||
}MMU_CacheSize;
|
||||
|
||||
|
||||
typedef UINT32 Attribs_Mmu;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MMU_ENABLE,
|
||||
MMU_DISABLE
|
||||
} MMU_STATUS;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MMU_RC_OK,
|
||||
MMU_RC_ERROR,
|
||||
MMU_RC_MAPPING_ERROR,
|
||||
MMU_RC_WRONG_ALIGNMENT,
|
||||
MMU_RC_NOFREETABLE,
|
||||
MMU_RC_VIRTUAL_ADDRESS_EXIST
|
||||
} MMU_ReturnCode;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SECTION,
|
||||
PAGE64K,
|
||||
PAGE4K,
|
||||
PAGE1K
|
||||
}MEM_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
_DOMAIN_0,
|
||||
_DOMAIN_1,
|
||||
_DOMAIN_2,
|
||||
_DOMAIN_3,
|
||||
_DOMAIN_4,
|
||||
_DOMAIN_5,
|
||||
_DOMAIN_6,
|
||||
_DOMAIN_7,
|
||||
_DOMAIN_8,
|
||||
_DOMAIN_9,
|
||||
_DOMAIN_10,
|
||||
_DOMAIN_11,
|
||||
_DOMAIN_12,
|
||||
_DOMAIN_13,
|
||||
_DOMAIN_14,
|
||||
_DOMAIN_15
|
||||
}_DOMAIN;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MMU_VECTORS_LOW,
|
||||
MMU_VECTORS_HIGH
|
||||
} MMU_VECTORS_LOCATION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 Domain_access_control;
|
||||
BOOL MMU_status;
|
||||
BOOL DCache_status;
|
||||
BOOL ICache_status;
|
||||
BOOL Alignment_status;
|
||||
BOOL S_status;
|
||||
BOOL R_status;
|
||||
BOOL Write_Buffer_Coalescing;
|
||||
BOOL BTB_status;
|
||||
BOOL MiniDC_WriteBack;
|
||||
BOOL MiniDC_WriteAllocate;
|
||||
}MMU_CONFIGURE;
|
||||
|
||||
#define MMU_DOMAIN_ACCESS_CHECK_PERMISSIONS 0x55555555 //all domains
|
||||
#define MMU_DOMAIN_ACCESS_NO_PERMISSIONS 0xFFFFFFFF //all domains
|
||||
|
||||
// Minimal of 17KB space is required for MMU data and the primary table (allows 1MB resolution only)
|
||||
// More space allows page mapping (4KB and 64KB resolution) with cost of 1K table space per 1MB of virtual address space
|
||||
#define MMU_MIN_TABLE_SPACE 0x4400
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 Error_address;
|
||||
UINT16 Error_reason;
|
||||
UINT8 Domain;
|
||||
}MMU_ERROR_STATUS;
|
||||
|
||||
typedef void (* mmuNotifyEventFunc)(MMU_ERROR_STATUS mmuErrorHandle);
|
||||
|
||||
|
||||
//
|
||||
// System level services
|
||||
//
|
||||
// MMU
|
||||
MMU_ReturnCode mmuInit(UINT32 mmuTablesSpace,UINT32 mmuTableSpaceSize, const MMU_CONFIGURE* configuration );
|
||||
UINT32 mmuGetTableAreaSize(void);
|
||||
MMU_ReturnCode mmuEnable(void);
|
||||
MMU_ReturnCode mmuDisable(void);
|
||||
MMU_ReturnCode mmuConfigure (const MMU_CONFIGURE* configure);
|
||||
MMU_ReturnCode mmuConfigurationGet (MMU_CONFIGURE* configure);
|
||||
UINT32 mmuDomainAccessControlGet(void);
|
||||
void mmuDomainAccessControlSet(UINT32 value);
|
||||
UINT32 mmuProtectionDisable(void);
|
||||
void mmuProtectionRestore(UINT32 value);
|
||||
|
||||
void mmuSetVectorsLocation(MMU_VECTORS_LOCATION vLoc);
|
||||
|
||||
// Query the actual cache size
|
||||
const MMU_CacheSize* mmuCacheSizeGet(void);
|
||||
|
||||
|
||||
// D-cache
|
||||
MMU_ReturnCode mmuDataCacheEnable(void);
|
||||
MMU_ReturnCode mmuDataCacheDisable(void);
|
||||
MMU_ReturnCode mmuFullDataCacheInvalidate (void);
|
||||
#define mmuFullDataCacheFlash mmuFullDataCacheClean
|
||||
#if defined (L2_CACHE_ENABLE)&& defined(CREATE_L2_RAM)
|
||||
#define mmuFullDataCacheClean DCacheGloballyClean
|
||||
#endif //(L2_CACHE_ENABLE)&&(CREATE_L2_RAM)
|
||||
MMU_ReturnCode mmuFullDataCacheClean(void);
|
||||
MMU_ReturnCode mmuFullDataCacheUnLock (void);
|
||||
#define mmuDataCacheUnLock mmuFullDataCacheUnLock
|
||||
|
||||
// I-cache
|
||||
MMU_ReturnCode mmuInstructionCacheEnable(void);
|
||||
MMU_ReturnCode mmuInstructionCacheDisable(void);
|
||||
MMU_ReturnCode mmuFullInstructionCacheUnLock (void);
|
||||
MMU_ReturnCode mmuFullInstructionCacheInvalidate (void);
|
||||
|
||||
//
|
||||
// Other actions
|
||||
//
|
||||
MMU_ReturnCode mmuBTBInvalidate(void);
|
||||
MMU_ReturnCode mmuDrainBuffers(void);
|
||||
|
||||
//
|
||||
// Cache services (per virtual address, 1 cache line resolution)
|
||||
//
|
||||
|
||||
// D-cache
|
||||
MMU_ReturnCode mmuDataCacheClean (UINT32 address, UINT32 size);
|
||||
#define mmuDataCacheFlash mmuDataCacheClean
|
||||
MMU_ReturnCode mmuDataCacheInvalidate (UINT32 address, UINT32 size);
|
||||
// For misaligned cases: flushes cache-lines that partly belong to the given area
|
||||
MMU_ReturnCode mmuDataCacheInvalidateSafe(UINT32 p, UINT32 size);
|
||||
MMU_ReturnCode mmuDataCacheCleanInvalidate (UINT32 address, UINT32 size);
|
||||
MMU_ReturnCode mmuDataCacheLock (UINT32 address, UINT32 size);
|
||||
|
||||
// I-cache
|
||||
MMU_ReturnCode mmuInstructionCacheInvalidate (UINT32 address, UINT32 size);
|
||||
MMU_ReturnCode mmuInstructionCacheLock (UINT32 address, UINT32 size);
|
||||
|
||||
//
|
||||
// Mapping and address translation services
|
||||
//
|
||||
|
||||
int mmuMap(UINT32 virt, UINT32 ph, UINT32 sz, Attribs_Mmu att);
|
||||
MMU_ReturnCode mmuMemoryMapping (UINT32 mmu_virtualAddress, UINT32 mmu_physicalAddress, UINT32 mmu_size, MEM_type mmu_MemType, Attribs_Mmu attributes,_DOMAIN domain);
|
||||
MMU_ReturnCode mmuMemoryMappingAutoExt (UINT32 virtualAddress, UINT32 physicalAddress, UINT32 size, Attribs_Mmu attributes,_DOMAIN domain);
|
||||
#define mmuMemoryMappingAuto(v,p,s,a) mmuMemoryMappingAutoExt(v,p,s,a,_DOMAIN_15) //default domain is set
|
||||
//
|
||||
// Address translation services
|
||||
//
|
||||
UINT32 mmuVirtualToPhysicalTranslate(UINT32 VirtualAddress);
|
||||
UINT32 mmuPhysicalToVirtualTranslate(UINT32 PhysicalAddress);
|
||||
//alias
|
||||
void* VirtualToPhysical(void* inAddress);
|
||||
|
||||
#endif // _MMU_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user