79 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only OR MIT */2/* Copyright (c) 2023 Imagination Technologies Ltd. */3 4#ifndef PVR_FW_TRACE_H5#define PVR_FW_TRACE_H6 7#include <drm/drm_file.h>8#include <linux/types.h>9 10#include "pvr_rogue_fwif.h"11 12/* Forward declaration from pvr_device.h. */13struct pvr_device;14 15/* Forward declaration from pvr_gem.h. */16struct pvr_fw_object;17 18/* Forward declarations from pvr_rogue_fwif.h */19struct rogue_fwif_tracebuf;20struct rogue_fwif_tracebuf_space;21 22/**23 * struct pvr_fw_trace_buffer - Structure representing a trace buffer24 */25struct pvr_fw_trace_buffer {26 /** @buf_obj: FW buffer object representing trace buffer. */27 struct pvr_fw_object *buf_obj;28 29 /** @buf: Pointer to CPU mapping of trace buffer. */30 u32 *buf;31 32 /**33 * @tracebuf_space: Pointer to FW tracebuf_space structure for this34 * trace buffer.35 */36 struct rogue_fwif_tracebuf_space *tracebuf_space;37};38 39/**40 * struct pvr_fw_trace - Device firmware trace data41 */42struct pvr_fw_trace {43 /**44 * @tracebuf_ctrl_obj: Object representing FW trace buffer control45 * structure.46 */47 struct pvr_fw_object *tracebuf_ctrl_obj;48 49 /**50 * @tracebuf_ctrl: Pointer to CPU mapping of FW trace buffer control51 * structure.52 */53 struct rogue_fwif_tracebuf *tracebuf_ctrl;54 55 /**56 * @buffers: Array representing the actual trace buffers owned by this57 * device.58 */59 struct pvr_fw_trace_buffer buffers[ROGUE_FW_THREAD_MAX];60 61 /** @group_mask: Mask of enabled trace groups. */62 u32 group_mask;63};64 65int pvr_fw_trace_init(struct pvr_device *pvr_dev);66void pvr_fw_trace_fini(struct pvr_device *pvr_dev);67 68#if defined(CONFIG_DEBUG_FS)69/* Forward declaration from <linux/dcache.h>. */70struct dentry;71 72void pvr_fw_trace_mask_update(struct pvr_device *pvr_dev, u32 old_mask,73 u32 new_mask);74 75void pvr_fw_trace_debugfs_init(struct pvr_device *pvr_dev, struct dentry *dir);76#endif /* defined(CONFIG_DEBUG_FS) */77 78#endif /* PVR_FW_TRACE_H */79