示例#1
0
static long errhandler_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	int rv = 0;
	int ret;

	if (hidden_reset_enable)
		return 0;

	switch(cmd) {
	case ERRHANDLER_IOCTL_LEVEL2 : 
		if (BLUE_ERROR_HANDLER_LEVEL <= 1) {
			break;
		}
	case ERRHANDLER_IOCTL_LEVEL1 :	
		memset(android_buf,0,sizeof(android_buf));
		if (copy_from_user(android_buf, (void __user *)arg, sizeof(android_buf))) {
	    	rv = -EFAULT;
		    goto err1;
		}
		ret = LGE_ErrorHandler_Main(ANDROID_CRASH, (char *)android_buf);
		smsm_reset_modem(ret);
		while(1)
			;
		break;

	default:
		rv = -EINVAL;
		break;
	}


err1:
	return rv;
}
int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2)
{
	unsigned base = (unsigned)MSM_SHARED_RAM_BASE;
	unsigned long flags;
	int ret;

	spin_lock_irqsave(&proc_comm_lock, flags);
#ifdef CONFIG_LGE_BLUE_ERROR_HANDLER
	if (proc_comm_wait_for(base + MDM_STATUS, PCOM_READY))
		goto crash;
#else

	if (msm_proc_comm_disable) {
		ret = -EIO;
		goto end;
	}


again:
	if (proc_comm_wait_for(base + MDM_STATUS, PCOM_READY))
		goto again;
#endif
	writel(cmd, base + APP_COMMAND);
	writel(data1 ? *data1 : 0, base + APP_DATA1);
	writel(data2 ? *data2 : 0, base + APP_DATA2);

	/* Make sure the writes complete before notifying the other side */
	dsb();

	notify_other_proc_comm();

	if (proc_comm_wait_for(base + APP_COMMAND, PCOM_CMD_DONE))
#ifdef CONFIG_LGE_BLUE_ERROR_HANDLER
		goto crash;
#else
		goto again;
#endif

	if (readl(base + APP_STATUS) == PCOM_CMD_SUCCESS) {
		if (data1)
			*data1 = readl(base + APP_DATA1);
		if (data2)
			*data2 = readl(base + APP_DATA2);
		ret = 0;
	} else {
		ret = -EIO;
	}

	writel(PCOM_CMD_IDLE, base + APP_COMMAND);

	switch (cmd) {
	case PCOM_RESET_CHIP:
	case PCOM_RESET_CHIP_IMM:
	case PCOM_RESET_APPS:
		msm_proc_comm_disable = 1;
		printk(KERN_ERR "msm: proc_comm: proc comm disabled\n");
		break;
	}
end:
	/* Make sure the writes complete before returning */
	dsb();

	spin_unlock_irqrestore(&proc_comm_lock, flags);
	return ret;
#ifdef CONFIG_LGE_BLUE_ERROR_HANDLER
/* LGE_CHANGE_S [[email protected]] 2009-07-06 <For Error Handler > */
crash:
	{
		extern char * error_modem_message ;
		extern int LG_ErrorHandler_enable;
	//	extern int get_status_hidden_reset();
		int ret;
		spin_unlock_irqrestore(&proc_comm_lock, flags);
	
		if (LG_ErrorHandler_enable) // check using proc_comm after arm9 crash 
			return 0;
		
	//	if(get_status_hidden_reset()==0 ) {
			ret = LGE_ErrorHandler_Main(MODEM_CRASH, error_modem_message);
			smsm_reset_modem(ret);
	//	} else {
	//		smsm_reset_modem(SMSM_SYSTEM_REBOOT);
	//	}
		while(1) 
			;
	}
/* LGE_CHANGE_E [[email protected]] 2009-07-06 <For Error Handler > */
#endif
}
示例#3
0
int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2)
{
	unsigned base = (unsigned)MSM_SHARED_RAM_BASE;
	unsigned long flags;
	int ret;

	spin_lock_irqsave(&proc_comm_lock, flags);
	//LGE_CHANGE_S [[email protected]] 2009-04-01 <For Error Handler> 
/* again :*/
	if (proc_comm_wait_for(base + MDM_STATUS, PCOM_READY)) {
			goto crash;
	}
	//LGE_CHANGE_E [[email protected]] 2009-04-01 <For Error Handler> 
	writel(cmd, base + APP_COMMAND);
	writel(data1 ? *data1 : 0, base + APP_DATA1);
	writel(data2 ? *data2 : 0, base + APP_DATA2);

	notify_other_proc_comm();
	
	//LGE_CHANGE_S [[email protected]] 2009-04-01 <For Error Handler> 
		if (proc_comm_wait_for(base + APP_COMMAND, PCOM_CMD_DONE)) {
			goto crash;

	}
	//LGE_CHANGE_E [[email protected]] 2009-04-01 <For Error Handler> 
	if (readl(base + APP_STATUS) == PCOM_CMD_SUCCESS) {
		if (data1)
			*data1 = readl(base + APP_DATA1);
		if (data2)
			*data2 = readl(base + APP_DATA2);
		ret = 0;
	} else {
		ret = -EIO;
	}

	writel(PCOM_CMD_IDLE, base + APP_COMMAND);

	spin_unlock_irqrestore(&proc_comm_lock, flags);
	return ret;
/* LGE_CHANGE_S [[email protected]] 2009-07-06 <For Error Handler > */
crash:
	{
		extern char * error_modem_message ;
		extern int LG_ErrorHandler_enable;
	//	extern int get_status_hidden_reset();
		int ret;
		spin_unlock_irqrestore(&proc_comm_lock, flags);
	
		if (LG_ErrorHandler_enable) // check using proc_comm after arm9 crash 
			return 0;
		
	//	if(get_status_hidden_reset()==0 ) {
			ret = LGE_ErrorHandler_Main(MODEM_CRASH, error_modem_message);
			smsm_reset_modem(ret);
	//	} else {
	//		smsm_reset_modem(SMSM_SYSTEM_REBOOT);
	//	}
		while(1) 
			;
	}
/* LGE_CHANGE_E [[email protected]] 2009-07-06 <For Error Handler > */
}