1/*
2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
14 * of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 * Authors:
25 *    Fei Jiang <fei.jiang@intel.com>
26 *
27 */
28
29#ifndef _PSB_DEBUG_H_
30#define _PSB_DEBUG_H_
31
32#include <assert.h>
33#include <string.h>
34#include <stdio.h>
35#include <stdarg.h>
36#include <time.h>
37#include <unistd.h>
38#include "psb_buffer.h"
39
40/* #define VA_EMULATOR 1 */
41
42#ifdef DEBUG_TRACE
43#ifndef ASSERT
44#define ASSERT  assert
45#endif
46
47#ifndef IMG_ASSERT
48#define IMG_ASSERT  assert
49#endif
50
51#else /* DEBUG_TRACE */
52
53#undef ASSERT
54#undef IMG_ASSERT
55#define ASSERT(x)
56#define IMG_ASSERT(x)
57
58#endif /* DEBUG_TRACE */
59
60/****************************
61 * debug level structures
62 ****************************/
63typedef enum
64{
65    VIDEO_DEBUG_ERROR	    =   0x1,
66    VIDEO_DEBUG_WARNING	    =   0x2,
67    VIDEO_DEBUG_GENERAL	    =   0x4,
68    VIDEO_DEBUG_INIT        =   0x8,
69    VIDEO_DEBUG_ENTRY       =   0x10,
70    VIDEO_DECODE_DEBUG      =   0x100,
71    VIDEO_ENCODE_DEBUG      =   0x200,
72    VIDEO_DISPLAY_DEBUG     =   0x400,
73
74    VIDEO_ENCODE_PDUMP     =   0x1000,
75    VIDEO_ENCODE_HEADER    =   0x2000,
76} DEBUG_LEVEL;
77
78/****************************
79 * trace level structures
80 ****************************/
81typedef enum
82{
83    VABUF_TRACE		=   0x1,
84    CMDMSG_TRACE	=   0x2,
85    LLDMA_TRACE	    =   0x4,
86    AUXBUF_TRACE    =   0x8,
87} TRACE_LEVEL;
88
89/****************************
90 * debug-trace option structures
91 ****************************/
92typedef enum
93{
94    TIME_DEBUG		=   0x1,
95    THREAD_DEBUG    =   0x2,
96    PRINT_TO_LOGCAT	=   0x10,
97    PRINT_TO_FILE   =   0x20,
98} DEBUG_TRACE_OPTION;
99
100FILE *psb_video_debug_fp;
101int  debug_fp_count;
102int psb_video_debug_level;
103int psb_video_debug_option;
104
105FILE *psb_video_trace_fp;
106int psb_video_trace_level;
107int psb_video_trace_option;
108
109FILE *psb_dump_vabuf_fp;
110FILE *psb_dump_vabuf_verbose_fp;
111FILE *psb_dump_yuvbuf_fp;
112
113int psb_video_dump_cmdbuf;
114uint32_t g_hexdump_offset;
115
116void psb__debug_w(uint32_t val, char *fmt, uint32_t bit_to, uint32_t bit_from);
117
118#define DW(wd, sym, to, from) psb__debug_w(((uint32_t *)pasDmaList)[wd], "LLDMA: " #sym " = %d\n", to, from);
119#define DWH(wd, sym, to, from) psb__debug_w(((uint32_t *)pasDmaList)[wd], "LLDMA: " #sym " = %08x\n", to, from);
120
121void psb__open_log(void);
122void psb__close_log(void);
123int psb_parse_config(char *env, char *env_value);
124void drv_debug_msg(DEBUG_LEVEL debug_level, const char *msg, ...);
125void psb__trace_message(const char *msg, ...);
126
127/*
128 * Dump contents of buffer object after command submission
129 */
130void psb__debug_schedule_hexdump(const char *name, psb_buffer_p buf, uint32_t offset, uint32_t size);
131void psb__hexdump(unsigned char *addr, int size);
132
133void debug_dump_cmdbuf(uint32_t *cmd_idx, uint32_t cmd_size_in_bytes);
134
135#define DEBUG_FAILURE           while(vaStatus) {drv_debug_msg(VIDEO_DEBUG_ERROR, "%s fails with '%d' at %s:%d\n", __FUNCTION__, vaStatus, __FILE__, __LINE__);break;}
136#define DEBUG_FAILURE_RET       while(ret)      {drv_debug_msg(VIDEO_DEBUG_ERROR, "%s fails with '%s' at %s:%d\n", __FUNCTION__, strerror(ret < 0 ? -ret : ret), __FILE__, __LINE__);break;}
137
138#define DEBUG_FUNC_ENTER while(1) {drv_debug_msg(VIDEO_DEBUG_ENTRY, "%s enter.\n", __FUNCTION__); break;}
139#define DEBUG_FUNC_EXIT while(1) {drv_debug_msg(VIDEO_DEBUG_ENTRY, "%s exit.\n", __FUNCTION__); break;}
140
141uint32_t debug_cmd_start[MAX_CMD_COUNT];
142uint32_t debug_cmd_size[MAX_CMD_COUNT];
143uint32_t debug_cmd_count;
144uint32_t debug_lldma_count;
145uint32_t debug_lldma_start;
146
147#define MAX_DUMP_COUNT  20
148const char * debug_dump_name[MAX_DUMP_COUNT];
149psb_buffer_p debug_dump_buf[MAX_DUMP_COUNT];
150uint32_t     debug_dump_offset[MAX_DUMP_COUNT];
151uint32_t     debug_dump_size[MAX_DUMP_COUNT];
152uint32_t     debug_dump_count;
153
154int psb_cmdbuf_dump(unsigned int *buffer, int byte_size);
155int psb__dump_va_buffers(object_buffer_p obj_buffer);
156int psb__dump_va_buffers_verbose(object_buffer_p obj_buffer);
157
158#endif /* _PSB_DEBUG_H_ */
159