197fb5e8dSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. 325fdd593SJeykumar Sankaran */ 425fdd593SJeykumar Sankaran 525fdd593SJeykumar Sankaran #ifndef __DPU_CORE_IRQ_H__ 625fdd593SJeykumar Sankaran #define __DPU_CORE_IRQ_H__ 725fdd593SJeykumar Sankaran 825fdd593SJeykumar Sankaran #include "dpu_kms.h" 925fdd593SJeykumar Sankaran #include "dpu_hw_interrupts.h" 1025fdd593SJeykumar Sankaran 1125fdd593SJeykumar Sankaran /** 1225fdd593SJeykumar Sankaran * dpu_core_irq_preinstall - perform pre-installation of core IRQ handler 13dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 1425fdd593SJeykumar Sankaran * @return: none 1525fdd593SJeykumar Sankaran */ 16dd77ce4dSDmitry Baryshkov void dpu_core_irq_preinstall(struct msm_kms *kms); 1725fdd593SJeykumar Sankaran 1825fdd593SJeykumar Sankaran /** 1925fdd593SJeykumar Sankaran * dpu_core_irq_uninstall - uninstall core IRQ handler 20dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 2125fdd593SJeykumar Sankaran * @return: none 2225fdd593SJeykumar Sankaran */ 23dd77ce4dSDmitry Baryshkov void dpu_core_irq_uninstall(struct msm_kms *kms); 2425fdd593SJeykumar Sankaran 2525fdd593SJeykumar Sankaran /** 2625fdd593SJeykumar Sankaran * dpu_core_irq - core IRQ handler 27dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 2825fdd593SJeykumar Sankaran * @return: interrupt handling status 2925fdd593SJeykumar Sankaran */ 30dd77ce4dSDmitry Baryshkov irqreturn_t dpu_core_irq(struct msm_kms *kms); 3125fdd593SJeykumar Sankaran 3225fdd593SJeykumar Sankaran /** 3325fdd593SJeykumar Sankaran * dpu_core_irq_read - IRQ helper function for reading IRQ status 3425fdd593SJeykumar Sankaran * @dpu_kms: DPU handle 3525fdd593SJeykumar Sankaran * @irq_idx: irq index 3625fdd593SJeykumar Sankaran * @return: non-zero if irq detected; otherwise no irq detected 3725fdd593SJeykumar Sankaran */ 3825fdd593SJeykumar Sankaran u32 dpu_core_irq_read( 3925fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 4052db0f2bSDmitry Baryshkov int irq_idx); 4125fdd593SJeykumar Sankaran 4225fdd593SJeykumar Sankaran /** 4325fdd593SJeykumar Sankaran * dpu_core_irq_register_callback - For registering callback function on IRQ 4425fdd593SJeykumar Sankaran * interrupt 4525fdd593SJeykumar Sankaran * @dpu_kms: DPU handle 4625fdd593SJeykumar Sankaran * @irq_idx: irq index 47c929ac60SDmitry Baryshkov * @irq_cb: IRQ callback funcion. 48c929ac60SDmitry Baryshkov * @irq_arg: IRQ callback argument. 4925fdd593SJeykumar Sankaran * @return: 0 for success registering callback, otherwise failure 5025fdd593SJeykumar Sankaran * 5125fdd593SJeykumar Sankaran * This function supports registration of multiple callbacks for each interrupt. 5225fdd593SJeykumar Sankaran */ 5325fdd593SJeykumar Sankaran int dpu_core_irq_register_callback( 5425fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 5525fdd593SJeykumar Sankaran int irq_idx, 5650cf1608SDmitry Baryshkov void (*irq_cb)(void *arg), 57c929ac60SDmitry Baryshkov void *irq_arg); 5825fdd593SJeykumar Sankaran 5925fdd593SJeykumar Sankaran /** 6025fdd593SJeykumar Sankaran * dpu_core_irq_unregister_callback - For unregistering callback function on IRQ 6125fdd593SJeykumar Sankaran * interrupt 6225fdd593SJeykumar Sankaran * @dpu_kms: DPU handle 6325fdd593SJeykumar Sankaran * @irq_idx: irq index 6425fdd593SJeykumar Sankaran * @return: 0 for success registering callback, otherwise failure 6525fdd593SJeykumar Sankaran * 6625fdd593SJeykumar Sankaran * This function supports registration of multiple callbacks for each interrupt. 6725fdd593SJeykumar Sankaran */ 6825fdd593SJeykumar Sankaran int dpu_core_irq_unregister_callback( 6925fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 70c929ac60SDmitry Baryshkov int irq_idx); 7125fdd593SJeykumar Sankaran 7225fdd593SJeykumar Sankaran /** 7325fdd593SJeykumar Sankaran * dpu_debugfs_core_irq_init - register core irq debugfs 7425fdd593SJeykumar Sankaran * @dpu_kms: pointer to kms 7525fdd593SJeykumar Sankaran * @parent: debugfs directory root 7625fdd593SJeykumar Sankaran */ 773d688410SJordan Crouse void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, 7825fdd593SJeykumar Sankaran struct dentry *parent); 7925fdd593SJeykumar Sankaran 8025fdd593SJeykumar Sankaran #endif /* __DPU_CORE_IRQ_H__ */ 81