132 lines
3.9 KiB
C
132 lines
3.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __DPU_CORE_IRQ_H__
|
|
#define __DPU_CORE_IRQ_H__
|
|
|
|
#include "dpu_kms.h"
|
|
#include "dpu_hw_interrupts.h"
|
|
|
|
/**
|
|
* dpu_core_irq_preinstall - perform pre-installation of core IRQ handler
|
|
* @dpu_kms: DPU handle
|
|
* @return: none
|
|
*/
|
|
void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms);
|
|
|
|
/**
|
|
* dpu_core_irq_uninstall - uninstall core IRQ handler
|
|
* @dpu_kms: DPU handle
|
|
* @return: none
|
|
*/
|
|
void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms);
|
|
|
|
/**
|
|
* dpu_core_irq - core IRQ handler
|
|
* @dpu_kms: DPU handle
|
|
* @return: interrupt handling status
|
|
*/
|
|
irqreturn_t dpu_core_irq(struct dpu_kms *dpu_kms);
|
|
|
|
/**
|
|
* dpu_core_irq_idx_lookup - IRQ helper function for lookup irq_idx from HW
|
|
* interrupt mapping table.
|
|
* @dpu_kms: DPU handle
|
|
* @intr_type: DPU HW interrupt type for lookup
|
|
* @instance_idx: DPU HW block instance defined in dpu_hw_mdss.h
|
|
* @return: irq_idx or -EINVAL when fail to lookup
|
|
*/
|
|
int dpu_core_irq_idx_lookup(
|
|
struct dpu_kms *dpu_kms,
|
|
enum dpu_intr_type intr_type,
|
|
uint32_t instance_idx);
|
|
|
|
/**
|
|
* dpu_core_irq_enable - IRQ helper function for enabling one or more IRQs
|
|
* @dpu_kms: DPU handle
|
|
* @irq_idxs: Array of irq index
|
|
* @irq_count: Number of irq_idx provided in the array
|
|
* @return: 0 for success enabling IRQ, otherwise failure
|
|
*
|
|
* This function increments count on each enable and decrements on each
|
|
* disable. Interrupts is enabled if count is 0 before increment.
|
|
*/
|
|
int dpu_core_irq_enable(
|
|
struct dpu_kms *dpu_kms,
|
|
int *irq_idxs,
|
|
uint32_t irq_count);
|
|
|
|
/**
|
|
* dpu_core_irq_disable - IRQ helper function for disabling one of more IRQs
|
|
* @dpu_kms: DPU handle
|
|
* @irq_idxs: Array of irq index
|
|
* @irq_count: Number of irq_idx provided in the array
|
|
* @return: 0 for success disabling IRQ, otherwise failure
|
|
*
|
|
* This function increments count on each enable and decrements on each
|
|
* disable. Interrupts is disabled if count is 0 after decrement.
|
|
*/
|
|
int dpu_core_irq_disable(
|
|
struct dpu_kms *dpu_kms,
|
|
int *irq_idxs,
|
|
uint32_t irq_count);
|
|
|
|
/**
|
|
* dpu_core_irq_read - IRQ helper function for reading IRQ status
|
|
* @dpu_kms: DPU handle
|
|
* @irq_idx: irq index
|
|
* @clear: True to clear the irq after read
|
|
* @return: non-zero if irq detected; otherwise no irq detected
|
|
*/
|
|
u32 dpu_core_irq_read(
|
|
struct dpu_kms *dpu_kms,
|
|
int irq_idx,
|
|
bool clear);
|
|
|
|
/**
|
|
* dpu_core_irq_register_callback - For registering callback function on IRQ
|
|
* interrupt
|
|
* @dpu_kms: DPU handle
|
|
* @irq_idx: irq index
|
|
* @irq_cb: IRQ callback structure, containing callback function
|
|
* and argument. Passing NULL for irq_cb will unregister
|
|
* the callback for the given irq_idx
|
|
* This must exist until un-registration.
|
|
* @return: 0 for success registering callback, otherwise failure
|
|
*
|
|
* This function supports registration of multiple callbacks for each interrupt.
|
|
*/
|
|
int dpu_core_irq_register_callback(
|
|
struct dpu_kms *dpu_kms,
|
|
int irq_idx,
|
|
struct dpu_irq_callback *irq_cb);
|
|
|
|
/**
|
|
* dpu_core_irq_unregister_callback - For unregistering callback function on IRQ
|
|
* interrupt
|
|
* @dpu_kms: DPU handle
|
|
* @irq_idx: irq index
|
|
* @irq_cb: IRQ callback structure, containing callback function
|
|
* and argument. Passing NULL for irq_cb will unregister
|
|
* the callback for the given irq_idx
|
|
* This must match with registration.
|
|
* @return: 0 for success registering callback, otherwise failure
|
|
*
|
|
* This function supports registration of multiple callbacks for each interrupt.
|
|
*/
|
|
int dpu_core_irq_unregister_callback(
|
|
struct dpu_kms *dpu_kms,
|
|
int irq_idx,
|
|
struct dpu_irq_callback *irq_cb);
|
|
|
|
/**
|
|
* dpu_debugfs_core_irq_init - register core irq debugfs
|
|
* @dpu_kms: pointer to kms
|
|
* @parent: debugfs directory root
|
|
*/
|
|
void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
|
|
struct dentry *parent);
|
|
|
|
#endif /* __DPU_CORE_IRQ_H__ */
|