2019-04-29 15:29:27 +03:00
/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2019 Intel Corporation
*/
# ifndef __I915_IRQ_H__
# define __I915_IRQ_H__
2019-08-06 13:07:24 +03:00
# include <linux/ktime.h>
2019-04-29 15:29:27 +03:00
# include <linux/types.h>
2019-08-11 22:06:33 +01:00
# include "i915_reg.h"
2019-04-29 15:29:27 +03:00
2021-08-18 13:11:05 +03:00
enum pipe ;
2019-08-06 13:07:24 +03:00
struct drm_crtc ;
struct drm_device ;
struct drm_display_mode ;
2019-04-29 15:29:27 +03:00
struct drm_i915_private ;
struct intel_crtc ;
2019-08-11 22:06:33 +01:00
struct intel_uncore ;
2019-07-12 13:24:25 +02:00
void intel_irq_init ( struct drm_i915_private * dev_priv ) ;
void intel_irq_fini ( struct drm_i915_private * dev_priv ) ;
2019-04-29 15:29:27 +03:00
int intel_irq_install ( struct drm_i915_private * dev_priv ) ;
void intel_irq_uninstall ( struct drm_i915_private * dev_priv ) ;
u32 i915_pipestat_enable_mask ( struct drm_i915_private * dev_priv ,
enum pipe pipe ) ;
void
i915_enable_pipestat ( struct drm_i915_private * dev_priv , enum pipe pipe ,
u32 status_mask ) ;
void
i915_disable_pipestat ( struct drm_i915_private * dev_priv , enum pipe pipe ,
u32 status_mask ) ;
void valleyview_enable_display_irqs ( struct drm_i915_private * dev_priv ) ;
void valleyview_disable_display_irqs ( struct drm_i915_private * dev_priv ) ;
2022-02-03 16:02:29 +02:00
void intel_hpd_irq_setup ( struct drm_i915_private * i915 ) ;
2019-04-29 15:29:27 +03:00
void i915_hotplug_interrupt_update ( struct drm_i915_private * dev_priv ,
u32 mask ,
u32 bits ) ;
2021-08-18 13:11:05 +03:00
void ilk_enable_display_irq ( struct drm_i915_private * i915 , u32 bits ) ;
void ilk_disable_display_irq ( struct drm_i915_private * i915 , u32 bits ) ;
void bdw_enable_pipe_irq ( struct drm_i915_private * i915 , enum pipe pipe , u32 bits ) ;
void bdw_disable_pipe_irq ( struct drm_i915_private * i915 , enum pipe pipe , u32 bits ) ;
void ibx_enable_display_interrupt ( struct drm_i915_private * i915 , u32 bits ) ;
void ibx_disable_display_interrupt ( struct drm_i915_private * i915 , u32 bits ) ;
2019-04-29 15:29:27 +03:00
void gen5_enable_gt_irq ( struct drm_i915_private * dev_priv , u32 mask ) ;
void gen5_disable_gt_irq ( struct drm_i915_private * dev_priv , u32 mask ) ;
void gen11_reset_rps_interrupts ( struct drm_i915_private * dev_priv ) ;
void gen6_reset_rps_interrupts ( struct drm_i915_private * dev_priv ) ;
void gen6_enable_rps_interrupts ( struct drm_i915_private * dev_priv ) ;
void gen6_disable_rps_interrupts ( struct drm_i915_private * dev_priv ) ;
void gen6_rps_reset_ei ( struct drm_i915_private * dev_priv ) ;
2019-08-06 13:07:24 +03:00
u32 gen6_sanitize_rps_pm_mask ( const struct drm_i915_private * i915 , u32 mask ) ;
2019-04-29 15:29:27 +03:00
void intel_runtime_pm_disable_interrupts ( struct drm_i915_private * dev_priv ) ;
void intel_runtime_pm_enable_interrupts ( struct drm_i915_private * dev_priv ) ;
2019-08-06 13:07:24 +03:00
bool intel_irqs_enabled ( struct drm_i915_private * dev_priv ) ;
void intel_synchronize_irq ( struct drm_i915_private * i915 ) ;
2021-07-01 19:36:17 +02:00
void intel_synchronize_hardirq ( struct drm_i915_private * i915 ) ;
2019-07-02 18:17:23 +03:00
2019-04-29 15:29:27 +03:00
int intel_get_crtc_scanline ( struct intel_crtc * crtc ) ;
void gen8_irq_power_well_post_enable ( struct drm_i915_private * dev_priv ,
u8 pipe_mask ) ;
void gen8_irq_power_well_pre_disable ( struct drm_i915_private * dev_priv ,
u8 pipe_mask ) ;
2021-05-25 17:06:54 -07:00
u32 gen8_de_pipe_underrun_mask ( struct drm_i915_private * dev_priv ) ;
2019-04-29 15:29:27 +03:00
2020-01-23 14:59:28 +01:00
bool intel_crtc_get_vblank_timestamp ( struct drm_crtc * crtc , int * max_error ,
ktime_t * vblank_time , bool in_vblank_irq ) ;
2019-06-19 20:08:42 +03:00
2019-06-19 20:08:40 +03:00
u32 i915_get_vblank_counter ( struct drm_crtc * crtc ) ;
u32 g4x_get_vblank_counter ( struct drm_crtc * crtc ) ;
int i8xx_enable_vblank ( struct drm_crtc * crtc ) ;
2019-10-03 17:02:31 +03:00
int i915gm_enable_vblank ( struct drm_crtc * crtc ) ;
2019-06-19 20:08:40 +03:00
int i965_enable_vblank ( struct drm_crtc * crtc ) ;
int ilk_enable_vblank ( struct drm_crtc * crtc ) ;
int bdw_enable_vblank ( struct drm_crtc * crtc ) ;
void i8xx_disable_vblank ( struct drm_crtc * crtc ) ;
2019-10-03 17:02:31 +03:00
void i915gm_disable_vblank ( struct drm_crtc * crtc ) ;
2019-06-19 20:08:40 +03:00
void i965_disable_vblank ( struct drm_crtc * crtc ) ;
void ilk_disable_vblank ( struct drm_crtc * crtc ) ;
void bdw_disable_vblank ( struct drm_crtc * crtc ) ;
2019-08-11 22:06:33 +01:00
void gen2_irq_reset ( struct intel_uncore * uncore ) ;
void gen3_irq_reset ( struct intel_uncore * uncore , i915_reg_t imr ,
i915_reg_t iir , i915_reg_t ier ) ;
void gen2_irq_init ( struct intel_uncore * uncore ,
u32 imr_val , u32 ier_val ) ;
void gen3_irq_init ( struct intel_uncore * uncore ,
i915_reg_t imr , u32 imr_val ,
i915_reg_t ier , u32 ier_val ,
i915_reg_t iir ) ;
# define GEN8_IRQ_RESET_NDX(uncore, type, which) \
( { \
unsigned int which_ = which ; \
gen3_irq_reset ( ( uncore ) , GEN8_ # # type # # _IMR ( which_ ) , \
GEN8_ # # type # # _IIR ( which_ ) , GEN8_ # # type # # _IER ( which_ ) ) ; \
} )
# define GEN3_IRQ_RESET(uncore, type) \
gen3_irq_reset ( ( uncore ) , type # # IMR , type # # IIR , type # # IER )
# define GEN2_IRQ_RESET(uncore) \
gen2_irq_reset ( uncore )
# define GEN8_IRQ_INIT_NDX(uncore, type, which, imr_val, ier_val) \
( { \
unsigned int which_ = which ; \
gen3_irq_init ( ( uncore ) , \
GEN8_ # # type # # _IMR ( which_ ) , imr_val , \
GEN8_ # # type # # _IER ( which_ ) , ier_val , \
GEN8_ # # type # # _IIR ( which_ ) ) ; \
} )
# define GEN3_IRQ_INIT(uncore, type, imr_val, ier_val) \
gen3_irq_init ( ( uncore ) , \
type # # IMR , imr_val , \
type # # IER , ier_val , \
type # # IIR )
# define GEN2_IRQ_INIT(uncore, imr_val, ier_val) \
gen2_irq_init ( ( uncore ) , imr_val , ier_val )
2019-04-29 15:29:27 +03:00
# endif /* __I915_IRQ_H__ */