Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.14 1708 lines 57 kB view raw
1/** 2 * \file drmP.h 3 * Private header for Direct Rendering Manager 4 * 5 * \author Rickard E. (Rik) Faith <faith@valinux.com> 6 * \author Gareth Hughes <gareth@valinux.com> 7 */ 8 9/* 10 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 11 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 12 * Copyright (c) 2009-2010, Code Aurora Forum. 13 * All rights reserved. 14 * 15 * Permission is hereby granted, free of charge, to any person obtaining a 16 * copy of this software and associated documentation files (the "Software"), 17 * to deal in the Software without restriction, including without limitation 18 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 19 * and/or sell copies of the Software, and to permit persons to whom the 20 * Software is furnished to do so, subject to the following conditions: 21 * 22 * The above copyright notice and this permission notice (including the next 23 * paragraph) shall be included in all copies or substantial portions of the 24 * Software. 25 * 26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 29 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 30 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 31 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 32 * OTHER DEALINGS IN THE SOFTWARE. 33 */ 34 35#ifndef _DRM_P_H_ 36#define _DRM_P_H_ 37 38#ifdef __KERNEL__ 39#ifdef __alpha__ 40/* add include of current.h so that "current" is defined 41 * before static inline funcs in wait.h. Doing this so we 42 * can build the DRM (part of PI DRI). 4/21/2000 S + B */ 43#include <asm/current.h> 44#endif /* __alpha__ */ 45#include <linux/kernel.h> 46#include <linux/miscdevice.h> 47#include <linux/fs.h> 48#include <linux/init.h> 49#include <linux/file.h> 50#include <linux/platform_device.h> 51#include <linux/pci.h> 52#include <linux/jiffies.h> 53#include <linux/dma-mapping.h> 54#include <linux/mm.h> 55#include <linux/cdev.h> 56#include <linux/mutex.h> 57#include <linux/io.h> 58#include <linux/slab.h> 59#include <linux/ratelimit.h> 60#if defined(__alpha__) || defined(__powerpc__) 61#include <asm/pgtable.h> /* For pte_wrprotect */ 62#endif 63#include <asm/mman.h> 64#include <asm/uaccess.h> 65#include <linux/types.h> 66#include <linux/agp_backend.h> 67#include <linux/workqueue.h> 68#include <linux/poll.h> 69#include <asm/pgalloc.h> 70#include <drm/drm.h> 71#include <drm/drm_sarea.h> 72#include <drm/drm_vma_manager.h> 73 74#include <linux/idr.h> 75 76#define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE))) 77 78struct module; 79 80struct drm_file; 81struct drm_device; 82 83struct device_node; 84struct videomode; 85 86#include <drm/drm_os_linux.h> 87#include <drm/drm_hashtab.h> 88#include <drm/drm_mm.h> 89 90#define DRM_UT_CORE 0x01 91#define DRM_UT_DRIVER 0x02 92#define DRM_UT_KMS 0x04 93#define DRM_UT_PRIME 0x08 94/* 95 * Three debug levels are defined. 96 * drm_core, drm_driver, drm_kms 97 * drm_core level can be used in the generic drm code. For example: 98 * drm_ioctl, drm_mm, drm_memory 99 * The macro definition of DRM_DEBUG is used. 100 * DRM_DEBUG(fmt, args...) 101 * The debug info by using the DRM_DEBUG can be obtained by adding 102 * the boot option of "drm.debug=1". 103 * 104 * drm_driver level can be used in the specific drm driver. It is used 105 * to add the debug info related with the drm driver. For example: 106 * i915_drv, i915_dma, i915_gem, radeon_drv, 107 * The macro definition of DRM_DEBUG_DRIVER can be used. 108 * DRM_DEBUG_DRIVER(fmt, args...) 109 * The debug info by using the DRM_DEBUG_DRIVER can be obtained by 110 * adding the boot option of "drm.debug=0x02" 111 * 112 * drm_kms level can be used in the KMS code related with specific drm driver. 113 * It is used to add the debug info related with KMS mode. For example: 114 * the connector/crtc , 115 * The macro definition of DRM_DEBUG_KMS can be used. 116 * DRM_DEBUG_KMS(fmt, args...) 117 * The debug info by using the DRM_DEBUG_KMS can be obtained by 118 * adding the boot option of "drm.debug=0x04" 119 * 120 * If we add the boot option of "drm.debug=0x06", we can get the debug info by 121 * using the DRM_DEBUG_KMS and DRM_DEBUG_DRIVER. 122 * If we add the boot option of "drm.debug=0x05", we can get the debug info by 123 * using the DRM_DEBUG_KMS and DRM_DEBUG. 124 */ 125 126extern __printf(4, 5) 127void drm_ut_debug_printk(unsigned int request_level, 128 const char *prefix, 129 const char *function_name, 130 const char *format, ...); 131extern __printf(2, 3) 132int drm_err(const char *func, const char *format, ...); 133 134/***********************************************************************/ 135/** \name DRM template customization defaults */ 136/*@{*/ 137 138/* driver capabilities and requirements mask */ 139#define DRIVER_USE_AGP 0x1 140#define DRIVER_PCI_DMA 0x8 141#define DRIVER_SG 0x10 142#define DRIVER_HAVE_DMA 0x20 143#define DRIVER_HAVE_IRQ 0x40 144#define DRIVER_IRQ_SHARED 0x80 145#define DRIVER_GEM 0x1000 146#define DRIVER_MODESET 0x2000 147#define DRIVER_PRIME 0x4000 148#define DRIVER_RENDER 0x8000 149 150#define DRIVER_BUS_PCI 0x1 151#define DRIVER_BUS_PLATFORM 0x2 152#define DRIVER_BUS_USB 0x3 153#define DRIVER_BUS_HOST1X 0x4 154 155/***********************************************************************/ 156/** \name Begin the DRM... */ 157/*@{*/ 158 159#define DRM_DEBUG_CODE 2 /**< Include debugging code if > 1, then 160 also include looping detection. */ 161 162#define DRM_MAGIC_HASH_ORDER 4 /**< Size of key hash table. Must be power of 2. */ 163#define DRM_KERNEL_CONTEXT 0 /**< Change drm_resctx if changed */ 164#define DRM_RESERVED_CONTEXTS 1 /**< Change drm_resctx if changed */ 165 166#define DRM_MAP_HASH_OFFSET 0x10000000 167 168/*@}*/ 169 170/***********************************************************************/ 171/** \name Macros to make printk easier */ 172/*@{*/ 173 174/** 175 * Error output. 176 * 177 * \param fmt printf() like format string. 178 * \param arg arguments 179 */ 180#define DRM_ERROR(fmt, ...) \ 181 drm_err(__func__, fmt, ##__VA_ARGS__) 182 183/** 184 * Rate limited error output. Like DRM_ERROR() but won't flood the log. 185 * 186 * \param fmt printf() like format string. 187 * \param arg arguments 188 */ 189#define DRM_ERROR_RATELIMITED(fmt, ...) \ 190({ \ 191 static DEFINE_RATELIMIT_STATE(_rs, \ 192 DEFAULT_RATELIMIT_INTERVAL, \ 193 DEFAULT_RATELIMIT_BURST); \ 194 \ 195 if (__ratelimit(&_rs)) \ 196 drm_err(__func__, fmt, ##__VA_ARGS__); \ 197}) 198 199#define DRM_INFO(fmt, ...) \ 200 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__) 201 202#define DRM_INFO_ONCE(fmt, ...) \ 203 printk_once(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__) 204 205/** 206 * Debug output. 207 * 208 * \param fmt printf() like format string. 209 * \param arg arguments 210 */ 211#if DRM_DEBUG_CODE 212#define DRM_DEBUG(fmt, args...) \ 213 do { \ 214 drm_ut_debug_printk(DRM_UT_CORE, DRM_NAME, \ 215 __func__, fmt, ##args); \ 216 } while (0) 217 218#define DRM_DEBUG_DRIVER(fmt, args...) \ 219 do { \ 220 drm_ut_debug_printk(DRM_UT_DRIVER, DRM_NAME, \ 221 __func__, fmt, ##args); \ 222 } while (0) 223#define DRM_DEBUG_KMS(fmt, args...) \ 224 do { \ 225 drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ 226 __func__, fmt, ##args); \ 227 } while (0) 228#define DRM_DEBUG_PRIME(fmt, args...) \ 229 do { \ 230 drm_ut_debug_printk(DRM_UT_PRIME, DRM_NAME, \ 231 __func__, fmt, ##args); \ 232 } while (0) 233#define DRM_LOG(fmt, args...) \ 234 do { \ 235 drm_ut_debug_printk(DRM_UT_CORE, NULL, \ 236 NULL, fmt, ##args); \ 237 } while (0) 238#define DRM_LOG_KMS(fmt, args...) \ 239 do { \ 240 drm_ut_debug_printk(DRM_UT_KMS, NULL, \ 241 NULL, fmt, ##args); \ 242 } while (0) 243#define DRM_LOG_MODE(fmt, args...) \ 244 do { \ 245 drm_ut_debug_printk(DRM_UT_MODE, NULL, \ 246 NULL, fmt, ##args); \ 247 } while (0) 248#define DRM_LOG_DRIVER(fmt, args...) \ 249 do { \ 250 drm_ut_debug_printk(DRM_UT_DRIVER, NULL, \ 251 NULL, fmt, ##args); \ 252 } while (0) 253#else 254#define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) 255#define DRM_DEBUG_KMS(fmt, args...) do { } while (0) 256#define DRM_DEBUG_PRIME(fmt, args...) do { } while (0) 257#define DRM_DEBUG(fmt, arg...) do { } while (0) 258#define DRM_LOG(fmt, arg...) do { } while (0) 259#define DRM_LOG_KMS(fmt, args...) do { } while (0) 260#define DRM_LOG_MODE(fmt, arg...) do { } while (0) 261#define DRM_LOG_DRIVER(fmt, arg...) do { } while (0) 262 263#endif 264 265/*@}*/ 266 267/***********************************************************************/ 268/** \name Internal types and structures */ 269/*@{*/ 270 271#define DRM_ARRAY_SIZE(x) ARRAY_SIZE(x) 272 273#define DRM_IF_VERSION(maj, min) (maj << 16 | min) 274 275/** 276 * Test that the hardware lock is held by the caller, returning otherwise. 277 * 278 * \param dev DRM device. 279 * \param filp file pointer of the caller. 280 */ 281#define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \ 282do { \ 283 if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \ 284 _file_priv->master->lock.file_priv != _file_priv) { \ 285 DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ 286 __func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\ 287 _file_priv->master->lock.file_priv, _file_priv); \ 288 return -EINVAL; \ 289 } \ 290} while (0) 291 292/** 293 * Ioctl function type. 294 * 295 * \param inode device inode. 296 * \param file_priv DRM file private pointer. 297 * \param cmd command. 298 * \param arg argument. 299 */ 300typedef int drm_ioctl_t(struct drm_device *dev, void *data, 301 struct drm_file *file_priv); 302 303typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, 304 unsigned long arg); 305 306#define DRM_IOCTL_NR(n) _IOC_NR(n) 307#define DRM_MAJOR 226 308 309#define DRM_AUTH 0x1 310#define DRM_MASTER 0x2 311#define DRM_ROOT_ONLY 0x4 312#define DRM_CONTROL_ALLOW 0x8 313#define DRM_UNLOCKED 0x10 314#define DRM_RENDER_ALLOW 0x20 315 316struct drm_ioctl_desc { 317 unsigned int cmd; 318 int flags; 319 drm_ioctl_t *func; 320 unsigned int cmd_drv; 321 const char *name; 322}; 323 324/** 325 * Creates a driver or general drm_ioctl_desc array entry for the given 326 * ioctl, for use by drm_ioctl(). 327 */ 328 329#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \ 330 [DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl, .name = #ioctl} 331 332struct drm_magic_entry { 333 struct list_head head; 334 struct drm_hash_item hash_item; 335 struct drm_file *priv; 336}; 337 338struct drm_vma_entry { 339 struct list_head head; 340 struct vm_area_struct *vma; 341 pid_t pid; 342}; 343 344/** 345 * DMA buffer. 346 */ 347struct drm_buf { 348 int idx; /**< Index into master buflist */ 349 int total; /**< Buffer size */ 350 int order; /**< log-base-2(total) */ 351 int used; /**< Amount of buffer in use (for DMA) */ 352 unsigned long offset; /**< Byte offset (used internally) */ 353 void *address; /**< Address of buffer */ 354 unsigned long bus_address; /**< Bus address of buffer */ 355 struct drm_buf *next; /**< Kernel-only: used for free list */ 356 __volatile__ int waiting; /**< On kernel DMA queue */ 357 __volatile__ int pending; /**< On hardware DMA queue */ 358 struct drm_file *file_priv; /**< Private of holding file descr */ 359 int context; /**< Kernel queue for this buffer */ 360 int while_locked; /**< Dispatch this buffer while locked */ 361 enum { 362 DRM_LIST_NONE = 0, 363 DRM_LIST_FREE = 1, 364 DRM_LIST_WAIT = 2, 365 DRM_LIST_PEND = 3, 366 DRM_LIST_PRIO = 4, 367 DRM_LIST_RECLAIM = 5 368 } list; /**< Which list we're on */ 369 370 int dev_priv_size; /**< Size of buffer private storage */ 371 void *dev_private; /**< Per-buffer private storage */ 372}; 373 374/** bufs is one longer than it has to be */ 375struct drm_waitlist { 376 int count; /**< Number of possible buffers */ 377 struct drm_buf **bufs; /**< List of pointers to buffers */ 378 struct drm_buf **rp; /**< Read pointer */ 379 struct drm_buf **wp; /**< Write pointer */ 380 struct drm_buf **end; /**< End pointer */ 381 spinlock_t read_lock; 382 spinlock_t write_lock; 383}; 384 385struct drm_freelist { 386 int initialized; /**< Freelist in use */ 387 atomic_t count; /**< Number of free buffers */ 388 struct drm_buf *next; /**< End pointer */ 389 390 wait_queue_head_t waiting; /**< Processes waiting on free bufs */ 391 int low_mark; /**< Low water mark */ 392 int high_mark; /**< High water mark */ 393 atomic_t wfh; /**< If waiting for high mark */ 394 spinlock_t lock; 395}; 396 397typedef struct drm_dma_handle { 398 dma_addr_t busaddr; 399 void *vaddr; 400 size_t size; 401} drm_dma_handle_t; 402 403/** 404 * Buffer entry. There is one of this for each buffer size order. 405 */ 406struct drm_buf_entry { 407 int buf_size; /**< size */ 408 int buf_count; /**< number of buffers */ 409 struct drm_buf *buflist; /**< buffer list */ 410 int seg_count; 411 int page_order; 412 struct drm_dma_handle **seglist; 413 414 struct drm_freelist freelist; 415}; 416 417/* Event queued up for userspace to read */ 418struct drm_pending_event { 419 struct drm_event *event; 420 struct list_head link; 421 struct drm_file *file_priv; 422 pid_t pid; /* pid of requester, no guarantee it's valid by the time 423 we deliver the event, for tracing only */ 424 void (*destroy)(struct drm_pending_event *event); 425}; 426 427/* initial implementaton using a linked list - todo hashtab */ 428struct drm_prime_file_private { 429 struct list_head head; 430 struct mutex lock; 431}; 432 433/** File private data */ 434struct drm_file { 435 unsigned always_authenticated :1; 436 unsigned authenticated :1; 437 unsigned is_master :1; /* this file private is a master for a minor */ 438 /* true when the client has asked us to expose stereo 3D mode flags */ 439 unsigned stereo_allowed :1; 440 441 struct pid *pid; 442 kuid_t uid; 443 drm_magic_t magic; 444 struct list_head lhead; 445 struct drm_minor *minor; 446 unsigned long lock_count; 447 448 /** Mapping of mm object handles to object pointers. */ 449 struct idr object_idr; 450 /** Lock for synchronization of access to object_idr. */ 451 spinlock_t table_lock; 452 453 struct file *filp; 454 void *driver_priv; 455 456 struct drm_master *master; /* master this node is currently associated with 457 N.B. not always minor->master */ 458 /** 459 * fbs - List of framebuffers associated with this file. 460 * 461 * Protected by fbs_lock. Note that the fbs list holds a reference on 462 * the fb object to prevent it from untimely disappearing. 463 */ 464 struct list_head fbs; 465 struct mutex fbs_lock; 466 467 wait_queue_head_t event_wait; 468 struct list_head event_list; 469 int event_space; 470 471 struct drm_prime_file_private prime; 472}; 473 474/** Wait queue */ 475struct drm_queue { 476 atomic_t use_count; /**< Outstanding uses (+1) */ 477 atomic_t finalization; /**< Finalization in progress */ 478 atomic_t block_count; /**< Count of processes waiting */ 479 atomic_t block_read; /**< Queue blocked for reads */ 480 wait_queue_head_t read_queue; /**< Processes waiting on block_read */ 481 atomic_t block_write; /**< Queue blocked for writes */ 482 wait_queue_head_t write_queue; /**< Processes waiting on block_write */ 483 atomic_t total_queued; /**< Total queued statistic */ 484 atomic_t total_flushed; /**< Total flushes statistic */ 485 atomic_t total_locks; /**< Total locks statistics */ 486 enum drm_ctx_flags flags; /**< Context preserving and 2D-only */ 487 struct drm_waitlist waitlist; /**< Pending buffers */ 488 wait_queue_head_t flush_queue; /**< Processes waiting until flush */ 489}; 490 491/** 492 * Lock data. 493 */ 494struct drm_lock_data { 495 struct drm_hw_lock *hw_lock; /**< Hardware lock */ 496 /** Private of lock holder's file (NULL=kernel) */ 497 struct drm_file *file_priv; 498 wait_queue_head_t lock_queue; /**< Queue of blocked processes */ 499 unsigned long lock_time; /**< Time of last lock in jiffies */ 500 spinlock_t spinlock; 501 uint32_t kernel_waiters; 502 uint32_t user_waiters; 503 int idle_has_lock; 504}; 505 506/** 507 * DMA data. 508 */ 509struct drm_device_dma { 510 511 struct drm_buf_entry bufs[DRM_MAX_ORDER + 1]; /**< buffers, grouped by their size order */ 512 int buf_count; /**< total number of buffers */ 513 struct drm_buf **buflist; /**< Vector of pointers into drm_device_dma::bufs */ 514 int seg_count; 515 int page_count; /**< number of pages */ 516 unsigned long *pagelist; /**< page list */ 517 unsigned long byte_count; 518 enum { 519 _DRM_DMA_USE_AGP = 0x01, 520 _DRM_DMA_USE_SG = 0x02, 521 _DRM_DMA_USE_FB = 0x04, 522 _DRM_DMA_USE_PCI_RO = 0x08 523 } flags; 524 525}; 526 527/** 528 * AGP memory entry. Stored as a doubly linked list. 529 */ 530struct drm_agp_mem { 531 unsigned long handle; /**< handle */ 532 struct agp_memory *memory; 533 unsigned long bound; /**< address */ 534 int pages; 535 struct list_head head; 536}; 537 538/** 539 * AGP data. 540 * 541 * \sa drm_agp_init() and drm_device::agp. 542 */ 543struct drm_agp_head { 544 struct agp_kern_info agp_info; /**< AGP device information */ 545 struct list_head memory; 546 unsigned long mode; /**< AGP mode */ 547 struct agp_bridge_data *bridge; 548 int enabled; /**< whether the AGP bus as been enabled */ 549 int acquired; /**< whether the AGP device has been acquired */ 550 unsigned long base; 551 int agp_mtrr; 552 int cant_use_aperture; 553 unsigned long page_mask; 554}; 555 556/** 557 * Scatter-gather memory. 558 */ 559struct drm_sg_mem { 560 unsigned long handle; 561 void *virtual; 562 int pages; 563 struct page **pagelist; 564 dma_addr_t *busaddr; 565}; 566 567struct drm_sigdata { 568 int context; 569 struct drm_hw_lock *lock; 570}; 571 572 573/** 574 * Kernel side of a mapping 575 */ 576struct drm_local_map { 577 resource_size_t offset; /**< Requested physical address (0 for SAREA)*/ 578 unsigned long size; /**< Requested physical size (bytes) */ 579 enum drm_map_type type; /**< Type of memory to map */ 580 enum drm_map_flags flags; /**< Flags */ 581 void *handle; /**< User-space: "Handle" to pass to mmap() */ 582 /**< Kernel-space: kernel-virtual address */ 583 int mtrr; /**< MTRR slot used */ 584}; 585 586typedef struct drm_local_map drm_local_map_t; 587 588/** 589 * Mappings list 590 */ 591struct drm_map_list { 592 struct list_head head; /**< list head */ 593 struct drm_hash_item hash; 594 struct drm_local_map *map; /**< mapping */ 595 uint64_t user_token; 596 struct drm_master *master; 597}; 598 599/** 600 * Context handle list 601 */ 602struct drm_ctx_list { 603 struct list_head head; /**< list head */ 604 drm_context_t handle; /**< context handle */ 605 struct drm_file *tag; /**< associated fd private data */ 606}; 607 608/* location of GART table */ 609#define DRM_ATI_GART_MAIN 1 610#define DRM_ATI_GART_FB 2 611 612#define DRM_ATI_GART_PCI 1 613#define DRM_ATI_GART_PCIE 2 614#define DRM_ATI_GART_IGP 3 615 616struct drm_ati_pcigart_info { 617 int gart_table_location; 618 int gart_reg_if; 619 void *addr; 620 dma_addr_t bus_addr; 621 dma_addr_t table_mask; 622 struct drm_dma_handle *table_handle; 623 struct drm_local_map mapping; 624 int table_size; 625}; 626 627/** 628 * This structure defines the drm_mm memory object, which will be used by the 629 * DRM for its buffer objects. 630 */ 631struct drm_gem_object { 632 /** Reference count of this object */ 633 struct kref refcount; 634 635 /** 636 * handle_count - gem file_priv handle count of this object 637 * 638 * Each handle also holds a reference. Note that when the handle_count 639 * drops to 0 any global names (e.g. the id in the flink namespace) will 640 * be cleared. 641 * 642 * Protected by dev->object_name_lock. 643 * */ 644 unsigned handle_count; 645 646 /** Related drm device */ 647 struct drm_device *dev; 648 649 /** File representing the shmem storage */ 650 struct file *filp; 651 652 /* Mapping info for this object */ 653 struct drm_vma_offset_node vma_node; 654 655 /** 656 * Size of the object, in bytes. Immutable over the object's 657 * lifetime. 658 */ 659 size_t size; 660 661 /** 662 * Global name for this object, starts at 1. 0 means unnamed. 663 * Access is covered by the object_name_lock in the related drm_device 664 */ 665 int name; 666 667 /** 668 * Memory domains. These monitor which caches contain read/write data 669 * related to the object. When transitioning from one set of domains 670 * to another, the driver is called to ensure that caches are suitably 671 * flushed and invalidated 672 */ 673 uint32_t read_domains; 674 uint32_t write_domain; 675 676 /** 677 * While validating an exec operation, the 678 * new read/write domain values are computed here. 679 * They will be transferred to the above values 680 * at the point that any cache flushing occurs 681 */ 682 uint32_t pending_read_domains; 683 uint32_t pending_write_domain; 684 685 /** 686 * dma_buf - dma buf associated with this GEM object 687 * 688 * Pointer to the dma-buf associated with this gem object (either 689 * through importing or exporting). We break the resulting reference 690 * loop when the last gem handle for this object is released. 691 * 692 * Protected by obj->object_name_lock 693 */ 694 struct dma_buf *dma_buf; 695 696 /** 697 * import_attach - dma buf attachment backing this object 698 * 699 * Any foreign dma_buf imported as a gem object has this set to the 700 * attachment point for the device. This is invariant over the lifetime 701 * of a gem object. 702 * 703 * The driver's ->gem_free_object callback is responsible for cleaning 704 * up the dma_buf attachment and references acquired at import time. 705 * 706 * Note that the drm gem/prime core does not depend upon drivers setting 707 * this field any more. So for drivers where this doesn't make sense 708 * (e.g. virtual devices or a displaylink behind an usb bus) they can 709 * simply leave it as NULL. 710 */ 711 struct dma_buf_attachment *import_attach; 712}; 713 714#include <drm/drm_crtc.h> 715 716/* per-master structure */ 717struct drm_master { 718 719 struct kref refcount; /* refcount for this master */ 720 721 struct list_head head; /**< each minor contains a list of masters */ 722 struct drm_minor *minor; /**< link back to minor we are a master for */ 723 724 char *unique; /**< Unique identifier: e.g., busid */ 725 int unique_len; /**< Length of unique field */ 726 int unique_size; /**< amount allocated */ 727 728 int blocked; /**< Blocked due to VC switch? */ 729 730 /** \name Authentication */ 731 /*@{ */ 732 struct drm_open_hash magiclist; 733 struct list_head magicfree; 734 /*@} */ 735 736 struct drm_lock_data lock; /**< Information on hardware lock */ 737 738 void *driver_priv; /**< Private structure for driver to use */ 739}; 740 741/* Size of ringbuffer for vblank timestamps. Just double-buffer 742 * in initial implementation. 743 */ 744#define DRM_VBLANKTIME_RBSIZE 2 745 746/* Flags and return codes for get_vblank_timestamp() driver function. */ 747#define DRM_CALLED_FROM_VBLIRQ 1 748#define DRM_VBLANKTIME_SCANOUTPOS_METHOD (1 << 0) 749#define DRM_VBLANKTIME_INVBL (1 << 1) 750 751/* get_scanout_position() return flags */ 752#define DRM_SCANOUTPOS_VALID (1 << 0) 753#define DRM_SCANOUTPOS_INVBL (1 << 1) 754#define DRM_SCANOUTPOS_ACCURATE (1 << 2) 755 756struct drm_bus { 757 int bus_type; 758 int (*get_irq)(struct drm_device *dev); 759 const char *(*get_name)(struct drm_device *dev); 760 int (*set_busid)(struct drm_device *dev, struct drm_master *master); 761 int (*set_unique)(struct drm_device *dev, struct drm_master *master, 762 struct drm_unique *unique); 763 int (*irq_by_busid)(struct drm_device *dev, struct drm_irq_busid *p); 764}; 765 766/** 767 * DRM driver structure. This structure represent the common code for 768 * a family of cards. There will one drm_device for each card present 769 * in this family 770 */ 771struct drm_driver { 772 int (*load) (struct drm_device *, unsigned long flags); 773 int (*firstopen) (struct drm_device *); 774 int (*open) (struct drm_device *, struct drm_file *); 775 void (*preclose) (struct drm_device *, struct drm_file *file_priv); 776 void (*postclose) (struct drm_device *, struct drm_file *); 777 void (*lastclose) (struct drm_device *); 778 int (*unload) (struct drm_device *); 779 int (*suspend) (struct drm_device *, pm_message_t state); 780 int (*resume) (struct drm_device *); 781 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv); 782 int (*dma_quiescent) (struct drm_device *); 783 int (*context_dtor) (struct drm_device *dev, int context); 784 785 /** 786 * get_vblank_counter - get raw hardware vblank counter 787 * @dev: DRM device 788 * @crtc: counter to fetch 789 * 790 * Driver callback for fetching a raw hardware vblank counter for @crtc. 791 * If a device doesn't have a hardware counter, the driver can simply 792 * return the value of drm_vblank_count. The DRM core will account for 793 * missed vblank events while interrupts where disabled based on system 794 * timestamps. 795 * 796 * Wraparound handling and loss of events due to modesetting is dealt 797 * with in the DRM core code. 798 * 799 * RETURNS 800 * Raw vblank counter value. 801 */ 802 u32 (*get_vblank_counter) (struct drm_device *dev, int crtc); 803 804 /** 805 * enable_vblank - enable vblank interrupt events 806 * @dev: DRM device 807 * @crtc: which irq to enable 808 * 809 * Enable vblank interrupts for @crtc. If the device doesn't have 810 * a hardware vblank counter, this routine should be a no-op, since 811 * interrupts will have to stay on to keep the count accurate. 812 * 813 * RETURNS 814 * Zero on success, appropriate errno if the given @crtc's vblank 815 * interrupt cannot be enabled. 816 */ 817 int (*enable_vblank) (struct drm_device *dev, int crtc); 818 819 /** 820 * disable_vblank - disable vblank interrupt events 821 * @dev: DRM device 822 * @crtc: which irq to enable 823 * 824 * Disable vblank interrupts for @crtc. If the device doesn't have 825 * a hardware vblank counter, this routine should be a no-op, since 826 * interrupts will have to stay on to keep the count accurate. 827 */ 828 void (*disable_vblank) (struct drm_device *dev, int crtc); 829 830 /** 831 * Called by \c drm_device_is_agp. Typically used to determine if a 832 * card is really attached to AGP or not. 833 * 834 * \param dev DRM device handle 835 * 836 * \returns 837 * One of three values is returned depending on whether or not the 838 * card is absolutely \b not AGP (return of 0), absolutely \b is AGP 839 * (return of 1), or may or may not be AGP (return of 2). 840 */ 841 int (*device_is_agp) (struct drm_device *dev); 842 843 /** 844 * Called by vblank timestamping code. 845 * 846 * Return the current display scanout position from a crtc, and an 847 * optional accurate ktime_get timestamp of when position was measured. 848 * 849 * \param dev DRM device. 850 * \param crtc Id of the crtc to query. 851 * \param flags Flags from the caller (DRM_CALLED_FROM_VBLIRQ or 0). 852 * \param *vpos Target location for current vertical scanout position. 853 * \param *hpos Target location for current horizontal scanout position. 854 * \param *stime Target location for timestamp taken immediately before 855 * scanout position query. Can be NULL to skip timestamp. 856 * \param *etime Target location for timestamp taken immediately after 857 * scanout position query. Can be NULL to skip timestamp. 858 * 859 * Returns vpos as a positive number while in active scanout area. 860 * Returns vpos as a negative number inside vblank, counting the number 861 * of scanlines to go until end of vblank, e.g., -1 means "one scanline 862 * until start of active scanout / end of vblank." 863 * 864 * \return Flags, or'ed together as follows: 865 * 866 * DRM_SCANOUTPOS_VALID = Query successful. 867 * DRM_SCANOUTPOS_INVBL = Inside vblank. 868 * DRM_SCANOUTPOS_ACCURATE = Returned position is accurate. A lack of 869 * this flag means that returned position may be offset by a constant 870 * but unknown small number of scanlines wrt. real scanout position. 871 * 872 */ 873 int (*get_scanout_position) (struct drm_device *dev, int crtc, 874 unsigned int flags, 875 int *vpos, int *hpos, ktime_t *stime, 876 ktime_t *etime); 877 878 /** 879 * Called by \c drm_get_last_vbltimestamp. Should return a precise 880 * timestamp when the most recent VBLANK interval ended or will end. 881 * 882 * Specifically, the timestamp in @vblank_time should correspond as 883 * closely as possible to the time when the first video scanline of 884 * the video frame after the end of VBLANK will start scanning out, 885 * the time immediately after end of the VBLANK interval. If the 886 * @crtc is currently inside VBLANK, this will be a time in the future. 887 * If the @crtc is currently scanning out a frame, this will be the 888 * past start time of the current scanout. This is meant to adhere 889 * to the OpenML OML_sync_control extension specification. 890 * 891 * \param dev dev DRM device handle. 892 * \param crtc crtc for which timestamp should be returned. 893 * \param *max_error Maximum allowable timestamp error in nanoseconds. 894 * Implementation should strive to provide timestamp 895 * with an error of at most *max_error nanoseconds. 896 * Returns true upper bound on error for timestamp. 897 * \param *vblank_time Target location for returned vblank timestamp. 898 * \param flags 0 = Defaults, no special treatment needed. 899 * \param DRM_CALLED_FROM_VBLIRQ = Function is called from vblank 900 * irq handler. Some drivers need to apply some workarounds 901 * for gpu-specific vblank irq quirks if flag is set. 902 * 903 * \returns 904 * Zero if timestamping isn't supported in current display mode or a 905 * negative number on failure. A positive status code on success, 906 * which describes how the vblank_time timestamp was computed. 907 */ 908 int (*get_vblank_timestamp) (struct drm_device *dev, int crtc, 909 int *max_error, 910 struct timeval *vblank_time, 911 unsigned flags); 912 913 /* these have to be filled in */ 914 915 irqreturn_t(*irq_handler) (int irq, void *arg); 916 void (*irq_preinstall) (struct drm_device *dev); 917 int (*irq_postinstall) (struct drm_device *dev); 918 void (*irq_uninstall) (struct drm_device *dev); 919 920 /* Master routines */ 921 int (*master_create)(struct drm_device *dev, struct drm_master *master); 922 void (*master_destroy)(struct drm_device *dev, struct drm_master *master); 923 /** 924 * master_set is called whenever the minor master is set. 925 * master_drop is called whenever the minor master is dropped. 926 */ 927 928 int (*master_set)(struct drm_device *dev, struct drm_file *file_priv, 929 bool from_open); 930 void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv, 931 bool from_release); 932 933 int (*debugfs_init)(struct drm_minor *minor); 934 void (*debugfs_cleanup)(struct drm_minor *minor); 935 936 /** 937 * Driver-specific constructor for drm_gem_objects, to set up 938 * obj->driver_private. 939 * 940 * Returns 0 on success. 941 */ 942 void (*gem_free_object) (struct drm_gem_object *obj); 943 int (*gem_open_object) (struct drm_gem_object *, struct drm_file *); 944 void (*gem_close_object) (struct drm_gem_object *, struct drm_file *); 945 946 /* prime: */ 947 /* export handle -> fd (see drm_gem_prime_handle_to_fd() helper) */ 948 int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv, 949 uint32_t handle, uint32_t flags, int *prime_fd); 950 /* import fd -> handle (see drm_gem_prime_fd_to_handle() helper) */ 951 int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv, 952 int prime_fd, uint32_t *handle); 953 /* export GEM -> dmabuf */ 954 struct dma_buf * (*gem_prime_export)(struct drm_device *dev, 955 struct drm_gem_object *obj, int flags); 956 /* import dmabuf -> GEM */ 957 struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, 958 struct dma_buf *dma_buf); 959 /* low-level interface used by drm_gem_prime_{import,export} */ 960 int (*gem_prime_pin)(struct drm_gem_object *obj); 961 void (*gem_prime_unpin)(struct drm_gem_object *obj); 962 struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj); 963 struct drm_gem_object *(*gem_prime_import_sg_table)( 964 struct drm_device *dev, size_t size, 965 struct sg_table *sgt); 966 void *(*gem_prime_vmap)(struct drm_gem_object *obj); 967 void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr); 968 int (*gem_prime_mmap)(struct drm_gem_object *obj, 969 struct vm_area_struct *vma); 970 971 /* vga arb irq handler */ 972 void (*vgaarb_irq)(struct drm_device *dev, bool state); 973 974 /* dumb alloc support */ 975 int (*dumb_create)(struct drm_file *file_priv, 976 struct drm_device *dev, 977 struct drm_mode_create_dumb *args); 978 int (*dumb_map_offset)(struct drm_file *file_priv, 979 struct drm_device *dev, uint32_t handle, 980 uint64_t *offset); 981 int (*dumb_destroy)(struct drm_file *file_priv, 982 struct drm_device *dev, 983 uint32_t handle); 984 985 /* Driver private ops for this object */ 986 const struct vm_operations_struct *gem_vm_ops; 987 988 int major; 989 int minor; 990 int patchlevel; 991 char *name; 992 char *desc; 993 char *date; 994 995 u32 driver_features; 996 int dev_priv_size; 997 const struct drm_ioctl_desc *ioctls; 998 int num_ioctls; 999 const struct file_operations *fops; 1000 union { 1001 struct pci_driver *pci; 1002 struct platform_device *platform_device; 1003 struct usb_driver *usb; 1004 } kdriver; 1005 struct drm_bus *bus; 1006 1007 /* List of devices hanging off this driver with stealth attach. */ 1008 struct list_head legacy_dev_list; 1009}; 1010 1011#define DRM_MINOR_UNASSIGNED 0 1012#define DRM_MINOR_LEGACY 1 1013#define DRM_MINOR_CONTROL 2 1014#define DRM_MINOR_RENDER 3 1015 1016/** 1017 * Info file list entry. This structure represents a debugfs or proc file to 1018 * be created by the drm core 1019 */ 1020struct drm_info_list { 1021 const char *name; /** file name */ 1022 int (*show)(struct seq_file*, void*); /** show callback */ 1023 u32 driver_features; /**< Required driver features for this entry */ 1024 void *data; 1025}; 1026 1027/** 1028 * debugfs node structure. This structure represents a debugfs file. 1029 */ 1030struct drm_info_node { 1031 struct list_head list; 1032 struct drm_minor *minor; 1033 const struct drm_info_list *info_ent; 1034 struct dentry *dent; 1035}; 1036 1037/** 1038 * DRM minor structure. This structure represents a drm minor number. 1039 */ 1040struct drm_minor { 1041 int index; /**< Minor device number */ 1042 int type; /**< Control or render */ 1043 dev_t device; /**< Device number for mknod */ 1044 struct device *kdev; /**< Linux device */ 1045 struct drm_device *dev; 1046 1047 struct dentry *debugfs_root; 1048 1049 struct list_head debugfs_list; 1050 struct mutex debugfs_lock; /* Protects debugfs_list. */ 1051 1052 struct drm_master *master; /* currently active master for this node */ 1053 struct list_head master_list; 1054 struct drm_mode_group mode_group; 1055}; 1056 1057/* mode specified on the command line */ 1058struct drm_cmdline_mode { 1059 bool specified; 1060 bool refresh_specified; 1061 bool bpp_specified; 1062 int xres, yres; 1063 int bpp; 1064 int refresh; 1065 bool rb; 1066 bool interlace; 1067 bool cvt; 1068 bool margins; 1069 enum drm_connector_force force; 1070}; 1071 1072 1073struct drm_pending_vblank_event { 1074 struct drm_pending_event base; 1075 int pipe; 1076 struct drm_event_vblank event; 1077}; 1078 1079struct drm_vblank_crtc { 1080 wait_queue_head_t queue; /**< VBLANK wait queue */ 1081 struct timeval time[DRM_VBLANKTIME_RBSIZE]; /**< timestamp of current count */ 1082 atomic_t count; /**< number of VBLANK interrupts */ 1083 atomic_t refcount; /* number of users of vblank interruptsper crtc */ 1084 u32 last; /* protected by dev->vbl_lock, used */ 1085 /* for wraparound handling */ 1086 u32 last_wait; /* Last vblank seqno waited per CRTC */ 1087 unsigned int inmodeset; /* Display driver is setting mode */ 1088 bool enabled; /* so we don't call enable more than 1089 once per disable */ 1090}; 1091 1092/** 1093 * DRM device structure. This structure represent a complete card that 1094 * may contain multiple heads. 1095 */ 1096struct drm_device { 1097 struct list_head legacy_dev_list;/**< list of devices per driver for stealth attach cleanup */ 1098 char *devname; /**< For /proc/interrupts */ 1099 int if_version; /**< Highest interface version set */ 1100 1101 /** \name Locks */ 1102 /*@{ */ 1103 spinlock_t count_lock; /**< For inuse, drm_device::open_count, drm_device::buf_use */ 1104 struct mutex struct_mutex; /**< For others */ 1105 /*@} */ 1106 1107 /** \name Usage Counters */ 1108 /*@{ */ 1109 int open_count; /**< Outstanding files open */ 1110 int buf_use; /**< Buffers in use -- cannot alloc */ 1111 atomic_t buf_alloc; /**< Buffer allocation in progress */ 1112 /*@} */ 1113 1114 struct list_head filelist; 1115 1116 /** \name Memory management */ 1117 /*@{ */ 1118 struct list_head maplist; /**< Linked list of regions */ 1119 struct drm_open_hash map_hash; /**< User token hash table for maps */ 1120 1121 /** \name Context handle management */ 1122 /*@{ */ 1123 struct list_head ctxlist; /**< Linked list of context handles */ 1124 struct mutex ctxlist_mutex; /**< For ctxlist */ 1125 1126 struct idr ctx_idr; 1127 1128 struct list_head vmalist; /**< List of vmas (for debugging) */ 1129 1130 /*@} */ 1131 1132 /** \name DMA support */ 1133 /*@{ */ 1134 struct drm_device_dma *dma; /**< Optional pointer for DMA support */ 1135 /*@} */ 1136 1137 /** \name Context support */ 1138 /*@{ */ 1139 bool irq_enabled; /**< True if irq handler is enabled */ 1140 __volatile__ long context_flag; /**< Context swapping flag */ 1141 int last_context; /**< Last current context */ 1142 /*@} */ 1143 1144 /** \name VBLANK IRQ support */ 1145 /*@{ */ 1146 1147 /* 1148 * At load time, disabling the vblank interrupt won't be allowed since 1149 * old clients may not call the modeset ioctl and therefore misbehave. 1150 * Once the modeset ioctl *has* been called though, we can safely 1151 * disable them when unused. 1152 */ 1153 bool vblank_disable_allowed; 1154 1155 /* array of size num_crtcs */ 1156 struct drm_vblank_crtc *vblank; 1157 1158 spinlock_t vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */ 1159 spinlock_t vbl_lock; 1160 struct timer_list vblank_disable_timer; 1161 1162 u32 max_vblank_count; /**< size of vblank counter register */ 1163 1164 /** 1165 * List of events 1166 */ 1167 struct list_head vblank_event_list; 1168 spinlock_t event_lock; 1169 1170 /*@} */ 1171 1172 struct drm_agp_head *agp; /**< AGP data */ 1173 1174 struct device *dev; /**< Device structure */ 1175 struct pci_dev *pdev; /**< PCI device structure */ 1176#ifdef __alpha__ 1177 struct pci_controller *hose; 1178#endif 1179 1180 struct platform_device *platformdev; /**< Platform device struture */ 1181 struct usb_device *usbdev; 1182 1183 struct drm_sg_mem *sg; /**< Scatter gather memory */ 1184 unsigned int num_crtcs; /**< Number of CRTCs on this device */ 1185 void *dev_private; /**< device private data */ 1186 struct address_space *dev_mapping; 1187 struct drm_sigdata sigdata; /**< For block_all_signals */ 1188 sigset_t sigmask; 1189 1190 struct drm_driver *driver; 1191 struct drm_local_map *agp_buffer_map; 1192 unsigned int agp_buffer_token; 1193 struct drm_minor *control; /**< Control node for card */ 1194 struct drm_minor *primary; /**< render type primary screen head */ 1195 struct drm_minor *render; /**< render node for card */ 1196 1197 struct drm_mode_config mode_config; /**< Current mode config */ 1198 1199 /** \name GEM information */ 1200 /*@{ */ 1201 struct mutex object_name_lock; 1202 struct idr object_name_idr; 1203 struct drm_vma_offset_manager *vma_offset_manager; 1204 /*@} */ 1205 int switch_power_state; 1206 1207 atomic_t unplugged; /* device has been unplugged or gone away */ 1208}; 1209 1210#define DRM_SWITCH_POWER_ON 0 1211#define DRM_SWITCH_POWER_OFF 1 1212#define DRM_SWITCH_POWER_CHANGING 2 1213#define DRM_SWITCH_POWER_DYNAMIC_OFF 3 1214 1215static __inline__ int drm_core_check_feature(struct drm_device *dev, 1216 int feature) 1217{ 1218 return ((dev->driver->driver_features & feature) ? 1 : 0); 1219} 1220 1221static inline int drm_dev_to_irq(struct drm_device *dev) 1222{ 1223 return dev->driver->bus->get_irq(dev); 1224} 1225 1226static inline void drm_device_set_unplugged(struct drm_device *dev) 1227{ 1228 smp_wmb(); 1229 atomic_set(&dev->unplugged, 1); 1230} 1231 1232static inline int drm_device_is_unplugged(struct drm_device *dev) 1233{ 1234 int ret = atomic_read(&dev->unplugged); 1235 smp_rmb(); 1236 return ret; 1237} 1238 1239static inline bool drm_modeset_is_locked(struct drm_device *dev) 1240{ 1241 return mutex_is_locked(&dev->mode_config.mutex); 1242} 1243 1244static inline bool drm_is_render_client(struct drm_file *file_priv) 1245{ 1246 return file_priv->minor->type == DRM_MINOR_RENDER; 1247} 1248 1249/******************************************************************/ 1250/** \name Internal function definitions */ 1251/*@{*/ 1252 1253 /* Driver support (drm_drv.h) */ 1254extern long drm_ioctl(struct file *filp, 1255 unsigned int cmd, unsigned long arg); 1256extern long drm_compat_ioctl(struct file *filp, 1257 unsigned int cmd, unsigned long arg); 1258extern int drm_lastclose(struct drm_device *dev); 1259 1260 /* Device support (drm_fops.h) */ 1261extern struct mutex drm_global_mutex; 1262extern int drm_open(struct inode *inode, struct file *filp); 1263extern int drm_stub_open(struct inode *inode, struct file *filp); 1264extern ssize_t drm_read(struct file *filp, char __user *buffer, 1265 size_t count, loff_t *offset); 1266extern int drm_release(struct inode *inode, struct file *filp); 1267 1268 /* Mapping support (drm_vm.h) */ 1269extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); 1270extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); 1271extern void drm_vm_open_locked(struct drm_device *dev, struct vm_area_struct *vma); 1272extern void drm_vm_close_locked(struct drm_device *dev, struct vm_area_struct *vma); 1273extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); 1274 1275 /* Memory management support (drm_memory.h) */ 1276#include <drm/drm_memory.h> 1277 1278 1279 /* Misc. IOCTL support (drm_ioctl.h) */ 1280extern int drm_irq_by_busid(struct drm_device *dev, void *data, 1281 struct drm_file *file_priv); 1282extern int drm_getunique(struct drm_device *dev, void *data, 1283 struct drm_file *file_priv); 1284extern int drm_setunique(struct drm_device *dev, void *data, 1285 struct drm_file *file_priv); 1286extern int drm_getmap(struct drm_device *dev, void *data, 1287 struct drm_file *file_priv); 1288extern int drm_getclient(struct drm_device *dev, void *data, 1289 struct drm_file *file_priv); 1290extern int drm_getstats(struct drm_device *dev, void *data, 1291 struct drm_file *file_priv); 1292extern int drm_getcap(struct drm_device *dev, void *data, 1293 struct drm_file *file_priv); 1294extern int drm_setclientcap(struct drm_device *dev, void *data, 1295 struct drm_file *file_priv); 1296extern int drm_setversion(struct drm_device *dev, void *data, 1297 struct drm_file *file_priv); 1298extern int drm_noop(struct drm_device *dev, void *data, 1299 struct drm_file *file_priv); 1300 1301 /* Context IOCTL support (drm_context.h) */ 1302extern int drm_resctx(struct drm_device *dev, void *data, 1303 struct drm_file *file_priv); 1304extern int drm_addctx(struct drm_device *dev, void *data, 1305 struct drm_file *file_priv); 1306extern int drm_getctx(struct drm_device *dev, void *data, 1307 struct drm_file *file_priv); 1308extern int drm_switchctx(struct drm_device *dev, void *data, 1309 struct drm_file *file_priv); 1310extern int drm_newctx(struct drm_device *dev, void *data, 1311 struct drm_file *file_priv); 1312extern int drm_rmctx(struct drm_device *dev, void *data, 1313 struct drm_file *file_priv); 1314 1315extern int drm_ctxbitmap_init(struct drm_device *dev); 1316extern void drm_ctxbitmap_cleanup(struct drm_device *dev); 1317extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle); 1318 1319extern int drm_setsareactx(struct drm_device *dev, void *data, 1320 struct drm_file *file_priv); 1321extern int drm_getsareactx(struct drm_device *dev, void *data, 1322 struct drm_file *file_priv); 1323 1324 /* Authentication IOCTL support (drm_auth.h) */ 1325extern int drm_getmagic(struct drm_device *dev, void *data, 1326 struct drm_file *file_priv); 1327extern int drm_authmagic(struct drm_device *dev, void *data, 1328 struct drm_file *file_priv); 1329extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic); 1330 1331/* Cache management (drm_cache.c) */ 1332void drm_clflush_pages(struct page *pages[], unsigned long num_pages); 1333void drm_clflush_sg(struct sg_table *st); 1334void drm_clflush_virt_range(char *addr, unsigned long length); 1335 1336 /* Locking IOCTL support (drm_lock.h) */ 1337extern int drm_lock(struct drm_device *dev, void *data, 1338 struct drm_file *file_priv); 1339extern int drm_unlock(struct drm_device *dev, void *data, 1340 struct drm_file *file_priv); 1341extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context); 1342extern void drm_idlelock_take(struct drm_lock_data *lock_data); 1343extern void drm_idlelock_release(struct drm_lock_data *lock_data); 1344 1345/* 1346 * These are exported to drivers so that they can implement fencing using 1347 * DMA quiscent + idle. DMA quiescent usually requires the hardware lock. 1348 */ 1349 1350extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv); 1351 1352 /* Buffer management support (drm_bufs.h) */ 1353extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); 1354extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); 1355extern int drm_addmap(struct drm_device *dev, resource_size_t offset, 1356 unsigned int size, enum drm_map_type type, 1357 enum drm_map_flags flags, struct drm_local_map **map_ptr); 1358extern int drm_addmap_ioctl(struct drm_device *dev, void *data, 1359 struct drm_file *file_priv); 1360extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map); 1361extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map); 1362extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, 1363 struct drm_file *file_priv); 1364extern int drm_addbufs(struct drm_device *dev, void *data, 1365 struct drm_file *file_priv); 1366extern int drm_infobufs(struct drm_device *dev, void *data, 1367 struct drm_file *file_priv); 1368extern int drm_markbufs(struct drm_device *dev, void *data, 1369 struct drm_file *file_priv); 1370extern int drm_freebufs(struct drm_device *dev, void *data, 1371 struct drm_file *file_priv); 1372extern int drm_mapbufs(struct drm_device *dev, void *data, 1373 struct drm_file *file_priv); 1374extern int drm_dma_ioctl(struct drm_device *dev, void *data, 1375 struct drm_file *file_priv); 1376 1377 /* DMA support (drm_dma.h) */ 1378extern int drm_legacy_dma_setup(struct drm_device *dev); 1379extern void drm_legacy_dma_takedown(struct drm_device *dev); 1380extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf); 1381extern void drm_core_reclaim_buffers(struct drm_device *dev, 1382 struct drm_file *filp); 1383 1384 /* IRQ support (drm_irq.h) */ 1385extern int drm_control(struct drm_device *dev, void *data, 1386 struct drm_file *file_priv); 1387extern int drm_irq_install(struct drm_device *dev); 1388extern int drm_irq_uninstall(struct drm_device *dev); 1389 1390extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); 1391extern int drm_wait_vblank(struct drm_device *dev, void *data, 1392 struct drm_file *filp); 1393extern u32 drm_vblank_count(struct drm_device *dev, int crtc); 1394extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc, 1395 struct timeval *vblanktime); 1396extern void drm_send_vblank_event(struct drm_device *dev, int crtc, 1397 struct drm_pending_vblank_event *e); 1398extern bool drm_handle_vblank(struct drm_device *dev, int crtc); 1399extern int drm_vblank_get(struct drm_device *dev, int crtc); 1400extern void drm_vblank_put(struct drm_device *dev, int crtc); 1401extern void drm_vblank_off(struct drm_device *dev, int crtc); 1402extern void drm_vblank_cleanup(struct drm_device *dev); 1403extern u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc, 1404 struct timeval *tvblank, unsigned flags); 1405extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, 1406 int crtc, int *max_error, 1407 struct timeval *vblank_time, 1408 unsigned flags, 1409 const struct drm_crtc *refcrtc, 1410 const struct drm_display_mode *mode); 1411extern void drm_calc_timestamping_constants(struct drm_crtc *crtc, 1412 const struct drm_display_mode *mode); 1413 1414extern bool 1415drm_mode_parse_command_line_for_connector(const char *mode_option, 1416 struct drm_connector *connector, 1417 struct drm_cmdline_mode *mode); 1418 1419extern struct drm_display_mode * 1420drm_mode_create_from_cmdline_mode(struct drm_device *dev, 1421 struct drm_cmdline_mode *cmd); 1422 1423extern int drm_display_mode_from_videomode(const struct videomode *vm, 1424 struct drm_display_mode *dmode); 1425extern int of_get_drm_display_mode(struct device_node *np, 1426 struct drm_display_mode *dmode, 1427 int index); 1428 1429/* Modesetting support */ 1430extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); 1431extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc); 1432extern int drm_modeset_ctl(struct drm_device *dev, void *data, 1433 struct drm_file *file_priv); 1434 1435 /* AGP/GART support (drm_agpsupport.h) */ 1436 1437#include <drm/drm_agpsupport.h> 1438 1439 /* Stub support (drm_stub.h) */ 1440extern int drm_setmaster_ioctl(struct drm_device *dev, void *data, 1441 struct drm_file *file_priv); 1442extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data, 1443 struct drm_file *file_priv); 1444struct drm_master *drm_master_create(struct drm_minor *minor); 1445extern struct drm_master *drm_master_get(struct drm_master *master); 1446extern void drm_master_put(struct drm_master **master); 1447 1448extern void drm_put_dev(struct drm_device *dev); 1449extern void drm_unplug_dev(struct drm_device *dev); 1450extern unsigned int drm_debug; 1451extern unsigned int drm_rnodes; 1452 1453extern unsigned int drm_vblank_offdelay; 1454extern unsigned int drm_timestamp_precision; 1455extern unsigned int drm_timestamp_monotonic; 1456 1457extern struct class *drm_class; 1458extern struct dentry *drm_debugfs_root; 1459 1460extern struct idr drm_minors_idr; 1461 1462extern struct drm_local_map *drm_getsarea(struct drm_device *dev); 1463 1464 /* Debugfs support */ 1465#if defined(CONFIG_DEBUG_FS) 1466extern int drm_debugfs_init(struct drm_minor *minor, int minor_id, 1467 struct dentry *root); 1468extern int drm_debugfs_create_files(const struct drm_info_list *files, 1469 int count, struct dentry *root, 1470 struct drm_minor *minor); 1471extern int drm_debugfs_remove_files(const struct drm_info_list *files, 1472 int count, struct drm_minor *minor); 1473extern int drm_debugfs_cleanup(struct drm_minor *minor); 1474#else 1475static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id, 1476 struct dentry *root) 1477{ 1478 return 0; 1479} 1480 1481static inline int drm_debugfs_create_files(const struct drm_info_list *files, 1482 int count, struct dentry *root, 1483 struct drm_minor *minor) 1484{ 1485 return 0; 1486} 1487 1488static inline int drm_debugfs_remove_files(const struct drm_info_list *files, 1489 int count, struct drm_minor *minor) 1490{ 1491 return 0; 1492} 1493 1494static inline int drm_debugfs_cleanup(struct drm_minor *minor) 1495{ 1496 return 0; 1497} 1498#endif 1499 1500 /* Info file support */ 1501extern int drm_name_info(struct seq_file *m, void *data); 1502extern int drm_vm_info(struct seq_file *m, void *data); 1503extern int drm_bufs_info(struct seq_file *m, void *data); 1504extern int drm_vblank_info(struct seq_file *m, void *data); 1505extern int drm_clients_info(struct seq_file *m, void* data); 1506extern int drm_gem_name_info(struct seq_file *m, void *data); 1507 1508 1509extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev, 1510 struct drm_gem_object *obj, int flags); 1511extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, 1512 struct drm_file *file_priv, uint32_t handle, uint32_t flags, 1513 int *prime_fd); 1514extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, 1515 struct dma_buf *dma_buf); 1516extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, 1517 struct drm_file *file_priv, int prime_fd, uint32_t *handle); 1518extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf); 1519 1520extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, 1521 struct drm_file *file_priv); 1522extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, 1523 struct drm_file *file_priv); 1524 1525extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, 1526 dma_addr_t *addrs, int max_pages); 1527extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); 1528extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); 1529 1530int drm_gem_dumb_destroy(struct drm_file *file, 1531 struct drm_device *dev, 1532 uint32_t handle); 1533 1534void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); 1535void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); 1536void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf); 1537 1538#if DRM_DEBUG_CODE 1539extern int drm_vma_info(struct seq_file *m, void *data); 1540#endif 1541 1542 /* Scatter Gather Support (drm_scatter.h) */ 1543extern void drm_legacy_sg_cleanup(struct drm_device *dev); 1544extern int drm_sg_alloc(struct drm_device *dev, void *data, 1545 struct drm_file *file_priv); 1546extern int drm_sg_free(struct drm_device *dev, void *data, 1547 struct drm_file *file_priv); 1548 1549 /* ATI PCIGART support (ati_pcigart.h) */ 1550extern int drm_ati_pcigart_init(struct drm_device *dev, 1551 struct drm_ati_pcigart_info * gart_info); 1552extern int drm_ati_pcigart_cleanup(struct drm_device *dev, 1553 struct drm_ati_pcigart_info * gart_info); 1554 1555extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, 1556 size_t align); 1557extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1558extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1559 1560 /* sysfs support (drm_sysfs.c) */ 1561struct drm_sysfs_class; 1562extern struct class *drm_sysfs_create(struct module *owner, char *name); 1563extern void drm_sysfs_destroy(void); 1564extern int drm_sysfs_device_add(struct drm_minor *minor); 1565extern void drm_sysfs_hotplug_event(struct drm_device *dev); 1566extern void drm_sysfs_device_remove(struct drm_minor *minor); 1567extern int drm_sysfs_connector_add(struct drm_connector *connector); 1568extern void drm_sysfs_connector_remove(struct drm_connector *connector); 1569 1570/* Graphics Execution Manager library functions (drm_gem.c) */ 1571int drm_gem_init(struct drm_device *dev); 1572void drm_gem_destroy(struct drm_device *dev); 1573void drm_gem_object_release(struct drm_gem_object *obj); 1574void drm_gem_object_free(struct kref *kref); 1575int drm_gem_object_init(struct drm_device *dev, 1576 struct drm_gem_object *obj, size_t size); 1577void drm_gem_private_object_init(struct drm_device *dev, 1578 struct drm_gem_object *obj, size_t size); 1579void drm_gem_vm_open(struct vm_area_struct *vma); 1580void drm_gem_vm_close(struct vm_area_struct *vma); 1581int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size, 1582 struct vm_area_struct *vma); 1583int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); 1584 1585#include <drm/drm_global.h> 1586 1587static inline void 1588drm_gem_object_reference(struct drm_gem_object *obj) 1589{ 1590 kref_get(&obj->refcount); 1591} 1592 1593static inline void 1594drm_gem_object_unreference(struct drm_gem_object *obj) 1595{ 1596 if (obj != NULL) 1597 kref_put(&obj->refcount, drm_gem_object_free); 1598} 1599 1600static inline void 1601drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) 1602{ 1603 if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) { 1604 struct drm_device *dev = obj->dev; 1605 1606 mutex_lock(&dev->struct_mutex); 1607 if (likely(atomic_dec_and_test(&obj->refcount.refcount))) 1608 drm_gem_object_free(&obj->refcount); 1609 mutex_unlock(&dev->struct_mutex); 1610 } 1611} 1612 1613int drm_gem_handle_create_tail(struct drm_file *file_priv, 1614 struct drm_gem_object *obj, 1615 u32 *handlep); 1616int drm_gem_handle_create(struct drm_file *file_priv, 1617 struct drm_gem_object *obj, 1618 u32 *handlep); 1619int drm_gem_handle_delete(struct drm_file *filp, u32 handle); 1620 1621 1622void drm_gem_free_mmap_offset(struct drm_gem_object *obj); 1623int drm_gem_create_mmap_offset(struct drm_gem_object *obj); 1624int drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size); 1625 1626struct page **drm_gem_get_pages(struct drm_gem_object *obj, gfp_t gfpmask); 1627void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, 1628 bool dirty, bool accessed); 1629 1630struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, 1631 struct drm_file *filp, 1632 u32 handle); 1633int drm_gem_close_ioctl(struct drm_device *dev, void *data, 1634 struct drm_file *file_priv); 1635int drm_gem_flink_ioctl(struct drm_device *dev, void *data, 1636 struct drm_file *file_priv); 1637int drm_gem_open_ioctl(struct drm_device *dev, void *data, 1638 struct drm_file *file_priv); 1639void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); 1640void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); 1641 1642extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev); 1643extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev); 1644extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev); 1645 1646static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev, 1647 unsigned int token) 1648{ 1649 struct drm_map_list *_entry; 1650 list_for_each_entry(_entry, &dev->maplist, head) 1651 if (_entry->user_token == token) 1652 return _entry->map; 1653 return NULL; 1654} 1655 1656static __inline__ void drm_core_dropmap(struct drm_local_map *map) 1657{ 1658} 1659 1660#include <drm/drm_mem_util.h> 1661 1662struct drm_device *drm_dev_alloc(struct drm_driver *driver, 1663 struct device *parent); 1664void drm_dev_free(struct drm_device *dev); 1665int drm_dev_register(struct drm_device *dev, unsigned long flags); 1666void drm_dev_unregister(struct drm_device *dev); 1667/*@}*/ 1668 1669/* PCI section */ 1670static __inline__ int drm_pci_device_is_agp(struct drm_device *dev) 1671{ 1672 if (dev->driver->device_is_agp != NULL) { 1673 int err = (*dev->driver->device_is_agp) (dev); 1674 1675 if (err != 2) { 1676 return err; 1677 } 1678 } 1679 1680 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP); 1681} 1682void drm_pci_agp_destroy(struct drm_device *dev); 1683 1684extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver); 1685extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver); 1686extern int drm_get_pci_dev(struct pci_dev *pdev, 1687 const struct pci_device_id *ent, 1688 struct drm_driver *driver); 1689 1690#define DRM_PCIE_SPEED_25 1 1691#define DRM_PCIE_SPEED_50 2 1692#define DRM_PCIE_SPEED_80 4 1693 1694extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask); 1695 1696/* platform section */ 1697extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device); 1698 1699/* returns true if currently okay to sleep */ 1700static __inline__ bool drm_can_sleep(void) 1701{ 1702 if (in_atomic() || in_dbg_master() || irqs_disabled()) 1703 return false; 1704 return true; 1705} 1706 1707#endif /* __KERNEL__ */ 1708#endif