1/* SPDX-License-Identifier: GPL-2.0-only */
2/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
3 */
4
5#ifndef __DPU_CORE_IRQ_H__
6#define __DPU_CORE_IRQ_H__
7
8#include "dpu_kms.h"
9#include "dpu_hw_interrupts.h"
10
11/**
12 * dpu_core_irq_preinstall - perform pre-installation of core IRQ handler
13 * @kms:		MSM KMS handle
14 * @return:		none
15 */
16void dpu_core_irq_preinstall(struct msm_kms *kms);
17
18/**
19 * dpu_core_irq_uninstall - uninstall core IRQ handler
20 * @kms:		MSM KMS handle
21 * @return:		none
22 */
23void dpu_core_irq_uninstall(struct msm_kms *kms);
24
25/**
26 * dpu_core_irq - core IRQ handler
27 * @kms:		MSM KMS handle
28 * @return:		interrupt handling status
29 */
30irqreturn_t dpu_core_irq(struct msm_kms *kms);
31
32/**
33 * dpu_core_irq_read - IRQ helper function for reading IRQ status
34 * @dpu_kms:		DPU handle
35 * @irq_idx:		irq index
36 * @return:		non-zero if irq detected; otherwise no irq detected
37 */
38u32 dpu_core_irq_read(
39		struct dpu_kms *dpu_kms,
40		unsigned int irq_idx);
41
42/**
43 * dpu_core_irq_register_callback - For registering callback function on IRQ
44 *                             interrupt
45 * @dpu_kms:		DPU handle
46 * @irq_idx:		irq index
47 * @irq_cb:		IRQ callback funcion.
48 * @irq_arg:		IRQ callback argument.
49 * @return:		0 for success registering callback, otherwise failure
50 *
51 * This function supports registration of multiple callbacks for each interrupt.
52 */
53int dpu_core_irq_register_callback(
54		struct dpu_kms *dpu_kms,
55		unsigned int irq_idx,
56		void (*irq_cb)(void *arg),
57		void *irq_arg);
58
59/**
60 * dpu_core_irq_unregister_callback - For unregistering callback function on IRQ
61 *                             interrupt
62 * @dpu_kms:		DPU handle
63 * @irq_idx:		irq index
64 * @return:		0 for success registering callback, otherwise failure
65 *
66 * This function supports registration of multiple callbacks for each interrupt.
67 */
68int dpu_core_irq_unregister_callback(
69		struct dpu_kms *dpu_kms,
70		unsigned int irq_idx);
71
72/**
73 * dpu_debugfs_core_irq_init - register core irq debugfs
74 * @dpu_kms: pointer to kms
75 * @parent: debugfs directory root
76 */
77void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
78		struct dentry *parent);
79
80#endif /* __DPU_CORE_IRQ_H__ */
81