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