1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
29d4fa1a1SMauro Carvalho Chehab /*
39d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab  *
69d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab  *
109d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab  * more details.
149d4fa1a1SMauro Carvalho Chehab  */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #ifndef __DEBUG_PUBLIC_H_INCLUDED__
179d4fa1a1SMauro Carvalho Chehab #define __DEBUG_PUBLIC_H_INCLUDED__
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab #include <type_support.h>
20100e8989SMauro Carvalho Chehab #include <ia_css_types.h>
21f90e73ceSMauro Carvalho Chehab #include "system_local.h"
229d4fa1a1SMauro Carvalho Chehab 
239d4fa1a1SMauro Carvalho Chehab /*! brief
249d4fa1a1SMauro Carvalho Chehab  *
259d4fa1a1SMauro Carvalho Chehab  * Simple queuing trace buffer for debug data
269d4fa1a1SMauro Carvalho Chehab  * instantiatable in SP DMEM
279d4fa1a1SMauro Carvalho Chehab  *
28*871f13feSJiang Jian  * The buffer has a remote and a local store
299d4fa1a1SMauro Carvalho Chehab  * which contain duplicate data (when in sync).
309d4fa1a1SMauro Carvalho Chehab  * The buffers are automatically synched when the
319d4fa1a1SMauro Carvalho Chehab  * user dequeues, or manualy using the synch function
329d4fa1a1SMauro Carvalho Chehab  *
339d4fa1a1SMauro Carvalho Chehab  * An alternative (storage efficient) implementation
349d4fa1a1SMauro Carvalho Chehab  * could manage the buffers to contain unique data
359d4fa1a1SMauro Carvalho Chehab  *
369d4fa1a1SMauro Carvalho Chehab  * The buffer empty status is computed from local
379d4fa1a1SMauro Carvalho Chehab  * state which does not reflect the presence of data
389d4fa1a1SMauro Carvalho Chehab  * in the remote buffer (unless the alternative
399d4fa1a1SMauro Carvalho Chehab  * implementation is followed)
409d4fa1a1SMauro Carvalho Chehab  */
419d4fa1a1SMauro Carvalho Chehab 
429d4fa1a1SMauro Carvalho Chehab typedef struct debug_data_s		debug_data_t;
439d4fa1a1SMauro Carvalho Chehab typedef struct debug_data_ddr_s	debug_data_ddr_t;
449d4fa1a1SMauro Carvalho Chehab 
459d4fa1a1SMauro Carvalho Chehab extern debug_data_t				*debug_data_ptr;
469d4fa1a1SMauro Carvalho Chehab extern hrt_address				debug_buffer_address;
47100e8989SMauro Carvalho Chehab extern ia_css_ptr				debug_buffer_ddr_address;
489d4fa1a1SMauro Carvalho Chehab 
499d4fa1a1SMauro Carvalho Chehab /*! Check the empty state of the local debug data buffer
509d4fa1a1SMauro Carvalho Chehab 
519d4fa1a1SMauro Carvalho Chehab  \return isEmpty(buffer)
529d4fa1a1SMauro Carvalho Chehab  */
539d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_DEBUG_H bool is_debug_buffer_empty(void);
549d4fa1a1SMauro Carvalho Chehab 
559d4fa1a1SMauro Carvalho Chehab /*! Dequeue a token from the debug data buffer
569d4fa1a1SMauro Carvalho Chehab 
579d4fa1a1SMauro Carvalho Chehab  \return isEmpty(buffer)?0:buffer[head]
589d4fa1a1SMauro Carvalho Chehab  */
599d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_DEBUG_H hrt_data debug_dequeue(void);
609d4fa1a1SMauro Carvalho Chehab 
619d4fa1a1SMauro Carvalho Chehab /*! Synchronise the remote buffer to the local buffer
629d4fa1a1SMauro Carvalho Chehab 
639d4fa1a1SMauro Carvalho Chehab  \return none
649d4fa1a1SMauro Carvalho Chehab  */
659d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_DEBUG_H void debug_synch_queue(void);
669d4fa1a1SMauro Carvalho Chehab 
679d4fa1a1SMauro Carvalho Chehab /*! Synchronise the remote buffer to the local buffer
689d4fa1a1SMauro Carvalho Chehab 
699d4fa1a1SMauro Carvalho Chehab  \return none
709d4fa1a1SMauro Carvalho Chehab  */
719d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_DEBUG_H void debug_synch_queue_isp(void);
729d4fa1a1SMauro Carvalho Chehab 
739d4fa1a1SMauro Carvalho Chehab /*! Synchronise the remote buffer to the local buffer
749d4fa1a1SMauro Carvalho Chehab 
759d4fa1a1SMauro Carvalho Chehab  \return none
769d4fa1a1SMauro Carvalho Chehab  */
779d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_DEBUG_H void debug_synch_queue_ddr(void);
789d4fa1a1SMauro Carvalho Chehab 
799d4fa1a1SMauro Carvalho Chehab /*! Set the offset/address of the (remote) debug buffer
809d4fa1a1SMauro Carvalho Chehab 
819d4fa1a1SMauro Carvalho Chehab  \return none
829d4fa1a1SMauro Carvalho Chehab  */
839d4fa1a1SMauro Carvalho Chehab void debug_buffer_init(
849d4fa1a1SMauro Carvalho Chehab     const hrt_address		addr);
859d4fa1a1SMauro Carvalho Chehab 
869d4fa1a1SMauro Carvalho Chehab /*! Set the offset/address of the (remote) debug buffer
879d4fa1a1SMauro Carvalho Chehab 
889d4fa1a1SMauro Carvalho Chehab  \return none
899d4fa1a1SMauro Carvalho Chehab  */
909d4fa1a1SMauro Carvalho Chehab void debug_buffer_ddr_init(
91100e8989SMauro Carvalho Chehab     const ia_css_ptr		addr);
929d4fa1a1SMauro Carvalho Chehab 
939d4fa1a1SMauro Carvalho Chehab /*! Set the (remote) operating mode of the debug buffer
949d4fa1a1SMauro Carvalho Chehab 
959d4fa1a1SMauro Carvalho Chehab  \return none
969d4fa1a1SMauro Carvalho Chehab  */
979d4fa1a1SMauro Carvalho Chehab void debug_buffer_setmode(
989d4fa1a1SMauro Carvalho Chehab     const debug_buf_mode_t	mode);
999d4fa1a1SMauro Carvalho Chehab 
1009d4fa1a1SMauro Carvalho Chehab #endif /* __DEBUG_PUBLIC_H_INCLUDED__ */
101