1*17fcb3dcSFan Gong /* SPDX-License-Identifier: GPL-2.0 */ 2*17fcb3dcSFan Gong /* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. */ 3*17fcb3dcSFan Gong 4*17fcb3dcSFan Gong #ifndef _HINIC3_HWIF_H_ 5*17fcb3dcSFan Gong #define _HINIC3_HWIF_H_ 6*17fcb3dcSFan Gong 7*17fcb3dcSFan Gong #include <linux/build_bug.h> 8*17fcb3dcSFan Gong #include <linux/spinlock_types.h> 9*17fcb3dcSFan Gong 10*17fcb3dcSFan Gong struct hinic3_hwdev; 11*17fcb3dcSFan Gong 12*17fcb3dcSFan Gong enum hinic3_func_type { 13*17fcb3dcSFan Gong HINIC3_FUNC_TYPE_VF = 1, 14*17fcb3dcSFan Gong }; 15*17fcb3dcSFan Gong 16*17fcb3dcSFan Gong struct hinic3_db_area { 17*17fcb3dcSFan Gong unsigned long *db_bitmap_array; 18*17fcb3dcSFan Gong u32 db_max_areas; 19*17fcb3dcSFan Gong /* protect doorbell area alloc and free */ 20*17fcb3dcSFan Gong spinlock_t idx_lock; 21*17fcb3dcSFan Gong }; 22*17fcb3dcSFan Gong 23*17fcb3dcSFan Gong struct hinic3_func_attr { 24*17fcb3dcSFan Gong enum hinic3_func_type func_type; 25*17fcb3dcSFan Gong u16 func_global_idx; 26*17fcb3dcSFan Gong u16 global_vf_id_of_pf; 27*17fcb3dcSFan Gong u16 num_irqs; 28*17fcb3dcSFan Gong u16 num_sq; 29*17fcb3dcSFan Gong u8 port_to_port_idx; 30*17fcb3dcSFan Gong u8 pci_intf_idx; 31*17fcb3dcSFan Gong u8 ppf_idx; 32*17fcb3dcSFan Gong u8 num_aeqs; 33*17fcb3dcSFan Gong u8 num_ceqs; 34*17fcb3dcSFan Gong u8 msix_flex_en; 35*17fcb3dcSFan Gong }; 36*17fcb3dcSFan Gong 37*17fcb3dcSFan Gong static_assert(sizeof(struct hinic3_func_attr) == 20); 38*17fcb3dcSFan Gong 39*17fcb3dcSFan Gong struct hinic3_hwif { 40*17fcb3dcSFan Gong u8 __iomem *cfg_regs_base; 41*17fcb3dcSFan Gong u64 db_base_phy; 42*17fcb3dcSFan Gong u64 db_dwqe_len; 43*17fcb3dcSFan Gong u8 __iomem *db_base; 44*17fcb3dcSFan Gong struct hinic3_db_area db_area; 45*17fcb3dcSFan Gong struct hinic3_func_attr attr; 46*17fcb3dcSFan Gong }; 47*17fcb3dcSFan Gong 48*17fcb3dcSFan Gong enum hinic3_msix_state { 49*17fcb3dcSFan Gong HINIC3_MSIX_ENABLE, 50*17fcb3dcSFan Gong HINIC3_MSIX_DISABLE, 51*17fcb3dcSFan Gong }; 52*17fcb3dcSFan Gong 53*17fcb3dcSFan Gong void hinic3_set_msix_state(struct hinic3_hwdev *hwdev, u16 msix_idx, 54*17fcb3dcSFan Gong enum hinic3_msix_state flag); 55*17fcb3dcSFan Gong 56*17fcb3dcSFan Gong u16 hinic3_global_func_id(struct hinic3_hwdev *hwdev); 57*17fcb3dcSFan Gong 58*17fcb3dcSFan Gong #endif 59