1 /*
2 * Copyright (c) 2014-2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file mhw_state_heap_legacy.c
24 //! \brief This modules implements HW interface layer to be used on all platforms on all operating systems/DDIs, across MHW components.
25 //!
26 #include "mhw_state_heap_legacy.h"
27 #include "media_interfaces_mhw.h"
28 #include "mhw_cp_interface.h"
29
30 //!
31 //! \brief Initializes the state heap interface
32 //! \details Internal MHW function to initialize all function pointers and some parameters
33 //! \param PMHW_STATE_HEAP_INTERFACE* ppStateHeapInterface
34 //! [in/out] Poitner to state heap interface pointer to be allocated
35 //! \param PMOS_INTERFACE pOsInterface
36 //! [in] OS interface
37 //! \return MOS_STATUS
38 //! MOS_STATUS_SUCCESS if success, else fail reason
39 //!
Mhw_StateHeapInterface_InitInterface_Legacy(PMHW_STATE_HEAP_INTERFACE * ppCommonStateHeapInterface,PMOS_INTERFACE pOsInterface,uint8_t bDynamicMode)40 MOS_STATUS Mhw_StateHeapInterface_InitInterface_Legacy(
41 PMHW_STATE_HEAP_INTERFACE *ppCommonStateHeapInterface,
42 PMOS_INTERFACE pOsInterface,
43 uint8_t bDynamicMode)
44 {
45 PMHW_STATE_HEAP_INTERFACE pCommonStateHeapInterface = nullptr;
46 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
47 MhwInterfaces::CreateParams params;
48 MhwInterfaces *mhwInterfaces = nullptr;
49
50 MHW_FUNCTION_ENTER;
51
52 MHW_CHK_NULL(ppCommonStateHeapInterface);
53 MHW_CHK_NULL(pOsInterface);
54
55 pCommonStateHeapInterface =
56 (PMHW_STATE_HEAP_INTERFACE)MOS_AllocAndZeroMemory(sizeof(MHW_STATE_HEAP_INTERFACE));
57 MHW_CHK_NULL(pCommonStateHeapInterface);
58 MHW_CHK_STATUS(Mhw_StateHeapInterface_AssignInterfaces(pCommonStateHeapInterface));
59
60 MOS_ZeroMemory(¶ms, sizeof(params));
61 params.Flags.m_stateHeap = true;
62 params.m_heapMode = bDynamicMode;
63 mhwInterfaces = MhwInterfaces::CreateFactory(params, pOsInterface);
64 if (mhwInterfaces)
65 {
66 MHW_CHK_NULL(mhwInterfaces->m_stateHeapInterface);
67 pCommonStateHeapInterface->pStateHeapInterface = mhwInterfaces->m_stateHeapInterface;
68 // MhwInterfaces always create CP and MI interfaces, so we have to delete those we don't need.
69 MOS_Delete(mhwInterfaces->m_miInterface);
70 pOsInterface->pfnDeleteMhwCpInterface(mhwInterfaces->m_cpInterface);
71 mhwInterfaces->m_cpInterface = NULL;
72 MOS_Delete(mhwInterfaces);
73 mhwInterfaces = nullptr;
74 }
75 else
76 {
77 MHW_ASSERTMESSAGE("Allocate MhwInterfaces failed");
78 eStatus = MOS_STATUS_NO_SPACE;
79 goto finish;
80 }
81
82 *ppCommonStateHeapInterface = pCommonStateHeapInterface;
83
84 finish:
85
86 if (eStatus != MOS_STATUS_SUCCESS && pCommonStateHeapInterface)
87 {
88 pCommonStateHeapInterface->pfnDestroy(pCommonStateHeapInterface);
89 *ppCommonStateHeapInterface = nullptr;
90 if (mhwInterfaces)
91 {
92 MOS_Delete(mhwInterfaces->m_miInterface);
93 pOsInterface->pfnDeleteMhwCpInterface(mhwInterfaces->m_cpInterface);
94 mhwInterfaces->m_cpInterface = NULL;
95 MOS_Delete(mhwInterfaces);
96 }
97 }
98
99 return eStatus;
100 }
101