1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef DISPLAY_GRALLOC_GBM_H 17 #define DISPLAY_GRALLOC_GBM_H 18 #include "buffer_handle.h" 19 #include "hdf_dlist.h" 20 #include "hdf_log.h" 21 #include "v1_0/display_buffer_type.h" 22 23 namespace OHOS { 24 namespace HDI { 25 namespace DISPLAY { 26 using namespace OHOS::HDI::Display::Buffer::V1_0; 27 28 using GrallocManager = struct { 29 struct gbm_device *gbmDevice; 30 int drmFd; 31 struct DListHead gbmBoHead; 32 int32_t referCount; 33 }; 34 35 using GbmBoList = struct { 36 struct DListHead entry; 37 struct gbm_bo *bo; 38 int fd; 39 }; 40 41 int32_t GbmAllocMem(const AllocInfo *info, BufferHandle **buffer); 42 void GbmFreeMem(BufferHandle *buffer); 43 void *GbmMmap(BufferHandle *buffer); 44 int32_t GbmUnmap(BufferHandle *buffer); 45 int32_t GbmInvalidateCache(BufferHandle *buffer); 46 int32_t GbmFlushCache(BufferHandle *buffer); 47 int32_t GbmGrallocUninitialize(void); 48 int32_t GbmGrallocInitialize(void); 49 50 #ifdef GRALLOC_LOCK_DEBUG 51 #define GRALLOC_LOCK(format, ...) \ 52 do { \ 53 HDF_LOGE("[%{public}s@%{public}s:%{public}d]" format "\n", __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \ 54 pthread_mutex_lock(&g_lock); \ 55 } while (0) 56 57 #define GRALLOC_UNLOCK(format, ...) \ 58 do { \ 59 HDF_LOGE("[%{public}s@%{public}s:%{public}d]" format "\n", __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \ 60 pthread_mutex_unlock(&g_lock); \ 61 } while (0) 62 #else 63 #define GRALLOC_LOCK(format, ...) \ 64 do { \ 65 pthread_mutex_lock(&g_lock); \ 66 } while (0) 67 68 #define GRALLOC_UNLOCK(format, ...) \ 69 do { \ 70 pthread_mutex_unlock(&g_lock); \ 71 } while (0) 72 #endif 73 } // namespace DISPLAY 74 } // namespace HDI 75 } // namespace OHOS 76 #endif // DISPLAY_GRALLOC_GBM_H 77