Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright 2008-2017 Cisco Systems, Inc. All rights reserved.
3 : : * Copyright 2007 Nuova Systems, Inc. All rights reserved.
4 : : */
5 : :
6 : : #ifndef _VNIC_DEV_H_
7 : : #define _VNIC_DEV_H_
8 : :
9 : : #include <stdbool.h>
10 : :
11 : : #include <rte_pci.h>
12 : : #include <bus_pci_driver.h>
13 : :
14 : : #include "enic_compat.h"
15 : : #include "vnic_resource.h"
16 : : #include "vnic_devcmd.h"
17 : :
18 : : #ifndef VNIC_PADDR_TARGET
19 : : #define VNIC_PADDR_TARGET 0x0000000000000000ULL
20 : : #endif
21 : :
22 : : #ifndef readq
23 : : static inline uint64_t readq(void __iomem *reg)
24 : : {
25 : 0 : return ((uint64_t)readl((char *)reg + 0x4UL) << 32) |
26 [ # # ]: 0 : (uint64_t)readl(reg);
27 : : }
28 : :
29 : : static inline void writeq(uint64_t val, void __iomem *reg)
30 : : {
31 : 0 : writel(val & 0xffffffff, reg);
32 : 0 : writel((uint32_t)(val >> 32), (char *)reg + 0x4UL);
33 : : }
34 : : #endif
35 : :
36 : : #undef pr_fmt
37 : : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
38 : :
39 : : enum vnic_dev_intr_mode {
40 : : VNIC_DEV_INTR_MODE_UNKNOWN,
41 : : VNIC_DEV_INTR_MODE_INTX,
42 : : VNIC_DEV_INTR_MODE_MSI,
43 : : VNIC_DEV_INTR_MODE_MSIX,
44 : : };
45 : :
46 : : struct vnic_dev_bar {
47 : : void __iomem *vaddr;
48 : : dma_addr_t bus_addr;
49 : : unsigned long len;
50 : : };
51 : :
52 : : struct vnic_dev_ring {
53 : : void *descs;
54 : : size_t size;
55 : : dma_addr_t base_addr;
56 : : size_t base_align;
57 : : void *descs_unaligned;
58 : : size_t size_unaligned;
59 : : dma_addr_t base_addr_unaligned;
60 : : unsigned int desc_size;
61 : : unsigned int desc_count;
62 : : unsigned int desc_avail;
63 : : };
64 : :
65 : : struct vnic_dev_iomap_info {
66 : : dma_addr_t bus_addr;
67 : : unsigned long len;
68 : : void __iomem *vaddr;
69 : : };
70 : :
71 : : struct vnic_dev;
72 : : struct vnic_stats;
73 : :
74 : : void *vnic_dev_priv(struct vnic_dev *vdev);
75 : : unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
76 : : enum vnic_res_type type);
77 : : void vnic_register_cbacks(struct vnic_dev *vdev,
78 : : void *(*alloc_consistent)(void *priv, size_t size,
79 : : dma_addr_t *dma_handle, uint8_t *name),
80 : : void (*free_consistent)(void *priv,
81 : : size_t size, void *vaddr,
82 : : dma_addr_t dma_handle));
83 : : void vnic_register_lock(struct vnic_dev *vdev, void (*lock)(void *priv),
84 : : void (*unlock)(void *priv));
85 : : void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
86 : : unsigned int index);
87 : : dma_addr_t vnic_dev_get_res_bus_addr(struct vnic_dev *vdev,
88 : : enum vnic_res_type type, unsigned int index);
89 : : uint8_t vnic_dev_get_res_bar(struct vnic_dev *vdev,
90 : : enum vnic_res_type type);
91 : : uint32_t vnic_dev_get_res_offset(struct vnic_dev *vdev,
92 : : enum vnic_res_type type, unsigned int index);
93 : : unsigned long vnic_dev_get_res_type_len(struct vnic_dev *vdev,
94 : : enum vnic_res_type type);
95 : : unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
96 : : unsigned int desc_count, unsigned int desc_size);
97 : : void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
98 : : int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
99 : : unsigned int desc_count, unsigned int desc_size, unsigned int socket_id,
100 : : char *z_name);
101 : : void vnic_dev_free_desc_ring(struct vnic_dev *vdev,
102 : : struct vnic_dev_ring *ring);
103 : : int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
104 : : uint64_t *a0, uint64_t *a1, int wait);
105 : : int vnic_dev_cmd_args(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
106 : : uint64_t *args, int nargs, int wait);
107 : : void vnic_dev_cmd_proxy_by_index_start(struct vnic_dev *vdev, uint16_t index);
108 : : void vnic_dev_cmd_proxy_by_bdf_start(struct vnic_dev *vdev, uint16_t bdf);
109 : : void vnic_dev_cmd_proxy_end(struct vnic_dev *vdev);
110 : : int vnic_dev_fw_info(struct vnic_dev *vdev,
111 : : struct vnic_devcmd_fw_info **fw_info);
112 : : int vnic_dev_capable_adv_filters(struct vnic_dev *vdev);
113 : : int vnic_dev_capable(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd);
114 : : int vnic_dev_capable_filter_mode(struct vnic_dev *vdev, uint32_t *mode,
115 : : uint8_t *filter_actions);
116 : : void vnic_dev_capable_udp_rss_weak(struct vnic_dev *vdev, bool *cfg_chk,
117 : : bool *weak);
118 : : int vnic_dev_asic_info(struct vnic_dev *vdev, uint16_t *asic_type,
119 : : uint16_t *asic_rev);
120 : : int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, size_t size,
121 : : void *value);
122 : : int vnic_dev_stats_clear(struct vnic_dev *vdev);
123 : : int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
124 : : int vnic_dev_hang_notify(struct vnic_dev *vdev);
125 : : int vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
126 : : int broadcast, int promisc, int allmulti);
127 : : int vnic_dev_packet_filter_all(struct vnic_dev *vdev, int directed,
128 : : int multicast, int broadcast, int promisc, int allmulti);
129 : : int vnic_dev_add_addr(struct vnic_dev *vdev, uint8_t *addr);
130 : : int vnic_dev_del_addr(struct vnic_dev *vdev, uint8_t *addr);
131 : : int vnic_dev_get_mac_addr(struct vnic_dev *vdev, uint8_t *mac_addr);
132 : : int vnic_dev_raise_intr(struct vnic_dev *vdev, uint16_t intr);
133 : : int vnic_dev_notify_set(struct vnic_dev *vdev, uint16_t intr);
134 : : void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
135 : : int vnic_dev_notify_unset(struct vnic_dev *vdev);
136 : : int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
137 : : void *notify_addr, dma_addr_t notify_pa, uint16_t intr);
138 : : int vnic_dev_notify_unsetcmd(struct vnic_dev *vdev);
139 : : int vnic_dev_link_status(struct vnic_dev *vdev);
140 : : uint32_t vnic_dev_port_speed(struct vnic_dev *vdev);
141 : : uint32_t vnic_dev_msg_lvl(struct vnic_dev *vdev);
142 : : uint32_t vnic_dev_mtu(struct vnic_dev *vdev);
143 : : uint32_t vnic_dev_link_down_cnt(struct vnic_dev *vdev);
144 : : uint32_t vnic_dev_notify_status(struct vnic_dev *vdev);
145 : : uint32_t vnic_dev_uif(struct vnic_dev *vdev);
146 : : int vnic_dev_close(struct vnic_dev *vdev);
147 : : int vnic_dev_enable(struct vnic_dev *vdev);
148 : : int vnic_dev_enable_wait(struct vnic_dev *vdev);
149 : : int vnic_dev_disable(struct vnic_dev *vdev);
150 : : int vnic_dev_open(struct vnic_dev *vdev, int arg);
151 : : int vnic_dev_open_done(struct vnic_dev *vdev, int *done);
152 : : int vnic_dev_init(struct vnic_dev *vdev, int arg);
153 : : int vnic_dev_init_done(struct vnic_dev *vdev, int *done, int *err);
154 : : int vnic_dev_init_prov(struct vnic_dev *vdev, uint8_t *buf, uint32_t len);
155 : : int vnic_dev_deinit(struct vnic_dev *vdev);
156 : : void vnic_dev_intr_coal_timer_info_default(struct vnic_dev *vdev);
157 : : int vnic_dev_intr_coal_timer_info(struct vnic_dev *vdev);
158 : : int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);
159 : : int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);
160 : : int vnic_dev_hang_reset(struct vnic_dev *vdev, int arg);
161 : : int vnic_dev_hang_reset_done(struct vnic_dev *vdev, int *done);
162 : : void vnic_dev_set_intr_mode(struct vnic_dev *vdev,
163 : : enum vnic_dev_intr_mode intr_mode);
164 : : enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);
165 : : uint32_t vnic_dev_intr_coal_timer_usec_to_hw(struct vnic_dev *vdev,
166 : : uint32_t usec);
167 : : uint32_t vnic_dev_intr_coal_timer_hw_to_usec(struct vnic_dev *vdev,
168 : : uint32_t hw_cycles);
169 : : uint32_t vnic_dev_get_intr_coal_timer_max(struct vnic_dev *vdev);
170 : : void vnic_dev_unregister(struct vnic_dev *vdev);
171 : : int vnic_dev_set_ig_vlan_rewrite_mode(struct vnic_dev *vdev,
172 : : uint8_t ig_vlan_rewrite_mode);
173 : : struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
174 : : void *priv, struct rte_pci_device *pdev, struct vnic_dev_bar *bar,
175 : : unsigned int num_bars);
176 : : struct rte_pci_device *vnic_dev_get_pdev(struct vnic_dev *vdev);
177 : : struct vnic_dev *vnic_vf_rep_register(void *priv, struct vnic_dev *pf_vdev,
178 : : int vf_id);
179 : : int vnic_dev_alloc_stats_mem(struct vnic_dev *vdev);
180 : : int vnic_dev_cmd_init(struct vnic_dev *vdev, int fallback);
181 : : int vnic_dev_get_size(void);
182 : : int vnic_dev_int13(struct vnic_dev *vdev, uint64_t arg, uint32_t op);
183 : : int vnic_dev_perbi(struct vnic_dev *vdev, uint64_t arg, uint32_t op);
184 : : uint32_t vnic_dev_perbi_rebuild_cnt(struct vnic_dev *vdev);
185 : : int vnic_dev_init_prov2(struct vnic_dev *vdev, uint8_t *buf, uint32_t len);
186 : : int vnic_dev_enable2(struct vnic_dev *vdev, int active);
187 : : int vnic_dev_enable2_done(struct vnic_dev *vdev, int *status);
188 : : int vnic_dev_deinit_done(struct vnic_dev *vdev, int *status);
189 : : int vnic_dev_set_mac_addr(struct vnic_dev *vdev, uint8_t *mac_addr);
190 : : int vnic_dev_classifier(struct vnic_dev *vdev, uint8_t cmd, uint16_t *entry,
191 : : struct filter_v2 *data, struct filter_action_v2 *action_v2);
192 : : int vnic_dev_flowman_cmd(struct vnic_dev *vdev, uint64_t *args, int nargs);
193 : : int vnic_dev_overlay_offload_ctrl(struct vnic_dev *vdev,
194 : : uint8_t overlay, uint8_t config);
195 : : int vnic_dev_overlay_offload_cfg(struct vnic_dev *vdev, uint8_t overlay,
196 : : uint16_t vxlan_udp_port_number);
197 : : int vnic_dev_capable_vxlan(struct vnic_dev *vdev);
198 : : int vnic_dev_capable_geneve(struct vnic_dev *vdev);
199 : : uint64_t vnic_dev_capable_cq_entry_size(struct vnic_dev *vdev);
200 : : int vnic_dev_set_cq_entry_size(struct vnic_dev *vdev, uint32_t rq_idx,
201 : : uint32_t size_flag);
202 : : int vnic_dev_alloc_sriov_stats_mem(struct vnic_dev *vdev);
203 : : int vnic_dev_sriov_stats(struct vnic_dev *vdev, struct vnic_sriov_stats **stats);
204 : : int vnic_dev_enable_admin_qp(struct vnic_dev *vdev, uint32_t enable);
205 : :
206 : : #endif /* _VNIC_DEV_H_ */
|