Warning, file /include/xf86drm.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #ifndef _XF86DRM_H_
0035 #define _XF86DRM_H_
0036
0037 #include <stdarg.h>
0038 #include <sys/types.h>
0039 #include <stdint.h>
0040 #include <drm.h>
0041
0042 #if defined(__cplusplus)
0043 extern "C" {
0044 #endif
0045
0046 #ifndef DRM_MAX_MINOR
0047 #define DRM_MAX_MINOR 64
0048 #endif
0049
0050 #if defined(__linux__)
0051
0052 #define DRM_IOCTL_NR(n) _IOC_NR(n)
0053 #define DRM_IOC_VOID _IOC_NONE
0054 #define DRM_IOC_READ _IOC_READ
0055 #define DRM_IOC_WRITE _IOC_WRITE
0056 #define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE
0057 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
0058
0059 #else
0060
0061 #include <sys/ioccom.h>
0062 #define DRM_IOCTL_NR(n) ((n) & 0xff)
0063 #define DRM_IOC_VOID IOC_VOID
0064 #define DRM_IOC_READ IOC_OUT
0065 #define DRM_IOC_WRITE IOC_IN
0066 #define DRM_IOC_READWRITE IOC_INOUT
0067 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
0068
0069 #endif
0070
0071
0072 #define DRM_DEV_UID 0
0073 #define DRM_DEV_GID 0
0074
0075 #define DRM_DEV_DIRMODE \
0076 (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
0077 #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
0078
0079 #ifdef __OpenBSD__
0080 #define DRM_DIR_NAME "/dev"
0081 #define DRM_PRIMARY_MINOR_NAME "drm"
0082 #define DRM_CONTROL_MINOR_NAME "drmC"
0083 #define DRM_RENDER_MINOR_NAME "drmR"
0084 #else
0085 #define DRM_DIR_NAME "/dev/dri"
0086 #define DRM_PRIMARY_MINOR_NAME "card"
0087 #define DRM_CONTROL_MINOR_NAME "controlD"
0088 #define DRM_RENDER_MINOR_NAME "renderD"
0089 #define DRM_PROC_NAME "/proc/dri/"
0090 #endif
0091
0092 #define DRM_DEV_NAME "%s/" DRM_PRIMARY_MINOR_NAME "%d"
0093 #define DRM_CONTROL_DEV_NAME "%s/" DRM_CONTROL_MINOR_NAME "%d"
0094 #define DRM_RENDER_DEV_NAME "%s/" DRM_RENDER_MINOR_NAME "%d"
0095
0096 #define DRM_NODE_NAME_MAX \
0097 (sizeof(DRM_DIR_NAME) + 1 \
0098 + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \
0099 sizeof(DRM_CONTROL_MINOR_NAME), \
0100 sizeof(DRM_RENDER_MINOR_NAME)) \
0101 + sizeof("1048575") \
0102 + 1)
0103
0104 #define DRM_ERR_NO_DEVICE (-1001)
0105 #define DRM_ERR_NO_ACCESS (-1002)
0106 #define DRM_ERR_NOT_ROOT (-1003)
0107 #define DRM_ERR_INVALID (-1004)
0108 #define DRM_ERR_NO_FD (-1005)
0109
0110 #define DRM_AGP_NO_HANDLE 0
0111
0112 typedef unsigned int drmSize, *drmSizePtr;
0113 typedef void *drmAddress, **drmAddressPtr;
0114
0115 #if (__GNUC__ >= 3)
0116 #define DRM_PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a)))
0117 #else
0118 #define DRM_PRINTFLIKE(f, a)
0119 #endif
0120
0121 typedef struct _drmServerInfo {
0122 int (*debug_print)(const char *format, va_list ap) DRM_PRINTFLIKE(1,0);
0123 int (*load_module)(const char *name);
0124 void (*get_perms)(gid_t *, mode_t *);
0125 } drmServerInfo, *drmServerInfoPtr;
0126
0127 typedef struct drmHashEntry {
0128 int fd;
0129 void (*f)(int, void *, void *);
0130 void *tagTable;
0131 } drmHashEntry;
0132
0133 extern int drmIoctl(int fd, unsigned long request, void *arg);
0134 extern void *drmGetHashTable(void);
0135 extern drmHashEntry *drmGetEntry(int fd);
0136
0137
0138
0139
0140
0141
0142 typedef struct _drmVersion {
0143 int version_major;
0144 int version_minor;
0145 int version_patchlevel;
0146 int name_len;
0147 char *name;
0148 int date_len;
0149 char *date;
0150 int desc_len;
0151 char *desc;
0152 } drmVersion, *drmVersionPtr;
0153
0154 typedef struct _drmStats {
0155 unsigned long count;
0156 struct {
0157 unsigned long value;
0158 const char *long_format;
0159 const char *long_name;
0160 const char *rate_format;
0161 const char *rate_name;
0162 int isvalue;
0163 const char *mult_names;
0164 int mult;
0165 int verbose;
0166 } data[15];
0167 } drmStatsT;
0168
0169
0170
0171
0172
0173
0174
0175 typedef enum {
0176 DRM_FRAME_BUFFER = 0,
0177 DRM_REGISTERS = 1,
0178 DRM_SHM = 2,
0179 DRM_AGP = 3,
0180 DRM_SCATTER_GATHER = 4,
0181 DRM_CONSISTENT = 5
0182 } drmMapType;
0183
0184 typedef enum {
0185 DRM_RESTRICTED = 0x0001,
0186 DRM_READ_ONLY = 0x0002,
0187 DRM_LOCKED = 0x0004,
0188 DRM_KERNEL = 0x0008,
0189 DRM_WRITE_COMBINING = 0x0010,
0190 DRM_CONTAINS_LOCK = 0x0020,
0191 DRM_REMOVABLE = 0x0040
0192 } drmMapFlags;
0193
0194
0195
0196
0197 typedef enum {
0198
0199
0200 DRM_DMA_BLOCK = 0x01,
0201
0202
0203
0204
0205
0206
0207
0208
0209 DRM_DMA_WHILE_LOCKED = 0x02,
0210 DRM_DMA_PRIORITY = 0x04,
0211
0212
0213
0214
0215 DRM_DMA_WAIT = 0x10,
0216 DRM_DMA_SMALLER_OK = 0x20,
0217 DRM_DMA_LARGER_OK = 0x40
0218
0219 } drmDMAFlags;
0220
0221 typedef enum {
0222 DRM_PAGE_ALIGN = 0x01,
0223 DRM_AGP_BUFFER = 0x02,
0224 DRM_SG_BUFFER = 0x04,
0225 DRM_FB_BUFFER = 0x08,
0226 DRM_PCI_BUFFER_RO = 0x10
0227 } drmBufDescFlags;
0228
0229 typedef enum {
0230 DRM_LOCK_READY = 0x01,
0231 DRM_LOCK_QUIESCENT = 0x02,
0232 DRM_LOCK_FLUSH = 0x04,
0233 DRM_LOCK_FLUSH_ALL = 0x08,
0234
0235
0236
0237 DRM_HALT_ALL_QUEUES = 0x10,
0238 DRM_HALT_CUR_QUEUES = 0x20
0239 } drmLockFlags;
0240
0241 typedef enum {
0242 DRM_CONTEXT_PRESERVED = 0x01,
0243
0244 DRM_CONTEXT_2DONLY = 0x02
0245 } drm_context_tFlags, *drm_context_tFlagsPtr;
0246
0247 typedef struct _drmBufDesc {
0248 int count;
0249 int size;
0250 int low_mark;
0251 int high_mark;
0252 } drmBufDesc, *drmBufDescPtr;
0253
0254 typedef struct _drmBufInfo {
0255 int count;
0256 drmBufDescPtr list;
0257 } drmBufInfo, *drmBufInfoPtr;
0258
0259 typedef struct _drmBuf {
0260 int idx;
0261 int total;
0262 int used;
0263 drmAddress address;
0264 } drmBuf, *drmBufPtr;
0265
0266
0267
0268
0269
0270
0271
0272 typedef struct _drmBufMap {
0273 int count;
0274 drmBufPtr list;
0275 } drmBufMap, *drmBufMapPtr;
0276
0277 typedef struct _drmLock {
0278 volatile unsigned int lock;
0279 char padding[60];
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291 } drmLock, *drmLockPtr;
0292
0293
0294
0295
0296
0297 typedef struct _drmDMAReq {
0298 drm_context_t context;
0299 int send_count;
0300 int *send_list;
0301 int *send_sizes;
0302 drmDMAFlags flags;
0303 int request_count;
0304 int request_size;
0305 int *request_list;
0306 int *request_sizes;
0307 int granted_count;
0308 } drmDMAReq, *drmDMAReqPtr;
0309
0310 typedef struct _drmRegion {
0311 drm_handle_t handle;
0312 unsigned int offset;
0313 drmSize size;
0314 drmAddress map;
0315 } drmRegion, *drmRegionPtr;
0316
0317 typedef struct _drmTextureRegion {
0318 unsigned char next;
0319 unsigned char prev;
0320 unsigned char in_use;
0321 unsigned char padding;
0322 unsigned int age;
0323 } drmTextureRegion, *drmTextureRegionPtr;
0324
0325
0326 typedef enum {
0327 DRM_VBLANK_ABSOLUTE = 0x0,
0328 DRM_VBLANK_RELATIVE = 0x1,
0329
0330 DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
0331 DRM_VBLANK_EVENT = 0x4000000,
0332 DRM_VBLANK_FLIP = 0x8000000,
0333 DRM_VBLANK_NEXTONMISS = 0x10000000,
0334 DRM_VBLANK_SECONDARY = 0x20000000,
0335 DRM_VBLANK_SIGNAL = 0x40000000
0336 } drmVBlankSeqType;
0337 #define DRM_VBLANK_HIGH_CRTC_SHIFT 1
0338
0339 typedef struct _drmVBlankReq {
0340 drmVBlankSeqType type;
0341 unsigned int sequence;
0342 unsigned long signal;
0343 } drmVBlankReq, *drmVBlankReqPtr;
0344
0345 typedef struct _drmVBlankReply {
0346 drmVBlankSeqType type;
0347 unsigned int sequence;
0348 long tval_sec;
0349 long tval_usec;
0350 } drmVBlankReply, *drmVBlankReplyPtr;
0351
0352 typedef union _drmVBlank {
0353 drmVBlankReq request;
0354 drmVBlankReply reply;
0355 } drmVBlank, *drmVBlankPtr;
0356
0357 typedef struct _drmSetVersion {
0358 int drm_di_major;
0359 int drm_di_minor;
0360 int drm_dd_major;
0361 int drm_dd_minor;
0362 } drmSetVersion, *drmSetVersionPtr;
0363
0364 #define __drm_dummy_lock(lock) (*(__volatile__ unsigned int *)lock)
0365
0366 #define DRM_LOCK_HELD 0x80000000U
0367 #define DRM_LOCK_CONT 0x40000000U
0368
0369 #if defined(__GNUC__) && (__GNUC__ >= 2)
0370 # if defined(__i386) || defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)
0371
0372 #define DRM_CAS(lock,old,new,__ret) \
0373 do { \
0374 int __dummy; \
0375 __asm__ __volatile__( \
0376 "lock ; cmpxchg %4,%1\n\t" \
0377 "setnz %0" \
0378 : "=d" (__ret), \
0379 "=m" (__drm_dummy_lock(lock)), \
0380 "=a" (__dummy) \
0381 : "2" (old), \
0382 "r" (new)); \
0383 } while (0)
0384
0385 #elif defined(__alpha__)
0386
0387 #define DRM_CAS(lock, old, new, ret) \
0388 do { \
0389 int tmp, old32; \
0390 __asm__ __volatile__( \
0391 " addl $31, %5, %3\n" \
0392 "1: ldl_l %0, %2\n" \
0393 " cmpeq %0, %3, %1\n" \
0394 " beq %1, 2f\n" \
0395 " mov %4, %0\n" \
0396 " stl_c %0, %2\n" \
0397 " beq %0, 3f\n" \
0398 " mb\n" \
0399 "2: cmpeq %1, 0, %1\n" \
0400 ".subsection 2\n" \
0401 "3: br 1b\n" \
0402 ".previous" \
0403 : "=&r"(tmp), "=&r"(ret), \
0404 "=m"(__drm_dummy_lock(lock)), \
0405 "=&r"(old32) \
0406 : "r"(new), "r"(old) \
0407 : "memory"); \
0408 } while (0)
0409
0410 #elif defined(__sparc__)
0411
0412 #define DRM_CAS(lock,old,new,__ret) \
0413 do { register unsigned int __old __asm("o0"); \
0414 register unsigned int __new __asm("o1"); \
0415 register volatile unsigned int *__lock __asm("o2"); \
0416 __old = old; \
0417 __new = new; \
0418 __lock = (volatile unsigned int *)lock; \
0419 __asm__ __volatile__( \
0420 \
0421 ".word 0xd3e29008\n\t" \
0422 \
0423 ".word 0x8143e00a" \
0424 : "=&r" (__new) \
0425 : "0" (__new), \
0426 "r" (__lock), \
0427 "r" (__old) \
0428 : "memory"); \
0429 __ret = (__new != __old); \
0430 } while(0)
0431
0432 #elif defined(__ia64__)
0433
0434 #ifdef __INTEL_COMPILER
0435
0436 #include <ia64intrin.h>
0437
0438 #define DRM_CAS(lock,old,new,__ret) \
0439 do { \
0440 unsigned long __result, __old = (old) & 0xffffffff; \
0441 __mf(); \
0442 __result = _InterlockedCompareExchange_acq(&__drm_dummy_lock(lock), (new), __old);\
0443 __ret = (__result) != (__old); \
0444
0445
0446 \
0447 } while (0)
0448
0449 #else
0450 #define DRM_CAS(lock,old,new,__ret) \
0451 do { \
0452 unsigned int __result, __old = (old); \
0453 __asm__ __volatile__( \
0454 "mf\n" \
0455 "mov ar.ccv=%2\n" \
0456 ";;\n" \
0457 "cmpxchg4.acq %0=%1,%3,ar.ccv" \
0458 : "=r" (__result), "=m" (__drm_dummy_lock(lock)) \
0459 : "r" ((unsigned long)__old), "r" (new) \
0460 : "memory"); \
0461 __ret = (__result) != (__old); \
0462 } while (0)
0463
0464 #endif
0465
0466 #elif defined(__powerpc__)
0467
0468 #define DRM_CAS(lock,old,new,__ret) \
0469 do { \
0470 __asm__ __volatile__( \
0471 "sync;" \
0472 "0: lwarx %0,0,%1;" \
0473 " xor. %0,%3,%0;" \
0474 " bne 1f;" \
0475 " stwcx. %2,0,%1;" \
0476 " bne- 0b;" \
0477 "1: " \
0478 "sync;" \
0479 : "=&r"(__ret) \
0480 : "r"(lock), "r"(new), "r"(old) \
0481 : "cr0", "memory"); \
0482 } while (0)
0483
0484 # elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
0485 || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
0486 || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \
0487 || defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
0488 || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
0489 || defined(__ARM_ARCH_7EM__)
0490
0491 #undef DRM_DEV_MODE
0492 #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
0493
0494 #define DRM_CAS(lock,old,new,__ret) \
0495 do { \
0496 __asm__ __volatile__ ( \
0497 "1: ldrex %0, [%1]\n" \
0498 " teq %0, %2\n" \
0499 " ite eq\n" \
0500 " strexeq %0, %3, [%1]\n" \
0501 " movne %0, #1\n" \
0502 : "=&r" (__ret) \
0503 : "r" (lock), "r" (old), "r" (new) \
0504 : "cc","memory"); \
0505 } while (0)
0506
0507 #endif
0508 #endif
0509
0510 #ifndef DRM_CAS
0511 #define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0)
0512 #endif
0513
0514 #if defined(__alpha__)
0515 #define DRM_CAS_RESULT(_result) long _result
0516 #elif defined(__powerpc__)
0517 #define DRM_CAS_RESULT(_result) int _result
0518 #else
0519 #define DRM_CAS_RESULT(_result) char _result
0520 #endif
0521
0522 #define DRM_LIGHT_LOCK(fd,lock,context) \
0523 do { \
0524 DRM_CAS_RESULT(__ret); \
0525 DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \
0526 if (__ret) drmGetLock(fd,context,0); \
0527 } while(0)
0528
0529
0530
0531 #define DRM_LIGHT_LOCK_COUNT(fd,lock,context,count) \
0532 do { \
0533 DRM_CAS_RESULT(__ret); \
0534 DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \
0535 if (__ret) drmGetLock(fd,context,0); \
0536 else ++count; \
0537 } while(0)
0538
0539 #define DRM_LOCK(fd,lock,context,flags) \
0540 do { \
0541 if (flags) drmGetLock(fd,context,flags); \
0542 else DRM_LIGHT_LOCK(fd,lock,context); \
0543 } while(0)
0544
0545 #define DRM_UNLOCK(fd,lock,context) \
0546 do { \
0547 DRM_CAS_RESULT(__ret); \
0548 DRM_CAS(lock,DRM_LOCK_HELD|context,context,__ret); \
0549 if (__ret) drmUnlock(fd,context); \
0550 } while(0)
0551
0552
0553 #define DRM_SPINLOCK(spin,val) \
0554 do { \
0555 DRM_CAS_RESULT(__ret); \
0556 do { \
0557 DRM_CAS(spin,0,val,__ret); \
0558 if (__ret) while ((spin)->lock); \
0559 } while (__ret); \
0560 } while(0)
0561
0562 #define DRM_SPINLOCK_TAKE(spin,val) \
0563 do { \
0564 DRM_CAS_RESULT(__ret); \
0565 int cur; \
0566 do { \
0567 cur = (*spin).lock; \
0568 DRM_CAS(spin,cur,val,__ret); \
0569 } while (__ret); \
0570 } while(0)
0571
0572 #define DRM_SPINLOCK_COUNT(spin,val,count,__ret) \
0573 do { \
0574 int __i; \
0575 __ret = 1; \
0576 for (__i = 0; __ret && __i < count; __i++) { \
0577 DRM_CAS(spin,0,val,__ret); \
0578 if (__ret) for (;__i < count && (spin)->lock; __i++); \
0579 } \
0580 } while(0)
0581
0582 #define DRM_SPINUNLOCK(spin,val) \
0583 do { \
0584 DRM_CAS_RESULT(__ret); \
0585 if ((*spin).lock == val) { \
0586 do { \
0587 DRM_CAS(spin,val,0,__ret); \
0588 } while (__ret); \
0589 } \
0590 } while(0)
0591
0592
0593
0594
0595 extern int drmAvailable(void);
0596 extern int drmOpen(const char *name, const char *busid);
0597
0598 #define DRM_NODE_PRIMARY 0
0599 #define DRM_NODE_CONTROL 1
0600 #define DRM_NODE_RENDER 2
0601 #define DRM_NODE_MAX 3
0602
0603 extern int drmOpenWithType(const char *name, const char *busid,
0604 int type);
0605
0606 extern int drmOpenControl(int minor);
0607 extern int drmOpenRender(int minor);
0608 extern int drmClose(int fd);
0609 extern drmVersionPtr drmGetVersion(int fd);
0610 extern drmVersionPtr drmGetLibVersion(int fd);
0611 extern int drmGetCap(int fd, uint64_t capability, uint64_t *value);
0612 extern void drmFreeVersion(drmVersionPtr);
0613 extern int drmGetMagic(int fd, drm_magic_t * magic);
0614 extern char *drmGetBusid(int fd);
0615 extern int drmGetInterruptFromBusID(int fd, int busnum, int devnum,
0616 int funcnum);
0617 extern int drmGetMap(int fd, int idx, drm_handle_t *offset,
0618 drmSize *size, drmMapType *type,
0619 drmMapFlags *flags, drm_handle_t *handle,
0620 int *mtrr);
0621 extern int drmGetClient(int fd, int idx, int *auth, int *pid,
0622 int *uid, unsigned long *magic,
0623 unsigned long *iocs);
0624 extern int drmGetStats(int fd, drmStatsT *stats);
0625 extern int drmSetInterfaceVersion(int fd, drmSetVersion *version);
0626 extern int drmCommandNone(int fd, unsigned long drmCommandIndex);
0627 extern int drmCommandRead(int fd, unsigned long drmCommandIndex,
0628 void *data, unsigned long size);
0629 extern int drmCommandWrite(int fd, unsigned long drmCommandIndex,
0630 void *data, unsigned long size);
0631 extern int drmCommandWriteRead(int fd, unsigned long drmCommandIndex,
0632 void *data, unsigned long size);
0633
0634
0635 extern void drmFreeBusid(const char *busid);
0636 extern int drmSetBusid(int fd, const char *busid);
0637 extern int drmAuthMagic(int fd, drm_magic_t magic);
0638 extern int drmAddMap(int fd,
0639 drm_handle_t offset,
0640 drmSize size,
0641 drmMapType type,
0642 drmMapFlags flags,
0643 drm_handle_t * handle);
0644 extern int drmRmMap(int fd, drm_handle_t handle);
0645 extern int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
0646 drm_handle_t handle);
0647
0648 extern int drmAddBufs(int fd, int count, int size,
0649 drmBufDescFlags flags,
0650 int agp_offset);
0651 extern int drmMarkBufs(int fd, double low, double high);
0652 extern int drmCreateContext(int fd, drm_context_t * handle);
0653 extern int drmSetContextFlags(int fd, drm_context_t context,
0654 drm_context_tFlags flags);
0655 extern int drmGetContextFlags(int fd, drm_context_t context,
0656 drm_context_tFlagsPtr flags);
0657 extern int drmAddContextTag(int fd, drm_context_t context, void *tag);
0658 extern int drmDelContextTag(int fd, drm_context_t context);
0659 extern void *drmGetContextTag(int fd, drm_context_t context);
0660 extern drm_context_t * drmGetReservedContextList(int fd, int *count);
0661 extern void drmFreeReservedContextList(drm_context_t *);
0662 extern int drmSwitchToContext(int fd, drm_context_t context);
0663 extern int drmDestroyContext(int fd, drm_context_t handle);
0664 extern int drmCreateDrawable(int fd, drm_drawable_t * handle);
0665 extern int drmDestroyDrawable(int fd, drm_drawable_t handle);
0666 extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
0667 drm_drawable_info_type_t type,
0668 unsigned int num, void *data);
0669 extern int drmCtlInstHandler(int fd, int irq);
0670 extern int drmCtlUninstHandler(int fd);
0671 extern int drmSetClientCap(int fd, uint64_t capability,
0672 uint64_t value);
0673
0674 extern int drmCrtcGetSequence(int fd, uint32_t crtcId,
0675 uint64_t *sequence, uint64_t *ns);
0676 extern int drmCrtcQueueSequence(int fd, uint32_t crtcId,
0677 uint32_t flags, uint64_t sequence,
0678 uint64_t *sequence_queued,
0679 uint64_t user_data);
0680
0681 extern int drmMap(int fd,
0682 drm_handle_t handle,
0683 drmSize size,
0684 drmAddressPtr address);
0685 extern int drmUnmap(drmAddress address, drmSize size);
0686 extern drmBufInfoPtr drmGetBufInfo(int fd);
0687 extern drmBufMapPtr drmMapBufs(int fd);
0688 extern int drmUnmapBufs(drmBufMapPtr bufs);
0689 extern int drmDMA(int fd, drmDMAReqPtr request);
0690 extern int drmFreeBufs(int fd, int count, int *list);
0691 extern int drmGetLock(int fd,
0692 drm_context_t context,
0693 drmLockFlags flags);
0694 extern int drmUnlock(int fd, drm_context_t context);
0695 extern int drmFinish(int fd, int context, drmLockFlags flags);
0696 extern int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,
0697 drm_handle_t * handle);
0698
0699
0700 extern int drmAgpAcquire(int fd);
0701 extern int drmAgpRelease(int fd);
0702 extern int drmAgpEnable(int fd, unsigned long mode);
0703 extern int drmAgpAlloc(int fd, unsigned long size,
0704 unsigned long type, unsigned long *address,
0705 drm_handle_t *handle);
0706 extern int drmAgpFree(int fd, drm_handle_t handle);
0707 extern int drmAgpBind(int fd, drm_handle_t handle,
0708 unsigned long offset);
0709 extern int drmAgpUnbind(int fd, drm_handle_t handle);
0710
0711
0712 extern int drmAgpVersionMajor(int fd);
0713 extern int drmAgpVersionMinor(int fd);
0714 extern unsigned long drmAgpGetMode(int fd);
0715 extern unsigned long drmAgpBase(int fd);
0716 extern unsigned long drmAgpSize(int fd);
0717 extern unsigned long drmAgpMemoryUsed(int fd);
0718 extern unsigned long drmAgpMemoryAvail(int fd);
0719 extern unsigned int drmAgpVendorId(int fd);
0720 extern unsigned int drmAgpDeviceId(int fd);
0721
0722
0723 extern int drmScatterGatherAlloc(int fd, unsigned long size,
0724 drm_handle_t *handle);
0725 extern int drmScatterGatherFree(int fd, drm_handle_t handle);
0726
0727 extern int drmWaitVBlank(int fd, drmVBlankPtr vbl);
0728
0729
0730 extern void drmSetServerInfo(drmServerInfoPtr info);
0731 extern int drmError(int err, const char *label);
0732 extern void *drmMalloc(int size);
0733 extern void drmFree(void *pt);
0734
0735
0736 extern void *drmHashCreate(void);
0737 extern int drmHashDestroy(void *t);
0738 extern int drmHashLookup(void *t, unsigned long key, void **value);
0739 extern int drmHashInsert(void *t, unsigned long key, void *value);
0740 extern int drmHashDelete(void *t, unsigned long key);
0741 extern int drmHashFirst(void *t, unsigned long *key, void **value);
0742 extern int drmHashNext(void *t, unsigned long *key, void **value);
0743
0744
0745 extern void *drmRandomCreate(unsigned long seed);
0746 extern int drmRandomDestroy(void *state);
0747 extern unsigned long drmRandom(void *state);
0748 extern double drmRandomDouble(void *state);
0749
0750
0751
0752 extern void *drmSLCreate(void);
0753 extern int drmSLDestroy(void *l);
0754 extern int drmSLLookup(void *l, unsigned long key, void **value);
0755 extern int drmSLInsert(void *l, unsigned long key, void *value);
0756 extern int drmSLDelete(void *l, unsigned long key);
0757 extern int drmSLNext(void *l, unsigned long *key, void **value);
0758 extern int drmSLFirst(void *l, unsigned long *key, void **value);
0759 extern void drmSLDump(void *l);
0760 extern int drmSLLookupNeighbors(void *l, unsigned long key,
0761 unsigned long *prev_key, void **prev_value,
0762 unsigned long *next_key, void **next_value);
0763
0764 extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened);
0765 extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type);
0766 extern void drmCloseOnce(int fd);
0767 extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2);
0768
0769 extern int drmSetMaster(int fd);
0770 extern int drmDropMaster(int fd);
0771 extern int drmIsMaster(int fd);
0772
0773 #define DRM_EVENT_CONTEXT_VERSION 4
0774
0775 typedef struct _drmEventContext {
0776
0777
0778
0779 int version;
0780
0781 void (*vblank_handler)(int fd,
0782 unsigned int sequence,
0783 unsigned int tv_sec,
0784 unsigned int tv_usec,
0785 void *user_data);
0786
0787 void (*page_flip_handler)(int fd,
0788 unsigned int sequence,
0789 unsigned int tv_sec,
0790 unsigned int tv_usec,
0791 void *user_data);
0792
0793 void (*page_flip_handler2)(int fd,
0794 unsigned int sequence,
0795 unsigned int tv_sec,
0796 unsigned int tv_usec,
0797 unsigned int crtc_id,
0798 void *user_data);
0799
0800 void (*sequence_handler)(int fd,
0801 uint64_t sequence,
0802 uint64_t ns,
0803 uint64_t user_data);
0804 } drmEventContext, *drmEventContextPtr;
0805
0806 extern int drmHandleEvent(int fd, drmEventContextPtr evctx);
0807
0808 extern char *drmGetDeviceNameFromFd(int fd);
0809
0810
0811
0812
0813 extern char *drmGetDeviceNameFromFd2(int fd);
0814 extern int drmGetNodeTypeFromFd(int fd);
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834 extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd);
0835 extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle);
0836
0837 extern int drmCloseBufferHandle(int fd, uint32_t handle);
0838
0839 extern char *drmGetPrimaryDeviceNameFromFd(int fd);
0840 extern char *drmGetRenderDeviceNameFromFd(int fd);
0841
0842 #define DRM_BUS_PCI 0
0843 #define DRM_BUS_USB 1
0844 #define DRM_BUS_PLATFORM 2
0845 #define DRM_BUS_HOST1X 3
0846
0847 typedef struct _drmPciBusInfo {
0848 uint16_t domain;
0849 uint8_t bus;
0850 uint8_t dev;
0851 uint8_t func;
0852 } drmPciBusInfo, *drmPciBusInfoPtr;
0853
0854 typedef struct _drmPciDeviceInfo {
0855 uint16_t vendor_id;
0856 uint16_t device_id;
0857 uint16_t subvendor_id;
0858 uint16_t subdevice_id;
0859 uint8_t revision_id;
0860 } drmPciDeviceInfo, *drmPciDeviceInfoPtr;
0861
0862 typedef struct _drmUsbBusInfo {
0863 uint8_t bus;
0864 uint8_t dev;
0865 } drmUsbBusInfo, *drmUsbBusInfoPtr;
0866
0867 typedef struct _drmUsbDeviceInfo {
0868 uint16_t vendor;
0869 uint16_t product;
0870 } drmUsbDeviceInfo, *drmUsbDeviceInfoPtr;
0871
0872 #define DRM_PLATFORM_DEVICE_NAME_LEN 512
0873
0874 typedef struct _drmPlatformBusInfo {
0875 char fullname[DRM_PLATFORM_DEVICE_NAME_LEN];
0876 } drmPlatformBusInfo, *drmPlatformBusInfoPtr;
0877
0878 typedef struct _drmPlatformDeviceInfo {
0879 char **compatible;
0880 } drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr;
0881
0882 #define DRM_HOST1X_DEVICE_NAME_LEN 512
0883
0884 typedef struct _drmHost1xBusInfo {
0885 char fullname[DRM_HOST1X_DEVICE_NAME_LEN];
0886 } drmHost1xBusInfo, *drmHost1xBusInfoPtr;
0887
0888 typedef struct _drmHost1xDeviceInfo {
0889 char **compatible;
0890 } drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr;
0891
0892 typedef struct _drmDevice {
0893 char **nodes;
0894 int available_nodes;
0895 int bustype;
0896 union {
0897 drmPciBusInfoPtr pci;
0898 drmUsbBusInfoPtr usb;
0899 drmPlatformBusInfoPtr platform;
0900 drmHost1xBusInfoPtr host1x;
0901 } businfo;
0902 union {
0903 drmPciDeviceInfoPtr pci;
0904 drmUsbDeviceInfoPtr usb;
0905 drmPlatformDeviceInfoPtr platform;
0906 drmHost1xDeviceInfoPtr host1x;
0907 } deviceinfo;
0908 } drmDevice, *drmDevicePtr;
0909
0910 extern int drmGetDevice(int fd, drmDevicePtr *device);
0911 extern void drmFreeDevice(drmDevicePtr *device);
0912
0913 extern int drmGetDevices(drmDevicePtr devices[], int max_devices);
0914 extern void drmFreeDevices(drmDevicePtr devices[], int count);
0915
0916 #define DRM_DEVICE_GET_PCI_REVISION (1 << 0)
0917 extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device);
0918 extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices);
0919
0920 extern int drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device);
0921
0922
0923
0924
0925
0926
0927 extern int drmGetNodeTypeFromDevId(dev_t devid);
0928
0929
0930
0931
0932
0933
0934 extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b);
0935
0936 extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle);
0937 extern int drmSyncobjDestroy(int fd, uint32_t handle);
0938 extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd);
0939 extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle);
0940
0941 extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd);
0942 extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd);
0943 extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles,
0944 int64_t timeout_nsec, unsigned flags,
0945 uint32_t *first_signaled);
0946 extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count);
0947 extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count);
0948 extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles,
0949 uint64_t *points, uint32_t handle_count);
0950 extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points,
0951 unsigned num_handles,
0952 int64_t timeout_nsec, unsigned flags,
0953 uint32_t *first_signaled);
0954 extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points,
0955 uint32_t handle_count);
0956 extern int drmSyncobjQuery2(int fd, uint32_t *handles, uint64_t *points,
0957 uint32_t handle_count, uint32_t flags);
0958 extern int drmSyncobjTransfer(int fd,
0959 uint32_t dst_handle, uint64_t dst_point,
0960 uint32_t src_handle, uint64_t src_point,
0961 uint32_t flags);
0962 extern int drmSyncobjEventfd(int fd, uint32_t handle, uint64_t point, int ev_fd,
0963 uint32_t flags);
0964
0965 extern char *
0966 drmGetFormatModifierVendor(uint64_t modifier);
0967
0968 extern char *
0969 drmGetFormatModifierName(uint64_t modifier);
0970
0971 extern char *
0972 drmGetFormatName(uint32_t format);
0973
0974 #ifndef fourcc_mod_get_vendor
0975 #define fourcc_mod_get_vendor(modifier) \
0976 (((modifier) >> 56) & 0xff)
0977 #endif
0978
0979 #if defined(__cplusplus)
0980 }
0981 #endif
0982
0983 #endif