File Index
Files and directories
Sign in
FILE

hinic3_hwif.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/huawei/hinic3/hinic3_hwif.h C
 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
10struct hinic3_hwdev;
11
12enum hinic3_func_type {
13	HINIC3_FUNC_TYPE_VF = 1,
14};
15
16struct 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
23struct 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
37static_assert(sizeof(struct hinic3_func_attr) == 20);
38
39struct 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
48enum hinic3_outbound_ctrl {
49	ENABLE_OUTBOUND  = 0x0,
50	DISABLE_OUTBOUND = 0x1,
51};
52
53enum hinic3_doorbell_ctrl {
54	ENABLE_DOORBELL  = 0,
55	DISABLE_DOORBELL = 1,
56};
57
58enum hinic3_msix_state {
59	HINIC3_MSIX_ENABLE,
60	HINIC3_MSIX_DISABLE,
61};
62
63enum hinic3_msix_auto_mask {
64	HINIC3_CLR_MSIX_AUTO_MASK,
65	HINIC3_SET_MSIX_AUTO_MASK,
66};
67
68u32 hinic3_hwif_read_reg(struct hinic3_hwif *hwif, u32 reg);
69void hinic3_hwif_write_reg(struct hinic3_hwif *hwif, u32 reg, u32 val);
70
71void hinic3_toggle_doorbell(struct hinic3_hwif *hwif,
72			    enum hinic3_doorbell_ctrl flag);
73
74int hinic3_alloc_db_addr(struct hinic3_hwdev *hwdev, void __iomem **db_base,
75			 void __iomem **dwqe_base);
76void hinic3_free_db_addr(struct hinic3_hwdev *hwdev, const u8 __iomem *db_base);
77
78int hinic3_init_hwif(struct hinic3_hwdev *hwdev);
79void hinic3_free_hwif(struct hinic3_hwdev *hwdev);
80
81void hinic3_set_msix_state(struct hinic3_hwdev *hwdev, u16 msix_idx,
82			   enum hinic3_msix_state flag);
83void hinic3_msix_intr_clear_resend_bit(struct hinic3_hwdev *hwdev, u16 msix_idx,
84				       u8 clear_resend_en);
85void hinic3_set_msix_auto_mask_state(struct hinic3_hwdev *hwdev, u16 msix_idx,
86				     enum hinic3_msix_auto_mask flag);
87
88u16 hinic3_global_func_id(struct hinic3_hwdev *hwdev);
89
90#endif
~/ Read-only file preview.