| /* |
| // Copyright (c) 2014 Intel Corporation |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| */ |
| #include <HwcTrace.h> |
| #include <common/Wsbm.h> |
| |
| Wsbm::Wsbm(int drmFD) |
| : mInitialized(false) |
| { |
| CTRACE(); |
| mDrmFD = drmFD; |
| } |
| |
| Wsbm::~Wsbm() |
| { |
| WARN_IF_NOT_DEINIT(); |
| } |
| |
| bool Wsbm::initialize() |
| { |
| if (mInitialized) { |
| WTRACE("object is initialized"); |
| return true; |
| } |
| |
| int ret = psbWsbmInitialize(mDrmFD); |
| if (ret) { |
| ETRACE("failed to initialize Wsbm"); |
| return false; |
| } |
| |
| mInitialized = true; |
| return true; |
| } |
| |
| void Wsbm::deinitialize() |
| { |
| if (!mInitialized) { |
| return; |
| } |
| psbWsbmTakedown(); |
| mInitialized = false; |
| } |
| |
| bool Wsbm::allocateTTMBuffer(uint32_t size, uint32_t align, void ** buf) |
| { |
| int ret = psbWsbmAllocateTTMBuffer(size, align, buf); |
| if (ret) { |
| ETRACE("failed to allocate buffer"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| bool Wsbm::allocateTTMBufferUB(uint32_t size, uint32_t align, void ** buf, void *user_pt) |
| { |
| int ret = psbWsbmAllocateFromUB(size, align, buf, user_pt); |
| if (ret) { |
| ETRACE("failed to allocate UB buffer"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| bool Wsbm::destroyTTMBuffer(void * buf) |
| { |
| int ret = psbWsbmDestroyTTMBuffer(buf); |
| if (ret) { |
| ETRACE("failed to destroy buffer"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| void * Wsbm::getCPUAddress(void * buf) |
| { |
| return psbWsbmGetCPUAddress(buf); |
| } |
| |
| uint32_t Wsbm::getGttOffset(void * buf) |
| { |
| return psbWsbmGetGttOffset(buf); |
| } |
| |
| bool Wsbm::wrapTTMBuffer(int64_t handle, void **buf) |
| { |
| int ret = psbWsbmWrapTTMBuffer(handle, buf); |
| if (ret) { |
| ETRACE("failed to wrap buffer"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| bool Wsbm::unreferenceTTMBuffer(void *buf) |
| { |
| int ret = psbWsbmUnReference(buf); |
| if (ret) { |
| ETRACE("failed to unreference buffer"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| uint64_t Wsbm::getKBufHandle(void *buf) |
| { |
| return psbWsbmGetKBufHandle(buf); |
| } |
| |
| bool Wsbm::waitIdleTTMBuffer(void *buf) |
| { |
| int ret = psbWsbmWaitIdle(buf); |
| if (ret) { |
| ETRACE("failed to wait ttm buffer for idle"); |
| return false; |
| } |
| |
| return true; |
| } |