Lines Matching refs:mgtvnic
46 static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic) in nes_replenish_mgt_rq() argument
57 nesmgt = &mgtvnic->mgt; in nes_replenish_mgt_rq()
58 nesdev = mgtvnic->nesvnic->nesdev; in nes_replenish_mgt_rq()
61 if (((nesmgt->rq_size - 1) == atomic_read(&mgtvnic->rx_skbs_needed)) && in nes_replenish_mgt_rq()
62 (atomic_read(&mgtvnic->rx_skb_timer_running) == 0)) { in nes_replenish_mgt_rq()
63 atomic_set(&mgtvnic->rx_skb_timer_running, 1); in nes_replenish_mgt_rq()
65 mgtvnic->rq_wqes_timer.expires = jiffies + (HZ / 2); /* 1/2 second */ in nes_replenish_mgt_rq()
66 add_timer(&mgtvnic->rq_wqes_timer); in nes_replenish_mgt_rq()
75 skb = dev_alloc_skb(mgtvnic->nesvnic->max_frame_size); in nes_replenish_mgt_rq()
77 skb->dev = mgtvnic->nesvnic->netdev; in nes_replenish_mgt_rq()
80 skb->data, mgtvnic->nesvnic->max_frame_size, PCI_DMA_FROMDEVICE); in nes_replenish_mgt_rq()
83 cb->maplen = mgtvnic->nesvnic->max_frame_size; in nes_replenish_mgt_rq()
85 nic_rqe = &nesmgt->rq_vbase[mgtvnic->mgt.rq_head]; in nes_replenish_mgt_rq()
87 cpu_to_le32(mgtvnic->nesvnic->max_frame_size); in nes_replenish_mgt_rq()
96 atomic_dec(&mgtvnic->rx_skbs_needed); in nes_replenish_mgt_rq()
104 if (((nesmgt->rq_size - 1) == atomic_read(&mgtvnic->rx_skbs_needed)) && in nes_replenish_mgt_rq()
105 (atomic_read(&mgtvnic->rx_skb_timer_running) == 0)) { in nes_replenish_mgt_rq()
106 atomic_set(&mgtvnic->rx_skb_timer_running, 1); in nes_replenish_mgt_rq()
108 mgtvnic->rq_wqes_timer.expires = jiffies + (HZ / 2); /* 1/2 second */ in nes_replenish_mgt_rq()
109 add_timer(&mgtvnic->rq_wqes_timer); in nes_replenish_mgt_rq()
115 } while (atomic_read(&mgtvnic->rx_skbs_needed)); in nes_replenish_mgt_rq()
127 struct nes_vnic_mgt *mgtvnic = (struct nes_vnic_mgt *)parm; in nes_mgt_rq_wqes_timeout() local
129 atomic_set(&mgtvnic->rx_skb_timer_running, 0); in nes_mgt_rq_wqes_timeout()
130 if (atomic_read(&mgtvnic->rx_skbs_needed)) in nes_mgt_rq_wqes_timeout()
131 nes_replenish_mgt_rq(mgtvnic); in nes_mgt_rq_wqes_timeout()
775 struct nes_vnic_mgt *mgtvnic = container_of(cq, struct nes_vnic_mgt, mgt_cq); in nes_mgt_ce_handler() local
814 nes_change_quad_hash(nesdev, mgtvnic->nesvnic, nesqp); in nes_mgt_ce_handler()
817 rx_skb = mgtvnic->mgt.rx_skb[mgtvnic->mgt.rq_tail]; in nes_mgt_ce_handler()
820 rx_skb->protocol = eth_type_trans(rx_skb, mgtvnic->nesvnic->netdev); in nes_mgt_ce_handler()
824 mgtvnic->mgt.rq_tail++; in nes_mgt_ce_handler()
825 mgtvnic->mgt.rq_tail &= mgtvnic->mgt.rq_size - 1; in nes_mgt_ce_handler()
828 nes_queue_mgt_skbs(rx_skb, mgtvnic->nesvnic, nesqp); in nes_mgt_ce_handler()
845 skbs_needed = atomic_inc_return(&mgtvnic->rx_skbs_needed); in nes_mgt_ce_handler()
846 if (skbs_needed > (mgtvnic->mgt.rq_size >> 1)) in nes_mgt_ce_handler()
847 nes_replenish_mgt_rq(mgtvnic); in nes_mgt_ce_handler()
862 struct nes_vnic_mgt *mgtvnic; in nes_init_mgt_qp() local
882 mgtvnic = kzalloc(NES_MGT_QP_COUNT * sizeof(struct nes_vnic_mgt), GFP_KERNEL); in nes_init_mgt_qp()
883 if (mgtvnic == NULL) { in nes_init_mgt_qp()
897 kfree(mgtvnic); in nes_init_mgt_qp()
911 mgtvnic->nesvnic = nesvnic; in nes_init_mgt_qp()
912 mgtvnic->mgt.qp_id = nesdev->mac_index + NES_MGT_QP_OFFSET + i; in nes_init_mgt_qp()
922 spin_lock_init(&mgtvnic->mgt.rq_lock); in nes_init_mgt_qp()
925 mgtvnic->mgt.rq_vbase = vmem; in nes_init_mgt_qp()
926 mgtvnic->mgt.rq_pbase = pmem; in nes_init_mgt_qp()
927 mgtvnic->mgt.rq_head = 0; in nes_init_mgt_qp()
928 mgtvnic->mgt.rq_tail = 0; in nes_init_mgt_qp()
929 mgtvnic->mgt.rq_size = NES_MGT_WQ_COUNT; in nes_init_mgt_qp()
935 mgtvnic->mgt_cq.cq_number = mgtvnic->mgt.qp_id; in nes_init_mgt_qp()
936 mgtvnic->mgt_cq.cq_vbase = vmem; in nes_init_mgt_qp()
937 mgtvnic->mgt_cq.cq_pbase = pmem; in nes_init_mgt_qp()
938 mgtvnic->mgt_cq.cq_head = 0; in nes_init_mgt_qp()
939 mgtvnic->mgt_cq.cq_size = NES_MGT_WQ_COUNT; in nes_init_mgt_qp()
941 mgtvnic->mgt_cq.ce_handler = nes_mgt_ce_handler; in nes_init_mgt_qp()
952 ((u32)mgtvnic->mgt_cq.cq_size << 16)); in nes_init_mgt_qp()
954 mgtvnic->mgt_cq.cq_number | ((u32)nesdev->ceq_index << 16)); in nes_init_mgt_qp()
955 u64temp = (u64)mgtvnic->mgt_cq.cq_pbase; in nes_init_mgt_qp()
958 u64temp = (unsigned long)&mgtvnic->mgt_cq; in nes_init_mgt_qp()
970 mgt_context = (void *)(&mgtvnic->mgt_cq.cq_vbase[mgtvnic->mgt_cq.cq_size]); in nes_init_mgt_qp()
980 u64temp = (u64)mgtvnic->mgt.rq_pbase; in nes_init_mgt_qp()
983 u64temp = (u64)mgtvnic->mgt.rq_pbase; in nes_init_mgt_qp()
989 cqp_wqe->wqe_words[NES_CQP_WQE_ID_IDX] = cpu_to_le32(mgtvnic->mgt.qp_id); in nes_init_mgt_qp()
990 u64temp = (u64)mgtvnic->mgt_cq.cq_pbase + in nes_init_mgt_qp()
991 (mgtvnic->mgt_cq.cq_size * sizeof(struct nes_hw_nic_cqe)); in nes_init_mgt_qp()
1005 mgtvnic->mgt.qp_id); in nes_init_mgt_qp()
1010 mgtvnic->mgt.qp_id, ret); in nes_init_mgt_qp()
1012 nes_debug(NES_DBG_INIT, "MGT QP%u create timeout expired\n", mgtvnic->mgt.qp_id); in nes_init_mgt_qp()
1016 kfree(mgtvnic); in nes_init_mgt_qp()
1039 mgt_rqe = &mgtvnic->mgt.rq_vbase[counter]; in nes_init_mgt_qp()
1044 mgtvnic->mgt.rx_skb[counter] = skb; in nes_init_mgt_qp()
1047 init_timer(&mgtvnic->rq_wqes_timer); in nes_init_mgt_qp()
1048 mgtvnic->rq_wqes_timer.function = nes_mgt_rq_wqes_timeout; in nes_init_mgt_qp()
1049 mgtvnic->rq_wqes_timer.data = (unsigned long)mgtvnic; in nes_init_mgt_qp()
1052 mgtvnic->mgt.rq_head = wqe_count; in nes_init_mgt_qp()
1057 nes_write32(nesdev->regs + NES_WQE_ALLOC, (counter << 24) | mgtvnic->mgt.qp_id); in nes_init_mgt_qp()
1061 mgtvnic->mgt_cq.cq_number); in nes_init_mgt_qp()
1066 nesvnic->mgtvnic[i] = mgtvnic++; in nes_init_mgt_qp()
1075 struct nes_vnic_mgt *mgtvnic; in nes_destroy_mgt() local
1087 first_mgtvnic = nesvnic->mgtvnic[0]; in nes_destroy_mgt()
1089 mgtvnic = nesvnic->mgtvnic[i]; in nes_destroy_mgt()
1090 if (mgtvnic == NULL) in nes_destroy_mgt()
1093 while (mgtvnic->mgt.rq_head != mgtvnic->mgt.rq_tail) { in nes_destroy_mgt()
1094 rx_skb = mgtvnic->mgt.rx_skb[mgtvnic->mgt.rq_tail]; in nes_destroy_mgt()
1096 mgtvnic->mgt.rq_tail++; in nes_destroy_mgt()
1097 mgtvnic->mgt.rq_tail &= (mgtvnic->mgt.rq_size - 1); in nes_destroy_mgt()
1110 mgtvnic->mgt.qp_id); in nes_destroy_mgt()
1120 (NES_CQP_DESTROY_CQ | ((u32)mgtvnic->mgt_cq.cq_size << 16))); in nes_destroy_mgt()
1122 (mgtvnic->mgt_cq.cq_number | ((u32)nesdev->ceq_index << 16))); in nes_destroy_mgt()
1147 mgtvnic->mgt.qp_id); in nes_destroy_mgt()
1149 nesvnic->mgtvnic[i] = NULL; in nes_destroy_mgt()