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 13*dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 1425fdd593SJeykumar Sankaran * @return: none 1525fdd593SJeykumar Sankaran */ 16*dd77ce4dSDmitry Baryshkov void dpu_core_irq_preinstall(struct msm_kms *kms); 1725fdd593SJeykumar Sankaran 1825fdd593SJeykumar Sankaran /** 1925fdd593SJeykumar Sankaran * dpu_core_irq_uninstall - uninstall core IRQ handler 20*dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 2125fdd593SJeykumar Sankaran * @return: none 2225fdd593SJeykumar Sankaran */ 23*dd77ce4dSDmitry Baryshkov void dpu_core_irq_uninstall(struct msm_kms *kms); 2425fdd593SJeykumar Sankaran 2525fdd593SJeykumar Sankaran /** 2625fdd593SJeykumar Sankaran * dpu_core_irq - core IRQ handler 27*dd77ce4dSDmitry Baryshkov * @kms: MSM KMS handle 2825fdd593SJeykumar Sankaran * @return: interrupt handling status 2925fdd593SJeykumar Sankaran */ 30*dd77ce4dSDmitry 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 * @clear: True to clear the irq after read 3725fdd593SJeykumar Sankaran * @return: non-zero if irq detected; otherwise no irq detected 3825fdd593SJeykumar Sankaran */ 3925fdd593SJeykumar Sankaran u32 dpu_core_irq_read( 4025fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 4125fdd593SJeykumar Sankaran int irq_idx, 4225fdd593SJeykumar Sankaran bool clear); 4325fdd593SJeykumar Sankaran 4425fdd593SJeykumar Sankaran /** 4525fdd593SJeykumar Sankaran * dpu_core_irq_register_callback - For registering callback function on IRQ 4625fdd593SJeykumar Sankaran * interrupt 4725fdd593SJeykumar Sankaran * @dpu_kms: DPU handle 4825fdd593SJeykumar Sankaran * @irq_idx: irq index 4925fdd593SJeykumar Sankaran * @irq_cb: IRQ callback structure, containing callback function 5025fdd593SJeykumar Sankaran * and argument. Passing NULL for irq_cb will unregister 5125fdd593SJeykumar Sankaran * the callback for the given irq_idx 5225fdd593SJeykumar Sankaran * This must exist until un-registration. 5325fdd593SJeykumar Sankaran * @return: 0 for success registering callback, otherwise failure 5425fdd593SJeykumar Sankaran * 5525fdd593SJeykumar Sankaran * This function supports registration of multiple callbacks for each interrupt. 5625fdd593SJeykumar Sankaran */ 5725fdd593SJeykumar Sankaran int dpu_core_irq_register_callback( 5825fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 5925fdd593SJeykumar Sankaran int irq_idx, 6025fdd593SJeykumar Sankaran struct dpu_irq_callback *irq_cb); 6125fdd593SJeykumar Sankaran 6225fdd593SJeykumar Sankaran /** 6325fdd593SJeykumar Sankaran * dpu_core_irq_unregister_callback - For unregistering callback function on IRQ 6425fdd593SJeykumar Sankaran * interrupt 6525fdd593SJeykumar Sankaran * @dpu_kms: DPU handle 6625fdd593SJeykumar Sankaran * @irq_idx: irq index 6725fdd593SJeykumar Sankaran * @irq_cb: IRQ callback structure, containing callback function 6825fdd593SJeykumar Sankaran * and argument. Passing NULL for irq_cb will unregister 6925fdd593SJeykumar Sankaran * the callback for the given irq_idx 7025fdd593SJeykumar Sankaran * This must match with registration. 7125fdd593SJeykumar Sankaran * @return: 0 for success registering callback, otherwise failure 7225fdd593SJeykumar Sankaran * 7325fdd593SJeykumar Sankaran * This function supports registration of multiple callbacks for each interrupt. 7425fdd593SJeykumar Sankaran */ 7525fdd593SJeykumar Sankaran int dpu_core_irq_unregister_callback( 7625fdd593SJeykumar Sankaran struct dpu_kms *dpu_kms, 7725fdd593SJeykumar Sankaran int irq_idx, 7825fdd593SJeykumar Sankaran struct dpu_irq_callback *irq_cb); 7925fdd593SJeykumar Sankaran 8025fdd593SJeykumar Sankaran /** 8125fdd593SJeykumar Sankaran * dpu_debugfs_core_irq_init - register core irq debugfs 8225fdd593SJeykumar Sankaran * @dpu_kms: pointer to kms 8325fdd593SJeykumar Sankaran * @parent: debugfs directory root 8425fdd593SJeykumar Sankaran */ 853d688410SJordan Crouse void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, 8625fdd593SJeykumar Sankaran struct dentry *parent); 8725fdd593SJeykumar Sankaran 8825fdd593SJeykumar Sankaran #endif /* __DPU_CORE_IRQ_H__ */ 89