fb.h revision 5337b102898cfd48eda7215df15baaf3bc96521f
15337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian/* 25337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Copyright (C) 2008 The Android Open Source Project 35337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 45337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 55337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * you may not use this file except in compliance with the License. 65337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * You may obtain a copy of the License at 75337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 85337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 95337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 105337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Unless required by applicable law or agreed to in writing, software 115337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 125337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * See the License for the specific language governing permissions and 145337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * limitations under the License. 155337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 165337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 175337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 185337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#ifndef ANDROID_FB_INTERFACE_H 195337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#define ANDROID_FB_INTERFACE_H 205337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 215337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#include <stdint.h> 225337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#include <sys/cdefs.h> 235337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#include <sys/types.h> 245337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 255337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#include <cutils/native_handle.h> 265337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 275337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#include <hardware/hardware.h> 285337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 295337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian__BEGIN_DECLS 305337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 315337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#define GRALLOC_HARDWARE_FB0 "fb0" 325337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 335337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian/*****************************************************************************/ 345337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 355337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 365337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian/*****************************************************************************/ 375337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 385337b102898cfd48eda7215df15baaf3bc96521fMathias Agopiantypedef struct framebuffer_device_t { 395337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian struct hw_device_t common; 405337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 415337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* flags describing some attributes of the framebuffer */ 425337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t flags; 435337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 445337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* dimensions of the framebuffer in pixels */ 455337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t width; 465337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t height; 475337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 485337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* frambuffer stride in pixels */ 495337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int stride; 505337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 515337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* framebuffer pixel format */ 525337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int format; 535337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 545337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* resolution of the framebuffer's display panel in pixel per inch*/ 555337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float xdpi; 565337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float ydpi; 575337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 585337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* framebuffer's display panel refresh rate in frames per second */ 595337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float fps; 605337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 615337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* min swap interval supported by this framebuffer */ 625337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int minSwapInterval; 635337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 645337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* max swap interval supported by this framebuffer */ 655337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int maxSwapInterval; 665337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 675337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int reserved[8]; 685337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 695337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 705337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * requests a specific swap-interval (same definition than EGL) 715337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 725337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 735337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 745337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*setSwapInterval)(struct framebuffer_device_t* window, 755337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int interval); 765337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 775337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 785337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This hook is OPTIONAL. 795337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 805337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * It is non NULL If the framebuffer driver supports "update-on-demand" 815337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * and the given rectangle is the area of the screen that gets 825337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * updated during (*post)(). 835337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 845337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This is useful on devices that are able to DMA only a portion of 855337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * the screen to the display panel, upon demand -- as opposed to 865337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * constantly refreshing the panel 60 times per second, for instance. 875337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 885337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Only the area defined by this rectangle is guaranteed to be valid, that 895337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * is, the driver is not allowed to post anything outside of this 905337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * rectangle. 915337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 925337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The rectangle evaluated during (*post)() and specifies which area 935337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * of the buffer passed in (*post)() shall to be posted. 945337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 955337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * return -EINVAL if width or height <=0, or if left or top < 0 965337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 975337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*setUpdateRect)(struct framebuffer_device_t* window, 985337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int left, int top, int width, int height); 995337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1005337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1015337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Post <buffer> to the display (display it on the screen) 1025337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The buffer must have been allocated with the 1035337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * GRALLOC_USAGE_HW_FB usage flag. 1045337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * buffer must be the same width and height as the display and must NOT 1055337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * be locked. 1065337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1075337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The buffer is shown during the next VSYNC. 1085337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1095337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * If the same buffer is posted again (possibly after some other buffer), 1105337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * post() will block until the the first post is completed. 1115337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1125337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Internally, post() is expected to lock the buffer so that a 1135337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * subsequent call to gralloc_module_t::(*lock)() with USAGE_RENDER or 1145337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * USAGE_*_WRITE will block until it is safe; that is typically once this 1155337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * buffer is shown and another buffer has been posted. 1165337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1175337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 1185337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1195337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*post)(struct framebuffer_device_t* dev, buffer_handle_t buffer); 1205337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1215337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1225337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1235337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The (*compositionComplete)() method must be called after the 1245337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * compositor has finished issuing GL commands for client buffers. 1255337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1265337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1275337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*compositionComplete)(struct framebuffer_device_t* dev); 1285337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1295337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1305337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This hook is OPTIONAL. 1315337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1325337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * If non NULL it will be caused by SurfaceFlinger on dumpsys 1335337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1345337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian void (*dump)(struct framebuffer_device_t* dev, char *buff, int buff_len); 1355337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1365337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1375337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * (*enableScreen)() is used to either blank (enable=0) or 1385337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * unblank (enable=1) the screen this framebuffer is attached to. 1395337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1405337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 1415337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1425337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*enableScreen)(struct framebuffer_device_t* dev, int enable); 1435337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1445337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian void* reserved_proc[6]; 1455337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1465337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} framebuffer_device_t; 1475337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1485337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1495337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian/** convenience API for opening and closing a supported device */ 1505337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1515337b102898cfd48eda7215df15baaf3bc96521fMathias Agopianstatic inline int framebuffer_open(const struct hw_module_t* module, 1525337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian struct framebuffer_device_t** device) { 1535337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian return module->methods->open(module, 1545337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian GRALLOC_HARDWARE_FB0, (struct hw_device_t**)device); 1555337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} 1565337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1575337b102898cfd48eda7215df15baaf3bc96521fMathias Agopianstatic inline int framebuffer_close(struct framebuffer_device_t* device) { 1585337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian return device->common.close(&device->common); 1595337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} 1605337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1615337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1625337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian__END_DECLS 1635337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1645337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#endif // ANDROID_FB_INTERFACE_H 165