1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker
23*35ffd701SAndroid Build Coastguard Worker #include "Internal/Common/GmmLibInc.h"
24*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmCachePolicy.h"
25*35ffd701SAndroid Build Coastguard Worker
26*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
27*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmLib::GmmCachePolicyGetPteType
28*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicyCommon::CachePolicyGetPteType()
29*35ffd701SAndroid Build Coastguard Worker //
30*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
31*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: type of usage
32*35ffd701SAndroid Build Coastguard Worker ///
33*35ffd701SAndroid Build Coastguard Worker /// @return GMM_PTE_CACHE_CONTROL_BITS:Populated PTE
34*35ffd701SAndroid Build Coastguard Worker ///
35*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetPteType(void * pLibContext,GMM_RESOURCE_USAGE_TYPE Usage)36*35ffd701SAndroid Build Coastguard Worker GMM_PTE_CACHE_CONTROL_BITS GMM_STDCALL GmmCachePolicyGetPteType(void *pLibContext, GMM_RESOURCE_USAGE_TYPE Usage)
37*35ffd701SAndroid Build Coastguard Worker {
38*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
39*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetPteType(Usage);
40*35ffd701SAndroid Build Coastguard Worker }
41*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
42*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmLib::GmmCachePolicyGetPATIndex
43*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicyCommon::CachePolicyGetPATIndex()
44*35ffd701SAndroid Build Coastguard Worker ///
45*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
46*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: type of usage
47*35ffd701SAndroid Build Coastguard Worker /// @param[Optional] Usage: for Compression Enable
48*35ffd701SAndroid Build Coastguard Worker ///
49*35ffd701SAndroid Build Coastguard Worker /// @return uint32_t
50*35ffd701SAndroid Build Coastguard Worker ///
51*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetPATIndex(void * pLibContext,GMM_RESOURCE_USAGE_TYPE Usage,bool * pCompressionEnable,bool IsCpuCacheable)52*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmCachePolicyGetPATIndex(void *pLibContext, GMM_RESOURCE_USAGE_TYPE Usage, bool *pCompressionEnable, bool IsCpuCacheable)
53*35ffd701SAndroid Build Coastguard Worker {
54*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
55*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetPATIndex(NULL, Usage, pCompressionEnable, IsCpuCacheable);
56*35ffd701SAndroid Build Coastguard Worker }
57*35ffd701SAndroid Build Coastguard Worker
58*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
59*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmLib::GmmCachePolicyIsUsagePTECached
60*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicyCommon::CachePolicyIsUsagePTECached()
61*35ffd701SAndroid Build Coastguard Worker ///
62*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
63*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: type of usage
64*35ffd701SAndroid Build Coastguard Worker ///
65*35ffd701SAndroid Build Coastguard Worker /// @return 1 if the usage PTE entry is set for cached, 0 otherwise.
66*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyIsUsagePTECached(void * pLibContext,GMM_RESOURCE_USAGE_TYPE Usage)67*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmCachePolicyIsUsagePTECached(void *pLibContext, GMM_RESOURCE_USAGE_TYPE Usage)
68*35ffd701SAndroid Build Coastguard Worker {
69*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
70*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->CachePolicyIsUsagePTECached(Usage);
71*35ffd701SAndroid Build Coastguard Worker }
72*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
73*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function to return L1 Cache Control on DG2 for a given resource type
74*35ffd701SAndroid Build Coastguard Worker ///
75*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
76*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: type of usage
77*35ffd701SAndroid Build Coastguard Worker ///
78*35ffd701SAndroid Build Coastguard Worker /// @return Value of L1 Cache control.
79*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmGetSurfaceStateL1CachePolicy(void * pLibContext,GMM_RESOURCE_USAGE_TYPE Usage)80*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmGetSurfaceStateL1CachePolicy(void *pLibContext, GMM_RESOURCE_USAGE_TYPE Usage)
81*35ffd701SAndroid Build Coastguard Worker {
82*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
83*35ffd701SAndroid Build Coastguard Worker return (uint8_t)pGmmLibContext->GetCachePolicyObj()->GetSurfaceStateL1CachePolicy(Usage);
84*35ffd701SAndroid Build Coastguard Worker }
85*35ffd701SAndroid Build Coastguard Worker
86*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
87*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function to return L2 Cache Control on MTL for a given resource type
88*35ffd701SAndroid Build Coastguard Worker ///
89*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
90*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: type of usage
91*35ffd701SAndroid Build Coastguard Worker ///Value of L2 Cache support
92*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmGetSurfaceStateL2CachePolicy(void * pLibContext,GMM_RESOURCE_USAGE_TYPE Usage)93*35ffd701SAndroid Build Coastguard Worker uint8_t GMM_STDCALL GmmGetSurfaceStateL2CachePolicy(void *pLibContext, GMM_RESOURCE_USAGE_TYPE Usage)
94*35ffd701SAndroid Build Coastguard Worker {
95*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
96*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyElement(Usage).L2CC;
97*35ffd701SAndroid Build Coastguard Worker }
98*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
99*35ffd701SAndroid Build Coastguard Worker /// C wrapper for GmmLib::GmmResourceInfoCommon::GetCachePolicyUsage.
100*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmResourceInfoCommon::GetCachePolicyUsage()
101*35ffd701SAndroid Build Coastguard Worker ///
102*35ffd701SAndroid Build Coastguard Worker /// @param[in] pGmmResource: Pointer to the GmmResourceInfo class
103*35ffd701SAndroid Build Coastguard Worker /// @return Cache policy usage
104*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetResourceUsage(GMM_RESOURCE_INFO * pResInfo)105*35ffd701SAndroid Build Coastguard Worker GMM_RESOURCE_USAGE_TYPE GMM_STDCALL GmmCachePolicyGetResourceUsage(GMM_RESOURCE_INFO *pResInfo)
106*35ffd701SAndroid Build Coastguard Worker {
107*35ffd701SAndroid Build Coastguard Worker __GMM_ASSERT(pResInfo);
108*35ffd701SAndroid Build Coastguard Worker return pResInfo->GetCachePolicyUsage();
109*35ffd701SAndroid Build Coastguard Worker }
110*35ffd701SAndroid Build Coastguard Worker
111*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
112*35ffd701SAndroid Build Coastguard Worker /// C wrapper for GmmLib::GmmResourceInfoCommon::OverrideCachePolicyUsage.
113*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmResourceInfoCommon::OverrideCachePolicyUsage()
114*35ffd701SAndroid Build Coastguard Worker ///
115*35ffd701SAndroid Build Coastguard Worker /// @param[in] pGmmResource: Pointer to the GmmResourceInfo class
116*35ffd701SAndroid Build Coastguard Worker /// @param[in] Cache policy usage
117*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyOverrideResourceUsage(GMM_RESOURCE_INFO * pResInfo,GMM_RESOURCE_USAGE_TYPE Usage)118*35ffd701SAndroid Build Coastguard Worker void GMM_STDCALL GmmCachePolicyOverrideResourceUsage(GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage)
119*35ffd701SAndroid Build Coastguard Worker {
120*35ffd701SAndroid Build Coastguard Worker pResInfo->OverrideCachePolicyUsage(Usage);
121*35ffd701SAndroid Build Coastguard Worker }
122*35ffd701SAndroid Build Coastguard Worker
123*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
124*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmLib::GmmCachePolicyGetMemoryObject
125*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicyCommon::CachePolicyGetMemoryObject()
126*35ffd701SAndroid Build Coastguard Worker ///
127*35ffd701SAndroid Build Coastguard Worker /// param[in] pResInfo: Resource info for resource, can be NULL.
128*35ffd701SAndroid Build Coastguard Worker /// param[in] Usage: Current usage for resource.
129*35ffd701SAndroid Build Coastguard Worker ///
130*35ffd701SAndroid Build Coastguard Worker /// @return MEMORY_OBJECT_CONTROL_STATE: Gen adjusted MOCS structure (cache
131*35ffd701SAndroid Build Coastguard Worker /// policy) for the given buffer use.
132*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetMemoryObject(void * pLibContext,GMM_RESOURCE_INFO * pResInfo,GMM_RESOURCE_USAGE_TYPE Usage)133*35ffd701SAndroid Build Coastguard Worker MEMORY_OBJECT_CONTROL_STATE GMM_STDCALL GmmCachePolicyGetMemoryObject(void *pLibContext, GMM_RESOURCE_INFO *pResInfo, GMM_RESOURCE_USAGE_TYPE Usage)
134*35ffd701SAndroid Build Coastguard Worker {
135*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
136*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetMemoryObject(pResInfo, Usage);
137*35ffd701SAndroid Build Coastguard Worker }
138*35ffd701SAndroid Build Coastguard Worker
139*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
140*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmLib::GmmCachePolicyGetOriginalMemoryObject
141*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicyCommon::CachePolicyGetOriginalMemoryObject()
142*35ffd701SAndroid Build Coastguard Worker ///
143*35ffd701SAndroid Build Coastguard Worker /// @param[in] pResInfo: Resource info for resource , can be null
144*35ffd701SAndroid Build Coastguard Worker /// @param[in] Usage: Current usage for resource
145*35ffd701SAndroid Build Coastguard Worker ///
146*35ffd701SAndroid Build Coastguard Worker /// @return MEMORY_OBJECT_CONTROL_STATE: Populated memory object
147*35ffd701SAndroid Build Coastguard Worker ///
148*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetOriginalMemoryObject(void * pLibContext,GMM_RESOURCE_INFO * pResInfo)149*35ffd701SAndroid Build Coastguard Worker MEMORY_OBJECT_CONTROL_STATE GMM_STDCALL GmmCachePolicyGetOriginalMemoryObject(void *pLibContext, GMM_RESOURCE_INFO *pResInfo)
150*35ffd701SAndroid Build Coastguard Worker {
151*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
152*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->CachePolicyGetOriginalMemoryObject(pResInfo);
153*35ffd701SAndroid Build Coastguard Worker }
154*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
155*35ffd701SAndroid Build Coastguard Worker /// C Wrapper function for GmmCachePolicy::GmmGetWantedMemoryType.
156*35ffd701SAndroid Build Coastguard Worker /// @see GmmLib::GmmCachePolicy::GetWantedMemoryType()
157*35ffd701SAndroid Build Coastguard Worker ///
158*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
159*35ffd701SAndroid Build Coastguard Worker /// @param[in] CachePolicy:cache policy for a usage
160*35ffd701SAndroid Build Coastguard Worker ///
161*35ffd701SAndroid Build Coastguard Worker /// @return wanted memory type
162*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmGetWantedMemoryType(void * pLibContext,GMM_CACHE_POLICY_ELEMENT CachePolicy)163*35ffd701SAndroid Build Coastguard Worker GMM_GFX_MEMORY_TYPE GmmGetWantedMemoryType(void *pLibContext, GMM_CACHE_POLICY_ELEMENT CachePolicy)
164*35ffd701SAndroid Build Coastguard Worker {
165*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT *pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
166*35ffd701SAndroid Build Coastguard Worker return pGmmLibContext->GetCachePolicyObj()->GetWantedMemoryType(CachePolicy);
167*35ffd701SAndroid Build Coastguard Worker }
168*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
169*35ffd701SAndroid Build Coastguard Worker /// Returns count of current MOCS values for MOCS Table programming at GMM boot
170*35ffd701SAndroid Build Coastguard Worker ///
171*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
172*35ffd701SAndroid Build Coastguard Worker /// @return uint32_t no of mocs register required to program
173*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetMaxMocsIndex(void * pLibContext)174*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmCachePolicyGetMaxMocsIndex(void *pLibContext)
175*35ffd701SAndroid Build Coastguard Worker {
176*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT * pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
177*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY * pCachePolicy = pGmmLibContext->GetCachePolicyObj();
178*35ffd701SAndroid Build Coastguard Worker GmmLib::GmmGen9CachePolicy *ptr = static_cast<GmmLib::GmmGen9CachePolicy *>(pCachePolicy);
179*35ffd701SAndroid Build Coastguard Worker return ptr->CurrentMaxMocsIndex;
180*35ffd701SAndroid Build Coastguard Worker }
181*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
182*35ffd701SAndroid Build Coastguard Worker /// Returns count of current L1 HDC MOCS values for MOCS Table programming at GMM boot
183*35ffd701SAndroid Build Coastguard Worker ///
184*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
185*35ffd701SAndroid Build Coastguard Worker /// @return uint32_t max L1 hdc mocs index needed to program
186*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetMaxL1HdcMocsIndex(void * pLibContext)187*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmCachePolicyGetMaxL1HdcMocsIndex(void *pLibContext)
188*35ffd701SAndroid Build Coastguard Worker {
189*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT * pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
190*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY * pCachePolicy = pGmmLibContext->GetCachePolicyObj();
191*35ffd701SAndroid Build Coastguard Worker GmmLib::GmmGen9CachePolicy *ptr = static_cast<GmmLib::GmmGen9CachePolicy *>(pCachePolicy);
192*35ffd701SAndroid Build Coastguard Worker return ptr->CurrentMaxL1HdcMocsIndex;
193*35ffd701SAndroid Build Coastguard Worker }
194*35ffd701SAndroid Build Coastguard Worker
195*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
196*35ffd701SAndroid Build Coastguard Worker /// Returns count of current Special MOCS values for MOCS Table programming at GMM boot
197*35ffd701SAndroid Build Coastguard Worker ///
198*35ffd701SAndroid Build Coastguard Worker /// @param[in] pLibContext: pGmmLibContext
199*35ffd701SAndroid Build Coastguard Worker /// @return uint32_t max special mocs index needed to program
200*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
GmmCachePolicyGetMaxSpecialMocsIndex(void * pLibContext)201*35ffd701SAndroid Build Coastguard Worker uint32_t GMM_STDCALL GmmCachePolicyGetMaxSpecialMocsIndex(void *pLibContext)
202*35ffd701SAndroid Build Coastguard Worker {
203*35ffd701SAndroid Build Coastguard Worker GMM_LIB_CONTEXT * pGmmLibContext = (GMM_LIB_CONTEXT *)pLibContext;
204*35ffd701SAndroid Build Coastguard Worker GMM_CACHE_POLICY *pCachePolicy = pGmmLibContext->GetCachePolicyObj();
205*35ffd701SAndroid Build Coastguard Worker return pCachePolicy->GetMaxSpecialMocsIndex();
206*35ffd701SAndroid Build Coastguard Worker }
207