xref: /freebsd-src/sys/dev/enic/vnic_dev.h (revision 0acab8b3d1336d4db73a9946ef76b4bcd0b0aabe)
19c067b84SDoug Ambrisko /* SPDX-License-Identifier: BSD-3-Clause
29c067b84SDoug Ambrisko  * Copyright 2008-2017 Cisco Systems, Inc.  All rights reserved.
39c067b84SDoug Ambrisko  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
49c067b84SDoug Ambrisko  */
59c067b84SDoug Ambrisko 
69c067b84SDoug Ambrisko #ifndef _VNIC_DEV_H_
79c067b84SDoug Ambrisko #define _VNIC_DEV_H_
89c067b84SDoug Ambrisko 
99c067b84SDoug Ambrisko #include "enic_compat.h"
109c067b84SDoug Ambrisko #include "vnic_resource.h"
119c067b84SDoug Ambrisko #include "vnic_devcmd.h"
129c067b84SDoug Ambrisko 
139c067b84SDoug Ambrisko #ifndef VNIC_PADDR_TARGET
149c067b84SDoug Ambrisko #define VNIC_PADDR_TARGET	0x0000000000000000ULL
159c067b84SDoug Ambrisko #endif
169c067b84SDoug Ambrisko 
179c067b84SDoug Ambrisko enum vnic_dev_intr_mode {
189c067b84SDoug Ambrisko 	VNIC_DEV_INTR_MODE_UNKNOWN,
199c067b84SDoug Ambrisko 	VNIC_DEV_INTR_MODE_INTX,
209c067b84SDoug Ambrisko 	VNIC_DEV_INTR_MODE_MSI,
219c067b84SDoug Ambrisko 	VNIC_DEV_INTR_MODE_MSIX,
229c067b84SDoug Ambrisko };
239c067b84SDoug Ambrisko 
249c067b84SDoug Ambrisko struct vnic_dev_bar {
259c067b84SDoug Ambrisko 	void __iomem *vaddr;
269c067b84SDoug Ambrisko 	unsigned long len;
279c067b84SDoug Ambrisko };
289c067b84SDoug Ambrisko 
299c067b84SDoug Ambrisko struct vnic_dev_ring {
309c067b84SDoug Ambrisko 	void *descs;		/* vaddr */
319c067b84SDoug Ambrisko 	size_t size;
329c067b84SDoug Ambrisko 	bus_addr_t base_addr;	/* paddr */
339c067b84SDoug Ambrisko 	size_t base_align;
349c067b84SDoug Ambrisko 	void *descs_unaligned;
359c067b84SDoug Ambrisko 	size_t size_unaligned;
369c067b84SDoug Ambrisko 	bus_addr_t base_addr_unaligned;
379c067b84SDoug Ambrisko 	unsigned int desc_size;
389c067b84SDoug Ambrisko 	unsigned int desc_count;
399c067b84SDoug Ambrisko 	unsigned int desc_avail;
409c067b84SDoug Ambrisko 	unsigned int last_count;
41*0acab8b3SDoug Ambrisko 	iflib_dma_info_t ifdip;
429c067b84SDoug Ambrisko };
439c067b84SDoug Ambrisko 
449c067b84SDoug Ambrisko struct vnic_dev_iomap_info {
459c067b84SDoug Ambrisko 	bus_addr_t bus_addr;
469c067b84SDoug Ambrisko 	unsigned long len;
479c067b84SDoug Ambrisko 	void __iomem *vaddr;
489c067b84SDoug Ambrisko };
499c067b84SDoug Ambrisko 
509c067b84SDoug Ambrisko struct vnic_dev;
519c067b84SDoug Ambrisko struct vnic_stats;
529c067b84SDoug Ambrisko 
539c067b84SDoug Ambrisko void *vnic_dev_priv(struct vnic_dev *vdev);
549c067b84SDoug Ambrisko unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
559c067b84SDoug Ambrisko     enum vnic_res_type type);
569c067b84SDoug Ambrisko void vnic_register_cbacks(struct vnic_dev *vdev,
579c067b84SDoug Ambrisko     void *(*alloc_consistent)(void *priv, size_t size,
589c067b84SDoug Ambrisko 	bus_addr_t *dma_handle, struct iflib_dma_info *res, u8 *name),
599c067b84SDoug Ambrisko     void (*free_consistent)(void *priv,
609c067b84SDoug Ambrisko 	size_t size, void *vaddr,
619c067b84SDoug Ambrisko 	bus_addr_t dma_handle, struct iflib_dma_info *res));
629c067b84SDoug Ambrisko void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
639c067b84SDoug Ambrisko     unsigned int index);
649c067b84SDoug Ambrisko uint8_t vnic_dev_get_res_bar(struct vnic_dev *vdev,
659c067b84SDoug Ambrisko     enum vnic_res_type type);
669c067b84SDoug Ambrisko uint32_t vnic_dev_get_res_offset(struct vnic_dev *vdev,
679c067b84SDoug Ambrisko     enum vnic_res_type type, unsigned int index);
689c067b84SDoug Ambrisko unsigned long vnic_dev_get_res_type_len(struct vnic_dev *vdev,
699c067b84SDoug Ambrisko 					enum vnic_res_type type);
709c067b84SDoug Ambrisko unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
719c067b84SDoug Ambrisko     unsigned int desc_count, unsigned int desc_size);
729c067b84SDoug Ambrisko void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
73*0acab8b3SDoug Ambrisko int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
74*0acab8b3SDoug Ambrisko     unsigned int desc_count, unsigned int desc_size);
75*0acab8b3SDoug Ambrisko void vnic_dev_free_desc_ring(struct vnic_dev *vdev,
76*0acab8b3SDoug Ambrisko     struct vnic_dev_ring *ring);
779c067b84SDoug Ambrisko int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
789c067b84SDoug Ambrisko     u64 *a0, u64 *a1, int wait);
799c067b84SDoug Ambrisko int vnic_dev_cmd_args(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
809c067b84SDoug Ambrisko     u64 *args, int nargs, int wait);
819c067b84SDoug Ambrisko void vnic_dev_cmd_proxy_by_index_start(struct vnic_dev *vdev, u16 index);
829c067b84SDoug Ambrisko void vnic_dev_cmd_proxy_by_bdf_start(struct vnic_dev *vdev, u16 bdf);
839c067b84SDoug Ambrisko void vnic_dev_cmd_proxy_end(struct vnic_dev *vdev);
849c067b84SDoug Ambrisko int vnic_dev_fw_info(struct vnic_dev *vdev,
859c067b84SDoug Ambrisko     struct vnic_devcmd_fw_info **fw_info);
869c067b84SDoug Ambrisko int vnic_dev_capable_adv_filters(struct vnic_dev *vdev);
879c067b84SDoug Ambrisko int vnic_dev_capable(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd);
889c067b84SDoug Ambrisko int vnic_dev_capable_filter_mode(struct vnic_dev *vdev, u32 *mode,
899c067b84SDoug Ambrisko     u8 *filter_actions);
909c067b84SDoug Ambrisko void vnic_dev_capable_udp_rss_weak(struct vnic_dev *vdev, bool *cfg_chk,
919c067b84SDoug Ambrisko     bool *weak);
929c067b84SDoug Ambrisko int vnic_dev_asic_info(struct vnic_dev *vdev, u16 *asic_type, u16 *asic_rev);
939c067b84SDoug Ambrisko int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, size_t size,
949c067b84SDoug Ambrisko     void *value);
959c067b84SDoug Ambrisko int vnic_dev_stats_clear(struct vnic_dev *vdev);
969c067b84SDoug Ambrisko int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
979c067b84SDoug Ambrisko int vnic_dev_counter_dma_cfg(struct vnic_dev *vdev, u32 period,
989c067b84SDoug Ambrisko     u32 num_counters);
999c067b84SDoug Ambrisko int vnic_dev_hang_notify(struct vnic_dev *vdev);
1009c067b84SDoug Ambrisko int vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
1019c067b84SDoug Ambrisko     int broadcast, int promisc, int allmulti);
1029c067b84SDoug Ambrisko int vnic_dev_packet_filter_all(struct vnic_dev *vdev, int directed,
1039c067b84SDoug Ambrisko     int multicast, int broadcast, int promisc, int allmulti);
1049c067b84SDoug Ambrisko int vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr);
1059c067b84SDoug Ambrisko int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
1069c067b84SDoug Ambrisko int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
1079c067b84SDoug Ambrisko int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
1089c067b84SDoug Ambrisko int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
1099c067b84SDoug Ambrisko void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
1109c067b84SDoug Ambrisko int vnic_dev_notify_unset(struct vnic_dev *vdev);
1119c067b84SDoug Ambrisko int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
1129c067b84SDoug Ambrisko     void *notify_addr, bus_addr_t notify_pa, u16 intr);
1139c067b84SDoug Ambrisko int vnic_dev_notify_unsetcmd(struct vnic_dev *vdev);
1149c067b84SDoug Ambrisko int vnic_dev_link_status(struct vnic_dev *vdev);
1159c067b84SDoug Ambrisko u32 vnic_dev_port_speed(struct vnic_dev *vdev);
1169c067b84SDoug Ambrisko u32 vnic_dev_msg_lvl(struct vnic_dev *vdev);
1179c067b84SDoug Ambrisko u32 vnic_dev_mtu(struct vnic_dev *vdev);
1189c067b84SDoug Ambrisko u32 vnic_dev_link_down_cnt(struct vnic_dev *vdev);
1199c067b84SDoug Ambrisko u32 vnic_dev_notify_status(struct vnic_dev *vdev);
1209c067b84SDoug Ambrisko u32 vnic_dev_uif(struct vnic_dev *vdev);
1219c067b84SDoug Ambrisko int vnic_dev_close(struct vnic_dev *vdev);
1229c067b84SDoug Ambrisko int vnic_dev_enable(struct vnic_dev *vdev);
1239c067b84SDoug Ambrisko int vnic_dev_enable_wait(struct vnic_dev *vdev);
1249c067b84SDoug Ambrisko int vnic_dev_disable(struct vnic_dev *vdev);
1259c067b84SDoug Ambrisko int vnic_dev_open(struct vnic_dev *vdev, int arg);
1269c067b84SDoug Ambrisko int vnic_dev_open_done(struct vnic_dev *vdev, int *done);
1279c067b84SDoug Ambrisko int vnic_dev_init(struct vnic_dev *vdev, int arg);
1289c067b84SDoug Ambrisko int vnic_dev_init_done(struct vnic_dev *vdev, int *done, int *err);
1299c067b84SDoug Ambrisko int vnic_dev_init_prov(struct vnic_dev *vdev, u8 *buf, u32 len);
1309c067b84SDoug Ambrisko int vnic_dev_deinit(struct vnic_dev *vdev);
1319c067b84SDoug Ambrisko void vnic_dev_intr_coal_timer_info_default(struct vnic_dev *vdev);
1329c067b84SDoug Ambrisko int vnic_dev_intr_coal_timer_info(struct vnic_dev *vdev);
1339c067b84SDoug Ambrisko int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);
1349c067b84SDoug Ambrisko int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);
1359c067b84SDoug Ambrisko int vnic_dev_hang_reset(struct vnic_dev *vdev, int arg);
1369c067b84SDoug Ambrisko int vnic_dev_hang_reset_done(struct vnic_dev *vdev, int *done);
1379c067b84SDoug Ambrisko void vnic_dev_set_intr_mode(struct vnic_dev *vdev,
1389c067b84SDoug Ambrisko     enum vnic_dev_intr_mode intr_mode);
1399c067b84SDoug Ambrisko enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);
1409c067b84SDoug Ambrisko u32 vnic_dev_intr_coal_timer_usec_to_hw(struct vnic_dev *vdev, u32 usec);
1419c067b84SDoug Ambrisko u32 vnic_dev_intr_coal_timer_hw_to_usec(struct vnic_dev *vdev, u32 hw_cycles);
1429c067b84SDoug Ambrisko u32 vnic_dev_get_intr_coal_timer_max(struct vnic_dev *vdev);
1439c067b84SDoug Ambrisko int vnic_dev_set_ig_vlan_rewrite_mode(struct vnic_dev *vdev,
1449c067b84SDoug Ambrisko     u8 ig_vlan_rewrite_mode);
1459c067b84SDoug Ambrisko struct enic;
1469c067b84SDoug Ambrisko struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
1479c067b84SDoug Ambrisko     struct enic_bar_info *mem, unsigned int num_bars);
1489c067b84SDoug Ambrisko struct rte_pci_device *vnic_dev_get_pdev(struct vnic_dev *vdev);
1499c067b84SDoug Ambrisko int vnic_dev_alloc_stats_mem(struct vnic_dev *vdev);
1509c067b84SDoug Ambrisko int vnic_dev_alloc_counter_mem(struct vnic_dev *vdev);
151*0acab8b3SDoug Ambrisko int vnic_dev_cmd_init(struct vnic_dev *vdev);
1529c067b84SDoug Ambrisko int vnic_dev_get_size(void);
1539c067b84SDoug Ambrisko int vnic_dev_int13(struct vnic_dev *vdev, u64 arg, u32 op);
1549c067b84SDoug Ambrisko int vnic_dev_perbi(struct vnic_dev *vdev, u64 arg, u32 op);
1559c067b84SDoug Ambrisko u32 vnic_dev_perbi_rebuild_cnt(struct vnic_dev *vdev);
1569c067b84SDoug Ambrisko int vnic_dev_init_prov2(struct vnic_dev *vdev, u8 *buf, u32 len);
1579c067b84SDoug Ambrisko int vnic_dev_enable2(struct vnic_dev *vdev, int active);
1589c067b84SDoug Ambrisko int vnic_dev_enable2_done(struct vnic_dev *vdev, int *status);
1599c067b84SDoug Ambrisko int vnic_dev_deinit_done(struct vnic_dev *vdev, int *status);
1609c067b84SDoug Ambrisko int vnic_dev_set_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
1619c067b84SDoug Ambrisko int vnic_dev_classifier(struct vnic_dev *vdev, u8 cmd, u16 *entry,
1629c067b84SDoug Ambrisko     struct filter_v2 *data, struct filter_action_v2 *action_v2);
1639c067b84SDoug Ambrisko int vnic_dev_overlay_offload_ctrl(struct vnic_dev *vdev,
1649c067b84SDoug Ambrisko     u8 overlay, u8 config);
1659c067b84SDoug Ambrisko int vnic_dev_overlay_offload_cfg(struct vnic_dev *vdev, u8 overlay,
1669c067b84SDoug Ambrisko     u16 vxlan_udp_port_number);
1679c067b84SDoug Ambrisko int vnic_dev_capable_vxlan(struct vnic_dev *vdev);
1689c067b84SDoug Ambrisko bool vnic_dev_counter_alloc(struct vnic_dev *vdev, uint32_t *idx);
1699c067b84SDoug Ambrisko bool vnic_dev_counter_free(struct vnic_dev *vdev, uint32_t idx);
1709c067b84SDoug Ambrisko bool vnic_dev_counter_query(struct vnic_dev *vdev, uint32_t idx,
1719c067b84SDoug Ambrisko     bool reset, uint64_t *packets, uint64_t *bytes);
172*0acab8b3SDoug Ambrisko void vnic_dev_deinit_devcmd2(struct vnic_dev *vdev);
1739c067b84SDoug Ambrisko 
1749c067b84SDoug Ambrisko device_t dev_from_vnic_dev(struct vnic_dev *vdev);
1759c067b84SDoug Ambrisko 
1769c067b84SDoug Ambrisko #endif /* _VNIC_DEV_H_ */
177