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