| /* |
| * 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 |