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