From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: [PATCH 10/25] cobalt/kernel: dovetail: implement sirq services Date: Thu, 20 May 2021 23:44:20 +0200 Message-Id: <98123ff55dc3f0287c9ac27e03ef536e6028b1c2.1621547075.git.jan.kiszka@siemens.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xenomai@xenomai.org From: Hongzhan Chen inband sirq request through synthetic_irq_domain and free and post srq. Signed-off-by: Hongzhan Chen Signed-off-by: Jan Kiszka --- .../cobalt/kernel/dovetail/pipeline/sirq.h | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/include/cobalt/kernel/dovetail/pipeline/sirq.h b/include/cobalt/kernel/dovetail/pipeline/sirq.h index be9dc587fb..1da9d13b21 100644 --- a/include/cobalt/kernel/dovetail/pipeline/sirq.h +++ b/include/cobalt/kernel/dovetail/pipeline/sirq.h @@ -23,9 +23,24 @@ int pipeline_create_inband_sirq(irqreturn_t (*handler)(int irq, void *dev_id)) * Allocate an IRQ from the synthetic interrupt domain then * trap it to @handler, to be fired from the in-band stage. */ - TODO(); + int sirq, ret; - return 0; + sirq = irq_create_direct_mapping(synthetic_irq_domain); + if (sirq == 0) + return -EAGAIN; + + ret = __request_percpu_irq(sirq, + handler, + IRQF_NO_THREAD, + "Inband sirq", + &cobalt_machine_cpudata); + + if (ret) { + irq_dispose_mapping(sirq); + return ret; + } + + return sirq; } static inline @@ -35,13 +50,16 @@ void pipeline_delete_inband_sirq(int sirq) * Free the synthetic IRQ then deallocate it to its * originating domain. */ - TODO(); + free_percpu_irq(sirq, + &cobalt_machine_cpudata); + + irq_dispose_mapping(sirq); } static inline void pipeline_post_sirq(int sirq) { /* Trigger the synthetic IRQ */ - TODO(); + irq_post_inband(sirq); } -#endif /* !_COBALT_KERNEL_IPIPE_SIRQ_H */ +#endif /* !_COBALT_KERNEL_DOVETAIL_SIRQ_H */ -- 2.26.2