oleavr-rgl-a500-mini-linux-.../drivers/soc/allwinner/pm/pm_errcode.c
Ole André Vadla Ravnås 169c65d57e Initial commit
2022-05-07 01:01:45 +02:00

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];
}