blob: cde961c8b66c703d1d3d51b4a0e30d265c800e16 [file] [log] [blame]
#include "ext_regist.h"
#include "NvParam_drv.h"
#include "libcpnv.h"
/**************************wdt********************
*************************************************/
#define ZOSS_ERROR 0xffffffff
#define ZOSS_SUCCESS 0x0
/*wdt nv flag*/
#define WDT_OFF (0x57445446) //ascii:WDTF
#define WDT_ON (0x5744544F) //ascii:WDTO
#define ZX_WDT_IOC_MAGIC 'W'
/*ioctl cmd usd by device*/
#define ZX_WDT_SET_INTERNAL _IOW(ZX_WDT_IOC_MAGIC, 1, char *)
#define ZX_WDT_SET_WAKEUP _IOW(ZX_WDT_IOC_MAGIC, 2, char *)
#define ZX_WDT_FEED_DOG _IOW(ZX_WDT_IOC_MAGIC, 3, char *)
#define ZX_WDT_GET_HANDLE_TIMEOUT _IOWR(ZX_WDT_IOC_MAGIC, 4, char *)
#define ZX_WDT_GET_GLOBAL_CNT _IOWR(ZX_WDT_IOC_MAGIC, 5, char *)
#define ZX_WDT_GET_AP_TIMEOUT _IOWR(ZX_WDT_IOC_MAGIC, 6, char *)
#define ZX_WDT_SET_AP_SWITCH _IOWR(ZX_WDT_IOC_MAGIC, 7, char *)
#define ZX_WDT_SET_NV _IOWR(ZX_WDT_IOC_MAGIC, 8, char *)
#define ZX_WDT_GET_NV _IOWR(ZX_WDT_IOC_MAGIC, 9, char *)
#define ZX_WDT_SET_CHECK _IOWR(ZX_WDT_IOC_MAGIC, 10, char *)
#define ZX_SOFT_WDT_DEV "/dev/zx_soft_wdt"
extern int zx_wdt_set_nv(BOOL nv_flag);
extern BOOL zx_wdt_get_wdtnv_for_ctrm(void);
//static long int wdt_fd;
int wdt_act_func(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char *at_str = NULL;
unsigned long retCode = ZOSS_ERROR;
int nv_value = 0;
unsigned int wdt_nvdata = 0;
assert(at_paras!=NULL);
at_str = at_paras;
get_at_cmd_param_int(at_str, &nv_value, &at_str);
at_print(AT_DEBUG,"wdt_act_func:nv_value == %d\n", nv_value);
if(0 == nv_value )
{
//ioctl(wdt_fd, ZX_WDT_SET_NV, FALSE);
wdt_nvdata=WDT_OFF;
retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));
if(ZOSS_SUCCESS == retCode ){
retCode= cpnv_NvramFlush();
}
}
else if(1 == nv_value )
{
//ioctl(wdt_fd, ZX_WDT_SET_NV, TRUE);
wdt_nvdata=WDT_ON;
retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));
if(ZOSS_SUCCESS == retCode ){
retCode= cpnv_NvramFlush();
}
}
else
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
if (retCode == ZOSS_SUCCESS)
{
*res_msg = at_query_result_build("WDT=",at_str);
}
else
{
*res_msg = at_err_build(ATERR_PROC_FAILED);
}
*res_msglen = strlen(*res_msg);
return AT_END;
}
int wdt_get_nv_state(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
unsigned int wdt_nvdata = 0;
long retCode = CPNV_ERROR;
//ioctl(wdt_fd, ZX_WDT_GET_NV, &retCode);
retCode =cpnv_NvItemRead(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));
if(CPNV_ERROR == retCode) softap_assert("");
if (WDT_OFF == wdt_nvdata )
{
*res_msg = at_query_result_build("WDT","WDT OFF");
} else if(WDT_ON== wdt_nvdata )
{
*res_msg = at_query_result_build("WDT","WDT ON");
}
else
{
*res_msg = at_err_build(ATERR_PROC_FAILED);
}
*res_msglen = strlen(*res_msg);
return AT_END;
}
int wdt_set_nv_priority(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char *at_str = NULL;
unsigned long retCode = ZOSS_ERROR;
int nv_value = 0;
char strCmd[AT_CMD_MAX] = {0};
assert(at_paras!=NULL);
at_str = at_paras;
get_at_cmd_param_int(at_str, &nv_value, &at_str);
at_print(AT_DEBUG,"wdt_set_nv_priority:nv_value == %d\n", nv_value);
if((nv_value > 0)&&(nv_value <= 99))//priority
{
retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtPriority), (unsigned char *)(&nv_value), DRV_SYS_NV_ITEM_SIZE(wdtPriority));
if(ZOSS_SUCCESS == retCode ){
retCode= cpnv_NvramFlush();
}
}
else
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
if (retCode == ZOSS_SUCCESS)
{
sprintf(strCmd,"%d", nv_value);
*res_msg = at_query_result_build("WDTP=",strCmd);
}
else
{
*res_msg = at_err_build(ATERR_PROC_FAILED);
}
*res_msglen = strlen(*res_msg);
return AT_END;
}
int wdt_get_nv_priority(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
unsigned int wdt_nvdata = 0;
long retCode = CPNV_ERROR;
char strCmd[AT_CMD_MAX] = {0};
retCode =cpnv_NvItemRead(DRV_SYS_NV_ITEM_ADDR(wdtPriority), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtPriority));
if(CPNV_ERROR == retCode) softap_assert("");
sprintf(strCmd,"%d", wdt_nvdata);
*res_msg = at_query_result_build("WDTP",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
/**************************pm********************
*************************************************/
#define RPMSG_IOC_MAGIC 'R'
/*ioctl cmd usd by device*/
#define RPMSG_CREATE_CHANNEL _IOW(RPMSG_IOC_MAGIC, 1, char *)
#define RPMSG_GET_DATASIZE _IOWR(RPMSG_IOC_MAGIC, 2, char *)
#define RPMSG_SET_INT _IOW(RPMSG_IOC_MAGIC, 3, char *)
#define RPMSG_SET_INT_FLAG _IOW(RPMSG_IOC_MAGIC, 4, char *)
#define RPMSG_CLEAR_INT_FLAG _IOW(RPMSG_IOC_MAGIC, 5, char *)
#define RPMSG_SET_POLL_FLAG _IOW(RPMSG_IOC_MAGIC, 6, char *)
#define RPMSG_CLEAR_POLL_FLAG _IOW(RPMSG_IOC_MAGIC, 7, char *)
#define AT_CAP_DEV "/dev/rpmsg2"
static void write_lockfile(char *filepath, char *setbuf)
{
int f, len = 0;
f = open(filepath, O_RDWR);
if (f == -1) {
at_print(AT_DEBUG,"write_lockfile OPEN FAIL\n");
return;
}
len = strlen(setbuf);
if (write(f, setbuf, len) != len)
{ }
else
{ }
close(f);
}
static int pm_apadd_wakelock(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
write_lockfile("/sys/power/wake_lock", "test_wakelock");
*res_msg = at_query_result_build("delete_lock",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int pm_apdelete_wakelock(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
write_lockfile("/sys/power/wake_unlock", "test_wakelock");
*res_msg = at_query_result_build("delete_lock",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int pm_capadd_wakelock(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned int ctx=0x5a5a;
int fd, ret;
at_print(AT_DEBUG,"pm_capadd_wakelock\n");
fd =open(AT_CAP_DEV, O_RDWR);
if(fd<0){
at_print(AT_DEBUG,"cap add open FAIL\n");
return -1;
}
ret=ioctl(fd, RPMSG_SET_INT_FLAG, NULL);
if(ret<0){
at_print(AT_DEBUG,"cap add ioctl FAIL\n");
close(fd);
return AT_END;
}
ret=write(fd, &ctx, 4);
if(ret<0){
at_print(AT_DEBUG,"cap add write FAIL\n");
close(fd);
return AT_END;
}
*res_msg = at_query_result_build("capadd_lock",strCmd);
*res_msglen = strlen(*res_msg);
close(fd);
return AT_END;
}
static int pm_capdelete_wakelock(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned int ctx=0x5a5b;
int fd, ret;
at_print(AT_DEBUG,"pm_capdelete_wakelock\n");
fd =open(AT_CAP_DEV, O_RDWR);
if(fd<0){
at_print(AT_DEBUG,"cap add open FAIL\n");
return -1;
}
ret=ioctl(fd, RPMSG_SET_INT_FLAG, NULL);
if(ret<0){
at_print(AT_DEBUG,"cap add ioctl FAIL\n");
close(fd);
return AT_END;
}
ret=write(fd, &ctx, 4);
if(ret<0){
at_print(AT_DEBUG,"cap add write FAIL\n");
close(fd);
return AT_END;
}
close(fd);
*res_msg = at_query_result_build("capdelete_lock",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
/**************************tsc********************
*************************************************/
#define THRESH_NUM 11
#define ZX_TSC_DEV "/dev/zx_tsc"
#define ZX_TSC_IOC_MAGIC 'W'
/*ioctl cmd usd by device*/
#define ZX_TSC_SET_THRESHOLD _IOW(ZX_TSC_IOC_MAGIC, 1, char *)
#define ZX_TSC_GET_THRESHOLD _IOW(ZX_TSC_IOC_MAGIC, 2, char *)
static int tsc_probe0_set_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
char *at_str = NULL;
unsigned char ctx[12]={0,0};
int fd, ret, i;
void *p[THRESH_NUM] = {
&ctx[1], &ctx[2], &ctx[3], &ctx[4], &ctx[5],
&ctx[6], &ctx[7], &ctx[8], &ctx[9], &ctx[10],
&ctx[11],
};
if(at_paras==NULL)
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
at_str = at_paras;
parse_param("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", at_str, p);
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_SET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc set ioctl FAIL\n");
close(fd);
return AT_END;
}
#if 0
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc get ioctl FAIL\n");
close(fd);
return AT_END;
}
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
#endif
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe0_get_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned char ctx[12]={0,0};
int fd, ret, i;
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc add ioctl FAIL\n");
close(fd);
return AT_END;
}
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe1_set_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
char *at_str = NULL;
unsigned char ctx[12]={1,0};
int fd, ret, i;
void *p[THRESH_NUM] = {
&ctx[1], &ctx[2], &ctx[3], &ctx[4], &ctx[5],
&ctx[6], &ctx[7], &ctx[8], &ctx[9], &ctx[10],
&ctx[11],
};
if(at_paras==NULL)
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
at_str = at_paras;
parse_param("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", at_str, p);
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_SET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc set ioctl FAIL\n");
close(fd);
return AT_END;
}
#if 0
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc get ioctl FAIL\n");
close(fd);
return AT_END;
}
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
#endif
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe1_get_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned char ctx[12]={1,0};
int fd, ret, i;
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc add ioctl FAIL\n");
close(fd);
return AT_END;
}
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe2_set_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
char *at_str = NULL;
unsigned char ctx[12]={2,0};
int fd, ret, i;
void *p[THRESH_NUM] = {
&ctx[1], &ctx[2], &ctx[3], &ctx[4], &ctx[5],
&ctx[6], &ctx[7], &ctx[8], &ctx[9], &ctx[10],
&ctx[11],
};
if(at_paras==NULL)
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
at_str = at_paras;
parse_param("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", at_str, p);
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_SET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc set ioctl FAIL\n");
close(fd);
return AT_END;
}
#if 0
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc get ioctl FAIL\n");
close(fd);
return AT_END;
}
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
#endif
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe2_get_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned char ctx[12]={2,0};
int fd, ret, i;
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc add ioctl FAIL\n");
close(fd);
return AT_END;
}
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe3_set_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
char *at_str = NULL;
unsigned char ctx[12]={3,0};
int fd, ret, i;
void *p[THRESH_NUM] = {
&ctx[1], &ctx[2], &ctx[3], &ctx[4], &ctx[5],
&ctx[6], &ctx[7], &ctx[8], &ctx[9], &ctx[10],
&ctx[11],
};
if(at_paras==NULL)
{
*res_msg = at_err_build(ATERR_PARAM_INVALID);
*res_msglen = strlen(*res_msg);
return AT_END;
}
at_str = at_paras;
parse_param("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", at_str, p);
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_SET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc set ioctl FAIL\n");
close(fd);
return AT_END;
}
#if 0
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc get ioctl FAIL\n");
close(fd);
return AT_END;
}
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
#endif
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
static int tsc_probe3_get_thresh(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
char strCmd[AT_CMD_MAX] = {0};
unsigned char ctx[12]={3,0};
int fd, ret, i;
fd =open(ZX_TSC_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap tsc open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_TSC_GET_THRESHOLD, (unsigned long)&ctx);
if(ret<0){
at_print(AT_NORMAL,"tsc add ioctl FAIL\n");
close(fd);
return AT_END;
}
at_print(AT_NORMAL,"probe is %d\n", ctx[0]);
for(i=1; i<12; i++)
{
at_print(AT_NORMAL,"threshold[%d] is %d\n", i-1, ctx[i]);
}
close(fd);
*res_msg = at_query_result_build("tsc_test",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
#define ZX_RESET_DEV "/dev/zx_reset"
#define ZX_RESET_IOC_MAGIC 'W'
/*ioctl cmd usd by device*/
#define ZX_RESET_FAST_REBOOT _IOW(ZX_RESET_IOC_MAGIC, 1, char *)
static int fast_reboot(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)
{
int fd, ret;
char strCmd[AT_CMD_MAX] = {0};
fd =open(ZX_RESET_DEV, O_RDWR);
if(fd<0){
at_print(AT_NORMAL,"ap reset open FAIL\n");
return -1;
}
ret=ioctl(fd, ZX_RESET_FAST_REBOOT, NULL);
if(ret<0){
at_print(AT_NORMAL,"fast reboot add ioctl FAIL\n");
close(fd);
return AT_END;
}
close(fd);
*res_msg = at_query_result_build("fast reboot",strCmd);
*res_msglen = strlen(*res_msg);
return AT_END;
}
/**************************init********************
*************************************************/
void ext_bsp_regist_init(void)
{
register_serv_func2("WDT=", 0, 0, 0, wdt_act_func, NULL);
register_serv_func2("WDT?", 0, 0, 0,wdt_get_nv_state,NULL);
register_serv_func2("WDTP=", 0, 0, 0, wdt_set_nv_priority, NULL);
register_serv_func2("WDTP?", 0, 0, 0,wdt_get_nv_priority,NULL);
register_serv_func2("apadd_lock", 0, 0, 0,pm_apadd_wakelock,NULL);
register_serv_func2("apdel_lock", 0, 0, 0,pm_apdelete_wakelock,NULL);
register_serv_func2("capadd_lock", 0, 0, 0,pm_capadd_wakelock,NULL);
register_serv_func2("capdel_lock", 0, 0, 0,pm_capdelete_wakelock,NULL);
register_serv_func2("probe0_set_thresh=", 0, 0, 0,tsc_probe0_set_thresh,NULL);
register_serv_func2("probe0_get_thresh", 0, 0, 0,tsc_probe0_get_thresh,NULL);
register_serv_func2("probe1_set_thresh=", 0, 0, 0,tsc_probe1_set_thresh,NULL);
register_serv_func2("probe1_get_thresh", 0, 0, 0,tsc_probe1_get_thresh,NULL);
register_serv_func2("probe2_set_thresh=", 0, 0, 0,tsc_probe2_set_thresh,NULL);
register_serv_func2("probe2_get_thresh", 0, 0, 0,tsc_probe2_get_thresh,NULL);
register_serv_func2("probe3_set_thresh=", 0, 0, 0,tsc_probe3_set_thresh,NULL);
register_serv_func2("probe3_get_thresh", 0, 0, 0,tsc_probe3_get_thresh,NULL);
register_serv_func2("fast_reboot", 0, 0, 0,fast_reboot, NULL);
}