12b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
22b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \file drm.h
32b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Header for the Direct Rendering Manager
42b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
52b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \author Rickard E. (Rik) Faith <faith@valinux.com>
62b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
72b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \par Acknowledgments:
82b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
92b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/*
122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * All rights reserved.
152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Permission is hereby granted, free of charge, to any person obtaining a
172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * copy of this software and associated documentation files (the "Software"),
182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * to deal in the Software without restriction, including without limitation
192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * and/or sell copies of the Software, and to permit persons to whom the
212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software is furnished to do so, subject to the following conditions:
222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The above copyright notice and this permission notice (including the next
242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * paragraph) shall be included in all copies or substantial portions of the
252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software.
262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * OTHER DEALINGS IN THE SOFTWARE.
342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef _DRM_H_
372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_H_
382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
39cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#if   defined(__linux__)
40500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg
412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#include <linux/types.h>
42500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg#include <asm/ioctl.h>
43500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsbergtypedef unsigned int drm_handle_t;
44500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg
45500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg#else /* One of the BSDs */
462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
47500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg#include <sys/ioccom.h>
48500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg#include <sys/types.h>
4982bf52fbcdf1e71840c2024bb2bc05a8daeaafadRobert Nolandtypedef int8_t   __s8;
5082bf52fbcdf1e71840c2024bb2bc05a8daeaafadRobert Nolandtypedef uint8_t  __u8;
51170674a606f6d7869b5fa4457c07e10dd27f2771Robert Nolandtypedef int16_t  __s16;
52170674a606f6d7869b5fa4457c07e10dd27f2771Robert Nolandtypedef uint16_t __u16;
53170674a606f6d7869b5fa4457c07e10dd27f2771Robert Nolandtypedef int32_t  __s32;
54500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsbergtypedef uint32_t __u32;
55170674a606f6d7869b5fa4457c07e10dd27f2771Robert Nolandtypedef int64_t  __s64;
56500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsbergtypedef uint64_t __u64;
57cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vettertypedef size_t   __kernel_size_t;
58500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsbergtypedef unsigned long drm_handle_t;
59500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg
60500f5b524000ed5930301f4303744cb4c0a19b75Kristian Høgsberg#endif
612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
629433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#if defined(__cplusplus)
639433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzerextern "C" {
649433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#endif
659433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer
662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_NAME	"drm"	  /**< Name in kernel, /dev, and /proc */
672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MIN_ORDER	5	  /**< At least 2^5 bytes = 32 bytes */
682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MAX_ORDER	22	  /**< Up to 2^22 bytes = 4MB */
692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_RAM_PERCENT 10	  /**< How much system ram can we lock? */
702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_LOCK_HELD	0x80000000U /**< Hardware lock is held */
722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_LOCK_CONT	0x40000000U /**< Hardware lock is contended */
732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_LOCK_IS_HELD(lock)	   ((lock) & _DRM_LOCK_HELD)
742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_LOCK_IS_CONT(lock)	   ((lock) & _DRM_LOCK_CONT)
752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef unsigned int drm_context_t;
782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef unsigned int drm_drawable_t;
792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef unsigned int drm_magic_t;
802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Cliprect.
832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \warning: If you change this structure, make sure you change
852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * XF86DRIClipRectRec in the server as well
862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \note KW: Actually it's illegal to change either for
882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * backwards-compatibility reasons.
892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_clip_rect {
912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short x1;
922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short y1;
932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short x2;
942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short y2;
952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Drawable information.
992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_drawable_info {
1012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int num_rects;
1022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_clip_rect *rects;
1032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Texture region,
1072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_tex_region {
1092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned char next;
1102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned char prev;
1112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned char in_use;
1122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned char padding;
1132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int age;
1142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Hardware lock.
1182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
1192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The lock structure is a simple cache-line aligned integer.  To avoid
1202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * processor bus contention on a multiprocessor system, there should not be any
1212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * other data stored in the same cache line.
1222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_hw_lock {
1242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__volatile__ unsigned int lock;		/**< lock variable */
1252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char padding[60];			/**< Pad to cache line */
1262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_VERSION ioctl argument type.
1302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
1312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmGetVersion().
1322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_version {
1342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int version_major;	  /**< Major version */
1352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int version_minor;	  /**< Minor version */
1362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int version_patchlevel;	  /**< Patch level */
137cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	__kernel_size_t name_len;	  /**< Length of name buffer */
1382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char *name;	  /**< Name of driver */
139cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	__kernel_size_t date_len;	  /**< Length of date buffer */
1402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char *date;	  /**< User-space buffer to hold date */
141cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	__kernel_size_t desc_len;	  /**< Length of desc buffer */
1422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char *desc;	  /**< User-space buffer to hold desc */
1432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_GET_UNIQUE ioctl argument type.
1472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
1482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmGetBusid() and drmSetBusId().
1492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_unique {
151cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	__kernel_size_t unique_len;	  /**< Length of unique */
1522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char *unique;	  /**< Unique name for driver instantiation */
1532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_list {
1562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;		  /**< Length of user-space structures */
1572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_version *version;
1582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_block {
1612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int unused;
1622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_CONTROL ioctl argument type.
1662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
1672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmCtlInstHandler() and drmCtlUninstHandler().
1682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_control {
1702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum {
1712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		DRM_ADD_COMMAND,
1722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		DRM_RM_COMMAND,
1732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		DRM_INST_HANDLER,
1742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		DRM_UNINST_HANDLER
1752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} func;
1762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int irq;
1772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Type of memory to map.
1812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_map_type {
1832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_FRAME_BUFFER = 0,	  /**< WC (no caching), no core dump */
1842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_REGISTERS = 1,	  /**< no caching, no core dump */
1852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_SHM = 2,		  /**< shared, cached */
1862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_AGP = 3,		  /**< AGP/GART */
1872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
188cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	_DRM_CONSISTENT = 5	  /**< Consistent memory for PCI DMA */
1892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
1922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Memory mapping flags.
1932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_map_flags {
1952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_RESTRICTED = 0x01,	     /**< Cannot be mapped to user-virtual */
1962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_READ_ONLY = 0x02,
1972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_LOCKED = 0x04,	     /**< shared, cached, locked */
1982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_KERNEL = 0x08,	     /**< kernel requires access */
1992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
2002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
2012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
2022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DRIVER = 0x80	     /**< Managed by driver */
2032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_ctx_priv_map {
2062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int ctx_id;	 /**< Context requesting private mapping */
2072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	void *handle;		 /**< Handle of map */
2082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
2122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * argument type.
2132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
2142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAddMap().
2152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
2162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_map {
2172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
2182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long size;	 /**< Requested physical size (bytes) */
2192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_map_type type;	 /**< Type of memory to map */
2202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_map_flags flags;	 /**< Flags */
2212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
2222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				 /**< Kernel-space: kernel-virtual address */
2232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int mtrr;		 /**< MTRR slot used */
2242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/*   Private data */
2252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_GET_CLIENT ioctl argument type.
2292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
2302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_client {
2312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;		/**< Which client desired? */
2322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int auth;		/**< Is client authenticated? */
2332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long pid;	/**< Process ID */
2342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long uid;	/**< User ID */
2352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long magic;	/**< Magic */
2362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long iocs;	/**< Ioctl count */
2372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_stat_type {
2402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_LOCK,
2412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_OPENS,
2422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_CLOSES,
2432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_IOCTLS,
2442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_LOCKS,
2452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_UNLOCKS,
2462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_VALUE,	/**< Generic value */
2472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_BYTE,		/**< Generic byte counter (1024bytes/K) */
2482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_COUNT,	/**< Generic non-byte counter (1000/k) */
2492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_IRQ,		/**< IRQ */
2512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_PRIMARY,	/**< Primary DMA bytes */
2522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_SECONDARY,	/**< Secondary DMA bytes */
2532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_DMA,		/**< DMA */
2542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_SPECIAL,	/**< Special DMA (e.g., priority or polled) */
2552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_STAT_MISSED	/**< Missed DMA opportunity */
2562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	    /* Add to the *END* of the list */
2572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_GET_STATS ioctl argument type.
2612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
2622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_stats {
2632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long count;
2642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct {
2652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		unsigned long value;
2662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		enum drm_stat_type type;
2672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} data[15];
2682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Hardware locking flags.
2722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
2732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_lock_flags {
2742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_LOCK_READY = 0x01,	     /**< Wait until hardware is ready for DMA */
2752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
2762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_LOCK_FLUSH = 0x04,	     /**< Flush this context's DMA queue first */
2772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
2782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* These *HALT* flags aren't supported yet
2792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	   -- they will be used to support the
2802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	   full-screen DGA-like mode. */
2812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
2822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
2832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
2872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
2882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmGetLock() and drmUnlock().
2892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
2902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_lock {
2912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int context;
2922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_lock_flags flags;
2932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
2962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DMA flags
2972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
2982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \warning
2992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * These values \e must match xf86drm.h.
3002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drm_dma.
3022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_dma_flags {
3042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Flags for DMA buffer dispatch */
3052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_BLOCK = 0x01,	      /**<
3062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * Block until buffer dispatched.
3072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       *
3082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * \note The buffer may not yet have
3092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * been processed by the hardware --
3102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * getting a hardware lock with the
3112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * hardware quiescent will ensure
3122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * that the buffer has been
3132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       * processed.
3142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				       */
3152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
3162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
3172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Flags for DMA buffer request */
3192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_WAIT = 0x10,	      /**< Wait for free buffers */
3202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
3212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
3222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
3262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAddBufs().
3282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_buf_desc {
3302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;		 /**< Number of buffers of this size */
3312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int size;		 /**< Size in bytes */
3322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int low_mark;		 /**< Low water mark */
3332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int high_mark;		 /**< High water mark */
3342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum {
3352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */
3362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */
3372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		_DRM_SG_BUFFER = 0x04,	/**< Scatter/gather memory buffer */
3382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		_DRM_FB_BUFFER = 0x08,	/**< Buffer is in frame buffer */
3392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
3402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} flags;
3412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long agp_start; /**<
3422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				  * Start address of where the AGP buffers are
3432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				  * in the AGP aperture
3442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				  */
3452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_INFO_BUFS ioctl argument type.
3492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_buf_info {
3512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;		/**< Entries in list */
3522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_buf_desc *list;
3532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_FREE_BUFS ioctl argument type.
3572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_buf_free {
3592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;
3602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *list;
3612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Buffer information
3652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drm_buf_map.
3672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_buf_pub {
3692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;		       /**< Index into the master buffer list */
3702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int total;		       /**< Buffer size */
3712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int used;		       /**< Amount of buffer in use (for DMA) */
3722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	void *address;	       /**< Address of buffer */
3732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_MAP_BUFS ioctl argument type.
3772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_buf_map {
3792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;		/**< Length of the buffer list */
38023287f05cf2443ddf9e028e29beb5bd30979c6cfEric Anholt#ifdef __cplusplus
38123287f05cf2443ddf9e028e29beb5bd30979c6cfEric Anholt	void *virt;
38223287f05cf2443ddf9e028e29beb5bd30979c6cfEric Anholt#else
3832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	void *virtual;		/**< Mmap'd area in user-virtual */
38423287f05cf2443ddf9e028e29beb5bd30979c6cfEric Anholt#endif
3852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_buf_pub *list;	/**< Buffer information */
3862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
3892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_DMA ioctl argument type.
3902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Indices here refer to the offset into the buffer list in drm_buf_get.
3922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmDMA().
3942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_dma {
3962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int context;			  /**< Context handle */
3972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int send_count;			  /**< Number of buffers to send */
3982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *send_indices;	  /**< List of handles to buffers */
3992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *send_sizes;		  /**< Lengths of data to send */
4002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_dma_flags flags;	  /**< Flags */
4012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int request_count;		  /**< Number of buffers requested */
4022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int request_size;		  /**< Desired size for buffers */
4032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *request_indices;	  /**< Buffer information */
4042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *request_sizes;
4052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int granted_count;		  /**< Number of buffers granted */
4062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_ctx_flags {
4092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_CONTEXT_PRESERVED = 0x01,
4102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_CONTEXT_2DONLY = 0x02
4112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_ADD_CTX ioctl argument type.
4152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
4162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmCreateContext() and drmDestroyContext().
4172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_ctx {
4192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_context_t handle;
4202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_ctx_flags flags;
4212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_RES_CTX ioctl argument type.
4252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_ctx_res {
4272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;
4282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_ctx *contexts;
4292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
4332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_draw {
4352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_drawable_t handle;
4362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
4402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum {
4420f4452bb51306024fbf4cbf77d8baab20cefba67Daniel Kurtz	DRM_DRAWABLE_CLIPRECTS
4432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_drawable_info_type_t;
4442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_update_draw {
4462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_drawable_t handle;
4472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int type;
4482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int num;
4492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long long data;
4502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
4542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_auth {
4562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_magic_t magic;
4572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
4602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_IRQ_BUSID ioctl argument type.
4612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
4622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmGetInterruptFromBusID().
4632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_irq_busid {
4652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int irq;	/**< IRQ number */
4662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int busnum;	/**< bus number */
4672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int devnum;	/**< device number */
4682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int funcnum;	/**< function number */
4692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergenum drm_vblank_seq_type {
4722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
4732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
474cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	/* bits 1-6 are reserved for high crtcs */
475cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter	_DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
4762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_EVENT = 0x4000000,   /**< Send event instead of blocking */
4772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
4782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
4792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
4802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking, unsupported */
4812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
482cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1
4832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
4852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \
4862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg				_DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS)
4872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_wait_vblank_request {
4892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_vblank_seq_type type;
4902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int sequence;
4912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long signal;
4922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_wait_vblank_reply {
4952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum drm_vblank_seq_type type;
4962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int sequence;
4972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	long tval_sec;
4982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	long tval_usec;
4992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
5032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmWaitVBlank().
5052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergunion drm_wait_vblank {
5072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_wait_vblank_request request;
5082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_wait_vblank_reply reply;
5092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_PRE_MODESET 1
5122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_POST_MODESET 2
5132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_MODESET_CTL ioctl argument type
5162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmModesetCtl().
5182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_modeset_ctl {
5202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc;
5212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 cmd;
5222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_AGP_ENABLE ioctl argument type.
5262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAgpEnable().
5282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_agp_mode {
5302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long mode;	/**< AGP mode */
5312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
5352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAgpAlloc() and drmAgpFree().
5372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_agp_buffer {
5392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long size;	/**< In bytes -- will round to page boundary */
5402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long handle;	/**< Used for binding / unbinding */
5412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long type;	/**< Type of memory to allocate */
5422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long physical;	/**< Physical used by i810 */
5432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
5472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAgpBind() and drmAgpUnbind().
5492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_agp_binding {
5512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long handle;	/**< From drm_agp_buffer */
5522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long offset;	/**< In bytes -- will round to page boundary */
5532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_AGP_INFO ioctl argument type.
5572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
5582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
5592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
5602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * drmAgpVendorId() and drmAgpDeviceId().
5612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_agp_info {
5632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int agp_version_major;
5642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int agp_version_minor;
5652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long mode;
5662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long aperture_base;	/* physical address */
5672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long aperture_size;	/* bytes */
5682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long memory_allowed;	/* bytes */
5692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long memory_used;
5702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* PCI information */
5722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short id_vendor;
5732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short id_device;
5742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_SG_ALLOC ioctl argument type.
5782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_scatter_gather {
5802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long size;	/**< In bytes -- will round to page boundary */
5812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long handle;	/**< Used for mapping / unmapping */
5822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
5852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DRM_IOCTL_SET_VERSION ioctl argument type.
5862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
5872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_set_version {
5882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int drm_di_major;
5892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int drm_di_minor;
5902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int drm_dd_major;
5912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int drm_dd_minor;
5922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
5932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
5942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/** DRM_IOCTL_GEM_CLOSE ioctl argument type */
5952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_gem_close {
5962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Handle of the object to be closed. */
5972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
5982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 pad;
5992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
6002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/** DRM_IOCTL_GEM_FLINK ioctl argument type */
6022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_gem_flink {
6032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Handle for the object being named */
6042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
6052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Returned global name */
6072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 name;
6082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
6092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/** DRM_IOCTL_GEM_OPEN ioctl argument type */
6112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_gem_open {
6122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Name of object being opened */
6132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 name;
6142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Returned handle for the object */
6162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
6172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/** Returned size of the object */
6192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 size;
6202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
6212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
622cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_DUMB_BUFFER		0x1
623cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_VBLANK_HIGH_CRTC	0x2
624cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_DUMB_PREFERRED_DEPTH	0x3
625cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_DUMB_PREFER_SHADOW	0x4
626cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_PRIME			0x5
627cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define  DRM_PRIME_CAP_IMPORT		0x1
628cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define  DRM_PRIME_CAP_EXPORT		0x2
629cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_TIMESTAMP_MONOTONIC	0x6
630cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_ASYNC_PAGE_FLIP		0x7
631cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter/*
632cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * The CURSOR_WIDTH and CURSOR_HEIGHT capabilities return a valid widthxheight
633cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * combination for the hardware cursor. The intention is that a hardware
634cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * agnostic userspace can query a cursor plane size to use.
635cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter *
636cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * Note that the cross-driver contract is to merely return a valid size;
637cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * drivers are free to attach another meaning on top, eg. i915 returns the
638cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * maximum plane size.
639cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter */
640cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_CURSOR_WIDTH		0x8
641cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_CURSOR_HEIGHT		0x9
642cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CAP_ADDFB2_MODIFIERS	0x10
6439433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#define DRM_CAP_PAGE_FLIP_TARGET	0x11
644cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter
6455c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs/** DRM_IOCTL_GET_CAP ioctl argument type */
6465c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggsstruct drm_get_cap {
6475c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs	__u64 capability;
6485c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs	__u64 value;
6495c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs};
6505c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs
6512dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau/**
6522dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau * DRM_CLIENT_CAP_STEREO_3D
6532dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau *
6542dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau * if set to 1, the DRM core will expose the stereo 3D capabilities of the
6552dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau * monitor by advertising the supported 3D layouts in the flags of struct
6562dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau * drm_mode_modeinfo.
6572dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau */
6582dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau#define DRM_CLIENT_CAP_STEREO_3D	1
6592dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau
6608fc62ca8ac010659023bb63c4759eb683de4f9afMatt Roper/**
6618fc62ca8ac010659023bb63c4759eb683de4f9afMatt Roper * DRM_CLIENT_CAP_UNIVERSAL_PLANES
6628fc62ca8ac010659023bb63c4759eb683de4f9afMatt Roper *
663cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * If set to 1, the DRM core will expose all planes (overlay, primary, and
664cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * cursor) to userspace.
6658fc62ca8ac010659023bb63c4759eb683de4f9afMatt Roper */
666cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CLIENT_CAP_UNIVERSAL_PLANES  2
6678fc62ca8ac010659023bb63c4759eb683de4f9afMatt Roper
668ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä/**
669ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä * DRM_CLIENT_CAP_ATOMIC
670ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä *
671cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * If set to 1, the DRM core will expose atomic properties to userspace
672ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä */
673cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_CLIENT_CAP_ATOMIC	3
674ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä
6752dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
6762dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiaustruct drm_set_client_cap {
6772dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau	__u64 capability;
6782dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau	__u64 value;
6792dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau};
6802dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau
681cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_RDWR O_RDWR
6829b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark#define DRM_CLOEXEC O_CLOEXEC
6839b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clarkstruct drm_prime_handle {
6849b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark	__u32 handle;
6859b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark
6869b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark	/** Flags.. only applicable for handle->fd */
6879b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark	__u32 flags;
6889b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark
6899b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark	/** Returned dmabuf file descriptor */
6909b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark	__s32 fd;
6919b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark};
6929b893e4a429d58bf0954ffc09b18890fcfe92941Rob Clark
6939433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#if defined(__cplusplus)
6949433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer}
6959433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#endif
6969433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer
6972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#include "drm_mode.h"
6982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
6999433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#if defined(__cplusplus)
7009433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzerextern "C" {
7019433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#endif
7029433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer
7032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_BASE			'd'
7042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IO(nr)			_IO(DRM_IOCTL_BASE,nr)
7052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOR(nr,type)		_IOR(DRM_IOCTL_BASE,nr,type)
7062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOW(nr,type)		_IOW(DRM_IOCTL_BASE,nr,type)
7072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOWR(nr,type)		_IOWR(DRM_IOCTL_BASE,nr,type)
7082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_VERSION		DRM_IOWR(0x00, struct drm_version)
7102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_UNIQUE		DRM_IOWR(0x01, struct drm_unique)
7112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_MAGIC		DRM_IOR( 0x02, struct drm_auth)
7122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_IRQ_BUSID		DRM_IOWR(0x03, struct drm_irq_busid)
7132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, struct drm_map)
7142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, struct drm_client)
7152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, struct drm_stats)
7162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SET_VERSION		DRM_IOWR(0x07, struct drm_set_version)
7172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODESET_CTL           DRM_IOW(0x08, struct drm_modeset_ctl)
7182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GEM_CLOSE		DRM_IOW (0x09, struct drm_gem_close)
7192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GEM_FLINK		DRM_IOWR(0x0a, struct drm_gem_flink)
7202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GEM_OPEN		DRM_IOWR(0x0b, struct drm_gem_open)
7215c6c6913d1260024e5d156db7973c9e46fe1ff03Ben Skeggs#define DRM_IOCTL_GET_CAP		DRM_IOWR(0x0c, struct drm_get_cap)
7222dd7054781876a0d5423c7755a7690815f3c2f5fDamien Lespiau#define DRM_IOCTL_SET_CLIENT_CAP	DRM_IOW( 0x0d, struct drm_set_client_cap)
7232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SET_UNIQUE		DRM_IOW( 0x10, struct drm_unique)
7252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AUTH_MAGIC		DRM_IOW( 0x11, struct drm_auth)
7262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_BLOCK			DRM_IOWR(0x12, struct drm_block)
7272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_UNBLOCK		DRM_IOWR(0x13, struct drm_block)
7282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_CONTROL		DRM_IOW( 0x14, struct drm_control)
7292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_ADD_MAP		DRM_IOWR(0x15, struct drm_map)
7302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_ADD_BUFS		DRM_IOWR(0x16, struct drm_buf_desc)
7312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MARK_BUFS		DRM_IOW( 0x17, struct drm_buf_desc)
7322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_INFO_BUFS		DRM_IOWR(0x18, struct drm_buf_info)
7332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MAP_BUFS		DRM_IOWR(0x19, struct drm_buf_map)
7342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_FREE_BUFS		DRM_IOW( 0x1a, struct drm_buf_free)
7352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_RM_MAP		DRM_IOW( 0x1b, struct drm_map)
7372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SET_SAREA_CTX		DRM_IOW( 0x1c, struct drm_ctx_priv_map)
7392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_SAREA_CTX 	DRM_IOWR(0x1d, struct drm_ctx_priv_map)
7402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SET_MASTER            DRM_IO(0x1e)
7422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_DROP_MASTER           DRM_IO(0x1f)
7432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_ADD_CTX		DRM_IOWR(0x20, struct drm_ctx)
7452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_RM_CTX		DRM_IOWR(0x21, struct drm_ctx)
7462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MOD_CTX		DRM_IOW( 0x22, struct drm_ctx)
7472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_GET_CTX		DRM_IOWR(0x23, struct drm_ctx)
7482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SWITCH_CTX		DRM_IOW( 0x24, struct drm_ctx)
7492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_NEW_CTX		DRM_IOW( 0x25, struct drm_ctx)
7502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_RES_CTX		DRM_IOWR(0x26, struct drm_ctx_res)
7512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_ADD_DRAW		DRM_IOWR(0x27, struct drm_draw)
7522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_RM_DRAW		DRM_IOWR(0x28, struct drm_draw)
7532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_DMA			DRM_IOWR(0x29, struct drm_dma)
7542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_LOCK			DRM_IOW( 0x2a, struct drm_lock)
7552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_UNLOCK		DRM_IOW( 0x2b, struct drm_lock)
7562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_FINISH		DRM_IOW( 0x2c, struct drm_lock)
7572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
758cc0a14575d9fd0aafe73cb4aa445eaf024436114Dave Airlie#define DRM_IOCTL_PRIME_HANDLE_TO_FD    DRM_IOWR(0x2d, struct drm_prime_handle)
759cc0a14575d9fd0aafe73cb4aa445eaf024436114Dave Airlie#define DRM_IOCTL_PRIME_FD_TO_HANDLE    DRM_IOWR(0x2e, struct drm_prime_handle)
760cc0a14575d9fd0aafe73cb4aa445eaf024436114Dave Airlie
7612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_ACQUIRE		DRM_IO(  0x30)
7622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_RELEASE		DRM_IO(  0x31)
7632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_ENABLE		DRM_IOW( 0x32, struct drm_agp_mode)
7642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_INFO		DRM_IOR( 0x33, struct drm_agp_info)
7652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_ALLOC		DRM_IOWR(0x34, struct drm_agp_buffer)
7662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_FREE		DRM_IOW( 0x35, struct drm_agp_buffer)
7672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_BIND		DRM_IOW( 0x36, struct drm_agp_binding)
7682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_AGP_UNBIND		DRM_IOW( 0x37, struct drm_agp_binding)
7692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SG_ALLOC		DRM_IOWR(0x38, struct drm_scatter_gather)
7712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SG_FREE		DRM_IOW( 0x39, struct drm_scatter_gather)
7722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_WAIT_VBLANK		DRM_IOWR(0x3a, union drm_wait_vblank)
7742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_UPDATE_DRAW		DRM_IOW(0x3f, struct drm_update_draw)
7762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETRESOURCES	DRM_IOWR(0xA0, struct drm_mode_card_res)
7782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETCRTC		DRM_IOWR(0xA1, struct drm_mode_crtc)
7792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_SETCRTC		DRM_IOWR(0xA2, struct drm_mode_crtc)
7802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_CURSOR		DRM_IOWR(0xA3, struct drm_mode_cursor)
7812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETGAMMA		DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
7822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_SETGAMMA		DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
7832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETENCODER	DRM_IOWR(0xA6, struct drm_mode_get_encoder)
7842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETCONNECTOR	DRM_IOWR(0xA7, struct drm_mode_get_connector)
785cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_IOCTL_MODE_ATTACHMODE	DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */
786cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter#define DRM_IOCTL_MODE_DETACHMODE	DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */
7872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
7882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETPROPERTY	DRM_IOWR(0xAA, struct drm_mode_get_property)
7892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_SETPROPERTY	DRM_IOWR(0xAB, struct drm_mode_connector_set_property)
7902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETPROPBLOB	DRM_IOWR(0xAC, struct drm_mode_get_blob)
7912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
7922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
7932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)
794b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg#define DRM_IOCTL_MODE_PAGE_FLIP	DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
795ac5595abc1c28b2c10a1463143e83d17415736f1Jakob Bornecrantz#define DRM_IOCTL_MODE_DIRTYFB		DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
796731cd5526e5c732d51307b26e784f454a724a699Jesse Barnes
7974473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb)
7984473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie#define DRM_IOCTL_MODE_MAP_DUMB    DRM_IOWR(0xB3, struct drm_mode_map_dumb)
7994473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie#define DRM_IOCTL_MODE_DESTROY_DUMB    DRM_IOWR(0xB4, struct drm_mode_destroy_dumb)
800ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res)
801ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_IOCTL_MODE_GETPLANE	DRM_IOWR(0xB6, struct drm_mode_get_plane)
802ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_IOCTL_MODE_SETPLANE	DRM_IOWR(0xB7, struct drm_mode_set_plane)
803ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_IOCTL_MODE_ADDFB2		DRM_IOWR(0xB8, struct drm_mode_fb_cmd2)
8048c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES	DRM_IOWR(0xB9, struct drm_mode_obj_get_properties)
8058c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_IOCTL_MODE_OBJ_SETPROPERTY	DRM_IOWR(0xBA, struct drm_mode_obj_set_property)
8062e0ab6237697c9754d92689f77c1792c11be881bDave Airlie#define DRM_IOCTL_MODE_CURSOR2		DRM_IOWR(0xBB, struct drm_mode_cursor2)
807ed44e0b9585c563905447eceed12af9c1c7ca8d4Ville Syrjälä#define DRM_IOCTL_MODE_ATOMIC		DRM_IOWR(0xBC, struct drm_mode_atomic)
80832471b265c6fbce6d519f0420a0ffeb608296502Daniel Stone#define DRM_IOCTL_MODE_CREATEPROPBLOB	DRM_IOWR(0xBD, struct drm_mode_create_blob)
80932471b265c6fbce6d519f0420a0ffeb608296502Daniel Stone#define DRM_IOCTL_MODE_DESTROYPROPBLOB	DRM_IOWR(0xBE, struct drm_mode_destroy_blob)
8104473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
8112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
8122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Device specific ioctls should only be in their respective headers
813cc9a53f076d4e958e595e1daaff2c286ce1b7bb1Daniel Vetter * The device specific ioctl range is from 0x40 to 0x9f.
8142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Generic IOCTLS restart at 0xA0.
8152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
8162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
8172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * drmCommandReadWrite().
8182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
8192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_COMMAND_BASE                0x40
8202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_COMMAND_END			0xA0
8212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/**
8232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Header for events written back to userspace on the drm fd.  The
8242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * type defines the type of event, the length specifies the total
8252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * length of the event (including the header), and user_data is
8262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * typically a 64 bit value passed with the ioctl that triggered the
8272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * event.  A read on the drm fd will always only return complete
8282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * events, that is, if for example the read buffer is 100 bytes, and
8292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * there are two 64 byte events pending, only one will be returned.
8302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
8312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and
8322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * up are chipset specific.
8332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
8342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_event {
8352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 type;
8362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 length;
8372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
8382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_EVENT_VBLANK 0x01
840b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg#define DRM_EVENT_FLIP_COMPLETE 0x02
8412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_event_vblank {
8432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_event base;
8442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 user_data;
8452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 tv_sec;
8462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 tv_usec;
8472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 sequence;
8482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 reserved;
8492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
8502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* typedef area */
8522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_clip_rect drm_clip_rect_t;
8532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_drawable_info drm_drawable_info_t;
8542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_tex_region drm_tex_region_t;
8552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_hw_lock drm_hw_lock_t;
8562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_version drm_version_t;
8572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_unique drm_unique_t;
8582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_list drm_list_t;
8592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_block drm_block_t;
8602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_control drm_control_t;
8612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_map_type drm_map_type_t;
8622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_map_flags drm_map_flags_t;
8632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
8642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_map drm_map_t;
8652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_client drm_client_t;
8662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_stat_type drm_stat_type_t;
8672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_stats drm_stats_t;
8682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_lock_flags drm_lock_flags_t;
8692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_lock drm_lock_t;
8702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_dma_flags drm_dma_flags_t;
8712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_buf_desc drm_buf_desc_t;
8722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_buf_info drm_buf_info_t;
8732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_buf_free drm_buf_free_t;
8742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_buf_pub drm_buf_pub_t;
8752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_buf_map drm_buf_map_t;
8762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_dma drm_dma_t;
8772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef union drm_wait_vblank drm_wait_vblank_t;
8782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_agp_mode drm_agp_mode_t;
8792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_ctx_flags drm_ctx_flags_t;
8802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_ctx drm_ctx_t;
8812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_ctx_res drm_ctx_res_t;
8822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_draw drm_draw_t;
8832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_update_draw drm_update_draw_t;
8842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_auth drm_auth_t;
8852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_irq_busid drm_irq_busid_t;
8862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
8872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_agp_buffer drm_agp_buffer_t;
8892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_agp_binding drm_agp_binding_t;
8902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_agp_info drm_agp_info_t;
8912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_scatter_gather drm_scatter_gather_t;
8922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_set_version drm_set_version_t;
8932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
8949433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#if defined(__cplusplus)
8959433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer}
8969433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer#endif
8979433b702fc164c3fe9e17d646eeaaa5de17a52deMichel Dänzer
8982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif
899