Files
vxWorks/h/vmLib.h
2025-08-20 18:25:46 +08:00

228 lines
8.1 KiB
C

/* vmLib.h - header for architecture independent mmu interface */
/*
* Copyright (c) 1984-2005 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
--------------------
02j,11aug05,zl move init routines to future non-public section.
02i,15apr05,zl added S_vmLib_FUNCTION_UNSUPPORTED.
02h,07feb05,zl removed inclusion of private header files
02g,22oct04,pch SPR 102912: add #ifndef _ASMLANGUAGE
02f,14oct04,pcs Change VM_STATE_GUARDED_NOT & VM_STATE_MEM_COHERENCY_NOT from
MMU_ATTR_CACHE_DEFAULT to 0.
02e,30sep04,rlg undo false checkin - return cache state bits to proper
settings
02d,12oct04,pcs Remove protectSemId from struct vm_context, since it is not
being used.
02c,29sep04,pcs Change VM_STATE_CACHEABLE,VM_STATE_MEM_COHERANCY_NOT &
VM_STATE_GUARDED_NOT from MMU_ATTR_CACHE_COPYBACK to
VM_ATTR_CACHE_DEFAULT.
02b,11jun04,pcs Rename MMU_ATTR_CACHE_IO to MMU_ATTR_CACHE_GUARDED.
02a,11may04,tam added S_vmLib_KERNEL_TEXT_NOT_ALIGNED
01z,03may04,pcs Add prototypes for optimize/lock/unlock .
01y,17dec03,zmm Change VM_STATE_WBACK definitions.
01x,26sep03,scm fix for vmLib prototypes...
01w,17sep03,scm x-bit support...
01v,04sep03,pcs Add SEM_ID protectSemId; to struct vm_context.
01u,09jul03,pcs change physicalAddr to type PHYS_ADDR from void *
01t,08may03,pes PAL conditional compilation cleanup. Phase 2.
01s,14mar03,dcc moved VM_CONTEXT_ID definition to types/vxWind.h
01r,26jul01,scm add extended small page table support for XScale...
01q,13nov98,jpd added vmMpuLib routine definitions and new error numbers.
01p,09apr98,hdn added support for Pentium and PentiumPro.
01o,09mar98,jpd added extra ARM VM_STATEs.
01n,28nov96,jpd added comment about VM_STATE_CACHEABLE_WRITETHROUGH for
ARM710A as well as MC68040.
01m,01jan96,tpr changed value of the PPC specific macro.
01l,18sep95,tpr added VM_STATE_MASK_MEM_COHERENCY, VM_STATE_MASK_GUARDED,
VM_STATE_MASK_GUARDED and VM_STATE_MASK_EXECUTE for powerPc.
01k,26jul94,tpr added VM_STATE_CACHEABLE_NOT_IMPRECISE for MC68060.
01j,09feb93,rdc added prototypes for vmBaseStateSet and vmBasePageSizeGet;
01i,19oct92,pme replaced _STDC__ by __STDC__.
01h,19oct92,jcf cleanup. added vmContextDelete() prototype.
01g,22sep92,rrr added support for c++
01f,22sep92,rdc changed prototype for vmGlobalInfoGet.
Added prototype for vmPageBlockSizeGet.
Added support for sun1e.
01e,30jul92,rdc added prototype for vmContextShow.
01d,28jul92,rdc added non-ansi function prototypes and prototypes for
vmBaseLib.c and vmShow.c.
01c,13jul92,rdc moved private data structures to vmLibP.h.
01b,09jul92,rdc added VM_LIB_INFO and PHYS_MEM_DESC.
01a,08jul92,rdc written.
*/
#ifndef __INCvmLibh
#define __INCvmLibh
#ifdef __cplusplus
extern "C" {
#endif
#include <vxWorks.h>
#include <mmuLib.h>
#include <mmuAttr.h>
/* status codes */
#define S_vmLib_NOT_PAGE_ALIGNED (M_vmLib | 1)
#define S_vmLib_BAD_STATE_PARAM (M_vmLib | 2)
#define S_vmLib_BAD_MASK_PARAM (M_vmLib | 3)
#define S_vmLib_ADDR_IN_GLOBAL_SPACE (M_vmLib | 4)
#define S_vmLib_TEXT_PROTECTION_UNAVAILABLE (M_vmLib | 5)
#define S_vmLib_KERNEL_TEXT_NOT_ALIGNED (M_vmLib | 6)
#define S_vmLib_FUNCTION_UNSUPPORTED (M_vmLib | 7)
/*
* The VM_STATE_XXX macros have been redefined to use the MMU_ATTR_XXX
* macros defined in vmLibCommon.h; use of the VM_STATE_XXX macros should
* be avoided.
*/
#define VM_STATE_MASK_VALID MMU_ATTR_VALID_MSK
#define VM_STATE_MASK_WRITABLE MMU_ATTR_PROT_MSK
#define VM_STATE_MASK_CACHEABLE MMU_ATTR_CACHE_MSK
#define VM_STATE_VALID MMU_ATTR_VALID
#define VM_STATE_VALID_NOT MMU_ATTR_VALID_NOT
#define VM_STATE_WRITABLE MMU_ATTR_SUP_RWX
#define VM_STATE_WRITABLE_NOT (MMU_ATTR_PROT_SUP_READ | \
MMU_ATTR_PROT_SUP_EXE)
#define VM_STATE_CACHEABLE MMU_ATTR_CACHE_DEFAULT
#define VM_STATE_CACHEABLE_NOT MMU_ATTR_CACHE_OFF
#define VM_STATE_CACHEABLE_WRITETHROUGH MMU_ATTR_CACHE_WRITETHRU
/* additional cache states for PowerPC arch. */
#define VM_STATE_MASK_MEM_COHERENCY MMU_ATTR_CACHE_MSK
#define VM_STATE_MEM_COHERENCY MMU_ATTR_CACHE_COHERENCY
#define VM_STATE_MEM_COHERENCY_NOT 0
#define VM_STATE_MASK_GUARDED MMU_ATTR_CACHE_MSK
#define VM_STATE_GUARDED MMU_ATTR_CACHE_GUARDED
#define VM_STATE_GUARDED_NOT 0
/* additional cache states for i86 arch */
#define VM_STATE_WBACK MMU_ATTR_CACHE_COPYBACK
#define VM_STATE_WBACK_NOT MMU_ATTR_CACHE_WRITETHRU
#define VM_STATE_MASK_WBACK VM_STATE_MASK_MEM_COHERENCY
#define VM_STATE_MASK_GLOBAL MMU_ATTR_SPL_MSK
#define VM_STATE_GLOBAL MMU_ATTR_SPL_0
#define VM_STATE_GLOBAL_NOT 0
/* additional cache states for ARM/XScale arch. */
#define VM_STATE_MASK_BUFFERABLE (MMU_ATTR_CACHE_MSK | MMU_ATTR_SPL_MSK)
#define VM_STATE_BUFFERABLE (MMU_ATTR_SPL_0)
#define VM_STATE_BUFFERABLE_NOT 0x00
#if (CPU == XSCALE)
#define VM_STATE_MASK_EX_CACHEABLE (MMU_ATTR_CACHE_MSK | MMU_ATTR_SPL_MSK)
#define VM_STATE_NO_COALESCE (MMU_ATTR_SPL_2 | MMU_ATTR_CACHE_OFF)
#define VM_STATE_WRITEALLOCATE (MMU_ATTR_SPL_3 | MMU_ATTR_CACHE_COPYBACK)
#define VM_STATE_CACHEABLE_MINICACHE (MMU_ATTR_SPL_1)
#define VM_STATE_EX_CACHEABLE_NOT 0x00
/* backwards compatability for vxWorks 5.5 */
#define VM_STATE_MASK_EX_BUFFERABLE VM_STATE_MASK_EX_CACHEABLE
#define VM_STATE_EX_BUFFERABLE VM_STATE_NO_COALESCE
#define VM_STATE_EX_CACHEABLE VM_STATE_WRITEALLOCATE
#define VM_STATE_EX_BUFFERABLE_NOT VM_STATE_EX_CACHEABLE_NOT
#else
/* additional cache states for ARM SA-1100 */
#define VM_STATE_CACHEABLE_MINICACHE 0x30
#endif
#ifndef _ASMLANGUAGE
/*
* physical memory descriptor is used to map virtual memory in sysLib
* and usrConfig.
*/
typedef struct phys_mem_desc
{
VIRT_ADDR virtualAddr; /* block virtual address */
PHYS_ADDR physicalAddr; /* block physical address */
UINT len; /* block length */
UINT initialStateMask; /* mask parameter to vmStateSet */
UINT initialState; /* state parameter to vmStateSet */
} PHYS_MEM_DESC;
IMPORT PHYS_MEM_DESC sysPhysMemDesc[];
IMPORT int sysPhysMemDescNumEnt;
/* function declarations */
extern STATUS vmStateSet (VM_CONTEXT_ID context, VIRT_ADDR pVirtual,
int len, UINT stateMask, UINT state);
extern STATUS vmStateGet (VM_CONTEXT_ID context, VIRT_ADDR pageAddr,
UINT *state);
extern STATUS vmMap (VM_CONTEXT_ID context, VIRT_ADDR virtualAddr,
PHYS_ADDR physicalAddr, UINT len);
extern STATUS vmTranslate (VM_CONTEXT_ID context, VIRT_ADDR virtualAddr,
PHYS_ADDR *physicalAddr);
extern STATUS vmPhysTranslate (VM_CONTEXT_ID context, PHYS_ADDR physicalAddr,
VIRT_ADDR *virtualAddr );
extern int vmPageSizeGet ();
extern STATUS vmTextProtect (BOOL setState);
extern STATUS vmBufferWrite (VM_CONTEXT_ID vmCtx, VIRT_ADDR fromAddr,
VIRT_ADDR toAddr, UINT nbBytes);
extern STATUS vmPageOptimize (VM_CONTEXT_ID context, VIRT_ADDR virtualAddr,
UINT len, UINT option);
extern STATUS vmPageLock (VM_CONTEXT_ID context, VIRT_ADDR virtualAddr,
UINT len, UINT option);
extern STATUS vmPageUnlock (VM_CONTEXT_ID context, VIRT_ADDR virtualAddr);
extern STATUS vmContextShow (VM_CONTEXT_ID context);
/* APIs being deprecated */
extern VM_CONTEXT_ID vmBaseGlobalMapInit (PHYS_MEM_DESC * pMemDescArray,
int numDescArrayElements,
BOOL enable, int cacheDefault)
_WRS_DEPRECATED("Use vmGlobalMap instead");
extern STATUS vmBaseStateSet (VM_CONTEXT_ID context,
VIRT_ADDR pVirtual,
int len, UINT stateMask, UINT state)
_WRS_DEPRECATED ("use vmStateSet instead") ;
extern int vmBasePageSizeGet (void)
_WRS_DEPRECATED("Use vmPageSizeGet instead");
/* APIs to become private */
extern VM_CONTEXT_ID vmGlobalMapInit (PHYS_MEM_DESC * pMemDescArray,
int numDescArrayElements, BOOL enable,
int cacheDefault);
extern STATUS vmBaseLibInit (int cacheDefault);
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCvmLibh */