269 lines
9.1 KiB
C
269 lines
9.1 KiB
C
/*
|
|
* Copyright (c) 2007-2017 Allwinnertech Co., Ltd.
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#include "pm_i.h"
|
|
|
|
static struct errstr_t {
|
|
int last_err;
|
|
const char **error_array; /*save string info for corresponding err code. */
|
|
} pm_errstr_array[MOD_MAX_COUNT];
|
|
|
|
static const char *pm_errstr_suspend_cpu0[ERR_SUSPEND_CPUXSYS_MAX_];
|
|
static void suspend_cpu0_errstr_init(void)
|
|
{
|
|
pm_errstr_suspend_cpu0[error_get_module_error
|
|
(ERR_SUSPEND_CPUXSYS_SHOW_DEVICES_STATE_DONE)]
|
|
= "ERR_SUSPEND_CPUXSYS_SHOW_DEVICES_STATE_DONE";
|
|
pm_errstr_suspend_cpu0[error_get_module_error
|
|
(ERR_SUSPEND_CPUXSYS_CONFIG_MEM_PARA_DONE)]
|
|
= "ERR_SUSPEND_CPUXSYS_CONFIG_MEM_PARA_DONE";
|
|
pm_errstr_suspend_cpu0[error_get_module_error
|
|
(ERR_SUSPEND_CPUXSYS_CONFIG_SUPER_PARA_DONE)]
|
|
= "ERR_SUSPEND_CPUXSYS_CONFIG_SUPER_PARA_DONE";
|
|
pm_errstr_suspend_cpu0[error_get_module_error
|
|
(ERR_SUSPEND_CPUXSYS_CONFIG_WAKEUP_SRC_DONE)]
|
|
= "ERR_SUSPEND_CPUXSYS_CONFIG_WAKEUP_SRC_DONE";
|
|
pm_errstr_array[MOD_SUSPEND_CPUXSYS].last_err =
|
|
error_get_module_error(ERR_SUSPEND_CPUXSYS_MAX_) - 1;
|
|
pm_errstr_array[MOD_SUSPEND_CPUXSYS].error_array =
|
|
pm_errstr_suspend_cpu0;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_resume_cpu0[ERR_RESUME_CPUXSYS_MAX_];
|
|
static void resume_cpu0_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_cpu0[error_get_module_error
|
|
(ERR_RESUME_CPUXSYS_CONFIG_WAKEUP_SRC_DONE)]
|
|
= "ERR_RESUME_CPUXSYS_CONFIG_WAKEUP_SRC_DONE";
|
|
pm_errstr_resume_cpu0[error_get_module_error
|
|
(ERR_RESUME_CPUXSYS_RESUME_DEVICES_DONE)] =
|
|
"ERR_RESUME_CPUXSYS_RESUME_DEVICES_DONE";
|
|
pm_errstr_resume_cpu0[error_get_module_error
|
|
(ERR_RESUME_CPUXSYS_RESUME_CPUXSYS_DONE)] =
|
|
"ERR_RESUME_CPUXSYS_RESUME_CPUXSYS_DONE";
|
|
pm_errstr_resume_cpu0[error_get_module_error
|
|
(ERR_RESUME_CPUXSYS_CONFIG_WAKEUP_SRC_DONE)]
|
|
= "ERR_RESUME_CPUXSYS_CONFIG_WAKEUP_SRC_DONE";
|
|
pm_errstr_array[MOD_RESUME_CPUXSYS].last_err =
|
|
error_get_module_error(ERR_RESUME_CPUXSYS_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_CPUXSYS].error_array = pm_errstr_resume_cpu0;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_first_boot_flag[ERR_FIRST_BOOT_FLAG_MAX_];
|
|
static void first_boot_flag_errstr_init(void)
|
|
{
|
|
pm_errstr_first_boot_flag[error_get_module_error
|
|
(ERR_FIRST_BOOT_FLAG_DONE)] =
|
|
"ERR_FIRST_BOOT_FLAG_DONE";
|
|
pm_errstr_array[MOD_FIRST_BOOT_FLAG].last_err =
|
|
error_get_module_error(ERR_FIRST_BOOT_FLAG_MAX_) - 1;
|
|
pm_errstr_array[MOD_FIRST_BOOT_FLAG].error_array =
|
|
pm_errstr_first_boot_flag;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_freezer_thread[ERR_FREEZER_THREAD_MAX_];
|
|
static void freezer_thread_errstr_init(void)
|
|
{
|
|
pm_errstr_freezer_thread[error_get_module_error
|
|
(ERR_FREEZER_THREAD_DONE)] =
|
|
"ERR_FREEZER_THREAD_DONE";
|
|
pm_errstr_array[MOD_FREEZER_THREAD].last_err =
|
|
error_get_module_error(ERR_FREEZER_THREAD_MAX_) - 1;
|
|
pm_errstr_array[MOD_FREEZER_THREAD].error_array =
|
|
pm_errstr_freezer_thread;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_suspend_devices[ERR_SUSPEND_DEVICES_MAX_];
|
|
static void suspend_devices_errstr_init(void)
|
|
{
|
|
pm_errstr_suspend_devices[error_get_module_error
|
|
(ERR_SUSPEND_DEVICES_SUSPEND_DEVICES_DONE)]
|
|
= "ERR_SUSPEND_DEVICES_SUSPEND_DEVICES_DONE";
|
|
pm_errstr_suspend_devices[error_get_module_error
|
|
(ERR_SUSPEND_DEVICES_LATE_SUSPEND_DEVICES_DONE)]
|
|
= "ERR_SUSPEND_DEVICES_LATE_SUSPEND_DEVICES_DONE";
|
|
pm_errstr_suspend_devices[error_get_module_error
|
|
(ERR_SUSPEND_DEVICES_SUSPEND_DEVICES_FAILED)]
|
|
= "ERR_SUSPEND_DEVICES_SUSPEND_DEVICES_FAILED";
|
|
pm_errstr_array[MOD_SUSPEND_DEVICES].last_err =
|
|
error_get_module_error(ERR_SUSPEND_DEVICES_MAX_) - 1;
|
|
pm_errstr_array[MOD_SUSPEND_DEVICES].error_array =
|
|
pm_errstr_suspend_devices;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_suspend_platform[ERR_SUSPEND_PLATFORM_MAX_];
|
|
static void suspend_platform_errstr_init(void)
|
|
{
|
|
pm_errstr_suspend_platform[error_get_module_error
|
|
(ERR_SUSPEND_PLATFORM_DONE)] =
|
|
"ERR_SUSPEND_PLATFORM_DONE";
|
|
pm_errstr_array[MOD_SUSPEND_PLATFORM].last_err =
|
|
error_get_module_error(ERR_SUSPEND_PLATFORM_MAX_) - 1;
|
|
pm_errstr_array[MOD_SUSPEND_PLATFORM].error_array =
|
|
pm_errstr_suspend_platform;
|
|
|
|
}
|
|
|
|
static const char
|
|
*pm_errstr_suspend_processors[ERR_SUSPEND_PROCESSORS_MAX_];
|
|
static void suspend_processors_errstr_init(void)
|
|
{
|
|
pm_errstr_suspend_processors[error_get_module_error
|
|
(ERR_SUSPEND_PROCESSORS_DONE)] =
|
|
"ERR_SUSPEND_PROCESSORS_DONE";
|
|
pm_errstr_array[MOD_SUSPEND_PROCESSORS].last_err =
|
|
error_get_module_error(ERR_SUSPEND_PROCESSORS_MAX_) - 1;
|
|
pm_errstr_array[MOD_SUSPEND_PROCESSORS].error_array =
|
|
pm_errstr_suspend_processors;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_suspend_core[ERR_SUSPEND_CORE_MAX_];
|
|
static void suspend_core_errstr_init(void)
|
|
{
|
|
pm_errstr_suspend_core[error_get_module_error
|
|
(ERR_SUSPEND_CORE_DONE)] =
|
|
"ERR_SUSPEND_CORE_DONE";
|
|
pm_errstr_array[MOD_SUSPEND_CORE].last_err =
|
|
error_get_module_error(ERR_SUSPEND_CORE_MAX_) - 1;
|
|
pm_errstr_array[MOD_SUSPEND_CORE].error_array = pm_errstr_suspend_core;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_resume_devices[ERR_RESUME_DEVICES_MAX_];
|
|
static void resume_devices_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_devices[error_get_module_error
|
|
(ERR_RESUME_DEVICES_EARLY_RESUME_DEVICES_DONE)]
|
|
= "ERR_RESUME_DEVICES_EARLY_RESUME_DEVICES_DONE";
|
|
pm_errstr_resume_devices[error_get_module_error
|
|
(ERR_RESUME_DEVICES_RESUME_DEVICES_DONE)]
|
|
= "ERR_RESUME_DEVICES_RESUME_DEVICES_DONE";
|
|
pm_errstr_array[MOD_RESUME_DEVICES].last_err =
|
|
error_get_module_error(ERR_RESUME_DEVICES_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_DEVICES].error_array =
|
|
pm_errstr_resume_devices;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_resume_platform[ERR_RESUME_PLATFORM_MAX_];
|
|
static void resume_platform_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_platform[error_get_module_error
|
|
(ERR_RESUME_PLATFORM_DONE)] =
|
|
"ERR_RESUME_PLATFORM_DONE";
|
|
pm_errstr_array[MOD_RESUME_PLATFORM].last_err =
|
|
error_get_module_error(ERR_RESUME_PLATFORM_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_PLATFORM].error_array =
|
|
pm_errstr_resume_platform;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_resume_processors[ERR_RESUME_PROCESSORS_MAX_];
|
|
static void resume_processors_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_processors[error_get_module_error
|
|
(ERR_RESUME_PROCESSORS_DONE)] =
|
|
"ERR_RESUME_PROCESSORS_DONE";
|
|
pm_errstr_array[MOD_RESUME_PROCESSORS].last_err =
|
|
error_get_module_error(ERR_RESUME_PROCESSORS_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_PROCESSORS].error_array =
|
|
pm_errstr_resume_processors;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_resume_core[ERR_RESUME_CORE_MAX_];
|
|
static void resume_core_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_core[error_get_module_error(ERR_RESUME_CORE_DONE)]
|
|
= "ERR_RESUME_CORE_DONE";
|
|
pm_errstr_array[MOD_RESUME_CORE].last_err =
|
|
error_get_module_error(ERR_RESUME_CORE_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_CORE].error_array = pm_errstr_resume_core;
|
|
|
|
}
|
|
|
|
static const char *pm_errstr_thaw_thread[ERR_THAW_THREAD_MAX_];
|
|
static void thaw_thread_errstr_init(void)
|
|
{
|
|
pm_errstr_thaw_thread[error_get_module_error(ERR_THAW_THREAD_DONE)]
|
|
= "ERR_THAW_THREAD_DONE";
|
|
pm_errstr_array[MOD_THAW_THREAD].last_err =
|
|
error_get_module_error(ERR_THAW_THREAD_MAX_) - 1;
|
|
pm_errstr_array[MOD_THAW_THREAD].error_array = pm_errstr_thaw_thread;
|
|
|
|
}
|
|
|
|
static const char
|
|
*pm_errstr_resume_complete_flag[ERR_RESUME_COMPLETE_FLAG_MAX_];
|
|
static void resume_complete_flag_errstr_init(void)
|
|
{
|
|
pm_errstr_resume_complete_flag[error_get_module_error
|
|
(ERR_RESUME_COMPLETE_FLAG_DONE)] =
|
|
"ERR_RESUME_COMPLETE_FLAG_DONE";
|
|
pm_errstr_array[MOD_RESUME_COMPLETE_FLAG].last_err =
|
|
error_get_module_error(ERR_RESUME_COMPLETE_FLAG_MAX_) - 1;
|
|
pm_errstr_array[MOD_RESUME_COMPLETE_FLAG].error_array =
|
|
pm_errstr_resume_complete_flag;
|
|
|
|
}
|
|
|
|
static void errstr_init(void)
|
|
{
|
|
suspend_cpu0_errstr_init();
|
|
resume_cpu0_errstr_init();
|
|
first_boot_flag_errstr_init();
|
|
resume_complete_flag_errstr_init();
|
|
suspend_devices_errstr_init();
|
|
suspend_platform_errstr_init();
|
|
suspend_processors_errstr_init();
|
|
suspend_core_errstr_init();
|
|
resume_devices_errstr_init();
|
|
resume_platform_errstr_init();
|
|
resume_processors_errstr_init();
|
|
resume_core_errstr_init();
|
|
resume_cpu0_errstr_init();
|
|
freezer_thread_errstr_init();
|
|
thaw_thread_errstr_init();
|
|
|
|
return;
|
|
}
|
|
|
|
const char *pm_errstr(error_t error)
|
|
{
|
|
static bool inited;
|
|
short module_id = error_get_module_id(error);
|
|
short error_id = error_get_module_error(error);
|
|
if (false == inited) {
|
|
errstr_init();
|
|
inited = true;
|
|
}
|
|
if (module_id >= MOD_MAX_COUNT)
|
|
return "ERR_MODULE_ID_EXCEED_MOD_MAX_COUNT";
|
|
|
|
if (error_id > pm_errstr_array[module_id].last_err)
|
|
return "ERR_ERRSTR_EXCEED_MAX_ID";
|
|
|
|
if ((NULL == pm_errstr_array[module_id].error_array)
|
|
|| (NULL == pm_errstr_array[module_id].error_array[error_id]))
|
|
return "ERR_ERRSTR_NOT_DEFINED";
|
|
|
|
return pm_errstr_array[module_id].error_array[error_id];
|
|
|
|
}
|