Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
0002 /* Copyright (c) 2021 Mellanox Technologies. */
0003 
0004 #ifndef __MLX5_IRQ_H__
0005 #define __MLX5_IRQ_H__
0006 
0007 #include <linux/mlx5/driver.h>
0008 
0009 #define MLX5_COMP_EQS_PER_SF 8
0010 
0011 struct mlx5_irq;
0012 
0013 int mlx5_irq_table_init(struct mlx5_core_dev *dev);
0014 void mlx5_irq_table_cleanup(struct mlx5_core_dev *dev);
0015 int mlx5_irq_table_create(struct mlx5_core_dev *dev);
0016 void mlx5_irq_table_destroy(struct mlx5_core_dev *dev);
0017 int mlx5_irq_table_get_num_comp(struct mlx5_irq_table *table);
0018 int mlx5_irq_table_get_sfs_vec(struct mlx5_irq_table *table);
0019 struct mlx5_irq_table *mlx5_irq_table_get(struct mlx5_core_dev *dev);
0020 
0021 int mlx5_set_msix_vec_count(struct mlx5_core_dev *dev, int devfn,
0022                 int msix_vec_count);
0023 int mlx5_get_default_msix_vec_count(struct mlx5_core_dev *dev, int num_vfs);
0024 
0025 struct mlx5_irq *mlx5_ctrl_irq_request(struct mlx5_core_dev *dev);
0026 void mlx5_ctrl_irq_release(struct mlx5_irq *ctrl_irq);
0027 struct mlx5_irq *mlx5_irq_request(struct mlx5_core_dev *dev, u16 vecidx,
0028                   struct cpumask *affinity);
0029 int mlx5_irqs_request_vectors(struct mlx5_core_dev *dev, u16 *cpus, int nirqs,
0030                   struct mlx5_irq **irqs);
0031 void mlx5_irqs_release_vectors(struct mlx5_irq **irqs, int nirqs);
0032 int mlx5_irq_attach_nb(struct mlx5_irq *irq, struct notifier_block *nb);
0033 int mlx5_irq_detach_nb(struct mlx5_irq *irq, struct notifier_block *nb);
0034 struct cpumask *mlx5_irq_get_affinity_mask(struct mlx5_irq *irq);
0035 int mlx5_irq_get_index(struct mlx5_irq *irq);
0036 
0037 struct mlx5_irq_pool;
0038 #ifdef CONFIG_MLX5_SF
0039 int mlx5_irq_affinity_irqs_request_auto(struct mlx5_core_dev *dev, int nirqs,
0040                     struct mlx5_irq **irqs);
0041 struct mlx5_irq *mlx5_irq_affinity_request(struct mlx5_irq_pool *pool,
0042                        const struct cpumask *req_mask);
0043 void mlx5_irq_affinity_irqs_release(struct mlx5_core_dev *dev, struct mlx5_irq **irqs,
0044                     int num_irqs);
0045 #else
0046 static inline int mlx5_irq_affinity_irqs_request_auto(struct mlx5_core_dev *dev, int nirqs,
0047                               struct mlx5_irq **irqs)
0048 {
0049     return -EOPNOTSUPP;
0050 }
0051 
0052 static inline struct mlx5_irq *
0053 mlx5_irq_affinity_request(struct mlx5_irq_pool *pool, const struct cpumask *req_mask)
0054 {
0055     return ERR_PTR(-EOPNOTSUPP);
0056 }
0057 
0058 static inline void mlx5_irq_affinity_irqs_release(struct mlx5_core_dev *dev,
0059                           struct mlx5_irq **irqs, int num_irqs) {}
0060 #endif
0061 #endif /* __MLX5_IRQ_H__ */