Lines Matching +full:wait +full:- +full:delay
1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2008-2017 Cisco Systems, Inc. All rights reserved.
22 return vdev->priv; in vnic_dev_priv()
32 vdev->alloc_consistent = alloc_consistent; in vnic_register_cbacks()
33 vdev->free_consistent = free_consistent; in vnic_register_cbacks()
39 struct enic_softc *softc = vdev->softc; in vnic_dev_discover_res()
52 pr_err("vNIC BAR0 res hdr not mem-mapped\n"); in vnic_dev_discover_res()
61 if ((rh->magic != VNIC_RES_MAGIC) || in vnic_dev_discover_res()
62 (rh->version != VNIC_RES_VERSION)) { in vnic_dev_discover_res()
63 if ((mrh->magic != MGMTVNIC_MAGIC) || in vnic_dev_discover_res()
64 mrh->version != MGMTVNIC_VERSION) { in vnic_dev_discover_res()
69 rh->magic, rh->version); in vnic_dev_discover_res()
76 if (mrh->magic == MGMTVNIC_MAGIC) in vnic_dev_discover_res()
83 while ((type = r->type) != RES_TYPE_EOL) { in vnic_dev_discover_res()
84 u8 bar_num = r->bar; in vnic_dev_discover_res()
85 u32 bar_offset =r->bar_offset; in vnic_dev_discover_res()
86 u32 count = r->count; in vnic_dev_discover_res()
107 vdev->res[type].count = count; in vnic_dev_discover_res()
108 bcopy(&softc->mem, &vdev->res[type].bar, sizeof(softc->mem)); in vnic_dev_discover_res()
109 vdev->res[type].bar.offset = bar_offset; in vnic_dev_discover_res()
122 return vdev->res[type].count; in vnic_dev_get_res_count()
130 if (!vdev->res[type].bar.tag) in vnic_dev_get_res()
134 bcopy(&vdev->res[type], res, sizeof(*res)); in vnic_dev_get_res()
141 res->bar.offset += in vnic_dev_get_res()
144 res->bar.offset += 0; in vnic_dev_get_res()
162 ring->base_align = 512; in vnic_dev_desc_ring_size()
167 ring->desc_count = VNIC_ALIGN(desc_count, count_align); in vnic_dev_desc_ring_size()
169 ring->desc_size = VNIC_ALIGN(desc_size, desc_align); in vnic_dev_desc_ring_size()
171 ring->size_unaligned = ring->desc_count * ring->desc_size \ in vnic_dev_desc_ring_size()
172 + ring->base_align; in vnic_dev_desc_ring_size()
174 return ring->size_unaligned; in vnic_dev_desc_ring_size()
178 int wait) in _vnic_dev_cmd() argument
180 struct vnic_res __iomem *devcmd = vdev->devcmd; in _vnic_dev_cmd()
181 int delay; in _vnic_dev_cmd() local
187 /* PCI-e target device is gone */ in _vnic_dev_cmd()
197 ENIC_BUS_WRITE_REGION_4(devcmd, DEVCMD_ARGS(0), (void *)&vdev->args[0], VNIC_DEVCMD_NARGS * 2); in _vnic_dev_cmd()
206 for (delay = 0; delay < wait; delay++) { in _vnic_dev_cmd()
212 /* PCI-e target device is gone */ in _vnic_dev_cmd()
218 err = -(int)ENIC_BUS_READ_8(devcmd, DEVCMD_ARGS(0)); in _vnic_dev_cmd()
228 …ENIC_BUS_READ_REGION_4(devcmd, bar, DEVCMD_ARGS(0), (void *)&vdev->args[0], VNIC_DEVCMD_NARGS * 2); in _vnic_dev_cmd()
240 int wait) in _vnic_dev_cmd2() argument
242 struct devcmd2_controller *dc2c = vdev->devcmd2; in _vnic_dev_cmd2()
247 int delay, err; in _vnic_dev_cmd2() local
248 u32 posted = dc2c->posted; in _vnic_dev_cmd2()
250 fetch_index = ENIC_BUS_READ_4(dc2c->wq_ctrl, TX_FETCH_INDEX); in _vnic_dev_cmd2()
263 dc2c->cmd_ring[posted].cmd = cmd; in _vnic_dev_cmd2()
264 dc2c->cmd_ring[posted].flags = 0; in _vnic_dev_cmd2()
267 dc2c->cmd_ring[posted].flags |= DEVCMD2_FNORESULT; in _vnic_dev_cmd2()
270 dc2c->cmd_ring[posted].args[i] = vdev->args[i]; in _vnic_dev_cmd2()
272 ENIC_BUS_WRITE_4(dc2c->wq_ctrl, TX_POSTED_INDEX, new_posted); in _vnic_dev_cmd2()
273 dc2c->posted = new_posted; in _vnic_dev_cmd2()
275 if (dc2c->cmd_ring[posted].flags & DEVCMD2_FNORESULT) in _vnic_dev_cmd2()
278 result = dc2c->result + dc2c->next_result; in _vnic_dev_cmd2()
279 color = dc2c->color; in _vnic_dev_cmd2()
281 dc2c->next_result++; in _vnic_dev_cmd2()
282 if (dc2c->next_result == dc2c->result_size) { in _vnic_dev_cmd2()
283 dc2c->next_result = 0; in _vnic_dev_cmd2()
284 dc2c->color = dc2c->color ? 0 : 1; in _vnic_dev_cmd2()
287 for (delay = 0; delay < wait; delay++) { in _vnic_dev_cmd2()
288 if (result->color == color) { in _vnic_dev_cmd2()
289 if (result->error) { in _vnic_dev_cmd2()
290 err = result->error; in _vnic_dev_cmd2()
300 vdev->args[i] = result->results[i]; in _vnic_dev_cmd2()
316 u64 *args, int nargs, int wait) in vnic_dev_cmd_proxy() argument
325 if (nargs > VNIC_DEVCMD_NARGS - 2) { in vnic_dev_cmd_proxy()
329 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd_proxy()
331 vdev->args[0] = vdev->proxy_index; in vnic_dev_cmd_proxy()
332 vdev->args[1] = cmd; in vnic_dev_cmd_proxy()
333 memcpy(&vdev->args[2], args, nargs * sizeof(args[0])); in vnic_dev_cmd_proxy()
335 err = vdev->devcmd_rtn(vdev, proxy_cmd, wait); in vnic_dev_cmd_proxy()
339 status = (u32)vdev->args[0]; in vnic_dev_cmd_proxy()
341 err = (int)vdev->args[1]; in vnic_dev_cmd_proxy()
348 memcpy(args, &vdev->args[1], nargs * sizeof(args[0])); in vnic_dev_cmd_proxy()
354 enum vnic_devcmd_cmd cmd, u64 *args, int nargs, int wait) in vnic_dev_cmd_no_proxy() argument
362 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd_no_proxy()
363 memcpy(vdev->args, args, nargs * sizeof(args[0])); in vnic_dev_cmd_no_proxy()
365 err = vdev->devcmd_rtn(vdev, cmd, wait); in vnic_dev_cmd_no_proxy()
367 memcpy(args, vdev->args, nargs * sizeof(args[0])); in vnic_dev_cmd_no_proxy()
373 u64 *a0, u64 *a1, int wait) in vnic_dev_cmd() argument
380 memset(vdev->args, 0, sizeof(vdev->args)); in vnic_dev_cmd()
382 switch (vdev->proxy) { in vnic_dev_cmd()
385 args, ARRAY_SIZE(args), wait); in vnic_dev_cmd()
389 args, ARRAY_SIZE(args), wait); in vnic_dev_cmd()
393 err = vnic_dev_cmd_no_proxy(vdev, cmd, args, 2, wait); in vnic_dev_cmd()
406 u64 *args, int nargs, int wait) in vnic_dev_cmd_args() argument
408 switch (vdev->proxy) { in vnic_dev_cmd_args()
411 args, nargs, wait); in vnic_dev_cmd_args()
414 args, nargs, wait); in vnic_dev_cmd_args()
417 return vnic_dev_cmd_no_proxy(vdev, cmd, args, nargs, wait); in vnic_dev_cmd_args()
433 int wait = 1000; in vnic_dev_capable_adv_filters() local
436 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable_adv_filters()
444 * FILTER_DPDK_1- advanced filters availabile
445 * FILTER_USNIC_IP_FLAG - advanced filters but with the restriction that
448 * FILTER_IPV4_5TUPLE - fallback if either of the 2 above aren't available.
500 int wait = 1000; in vnic_dev_capable_udp_rss_weak() local
505 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable_udp_rss_weak()
515 int wait = 1000; in vnic_dev_capable() local
518 err = vnic_dev_cmd(vdev, CMD_CAPABILITY, &a0, &a1, wait); in vnic_dev_capable()
527 int wait = 1000; in vnic_dev_spec() local
533 err = vnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait); in vnic_dev_spec()
559 int wait = 1000; in vnic_dev_stats_clear() local
561 return vnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait); in vnic_dev_stats_clear()
567 int wait = 1000; in vnic_dev_stats_dump() local
570 if (!vdev->stats) in vnic_dev_stats_dump()
573 *stats = vdev->stats; in vnic_dev_stats_dump()
574 a0 = vdev->stats_res.idi_paddr; in vnic_dev_stats_dump()
577 bus_dmamap_sync(vdev->stats_res.idi_tag, in vnic_dev_stats_dump()
578 vdev->stats_res.idi_map, in vnic_dev_stats_dump()
580 rc = vnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait); in vnic_dev_stats_dump()
581 bus_dmamap_sync(vdev->stats_res.idi_tag, in vnic_dev_stats_dump()
582 vdev->stats_res.idi_map, in vnic_dev_stats_dump()
594 int wait = 1000; in vnic_dev_counter_dma_cfg() local
604 args[1] = vdev->flow_counters_res.idi_paddr; in vnic_dev_counter_dma_cfg()
606 bus_dmamap_sync(vdev->flow_counters_res.idi_tag, in vnic_dev_counter_dma_cfg()
607 vdev->flow_counters_res.idi_map, in vnic_dev_counter_dma_cfg()
609 err = vnic_dev_cmd_args(vdev, CMD_COUNTER_DMA_CONFIG, args, 3, wait); in vnic_dev_counter_dma_cfg()
610 bus_dmamap_sync(vdev->flow_counters_res.idi_tag, in vnic_dev_counter_dma_cfg()
611 vdev->flow_counters_res.idi_map, in vnic_dev_counter_dma_cfg()
616 vdev->flow_counters_dma_active = (num_counters != 0 && in vnic_dev_counter_dma_cfg()
625 int wait = 1000; in vnic_dev_close() local
627 return vnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait); in vnic_dev_close()
633 int wait = 1000; in vnic_dev_enable_wait() local
636 return vnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait); in vnic_dev_enable_wait()
638 return vnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait); in vnic_dev_enable_wait()
644 int wait = 1000; in vnic_dev_disable() local
646 return vnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait); in vnic_dev_disable()
652 int wait = 1000; in vnic_dev_open() local
654 return vnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait); in vnic_dev_open()
660 int wait = 1000; in vnic_dev_open_done() local
665 err = vnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait); in vnic_dev_open_done()
677 int wait = 1000; in vnic_dev_get_mac_addr() local
683 err = vnic_dev_cmd(vdev, CMD_GET_MAC_ADDR, &a0, &a1, wait); in vnic_dev_get_mac_addr()
697 int wait = 1000; in vnic_dev_packet_filter() local
706 err = vnic_dev_cmd(vdev, CMD_PACKET_FILTER, &a0, &a1, wait); in vnic_dev_packet_filter()
716 int wait = 1000; in vnic_dev_add_addr() local
723 err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait); in vnic_dev_add_addr()
735 int wait = 1000; in vnic_dev_del_addr() local
742 err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait); in vnic_dev_del_addr()
755 int wait = 1000; in vnic_dev_set_ig_vlan_rewrite_mode() local
759 &a0, &a1, wait); in vnic_dev_set_ig_vlan_rewrite_mode()
766 vdev->in_reset = state; in vnic_dev_set_reset_flag()
771 return vdev->in_reset; in vnic_dev_in_reset()
778 int wait = 1000; in vnic_dev_notify_setcmd() local
781 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_setcmd()
782 vdev->notify_res.idi_map, in vnic_dev_notify_setcmd()
785 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_setcmd()
786 vdev->notify_res.idi_map, in vnic_dev_notify_setcmd()
789 vdev->notify = notify_addr; in vnic_dev_notify_setcmd()
790 vdev->notify_pa = notify_pa; in vnic_dev_notify_setcmd()
797 r = vnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in vnic_dev_notify_setcmd()
799 vdev->notify_sz = (r == 0) ? (u32)a1 : 0; in vnic_dev_notify_setcmd()
811 if (vdev->notify || vdev->notify_pa) { in vnic_dev_notify_set()
812 return vnic_dev_notify_setcmd(vdev, vdev->notify, in vnic_dev_notify_set()
813 vdev->notify_pa, intr); in vnic_dev_notify_set()
817 "vnic_notify-%u", instance++); in vnic_dev_notify_set()
818 iflib_dma_alloc(vdev->softc->ctx, in vnic_dev_notify_set()
820 &vdev->notify_res, BUS_DMA_NOWAIT); in vnic_dev_notify_set()
821 notify_pa = vdev->notify_res.idi_paddr; in vnic_dev_notify_set()
822 notify_addr = vdev->notify_res.idi_vaddr; in vnic_dev_notify_set()
831 int wait = 1000; in vnic_dev_notify_unsetcmd() local
835 a1 = 0x0000ffff00000000ULL; /* intr num = -1 to unreg for intr */ in vnic_dev_notify_unsetcmd()
838 err = vnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in vnic_dev_notify_unsetcmd()
840 vdev->notify = NULL; in vnic_dev_notify_unsetcmd()
841 vdev->notify_pa = 0; in vnic_dev_notify_unsetcmd()
842 vdev->notify_sz = 0; in vnic_dev_notify_unsetcmd()
850 if (vdev->notify && !vnic_dev_in_reset(vdev)) { in vnic_dev_notify_unset()
851 iflib_dma_free(&vdev->notify_res); in vnic_dev_notify_unset()
860 unsigned int nwords = vdev->notify_sz / 4; in vnic_dev_notify_ready()
864 if (!vdev->notify || !vdev->notify_sz) in vnic_dev_notify_ready()
869 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_ready()
870 vdev->notify_res.idi_map, in vnic_dev_notify_ready()
872 memcpy(&vdev->notify_copy, vdev->notify, vdev->notify_sz); in vnic_dev_notify_ready()
873 bus_dmamap_sync(vdev->notify_res.idi_tag, in vnic_dev_notify_ready()
874 vdev->notify_res.idi_map, in vnic_dev_notify_ready()
876 words = (u32 *)&vdev->notify_copy; in vnic_dev_notify_ready()
888 int wait = 1000; in vnic_dev_init() local
892 r = vnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait); in vnic_dev_init()
894 vnic_dev_cmd(vdev, CMD_INIT_v1, &a0, &a1, wait); in vnic_dev_init()
899 vnic_dev_cmd(vdev, CMD_GET_MAC_ADDR, &a0, &a1, wait); in vnic_dev_init()
900 vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait); in vnic_dev_init()
909 vdev->intr_coal_timer_info.mul = 2; in vnic_dev_intr_coal_timer_info_default()
910 vdev->intr_coal_timer_info.div = 3; in vnic_dev_intr_coal_timer_info_default()
911 vdev->intr_coal_timer_info.max_usec = in vnic_dev_intr_coal_timer_info_default()
920 return vdev->notify_copy.link_state; in vnic_dev_link_status()
928 return vdev->notify_copy.port_speed; in vnic_dev_port_speed()
933 return (usec * vdev->intr_coal_timer_info.mul) / in vnic_dev_intr_coal_timer_usec_to_hw()
934 vdev->intr_coal_timer_info.div; in vnic_dev_intr_coal_timer_usec_to_hw()
939 return (hw_cycles * vdev->intr_coal_timer_info.div) / in vnic_dev_intr_coal_timer_hw_to_usec()
940 vdev->intr_coal_timer_info.mul; in vnic_dev_intr_coal_timer_hw_to_usec()
945 return vdev->intr_coal_timer_info.max_usec; in vnic_dev_get_intr_coal_timer_max()
953 return vdev->notify_copy.mtu; in vnic_dev_mtu()
959 vdev->intr_mode = intr_mode; in vnic_dev_set_intr_mode()
965 return vdev->intr_mode; in vnic_dev_get_intr_mode()
975 softc = vdev->softc; in vnic_dev_alloc_stats_mem()
977 snprintf((char *)name, sizeof(name), "vnic_stats-%u", instance++); in vnic_dev_alloc_stats_mem()
978 iflib_dma_alloc(softc->ctx, sizeof(struct vnic_stats), &vdev->stats_res, 0); in vnic_dev_alloc_stats_mem()
979 vdev->stats = (struct vnic_stats *)vdev->stats_res.idi_vaddr; in vnic_dev_alloc_stats_mem()
980 return vdev->stats == NULL ? -ENOMEM : 0; in vnic_dev_alloc_stats_mem()
992 softc = vdev->softc; in vnic_dev_alloc_counter_mem()
994 snprintf((char *)name, sizeof(name), "vnic_flow_ctrs-%u", instance++); in vnic_dev_alloc_counter_mem()
995 …iflib_dma_alloc(softc->ctx, sizeof(struct vnic_counter_counts) * VNIC_MAX_FLOW_COUNTERS, &vdev->fl… in vnic_dev_alloc_counter_mem()
996 vdev->flow_counters = (struct vnic_counter_counts *)vdev->flow_counters_res.idi_vaddr; in vnic_dev_alloc_counter_mem()
997 vdev->flow_counters_dma_active = 0; in vnic_dev_alloc_counter_mem()
998 return (vdev->flow_counters == NULL ? ENOMEM : 0); in vnic_dev_alloc_counter_mem()
1007 vdev->devcmd = vnic_dev_get_res(vdev, RES_TYPE_DEVCMD, 0); in vnic_dev_register()
1008 if (!vdev->devcmd) in vnic_dev_register()
1019 vdev->devcmd = vnic_dev_get_res(vdev, RES_TYPE_DEVCMD, 0); in vnic_dev_init_devcmd1()
1020 if (!vdev->devcmd) in vnic_dev_init_devcmd1()
1022 vdev->devcmd_rtn = _vnic_dev_cmd; in vnic_dev_init_devcmd1()
1035 if (vdev->devcmd2) in vnic_dev_init_devcmd2()
1038 vdev->devcmd2 = malloc(sizeof(*vdev->devcmd2), M_DEVBUF, in vnic_dev_init_devcmd2()
1041 if (!vdev->devcmd2) { in vnic_dev_init_devcmd2()
1045 vdev->devcmd2->color = 1; in vnic_dev_init_devcmd2()
1046 vdev->devcmd2->result_size = DEVCMD2_RING_SIZE; in vnic_dev_init_devcmd2()
1048 err = enic_wq_devcmd2_alloc(vdev, &vdev->devcmd2->wq, DEVCMD2_RING_SIZE, in vnic_dev_init_devcmd2()
1054 vdev->devcmd2->wq_ctrl = vdev->devcmd2->wq.ctrl; in vnic_dev_init_devcmd2()
1055 vdev->devcmd2->cmd_ring = vdev->devcmd2->wq.ring.descs; in vnic_dev_init_devcmd2()
1057 fetch_index = ENIC_BUS_READ_4(vdev->devcmd2->wq.ctrl, TX_FETCH_INDEX); in vnic_dev_init_devcmd2()
1061 enic_wq_init_start(&vdev->devcmd2->wq, 0, fetch_index, fetch_index, 0, in vnic_dev_init_devcmd2()
1063 vdev->devcmd2->posted = fetch_index; in vnic_dev_init_devcmd2()
1064 vnic_wq_enable(&vdev->devcmd2->wq); in vnic_dev_init_devcmd2()
1066 err = vnic_dev_alloc_desc_ring(vdev, &vdev->devcmd2->results_ring, in vnic_dev_init_devcmd2()
1071 vdev->devcmd2->result = vdev->devcmd2->results_ring.descs; in vnic_dev_init_devcmd2()
1072 vdev->args[0] = (u64)vdev->devcmd2->results_ring.base_addr | in vnic_dev_init_devcmd2()
1074 vdev->args[1] = DEVCMD2_RING_SIZE; in vnic_dev_init_devcmd2()
1080 vdev->devcmd_rtn = _vnic_dev_cmd2; in vnic_dev_init_devcmd2()
1086 if (vdev->devcmd2->wq_ctrl) in vnic_dev_init_devcmd2()
1087 vnic_wq_free(&vdev->devcmd2->wq); in vnic_dev_init_devcmd2()
1088 if (vdev->devcmd2->result) in vnic_dev_init_devcmd2()
1089 vnic_dev_free_desc_ring(vdev, &vdev->devcmd2->results_ring); in vnic_dev_init_devcmd2()
1090 free(vdev->devcmd2, M_DEVBUF); in vnic_dev_init_devcmd2()
1091 vdev->devcmd2 = NULL; in vnic_dev_init_devcmd2()
1116 int wait = 1000; in vnic_dev_overlay_offload_ctrl() local
1118 return vnic_dev_cmd(vdev, CMD_OVERLAY_OFFLOAD_CTRL, &a0, &a1, wait); in vnic_dev_overlay_offload_ctrl()
1126 int wait = 1000; in vnic_dev_overlay_offload_cfg() local
1128 return vnic_dev_cmd(vdev, CMD_OVERLAY_OFFLOAD_CFG, &a0, &a1, wait); in vnic_dev_overlay_offload_cfg()
1135 int wait = 1000; in vnic_dev_capable_vxlan() local
1138 ret = vnic_dev_cmd(vdev, CMD_GET_SUPP_FEATURE_VER, &a0, &a1, wait); in vnic_dev_capable_vxlan()
1149 int wait = 1000; in vnic_dev_counter_alloc() local
1151 if (vnic_dev_cmd(vdev, CMD_COUNTER_ALLOC, &a0, &a1, wait)) in vnic_dev_counter_alloc()
1161 int wait = 1000; in vnic_dev_counter_free() local
1164 wait) == 0; in vnic_dev_counter_free()
1172 int wait = 1000; in vnic_dev_counter_query() local
1176 if (vnic_dev_cmd(vdev, CMD_COUNTER_QUERY, &a0, &a1, wait)) in vnic_dev_counter_query()
1182 *packets = vdev->flow_counters[idx].vcc_packets; in vnic_dev_counter_query()
1183 *bytes = vdev->flow_counters[idx].vcc_bytes; in vnic_dev_counter_query()
1189 return (vdev->softc->dev); in dev_from_vnic_dev()