diff options
Diffstat (limited to 'drivers/char/drm/drmP.h')
| -rw-r--r-- | drivers/char/drm/drmP.h | 91 |
1 files changed, 17 insertions, 74 deletions
diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h index 213b3ca3468e..0764b662b339 100644 --- a/drivers/char/drm/drmP.h +++ b/drivers/char/drm/drmP.h | |||
| @@ -100,8 +100,10 @@ struct drm_device; | |||
| 100 | #define DRIVER_HAVE_DMA 0x20 | 100 | #define DRIVER_HAVE_DMA 0x20 |
| 101 | #define DRIVER_HAVE_IRQ 0x40 | 101 | #define DRIVER_HAVE_IRQ 0x40 |
| 102 | #define DRIVER_IRQ_SHARED 0x80 | 102 | #define DRIVER_IRQ_SHARED 0x80 |
| 103 | #define DRIVER_IRQ_VBL 0x100 | ||
| 103 | #define DRIVER_DMA_QUEUE 0x200 | 104 | #define DRIVER_DMA_QUEUE 0x200 |
| 104 | #define DRIVER_FB_DMA 0x400 | 105 | #define DRIVER_FB_DMA 0x400 |
| 106 | #define DRIVER_IRQ_VBL2 0x800 | ||
| 105 | 107 | ||
| 106 | /***********************************************************************/ | 108 | /***********************************************************************/ |
| 107 | /** \name Begin the DRM... */ | 109 | /** \name Begin the DRM... */ |
| @@ -577,52 +579,10 @@ struct drm_driver { | |||
| 577 | int (*context_dtor) (struct drm_device *dev, int context); | 579 | int (*context_dtor) (struct drm_device *dev, int context); |
| 578 | int (*kernel_context_switch) (struct drm_device *dev, int old, | 580 | int (*kernel_context_switch) (struct drm_device *dev, int old, |
| 579 | int new); | 581 | int new); |
| 580 | void (*kernel_context_switch_unlock) (struct drm_device * dev); | 582 | void (*kernel_context_switch_unlock) (struct drm_device *dev); |
| 581 | /** | 583 | int (*vblank_wait) (struct drm_device *dev, unsigned int *sequence); |
| 582 | * get_vblank_counter - get raw hardware vblank counter | 584 | int (*vblank_wait2) (struct drm_device *dev, unsigned int *sequence); |
| 583 | * @dev: DRM device | 585 | int (*dri_library_name) (struct drm_device *dev, char *buf); |
| 584 | * @crtc: counter to fetch | ||
| 585 | * | ||
| 586 | * Driver callback for fetching a raw hardware vblank counter | ||
| 587 | * for @crtc. If a device doesn't have a hardware counter, the | ||
| 588 | * driver can simply return the value of drm_vblank_count and | ||
| 589 | * make the enable_vblank() and disable_vblank() hooks into no-ops, | ||
| 590 | * leaving interrupts enabled at all times. | ||
| 591 | * | ||
| 592 | * Wraparound handling and loss of events due to modesetting is dealt | ||
| 593 | * with in the DRM core code. | ||
| 594 | * | ||
| 595 | * RETURNS | ||
| 596 | * Raw vblank counter value. | ||
| 597 | */ | ||
| 598 | u32 (*get_vblank_counter) (struct drm_device *dev, int crtc); | ||
| 599 | |||
| 600 | /** | ||
| 601 | * enable_vblank - enable vblank interrupt events | ||
| 602 | * @dev: DRM device | ||
| 603 | * @crtc: which irq to enable | ||
| 604 | * | ||
| 605 | * Enable vblank interrupts for @crtc. If the device doesn't have | ||
| 606 | * a hardware vblank counter, this routine should be a no-op, since | ||
| 607 | * interrupts will have to stay on to keep the count accurate. | ||
| 608 | * | ||
| 609 | * RETURNS | ||
| 610 | * Zero on success, appropriate errno if the given @crtc's vblank | ||
| 611 | * interrupt cannot be enabled. | ||
| 612 | */ | ||
| 613 | int (*enable_vblank) (struct drm_device *dev, int crtc); | ||
| 614 | |||
| 615 | /** | ||
| 616 | * disable_vblank - disable vblank interrupt events | ||
| 617 | * @dev: DRM device | ||
| 618 | * @crtc: which irq to enable | ||
| 619 | * | ||
| 620 | * Disable vblank interrupts for @crtc. If the device doesn't have | ||
| 621 | * a hardware vblank counter, this routine should be a no-op, since | ||
| 622 | * interrupts will have to stay on to keep the count accurate. | ||
| 623 | */ | ||
| 624 | void (*disable_vblank) (struct drm_device *dev, int crtc); | ||
| 625 | int (*dri_library_name) (struct drm_device *dev, char * buf); | ||
| 626 | 586 | ||
| 627 | /** | 587 | /** |
| 628 | * Called by \c drm_device_is_agp. Typically used to determine if a | 588 | * Called by \c drm_device_is_agp. Typically used to determine if a |
| @@ -641,7 +601,7 @@ struct drm_driver { | |||
| 641 | 601 | ||
| 642 | irqreturn_t(*irq_handler) (DRM_IRQ_ARGS); | 602 | irqreturn_t(*irq_handler) (DRM_IRQ_ARGS); |
| 643 | void (*irq_preinstall) (struct drm_device *dev); | 603 | void (*irq_preinstall) (struct drm_device *dev); |
| 644 | int (*irq_postinstall) (struct drm_device *dev); | 604 | void (*irq_postinstall) (struct drm_device *dev); |
| 645 | void (*irq_uninstall) (struct drm_device *dev); | 605 | void (*irq_uninstall) (struct drm_device *dev); |
| 646 | void (*reclaim_buffers) (struct drm_device *dev, | 606 | void (*reclaim_buffers) (struct drm_device *dev, |
| 647 | struct drm_file * file_priv); | 607 | struct drm_file * file_priv); |
| @@ -770,21 +730,13 @@ struct drm_device { | |||
| 770 | /** \name VBLANK IRQ support */ | 730 | /** \name VBLANK IRQ support */ |
| 771 | /*@{ */ | 731 | /*@{ */ |
| 772 | 732 | ||
| 773 | wait_queue_head_t *vbl_queue; /**< VBLANK wait queue */ | 733 | wait_queue_head_t vbl_queue; /**< VBLANK wait queue */ |
| 774 | atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */ | 734 | atomic_t vbl_received; |
| 735 | atomic_t vbl_received2; /**< number of secondary VBLANK interrupts */ | ||
| 775 | spinlock_t vbl_lock; | 736 | spinlock_t vbl_lock; |
| 776 | struct list_head *vbl_sigs; /**< signal list to send on VBLANK */ | 737 | struct list_head vbl_sigs; /**< signal list to send on VBLANK */ |
| 777 | atomic_t vbl_signal_pending; /* number of signals pending on all crtcs*/ | 738 | struct list_head vbl_sigs2; /**< signals to send on secondary VBLANK */ |
| 778 | atomic_t *vblank_refcount; /* number of users of vblank interrupts per crtc */ | 739 | unsigned int vbl_pending; |
| 779 | u32 *last_vblank; /* protected by dev->vbl_lock, used */ | ||
| 780 | /* for wraparound handling */ | ||
| 781 | u32 *vblank_offset; /* used to track how many vblanks */ | ||
| 782 | int *vblank_enabled; /* so we don't call enable more than | ||
| 783 | once per disable */ | ||
| 784 | u32 *vblank_premodeset; /* were lost during modeset */ | ||
| 785 | struct timer_list vblank_disable_timer; | ||
| 786 | |||
| 787 | unsigned long max_vblank_count; /**< size of vblank counter register */ | ||
| 788 | spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ | 740 | spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ |
| 789 | void (*locked_tasklet_func)(struct drm_device *dev); | 741 | void (*locked_tasklet_func)(struct drm_device *dev); |
| 790 | 742 | ||
| @@ -804,7 +756,6 @@ struct drm_device { | |||
| 804 | #ifdef __alpha__ | 756 | #ifdef __alpha__ |
| 805 | struct pci_controller *hose; | 757 | struct pci_controller *hose; |
| 806 | #endif | 758 | #endif |
| 807 | int num_crtcs; /**< Number of CRTCs on this device */ | ||
| 808 | struct drm_sg_mem *sg; /**< Scatter gather memory */ | 759 | struct drm_sg_mem *sg; /**< Scatter gather memory */ |
| 809 | void *dev_private; /**< device private data */ | 760 | void *dev_private; /**< device private data */ |
| 810 | struct drm_sigdata sigdata; /**< For block_all_signals */ | 761 | struct drm_sigdata sigdata; /**< For block_all_signals */ |
| @@ -1039,19 +990,11 @@ extern void drm_driver_irq_preinstall(struct drm_device *dev); | |||
| 1039 | extern void drm_driver_irq_postinstall(struct drm_device *dev); | 990 | extern void drm_driver_irq_postinstall(struct drm_device *dev); |
| 1040 | extern void drm_driver_irq_uninstall(struct drm_device *dev); | 991 | extern void drm_driver_irq_uninstall(struct drm_device *dev); |
| 1041 | 992 | ||
| 1042 | extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); | 993 | extern int drm_wait_vblank(struct drm_device *dev, void *data, |
| 1043 | extern int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *filp); | ||
| 1044 | extern int drm_vblank_wait(struct drm_device * dev, unsigned int *vbl_seq); | ||
| 1045 | extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); | ||
| 1046 | extern u32 drm_vblank_count(struct drm_device *dev, int crtc); | ||
| 1047 | extern void drm_update_vblank_count(struct drm_device *dev, int crtc); | ||
| 1048 | extern void drm_handle_vblank(struct drm_device *dev, int crtc); | ||
| 1049 | extern int drm_vblank_get(struct drm_device *dev, int crtc); | ||
| 1050 | extern void drm_vblank_put(struct drm_device *dev, int crtc); | ||
| 1051 | |||
| 1052 | /* Modesetting support */ | ||
| 1053 | extern int drm_modeset_ctl(struct drm_device *dev, void *data, | ||
| 1054 | struct drm_file *file_priv); | 994 | struct drm_file *file_priv); |
| 995 | extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); | ||
| 996 | extern void drm_vbl_send_signals(struct drm_device *dev); | ||
| 997 | extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); | ||
| 1055 | 998 | ||
| 1056 | /* AGP/GART support (drm_agpsupport.h) */ | 999 | /* AGP/GART support (drm_agpsupport.h) */ |
| 1057 | extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); | 1000 | extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); |
