1b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/* 2b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Copyright (C) 2013 The Android Open Source Project 3b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 4b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Licensed under the Apache License, Version 2.0 (the "License"); 5b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * you may not use this file except in compliance with the License. 6b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * You may obtain a copy of the License at 7b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 8b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * http://www.apache.org/licenses/LICENSE-2.0 9b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 10b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Unless required by applicable law or agreed to in writing, software 11b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * distributed under the License is distributed on an "AS IS" BASIS, 12b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * See the License for the specific language governing permissions and 14b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * limitations under the License. 15b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 16b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 17b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#ifndef _LIBADF_ADF_H_ 18b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#define _LIBADF_ADF_H_ 19b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 20b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#include <stdint.h> 21b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#include <stdbool.h> 22b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#include <sys/cdefs.h> 23b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#include <sys/types.h> 24b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#include <video/adf.h> 25b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 26b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmanntypedef __u32 adf_id_t; 27b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 28b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannstruct adf_device { 29b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t id; 30b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann int fd; 31b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann}; 32b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 33b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann__BEGIN_DECLS 34b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 35b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 36b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Enumerates all ADF devices. 37b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 38b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns the number of ADF devices, and sets ids to a list of device IDs. 39b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of device IDs. 40b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 41b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * On error, returns -errno. 42b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 43b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_devices(adf_id_t **ids); 44b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 45b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 46b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Opens an ADF device. 47b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 48b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * On error, returns -errno. 49b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 50b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_device_open(adf_id_t id, int flags, struct adf_device *dev); 51b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 52b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Closes an ADF device. 53b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 54b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannvoid adf_device_close(struct adf_device *dev); 55b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 56b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Reads the ADF device data. 57b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 58b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * adf_get_device_data() allocates buffers inside data, which the caller 59b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * must free by calling adf_free_device_data(). On error, returns -errno. 60b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 61b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_get_device_data(struct adf_device *dev, struct adf_device_data *data); 62b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 63b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Frees the device data returned by adf_get_device_data(). 64b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 65b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannvoid adf_free_device_data(struct adf_device_data *data); 66b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 67b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 68b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Atomically posts a new display configuration to the specified interfaces. 69b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 70b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns a sync fence fd that will fire when the configuration is removed 71b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * from the screen. On error, returns -errno. 72b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 73b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_device_post(struct adf_device *dev, 74b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t *interfaces, size_t n_interfaces, 75b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann struct adf_buffer_config *bufs, size_t n_bufs, 76b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann void *custom_data, size_t custom_data_size); 77b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 78095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * Atomically posts a new display configuration to the specified interfaces. 79095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 80095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * Compared to adf_device_post(), adf_device_post_v2(): 81095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 82095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (*) allows the client to choose the kind of sync fence returned 83095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (through complete_fence_type) 84095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 85095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (*) stores the returned sync fence fd in a provided buffer, so the client 86095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * can distinguish between a permission error (ret = -1) and a successful 87095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * call that returns no fence (*complete_fence = -1) 88095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 89095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * On error, returns -errno. 90095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 91095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * On devices without the corresponding kernel support, returns -ENOTTY. 92095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann */ 93095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmannint adf_device_post_v2(struct adf_device *dev, 94095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann adf_id_t *interfaces, __u32 n_interfaces, 95095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann struct adf_buffer_config *bufs, __u32 n_bufs, 96095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann void *custom_data, __u64 custom_data_size, 97095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann enum adf_complete_fence_type complete_fence_type, 98095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann int *complete_fence); 99095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann 100095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann/** 101b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Attaches the specified interface and overlay engine. 102b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 103b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_device_attach(struct adf_device *dev, adf_id_t overlay_engine, 104b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t interface); 105b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 106b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Detaches the specified interface and overlay engine. 107b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 108b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_device_detach(struct adf_device *dev, adf_id_t overlay_engine, 109b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t interface); 110b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 111b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 112b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Enumerates all interfaces belonging to an ADF device. 113b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 114b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of interface IDs. 115b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 116b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_interfaces(struct adf_device *dev, adf_id_t **interfaces); 117b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 118b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 119b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Enumerates all interfaces which can be attached to the specified overlay 120b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * engine. 121b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 122b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of interface IDs. 123b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 124b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_interfaces_for_overlay_engine(struct adf_device *dev, 125b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t overlay_engine, adf_id_t **interfaces); 126b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 127b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Filters a list of interfaces by type. 128b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 129b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns the number of matching interfaces, and sets out to a list of matching 130b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * interface IDs. The caller must free() the returned list of interface IDs. 131b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 132b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * On error, returns -errno. 133b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 134b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_interfaces_filter_by_type(struct adf_device *dev, 135b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann enum adf_interface_type type, 136b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t *in, size_t n_in, adf_id_t **out); 137b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 138b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Filters a list of interfaces by flag. 139b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 140b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of interface IDs. 141b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 142b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_interfaces_filter_by_flag(struct adf_device *dev, __u32 flag, 143b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t *in, size_t n_in, adf_id_t **out); 144b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 145b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 146b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Opens an ADF interface. 147b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 148b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns a file descriptor. The caller must close() the fd when done. 149b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * On error, returns -errno. 150b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 151b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_interface_open(struct adf_device *dev, adf_id_t id, int flags); 152b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 153b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Reads the interface data. 154b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 155b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * adf_get_interface_data() allocates buffers inside data, which the caller 156b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * must free by calling adf_free_interface_data(). On error, returns -errno. 157b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 158b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_get_interface_data(int fd, struct adf_interface_data *data); 159b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 160b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Frees the interface data returned by adf_get_interface_data(). 161b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 162b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannvoid adf_free_interface_data(struct adf_interface_data *data); 163b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 164b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 165b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Sets the interface's DPMS mode. 166b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 167b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_interface_blank(int fd, __u8 mode); 168b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 169b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Sets the interface's display mode. 170b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 171b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_interface_set_mode(int fd, struct drm_mode_modeinfo *mode); 172b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 173b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Allocates a single-plane RGB buffer of the specified size and format. 174b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 175b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns a dma-buf fd. On error, returns -errno. 176b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 177b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_interface_simple_buffer_alloc(int fd, __u32 w, __u32 h, 178b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann __u32 format, __u32 *offset, __u32 *pitch); 179b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 180b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Posts a single-plane RGB buffer to the display using the specified 181b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * overlay engine. 182b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 183b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns a sync fence fd that will fire when the buffer is removed 184b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * from the screen. On error, returns -errno. 185b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 186b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_interface_simple_post(int fd, adf_id_t overlay_engine, 187b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann __u32 w, __u32 h, __u32 format, int buf_fd, __u32 offset, 188b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann __u32 pitch, int acquire_fence); 189095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann/** 190095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * Posts a single-plane RGB buffer to the display using the specified 191095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * overlay engine. 192095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 193095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * Compared to adf_interface_simple_post(), adf_interface_simple_post_v2(): 194095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 195095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (*) allows the client to choose the kind of sync fence returned 196095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (through complete_fence_type) 197095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 198095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * (*) stores the returned sync fence fd in a provided buffer, so the client 199095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * can distinguish between a permission error (ret = -1) and a successful 200095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * call that returns no fence (*complete_fence = -1) 201095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 202095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * On error, returns -errno. 203095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * 204095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann * On devices without the corresponding kernel support, returns -ENOTTY. 205095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann */ 206095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmannint adf_interface_simple_post_v2(int fd, adf_id_t overlay_engine, 207095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann __u32 w, __u32 h, __u32 format, int buf_fd, __u32 offset, 208095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann __u32 pitch, int acquire_fence, 209095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann enum adf_complete_fence_type complete_fence_type, 210095da6fb73efa1cebf8f04466cd6e4b40210db0bGreg Hackmann int *complete_fence); 211b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 212b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 213b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Enumerates all overlay engines belonging to an ADF device. 214b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 215b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of overlay engine IDs. 216b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 217b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_overlay_engines(struct adf_device *dev, adf_id_t **overlay_engines); 218b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 219b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 220b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Enumerates all overlay engines which can be attached to the specified 221b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * interface. 222b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 223b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned list of overlay engine IDs. 224b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 225b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_overlay_engines_for_interface(struct adf_device *dev, 226b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann adf_id_t interface, adf_id_t **overlay_engines); 227b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 228b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Filters a list of overlay engines by supported buffer format. 229b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 23047e0c8d849277a4b96fc364e5703f301e2b94519Greg Hackmann * Returns the overlay engines which support at least one of the specified 23147e0c8d849277a4b96fc364e5703f301e2b94519Greg Hackmann * formats. The caller must free() the returned list of overlay engine IDs. 232b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 233b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannssize_t adf_overlay_engines_filter_by_format(struct adf_device *dev, 23447e0c8d849277a4b96fc364e5703f301e2b94519Greg Hackmann const __u32 *formats, size_t n_formats, adf_id_t *in, size_t n_in, 23547e0c8d849277a4b96fc364e5703f301e2b94519Greg Hackmann adf_id_t **out); 236b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 237b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 238b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Opens an ADF overlay engine. 239b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 240b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns a file descriptor. The caller must close() the fd when done. 241b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * On error, returns -errno. 242b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 243b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_overlay_engine_open(struct adf_device *dev, adf_id_t id, int flags); 244b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 245b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Reads the overlay engine data. 246b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 247b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * adf_get_overlay_engine_data() allocates buffers inside data, which the caller 248b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * must free by calling adf_free_overlay_engine_data(). On error, returns 249b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * -errno. 250b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 251b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_get_overlay_engine_data(int fd, struct adf_overlay_engine_data *data); 252b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 253b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Frees the overlay engine data returned by adf_get_overlay_engine_data(). 254b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 255b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannvoid adf_free_overlay_engine_data(struct adf_overlay_engine_data *data); 256b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 257b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 258b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Returns whether the overlay engine supports the specified format. 259b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 260b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannbool adf_overlay_engine_supports_format(int fd, __u32 format); 261b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 262b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 263b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Subscribes or unsubscribes from the specified hardware event. 264b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 265b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_set_event(int fd, enum adf_event_type type, bool enabled); 266b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 267b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Reads one event from the fd, blocking if needed. 268b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * 269b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * The caller must free() the returned buffer. On error, returns -errno. 270b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 271b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannint adf_read_event(int fd, struct adf_event **event); 272b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 273b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#define ADF_FORMAT_STR_SIZE 5 274b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann/** 275b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann * Converts an ADF/DRM fourcc format to its string representation. 276b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann */ 277b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmannvoid adf_format_str(__u32 format, char buf[ADF_FORMAT_STR_SIZE]); 278b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 27918326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann/** 28018326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * Finds an appropriate interface and overlay engine for a simple post. 28118326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * 28218326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * Specifically, finds the primary interface, and an overlay engine 28318326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * that can be attached to the primary interface and supports one of the 28418326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * specified formats. The caller may pass a NULL formats list, to indicate that 28518326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * any RGB format is acceptable. 28618326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * 28718326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann * On error, returns -errno. 28818326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann */ 28918326353193f97d90b1a423b5efb9e3115befff8Greg Hackmannint adf_find_simple_post_configuration(struct adf_device *dev, 29018326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann const __u32 *formats, size_t n_formats, 29118326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann adf_id_t *interface, adf_id_t *overlay_engine); 29218326353193f97d90b1a423b5efb9e3115befff8Greg Hackmann 293b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann__END_DECLS 294b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann 295b85d12a3074c13e37f59b47edb81e1d4ff34eeb0Greg Hackmann#endif /* _LIBADF_ADF_H_ */ 296