psb_drv_debug.c revision 29781ffb2cbf9fb72df9fc538c537690c3dd7cab
1/*
2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3 * Copyright (c) Imagination Technologies Limited, UK
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial portions
15 * of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 * Authors:
26 *    Fei Jiang <fei.jiang@intel.com>
27 *
28 */
29
30#include <va/va_backend.h>
31#include <va/va_backend_tpi.h>
32#include <va/va_backend_egl.h>
33#include <va/va_dricommon.h>
34
35#include "psb_drv_video.h"
36#include "psb_drv_debug.h"
37#include "psb_buffer.h"
38#include "psb_cmdbuf.h"
39#include "psb_surface.h"
40#include "hwdefs/mem_io.h"
41#include "hwdefs/msvdx_offsets.h"
42#include "hwdefs/dma_api.h"
43#include "hwdefs/reg_io2.h"
44#include "hwdefs/msvdx_vec_reg_io2.h"
45#include "hwdefs/msvdx_vdmc_reg_io2.h"
46#include "hwdefs/msvdx_mtx_reg_io2.h"
47#include "hwdefs/msvdx_dmac_linked_list.h"
48#include "hwdefs/msvdx_rendec_mtx_slice_cntrl_reg_io2.h"
49#include "hwdefs/dxva_cmdseq_msg.h"
50#include "hwdefs/dxva_fw_ctrl.h"
51#include "hwdefs/fwrk_msg_mem_io.h"
52#include "hwdefs/dxva_msg.h"
53#include "hwdefs/msvdx_cmds_io2.h"
54
55void psb__open_log(void)
56{
57    char log_fn[1024];
58    unsigned int suffix;
59
60    if ((psb_video_debug_fp != NULL) && (psb_video_debug_fp != stderr)) {
61        debug_fp_count++;
62    } else {
63        /* psb video info debug */
64        if (psb_parse_config("PSB_VIDEO_DEBUG", &log_fn[0]) == 0) {
65            suffix = 0xffff & ((unsigned int)time(NULL));
66            snprintf(log_fn + strnlen(log_fn, 1024),
67                     (1024 - 8 - strnlen(log_fn, 1024)),
68                     ".%d.%d", getpid(), suffix);
69            psb_video_debug_fp = fopen(log_fn, "w");
70            if (psb_video_debug_fp == 0) {
71                drv_debug_msg(VIDEO_DEBUG_ERROR, "Log file %s open failed, reason %s, fall back to stderr\n",
72                                   log_fn, strerror(errno));
73                psb_video_debug_fp = stderr;
74            } else {
75                drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s open successfully\n", log_fn);
76                debug_fp_count++;
77            }
78#ifdef ANDROID
79            LOGD("PSB_VIDEO_DEBUG is enabled.\n");
80#endif
81        } else {
82            psb_video_debug_fp = NULL;
83        }
84    }
85
86    if(psb_parse_config("PSB_VIDEO_TRACE", &log_fn[0]) == 0) {
87        unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
88        time_t curtime;
89
90        if(strcmp(log_fn, "/dev/stdout") != 0)
91            sprintf(log_fn + strlen(log_fn), ".%d", suffix);
92        psb_video_trace_fp = fopen(log_fn, "w");
93        if (psb_video_trace_fp == NULL)
94            psb_video_trace_fp = stderr;
95        time(&curtime);
96        fprintf(psb_video_trace_fp, "---- %s\n---- Start Trace ----\n", ctime(&curtime));
97        debug_dump_count = 0;
98        g_hexdump_offset = 0;
99#ifdef ANDROID
100        LOGD("PSB_VIDEO_TRACE is enabled.\n");
101#endif
102    } else {
103        psb_video_trace_fp = NULL;
104    }
105
106    /* debug level include error, warning, general, init, entry, ...... */
107    if(psb_parse_config("PSB_VIDEO_DEBUG_LEVEL", &log_fn[0]) == 0) {
108        psb_video_debug_level = atoi(log_fn);
109#ifdef ANDROID
110        LOGD("psb_video_debug_level is %d parsed.\n", psb_video_debug_level);
111#endif
112    } else {
113        psb_video_debug_level = 0x1;
114    }
115
116    /* control debug output option, logcat output or print to file */
117    if(psb_parse_config("PSB_VIDEO_DEBUG_OPTION", &log_fn[0]) == 0) {
118        psb_video_debug_option = atoi(log_fn);
119#ifdef ANDROID
120        LOGD("psb_video_debug_option is %d parsed.\n", psb_video_debug_option);
121#endif
122    } else {
123        psb_video_debug_option = 0;
124    }
125
126    /* trace level include vabuf, cmdmsg buf, aux buffer, lldma */
127    if(psb_parse_config("PSB_VIDEO_TRACE_LEVEL", &log_fn[0]) == 0) {
128        psb_video_trace_level = atoi(log_fn);
129#ifdef ANDROID
130        LOGD("psb_video_trace_level is %d parsed.\n", psb_video_trace_level);
131#endif
132    } else {
133        psb_video_trace_level = 0;
134    }
135
136    /* control trace output option, logcat output or print to file */
137    if(psb_parse_config("PSB_VIDEO_TRACE_OPTION", &log_fn[0]) == 0) {
138        psb_video_trace_option = atoi(log_fn);
139#ifdef ANDROID
140        LOGD("psb_video_debug_option is %d parsed.\n", psb_video_trace_option);
141#endif
142    } else {
143        psb_video_trace_option = 0;
144    }
145
146    /* cmdbuf dump, every frame decoded cmdbuf dump to /data/ctrlAlloc%i.txt */
147    if(psb_parse_config("PSB_VIDEO_DUMP_CMDBUF", &log_fn[0]) == 0) {
148        if(strstr(log_fn, "true") != NULL)
149            psb_video_dump_cmdbuf = TRUE;
150        else
151            psb_video_dump_cmdbuf = FALSE;
152#ifdef ANDROID
153        LOGD("PSB_VIDEO_DUMP_CMDBUF is %d.\n", psb_video_dump_cmdbuf);
154#endif
155    } else {
156        psb_video_dump_cmdbuf = FALSE;
157    }
158
159    /* psb video va buffers dump */
160    if(psb_parse_config("PSB_VIDEO_DUMP_VABUF", &log_fn[0]) == 0) {
161        unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
162        if(strcmp(log_fn, "/dev/stdout") != 0)
163            sprintf(log_fn + strlen(log_fn), ".%d", suffix);
164        psb_dump_vabuf_fp = fopen(log_fn, "w");
165#ifdef ANDROID
166        LOGD("PSB_VIDEO_DUMP_VABUF is enabled.\n");
167#endif
168    } else {
169        psb_dump_vabuf_fp = NULL;
170    }
171
172    /* psb video va buffer verbose dump */
173    if(psb_parse_config("PSB_VIDEO_DUMP_VABUF_VERBOSE", &log_fn[0]) == 0) {
174        unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
175        if(strcmp(log_fn, "/dev/stdout") != 0)
176            sprintf(log_fn + strlen(log_fn), ".%d", suffix);
177        psb_dump_vabuf_verbose_fp = fopen(log_fn, "w");
178#ifdef ANDROID
179        LOGD("PSB_VIDEO_DUMP_VABUF_VERBOSE is enabled.\n");
180#endif
181    } else {
182        psb_dump_vabuf_verbose_fp = NULL;
183    }
184
185    /* dump decoded surface to a yuv file */
186    if(psb_parse_config("PSB_VIDEO_DUMP_YUVBUF", &log_fn[0]) == 0) {
187        unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
188        if(strcmp(log_fn, "/dev/stdout") != 0)
189            sprintf(log_fn + strlen(log_fn), ".%d", suffix);
190        psb_dump_yuvbuf_fp = fopen(log_fn, "ab");
191#ifdef ANDROID
192        LOGD("PSB_VIDEO_DUMP_YUVBUF is enabled.\n");
193#endif
194    } else {
195        psb_dump_yuvbuf_fp = NULL;
196    }
197
198    /* psb extra debug option */
199    if(psb_parse_config("PSB_VIDEO_1080P_60FPS", &log_fn[0]) == 0) {
200        if(strstr(log_fn, "texture") != NULL)
201            force_texure_1080p_60fps = 1;
202        else
203            force_texure_1080p_60fps = 0;
204#ifdef ANDROID
205        LOGD("PSB_VIDEO_1080P_60FPS is %d.\n", force_texure_1080p_60fps);
206#endif
207    } else {
208        force_texure_1080p_60fps = 0;
209    }
210}
211
212void psb__close_log(void)
213{
214    if ((psb_video_debug_fp != NULL) & (psb_video_debug_fp != stderr)) {
215        debug_fp_count--;
216        if (debug_fp_count == 0) {
217            fclose(psb_video_debug_fp);
218            psb_video_debug_fp = NULL;
219        }
220    }
221
222    if(psb_video_trace_fp != NULL) {
223        fclose(psb_video_trace_fp);
224        psb_video_trace_fp = NULL;
225    }
226
227    if(psb_dump_vabuf_fp != NULL) {
228        fclose(psb_dump_vabuf_fp);
229        psb_dump_vabuf_fp = NULL;
230    }
231
232    if(psb_dump_vabuf_verbose_fp != NULL) {
233        fclose(psb_dump_vabuf_verbose_fp);
234        psb_dump_vabuf_verbose_fp = NULL;
235    }
236
237    if(psb_dump_yuvbuf_fp != NULL) {
238        fclose(psb_dump_yuvbuf_fp);
239        psb_dump_yuvbuf_fp = NULL;
240    }
241
242    return;
243}
244
245/*
246 * read a config "env" for libva.conf or from environment setting
247 * liva.conf has higher priority
248 * return 0: the "env" is set, and the value is copied into env_value
249 *        1: the env is not set
250 */
251int psb_parse_config(char *env, char *env_value)
252{
253    char *token, *value, *saveptr;
254    char oneline[1024];
255    FILE *fp = NULL;
256    char *env_ptr;
257
258    if (env == NULL)
259        return 1;
260
261    fp = fopen("/etc/psbvideo.conf", "r");
262    while (fp && (fgets(oneline, 1024, fp) != NULL)) {
263        if (strlen(oneline) == 1)
264            continue;
265        token = strtok_r(oneline, "=\n", &saveptr);
266        value = strtok_r(NULL, "=\n", &saveptr);
267
268        if (NULL == token || NULL == value)
269            continue;
270
271        if (strcmp(token, env) == 0) {
272            if (env_value)
273                strcpy(env_value, value);
274
275            fclose(fp);
276
277            return 0;
278        }
279    }
280    if (fp)
281        fclose(fp);
282
283    env_ptr = getenv(env);
284    if (env_ptr) {
285        if (env_value)
286            strncpy(env_value, env_ptr, strlen(env_ptr));
287
288        return 0;
289    }
290
291    return 1;
292}
293
294void drv_debug_msg(DEBUG_LEVEL debug_level, const char *msg, ...)
295{
296    va_list args;
297
298#ifdef ANDROID
299    if (debug_level == VIDEO_DEBUG_ERROR) {
300        va_start(args, msg);
301        char tag[128];
302        (void)tag;
303        sprintf(tag, "pvr_drv_video ");
304        __android_log_vprint(ANDROID_LOG_ERROR, tag, msg, args);
305        va_end(args);
306    }
307
308    if ((psb_video_debug_option & PRINT_TO_LOGCAT) && (debug_level & psb_video_debug_level)) {
309        va_start(args, msg);
310        char tag[128];
311        (void)tag;
312        if (psb_video_debug_option & THREAD_DEBUG)
313            sprintf(tag, "pvr_drv_video[%d:0x%08lx]", getpid(), pthread_self());
314        else
315            sprintf(tag, "pvr_drv_video ");
316        __android_log_vprint(ANDROID_LOG_DEBUG, tag, msg, args);
317        va_end(args);
318    }
319#endif
320
321    if (!psb_video_debug_fp && (psb_video_debug_level == VIDEO_DEBUG_ERROR))
322        psb_video_debug_fp = stderr;
323    if (psb_video_debug_fp && (psb_video_debug_option & PRINT_TO_FILE) &&
324            (debug_level & psb_video_debug_level)) {
325        if (psb_video_debug_option & TIME_DEBUG)
326            fprintf(psb_video_debug_fp, "TickCount - [0x%08lx], ",
327                    GetTickCount());
328        if (psb_video_debug_option & THREAD_DEBUG)
329            fprintf(psb_video_debug_fp, "Thread - (%d:0x%08lx) ",
330                    getpid(), pthread_self());
331        va_start(args, msg);
332        vfprintf(psb_video_debug_fp, msg, args);
333        va_end(args);
334        fflush(psb_video_debug_fp);
335        //fsync(fileno(psb_video_debug_fp));
336    }
337}
338
339void psb__dump_NV_buffers(
340    object_surface_p obj_surface,
341    short srcx,
342    short srcy,
343    unsigned short srcw,
344    unsigned short srch)
345{
346    void *mapped_buffer;
347    void *mapped_buffer1, *mapped_buffer2;
348    if (psb_dump_yuvbuf_fp) {
349        psb_buffer_map(&obj_surface->psb_surface->buf, &mapped_buffer);
350
351        int j,k;
352        mapped_buffer1 = mapped_buffer +obj_surface->psb_surface->stride * srcy;
353        mapped_buffer2= mapped_buffer + obj_surface->psb_surface->stride * (obj_surface->height + srcy / 2);
354        mapped_buffer=mapped_buffer2;
355        for(j = 0; j < srch; ++j)
356        {
357            fwrite(mapped_buffer1,  srcw, 1, psb_dump_yuvbuf_fp);
358            mapped_buffer1 += obj_surface->psb_surface->stride;
359        }
360        for(j = 0 ; j < srch /2; ++j)
361        {
362            for(k = 0; k < srcw; ++k)
363            {
364                if((k%2) == 0)fwrite(mapped_buffer2, 1, 1, psb_dump_yuvbuf_fp);
365                mapped_buffer2++;
366            }
367            mapped_buffer2 += obj_surface->psb_surface->stride-srcw;
368        }
369        mapped_buffer2=mapped_buffer;
370        for(j = 0 ; j < srch /2; ++j)
371        {
372            for(k = 0; k < srcw; ++k)
373            {
374                if((k%2) == 1)fwrite(mapped_buffer2, 1, 1, psb_dump_yuvbuf_fp);
375                mapped_buffer2++;
376            }
377            mapped_buffer2 += obj_surface->psb_surface->stride-srcw;
378        }
379        psb_buffer_unmap(&obj_surface->psb_surface->buf);
380    }
381}
382
383#ifndef DE3_FIRMWARE
384int psb_cmdbuf_dump(unsigned int *buffer, int byte_size)
385{
386    static int c=0;
387    static char pFileName[50];
388    if (psb_video_dump_cmdbuf == FALSE)
389        return 0;
390
391    sprintf( pFileName , "/data/ctrlAlloc%i.txt", c++);
392    FILE* pF = fopen(pFileName,"w");
393    if(pF == NULL) {
394        return 1;
395    }
396
397    int idx=0;
398    int x;
399    while( idx <  byte_size / 4 )
400    {
401        unsigned int cmd = buffer[idx++];
402        fprintf( pF , "Command Word: %08X\n" , cmd  );
403        switch( cmd&0xf0000000  )
404        {
405            case 0x70000000:
406            {
407                fprintf( pF , "%04X 2NDPASSDEBLOCK\n" , (idx-1)*4  );
408                for(  x=0;x< 5 ;x++)
409                {
410                    fprintf( pF ,"\t\t%08X\n",
411                        buffer[idx]        );
412                    idx++;
413
414                }
415
416                break;
417            }
418            case 0x90000000:
419            {
420                fprintf( pF , "%04X HEADER\n" , (idx-1)*4  );
421                for(  x=0;x< 7 ;x++)
422                {
423                    fprintf( pF ,"\t\t%08X\n",
424                        buffer[idx]        );
425                    idx++;
426
427                }
428
429                break;
430            }
431
432            case 0x10000000:
433            {
434                fprintf( pF , "%04X CMD_REGVALPAIR_WRITE\n", (idx-1)*4);
435                unsigned int count = cmd&0xffff;
436                for(  x=0;x< count ;x++)
437                {
438                    fprintf( pF ,"\t\t%08X %08X\n",
439                        buffer[idx] ,
440                        buffer[idx+1]    );
441                    idx+=2;
442
443                }
444                break;
445            }
446
447            case 0x50000000:
448            {
449                fprintf( pF , "%04X CMD_RENDEC_BLOCK\n", (idx-1)*4);
450                unsigned int  count    = (cmd>>16)&0x00ff;
451                unsigned int  uiAddr = ((cmd>>4) &0x0fff ) << 2;            /* to do,  limit this */
452
453                for(  x=0;x< count ;x++)
454                {
455                    fprintf( pF ,"\t\t%08X %08X\n",
456                        uiAddr ,
457                        buffer[idx++]    );
458                    uiAddr+= 4;
459
460                }
461                break;
462            }
463            case 0xd0000000:
464            {
465                fprintf( pF , "%04X CMD_NEXT_SEG\n", (idx-1)*4 );
466                fprintf( pF , "should not see it here\n" );
467
468
469                break;
470            }
471            case 0xa0000000:
472            {
473            fprintf( pF , "%04X LLDMA \n", (idx-1)*4 );
474
475                //unsigned int lldmaAddr = cmd<<4;
476                //unsigned int lldmaOffset = lldmaAddr - mpDevMemAlloc->GetDeviceVirtAddress();
477                //unsigned int *plldma = &buffer[ lldmaOffset/4 ];
478
479                //unsigned int Size = plldma[ 1 ]&0xffff ;
480
481                //fprintf( pF , "size 0x%04x\n",Size);
482                break;
483            }
484
485            case 0xb0000000:
486            {
487                fprintf( pF , "%04X SR SETUP %08x\n" , (idx-1)*4  , cmd );
488                for(  x=0;x< 2 ;x++)
489                {
490                    fprintf( pF ,"\t\t%08X\n",
491                        buffer[idx]        );
492                    idx++;
493
494                }
495                break;
496            }
497
498            case 0xf0000000:
499            {
500                fprintf( pF , "%04X CMD_PARSE_HEADER %08x\n" , (idx-1)*4  , cmd );
501                for(  x=0;x< 8 ;x++)
502                {
503                    fprintf( pF ,"\t\t%08X\n",
504                        buffer[idx]        );
505                    idx++;
506
507                }
508                break;
509            }
510
511        case 0x60000000:
512            goto done;
513
514            default:
515                fprintf( pF , "unknow cmd! %04X %08x\n" ,(idx-1)*4 , cmd);
516
517
518            }
519
520
521
522        }
523done:
524        fclose( pF );
525	return 0;
526}
527#else
528int psb_cmdbuf_dump(unsigned int *buffer, int byte_size)
529{
530    static int c=0;
531    static char pFileName[50];
532
533    if (psb_video_dump_cmdbuf == FALSE)
534        return 0;
535
536    sprintf( pFileName , "/data/ctrlAlloc%i.txt", c++);
537    FILE* pF = fopen(pFileName,"w");
538    if(pF == NULL) {
539        return 1;
540    }
541
542    int idx=0;
543    int x;
544    while( idx <  byte_size / 4 )
545    {
546        unsigned int cmd = buffer[idx++];
547        fprintf( pF , "Command Word: %08X\n" , cmd  );
548        switch( cmd&0xf0000000  )
549        {
550            case 0x70000000:
551            {
552                fprintf( pF , "%04X 2NDPASSDEBLOCK\n" , (idx-1)*4  );
553                for( x=0;x< 5 ;x++)
554                {
555                    fprintf( pF ,"\t\t%08X\n",
556                        buffer[idx]        );
557                    idx++;
558
559                }
560
561                break;
562            }
563            case 0x90000000:
564            {
565                fprintf( pF , "%04X HEADER\n" , (idx-1)*4  );
566                for( x=0;x< 7 ;x++)
567                {
568                    fprintf( pF ,"\t\t%08X\n",
569                        buffer[idx]        );
570                    idx++;
571
572                }
573
574                break;
575            }
576
577            case 0x10000000:
578            {
579                fprintf( pF , "%04X CMD_REGVALPAIR_WRITE ( %08X )\n", (idx-1)*4 , cmd);
580                unsigned int addr = cmd&0xffff;
581                unsigned int count = (cmd>>16)&0xff;
582                for( x=0;x< count ;x++)
583                {
584                    fprintf( pF ,"\t\t%08X %08X\n",
585                        addr ,
586                        buffer[idx]    );
587                    idx+=1;
588                    addr+=4;
589
590                }
591                break;
592            }
593
594            case 0x50000000:
595            {
596                fprintf( pF , "%04X CMD_RENDEC_BLOCK( %08X )\n", (idx-1)*4 , cmd);
597                unsigned int  count    = (cmd>>16)&0x00ff;
598                unsigned int  uiAddr = (cmd &0xffff );            /* to do,  limit this */
599
600                for( x=0;x< count ;x++)
601                {
602                    fprintf( pF ,"\t\t%08X %08X\n",
603                        uiAddr ,
604                        buffer[idx++]    );
605                    uiAddr+= 4;
606
607                }
608                break;
609            }
610            case 0xd0000000:
611            {
612                fprintf( pF , "%04X CMD_NEXT_SEG\n", (idx-1)*4 );
613                fprintf( pF , "wrong\n");
614                goto done;
615
616                break;
617            }
618            case 0xb0000000:
619            {
620                fprintf( pF , "%04X SR SETUP %08x\n" , (idx-1)*4  , cmd );
621                for( x=0;x< 2 ;x++)
622                {
623                    fprintf( pF ,"\t\t%08X\n",
624                        buffer[idx]        );
625                    idx++;
626
627                }
628                break;
629            }
630
631            case 0xf0000000:
632            {
633                fprintf( pF , "%04X CMD_PARSE_HEADER %08x\n" , (idx-1)*4  , cmd );
634                for( x=0;x< 8 ;x++)
635                {
636                    fprintf( pF ,"\t\t%08X\n",
637                        buffer[idx]        );
638                    idx++;
639
640                }
641                break;
642            }
643
644        case 0x60000000:
645            goto done;
646
647            default:
648                fprintf( pF , "%04X %08x\n" ,(idx-1)*4 , cmd);
649
650
651        }
652
653
654    }
655done:
656    fclose( pF );
657    return 0;
658
659}
660#endif
661
662/********************* trace debug start *************************/
663
664void psb__trace_message(const char *msg, ...)
665{
666    va_list args;
667
668#ifdef ANDROID
669    if ((psb_video_trace_option & PRINT_TO_LOGCAT) && msg) {
670        va_start(args, msg);
671        char tag[128];
672        (void)tag;
673        sprintf(tag, "pvr_drv_video ");
674        __android_log_vprint(ANDROID_LOG_DEBUG, tag, msg, args);
675        va_end(args);
676    }
677#endif
678
679    if (psb_video_trace_fp && (psb_video_trace_option & PRINT_TO_FILE)) {
680        if (msg) {
681            va_start(args, msg);
682            vfprintf(psb_video_trace_fp, msg, args);
683            va_end(args);
684        } else {
685            fflush(psb_video_trace_fp);
686            //fsync(fileno(psb_video_trace_fp));
687        }
688    }
689}
690
691void psb__debug_w(uint32_t val, char *fmt, uint32_t bit_to, uint32_t bit_from)
692{
693    if (bit_to < 31) {
694        val &= ~(0xffffffff << (bit_to + 1));
695    }
696    val = val >> bit_from;
697    psb__trace_message(fmt, val);
698}
699
700#define DBH(fmt, arg...)        psb__trace_message(fmt, ##arg)
701#define DB(fmt, arg1, arg...)        psb__trace_message("[%08x] %08x = " fmt, ((unsigned char *) arg1) - cmd_start, *arg1, ##arg)
702
703/* See also MsvdxGpuSim() in msvdxgpu.c */
704void debug_dump_cmdbuf(uint32_t *cmd_idx, uint32_t cmd_size_in_bytes)
705{
706    uint32_t cmd_size = cmd_size_in_bytes / sizeof(uint32_t);
707    uint32_t *cmd_end = cmd_idx + cmd_size;
708    unsigned char *cmd_start = cmd_idx;
709    struct {
710        unsigned int start;
711        unsigned int end;
712        char *name;
713    } msvdx_regs[11] = {{0x04800000, 0x048003FF, "MTX_MTX"},
714        {0x04800400, 0x0480047F, "VDMC_MTX"},
715        {0x04800480, 0x048004FF, "VDEB_MTX"},
716        {0x04800500, 0x048005FF, "DMAC_MTX"},
717        {0x04800600, 0x048006FF, "SYS_MTX"},
718        {0x04800700, 0x048007FF, "VEC_IQRAM_MTX"},
719        {0x04800800, 0x04800FFF, "VEC_MTX"},
720        {0x04801000, 0x04801FFF, "CMD_MTX"},
721        {0x04802000, 0x04802FFF, "VEC_RAM_MTX"},
722        {0x04803000, 0x04804FFF, "VEC_VLC_M"},
723        {0x04805000, 0xFFFFFFFF, "OUT_OF_RANGE"}
724    };
725
726    DBH("CMD BUFFER [%08x] - [%08x], %08x bytes, %08x dwords\n", (uint32_t) cmd_idx, cmd_end, cmd_size_in_bytes, cmd_size);
727    while (cmd_idx < cmd_end) {
728        uint32_t cmd = *cmd_idx;
729        /* What about CMD_MAGIC_BEGIN ?*/
730        switch (cmd & CMD_MASK) {
731        case CMD_NOP: {
732            DB("CMD_NOPE\n", cmd_idx);
733            cmd_idx++;
734            break;
735        }
736
737        case CMD_HEADER: {
738            uint32_t context = cmd & CMD_HEADER_CONTEXT_MASK;
739            DB("CMD_HEADER context = %08x\n", cmd_idx, context);
740            cmd_idx++;
741            DB("StatusBufferAddress\n", cmd_idx);
742            cmd_idx++;
743            DB("PreloadSave\n", cmd_idx);
744            cmd_idx++;
745            DB("PreloadRestore\n", cmd_idx);
746            cmd_idx++;
747            break;
748        }
749        case CMD_REGVALPAIR_WRITE: {
750            uint32_t count = (cmd & CMD_REGVALPAIR_COUNT_MASK) >> CMD_REGVALPAIR_COUNT_SHIFT;
751            DB("CMD_REGVALPAIR_WRITE count = %08x\n", cmd_idx, count);
752            cmd_idx++;
753
754            while (count--) {
755                int i;
756                for (i = 0; i < 10; i++) {
757                    if ((*cmd_idx >= msvdx_regs[i].start) &&
758                        (*cmd_idx <= msvdx_regs[i].end))
759                        break;
760                }
761                DB("%s_%04x\n", cmd_idx, msvdx_regs[i].name, *cmd_idx & 0xffff);
762                cmd_idx++;
763                DB("value\n", cmd_idx);
764                cmd_idx++;
765            }
766            break;
767        }
768        case CMD_RENDEC_WRITE: {
769            uint32_t encoding;
770            uint32_t count = (cmd & CMD_RENDEC_COUNT_MASK) >> CMD_RENDEC_COUNT_SHIFT;
771            DB("CMD_RENDEC_WRITE count = %08x\n", cmd_idx, count);
772            cmd_idx++;
773
774            DB("RENDEC_SL_HDR\n", cmd_idx);
775            cmd_idx++;
776
777            DB("RENDEC_SL_NULL\n", cmd_idx);
778            cmd_idx++;
779
780            do {
781                uint32_t chk_hdr = *cmd_idx;
782                count = 1 + ((chk_hdr & 0x07FF0000) >> 16);
783                uint32_t start_address = (chk_hdr & 0x0000FFF0) >> 4;
784                encoding = (chk_hdr & 0x07);
785                if ((count == 1) && (encoding == 7)) {
786                    count = 0;
787                    DB("SLICE_SEPARATOR\n", cmd_idx);
788                } else {
789                    DB("RENDEC_CK_HDR #symbols = %d address = %08x encoding = %01x\n", cmd_idx, count, start_address, encoding);
790                }
791                cmd_idx++;
792
793                while (count && (count < 0x1000)) {
794                    DB("value\n", cmd_idx);
795                    cmd_idx++;
796
797                    count -= 2;
798                }
799            } while (encoding != 0x07);
800
801            break;
802        }
803        case CMD_COMPLETION: {
804            if (*cmd_idx == PSB_RELOC_MAGIC) {
805                DB("CMD_(S)LLDMA (assumed)\n", cmd_idx);
806                cmd_idx++;
807
808            } else {
809                DB("CMD_COMPLETION\n", cmd_idx);
810                cmd_idx++;
811
812//              DB("interrupt\n", cmd_idx);
813//              cmd_idx++;
814            }
815            break;
816        }
817        case CMD_LLDMA: {
818            DB("CMD_LLDMA\n", cmd_idx);
819            cmd_idx++;
820            break;
821        }
822        case CMD_SLLDMA: {
823            DB("CMD_SLLDMA\n", cmd_idx);
824            cmd_idx++;
825            break;
826        }
827        case CMD_SR_SETUP: {
828            DB("CMD_SR_SETUP\n", cmd_idx);
829            cmd_idx++;
830            DB("offset in bits\n", cmd_idx);
831            cmd_idx++;
832            DB("size in bytes\n", cmd_idx);
833            cmd_idx++;
834            break;
835        }
836        default:
837            if (*cmd_idx == PSB_RELOC_MAGIC) {
838                DB("CMD_(S)LLDMA (assumed)\n", cmd_idx);
839                cmd_idx++;
840
841            } else {
842                DB("*** Unknown command ***\n", cmd_idx);
843                cmd_idx++;
844            }
845            break;
846        } /* switch */
847    } /* while */
848}
849
850/********************* trace debug end *************************/
851
852/********************* dump buffer when flush cmdbuf - start *************************/
853void psb__debug_schedule_hexdump(const char *name, psb_buffer_p buf, uint32_t offset, uint32_t size)
854{
855    ASSERT(debug_dump_count < MAX_DUMP_COUNT);
856    debug_dump_name[debug_dump_count] = name;
857    debug_dump_buf[debug_dump_count] = buf;
858    debug_dump_offset[debug_dump_count] = offset;
859    debug_dump_size[debug_dump_count] = size;
860    debug_dump_count++;
861}
862
863static void psb__hexdump2(unsigned char *p, int offset, int size)
864{
865    if (offset + size > 8)
866        size = 8 - offset;
867    psb__trace_message("[%04x]", g_hexdump_offset);
868    g_hexdump_offset += offset;
869    g_hexdump_offset += size;
870    while (offset-- > 0) {
871        psb__trace_message(" --");
872    }
873    while (size-- > 0) {
874        psb__trace_message(" %02x", *p++);
875    }
876    psb__trace_message("\n");
877}
878
879void psb__hexdump(unsigned char *addr, int size)
880{
881    unsigned char *p = (unsigned char *) addr;
882
883    int offset = g_hexdump_offset % 8;
884    g_hexdump_offset -= offset;
885    if (offset) {
886        psb__hexdump2(p, offset, size);
887        size -= 8 - offset;
888        p += 8 - offset;
889    }
890
891    while (1) {
892        if (size < 8) {
893            if (size > 0) {
894                psb__hexdump2(p, 0, size);
895            }
896            return;
897        }
898        psb__trace_message("[%04x] %02x %02x %02x %02x %02x %02x %02x %02x\n", g_hexdump_offset, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
899        p += 8;
900        size -= 8;
901        g_hexdump_offset += 8;
902    }
903}
904/********************* dump buffer when flush cmdbuf - end*************************/
905
906void psb__dump_va_buffers(object_buffer_p obj_buffer)
907{
908    int j,k;
909    void *mapped_buffer;
910    int print_num;
911
912    if(psb_dump_vabuf_fp) {
913        fprintf(psb_dump_vabuf_fp, "%s", buffer_type_to_string(obj_buffer->type));
914        print_num = fprintf(psb_dump_vabuf_fp, "BUFF SIZE :%d	NUMELEMENTS:%d BUFF INFO:\n", obj_buffer->size, obj_buffer->num_elements);
915
916        switch(obj_buffer->type) {
917            case VAPictureParameterBufferType:
918            case VAIQMatrixBufferType:
919            case VASliceParameterBufferType:
920                j=0;
921                for(k=0;k < obj_buffer->size;++k)
922                    print_num = fprintf(psb_dump_vabuf_fp,"0x%02lx ,",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
923                    fprintf(psb_dump_vabuf_fp,"\n ");
924                break;
925
926            case VASliceGroupMapBufferType:
927            case VABitPlaneBufferType:
928                psb_buffer_map(obj_buffer->psb_buffer, &mapped_buffer);
929                for(j=0; j<obj_buffer->size;++j) {
930                    if(j%16 == 0) fprintf(psb_dump_vabuf_fp,"\n");
931                    for(k=0;k < obj_buffer->num_elements;++k)
932                        fprintf(psb_dump_vabuf_fp,"0x%02lx   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
933                }
934
935                psb_buffer_unmap(obj_buffer->psb_buffer);
936                break;
937
938            case VASliceDataBufferType:
939            case VAProtectedSliceDataBufferType:
940                fprintf(psb_dump_vabuf_fp,"first 256 bytes:\n");
941                psb_buffer_map(obj_buffer->psb_buffer, &mapped_buffer);
942                for(j=0; j<256;++j) {
943                    if(j%16 == 0) fprintf(psb_dump_vabuf_fp,"\n");
944                    for(k=0;k < obj_buffer->num_elements;++k)
945                        fprintf(psb_dump_vabuf_fp,"0x%02lx   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
946                }
947                psb_buffer_unmap(obj_buffer->psb_buffer);
948                break;
949
950            default:
951                break;
952
953        }
954        fprintf(psb_dump_vabuf_fp, "\n");
955        fflush(psb_dump_vabuf_fp);
956        fsync(fileno(psb_dump_vabuf_fp));
957    }
958
959}
960
961void psb__dump_va_buffers_verbose(object_buffer_p obj_buffer)
962{
963    int j,k;
964    void *mapped_buffer;
965    if(psb_dump_vabuf_verbose_fp) {
966        fprintf(psb_dump_vabuf_verbose_fp, "%s", buffer_type_to_string(obj_buffer->type));
967        fprintf(psb_dump_vabuf_verbose_fp, "BUFF SIZE :%d	NUMELEMENTS:%d BUFF INFO:\n", obj_buffer->size, obj_buffer->num_elements);
968        switch(obj_buffer->type) {
969            case VAPictureParameterBufferType:
970                for(j=0; j < 340; j = j+20) {
971                    if(j==0) fprintf(psb_dump_vabuf_verbose_fp,"\nCurrPic:\n");
972                    else fprintf(psb_dump_vabuf_verbose_fp,"\nReferenceFrames%d\n", j / 20);
973                    fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
974                    for(k=0;k < 4;++k)
975                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
976                        fprintf(psb_dump_vabuf_verbose_fp,"    frame_idx:");
977                    for(k=4;k < 8;++k)
978                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
979                        fprintf(psb_dump_vabuf_verbose_fp,"    flags:");
980                    for(k=8;k < 12;++k)
981                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
982                        fprintf(psb_dump_vabuf_verbose_fp,"    TopFieldOrderCnt:");
983                    for(k=12;k < 16;++k)
984                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
985                        fprintf(psb_dump_vabuf_verbose_fp,"    BottomFieldOrderCnt:");
986                    for(k=16;k < 20;++k)
987                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
988                }
989                j=340;k=0;
990                fprintf(psb_dump_vabuf_verbose_fp,"\npicture_width_in_mbs_minus1:");
991                for(k=0;k < 2;++k)
992                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
993                j=342;k=0;
994                fprintf(psb_dump_vabuf_verbose_fp, "\npicture_height_in_mbs_minus1:");
995                for(k=0;k < 2;++k)
996                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
997                j=344;k=0;
998                fprintf(psb_dump_vabuf_verbose_fp,  "\nbit_depth_luma_minus8:");
999                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1000                j=345;k=0;
1001                fprintf(psb_dump_vabuf_verbose_fp, "\nbit_depth_chroma_minus8:");
1002                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1003                j=346;k=0;
1004                fprintf(psb_dump_vabuf_verbose_fp, "\nnum_ref_frames:");
1005                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1006                j=348;k=0;
1007                fprintf(psb_dump_vabuf_verbose_fp,"\nseq_fields_value:");
1008                for(k=0;k < 4;++k)
1009                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1010                j=352;k=0;
1011                fprintf(psb_dump_vabuf_verbose_fp,"\nnum_slice_groups_minus1:");
1012                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1013                j=353;k=0;
1014                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_group_map_type:");
1015                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1016                j=354;k=0;
1017                fprintf(psb_dump_vabuf_verbose_fp, "\nslice_group_change_rate_minus1:");
1018                for(k=0;k < 2;++k)
1019                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1020                j=356;k=0;
1021                fprintf(psb_dump_vabuf_verbose_fp,"\npic_init_qp_minus26:");
1022                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1023                j=357;k=0;
1024                fprintf(psb_dump_vabuf_verbose_fp,"\npic_init_qs_minus26:");
1025                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1026                j=358;k=0;
1027                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_qp_index_offset:");
1028                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1029                j=359;k=0;
1030                fprintf(psb_dump_vabuf_verbose_fp, "\nsecond_chroma_qp_index_offset:");
1031                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1032                j=360;k=0;
1033                fprintf(psb_dump_vabuf_verbose_fp,"\npic_fields_value:");
1034                for(k=0;k < 4;++k)
1035                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1036                j=364;k=0;
1037                fprintf(psb_dump_vabuf_verbose_fp,"\nframe_num:");
1038                for(k=0;k < 2;++k)
1039                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1040                break;
1041
1042            case VAIQMatrixBufferType:
1043                for(j=0;j<96;j=j+16) {
1044                    fprintf(psb_dump_vabuf_verbose_fp,"\nScalingList4x4_%d:", j/16);
1045                    for(k=0; k<16;++k) {
1046                        if(k%4 == 0) fprintf(psb_dump_vabuf_verbose_fp, "\n");
1047                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx   ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1048                    }
1049                }
1050                for(j=96;j<224;j=j+64) {
1051                    fprintf(psb_dump_vabuf_verbose_fp,"\nScalingList4x4_%d:",( j-96)/64);
1052                    for(k=0; k<64;++k) {
1053                        if(k%8 == 0) fprintf(psb_dump_vabuf_verbose_fp, "\n");
1054                        fprintf(psb_dump_vabuf_verbose_fp, "0x%02lx   ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1055                    }
1056                }
1057                break;
1058
1059            case VASliceParameterBufferType:
1060                j=0;k=0;
1061                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_size:");
1062                for(k=0;k < 4;++k)
1063                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1064                j=4;k=0;
1065                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_offset:");
1066                for(k=0;k < 4;++k)
1067                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1068                j=8;k=0;
1069                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_flag:");
1070                for(k=0;k < 4;++k)
1071                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1072                j=12;k=0;
1073                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_bit_offset:");
1074                for(k=0;k < 2;++k)
1075                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1076                j=14;k=0;
1077                fprintf(psb_dump_vabuf_verbose_fp,"\nfirst_mb_in_slice:");
1078                for(k=0;k < 2;++k)
1079                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1080                j=16;k=0;
1081                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_type:");
1082                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1083                j=17;k=0;
1084                fprintf(psb_dump_vabuf_verbose_fp,"\ndirect_spatial_mv_pred_flag:");
1085                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1086                j=18;k=0;
1087                fprintf(psb_dump_vabuf_verbose_fp,  "\nnum_ref_idx_l0_active_minus1:");
1088                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1089                j=19;k=0;
1090                fprintf(psb_dump_vabuf_verbose_fp, "\nnum_ref_idx_l1_active_minus1:");
1091                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1092                j=20;k=0;
1093                fprintf(psb_dump_vabuf_verbose_fp,"\ncabac_init_idc:");
1094                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1095                j=21;k=0;
1096                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_qp_delta:");
1097                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1098                j=22;k=0;
1099                fprintf(psb_dump_vabuf_verbose_fp, "\ndisable_deblocking_filter_idc:");
1100                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1101                j=23;k=0;
1102                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_alpha_c0_offset_div2:");
1103                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1104                j=24;k=0;
1105                fprintf(psb_dump_vabuf_verbose_fp,"\nslice_beta_offset_div2:");
1106                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1107                for(j=28; j < 668; j = j+20) {
1108                    fprintf(psb_dump_vabuf_verbose_fp,"\nRefPicList0 ListIndex=%d\n", (j -28)/ 20);
1109                    fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
1110                    for(k=0;k < 4;++k)
1111                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1112                        fprintf(psb_dump_vabuf_verbose_fp,"   frame_idx:");
1113                    for(k=4;k < 8;++k)
1114                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1115                        fprintf(psb_dump_vabuf_verbose_fp,"   flags:");
1116                    for(k=8;k < 12;++k)
1117                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1118                        fprintf(psb_dump_vabuf_verbose_fp,"   TopFieldOrderCnt:");
1119                    for(k=12;k < 16;++k)
1120                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1121                        fprintf(psb_dump_vabuf_verbose_fp,"   BottomFieldOrderCnt:");
1122                    for(k=16;k < 20;++k)
1123                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1124                    }
1125                for(j=668; j < 1308; j = j+20) {
1126                    fprintf(psb_dump_vabuf_verbose_fp,"\nRefPicList1 ListIndex=%d\n", (j -668)/ 20);
1127                    fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
1128                    for(k=0;k < 4;++k)
1129                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1130                        fprintf(psb_dump_vabuf_verbose_fp,"   frame_idx:");
1131                    for(k=4;k < 8;++k)
1132                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1133                        fprintf(psb_dump_vabuf_verbose_fp,"   flags:");
1134                    for(k=8;k < 12;++k)
1135                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1136                        fprintf(psb_dump_vabuf_verbose_fp,"   TopFieldOrderCnt:");
1137                    for(k=12;k < 16;++k)
1138                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1139                        fprintf(psb_dump_vabuf_verbose_fp,"   BottomFieldOrderCnt:");
1140                    for(k=16;k < 20;++k)
1141                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1142                    }
1143                j=1308;k=0;
1144                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_log2_weight_denom:");
1145                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1146j=1309;k=0;
1147                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_log2_weight_denom:");
1148                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1149                j=1310;k=0;
1150                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l0_flag:");
1151                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1152                j=1312;k=0;
1153                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l0:");
1154                for(j=1312;j<1376;j=j+2) {
1155                    if((j-1312)%16 == 0)fprintf(psb_dump_vabuf_verbose_fp,"\n");
1156                    fprintf(psb_dump_vabuf_verbose_fp,"     :");
1157                    for(k=0;k < 2;++k)
1158                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1159                }
1160                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_offset_l0:");
1161                for(j=1376;j<1440;j=j+2) {
1162                    if((j-1376)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1163                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1164                    for(k=0;k < 2;++k)
1165                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1166                }
1167                j=1440;k=0;
1168                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l0_flag:");
1169                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1170                j=1442;k=0;
1171                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l0:");
1172                for(j=1442;j<1570;j=j+4) {
1173                    if((j-1442)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1174                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1175                    for(k=0;k < 2;++k)
1176                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1177                        fprintf(psb_dump_vabuf_verbose_fp," , ");
1178                    for(k=2;k < 4;++k)
1179                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1180
1181                }
1182
1183                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_offset_l0:");
1184                for(j=1570;j<1698;j=j+4) {
1185                    if((j-1570)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1186                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1187                    for(k=0;k < 2;++k)
1188                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1189                        fprintf(psb_dump_vabuf_verbose_fp," , ");
1190                    for(k=2;k < 4;++k)
1191                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1192                }
1193                j=1698;k=0;
1194                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l1_flag:");
1195                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1196                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l1:");
1197                for(j=1700;j<1764;j=j+2) {
1198                    if((j-1700)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1199                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1200                    for(k=0;k < 2;++k)
1201                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1202                }
1203                fprintf(psb_dump_vabuf_verbose_fp,"\nluma_offset_l1:");
1204                for(j=1764;j<1828;j=j+2) {
1205                    if((j-1764)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1206                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1207                    for(k=0;k < 2;++k)
1208                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1209                }
1210                j=1828;k=0;
1211                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l1_flag:");
1212                fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1213                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l1:");
1214                for(j=1830;j<1958;j=j+4) {
1215                    if((j-1830)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1216                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1217                    for(k=0;k < 2;++k)
1218                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1219                        fprintf(psb_dump_vabuf_verbose_fp," , ");
1220                    for(k=2;k < 4;++k)
1221                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1222                }
1223                fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_offset_l1:");
1224                for(j=1958;j<2086;j=j+4) {
1225                    if((j-1958)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1226                    fprintf(psb_dump_vabuf_verbose_fp,"     ");
1227                    for(k=0;k < 2;++k)
1228                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1229                        fprintf(psb_dump_vabuf_verbose_fp," , ");
1230                    for(k=2;k < 4;++k)
1231                    fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
1232                }
1233                break;
1234
1235            case VASliceGroupMapBufferType:
1236                psb_buffer_map(obj_buffer->psb_buffer, &mapped_buffer);
1237                for(j=0; j<obj_buffer->size;++j) {
1238                    if(j%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1239                    for(k=0;k < obj_buffer->num_elements;++k)
1240                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
1241                }
1242                psb_buffer_unmap(obj_buffer->psb_buffer);
1243                break;
1244
1245            case VASliceDataBufferType:
1246            case VAProtectedSliceDataBufferType:
1247                fprintf(psb_dump_vabuf_verbose_fp,"first 256 bytes:\n");
1248                psb_buffer_map(obj_buffer->psb_buffer, &mapped_buffer);
1249                for(j=0; j<256;++j) {
1250                    if(j%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
1251                    for(k=0;k < obj_buffer->num_elements;++k)
1252                        fprintf(psb_dump_vabuf_verbose_fp,"0x%02lx   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
1253                }
1254                psb_buffer_unmap(obj_buffer->psb_buffer);
1255                break;
1256            default:
1257                break;
1258
1259            }
1260        fprintf(psb_dump_vabuf_verbose_fp, "\n");
1261        fflush(psb_dump_vabuf_verbose_fp);
1262        fsync(fileno(psb_dump_vabuf_verbose_fp));
1263    }
1264}
1265
1266