original files of m241
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
/* mmanP.h - POSIX memory management library private header file */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004-2006, 2009-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
|
||||
--------------------
|
||||
01t,29sep10,zl fixed ADDR_ADD() for 64-bit
|
||||
01s,08jun10,pcs Add macros to access BLK and RNG virtual addresses.
|
||||
01r,18may10,pcs Updated to add support for device memory objects.
|
||||
01q,29apr10,pad Moved extern C statement after include statements.
|
||||
01p,08apr10,jpb Added func binding prototypes.
|
||||
01o,23feb10,zl replaced off_t64 with off64_t
|
||||
01n,19jan10,zl added MMAN_MM_LIST_LOCK() and UNLOCK().
|
||||
01m,16dec09,pcs updated for LP64 support.
|
||||
01l,05may06,pcm changed MMAP_FILE filed inode to type ino_t
|
||||
01k,21mar06,pcs Add fileOpenPerm to struct mmap_rng.
|
||||
01j,06mar06,pcs Implemented code review suggestions.
|
||||
01i,23jan06,zl added size field to MMAP_FILE
|
||||
01h,01jan06,zl changed offset to 64-bit type.
|
||||
01g,23dec05,zl changed per-RTP file reference tracking.
|
||||
01f,16dec05,zl changed FUNC_MSYNC parameter list.
|
||||
01e,30nov05,pcs moved fd from struct MAP_FILE to struct MMAP_RNG.
|
||||
01d,02nov05,zl adding file mapping support.
|
||||
01c,25oct05,zl added FUNC_MSYNC typedef.
|
||||
01b,08jul05,zl added FUNC_MMAP and FUNC_MUNMAP typedefs
|
||||
01a,09apr04,tam written
|
||||
*/
|
||||
|
||||
#ifndef __INCmmanPh
|
||||
#define __INCmmanPh
|
||||
|
||||
/* includes */
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <dllLib.h>
|
||||
#include <scMemVal.h> /* for SC_PROT_ATTR */
|
||||
#include <private/semLibP.h> /* for SEMAPHORE */
|
||||
#include <private/rtpLibP.h> /* for RTP_UNLOCK() */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* defines */
|
||||
|
||||
#ifndef _ASMLANGUAGE
|
||||
|
||||
#define MM_POOL_INIT_COUNT 16
|
||||
#define MM_POOL_INCR_COUNT 8
|
||||
|
||||
#define CACHE_ATTR_USE_DEFAULT 0
|
||||
#define CACHE_ATTR_USE_EXPLICIT 1
|
||||
#define CACHE_ATTR_DONOT_UPDATE 2
|
||||
|
||||
#define ADDR_ADD(ptr,off) ((void *) ((char *) (ptr) + (ULONG) (off)))
|
||||
|
||||
#define MM_LIST_GET(rtpId) \
|
||||
(&((RTP_PAGE_MGR_GET(rtpId))->mmapList))
|
||||
#define MM_FBNODE_TO_BLK(pNode) \
|
||||
((MMAP_BLK *) ((char *) (pNode) - OFFSET(MMAP_BLK, fileBlkNode)))
|
||||
#define MM_RNGNODE_TO_RNG(pNode) \
|
||||
((MMAP_RNG *) ((char *) (pNode) - OFFSET(MMAP_RNG, rtpRngNode)))
|
||||
#define MM_FILENODE_TO_FILE(pNode) \
|
||||
((MMAP_FILE *) ((char *) (pNode) - OFFSET(MMAP_FILE, fileNode)))
|
||||
#define MM_FDNODE_TO_FD(pNode) \
|
||||
((MMAP_FD *) ((char *) (pNode) - OFFSET(MMAP_FD, fileFdNode)))
|
||||
|
||||
#define BLK_VIRT_ADDR(rtpId, pBlock) \
|
||||
(((rtpId) == kernelId) ? (pBlock)->virtAddr : (pBlock)->rtpVirtAddr)
|
||||
#define BLK_K_VIRT_ADDR(pBlock) i ((pBlock)->virtAddr)
|
||||
#define BLK_RTP_VIRT_ADDR(pBlock) ((pBlock)->rtpVirtAddr)
|
||||
|
||||
#define RNG_VIRT_ADDR(pRange) ((pRange)->virtAddr)
|
||||
|
||||
#define MMAN_FD_LIST_LOCK() semTake(&mmanFileMutex, WAIT_FOREVER)
|
||||
#define MMAN_FD_LIST_UNLOCK() semGive(&mmanFileMutex)
|
||||
|
||||
/*
|
||||
* For real RTPs the rtpVerifyAndLock() is used. For the kernel a simple
|
||||
* semTake() is used since the kernel, as an RTP, is never deleted.
|
||||
* mmanRtpLock() provides this without direct dependency on RTP support.
|
||||
*/
|
||||
|
||||
#define MMAN_MM_LIST_LOCK(rtpId) mmanRtpLock(rtpId)
|
||||
#define MMAN_MM_LIST_UNLOCK(rtpId) RTP_UNLOCK(rtpId)
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* mapped file info */
|
||||
|
||||
typedef struct mmap_file
|
||||
{
|
||||
DL_NODE fileNode; /* node in mapped files list */
|
||||
dev_t devId; /* file device ID */
|
||||
ino_t inode; /* file inode */
|
||||
BOOL isShm; /* is SHM object */
|
||||
BOOL isDevMem; /* is DEVMEM object */
|
||||
off64_t size; /* file size */
|
||||
DL_LIST fileBlkList; /* list of mmap blocks */
|
||||
DL_LIST fileFdList; /* list of per-RTP file descriptors */
|
||||
} MMAP_FILE;
|
||||
|
||||
/* generic mapped block */
|
||||
|
||||
typedef struct mmap_blk
|
||||
{
|
||||
DL_NODE fileBlkNode; /* node in the file's block list */
|
||||
struct mmap_blk * rngBlkNext; /* next node in the range's block list */
|
||||
off64_t fileOffset; /* offset to file of mapped block */
|
||||
VIRT_ADDR rtpVirtAddr; /* virtual address of mapped block */
|
||||
VIRT_ADDR virtAddr; /* virtual address of mapped block */
|
||||
PHYS_ADDR physAddr; /* physical address of mapped block */
|
||||
size_t length; /* size of mapped block */
|
||||
int flags; /* map flags */
|
||||
int refCnt; /* nb of times the block is mapped */
|
||||
} MMAP_BLK;
|
||||
|
||||
/* mapped range in an RTPs map list */
|
||||
|
||||
typedef struct mmap_rng
|
||||
{
|
||||
DL_NODE rtpRngNode; /* node in the RTP's range list */
|
||||
MMAP_FILE * pMapFile; /* pointer to mapped file */
|
||||
void * addr; /* start address for range */
|
||||
size_t len; /* length of range */
|
||||
int fileOpenPerm; /* file open permission */
|
||||
int prot; /* protections */
|
||||
UINT access; /* access of range */
|
||||
int flags; /* map flags */
|
||||
struct mmap_blk * rngBlkList; /* block list of range */
|
||||
} MMAP_RNG;
|
||||
|
||||
/* per-RTP file descriptor node */
|
||||
|
||||
typedef struct mmap_fd
|
||||
{
|
||||
DL_NODE fileFdNode; /* node in the mapped file's FD list */
|
||||
int fildes; /* file descriptor */
|
||||
RTP_ID rtpId; /* RTP's ID */
|
||||
} MMAP_FD;
|
||||
|
||||
/* hooks for mapped files support */
|
||||
|
||||
typedef void * (* FUNC_MMAP) (void * addr, size_t len, int prot, int flags,
|
||||
int fildes, off64_t off);
|
||||
typedef int (* FUNC_MUNMAP) (RTP_ID rtpId, struct mmap_rng * pRange);
|
||||
typedef int (* FUNC_MSYNC) (RTP_ID rtpId, void * addr, size_t len, int flags);
|
||||
|
||||
/* globals */
|
||||
|
||||
extern DL_LIST mmanFileList;
|
||||
extern SEMAPHORE mmanFileMutex;
|
||||
extern FUNC_MMAP _func_fdMap;
|
||||
extern FUNC_MUNMAP _func_fdUnmap;
|
||||
extern FUNC_MSYNC _func_fdMsync;
|
||||
|
||||
/* private function declarations */
|
||||
|
||||
extern MMAP_RNG * mmanPrivateMap (void * addr, size_t len, int prot,
|
||||
int flags, PHYS_ADDR physAddr);
|
||||
extern STATUS mmanMemValidate (RTP_ID rtpId, const void * addr, size_t size,
|
||||
SC_PROT_ATTR access, STATUS * pValid);
|
||||
extern STATUS mmanProtectionSet (RTP_ID rtpId, void * adr, size_t len,
|
||||
int prot, int cacheAttrToUse,
|
||||
int cacheAttr);
|
||||
extern MMAP_RNG * mmanRangeInsert (RTP_ID rtpId, VIRT_ADDR addr,
|
||||
PHYS_ADDR physAddr, size_t len,
|
||||
int flags, int prot);
|
||||
extern MMAP_BLK * mmanBlockSplit (DL_LIST *pList, MMAP_BLK * pBlock,
|
||||
size_t newLen);
|
||||
extern STATUS mmanRtpDeleteAll (RTP_ID rtpId);
|
||||
extern STATUS mmanRtpLock (RTP_ID rtpId);
|
||||
extern void mmanMapListInit (PAGE_MGR_ID pgMgrId);
|
||||
|
||||
/* function pointer prototypes */
|
||||
|
||||
extern STATUS (*_func_signalMmanHook)(int sigNum,
|
||||
int sigCode,
|
||||
void * faultAddr,
|
||||
int * pSigNum,
|
||||
int * pSigCode);
|
||||
|
||||
#endif /* _ASMLANGUAGE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCmmanPh */
|
||||
Reference in New Issue
Block a user