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