Lines Matching refs:vdev
20 void *vnic_dev_priv(struct vnic_dev *vdev) in vnic_dev_priv() argument
22 return vdev->priv; in vnic_dev_priv()
25 void vnic_register_cbacks(struct vnic_dev *vdev, in vnic_register_cbacks() argument
32 vdev->alloc_consistent = alloc_consistent; in vnic_register_cbacks()
33 vdev->free_consistent = free_consistent; in vnic_register_cbacks()
36 static int vnic_dev_discover_res(struct vnic_dev *vdev, in vnic_dev_discover_res() argument
39 struct enic_softc *softc = vdev->softc; in vnic_dev_discover_res()
106 vdev->res[type].count = count; in vnic_dev_discover_res()
107 bcopy(&softc->mem, &vdev->res[type].bar, sizeof(softc->mem)); in vnic_dev_discover_res()
108 vdev->res[type].bar.offset = bar_offset; in vnic_dev_discover_res()
118 unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev, in vnic_dev_get_res_count() argument
121 return vdev->res[type].count; in vnic_dev_get_res_count()
124 void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type, in vnic_dev_get_res() argument
129 if (!vdev->res[type].bar.tag) in vnic_dev_get_res()
133 bcopy(&vdev->res[type], res, sizeof(*res)); in vnic_dev_get_res()
181 static int _vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in _vnic_dev_cmd() argument
184 struct vnic_res __iomem *devcmd = vdev->devcmd; in _vnic_dev_cmd()
201 ENIC_BUS_WRITE_REGION_4(devcmd, DEVCMD_ARGS(0), (void *)&vdev->args[0], VNIC_DEVCMD_NARGS * 2); in _vnic_dev_cmd()
232 …ENIC_BUS_READ_REGION_4(devcmd, bar, DEVCMD_ARGS(0), (void *)&vdev->args[0], VNIC_DEVCMD_NARGS * 2); in _vnic_dev_cmd()
243 static int vnic_dev_cmd_proxy(struct vnic_dev *vdev, in vnic_dev_cmd_proxy() argument
258 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd_proxy()
260 vdev->args[0] = vdev->proxy_index; in vnic_dev_cmd_proxy()
261 vdev->args[1] = cmd; in vnic_dev_cmd_proxy()
262 memcpy(&vdev->args[2], args, nargs * sizeof(args[0])); in vnic_dev_cmd_proxy()
264 err = _vnic_dev_cmd(vdev, proxy_cmd, wait); in vnic_dev_cmd_proxy()
268 status = (u32)vdev->args[0]; in vnic_dev_cmd_proxy()
270 err = (int)vdev->args[1]; in vnic_dev_cmd_proxy()
277 memcpy(args, &vdev->args[1], nargs * sizeof(args[0])); in vnic_dev_cmd_proxy()
282 static int vnic_dev_cmd_no_proxy(struct vnic_dev *vdev, in vnic_dev_cmd_no_proxy() argument
291 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd_no_proxy()
292 memcpy(vdev->args, args, nargs * sizeof(args[0])); in vnic_dev_cmd_no_proxy()
294 err = _vnic_dev_cmd(vdev, cmd, wait); in vnic_dev_cmd_no_proxy()
296 memcpy(args, vdev->args, nargs * sizeof(args[0])); in vnic_dev_cmd_no_proxy()
301 int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in vnic_dev_cmd() argument
309 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd()
311 switch (vdev->proxy) { in vnic_dev_cmd()
313 err = vnic_dev_cmd_proxy(vdev, CMD_PROXY_BY_INDEX, cmd, in vnic_dev_cmd()
317 err = vnic_dev_cmd_proxy(vdev, CMD_PROXY_BY_BDF, cmd, in vnic_dev_cmd()
322 err = vnic_dev_cmd_no_proxy(vdev, cmd, args, 2, wait); in vnic_dev_cmd()
334 int vnic_dev_cmd_args(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in vnic_dev_cmd_args() argument
337 switch (vdev->proxy) { in vnic_dev_cmd_args()
339 return vnic_dev_cmd_proxy(vdev, CMD_PROXY_BY_INDEX, cmd, in vnic_dev_cmd_args()
342 return vnic_dev_cmd_proxy(vdev, CMD_PROXY_BY_BDF, cmd, in vnic_dev_cmd_args()
346 return vnic_dev_cmd_no_proxy(vdev, cmd, args, nargs, wait); in vnic_dev_cmd_args()
350 static int vnic_dev_advanced_filters_cap(struct vnic_dev *vdev, u64 *args, in vnic_dev_advanced_filters_cap() argument
356 return vnic_dev_cmd_args(vdev, CMD_CAPABILITY, args, nargs, 1000); in vnic_dev_advanced_filters_cap()
359 int vnic_dev_capable_adv_filters(struct vnic_dev *vdev) in vnic_dev_capable_adv_filters() argument
365 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable_adv_filters()
381 int vnic_dev_capable_filter_mode(struct vnic_dev *vdev, u32 *mode, in vnic_dev_capable_filter_mode() argument
388 err = vnic_dev_advanced_filters_cap(vdev, args, 4); in vnic_dev_capable_filter_mode()
401 err = vnic_dev_cmd_args(vdev, CMD_CAPABILITY, args, 2, 1000); in vnic_dev_capable_filter_mode()
425 void vnic_dev_capable_udp_rss_weak(struct vnic_dev *vdev, bool *cfg_chk, in vnic_dev_capable_udp_rss_weak() argument
434 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable_udp_rss_weak()
441 int vnic_dev_capable(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd) in vnic_dev_capable() argument
447 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable()
452 int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, size_t size, in vnic_dev_spec() argument
462 err = vnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait); in vnic_dev_spec()
485 int vnic_dev_stats_clear(struct vnic_dev *vdev) in vnic_dev_stats_clear() argument
490 return vnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait); in vnic_dev_stats_clear()
493 int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats) in vnic_dev_stats_dump() argument
499 if (!vdev->stats) in vnic_dev_stats_dump()
502 *stats = vdev->stats; in vnic_dev_stats_dump()
503 a0 = vdev->stats_res.idi_paddr; in vnic_dev_stats_dump()
506 bus_dmamap_sync(vdev->stats_res.idi_tag, in vnic_dev_stats_dump()
507 vdev->stats_res.idi_map, in vnic_dev_stats_dump()
509 rc = vnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait); in vnic_dev_stats_dump()
510 bus_dmamap_sync(vdev->stats_res.idi_tag, in vnic_dev_stats_dump()
511 vdev->stats_res.idi_map, in vnic_dev_stats_dump()
519 int vnic_dev_counter_dma_cfg(struct vnic_dev *vdev, u32 period, in vnic_dev_counter_dma_cfg() argument
533 args[1] = vdev->flow_counters_res.idi_paddr; in vnic_dev_counter_dma_cfg()
535 bus_dmamap_sync(vdev->flow_counters_res.idi_tag, in vnic_dev_counter_dma_cfg()
536 vdev->flow_counters_res.idi_map, in vnic_dev_counter_dma_cfg()
538 err = vnic_dev_cmd_args(vdev, CMD_COUNTER_DMA_CONFIG, args, 3, wait); in vnic_dev_counter_dma_cfg()
539 bus_dmamap_sync(vdev->flow_counters_res.idi_tag, in vnic_dev_counter_dma_cfg()
540 vdev->flow_counters_res.idi_map, in vnic_dev_counter_dma_cfg()
545 vdev->flow_counters_dma_active = (num_counters != 0 && in vnic_dev_counter_dma_cfg()
551 int vnic_dev_close(struct vnic_dev *vdev) in vnic_dev_close() argument
556 return vnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait); in vnic_dev_close()
559 int vnic_dev_enable_wait(struct vnic_dev *vdev) in vnic_dev_enable_wait() argument
564 if (vnic_dev_capable(vdev, CMD_ENABLE_WAIT)) in vnic_dev_enable_wait()
565 return vnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait); in vnic_dev_enable_wait()
567 return vnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait); in vnic_dev_enable_wait()
570 int vnic_dev_disable(struct vnic_dev *vdev) in vnic_dev_disable() argument
575 return vnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait); in vnic_dev_disable()
578 int vnic_dev_open(struct vnic_dev *vdev, int arg) in vnic_dev_open() argument
583 return vnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait); in vnic_dev_open()
586 int vnic_dev_open_done(struct vnic_dev *vdev, int *done) in vnic_dev_open_done() argument
594 err = vnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait); in vnic_dev_open_done()
603 int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr) in vnic_dev_get_mac_addr() argument
612 err = vnic_dev_cmd(vdev, CMD_GET_MAC_ADDR, &a0, &a1, wait); in vnic_dev_get_mac_addr()
622 int vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast, in vnic_dev_packet_filter() argument
635 err = vnic_dev_cmd(vdev, CMD_PACKET_FILTER, &a0, &a1, wait); in vnic_dev_packet_filter()
642 int vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr) in vnic_dev_add_addr() argument
652 err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait); in vnic_dev_add_addr()
661 int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr) in vnic_dev_del_addr() argument
671 err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait); in vnic_dev_del_addr()
680 int vnic_dev_set_ig_vlan_rewrite_mode(struct vnic_dev *vdev, in vnic_dev_set_ig_vlan_rewrite_mode() argument
686 if (vnic_dev_capable(vdev, CMD_IG_VLAN_REWRITE_MODE)) in vnic_dev_set_ig_vlan_rewrite_mode()
687 return vnic_dev_cmd(vdev, CMD_IG_VLAN_REWRITE_MODE, in vnic_dev_set_ig_vlan_rewrite_mode()
693 void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state) in vnic_dev_set_reset_flag() argument
695 vdev->in_reset = state; in vnic_dev_set_reset_flag()
698 static inline int vnic_dev_in_reset(struct vnic_dev *vdev) in vnic_dev_in_reset() argument
700 return vdev->in_reset; in vnic_dev_in_reset()
703 int vnic_dev_notify_setcmd(struct vnic_dev *vdev, in vnic_dev_notify_setcmd() argument
710 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_setcmd()
711 vdev->notify_res.idi_map, in vnic_dev_notify_setcmd()
714 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_setcmd()
715 vdev->notify_res.idi_map, in vnic_dev_notify_setcmd()
717 if (!vnic_dev_in_reset(vdev)) { in vnic_dev_notify_setcmd()
718 vdev->notify = notify_addr; in vnic_dev_notify_setcmd()
719 vdev->notify_pa = notify_pa; in vnic_dev_notify_setcmd()
726 r = vnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in vnic_dev_notify_setcmd()
727 if (!vnic_dev_in_reset(vdev)) in vnic_dev_notify_setcmd()
728 vdev->notify_sz = (r == 0) ? (u32)a1 : 0; in vnic_dev_notify_setcmd()
733 int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr) in vnic_dev_notify_set() argument
740 if (vdev->notify || vdev->notify_pa) { in vnic_dev_notify_set()
741 return vnic_dev_notify_setcmd(vdev, vdev->notify, in vnic_dev_notify_set()
742 vdev->notify_pa, intr); in vnic_dev_notify_set()
744 if (!vnic_dev_in_reset(vdev)) { in vnic_dev_notify_set()
747 iflib_dma_alloc(vdev->softc->ctx, in vnic_dev_notify_set()
749 &vdev->notify_res, BUS_DMA_NOWAIT); in vnic_dev_notify_set()
750 notify_pa = vdev->notify_res.idi_paddr; in vnic_dev_notify_set()
751 notify_addr = vdev->notify_res.idi_vaddr; in vnic_dev_notify_set()
754 return vnic_dev_notify_setcmd(vdev, notify_addr, notify_pa, intr); in vnic_dev_notify_set()
757 int vnic_dev_notify_unsetcmd(struct vnic_dev *vdev) in vnic_dev_notify_unsetcmd() argument
767 err = vnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in vnic_dev_notify_unsetcmd()
768 if (!vnic_dev_in_reset(vdev)) { in vnic_dev_notify_unsetcmd()
769 vdev->notify = NULL; in vnic_dev_notify_unsetcmd()
770 vdev->notify_pa = 0; in vnic_dev_notify_unsetcmd()
771 vdev->notify_sz = 0; in vnic_dev_notify_unsetcmd()
777 int vnic_dev_notify_unset(struct vnic_dev *vdev) in vnic_dev_notify_unset() argument
779 if (vdev->notify && !vnic_dev_in_reset(vdev)) { in vnic_dev_notify_unset()
780 iflib_dma_free(&vdev->notify_res); in vnic_dev_notify_unset()
783 return vnic_dev_notify_unsetcmd(vdev); in vnic_dev_notify_unset()
786 static int vnic_dev_notify_ready(struct vnic_dev *vdev) in vnic_dev_notify_ready() argument
789 unsigned int nwords = vdev->notify_sz / 4; in vnic_dev_notify_ready()
793 if (!vdev->notify || !vdev->notify_sz) in vnic_dev_notify_ready()
798 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_ready()
799 vdev->notify_res.idi_map, in vnic_dev_notify_ready()
801 memcpy(&vdev->notify_copy, vdev->notify, vdev->notify_sz); in vnic_dev_notify_ready()
802 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_ready()
803 vdev->notify_res.idi_map, in vnic_dev_notify_ready()
805 words = (u32 *)&vdev->notify_copy; in vnic_dev_notify_ready()
813 int vnic_dev_init(struct vnic_dev *vdev, int arg) in vnic_dev_init() argument
819 if (vnic_dev_capable(vdev, CMD_INIT)) in vnic_dev_init()
820 r = vnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait); in vnic_dev_init()
822 vnic_dev_cmd(vdev, CMD_INIT_v1, &a0, &a1, wait); in vnic_dev_init()
827 vnic_dev_cmd(vdev, CMD_GET_MAC_ADDR, &a0, &a1, wait); in vnic_dev_init()
828 vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait); in vnic_dev_init()
834 void vnic_dev_intr_coal_timer_info_default(struct vnic_dev *vdev) in vnic_dev_intr_coal_timer_info_default() argument
837 vdev->intr_coal_timer_info.mul = 2; in vnic_dev_intr_coal_timer_info_default()
838 vdev->intr_coal_timer_info.div = 3; in vnic_dev_intr_coal_timer_info_default()
839 vdev->intr_coal_timer_info.max_usec = in vnic_dev_intr_coal_timer_info_default()
840 vnic_dev_intr_coal_timer_hw_to_usec(vdev, 0xffff); in vnic_dev_intr_coal_timer_info_default()
843 int vnic_dev_link_status(struct vnic_dev *vdev) in vnic_dev_link_status() argument
845 if (!vnic_dev_notify_ready(vdev)) in vnic_dev_link_status()
848 return vdev->notify_copy.link_state; in vnic_dev_link_status()
851 u32 vnic_dev_port_speed(struct vnic_dev *vdev) in vnic_dev_port_speed() argument
853 if (!vnic_dev_notify_ready(vdev)) in vnic_dev_port_speed()
856 return vdev->notify_copy.port_speed; in vnic_dev_port_speed()
859 u32 vnic_dev_intr_coal_timer_usec_to_hw(struct vnic_dev *vdev, u32 usec) in vnic_dev_intr_coal_timer_usec_to_hw() argument
861 return (usec * vdev->intr_coal_timer_info.mul) / in vnic_dev_intr_coal_timer_usec_to_hw()
862 vdev->intr_coal_timer_info.div; in vnic_dev_intr_coal_timer_usec_to_hw()
865 u32 vnic_dev_intr_coal_timer_hw_to_usec(struct vnic_dev *vdev, u32 hw_cycles) in vnic_dev_intr_coal_timer_hw_to_usec() argument
867 return (hw_cycles * vdev->intr_coal_timer_info.div) / in vnic_dev_intr_coal_timer_hw_to_usec()
868 vdev->intr_coal_timer_info.mul; in vnic_dev_intr_coal_timer_hw_to_usec()
871 u32 vnic_dev_get_intr_coal_timer_max(struct vnic_dev *vdev) in vnic_dev_get_intr_coal_timer_max() argument
873 return vdev->intr_coal_timer_info.max_usec; in vnic_dev_get_intr_coal_timer_max()
876 u32 vnic_dev_mtu(struct vnic_dev *vdev) in vnic_dev_mtu() argument
878 if (!vnic_dev_notify_ready(vdev)) in vnic_dev_mtu()
881 return vdev->notify_copy.mtu; in vnic_dev_mtu()
884 void vnic_dev_set_intr_mode(struct vnic_dev *vdev, in vnic_dev_set_intr_mode() argument
887 vdev->intr_mode = intr_mode; in vnic_dev_set_intr_mode()
891 struct vnic_dev *vdev) in vnic_dev_get_intr_mode() argument
893 return vdev->intr_mode; in vnic_dev_get_intr_mode()
897 int vnic_dev_alloc_stats_mem(struct vnic_dev *vdev) in vnic_dev_alloc_stats_mem() argument
903 softc = vdev->softc; in vnic_dev_alloc_stats_mem()
906 iflib_dma_alloc(softc->ctx, sizeof(struct vnic_stats), &vdev->stats_res, 0); in vnic_dev_alloc_stats_mem()
907 vdev->stats = (struct vnic_stats *)vdev->stats_res.idi_vaddr; in vnic_dev_alloc_stats_mem()
908 return vdev->stats == NULL ? -ENOMEM : 0; in vnic_dev_alloc_stats_mem()
914 int vnic_dev_alloc_counter_mem(struct vnic_dev *vdev) in vnic_dev_alloc_counter_mem() argument
920 softc = vdev->softc; in vnic_dev_alloc_counter_mem()
923 …iflib_dma_alloc(softc->ctx, sizeof(struct vnic_counter_counts) * VNIC_MAX_FLOW_COUNTERS, &vdev->fl… in vnic_dev_alloc_counter_mem()
924 vdev->flow_counters = (struct vnic_counter_counts *)vdev->flow_counters_res.idi_vaddr; in vnic_dev_alloc_counter_mem()
925 vdev->flow_counters_dma_active = 0; in vnic_dev_alloc_counter_mem()
926 return vdev->flow_counters == NULL ? -ENOMEM : 0; in vnic_dev_alloc_counter_mem()
929 struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev, in vnic_dev_register() argument
932 if (vnic_dev_discover_res(vdev, NULL, num_bars)) in vnic_dev_register()
935 vdev->devcmd = vnic_dev_get_res(vdev, RES_TYPE_DEVCMD, 0); in vnic_dev_register()
936 if (!vdev->devcmd) in vnic_dev_register()
939 return vdev; in vnic_dev_register()
961 int vnic_dev_overlay_offload_ctrl(struct vnic_dev *vdev, u8 overlay, u8 config) in vnic_dev_overlay_offload_ctrl() argument
967 return vnic_dev_cmd(vdev, CMD_OVERLAY_OFFLOAD_CTRL, &a0, &a1, wait); in vnic_dev_overlay_offload_ctrl()
970 int vnic_dev_overlay_offload_cfg(struct vnic_dev *vdev, u8 overlay, in vnic_dev_overlay_offload_cfg() argument
977 return vnic_dev_cmd(vdev, CMD_OVERLAY_OFFLOAD_CFG, &a0, &a1, wait); in vnic_dev_overlay_offload_cfg()
980 int vnic_dev_capable_vxlan(struct vnic_dev *vdev) in vnic_dev_capable_vxlan() argument
987 ret = vnic_dev_cmd(vdev, CMD_GET_SUPP_FEATURE_VER, &a0, &a1, wait); in vnic_dev_capable_vxlan()
994 bool vnic_dev_counter_alloc(struct vnic_dev *vdev, uint32_t *idx) in vnic_dev_counter_alloc() argument
1000 if (vnic_dev_cmd(vdev, CMD_COUNTER_ALLOC, &a0, &a1, wait)) in vnic_dev_counter_alloc()
1006 bool vnic_dev_counter_free(struct vnic_dev *vdev, uint32_t idx) in vnic_dev_counter_free() argument
1012 return vnic_dev_cmd(vdev, CMD_COUNTER_FREE, &a0, &a1, in vnic_dev_counter_free()
1016 bool vnic_dev_counter_query(struct vnic_dev *vdev, uint32_t idx, in vnic_dev_counter_query() argument
1025 if (vnic_dev_cmd(vdev, CMD_COUNTER_QUERY, &a0, &a1, wait)) in vnic_dev_counter_query()
1031 *packets = vdev->flow_counters[idx].vcc_packets; in vnic_dev_counter_query()
1032 *bytes = vdev->flow_counters[idx].vcc_bytes; in vnic_dev_counter_query()
1037 device_t dev_from_vnic_dev(struct vnic_dev *vdev) { in dev_from_vnic_dev() argument
1038 return (vdev->softc->dev); in dev_from_vnic_dev()