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 { 3984d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles /** 4084d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * Common methods of the framebuffer device. This *must* be the first member of 4184d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * framebuffer_device_t as users of this structure will cast a hw_device_t to 4284d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * framebuffer_device_t pointer in contexts where it's known the hw_device_t references a 4384d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * framebuffer_device_t. 4484d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles */ 455337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian struct hw_device_t common; 465337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 475337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* flags describing some attributes of the framebuffer */ 485337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t flags; 495337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 505337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* dimensions of the framebuffer in pixels */ 515337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t width; 525337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const uint32_t height; 535337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 545337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* frambuffer stride in pixels */ 555337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int stride; 565337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 575337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* framebuffer pixel format */ 585337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int format; 595337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 605337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* resolution of the framebuffer's display panel in pixel per inch*/ 615337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float xdpi; 625337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float ydpi; 635337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 645337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* framebuffer's display panel refresh rate in frames per second */ 655337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const float fps; 665337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 675337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* min swap interval supported by this framebuffer */ 685337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int minSwapInterval; 695337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 705337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* max swap interval supported by this framebuffer */ 715337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian const int maxSwapInterval; 725337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 7388ef190fcf4a02839eb13ab7ca8d91d3dd145731Naseer Ahmed /* Number of framebuffers supported*/ 7488ef190fcf4a02839eb13ab7ca8d91d3dd145731Naseer Ahmed const int numFramebuffers; 7588ef190fcf4a02839eb13ab7ca8d91d3dd145731Naseer Ahmed 7688ef190fcf4a02839eb13ab7ca8d91d3dd145731Naseer Ahmed int reserved[7]; 775337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 785337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 795337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * requests a specific swap-interval (same definition than EGL) 805337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 815337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 825337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 835337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*setSwapInterval)(struct framebuffer_device_t* window, 845337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int interval); 855337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 865337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 875337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This hook is OPTIONAL. 885337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 895337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * It is non NULL If the framebuffer driver supports "update-on-demand" 905337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * and the given rectangle is the area of the screen that gets 915337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * updated during (*post)(). 925337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 935337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This is useful on devices that are able to DMA only a portion of 945337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * the screen to the display panel, upon demand -- as opposed to 955337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * constantly refreshing the panel 60 times per second, for instance. 965337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 975337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Only the area defined by this rectangle is guaranteed to be valid, that 985337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * is, the driver is not allowed to post anything outside of this 995337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * rectangle. 1005337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1015337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The rectangle evaluated during (*post)() and specifies which area 1025337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * of the buffer passed in (*post)() shall to be posted. 1035337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1045337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * return -EINVAL if width or height <=0, or if left or top < 0 1055337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1065337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*setUpdateRect)(struct framebuffer_device_t* window, 1075337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int left, int top, int width, int height); 1085337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1095337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1105337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Post <buffer> to the display (display it on the screen) 1115337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The buffer must have been allocated with the 1125337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * GRALLOC_USAGE_HW_FB usage flag. 1135337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * buffer must be the same width and height as the display and must NOT 1145337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * be locked. 1155337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1165337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The buffer is shown during the next VSYNC. 1175337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1185337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * If the same buffer is posted again (possibly after some other buffer), 1195337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * post() will block until the the first post is completed. 1205337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1215337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Internally, post() is expected to lock the buffer so that a 1225337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * subsequent call to gralloc_module_t::(*lock)() with USAGE_RENDER or 1235337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * USAGE_*_WRITE will block until it is safe; that is typically once this 1245337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * buffer is shown and another buffer has been posted. 1255337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1265337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 1275337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1285337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*post)(struct framebuffer_device_t* dev, buffer_handle_t buffer); 1295337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1305337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1315337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1325337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * The (*compositionComplete)() method must be called after the 1335337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * compositor has finished issuing GL commands for client buffers. 1345337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1355337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1365337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*compositionComplete)(struct framebuffer_device_t* dev); 1375337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1385337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1395337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * This hook is OPTIONAL. 1405337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1415337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * If non NULL it will be caused by SurfaceFlinger on dumpsys 1425337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1435337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian void (*dump)(struct framebuffer_device_t* dev, char *buff, int buff_len); 1445337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1455337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian /* 1465337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * (*enableScreen)() is used to either blank (enable=0) or 1475337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * unblank (enable=1) the screen this framebuffer is attached to. 1485337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * 1495337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian * Returns 0 on success or -errno on error. 1505337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian */ 1515337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian int (*enableScreen)(struct framebuffer_device_t* dev, int enable); 1525337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1535337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian void* reserved_proc[6]; 1545337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1555337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} framebuffer_device_t; 1565337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1575337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1585337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian/** convenience API for opening and closing a supported device */ 1595337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1605337b102898cfd48eda7215df15baaf3bc96521fMathias Agopianstatic inline int framebuffer_open(const struct hw_module_t* module, 1615337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian struct framebuffer_device_t** device) { 1625337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian return module->methods->open(module, 163cc8d9f9fcbc170dedba609a15705e838cf09218bColin Cross GRALLOC_HARDWARE_FB0, TO_HW_DEVICE_T_OPEN(device)); 1645337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} 1655337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1665337b102898cfd48eda7215df15baaf3bc96521fMathias Agopianstatic inline int framebuffer_close(struct framebuffer_device_t* device) { 1675337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian return device->common.close(&device->common); 1685337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian} 1695337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1705337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1715337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian__END_DECLS 1725337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian 1735337b102898cfd48eda7215df15baaf3bc96521fMathias Agopian#endif // ANDROID_FB_INTERFACE_H 174