static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			/*
			 * The sysmon device may not have been probed as yet
			 * after the restart.
			 */
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
			pr_err("mdm restart reason: %s\n", sfr_buf);
/*++SSD_RIL@20121220: For store modem reset information*/
			msr_info_list[mdm_msr_index].valid = 1;
			msr_info_list[mdm_msr_index].msr_time = current_kernel_time();
			snprintf(msr_info_list[mdm_msr_index].modem_errmsg, RD_BUF_SIZE, "%s", sfr_buf);
			if(++mdm_msr_index >= MODEM_ERRMSG_LIST_LEN) {
				mdm_msr_index = 0;
			}
/*--SSD_RIL@20121220*/
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#2
0
static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			/*
			 * The sysmon device may not have been probed as yet
			 * after the restart.
			 */
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
			pr_err("mdm restart reason: %s\n", sfr_buf);

#ifdef CONFIG_PANTECH_ERR_CRASH_LOGGING
// MDM SSR not support
#if (0)
            sky_reset_reason = SYS_RESET_REASON_UNKNOWN;
#endif
#endif

			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#3
0
static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
			pr_err("mdm restart reason: %s\n", sfr_buf);
#ifdef CONFIG_HTC_STORE_MODEM_RESET_INFO
			msr_info_list[mdm_msr_index].valid = 1;
			msr_info_list[mdm_msr_index].msr_time = current_kernel_time();
			snprintf(msr_info_list[mdm_msr_index].modem_errmsg, RD_BUF_SIZE, "%s", sfr_buf);
			if(++mdm_msr_index >= MODEM_ERRMSG_LIST_LEN) {
				mdm_msr_index = 0;
			}
#endif
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#4
0
static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			/*
			 * The sysmon device may not have been probed as yet
			 * after the restart.
			 */
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
// ASUS_BSP+++ Wenli "Modify for modem restart"
#ifndef ASUS_SHIP_BUILD
			int file_handle;
			mm_segment_t oldfs;

			oldfs = get_fs();
			set_fs(KERNEL_DS);
			file_handle = sys_open("/data/log/modem_crash.log", O_CREAT|O_WRONLY|O_SYNC|O_TRUNC, 0644);
			if(!IS_ERR((const void *)file_handle))
			{
				ret = sys_write(file_handle, sfr_buf, strlen(sfr_buf));
				sys_close(file_handle);
			}
			// Save reason on 
			file_handle = sys_open("/data/log/RAMDump0/reason.log", O_CREAT|O_WRONLY|O_SYNC|O_TRUNC, 0644);
			if(!IS_ERR((const void *)file_handle))
			{
				ret = sys_write(file_handle, sfr_buf, strlen(sfr_buf));
				sys_close(file_handle);
			}
			set_fs(oldfs);
#endif
// ASUS_BSP--- Wenli "Modify for modem restart"
			ASUSEvtlog("SSR %s\n", sfr_buf);
			pr_err("mdm restart reason: %s\n", sfr_buf);
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#5
0
static void qsc_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			pr_err("%s: Error retrieving qsc restart reason, ret = %d\n",
					__func__, ret);
		} else {
			pr_err("qsc restart reason: %s\n", sfr_buf);
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#6
0
static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];
#ifdef CONFIG_HTC_STORE_MODEM_RESET_INFO
	unsigned long flags;
#endif

	do {
		msleep(SFR_RETRY_INTERVAL);
#if defined(CONFIG_BUILD_EDIAG)
                pr_info("SYSMON is supposed to be used as char dev with specific purpose.\n");
                ret = -EINVAL;
#else
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
#endif
		if (ret) {
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
			pr_err("mdm restart reason: %s\n", sfr_buf);
#ifdef CONFIG_HTC_STORE_MODEM_RESET_INFO
			spin_lock_irqsave(&msr_info_lock, flags);

			msr_info_list[mdm_msr_index].valid = 1;
			msr_info_list[mdm_msr_index].msr_time = current_kernel_time();
			snprintf(msr_info_list[mdm_msr_index].modem_errmsg, RD_BUF_SIZE, "%s", sfr_buf);
			if(++mdm_msr_index >= MODEM_ERRMSG_LIST_LEN) {
				mdm_msr_index = 0;
			}

			spin_unlock_irqrestore(&msr_info_lock, flags);
#endif
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}
示例#7
0
static void mdm_get_restart_reason(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];
	struct mdm_ctrl *mdm =
		container_of(work, struct mdm_ctrl, restart_reason_work);
	struct device *dev = mdm->dev;

	do {
		ret = sysmon_get_reason(mdm->sysmon_subsys_id, sfr_buf,
							sizeof(sfr_buf));
		if (!ret) {
			dev_err(dev, "mdm restart reason is %s\n", sfr_buf);
			break;
		}
		msleep(SFR_RETRY_INTERVAL);
	} while (++ntries < SFR_MAX_RETRIES);
	if (ntries == SFR_MAX_RETRIES)
		dev_err(dev, "%s: Error retrieving restart reason: %d\n",
						__func__, ret);
	mdm->get_restart_reason = false;
}
static void mdm_restart_reason_fn(struct work_struct *work)
{
	int ret, ntries = 0;
	char sfr_buf[RD_BUF_SIZE];

	do {
		msleep(SFR_RETRY_INTERVAL);
		ret = sysmon_get_reason(SYSMON_SS_EXT_MODEM,
					sfr_buf, sizeof(sfr_buf));
		if (ret) {
			/*
			 * The sysmon device may not have been probed as yet
			 * after the restart.
			 */
			pr_err("%s: Error retrieving mdm restart reason, ret = %d, "
					"%d/%d tries\n", __func__, ret,
					ntries + 1,	SFR_MAX_RETRIES);
		} else {
			pr_err("mdm restart reason: %s\n", sfr_buf);
			break;
		}
	} while (++ntries < SFR_MAX_RETRIES);
}