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 "enic_compat.h"
10#include "vnic_resource.h"
11#include "vnic_devcmd.h"
12
13#ifndef VNIC_PADDR_TARGET
14#define VNIC_PADDR_TARGET	0x0000000000000000ULL
15#endif
16
17enum vnic_dev_intr_mode {
18	VNIC_DEV_INTR_MODE_UNKNOWN,
19	VNIC_DEV_INTR_MODE_INTX,
20	VNIC_DEV_INTR_MODE_MSI,
21	VNIC_DEV_INTR_MODE_MSIX,
22};
23
24struct vnic_dev_bar {
25	void __iomem *vaddr;
26	unsigned long len;
27};
28
29struct vnic_dev_ring {
30	void *descs;		/* vaddr */
31	size_t size;
32	bus_addr_t base_addr;	/* paddr */
33	size_t base_align;
34	void *descs_unaligned;
35	size_t size_unaligned;
36	bus_addr_t base_addr_unaligned;
37	unsigned int desc_size;
38	unsigned int desc_count;
39	unsigned int desc_avail;
40	unsigned int last_count;
41};
42
43struct vnic_dev_iomap_info {
44	bus_addr_t bus_addr;
45	unsigned long len;
46	void __iomem *vaddr;
47};
48
49struct vnic_dev;
50struct vnic_stats;
51
52void *vnic_dev_priv(struct vnic_dev *vdev);
53unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
54    enum vnic_res_type type);
55void vnic_register_cbacks(struct vnic_dev *vdev,
56    void *(*alloc_consistent)(void *priv, size_t size,
57	bus_addr_t *dma_handle, struct iflib_dma_info *res, u8 *name),
58    void (*free_consistent)(void *priv,
59	size_t size, void *vaddr,
60	bus_addr_t dma_handle, struct iflib_dma_info *res));
61void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
62    unsigned int index);
63uint8_t vnic_dev_get_res_bar(struct vnic_dev *vdev,
64    enum vnic_res_type type);
65uint32_t vnic_dev_get_res_offset(struct vnic_dev *vdev,
66    enum vnic_res_type type, unsigned int index);
67unsigned long vnic_dev_get_res_type_len(struct vnic_dev *vdev,
68					enum vnic_res_type type);
69unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
70    unsigned int desc_count, unsigned int desc_size);
71void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
72int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
73    u64 *a0, u64 *a1, int wait);
74int vnic_dev_cmd_args(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
75    u64 *args, int nargs, int wait);
76void vnic_dev_cmd_proxy_by_index_start(struct vnic_dev *vdev, u16 index);
77void vnic_dev_cmd_proxy_by_bdf_start(struct vnic_dev *vdev, u16 bdf);
78void vnic_dev_cmd_proxy_end(struct vnic_dev *vdev);
79int vnic_dev_fw_info(struct vnic_dev *vdev,
80    struct vnic_devcmd_fw_info **fw_info);
81int vnic_dev_capable_adv_filters(struct vnic_dev *vdev);
82int vnic_dev_capable(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd);
83int vnic_dev_capable_filter_mode(struct vnic_dev *vdev, u32 *mode,
84    u8 *filter_actions);
85void vnic_dev_capable_udp_rss_weak(struct vnic_dev *vdev, bool *cfg_chk,
86    bool *weak);
87int vnic_dev_asic_info(struct vnic_dev *vdev, u16 *asic_type, u16 *asic_rev);
88int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, size_t size,
89    void *value);
90int vnic_dev_stats_clear(struct vnic_dev *vdev);
91int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
92int vnic_dev_counter_dma_cfg(struct vnic_dev *vdev, u32 period,
93    u32 num_counters);
94int vnic_dev_hang_notify(struct vnic_dev *vdev);
95int vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
96    int broadcast, int promisc, int allmulti);
97int vnic_dev_packet_filter_all(struct vnic_dev *vdev, int directed,
98    int multicast, int broadcast, int promisc, int allmulti);
99int vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr);
100int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
101int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
102int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
103int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
104void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
105int vnic_dev_notify_unset(struct vnic_dev *vdev);
106int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
107    void *notify_addr, bus_addr_t notify_pa, u16 intr);
108int vnic_dev_notify_unsetcmd(struct vnic_dev *vdev);
109int vnic_dev_link_status(struct vnic_dev *vdev);
110u32 vnic_dev_port_speed(struct vnic_dev *vdev);
111u32 vnic_dev_msg_lvl(struct vnic_dev *vdev);
112u32 vnic_dev_mtu(struct vnic_dev *vdev);
113u32 vnic_dev_link_down_cnt(struct vnic_dev *vdev);
114u32 vnic_dev_notify_status(struct vnic_dev *vdev);
115u32 vnic_dev_uif(struct vnic_dev *vdev);
116int vnic_dev_close(struct vnic_dev *vdev);
117int vnic_dev_enable(struct vnic_dev *vdev);
118int vnic_dev_enable_wait(struct vnic_dev *vdev);
119int vnic_dev_disable(struct vnic_dev *vdev);
120int vnic_dev_open(struct vnic_dev *vdev, int arg);
121int vnic_dev_open_done(struct vnic_dev *vdev, int *done);
122int vnic_dev_init(struct vnic_dev *vdev, int arg);
123int vnic_dev_init_done(struct vnic_dev *vdev, int *done, int *err);
124int vnic_dev_init_prov(struct vnic_dev *vdev, u8 *buf, u32 len);
125int vnic_dev_deinit(struct vnic_dev *vdev);
126void vnic_dev_intr_coal_timer_info_default(struct vnic_dev *vdev);
127int vnic_dev_intr_coal_timer_info(struct vnic_dev *vdev);
128int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);
129int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);
130int vnic_dev_hang_reset(struct vnic_dev *vdev, int arg);
131int vnic_dev_hang_reset_done(struct vnic_dev *vdev, int *done);
132void vnic_dev_set_intr_mode(struct vnic_dev *vdev,
133    enum vnic_dev_intr_mode intr_mode);
134enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);
135u32 vnic_dev_intr_coal_timer_usec_to_hw(struct vnic_dev *vdev, u32 usec);
136u32 vnic_dev_intr_coal_timer_hw_to_usec(struct vnic_dev *vdev, u32 hw_cycles);
137u32 vnic_dev_get_intr_coal_timer_max(struct vnic_dev *vdev);
138int vnic_dev_set_ig_vlan_rewrite_mode(struct vnic_dev *vdev,
139    u8 ig_vlan_rewrite_mode);
140struct enic;
141struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
142    struct enic_bar_info *mem, unsigned int num_bars);
143struct rte_pci_device *vnic_dev_get_pdev(struct vnic_dev *vdev);
144int vnic_dev_alloc_stats_mem(struct vnic_dev *vdev);
145int vnic_dev_alloc_counter_mem(struct vnic_dev *vdev);
146int vnic_dev_cmd_init(struct vnic_dev *vdev, int fallback);
147int vnic_dev_get_size(void);
148int vnic_dev_int13(struct vnic_dev *vdev, u64 arg, u32 op);
149int vnic_dev_perbi(struct vnic_dev *vdev, u64 arg, u32 op);
150u32 vnic_dev_perbi_rebuild_cnt(struct vnic_dev *vdev);
151int vnic_dev_init_prov2(struct vnic_dev *vdev, u8 *buf, u32 len);
152int vnic_dev_enable2(struct vnic_dev *vdev, int active);
153int vnic_dev_enable2_done(struct vnic_dev *vdev, int *status);
154int vnic_dev_deinit_done(struct vnic_dev *vdev, int *status);
155int vnic_dev_set_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
156int vnic_dev_classifier(struct vnic_dev *vdev, u8 cmd, u16 *entry,
157    struct filter_v2 *data, struct filter_action_v2 *action_v2);
158int vnic_dev_overlay_offload_ctrl(struct vnic_dev *vdev,
159    u8 overlay, u8 config);
160int vnic_dev_overlay_offload_cfg(struct vnic_dev *vdev, u8 overlay,
161    u16 vxlan_udp_port_number);
162int vnic_dev_capable_vxlan(struct vnic_dev *vdev);
163bool vnic_dev_counter_alloc(struct vnic_dev *vdev, uint32_t *idx);
164bool vnic_dev_counter_free(struct vnic_dev *vdev, uint32_t idx);
165bool vnic_dev_counter_query(struct vnic_dev *vdev, uint32_t idx,
166    bool reset, uint64_t *packets, uint64_t *bytes);
167
168device_t dev_from_vnic_dev(struct vnic_dev *vdev);
169
170#endif /* _VNIC_DEV_H_ */
171