Files
m241Neelima/vxworks-6.9/target/h/private/adrSpaceLibP.h
T
2026-07-30 11:19:44 +05:30

200 lines
6.4 KiB
C

/* adrSpaceLibP.h - Address Space Library header */
/*
* Copyright (c) 2004-2005,2007-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
--------------------
01p,08sep10,pcs Add an entry to represent the global virtual memory region
size to struct adrSpaceInitParams.
01o,02jun10,elp added SIMNT/SIMLINUX 64 bits support.
01n,29apr10,pad Moved extern C statement after include statements.
01m,14apr10,jpb Added function pointer declarations.
01l,09mar10,pad Reorganized ADR_SPACE_INIT_PARAMS structure so that only the
localMemLocalAdrs field is defined for VxWorks 64-bit.
01k,27oct09,pcs Rearranged struct adrSpaceInitParams entries while adding
support for RTP's in LP64.
01j,12oct09,zl added adrSpaceOptimizedSizeGet()and RAM pool allocation option
01i,17sep09,zl added directMapRAMSize.
01h,24aug09,zl updated map and alloc options; added 64-bit arch header
01g,22jun09,zl updated for LP64 build
01f,18apr08,pcs Add prototypes for adrSpaceOverlapPageAlloc and
adrSpaceOverlapNodesRemove.
01e,24apr07,pcs Add prototype for adrSpacePageVirtPhysFree.
01d,09sep05,zl removed ADR_SPACE_RGN_CTL structure.
01c,27jun05,zl added new alloc, free, map, unmap APIs and options.
01b,22sep04,zl post-inspection fixes.
01a,31aug04,zl created.
*/
#ifndef __INCadrSpaceLibPh
#define __INCadrSpaceLibPh
/* includes */
#include <vxWorks.h>
#include <vmLib.h>
#include <private/vmLibP.h> /* VIRT_SEG_INFO */
#ifdef _WRS_CONFIG_LP64
#if (CPU_FAMILY==I80X86)
#include <arch/i86/x86_64/private/adrSpaceArchLibP.h>
#elif (CPU_FAMILY==SIMNT)
#include <arch/simnt/private/adrSpaceArchLibP.h>
#elif (CPU_FAMILY==SIMLINUX)
#include <arch/simlinux/private/adrSpaceArchLibP.h>
#endif
#endif /* _WRS_CONFIG_LP64 */
#ifdef __cplusplus
extern "C" {
#endif
/* address space types */
#define ADR_SPACE_TYPE_KERNEL 0x00000001
#define ADR_SPACE_TYPE_RTP 0x00000000
#define ADR_SPACE_TYPE_MASK 0x00000001
/*
* the alloc and map options are defined so that they don't
* overlap with the MMU attributes and VM mapping options, since they
* can be OR-ed together. MMU attributes use 0x000fffff. VM
* map options use 0x00f00000.
*/
#define ADR_SPACE_OPT_CONTIG 0x80000000
#define ADR_SPACE_OPT_NONCONTIG 0x00000000
#define ADR_SPACE_OPT_CONTIG_MASK 0x80000000
#define ADR_SPACE_OPT_MAPPED 0x40000000
#define ADR_SPACE_OPT_UNMAPPED 0x00000000
#define ADR_SPACE_OPT_MAPPED_MASK 0x40000000
#define ADR_SPACE_OPT_OPTIMIZED 0x20000000
#define ADR_SPACE_OPT_UNOPTIMIZED 0x00000000
#define ADR_SPACE_OPT_OPTIMIZE_MASK 0x20000000
#define ADR_SPACE_OPT_NOPHYSALLOC 0x10000000
#define ADR_SPACE_OPT_PHYSALLOC 0x00000000
#define ADR_SPACE_OPT_PHYSALLOC_MASK 0x10000000
#define ADR_SPACE_OPT_RGN_KERNEL 0x08000000
#define ADR_SPACE_OPT_RGN_DIRECT 0x04000000
#define ADR_SPACE_OPT_RGN_SHM 0x02000000
#define ADR_SPACE_OPT_RGN_MASK 0x0e000000
/*
* the address space map attributes are a combination of the MMU attributes,
* the VM mapping options, the contiguous and optimized mapping options.
*
* The address space allocation attributes are a combination of all of
* the above, plus the region and the mapped options.
*/
#define ADR_SPACE_OPT_MAP_MASK (ADR_SPACE_OPT_CONTIG_MASK | \
ADR_SPACE_OPT_OPTIMIZE_MASK | \
ADR_SPACE_OPT_PHYSALLOC_MASK| \
VM_MAP_OPTIONS_MASK | \
VM_ATTR_ALL)
#define ADR_SPACE_OPT_ALLOC_MASK (ADR_SPACE_OPT_MAP_MASK | \
ADR_SPACE_OPT_MAPPED_MASK | \
ADR_SPACE_OPT_RGN_MASK)
/* unmap and free attributes */
#define ADR_SPACE_OPT_PHYS_NOFREE 0x00000001
#define ADR_SPACE_OPT_PHYS_FREE 0x00000000
#define ADR_SPACE_OPT_PHYS_FREE_MASK 0x00000001
/* address space model configuration values */
#define ADR_SPACE_MODEL_FLAT 1
#define ADR_SPACE_MODEL_OVERLAPPED 2
#ifndef _ASMLANGUAGE
/* typedefs */
typedef struct adrSpaceInitParams
{
#ifdef _WRS_CONFIG_USE_MEMDESC
VIRT_ADDR localMemLocalAdrs; /* where memory begins */
#else /* _WRS_CONFIG_USE_MEMDESC */
PHYS_MEM_DESC * pPhysMemDesc; /* physMemDesc pointer */
int physMemDescNumEnt; /* number of elements */
VIRT_ADDR localMemLocalAdrs; /* where memory begins */
VIRT_ADDR kernelMemTop; /* top of kernel mem (heap) */
VIRT_ADDR rtpRgnBase; /* RTP overlapped rgn base */
size_t rtpRgnSize; /* RTP overlapped rgn size */
size_t globalVirtMemRgnSize; /* global virt mem rgn size */
BOOL rtpRgnIsOverlapped; /* is RTP space overlapped? */
#endif /* _WRS_CONFIG_USE_MEMDESC */
} ADR_SPACE_INIT_PARAMS;
/* globals */
extern UINT adrSpaceModel; /* flat or overlapped */
extern PAGE_POOL_ID globalRAMPgPoolId;
extern PAGE_POOL_ID kernelVirtPgPoolId;
#ifdef _WRS_CONFIG_LP64
extern PAGE_POOL_ID shmRgnPgPoolId;
extern size_t directMapRAMSize;
#else
extern PAGE_POOL_ID userRgnPoolId;
extern PAGE_POOL_ID kernelRgnPoolId;
#endif
extern size_t rtpCodeSize;
extern VIRT_ADDR rtpCodeStart;
extern ADR_SPACE_INIT_PARAMS * pAsInitParams;
/* base level function prototypes */
extern STATUS adrSpaceLibInit (ADR_SPACE_INIT_PARAMS * pInitParams);
extern STATUS adrSpaceShowInit (void);
extern VIRT_ADDR adrSpacePageAlloc (VM_CONTEXT_ID vmContext, VIRT_ADDR virtAddr,
PHYS_ADDR physAddr, size_t numPages,
UINT options);
extern STATUS adrSpacePageFree (VM_CONTEXT_ID vmContext, VIRT_ADDR virtAddr,
size_t numPages, UINT options);
extern STATUS adrSpacePageMap (VM_CONTEXT_ID vmContext, VIRT_ADDR virtAdr,
PHYS_ADDR physAdr, size_t numPages,
UINT options);
extern STATUS adrSpacePageUnmap (VM_CONTEXT_ID vmContext, VIRT_ADDR virtAdr,
size_t numPages, UINT options);
extern STATUS adrSpacePageVirtPhysFree (VM_CONTEXT_ID vmContext,
VIRT_ADDR virtAddr, PHYS_ADDR physAddr,
size_t numPages, UINT options);
extern STATUS adrSpaceOptimizedSizeGet (ULONG addr, size_t numPages,
size_t * pAlignSize,
size_t * pNumPages);
#ifdef _WRS_CONFIG_LP64
extern VIRT_ADDR adrSpaceDirectBaseGet (void);
#endif
/* function pointer prototypes */
extern VIRT_SEG_INFO * (*_func_virtSegInfoGet)(UINT * pNumElems);
extern VIRT_EXTRA_MAP_INFO * (*_func_virtExtraMapInfoGet)(int descNum);
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCadrSpaceLibPh */