138e97a98SPiotr Raczynski /* SPDX-License-Identifier: GPL-2.0 */
238e97a98SPiotr Raczynski /* Copyright (C) 2023, Intel Corporation. */
338e97a98SPiotr Raczynski 
438e97a98SPiotr Raczynski #ifndef _ICE_IRQ_H_
538e97a98SPiotr Raczynski #define _ICE_IRQ_H_
638e97a98SPiotr Raczynski 
7cfebc0a3SPiotr Raczynski struct ice_irq_entry {
8cfebc0a3SPiotr Raczynski 	unsigned int index;
9*011670ccSPiotr Raczynski 	bool dynamic;	/* allocation type flag */
10cfebc0a3SPiotr Raczynski };
11cfebc0a3SPiotr Raczynski 
12cfebc0a3SPiotr Raczynski struct ice_irq_tracker {
13cfebc0a3SPiotr Raczynski 	struct xarray entries;
14cfebc0a3SPiotr Raczynski 	u16 num_entries;	/* total vectors available */
15*011670ccSPiotr Raczynski 	u16 num_static;	/* preallocated entries */
16cfebc0a3SPiotr Raczynski };
17cfebc0a3SPiotr Raczynski 
1838e97a98SPiotr Raczynski int ice_init_interrupt_scheme(struct ice_pf *pf);
1938e97a98SPiotr Raczynski void ice_clear_interrupt_scheme(struct ice_pf *pf);
2038e97a98SPiotr Raczynski 
21*011670ccSPiotr Raczynski struct msi_map ice_alloc_irq(struct ice_pf *pf, bool dyn_only);
224aad5335SPiotr Raczynski void ice_free_irq(struct ice_pf *pf, struct msi_map map);
23*011670ccSPiotr Raczynski int ice_get_max_used_msix_vector(struct ice_pf *pf);
244aad5335SPiotr Raczynski 
2538e97a98SPiotr Raczynski #endif
26