sdk-hwV1.3/lichee/linux-4.9/drivers/aipu/src/aipu_irq.h

73 lines
1.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2018-2021 Arm Technology (China) Co., Ltd. All rights reserved. */
/**
* @file aipu_irq.h
* Header of the interrupt request and handlers' abstraction
*/
#ifndef __AIPU_IRQ_H__
#define __AIPU_IRQ_H__
#include <linux/device.h>
#include <linux/workqueue.h>
typedef int (*aipu_irq_uhandler_t) (void *arg);
typedef void (*aipu_irq_bhandler_t) (void *arg);
typedef void (*aipu_irq_trigger_t) (void *arg);
typedef void (*aipu_irq_ack_t) (void *arg);
/**
* struct aipu_irq_object - IRQ instance for each hw module in AIPU with interrupt function
*
* @irqnum: interrupt number used to request IRQ
* @core: aipu core struct pointer
* @work: work struct
* @dev: device pointer
* @aipu_wq: workqueue struct pointer
*/
struct aipu_irq_object {
u32 irqnum;
void *core;
struct work_struct work;
struct device *dev;
struct workqueue_struct *aipu_wq;
};
/**
* @brief initialize an AIPU IRQ object for a HW module with interrupt function
*
* @param irqnum: interrupt number
* @param core: aipu core struct pointer
* @param description: irq object description string
*
* @return irq_object pointer if successful; NULL if failed;
*/
struct aipu_irq_object *aipu_create_irq_object(u32 irqnum, void *core, char *description);
/**
* @brief workqueue schedule API
*
* @param irq_obj: interrupt object
*
* @return void
*/
void aipu_irq_schedulework(struct aipu_irq_object *irq_obj);
/**
* @brief workqueue flush API
*
* @param irq_obj: interrupt object
*
* @return void
*/
void aipu_irq_flush_workqueue(struct aipu_irq_object *irq_obj);
/**
* @brief workqueue terminate API
*
* @param irq_obj: interrupt object
*
* @return void
*/
void aipu_destroy_irq_object(struct aipu_irq_object *irq_obj);
#endif /* __AIPU_IRQ_H__ */