static int qlcnic_do_ilb_test(struct qlcnic_adapter *adapter) { struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; struct qlcnic_host_sds_ring *sds_ring = &recv_ctx->sds_rings[0]; struct sk_buff *skb; int i; for (i = 0; i < 16; i++) { skb = dev_alloc_skb(QLC_ILB_PKT_SIZE); qlcnic_create_loopback_buff(skb->data); skb_put(skb, QLC_ILB_PKT_SIZE); adapter->diag_cnt = 0; qlcnic_xmit_frame(skb, adapter->netdev); msleep(5); qlcnic_process_rcv_ring_diag(sds_ring); dev_kfree_skb_any(skb); if (!adapter->diag_cnt) return -1; } return 0; }
static int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) { struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; struct qlcnic_host_sds_ring *sds_ring = &recv_ctx->sds_rings[0]; struct sk_buff *skb; int i, loop, cnt = 0; for (i = 0; i < QLCNIC_NUM_ILB_PKT; i++) { skb = netdev_alloc_skb(adapter->netdev, QLCNIC_ILB_PKT_SIZE); qlcnic_create_loopback_buff(skb->data, adapter->mac_addr); skb_put(skb, QLCNIC_ILB_PKT_SIZE); adapter->diag_cnt = 0; qlcnic_xmit_frame(skb, adapter->netdev); loop = 0; do { msleep(1); qlcnic_process_rcv_ring_diag(sds_ring); if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) break; } while (!adapter->diag_cnt); dev_kfree_skb_any(skb); if (!adapter->diag_cnt) QLCDB(adapter, DRV, "LB Test: packet #%d was not received\n", i + 1); else cnt++; } if (cnt != i) { dev_warn(&adapter->pdev->dev, "LB Test failed\n"); if (mode != QLCNIC_ILB_MODE) { dev_warn(&adapter->pdev->dev, "WARNING: Please make sure external" "loopback connector is plugged in\n"); } return -1; } return 0; }
int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) { struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; struct qlcnic_host_sds_ring *sds_ring = &recv_ctx->sds_rings[0]; struct sk_buff *skb; int i, loop, cnt = 0; for (i = 0; i < QLCNIC_NUM_ILB_PKT; i++) { skb = netdev_alloc_skb(adapter->netdev, QLCNIC_ILB_PKT_SIZE); qlcnic_create_loopback_buff(skb->data, adapter->mac_addr); skb_put(skb, QLCNIC_ILB_PKT_SIZE); adapter->ahw->diag_cnt = 0; qlcnic_xmit_frame(skb, adapter->netdev); loop = 0; do { msleep(QLCNIC_LB_PKT_POLL_DELAY_MSEC); qlcnic_process_rcv_ring_diag(sds_ring); if (loop++ > QLCNIC_LB_PKT_POLL_COUNT) break; } while (!adapter->ahw->diag_cnt); dev_kfree_skb_any(skb); if (!adapter->ahw->diag_cnt) dev_warn(&adapter->pdev->dev, "LB Test: packet #%d was not received\n", i + 1); else cnt++; } if (cnt != i) { dev_err(&adapter->pdev->dev, "LB Test: failed, TX[%d], RX[%d]\n", i, cnt); if (mode != QLCNIC_ILB_MODE) dev_warn(&adapter->pdev->dev, "WARNING: Please check loopback cable\n"); return -1; } return 0; }
static int qlcnic_do_ilb_test(struct qlcnic_adapter *adapter) { struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; struct qlcnic_host_sds_ring *sds_ring = &recv_ctx->sds_rings[0]; struct sk_buff *skb; int i, loop, cnt = 0; for (i = 0; i < QLC_NUM_ILB_PKT; i++) { skb = dev_alloc_skb(QLC_ILB_PKT_SIZE); qlcnic_create_loopback_buff(skb->data); skb_put(skb, QLC_ILB_PKT_SIZE); adapter->diag_cnt = 0; qlcnic_xmit_frame(skb, adapter->netdev); loop = 0; do { msleep(1); qlcnic_process_rcv_ring_diag(sds_ring); } while (loop++ < QLC_ILB_MAX_RCV_LOOP && !adapter->diag_cnt); dev_kfree_skb_any(skb); if (!adapter->diag_cnt) dev_warn(&adapter->pdev->dev, "ILB Test: %dth packet" " not recevied\n", i + 1); else cnt++; } if (cnt != i) { dev_warn(&adapter->pdev->dev, "ILB Test failed\n"); return -1; } return 0; }