1*7688df22SAndroid Build Coastguard Worker /* 2*7688df22SAndroid Build Coastguard Worker * Copyright © 2014 NVIDIA Corporation 3*7688df22SAndroid Build Coastguard Worker * 4*7688df22SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*7688df22SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*7688df22SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*7688df22SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*7688df22SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*7688df22SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*7688df22SAndroid Build Coastguard Worker * 11*7688df22SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 12*7688df22SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*7688df22SAndroid Build Coastguard Worker * Software. 14*7688df22SAndroid Build Coastguard Worker * 15*7688df22SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*7688df22SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*7688df22SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*7688df22SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*7688df22SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20*7688df22SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21*7688df22SAndroid Build Coastguard Worker * IN THE SOFTWARE. 22*7688df22SAndroid Build Coastguard Worker */ 23*7688df22SAndroid Build Coastguard Worker 24*7688df22SAndroid Build Coastguard Worker #ifndef LIBKMS_TEST_H 25*7688df22SAndroid Build Coastguard Worker #define LIBKMS_TEST_H 26*7688df22SAndroid Build Coastguard Worker 27*7688df22SAndroid Build Coastguard Worker #include <stdbool.h> 28*7688df22SAndroid Build Coastguard Worker #include <stdint.h> 29*7688df22SAndroid Build Coastguard Worker #include <stdlib.h> 30*7688df22SAndroid Build Coastguard Worker 31*7688df22SAndroid Build Coastguard Worker #include <xf86drmMode.h> 32*7688df22SAndroid Build Coastguard Worker 33*7688df22SAndroid Build Coastguard Worker struct kms_device { 34*7688df22SAndroid Build Coastguard Worker int fd; 35*7688df22SAndroid Build Coastguard Worker 36*7688df22SAndroid Build Coastguard Worker struct kms_screen **screens; 37*7688df22SAndroid Build Coastguard Worker unsigned int num_screens; 38*7688df22SAndroid Build Coastguard Worker 39*7688df22SAndroid Build Coastguard Worker struct kms_crtc **crtcs; 40*7688df22SAndroid Build Coastguard Worker unsigned int num_crtcs; 41*7688df22SAndroid Build Coastguard Worker 42*7688df22SAndroid Build Coastguard Worker struct kms_plane **planes; 43*7688df22SAndroid Build Coastguard Worker unsigned int num_planes; 44*7688df22SAndroid Build Coastguard Worker }; 45*7688df22SAndroid Build Coastguard Worker 46*7688df22SAndroid Build Coastguard Worker struct kms_device *kms_device_open(int fd); 47*7688df22SAndroid Build Coastguard Worker void kms_device_close(struct kms_device *device); 48*7688df22SAndroid Build Coastguard Worker 49*7688df22SAndroid Build Coastguard Worker struct kms_plane *kms_device_find_plane_by_type(struct kms_device *device, 50*7688df22SAndroid Build Coastguard Worker uint32_t type, 51*7688df22SAndroid Build Coastguard Worker unsigned int index); 52*7688df22SAndroid Build Coastguard Worker 53*7688df22SAndroid Build Coastguard Worker struct kms_crtc { 54*7688df22SAndroid Build Coastguard Worker struct kms_device *device; 55*7688df22SAndroid Build Coastguard Worker uint32_t id; 56*7688df22SAndroid Build Coastguard Worker }; 57*7688df22SAndroid Build Coastguard Worker 58*7688df22SAndroid Build Coastguard Worker struct kms_crtc *kms_crtc_create(struct kms_device *device, uint32_t id); 59*7688df22SAndroid Build Coastguard Worker void kms_crtc_free(struct kms_crtc *crtc); 60*7688df22SAndroid Build Coastguard Worker 61*7688df22SAndroid Build Coastguard Worker struct kms_framebuffer { 62*7688df22SAndroid Build Coastguard Worker struct kms_device *device; 63*7688df22SAndroid Build Coastguard Worker 64*7688df22SAndroid Build Coastguard Worker unsigned int width; 65*7688df22SAndroid Build Coastguard Worker unsigned int height; 66*7688df22SAndroid Build Coastguard Worker unsigned int pitch; 67*7688df22SAndroid Build Coastguard Worker uint32_t format; 68*7688df22SAndroid Build Coastguard Worker size_t size; 69*7688df22SAndroid Build Coastguard Worker 70*7688df22SAndroid Build Coastguard Worker uint32_t handle; 71*7688df22SAndroid Build Coastguard Worker uint32_t id; 72*7688df22SAndroid Build Coastguard Worker 73*7688df22SAndroid Build Coastguard Worker void *ptr; 74*7688df22SAndroid Build Coastguard Worker }; 75*7688df22SAndroid Build Coastguard Worker 76*7688df22SAndroid Build Coastguard Worker struct kms_framebuffer *kms_framebuffer_create(struct kms_device *device, 77*7688df22SAndroid Build Coastguard Worker unsigned int width, 78*7688df22SAndroid Build Coastguard Worker unsigned int height, 79*7688df22SAndroid Build Coastguard Worker uint32_t format); 80*7688df22SAndroid Build Coastguard Worker void kms_framebuffer_free(struct kms_framebuffer *fb); 81*7688df22SAndroid Build Coastguard Worker int kms_framebuffer_map(struct kms_framebuffer *fb, void **ptrp); 82*7688df22SAndroid Build Coastguard Worker void kms_framebuffer_unmap(struct kms_framebuffer *fb); 83*7688df22SAndroid Build Coastguard Worker 84*7688df22SAndroid Build Coastguard Worker struct kms_screen { 85*7688df22SAndroid Build Coastguard Worker struct kms_device *device; 86*7688df22SAndroid Build Coastguard Worker bool connected; 87*7688df22SAndroid Build Coastguard Worker uint32_t type; 88*7688df22SAndroid Build Coastguard Worker uint32_t id; 89*7688df22SAndroid Build Coastguard Worker 90*7688df22SAndroid Build Coastguard Worker unsigned int width; 91*7688df22SAndroid Build Coastguard Worker unsigned int height; 92*7688df22SAndroid Build Coastguard Worker char *name; 93*7688df22SAndroid Build Coastguard Worker 94*7688df22SAndroid Build Coastguard Worker drmModeModeInfo mode; 95*7688df22SAndroid Build Coastguard Worker }; 96*7688df22SAndroid Build Coastguard Worker 97*7688df22SAndroid Build Coastguard Worker struct kms_screen *kms_screen_create(struct kms_device *device, uint32_t id); 98*7688df22SAndroid Build Coastguard Worker void kms_screen_free(struct kms_screen *screen); 99*7688df22SAndroid Build Coastguard Worker 100*7688df22SAndroid Build Coastguard Worker int kms_screen_set(struct kms_screen *screen, struct kms_crtc *crtc, 101*7688df22SAndroid Build Coastguard Worker struct kms_framebuffer *fb); 102*7688df22SAndroid Build Coastguard Worker 103*7688df22SAndroid Build Coastguard Worker struct kms_plane { 104*7688df22SAndroid Build Coastguard Worker struct kms_device *device; 105*7688df22SAndroid Build Coastguard Worker struct kms_crtc *crtc; 106*7688df22SAndroid Build Coastguard Worker unsigned int type; 107*7688df22SAndroid Build Coastguard Worker uint32_t id; 108*7688df22SAndroid Build Coastguard Worker 109*7688df22SAndroid Build Coastguard Worker uint32_t *formats; 110*7688df22SAndroid Build Coastguard Worker unsigned int num_formats; 111*7688df22SAndroid Build Coastguard Worker }; 112*7688df22SAndroid Build Coastguard Worker 113*7688df22SAndroid Build Coastguard Worker struct kms_plane *kms_plane_create(struct kms_device *device, uint32_t id); 114*7688df22SAndroid Build Coastguard Worker void kms_plane_free(struct kms_plane *plane); 115*7688df22SAndroid Build Coastguard Worker 116*7688df22SAndroid Build Coastguard Worker int kms_plane_set(struct kms_plane *plane, struct kms_framebuffer *fb, 117*7688df22SAndroid Build Coastguard Worker unsigned int x, unsigned int y); 118*7688df22SAndroid Build Coastguard Worker bool kms_plane_supports_format(struct kms_plane *plane, uint32_t format); 119*7688df22SAndroid Build Coastguard Worker 120*7688df22SAndroid Build Coastguard Worker #endif 121