* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* 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 "pbl/pbl_feature_loader.h"
#include "dms_template.h"
#include "dms/dms_cmd_def.h"
#include "devdrv_user_common.h"
#include "urd_acc_ctrl.h"
#include "log_drv_agent.h"
#include "dms_log_info.h"
#ifdef DMS_UT
#define STATIC
#else
#define STATIC static
#endif
#define DMS_LOG_BUF_SIZE 0x1400000
struct log_info {
void *buffer;
u32 length;
u32 buf_len;
};
STATIC int dms_get_kernel_log_from_logdrv(void *feature, char *in, unsigned int in_len, char *out, unsigned int out_len)
{
struct log_info *arg = NULL;
int ret;
if ((in == NULL) || (out == NULL)) {
dms_err("Invalid parameter. (arg=%s; out=%s)\n", (in == NULL) ? "NULL" : "OK", (out == NULL) ? "NULL" : "OK");
return -EINVAL;
}
if ((in_len != sizeof(struct log_info)) || (out_len != sizeof(u32))) {
dms_err("Invalid len. (in_len=%u; out_len=%u)\n", in_len, out_len);
return -EINVAL;
}
arg = (struct log_info *)in;
if (arg->length != DMS_LOG_BUF_SIZE) {
dms_err("Invalid length. (length=%u)\n", arg->length);
return -EINVAL;
}
ret = log_get_ringbuffer(arg->buffer, arg->length, (u32 *)out);
if (ret != 0) {
return ret;
}
return 0;
}
BEGIN_DMS_MODULE_DECLARATION(DMS_MODULE_LOG)
BEGIN_FEATURE_COMMAND()
ADD_FEATURE_COMMAND(DMS_MODULE_LOG, DMS_MAIN_CMD_LOG, DMS_SUBCMD_GET_LOG_INFO,
NULL, NULL, DMS_SUPPORT_ROOT_ONLY, dms_get_kernel_log_from_logdrv)
END_FEATURE_COMMAND()
END_MODULE_DECLARATION()
int dms_log_init(void)
{
CALL_INIT_MODULE(DMS_MODULE_LOG);
dms_info("Dms log init success.\n");
return 0;
}
DECLAER_FEATURE_AUTO_INIT(dms_log_init, FEATURE_LOADER_STAGE_5);
void dms_log_uninit(void)
{
CALL_EXIT_MODULE(DMS_MODULE_LOG);
dms_info("Dms log uninit success.\n");
}
DECLAER_FEATURE_AUTO_UNINIT(dms_log_uninit, FEATURE_LOADER_STAGE_5);