114 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2008, The Android Open Source Project
 | |
|  * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
 | |
|  *
 | |
|  * 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 <unistd.h>
 | |
| #include <fcntl.h>
 | |
| 
 | |
| #include <sys/mman.h>
 | |
| #include <sys/stat.h>
 | |
| #include <sys/types.h>
 | |
| #include <sys/ioctl.h>
 | |
| #include <cutils/properties.h>
 | |
| #include <utils/RefBase.h>
 | |
| 
 | |
| #include <linux/android_pmem.h>
 | |
| 
 | |
| #include "gr.h"
 | |
| #include "gpu.h"
 | |
| #include "memalloc.h"
 | |
| #include "alloc_controller.h"
 | |
| 
 | |
| using namespace gralloc;
 | |
| using android::sp;
 | |
| 
 | |
| int fb_device_open(const hw_module_t* module, const char* name,
 | |
|         hw_device_t** device);
 | |
| 
 | |
| static int gralloc_device_open(const hw_module_t* module, const char* name,
 | |
|         hw_device_t** device);
 | |
| 
 | |
| extern int gralloc_lock(gralloc_module_t const* module,
 | |
|         buffer_handle_t handle, int usage,
 | |
|         int l, int t, int w, int h,
 | |
|         void** vaddr);
 | |
| 
 | |
| extern int gralloc_unlock(gralloc_module_t const* module,
 | |
|         buffer_handle_t handle);
 | |
| 
 | |
| extern int gralloc_register_buffer(gralloc_module_t const* module,
 | |
|         buffer_handle_t handle);
 | |
| 
 | |
| extern int gralloc_unregister_buffer(gralloc_module_t const* module,
 | |
|         buffer_handle_t handle);
 | |
| 
 | |
| extern int gralloc_perform(struct gralloc_module_t const* module,
 | |
|         int operation, ... );
 | |
| 
 | |
| // HAL module methods
 | |
| static struct hw_module_methods_t gralloc_module_methods = {
 | |
|     open: gralloc_device_open
 | |
| };
 | |
| 
 | |
| // HAL module initialize
 | |
| struct private_module_t HAL_MODULE_INFO_SYM = {
 | |
|     base: {
 | |
|         common: {
 | |
|             tag: HARDWARE_MODULE_TAG,
 | |
|             version_major: 1,
 | |
|             version_minor: 0,
 | |
|             id: GRALLOC_HARDWARE_MODULE_ID,
 | |
|             name: "Graphics Memory Allocator Module",
 | |
|             author: "The Android Open Source Project",
 | |
|             methods: &gralloc_module_methods,
 | |
|             dso: 0,
 | |
|             reserved: {0},
 | |
|         },
 | |
|         registerBuffer: gralloc_register_buffer,
 | |
|         unregisterBuffer: gralloc_unregister_buffer,
 | |
|         lock: gralloc_lock,
 | |
|         unlock: gralloc_unlock,
 | |
|         perform: gralloc_perform,
 | |
|         reserved_proc: {0},
 | |
|     },
 | |
|     framebuffer: 0,
 | |
|     fbFormat: 0,
 | |
|     flags: 0,
 | |
|     numBuffers: 0,
 | |
|     bufferMask: 0,
 | |
|     lock: PTHREAD_MUTEX_INITIALIZER,
 | |
|     currentBuffer: 0,
 | |
| };
 | |
| 
 | |
| // Open Gralloc device
 | |
| int gralloc_device_open(const hw_module_t* module, const char* name,
 | |
|         hw_device_t** device)
 | |
| {
 | |
|     int status = -EINVAL;
 | |
|     if (!strcmp(name, GRALLOC_HARDWARE_GPU0)) {
 | |
|         const private_module_t* m = reinterpret_cast<const private_module_t*>(
 | |
|                 module);
 | |
|         gpu_context_t *dev;
 | |
|         sp<IAllocController> alloc_ctrl = IAllocController::getInstance(true);
 | |
|         dev = new gpu_context_t(m, alloc_ctrl);
 | |
|         *device = &dev->common;
 | |
|         status = 0;
 | |
|     } else {
 | |
|         status = fb_device_open(module, name, device);
 | |
|     }
 | |
|     return status;
 | |
| }
 |