xref: /dpdk/drivers/common/cnxk/roc_bphy_irq.h (revision 3d1cd3a803b3a8ac8eadf7b9b27de0a90c52ccc7)
181c7f0e4STomasz Duszynski /* SPDX-License-Identifier: BSD-3-Clause
281c7f0e4STomasz Duszynski  * Copyright(C) 2021 Marvell.
381c7f0e4STomasz Duszynski  */
481c7f0e4STomasz Duszynski 
581c7f0e4STomasz Duszynski #ifndef _ROC_BPHY_IRQ_
681c7f0e4STomasz Duszynski #define _ROC_BPHY_IRQ_
781c7f0e4STomasz Duszynski 
881c7f0e4STomasz Duszynski struct roc_bphy_irq_vec {
981c7f0e4STomasz Duszynski 	int fd;
1081c7f0e4STomasz Duszynski 	int handler_cpu;
1181c7f0e4STomasz Duszynski 	void (*handler)(int irq_num, void *isr_data);
1281c7f0e4STomasz Duszynski 	void *isr_data;
1381c7f0e4STomasz Duszynski };
1481c7f0e4STomasz Duszynski 
1581c7f0e4STomasz Duszynski struct roc_bphy_irq_chip {
1681c7f0e4STomasz Duszynski 	struct roc_bphy_irq_vec *irq_vecs;
1781c7f0e4STomasz Duszynski 	uint64_t max_irq;
1881c7f0e4STomasz Duszynski 	uint64_t avail_irq_bmask;
1981c7f0e4STomasz Duszynski 	int intfd;
2081c7f0e4STomasz Duszynski 	int n_handlers;
2181c7f0e4STomasz Duszynski 	char *mz_name;
2281c7f0e4STomasz Duszynski };
2381c7f0e4STomasz Duszynski 
24603c65bfSTomasz Duszynski struct roc_bphy_intr {
25603c65bfSTomasz Duszynski 	int irq_num;
26603c65bfSTomasz Duszynski 	void (*intr_handler)(int irq_num, void *isr_data);
27603c65bfSTomasz Duszynski 	void *isr_data;
28603c65bfSTomasz Duszynski 	int cpu;
29603c65bfSTomasz Duszynski 	/* stack for this interrupt, not supplied by a user */
30603c65bfSTomasz Duszynski 	uint8_t *sp;
31603c65bfSTomasz Duszynski };
32603c65bfSTomasz Duszynski 
3381c7f0e4STomasz Duszynski __roc_api struct roc_bphy_irq_chip *roc_bphy_intr_init(void);
3481c7f0e4STomasz Duszynski __roc_api void roc_bphy_intr_fini(struct roc_bphy_irq_chip *irq_chip);
35804c108bSTomasz Duszynski __roc_api void roc_bphy_intr_handler(unsigned int irq_num);
36c968c618STomasz Duszynski __roc_api bool roc_bphy_intr_available(struct roc_bphy_irq_chip *irq_chip,
37c968c618STomasz Duszynski 				       int irq_num);
389cb3fb77SJakub Palider __roc_api int roc_bphy_intr_clear(struct roc_bphy_irq_chip *chip, int irq_num);
39*3d1cd3a8SJakub Palider __roc_api uint64_t roc_bphy_intr_max_get(struct roc_bphy_irq_chip *irq_chip);
40603c65bfSTomasz Duszynski __roc_api int roc_bphy_intr_register(struct roc_bphy_irq_chip *irq_chip,
41603c65bfSTomasz Duszynski 				     struct roc_bphy_intr *intr);
4281c7f0e4STomasz Duszynski 
4381c7f0e4STomasz Duszynski #endif /* _ROC_BPHY_IRQ_ */
44