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

126 lines
3.4 KiB
C

/* pmLib.h - persistent memory header */
/*
* Copyright (c) 2002-2004, 2010, 2017 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,27jan17,zl removed deprecated C++ wrappers (VXW6-86057)
01j,29mar10,cww LP64 adaptation
01i,14may04,md track size of arena in header
01h,05aug03,dbs allow more than one PM arena
01g,04aug03,dbs ensure pmLib has no globals
01f,29jul03,dbs re-introduce idea of 'closing' a region
01e,29jul03,dbs remove pmRegionDelete API, add pmInvalidate
01d,18jul03,dbs remove hard-coded limit on number of regions
01c,15jul03,dbs increase size of key string
01b,14jul03,dbs rename phpLib to pmLib
01a,11jul03,dbs add phpFreeSpace API
000,28oct02, md written, initial version
*/
#ifndef __INCpmLib_h
#define __INCpmLib_h
#ifdef __cplusplus
extern "C" {
#endif
/* general settings */
/* maximum number of regions available */
#define PM_MAX_REGIONS 64
/* magic number of persistent heap */
#define PM_MAGIC ((int) 0xBEEFBABE)
/* max length of key string */
#define PM_KEY_LEN 20
/* open region with 'read' enabled */
#define PM_PROT_RDONLY 0
/* open region with 'read' and 'write' enabled */
#define PM_PROT_RDWR 1
#define PM_PAGE_ALIGN(_ptr, _pageSize) \
((unsigned long) _ptr - ((unsigned long) _ptr % _pageSize))
/* types */
typedef void * (*PM_ARENA_DEF) (size_t *);
/*
* PM region header.
*
* Each distinct region in the PM has a header at it start, with a
* short human-readable 'key' and some housekeeping data. It is 16
* bytes long, including the checksum field.
*/
typedef struct pm_region
{
off_t offset; /* offset of data block */
size_t size; /* size of data block */
int magic; /* magic number */
char key [PM_KEY_LEN]; /* textual key */
} PM_REGION;
/*
* Persistent memory block header
*
* One of these exists at the start of the memory region which is
* owned and managed by pmLib.
*/
typedef struct pm_arena
{
int checksum; /* header checksum */
struct
{
void * raddr; /* real address of memory */
void * vaddr; /* aliased virtual address */
size_t arena_size; /* total size of arena in bytes */
size_t data_size; /* total size of block in bytes */
off_t next_free_offset; /* next free offset */
int magic; /* magic number */
int max_region; /* max number of allocated regions */
PM_REGION region [1]; /* extensible array of regions */
} field;
} PM_ARENA;
/* function declarations */
extern STATUS pmLibInit (void);
extern STATUS pmInit (PM_ARENA_DEF arena);
extern ssize_t pmFreeSpace (PM_ARENA_DEF arena);
extern int pmRegionCreate (PM_ARENA_DEF arena, const char * key,
size_t size, int mode);
extern int pmRegionOpen (PM_ARENA_DEF arena, const char *key);
extern void * pmRegionAddr (PM_ARENA_DEF arena, int region);
extern ssize_t pmRegionSize (PM_ARENA_DEF arena, int region);
extern STATUS pmRegionProtect (PM_ARENA_DEF arena, int region, int mode);
extern STATUS pmRegionClose (PM_ARENA_DEF arena, int region);
extern STATUS pmInvalidate (PM_ARENA_DEF arena);
extern STATUS pmValidate (PM_ARENA_DEF arena);
extern STATUS pmShow (PM_ARENA_DEF arena);
extern void * pmDefaultArena (size_t *);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCpmLib_h */