Files

172 lines
6.0 KiB
C

/* -*- linux-c -*- */
/*******************************************************************************
* Copyright 2009, Marvell Technology Group Ltd.
*
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. NO RIGHTS ARE GRANTED
* HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT OF MARVELL OR ANY THIRD
* PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE DISCRETION TO REQUEST THAT THIS
* CODE BE IMMEDIATELY RETURNED TO MARVELL. THIS CODE IS PROVIDED "AS IS".
* MARVELL MAKES NO WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS
* ACCURACY, COMPLETENESS OR PERFORMANCE. MARVELL COMPRISES MARVELL TECHNOLOGY
* GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, MARVELL INTERNATIONAL LTD. (MIL),
* MARVELL TECHNOLOGY, INC. (MTI), MARVELL SEMICONDUCTOR, INC. (MSI), MARVELL
* ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. (MJKK), GALILEO TECHNOLOGY LTD. (GTL)
* GALILEO TECHNOLOGY, INC. (GTI) AND RADLAN Computer Communications, LTD.
********************************************************************************
*/
/* psm -- Persistent Storage Manager */
#ifndef _PSM_H_
#define _PSM_H_
#include <stdlib.h>
#include <string.h>
#include "UART.h"
//#include "common_print.h"
#define PRODUCT_NAME "WMG88"
#define STR_MODVER "modver"
/** BIT map
* bit[0 - 1] - NEZHA
* bit[2 - 3] - CRANE
*/
#define PSM_PLATFORM_TYPE (0x04)
#ifdef PLAT_NEZHAC
#undef PSM_PLATFORM_TYPE
#define PSM_PLATFORM_TYPE (0x01)
#endif
#define PSM_PLATFORM_NEZHA_DEFINED ((PSM_PLATFORM_TYPE & 0x03) ? TRUE: FALSE)
#define PSM_PLATFORM_CRANE_DEFINED ((PSM_PLATFORM_TYPE & (0x03 << 2)) ? TRUE: FALSE)
//#define PSM_DEBUG
typedef unsigned long UINT32;
extern void *DiagMemPoolAlignMalloc(UINT32 size);
extern void DiagMemPoolAlignFree(void* alignAddress);
/*
#ifdef PSM_DEBUG
#define PSM_Printf(fmt,args...) CPUartLogPrintf(fmt, ##args)
#define PSM_Long_Printf(fmt,args...) LPUartLogPrintf(fmt, ##args)
#else
#define PSM_Printf(fmt,args...)
#define PSM_Long_Printf(fmt,args...)
#endif
*/
//#define PSM_Printf(fmt,args...) {PSM_module_Printf(2,fmt, ##args);}
//#define PSM_Long_Printf(fmt,args...) {PSM_module_Long_Printf(2,fmt, ##args);}
#define PSM_LOG_DEBUG 3
#define PSM_LOG_CRITIC 2
#define PSM_LOG_ERROR 1
#if (defined(LTEONLY_THIN) || defined(CRANEL_FP_8MRAM) || defined(LTEGSM_THIN))
#define PSM_LOG_LEVEL 2
#else
#define PSM_LOG_LEVEL 3
#endif
#define PSM_Printf(fmt,args...) \
{if(PSM_LOG_LEVEL >= PSM_LOG_DEBUG) CPUartLogPrintf("[psm]"fmt, ##args);}
#define PSM_Printf_Critic(fmt,args...) \
{if(PSM_LOG_LEVEL >= PSM_LOG_CRITIC) CPUartLogPrintf("[psm]"fmt, ##args);}
#define PSM_Printf_Error(fmt,args...) \
{if(PSM_LOG_LEVEL >= PSM_LOG_ERROR) CPUartLogPrintf("[psm]"fmt, ##args);}
/*
static inline void * psm_malloc(unsigned int size)
{
return calloc(1, size);
//return DiagMemPoolAlignMalloc(size);
}
#define psm_free(ptr) free((ptr))
*/
typedef struct qstr {
unsigned int len; /* length without the trailing ';' */
unsigned char *name;
} qstr_t;
#define SUBSPACELEN 100
typedef struct psm_handle {
char *psmh_mod_name; /* The module name */
qstr_t psmh_env; /* Structure to point to the allocated environment */
void *psmh_backend_info; /* The backend configuration */
int psmh_semid; /* Semaphore id */
short psmh_dirty; /* Buffer Dirty? */
char psmh_subspace[SUBSPACELEN]; /* The subspace */
short psmh_subspacelen; /* The active subspace len */
} psm_handle_t;
psm_handle_t * __psm_open(char *module_name, void *backend_hint, char handleIndex);
void psm_close(psm_handle_t *handle, char handleIndex);
#define PSM_CTL_CMD_ENCRYPT 1
#define PSM_CTL_CMD_COMPRESS 2
/* The set/get calls will take the module name and construct a proper
* namespace before writing the variables to the disk
*/
int psm_set(psm_handle_t *handle, qstr_t *variable, qstr_t *value);
int psm_safe_set(psm_handle_t *handle, qstr_t *variable, qstr_t *value);
int psm_set_int(psm_handle_t *handle, qstr_t *variable, int value);
char *psm_get(psm_handle_t *handle, qstr_t *variable);
unsigned char *psm_getall(psm_handle_t *handle);
int psm_get_int(psm_handle_t *handle, qstr_t *variable);
int psm_eraseall(psm_handle_t *handle, void *backend_hint, char handleIndex);
int psm_commit(psm_handle_t *handle, char handleIndex);
int psm_push_subspace(psm_handle_t *handle, char *subspace);
int psm_pop_subspace(psm_handle_t *handle);
/* Returns a string modname.subspace.subspace.... */
char *psm_get_namespace(psm_handle_t *handle);
/**** Functions not exposed to the user ****/
int backend_read_env(struct qstr *env, void **backend_info, char *backend_hint, char handleIndex); /* backend_info is allocated in this function */
int backend_write_env(struct qstr *env, void *backend_info, char handleIndex);
void backend_free_env(struct qstr *env, void *backend_info); /* backend_info is destroyed in this function */
int backend_eraseall(struct qstr *env, void *backend_info, void *backend_hint, char handleIndex);
int backend_eraseall_recover(void *backend_hint, char handleIndex);
/***** Utility functions *****/
char *util_search_var(unsigned char *env, int size, qstr_t *variable);
int util_del_var(unsigned char *environment, int size, qstr_t *variable, int *delete_len);
#define PSM_FLAG_SAFE_SET 1 /* Do not allow NEW variable definitions */
int util_set_var(unsigned char *environment, int size, qstr_t *variable, qstr_t *value, short flags);
unsigned long util_get_actual_env_size(char *env);
void psm_test(void);
int util_del_var_value(unsigned char *environment, int size, qstr_t *variable, qstr_t *value,int *delete_len);
/****** Locking Functions ****/
/*
#ifdef PSM_USE_LOCKS
int psm_lock(int semid);
int psm_unlock(int semid);
int psm_lock_init();
#else // PSM_USE_SHM
#define psm_lock(x) do { } while(0)
#define psm_unlock(x) do { } while(0)
#define psm_lock_init() -1
#endif // PSM_USE_SHM
*/
#endif /* ! _PSM_H_ */