1 /* 2 // Copyright(c)2014 IntelCorporation 3 // 4 // LicensedundertheApacheLicense,Version2.0(the"License"); 5 // youmaynotusethisfileexceptincompliancewiththeLicense. 6 // YoumayobtainacopyoftheLicenseat 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software 11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS, 12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. 13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand 14 // limitationsundertheLicense. 15 */ 16 #include <common/utils/HwcTrace.h> 17 #include <ips/common/Wsbm.h> 18 19 Wsbm::Wsbm(int drmFD) 20 : mInitialized(false) 21 { 22 CTRACE(); 23 mDrmFD = drmFD; 24 } 25 26 Wsbm::~Wsbm() 27 { 28 WARN_IF_NOT_DEINIT(); 29 } 30 31 bool Wsbm::initialize() 32 { 33 if (mInitialized) { 34 WLOGTRACE("object is initialized"); 35 return true; 36 } 37 38 int ret = psbWsbmInitialize(mDrmFD); 39 if (ret) { 40 ELOGTRACE("failed to initialize Wsbm"); 41 return false; 42 } 43 44 mInitialized = true; 45 return true; 46 } 47 48 void Wsbm::deinitialize() 49 { 50 if (!mInitialized) { 51 return; 52 } 53 psbWsbmTakedown(); 54 mInitialized = false; 55 } 56 57 bool Wsbm::allocateTTMBuffer(uint32_t size, uint32_t align, void ** buf) 58 { 59 int ret = psbWsbmAllocateTTMBuffer(size, align, buf); 60 if (ret) { 61 ELOGTRACE("failed to allocate buffer"); 62 return false; 63 } 64 65 return true; 66 } 67 68 bool Wsbm::allocateTTMBufferUB(uint32_t size, uint32_t align, void ** buf, void *user_pt) 69 { 70 int ret = psbWsbmAllocateFromUB(size, align, buf, user_pt); 71 if (ret) { 72 ELOGTRACE("failed to allocate UB buffer"); 73 return false; 74 } 75 76 return true; 77 } 78 79 bool Wsbm::destroyTTMBuffer(void * buf) 80 { 81 int ret = psbWsbmDestroyTTMBuffer(buf); 82 if (ret) { 83 ELOGTRACE("failed to destroy buffer"); 84 return false; 85 } 86 87 return true; 88 } 89 90 void * Wsbm::getCPUAddress(void * buf) 91 { 92 return psbWsbmGetCPUAddress(buf); 93 } 94 95 uint32_t Wsbm::getGttOffset(void * buf) 96 { 97 return psbWsbmGetGttOffset(buf); 98 } 99 100 bool Wsbm::wrapTTMBuffer(uint32_t handle, void **buf) 101 { 102 int ret = psbWsbmWrapTTMBuffer(handle, buf); 103 if (ret) { 104 ELOGTRACE("failed to wrap buffer"); 105 return false; 106 } 107 108 return true; 109 } 110 111 bool Wsbm::unreferenceTTMBuffer(void *buf) 112 { 113 int ret = psbWsbmUnReference(buf); 114 if (ret) { 115 ELOGTRACE("failed to unreference buffer"); 116 return false; 117 } 118 119 return true; 120 } 121 122 uint32_t Wsbm::getKBufHandle(void *buf) 123 { 124 return psbWsbmGetKBufHandle(buf); 125 } 126 127 bool Wsbm::waitIdleTTMBuffer(void *buf) 128 { 129 int ret = psbWsbmWaitIdle(buf); 130 if (ret) { 131 ELOGTRACE("failed to wait ttm buffer for idle"); 132 return false; 133 } 134 135 return true; 136 } 137