1 /*===================== begin_copyright_notice ==================================
2 
3 # Copyright (c) 2022, Intel Corporation
4 
5 # Permission is hereby granted, free of charge, to any person obtaining a
6 # copy of this software and associated documentation files (the "Software"),
7 # to deal in the Software without restriction, including without limitation
8 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 # and/or sell copies of the Software, and to permit persons to whom the
10 # Software is furnished to do so, subject to the following conditions:
11 
12 # The above copyright notice and this permission notice shall be included
13 # in all copies or substantial portions of the Software.
14 
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 # OTHER DEALINGS IN THE SOFTWARE.
22 
23 ======================= end_copyright_notice ==================================*/
24 //!
25 //! \file     mhw_vdbox_vdenc_impl_xe_lpm_plus_base.h
26 //! \brief    MHW VDBOX VDENC interface common base for Xe_LPM_plus+ platforms
27 //! \details
28 //!
29 
30 #ifndef __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__
31 #define __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__
32 
33 #include "mhw_vdbox_vdenc_impl.h"
34 #include "mos_interface.h"
35 
36 namespace mhw
37 {
38 namespace vdbox
39 {
40 namespace vdenc
41 {
42 namespace xe_lpm_plus_base
43 {
44 template <typename cmd_t>
45 class BaseImplGeneric : public vdenc::Impl<cmd_t>
46 {
47 protected:
48     using base_t = vdenc::Impl<cmd_t>;
49 
BaseImplGeneric(PMOS_INTERFACE osItf)50     BaseImplGeneric(PMOS_INTERFACE osItf) : base_t(osItf){};
51 
_MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_MODE_SELECT)52     _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_MODE_SELECT)
53     {
54         _MHW_SETCMD_CALLBASE(VDENC_PIPE_MODE_SELECT);
55 
56     #define DO_FIELDS()                                                                  \
57         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT22, params.VdencPipeModeSelectPar2); \
58         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT24, params.VdencPipeModeSelectPar3); \
59         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT26, params.VdencPipeModeSelectPar4); \
60         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT28, params.VdencPipeModeSelectPar5); \
61         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT16, params.VdencPipeModeSelectPar6); \
62         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT18, params.VdencPipeModeSelectPar7); \
63         DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT12, 0);
64 
65     #include "mhw_hwcmd_process_cmdfields.h"
66     }
67 
_MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_BUF_ADDR_STATE)68     _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_BUF_ADDR_STATE)
69     {
70         _MHW_SETCMD_CALLBASE(VDENC_PIPE_BUF_ADDR_STATE);
71 
72         {
73             MHW_RESOURCE_PARAMS resourceParams = {};
74             resourceParams.HwCommandType       = MOS_VDENC_PIPE_BUF_ADDR;
75             if (!Mos_ResourceIsNull(params.vdencPipeBufAddrStatePar0))
76             {
77                 resourceParams.presResource    = params.vdencPipeBufAddrStatePar0;
78                 resourceParams.dwOffset        = 0;
79                 resourceParams.pdwCmd          = (uint32_t *)&(cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.LowerAddress);
80                 resourceParams.dwLocationInCmd = 71;
81                 resourceParams.bIsWritable     = false;
82 
83                 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.MemoryCompressionEnable  = 0;
84                 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.CompressionType          = 0;
85                 InitMocsParams(resourceParams, &cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.Value, 1, 6);
86 
87                 MHW_MI_CHK_STATUS(this->AddResourceToCmd(
88                     this->m_osItf,
89                     this->m_currentCmdBuf,
90                     &resourceParams));
91             }
92             if (!Mos_ResourceIsNull(params.vdencPipeBufAddrStatePar1))
93             {
94                 resourceParams.presResource    = params.vdencPipeBufAddrStatePar1;
95                 resourceParams.dwOffset        = 0;
96                 resourceParams.pdwCmd          = (uint32_t *)&(cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.LowerAddress);
97                 resourceParams.dwLocationInCmd = 74;
98                 resourceParams.bIsWritable     = true;
99 
100                 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.MemoryCompressionEnable  = 0;
101                 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.CompressionType          = 0;
102                 InitMocsParams(resourceParams, &cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.Value, 1, 6);
103 
104                 MHW_MI_CHK_STATUS(this->AddResourceToCmd(
105                     this->m_osItf,
106                     this->m_currentCmdBuf,
107                     &resourceParams));
108             }
109         }
110 
111         return MOS_STATUS_SUCCESS;
112     }
113 MEDIA_CLASS_DEFINE_END(mhw__vdbox__vdenc__xe_lpm_plus_base__BaseImplGeneric)
114 };
115 }  // namespace xe_lpm_plus_base
116 }  // namespace vdenc
117 }  // namespace vdbox
118 }  // namespace mhw
119 
120 #endif  // __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__
121