/* * Copyright (c) 2011 Intel Corporation. All Rights Reserved. * Copyright (c) Imagination Technologies Limited, UK * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /****************************************************************************** @File dxva_fw_ctrl.h @Title va Firmware Control Allocation Commands @Platform @Description Defined commands that may be placed int the Control Allocation ******************************************************************************/ #ifndef _VA_FW_CTRL_H_ #define _VA_FW_CTRL_H_ #define CMD_MASK (0xF0000000) /* No Operation */ #define CMD_NOP (0x00000000) /* Register Value Pair Block */ #define CMD_REGVALPAIR_WRITE (0x10000000) #define CMD_REGVALPAIR_COUNT_MASK (0x000FFFFF) #define CMD_REGVALPAIR_COUNT_SHIFT (0) #define CMD_REGVALPAIR_FLAG_MB_LAYER (0x00100000) #define CMD_REGVALPAIR_FLAG_HL_LAYER (0x00200000) #define CMD_REGVALPAIR_FLAG_PRELOAD (0x00400000) #define CMD_REGVALPAIR_FLAG_VC1PATCH (0x00800000) #define CMD_REGVALPAIR_FORCE_MASK (0x08000000) /* Rendec Write Block */ #define CMD_RENDEC_WRITE (0x20000000) #define CMD_RENDEC_BLOCK (0x50000000) #define CMD_RENDEC_COUNT_MASK (0x000FFFFF) #define CMD_RENDEC_COUNT_SHIFT (0) /* Rendec Block */ #define CMD_RENDEC_BLOCK_FLAG_VC1_CMD_PATCH (0x01000000) #define CMD_RENDEC_BLOCK_FLAG_VC1_BE_PATCH (0x02000000) #define CMD_RENDEC_BLOCK_FLAG_VC1_SP_PATCH (0x04000000) #define CMD_RENDEC_BLOCK_FLAG_VC1_IC_PATCH (0x08000000) /* Command Allocation temination Commands */ #define CMD_COMPLETION (0x60000000) /* Use this to notify mxt of the context */ #define CMD_HEADER (0x70000000) #define CMD_HEADER_CONTEXT_MASK (0x0fffffff) #define CMD_CONDITIONAL_SKIP (0x80000000) #define CMD_HEADER_VC1 (0x90000000) #define CMD_PARSE_HEADER (0xF0000000) #define CMD_PARSE_HEADER_NEWSLICE (0x00000001) /*****************************************************************/ /* DMA */ /*****************************************************************/ #define CMD_DMA (0xE0000000) #define CMD_DMA_DMA_TYPE_MASK (0x0ff00000) #define CMD_DMA_DMA_TYPE_SHIFT ( 24 ) #define CMD_DMA_DMA_SIZE_MASK (0x0000ffff) #define CMD_DMA_OFFSET_FLAG (1<<19) #define CMD_DMA_TYPE_VLC_TABLE ( 0 << CMD_DMA_DMA_TYPE_SHIFT ) #define CMD_DMA_TYPE_RESIDUAL ( 1 << CMD_DMA_DMA_TYPE_SHIFT ) #define CMD_DMA_TYPE_IDCT_INSERTION ( 2 << CMD_DMA_DMA_TYPE_SHIFT ) #define CMD_DMA_TYPE_PROBABILITY_DATA ( 3 << CMD_DMA_DMA_TYPE_SHIFT ) typedef struct _RENDER_BUFFER_HEADER_VC1_TAG { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32RangeMappingBase[2]; /* Store flags in bottom bits of [0] */ IMG_UINT32 ui32SliceParams; union { struct _LLDMA_VC1_ { IMG_UINT32 ui32PreloadSave; IMG_UINT32 ui32PreloadRestore; } LLDMA_VC1; } ui32LLDMAPointers; } RENDER_BUFFER_HEADER_VC1; typedef struct _RENDER_BUFFER_HEADER_TAG { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32Reserved; /* used as ui32SliceParams in MPEG4 */ union { struct _LLDMA_MPEG4_ { IMG_UINT32 ui32FEStatesSave; IMG_UINT32 ui32FEStatesRestore; } LLDMA_MPEG4; struct _LLDMA_H264_ { IMG_UINT32 ui32PreloadSave; IMG_UINT32 ui32PreloadRestore; } LLDMA_H264; } ui32LLDMAPointers; } RENDER_BUFFER_HEADER; typedef struct _PARSE_HEADER_CMD_TAG { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32SeqHdrData; IMG_UINT32 ui32PicDimensions; IMG_UINT32 ui32BitplaneAddr[3]; IMG_UINT32 ui32VLCTableAddr; IMG_UINT32 ui32ICParamData[2]; } PARSE_HEADER_CMD; /* Linked list DMA Command */ #define CMD_LLDMA (0xA0000000) #define CMD_SLLDMA (0xC0000000) /* Syncronose LLDMA */ #define CMD_DMA (0xE0000000) typedef struct { IMG_UINT32 ui32CmdAndDevLinAddr; } LLDMA_CMD; typedef struct { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32DevVirtAdd; } DMA_CMD; typedef struct { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32DevVirtAdd; IMG_UINT32 ui32ByteOffset; } DMA_CMD_WITH_OFFSET; typedef enum DMA_TYPE { DMA_TYPE_VLC_TABLE = CMD_DMA_TYPE_VLC_TABLE, DMA_TYPE_RESIDUAL = CMD_DMA_TYPE_RESIDUAL, DMA_TYPE_IDCT_INSERTION = CMD_DMA_TYPE_IDCT_INSERTION, DMA_TYPE_PROBABILITY_DATA = CMD_DMA_TYPE_PROBABILITY_DATA, } DMA_TYPE; /* Shift Register Setup Command */ #define CMD_SR_SETUP (0xB0000000) #define CMD_ENABLE_RBDU_EXTRACTION (0x00000001) #define CMD_SR_VERIFY_STARTCODE (0x00000004) #ifdef SLICE_HEADER_PARSING #define CMD_SR_BITSTR_PARSE_KEY (0x00000010) #endif #define CMD_BITSTREAM_DMA (0xA0000000) typedef struct { IMG_UINT32 ui32Cmd; IMG_UINT32 ui32BitstreamOffsetBits; IMG_UINT32 ui32BitstreamSizeBytes; } SR_SETUP_CMD; /* Next Segment Command */ #define CMD_NEXT_SEG (0xD0000000) /* Also Syncronose */ /*****************************************************************/ /* Ctrl Alloc Header */ /*****************************************************************/ #define CMD_CTRL_ALLOC_HEADER (0x90000000) typedef struct _CTRL_ALLOC_HEADER_TAG { IMG_UINT32 ui32Cmd_AdditionalParams; IMG_UINT32 ui32SliceParams; IMG_UINT32 ui32ExternStateBuffAddr; IMG_UINT32 ui32MacroblockParamAddr; IMG_UINT32 uiSliceFirstMbYX_uiPicLastMbYX; IMG_UINT32 ui32AltOutputAddr[2]; /* VC1 only : Store Range Map flags in bottom bits of [0] */ IMG_UINT32 ui32AltOutputFlags; } CTRL_ALLOC_HEADER; #define CMD_DEBLOCK (0x70000000) #define CMD_DEBLOCK_TYPE_STD (0x00000000) #define CMD_DEBLOCK_TYPE_OOLD (0x00000001) #define CMD_DEBLOCK_TYPE_SKIP (0x00000002) typedef struct _DEBLOCK_CMD_TAG { IMG_UINT32 ui32Cmd; /* 0x70000000 */ IMG_UINT32 ui32SourceMbData; IMG_UINT32 ui16PicWidthMbs; IMG_UINT32 ui16FrameHeightMbs; IMG_UINT32 ui32AddressA[2]; } DEBLOCK_CMD; #endif