blob: 6aff359d74b6e932abcc4db8d8519c6f46545fea
1 | /* |
2 | * Copyright (C) 2014 ARM Limited. All rights reserved. |
3 | * |
4 | * Copyright (C) 2008 The Android Open Source Project |
5 | * |
6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | * You may not use this file except in compliance with the License. |
8 | * You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, software |
13 | * distributed under the License is distributed on an "AS IS" BASIS, |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | * See the License for the specific language governing permissions and |
16 | * limitations under the License. |
17 | */ |
18 | |
19 | #include "gralloc_priv.h" |
20 | #include "gralloc_vsync.h" |
21 | #include "gralloc_vsync_report.h" |
22 | #include <sys/ioctl.h> |
23 | #include <errno.h> |
24 | |
25 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) |
26 | #define S3CFB_SET_VSYNC_INT _IOW('F', 206, unsigned int) |
27 | |
28 | int gralloc_vsync_enable(framebuffer_device_t *dev) |
29 | { |
30 | private_module_t* m = reinterpret_cast<private_module_t*>(dev->common.module); |
31 | int interrupt = 1; |
32 | if (ioctl(m->framebuffer->fd, S3CFB_SET_VSYNC_INT, &interrupt) < 0) return -errno; |
33 | return 0; |
34 | } |
35 | |
36 | int gralloc_vsync_disable(framebuffer_device_t *dev) |
37 | { |
38 | private_module_t* m = reinterpret_cast<private_module_t*>(dev->common.module); |
39 | int interrupt = 0; |
40 | if (ioctl(m->framebuffer->fd, S3CFB_SET_VSYNC_INT, &interrupt) < 0) return -errno; |
41 | return 0; |
42 | } |
43 | |
44 | int gralloc_wait_for_vsync(framebuffer_device_t *dev) |
45 | { |
46 | private_module_t* m = reinterpret_cast<private_module_t*>(dev->common.module); |
47 | if ( m->swapInterval ) |
48 | { |
49 | int crtc = 0; |
50 | gralloc_mali_vsync_report(MALI_VSYNC_EVENT_BEGIN_WAIT); |
51 | if (ioctl(m->framebuffer->fd, FBIO_WAITFORVSYNC, &crtc) < 0) |
52 | { |
53 | gralloc_mali_vsync_report(MALI_VSYNC_EVENT_END_WAIT); |
54 | return -errno; |
55 | } |
56 | gralloc_mali_vsync_report(MALI_VSYNC_EVENT_END_WAIT); |
57 | } |
58 | return 0; |
59 | } |
60 |