gralloc.h revision a8a75166a2d3c7639a7432a67075c98796165206
1a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/* 2a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Copyright (C) 2008 The Android Open Source Project 3a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 4a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * you may not use this file except in compliance with the License. 6a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * You may obtain a copy of the License at 7a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 8a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 10a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * See the License for the specific language governing permissions and 14a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * limitations under the License. 15a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 16a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 17a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 18a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#ifndef ANDROID_GRALLOC_INTERFACE_H 19a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define ANDROID_GRALLOC_INTERFACE_H 20a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 21a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <cutils/native_handle.h> 22a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 23a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <hardware/hardware.h> 24a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 25a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <stdint.h> 26a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <sys/cdefs.h> 27a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <sys/types.h> 28a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 29a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian__BEGIN_DECLS 30a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 31a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/** 32a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The id of this module 33a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 34a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define GRALLOC_HARDWARE_MODULE_ID "gralloc" 35a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 36a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/** 37a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Name of the graphics device to open 38a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 39a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 40a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define GRALLOC_HARDWARE_FB0 "fb0" 41a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define GRALLOC_HARDWARE_GPU0 "gpu0" 42a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 43a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianenum { 44a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is never read in software */ 45a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_READ_NEVER = 0x00000001, 46a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is rarely read in software */ 47a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_READ_RARELY = 0x00000002, 48a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is often read in software */ 49a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_READ_OFTEN = 0x00000003, 50a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* mask for the software read values */ 51a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_READ_MASK = 0x0000000F, 52a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 53a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is never written in software */ 54a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_WRITE_NEVER = 0x00000010, 55a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is never written in software */ 56a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_WRITE_RARELY = 0x00000020, 57a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer is never written in software */ 58a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_WRITE_OFTEN = 0x00000030, 59a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* mask for the software write values */ 60a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_SW_WRITE_MASK = 0x000000F0, 61a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 62a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer will be used as an OpenGL ES texture */ 63a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_HW_TEXTURE = 0x00000100, 64a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer will be used as an OpenGL ES render target */ 65a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_HW_RENDER = 0x00000200, 66a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer will be used by the 2D hardware blitter */ 67a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_HW_2D = 0x00000C00, 68a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* buffer will be used with the framebuffer device */ 69a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_HW_FB = 0x00001000, 70a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* mask for the software usage bit-mask */ 71a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_USAGE_HW_MASK = 0x00001F00, 72a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 73a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 74a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianenum { 75a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* the framebuffer is mapped in memory */ 76a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian FRAMEBUFFER_RESERVED0 = 0x00000001, 77a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian FRAMEBUFFER_FLAG_MAPPED = 0x00000002, 78a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 79a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 80a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/*****************************************************************************/ 81a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 82a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopiantypedef const native_handle* buffer_handle_t; 83a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 84a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/** 85a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 86a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * and the fields of this data structure must begin with hw_module_t 87a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * followed by module specific information. 88a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 89a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstruct gralloc_module_t { 90a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct hw_module_t common; 91a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 92a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 93a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The (*map)() method maps the buffer in the caller's address space 94a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * if this operation is allowed (see below). 95a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Mapped buffers are reference-counted in a given process, that is, 96a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * if a the buffer is already mapped, this function must return the 97a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * same address and the internal reference counter is incremented. 98a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 99a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 100a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 101a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 102a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*map)(struct gralloc_module_t const* module, 103a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t handle, void** vaddr); 104a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 105a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 106a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The (*unmap)() method, unmaps the buffer from the caller's address 107a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * space, if the buffer has been mapped more than once, 108a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * the (*unmap)() needs to be called the same number of time before 109a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * the buffer is actually unmapped. 110a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 111a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 112a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 113a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 114a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*unmap)(struct gralloc_module_t const* module, buffer_handle_t handle); 115a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 116a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 117a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 118a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The (*lock)() method is called before a buffer is accessed for the 119a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * specified usage. This call may block, for instance if the h/w needs 120a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * to finish rendering or if CPU caches need to be synchronized. 121a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 122a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The caller promises to modify ALL PIXELS and ONLY THE PIXELS in the area 123a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * specified by (l,t,w,h). 124a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 125a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The content of the buffer outside of the specified area is NOT modified 126a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * by this call. 127a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 128a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 129a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 130a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*lock)(struct gralloc_module_t const* module, 131a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t handle, int usage, 132a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int l, int t, int w, int h); 133a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 134a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 135a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 136a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The (*unlock)() method must be called after all changes to the buffer 137a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * are completed. 138a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 139a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 140a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*unlock)(struct gralloc_module_t const* module, 141a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t handle); 142a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 143a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 144a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 145a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/*****************************************************************************/ 146a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 147a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/** 148a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Every device data structure must begin with hw_device_t 149a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * followed by module specific public methods and attributes. 150a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 151a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 152a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstruct alloc_device_t { 153a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct hw_device_t common; 154a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 155a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 156a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * (*alloc)() Allocates a buffer in graphic memory with the requested 157a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * parameters and returns a buffer_handle_t and the stride in pixels to 158a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * allow the implementation to satisfy hardware constraints on the width 159a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * of a pixmap (eg: it may have to be multiple of 8 pixels). 160a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The CALLER TAKES OWNERSHIP of the buffer_handle_t. 161a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 162a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 163a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 164a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 165a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*alloc)(struct alloc_device_t* dev, 166a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int w, int h, int format, int usage, 167a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t* handle, int* stride); 168a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 169a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 170a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * (*free)() Frees a previously allocated buffer. 171a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Behavior is undefined if the buffer is still mapped in any process, 172a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * but shall not result in termination of the program or security breaches 173a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * (allowing a process to get access to another process' buffers). 174a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * THIS FUNCTION TAKES OWNERSHIP of the buffer_handle_t which becomes 175a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * invalid after the call. 176a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 177a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 178a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 179a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*free)(struct alloc_device_t* dev, 180a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t handle); 181a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 182a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 183a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 184a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 185a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstruct framebuffer_device_t { 186a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct hw_device_t common; 187a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 188a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* flags describing some attributes of the framebuffer */ 189a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const uint32_t flags; 190a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 191a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* dimensions of the framebuffer in pixels */ 192a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const uint32_t width; 193a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const uint32_t height; 194a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 195a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* frambuffer stride in pixels */ 196a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const int stride; 197a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 198a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* framebuffer pixel format */ 199a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const int format; 200a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 201a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* resolution of the framebuffer's display panel in pixel per inch*/ 202a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const float xdpi; 203a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const float ydpi; 204a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 205a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* framebuffer's display panel refresh rate in frames per second */ 206a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const float fps; 207a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 208a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* min swap interval supported by this framebuffer */ 209a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const int minSwapInterval; 210a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 211a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* max swap interval supported by this framebuffer */ 212a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian const int maxSwapInterval; 213a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 214a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int reserved[8]; 215a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 216a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 217a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * requests a specific swap-interval (same definition than EGL) 218a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 219a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 220a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 221a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*setSwapInterval)(struct framebuffer_device_t* window, 222a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int interval); 223a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 224a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 225a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * sets a rectangle evaluated during (*post)() specifying which area 226a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * of the buffer passed in (*post)() needs to be posted. 227a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 228a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * return -EINVAL if width or height <=0, or if left or top < 0 229a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 230a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*setUpdateRect)(struct framebuffer_device_t* window, 231a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int left, int top, int width, int height); 232a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 233a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /* 234a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Post <buffer> to the display (display it on the screen) 235a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The buffer must have been allocated with the 236a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * GRALLOC_USAGE_HW_FB usage flag. 237a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * buffer must be the same width and height as the display and must NOT 238a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * be locked. 239a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 240a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * The buffer is shown during the next VSYNC. 241a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 242a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * If the same buffer is posted again (possibly after some other buffer), 243a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * post() will block until the the first post is completed. 244a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 245a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Internally, post() is expected to lock the buffer so that a 246a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * subsequent call to gralloc_module_t::(*lock)() with USAGE_RENDER or 247a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * USAGE_*_WRITE will block until it is safe; that is typically once this 248a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * buffer is shown and another buffer has been posted. 249a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 250a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Returns 0 on success or -errno on error. 251a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 252a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int (*post)(struct framebuffer_device_t* dev, buffer_handle_t buffer); 253a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 254a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian void* reserved_proc[8]; 255a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 256a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 257a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 258a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/** convenience API for opening and closing a supported device */ 259a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 260a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstatic inline int gralloc_open(const struct hw_module_t* module, 261a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct alloc_device_t** device) { 262a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return module->methods->open(module, 263a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_HARDWARE_GPU0, (struct hw_device_t**)device); 264a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian} 265a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 266a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstatic inline int gralloc_close(struct alloc_device_t* device) { 267a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return device->common.close(&device->common); 268a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian} 269a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 270a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 271a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstatic inline int framebuffer_open(const struct hw_module_t* module, 272a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct framebuffer_device_t** device) { 273a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return module->methods->open(module, 274a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian GRALLOC_HARDWARE_FB0, (struct hw_device_t**)device); 275a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian} 276a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 277a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstatic inline int framebuffer_close(struct framebuffer_device_t* device) { 278a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return device->common.close(&device->common); 279a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian} 280a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 281a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 282a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian__END_DECLS 283a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 284a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#endif // ANDROID_ALLOC_INTERFACE_H 285