16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License"); 5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License. 6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at 7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// http://www.apache.org/licenses/LICENSE-2.0 9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software 11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS, 12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and 14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License. 15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/ 160594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/utils/HwcTrace.h> 170594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <ips/common/Wsbm.h> 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 196a6081a46a83da606cf21548879b37695adc7e1fAndy QiuWsbm::Wsbm(int drmFD) 20eb726af21649d79ed720bdf329e0849270995c45Andy Qiu : mInitialized(false) 216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 22e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu CTRACE(); 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mDrmFD = drmFD; 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 266a6081a46a83da606cf21548879b37695adc7e1fAndy QiuWsbm::~Wsbm() 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 28eb726af21649d79ed720bdf329e0849270995c45Andy Qiu WARN_IF_NOT_DEINIT(); 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::initialize() 326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 33eb726af21649d79ed720bdf329e0849270995c45Andy Qiu if (mInitialized) { 344157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev WLOGTRACE("object is initialized"); 35eb726af21649d79ed720bdf329e0849270995c45Andy Qiu return true; 36eb726af21649d79ed720bdf329e0849270995c45Andy Qiu } 37eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmInitialize(mDrmFD); 39eb726af21649d79ed720bdf329e0849270995c45Andy Qiu if (ret) { 404157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to initialize Wsbm"); 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 44eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mInitialized = true; 456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 48eb726af21649d79ed720bdf329e0849270995c45Andy Qiuvoid Wsbm::deinitialize() 49eb726af21649d79ed720bdf329e0849270995c45Andy Qiu{ 50eb726af21649d79ed720bdf329e0849270995c45Andy Qiu if (!mInitialized) { 51eb726af21649d79ed720bdf329e0849270995c45Andy Qiu return; 52eb726af21649d79ed720bdf329e0849270995c45Andy Qiu } 53eb726af21649d79ed720bdf329e0849270995c45Andy Qiu psbWsbmTakedown(); 54eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mInitialized = false; 55eb726af21649d79ed720bdf329e0849270995c45Andy Qiu} 56eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::allocateTTMBuffer(uint32_t size, uint32_t align, void ** buf) 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmAllocateTTMBuffer(size, align, buf); 60eb726af21649d79ed720bdf329e0849270995c45Andy Qiu if (ret) { 614157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to allocate buffer"); 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 68ffaa9065cde35b7e8394788565db987f4d2705f2Li Zengbool Wsbm::allocateTTMBufferUB(uint32_t size, uint32_t align, void ** buf, void *user_pt) 69ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng{ 70ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng int ret = psbWsbmAllocateFromUB(size, align, buf, user_pt); 71ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng if (ret) { 724157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to allocate UB buffer"); 73ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng return false; 74ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng } 75ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng 76ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng return true; 77ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng} 78ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::destroyTTMBuffer(void * buf) 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmDestroyTTMBuffer(buf); 82eb726af21649d79ed720bdf329e0849270995c45Andy Qiu if (ret) { 834157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to destroy buffer"); 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuvoid * Wsbm::getCPUAddress(void * buf) 916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return psbWsbmGetCPUAddress(buf); 936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuuint32_t Wsbm::getGttOffset(void * buf) 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return psbWsbmGetGttOffset(buf); 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::wrapTTMBuffer(uint32_t handle, void **buf) 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmWrapTTMBuffer(handle, buf); 1036a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu if (ret) { 1044157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to wrap buffer"); 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::unreferenceTTMBuffer(void *buf) 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmUnReference(buf); 1146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu if (ret) { 1154157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to unreference buffer"); 1166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 1186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 1206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuuint32_t Wsbm::getKBufHandle(void *buf) 1236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 1246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return psbWsbmGetKBufHandle(buf); 1256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiubool Wsbm::waitIdleTTMBuffer(void *buf) 1286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu{ 1296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int ret = psbWsbmWaitIdle(buf); 1306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu if (ret) { 1314157ee3f6fb20e0a249b9eedc06f3b16785ba31bIliyan Malchev ELOGTRACE("failed to wait ttm buffer for idle"); 1326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return false; 1336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 1346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu return true; 1366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 137