1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2015, Intel Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 */
15
16#ifndef __DEBUG_PUBLIC_H_INCLUDED__
17#define __DEBUG_PUBLIC_H_INCLUDED__
18
19#include <type_support.h>
20#include <ia_css_types.h>
21#include "system_local.h"
22
23/*! brief
24 *
25 * Simple queuing trace buffer for debug data
26 * instantiatable in SP DMEM
27 *
28 * The buffer has a remote and a local store
29 * which contain duplicate data (when in sync).
30 * The buffers are automatically synched when the
31 * user dequeues, or manualy using the synch function
32 *
33 * An alternative (storage efficient) implementation
34 * could manage the buffers to contain unique data
35 *
36 * The buffer empty status is computed from local
37 * state which does not reflect the presence of data
38 * in the remote buffer (unless the alternative
39 * implementation is followed)
40 */
41
42typedef struct debug_data_s		debug_data_t;
43typedef struct debug_data_ddr_s	debug_data_ddr_t;
44
45extern debug_data_t				*debug_data_ptr;
46extern hrt_address				debug_buffer_address;
47extern ia_css_ptr				debug_buffer_ddr_address;
48
49/*! Check the empty state of the local debug data buffer
50
51 \return isEmpty(buffer)
52 */
53STORAGE_CLASS_DEBUG_H bool is_debug_buffer_empty(void);
54
55/*! Dequeue a token from the debug data buffer
56
57 \return isEmpty(buffer)?0:buffer[head]
58 */
59STORAGE_CLASS_DEBUG_H hrt_data debug_dequeue(void);
60
61/*! Synchronise the remote buffer to the local buffer
62
63 \return none
64 */
65STORAGE_CLASS_DEBUG_H void debug_synch_queue(void);
66
67/*! Synchronise the remote buffer to the local buffer
68
69 \return none
70 */
71STORAGE_CLASS_DEBUG_H void debug_synch_queue_isp(void);
72
73/*! Synchronise the remote buffer to the local buffer
74
75 \return none
76 */
77STORAGE_CLASS_DEBUG_H void debug_synch_queue_ddr(void);
78
79/*! Set the offset/address of the (remote) debug buffer
80
81 \return none
82 */
83void debug_buffer_init(
84    const hrt_address		addr);
85
86/*! Set the offset/address of the (remote) debug buffer
87
88 \return none
89 */
90void debug_buffer_ddr_init(
91    const ia_css_ptr		addr);
92
93/*! Set the (remote) operating mode of the debug buffer
94
95 \return none
96 */
97void debug_buffer_setmode(
98    const debug_buf_mode_t	mode);
99
100#endif /* __DEBUG_PUBLIC_H_INCLUDED__ */
101