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