singe/thirdparty/rockchip-mpp/mpp/hal/inc/hal_dbg.h
2026-09-10 20:17:28 -05:00

85 lines
3.3 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2026 Rockchip Electronics Co., Ltd.
*/
#ifndef HAL_DBG_H
#define HAL_DBG_H
#include "mpp_debug.h"
#define HAL_DBG_DIS (0)
#define HAL_DBG_INFO (0x00000001)
#define HAL_DBG_DETAIL (0x00000002)
#define HAL_DBG_DUMP (0x00000010)
#define HAL_DBG_STA_CHK (0x00000020)
#define HAL_DBG_SET_REG (0x00000040)
#define HAL_DBG_GET_REG (0x00000080) /* after hw work */
#define HAL_DBG_LOAD_DATA (0x00000100)
#define HAL_DBG_LOG (0x00000200) /* printf-style text log */
#define HAL_DBG_MASK (0xffffffff)
#define HAL_REG_SET_FNAME "reg_cfg_set.txt"
#define HAL_REG_GET_FNAME "reg_cfg_get.txt"
#define hal_dbg_flag_en(ctx, flag) \
({ ((NULL != ctx) && 0 != (ctx->dbg_flag & flag)) ? 1 : 0; })
#define hal_dbg_dumpf_buf(ctx, fname, mbuf, off, byte_sz, line_bits, fmode) \
do { \
hal_dbg_dump_data(ctx, fname, (void *)mpp_buffer_get_ptr(mbuf) + off, \
(byte_sz) * 8, line_bits, 0, fmode); \
} while (0)
#define hal_dbg_dumpf_raw_buf(ctx, fname, mbuf, off, byte_sz, fmode) \
do { \
hal_dbg_dump_raw_data(ctx, fname, \
(void *)mpp_buffer_get_ptr(mbuf) + off, \
byte_sz, fmode); \
} while (0)
#define hal_dbg_dump_set_regs(ctx, regs, reg_cnt, base_idx, mode) \
do { \
if (hal_dbg_flag_en(ctx, HAL_DBG_SET_REG)) \
hal_dbg_dump_regs(ctx, regs, reg_cnt, base_idx, HAL_REG_SET_FNAME, mode); \
} while (0)
#define hal_dbg_dump_get_regs(ctx, regs, reg_cnt, base_idx, mode) \
do { \
if (hal_dbg_flag_en(ctx, HAL_DBG_GET_REG)) \
hal_dbg_dump_regs(ctx, regs, reg_cnt, base_idx, HAL_REG_GET_FNAME, mode); \
} while (0)
typedef struct HalDbgCtx_t {
RK_U32 dbg_flag;
const char *dump_root_dir;
char *dump_sub_dir;
char *dump_cur_dir;
RK_U32 cur_dir_buf_len;
RK_U32 subdir_name_off;
RK_U32 cur_frm_idx;
RK_U32 target_frm_idx; /* dump only this frame */
char load_fname[256]; /* track current loading file name */
RK_U32 load_offset; /* track loaded offset for appending */
} HalDbgCtx;
MPP_RET hal_dbg_init(HalDbgCtx **ctx, const char *dump_sub_dir);
MPP_RET hal_dbg_deinit(HalDbgCtx **ctx);
MPP_RET hal_dbg_setup(HalDbgCtx *ctx, const char *fmt, ...);
MPP_RET hal_dbg_finish(HalDbgCtx *ctx);
MPP_RET hal_dbg_dump_data(HalDbgCtx *ctx, char *fname, void *data,
RK_U32 data_bit_size, RK_U32 line_bits,
RK_U32 big_end, const char *mode);
MPP_RET hal_dbg_dump_raw_data(HalDbgCtx *ctx, const char *fname, void *data,
size_t byte_sz, const char *mode);
MPP_RET hal_dbg_dump_regs(HalDbgCtx *ctx, RK_U32 *regs, RK_U32 reg_cnt,
RK_U32 base_idx, const char *fname, const char *mode);
MPP_RET hal_dbg_log(HalDbgCtx *ctx, const char *fname, const char *mode,
const char *fmt, ...) __attribute__((format(printf, 4, 5)));
MPP_RET hal_dbg_load_data(HalDbgCtx *ctx, const char *fname, void *buf,
RK_U32 buf_size, const char *mode);
#endif /* HAL_DBG_H */