Lines Matching refs:nic
57 static inline bool pass1_silicon(struct nicpf *nic) in pass1_silicon() argument
59 return nic->pdev->revision < 8; in pass1_silicon()
84 static void nic_reg_write(struct nicpf *nic, u64 offset, u64 val) in nic_reg_write() argument
86 writeq_relaxed(val, nic->reg_base + offset); in nic_reg_write()
89 static u64 nic_reg_read(struct nicpf *nic, u64 offset) in nic_reg_read() argument
91 return readq_relaxed(nic->reg_base + offset); in nic_reg_read()
95 static void nic_enable_mbx_intr(struct nicpf *nic) in nic_enable_mbx_intr() argument
98 nic_reg_write(nic, NIC_PF_MAILBOX_ENA_W1S, ~0ull); in nic_enable_mbx_intr()
99 nic_reg_write(nic, NIC_PF_MAILBOX_ENA_W1S + sizeof(u64), ~0ull); in nic_enable_mbx_intr()
102 static void nic_clear_mbx_intr(struct nicpf *nic, int vf, int mbx_reg) in nic_clear_mbx_intr() argument
104 nic_reg_write(nic, NIC_PF_MAILBOX_INT + (mbx_reg << 3), BIT_ULL(vf)); in nic_clear_mbx_intr()
116 static void nic_send_msg_to_vf(struct nicpf *nic, int vf, union nic_mbx *mbx) in nic_send_msg_to_vf() argument
118 void __iomem *mbx_addr = nic->reg_base + nic_get_mbx_addr(vf); in nic_send_msg_to_vf()
125 if (pass1_silicon(nic)) { in nic_send_msg_to_vf()
141 static void nic_mbx_send_ready(struct nicpf *nic, int vf) in nic_mbx_send_ready() argument
153 bgx_idx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_mbx_send_ready()
154 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_mbx_send_ready()
156 mac = bgx_get_lmac_mac(nic->node, bgx_idx, lmac); in nic_mbx_send_ready()
160 mbx.nic_cfg.sqs_mode = (vf >= nic->num_vf_en) ? true : false; in nic_mbx_send_ready()
161 mbx.nic_cfg.node_id = nic->node; in nic_mbx_send_ready()
165 nic_send_msg_to_vf(nic, vf, &mbx); in nic_mbx_send_ready()
171 static void nic_mbx_send_ack(struct nicpf *nic, int vf) in nic_mbx_send_ack() argument
176 nic_send_msg_to_vf(nic, vf, &mbx); in nic_mbx_send_ack()
183 static void nic_mbx_send_nack(struct nicpf *nic, int vf) in nic_mbx_send_nack() argument
188 nic_send_msg_to_vf(nic, vf, &mbx); in nic_mbx_send_nack()
194 static int nic_rcv_queue_sw_sync(struct nicpf *nic) in nic_rcv_queue_sw_sync() argument
198 nic_reg_write(nic, NIC_PF_SW_SYNC_RX, 0x01); in nic_rcv_queue_sw_sync()
201 if (nic_reg_read(nic, NIC_PF_SW_SYNC_RX_DONE) & 0x1) in nic_rcv_queue_sw_sync()
205 nic_reg_write(nic, NIC_PF_SW_SYNC_RX, 0x00); in nic_rcv_queue_sw_sync()
207 dev_err(&nic->pdev->dev, "Receive queue software sync failed"); in nic_rcv_queue_sw_sync()
214 static void nic_get_bgx_stats(struct nicpf *nic, struct bgx_stats_msg *bgx) in nic_get_bgx_stats() argument
219 bgx_idx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[bgx->vf_id]); in nic_get_bgx_stats()
220 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[bgx->vf_id]); in nic_get_bgx_stats()
227 mbx.bgx_stats.stats = bgx_get_rx_stats(nic->node, bgx_idx, in nic_get_bgx_stats()
230 mbx.bgx_stats.stats = bgx_get_tx_stats(nic->node, bgx_idx, in nic_get_bgx_stats()
232 nic_send_msg_to_vf(nic, bgx->vf_id, &mbx); in nic_get_bgx_stats()
236 static int nic_update_hw_frs(struct nicpf *nic, int new_frs, int vf) in nic_update_hw_frs() argument
239 dev_err(&nic->pdev->dev, in nic_update_hw_frs()
245 if (new_frs <= nic->pkind.maxlen) in nic_update_hw_frs()
248 nic->pkind.maxlen = new_frs; in nic_update_hw_frs()
249 nic_reg_write(nic, NIC_PF_PKIND_0_15_CFG, *(u64 *)&nic->pkind); in nic_update_hw_frs()
254 static void nic_set_tx_pkt_pad(struct nicpf *nic, int size) in nic_set_tx_pkt_pad() argument
264 lmac_cfg = nic_reg_read(nic, NIC_PF_LMAC_0_7_CFG | (lmac << 3)); in nic_set_tx_pkt_pad()
267 nic_reg_write(nic, NIC_PF_LMAC_0_7_CFG | (lmac << 3), lmac_cfg); in nic_set_tx_pkt_pad()
274 static void nic_set_lmac_vf_mapping(struct nicpf *nic) in nic_set_lmac_vf_mapping() argument
276 unsigned bgx_map = bgx_get_map(nic->node); in nic_set_lmac_vf_mapping()
281 nic->num_vf_en = 0; in nic_set_lmac_vf_mapping()
286 lmac_cnt = bgx_get_lmac_count(nic->node, bgx); in nic_set_lmac_vf_mapping()
288 nic->vf_lmac_map[next_bgx_lmac++] = in nic_set_lmac_vf_mapping()
290 nic->num_vf_en += lmac_cnt; in nic_set_lmac_vf_mapping()
300 nic_reg_write(nic, in nic_set_lmac_vf_mapping()
309 static void nic_init_hw(struct nicpf *nic) in nic_init_hw() argument
314 nic_reg_write(nic, NIC_PF_CFG, 0x3); in nic_init_hw()
317 nic_reg_write(nic, NIC_PF_BP_CFG, (1ULL << 6) | 0x03); in nic_init_hw()
320 nic_reg_write(nic, NIC_PF_INTF_0_1_SEND_CFG, in nic_init_hw()
322 nic_reg_write(nic, NIC_PF_INTF_0_1_SEND_CFG | (1 << 8), in nic_init_hw()
324 nic_reg_write(nic, NIC_PF_INTF_0_1_BP_CFG, in nic_init_hw()
326 nic_reg_write(nic, NIC_PF_INTF_0_1_BP_CFG + (1 << 8), in nic_init_hw()
330 nic->pkind.minlen = 0; in nic_init_hw()
331 nic->pkind.maxlen = NIC_HW_MAX_FRS + ETH_HLEN; in nic_init_hw()
332 nic->pkind.lenerr_en = 1; in nic_init_hw()
333 nic->pkind.rx_hdr = 0; in nic_init_hw()
334 nic->pkind.hdr_sl = 0; in nic_init_hw()
337 nic_reg_write(nic, NIC_PF_PKIND_0_15_CFG | (i << 3), in nic_init_hw()
338 *(u64 *)&nic->pkind); in nic_init_hw()
340 nic_set_tx_pkt_pad(nic, NIC_HW_MIN_FRS); in nic_init_hw()
343 nic_reg_write(nic, NIC_PF_INTR_TIMER_CFG, NICPF_CLK_PER_INT_TICK); in nic_init_hw()
346 nic_reg_write(nic, NIC_PF_RX_ETYPE_0_7, in nic_init_hw()
351 static void nic_config_cpi(struct nicpf *nic, struct cpi_cfg_msg *cfg) in nic_config_cpi() argument
359 bgx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vnic]); in nic_config_cpi()
360 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vnic]); in nic_config_cpi()
364 rssi_base = (lmac * nic->rss_ind_tbl_size) + (bgx * NIC_RSSI_PER_BGX); in nic_config_cpi()
367 nic_reg_write(nic, NIC_PF_CHAN_0_255_RX_BP_CFG | (chan << 3), in nic_config_cpi()
369 nic_reg_write(nic, NIC_PF_CHAN_0_255_RX_CFG | (chan << 3), in nic_config_cpi()
385 nic_reg_write(nic, NIC_PF_RSSI_0_4097_RQ | (rssi << 3), in nic_config_cpi()
400 if (pass1_silicon(nic)) { in nic_config_cpi()
401 nic_reg_write(nic, NIC_PF_CPI_0_2047_CFG | (cpi << 3), in nic_config_cpi()
406 nic_reg_write(nic, NIC_PF_CPI_0_2047_CFG | (cpi << 3), in nic_config_cpi()
409 nic_reg_write(nic, NIC_PF_MPI_0_2047_CFG | (cpi << 3), in nic_config_cpi()
423 nic->cpi_base[cfg->vf_id] = cpi_base; in nic_config_cpi()
424 nic->rssi_base[cfg->vf_id] = rssi_base; in nic_config_cpi()
428 static void nic_send_rss_size(struct nicpf *nic, int vf) in nic_send_rss_size() argument
436 mbx.rss_size.ind_tbl_size = nic->rss_ind_tbl_size; in nic_send_rss_size()
437 nic_send_msg_to_vf(nic, vf, &mbx); in nic_send_rss_size()
446 static void nic_config_rss(struct nicpf *nic, struct rss_cfg_msg *cfg) in nic_config_rss() argument
452 rssi_base = nic->rssi_base[cfg->vf_id] + cfg->tbl_offset; in nic_config_rss()
461 qset = nic->vf_sqs[cfg->vf_id][svf - 1]; in nic_config_rss()
464 nic_reg_write(nic, NIC_PF_RSSI_0_4097_RQ | (rssi << 3), in nic_config_rss()
469 cpi_base = nic->cpi_base[cfg->vf_id]; in nic_config_rss()
470 if (pass1_silicon(nic)) in nic_config_rss()
474 cpi_cfg = nic_reg_read(nic, idx_addr | (cpi_base << 3)); in nic_config_rss()
477 nic_reg_write(nic, idx_addr | (cpi_base << 3), cpi_cfg); in nic_config_rss()
493 static void nic_tx_channel_cfg(struct nicpf *nic, u8 vnic, in nic_tx_channel_cfg() argument
503 pqs_vnic = nic->pqs_vf[vnic]; in nic_tx_channel_cfg()
507 bgx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[pqs_vnic]); in nic_tx_channel_cfg()
508 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[pqs_vnic]); in nic_tx_channel_cfg()
519 nic_reg_write(nic, NIC_PF_QSET_0_127_SQ_0_7_CFG2 | in nic_tx_channel_cfg()
522 nic_reg_write(nic, NIC_PF_TL4_0_1023_CFG | (tl4 << 3), in nic_tx_channel_cfg()
525 nic_reg_write(nic, NIC_PF_TL3_0_255_CFG | (tl3 << 3), rr_quantum); in nic_tx_channel_cfg()
527 nic_reg_write(nic, NIC_PF_TL3_0_255_CHAN | (tl3 << 3), chan); in nic_tx_channel_cfg()
529 nic_reg_write(nic, NIC_PF_CHAN_0_255_TX_CFG | (chan << 3), 1); in nic_tx_channel_cfg()
532 nic_reg_write(nic, NIC_PF_TL3A_0_63_CFG | (tl2 << 3), tl2); in nic_tx_channel_cfg()
533 nic_reg_write(nic, NIC_PF_TL2_0_63_CFG | (tl2 << 3), rr_quantum); in nic_tx_channel_cfg()
535 nic_reg_write(nic, NIC_PF_TL2_0_63_PRI | (tl2 << 3), 0x00); in nic_tx_channel_cfg()
539 static void nic_send_pnicvf(struct nicpf *nic, int sqs) in nic_send_pnicvf() argument
544 mbx.nicvf.nicvf = nic->nicvf[nic->pqs_vf[sqs]]; in nic_send_pnicvf()
545 nic_send_msg_to_vf(nic, sqs, &mbx); in nic_send_pnicvf()
549 static void nic_send_snicvf(struct nicpf *nic, struct nicvf_ptr *nicvf) in nic_send_snicvf() argument
552 int sqs_id = nic->vf_sqs[nicvf->vf_id][nicvf->sqs_id]; in nic_send_snicvf()
556 mbx.nicvf.nicvf = nic->nicvf[sqs_id]; in nic_send_snicvf()
557 nic_send_msg_to_vf(nic, nicvf->vf_id, &mbx); in nic_send_snicvf()
563 static int nic_nxt_avail_sqs(struct nicpf *nic) in nic_nxt_avail_sqs() argument
567 for (sqs = 0; sqs < nic->num_sqs_en; sqs++) { in nic_nxt_avail_sqs()
568 if (!nic->sqs_used[sqs]) in nic_nxt_avail_sqs()
569 nic->sqs_used[sqs] = true; in nic_nxt_avail_sqs()
572 return sqs + nic->num_vf_en; in nic_nxt_avail_sqs()
578 static void nic_alloc_sqs(struct nicpf *nic, struct sqs_alloc *sqs) in nic_alloc_sqs() argument
584 if (!nic->num_sqs_en) in nic_alloc_sqs()
588 sqs_id = nic_nxt_avail_sqs(nic); in nic_alloc_sqs()
591 nic->vf_sqs[sqs->vf_id][idx] = sqs_id; in nic_alloc_sqs()
592 nic->pqs_vf[sqs_id] = sqs->vf_id; in nic_alloc_sqs()
600 nic_send_msg_to_vf(nic, sqs->vf_id, &mbx); in nic_alloc_sqs()
603 static int nic_config_loopback(struct nicpf *nic, struct set_loopback *lbk) in nic_config_loopback() argument
610 bgx_idx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[lbk->vf_id]); in nic_config_loopback()
611 lmac_idx = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[lbk->vf_id]); in nic_config_loopback()
613 bgx_lmac_internal_loopback(nic->node, bgx_idx, lmac_idx, lbk->enable); in nic_config_loopback()
618 static void nic_enable_vf(struct nicpf *nic, int vf, bool enable) in nic_enable_vf() argument
622 nic->vf_enabled[vf] = enable; in nic_enable_vf()
624 if (vf >= nic->num_vf_en) in nic_enable_vf()
627 bgx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_enable_vf()
628 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_enable_vf()
630 bgx_lmac_rx_tx_enable(nic->node, bgx, lmac, enable); in nic_enable_vf()
634 static void nic_handle_mbx_intr(struct nicpf *nic, int vf) in nic_handle_mbx_intr() argument
645 nic->mbx_lock[vf] = true; in nic_handle_mbx_intr()
651 *mbx_data = nic_reg_read(nic, mbx_addr); in nic_handle_mbx_intr()
656 dev_dbg(&nic->pdev->dev, "%s: Mailbox msg %d from VF%d\n", in nic_handle_mbx_intr()
660 nic_mbx_send_ready(nic, vf); in nic_handle_mbx_intr()
662 nic->link[vf] = 0; in nic_handle_mbx_intr()
663 nic->duplex[vf] = 0; in nic_handle_mbx_intr()
664 nic->speed[vf] = 0; in nic_handle_mbx_intr()
673 if (vf >= nic->num_vf_en) { in nic_handle_mbx_intr()
676 cfg |= nic->pqs_vf[vf]; in nic_handle_mbx_intr()
678 nic_reg_write(nic, reg_addr, cfg); in nic_handle_mbx_intr()
684 nic_reg_write(nic, reg_addr, mbx.rq.cfg); in nic_handle_mbx_intr()
690 nic_reg_write(nic, reg_addr, mbx.rq.cfg); in nic_handle_mbx_intr()
693 ret = nic_rcv_queue_sw_sync(nic); in nic_handle_mbx_intr()
699 nic_reg_write(nic, reg_addr, mbx.rq.cfg); in nic_handle_mbx_intr()
705 nic_reg_write(nic, reg_addr, mbx.sq.cfg); in nic_handle_mbx_intr()
706 nic_tx_channel_cfg(nic, mbx.qs.num, &mbx.sq); in nic_handle_mbx_intr()
709 if (vf >= nic->num_vf_en) in nic_handle_mbx_intr()
712 bgx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[lmac]); in nic_handle_mbx_intr()
713 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[lmac]); in nic_handle_mbx_intr()
714 bgx_set_lmac_mac(nic->node, bgx, lmac, mbx.mac.mac_addr); in nic_handle_mbx_intr()
717 ret = nic_update_hw_frs(nic, mbx.frs.max_frs, in nic_handle_mbx_intr()
721 nic_config_cpi(nic, &mbx.cpi_cfg); in nic_handle_mbx_intr()
724 nic_send_rss_size(nic, vf); in nic_handle_mbx_intr()
728 nic_config_rss(nic, &mbx.rss_cfg); in nic_handle_mbx_intr()
732 nic_enable_vf(nic, vf, true); in nic_handle_mbx_intr()
736 if (vf >= nic->num_vf_en) in nic_handle_mbx_intr()
737 nic->sqs_used[vf - nic->num_vf_en] = false; in nic_handle_mbx_intr()
738 nic->pqs_vf[vf] = 0; in nic_handle_mbx_intr()
739 nic_enable_vf(nic, vf, false); in nic_handle_mbx_intr()
742 nic_alloc_sqs(nic, &mbx.sqs_alloc); in nic_handle_mbx_intr()
745 nic->nicvf[vf] = mbx.nicvf.nicvf; in nic_handle_mbx_intr()
748 nic_send_pnicvf(nic, vf); in nic_handle_mbx_intr()
751 nic_send_snicvf(nic, &mbx.nicvf); in nic_handle_mbx_intr()
754 nic_get_bgx_stats(nic, &mbx.bgx_stats); in nic_handle_mbx_intr()
757 ret = nic_config_loopback(nic, &mbx.lbk); in nic_handle_mbx_intr()
760 dev_err(&nic->pdev->dev, in nic_handle_mbx_intr()
766 nic_mbx_send_ack(nic, vf); in nic_handle_mbx_intr()
768 nic_mbx_send_nack(nic, vf); in nic_handle_mbx_intr()
770 nic->mbx_lock[vf] = false; in nic_handle_mbx_intr()
773 static void nic_mbx_intr_handler (struct nicpf *nic, int mbx) in nic_mbx_intr_handler() argument
778 intr = nic_reg_read(nic, NIC_PF_MAILBOX_INT + (mbx << 3)); in nic_mbx_intr_handler()
779 dev_dbg(&nic->pdev->dev, "PF interrupt Mbox%d 0x%llx\n", mbx, intr); in nic_mbx_intr_handler()
782 dev_dbg(&nic->pdev->dev, "Intr from VF %d\n", in nic_mbx_intr_handler()
785 nic_handle_mbx_intr(nic, vf + (mbx * vf_per_mbx_reg)); in nic_mbx_intr_handler()
786 nic_clear_mbx_intr(nic, vf, mbx); in nic_mbx_intr_handler()
793 struct nicpf *nic = (struct nicpf *)nic_irq; in nic_mbx0_intr_handler() local
795 nic_mbx_intr_handler(nic, 0); in nic_mbx0_intr_handler()
802 struct nicpf *nic = (struct nicpf *)nic_irq; in nic_mbx1_intr_handler() local
804 nic_mbx_intr_handler(nic, 1); in nic_mbx1_intr_handler()
809 static int nic_enable_msix(struct nicpf *nic) in nic_enable_msix() argument
813 nic->num_vec = NIC_PF_MSIX_VECTORS; in nic_enable_msix()
815 for (i = 0; i < nic->num_vec; i++) in nic_enable_msix()
816 nic->msix_entries[i].entry = i; in nic_enable_msix()
818 ret = pci_enable_msix(nic->pdev, nic->msix_entries, nic->num_vec); in nic_enable_msix()
820 dev_err(&nic->pdev->dev, in nic_enable_msix()
822 nic->num_vec); in nic_enable_msix()
826 nic->msix_enabled = 1; in nic_enable_msix()
830 static void nic_disable_msix(struct nicpf *nic) in nic_disable_msix() argument
832 if (nic->msix_enabled) { in nic_disable_msix()
833 pci_disable_msix(nic->pdev); in nic_disable_msix()
834 nic->msix_enabled = 0; in nic_disable_msix()
835 nic->num_vec = 0; in nic_disable_msix()
839 static void nic_free_all_interrupts(struct nicpf *nic) in nic_free_all_interrupts() argument
843 for (irq = 0; irq < nic->num_vec; irq++) { in nic_free_all_interrupts()
844 if (nic->irq_allocated[irq]) in nic_free_all_interrupts()
845 free_irq(nic->msix_entries[irq].vector, nic); in nic_free_all_interrupts()
846 nic->irq_allocated[irq] = false; in nic_free_all_interrupts()
850 static int nic_register_interrupts(struct nicpf *nic) in nic_register_interrupts() argument
855 ret = nic_enable_msix(nic); in nic_register_interrupts()
860 ret = request_irq(nic->msix_entries[NIC_PF_INTR_ID_MBOX0].vector, in nic_register_interrupts()
861 nic_mbx0_intr_handler, 0, "NIC Mbox0", nic); in nic_register_interrupts()
865 nic->irq_allocated[NIC_PF_INTR_ID_MBOX0] = true; in nic_register_interrupts()
867 ret = request_irq(nic->msix_entries[NIC_PF_INTR_ID_MBOX1].vector, in nic_register_interrupts()
868 nic_mbx1_intr_handler, 0, "NIC Mbox1", nic); in nic_register_interrupts()
872 nic->irq_allocated[NIC_PF_INTR_ID_MBOX1] = true; in nic_register_interrupts()
875 nic_enable_mbx_intr(nic); in nic_register_interrupts()
879 dev_err(&nic->pdev->dev, "Request irq failed\n"); in nic_register_interrupts()
880 nic_free_all_interrupts(nic); in nic_register_interrupts()
884 static void nic_unregister_interrupts(struct nicpf *nic) in nic_unregister_interrupts() argument
886 nic_free_all_interrupts(nic); in nic_unregister_interrupts()
887 nic_disable_msix(nic); in nic_unregister_interrupts()
890 static int nic_num_sqs_en(struct nicpf *nic, int vf_en) in nic_num_sqs_en() argument
899 pos = pci_find_ext_capability(nic->pdev, PCI_EXT_CAP_ID_SRIOV); in nic_num_sqs_en()
900 pci_read_config_word(nic->pdev, (pos + PCI_SRIOV_TOTAL_VF), &total_vf); in nic_num_sqs_en()
904 static int nic_sriov_init(struct pci_dev *pdev, struct nicpf *nic) in nic_sriov_init() argument
918 if (total_vf_cnt < nic->num_vf_en) in nic_sriov_init()
919 nic->num_vf_en = total_vf_cnt; in nic_sriov_init()
924 vf_en = nic->num_vf_en; in nic_sriov_init()
925 nic->num_sqs_en = nic_num_sqs_en(nic, nic->num_vf_en); in nic_sriov_init()
926 vf_en += nic->num_sqs_en; in nic_sriov_init()
932 nic->num_vf_en = 0; in nic_sriov_init()
939 nic->flags |= NIC_SRIOV_ENABLED; in nic_sriov_init()
950 struct nicpf *nic; in nic_poll_for_link() local
954 nic = container_of(work, struct nicpf, dwork.work); in nic_poll_for_link()
958 for (vf = 0; vf < nic->num_vf_en; vf++) { in nic_poll_for_link()
960 if (!nic->vf_enabled[vf]) in nic_poll_for_link()
964 bgx = NIC_GET_BGX_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_poll_for_link()
965 lmac = NIC_GET_LMAC_FROM_VF_LMAC_MAP(nic->vf_lmac_map[vf]); in nic_poll_for_link()
967 bgx_get_lmac_link_state(nic->node, bgx, lmac, &link); in nic_poll_for_link()
970 if (nic->link[vf] == link.link_up) in nic_poll_for_link()
973 if (!nic->mbx_lock[vf]) { in nic_poll_for_link()
974 nic->link[vf] = link.link_up; in nic_poll_for_link()
975 nic->duplex[vf] = link.duplex; in nic_poll_for_link()
976 nic->speed[vf] = link.speed; in nic_poll_for_link()
982 nic_send_msg_to_vf(nic, vf, &mbx); in nic_poll_for_link()
985 queue_delayed_work(nic->check_link, &nic->dwork, HZ * 2); in nic_poll_for_link()
991 struct nicpf *nic; in nic_probe() local
996 nic = devm_kzalloc(dev, sizeof(*nic), GFP_KERNEL); in nic_probe()
997 if (!nic) in nic_probe()
1000 pci_set_drvdata(pdev, nic); in nic_probe()
1002 nic->pdev = pdev; in nic_probe()
1030 nic->reg_base = pcim_iomap(pdev, PCI_CFG_REG_BAR_NUM, 0); in nic_probe()
1031 if (!nic->reg_base) { in nic_probe()
1037 nic->node = nic_get_node_id(pdev); in nic_probe()
1039 nic_set_lmac_vf_mapping(nic); in nic_probe()
1042 nic_init_hw(nic); in nic_probe()
1045 nic->rss_ind_tbl_size = NIC_MAX_RSS_IDR_TBL_SIZE; in nic_probe()
1048 err = nic_register_interrupts(nic); in nic_probe()
1053 err = nic_sriov_init(pdev, nic); in nic_probe()
1058 nic->check_link = alloc_workqueue("check_link_status", in nic_probe()
1060 if (!nic->check_link) { in nic_probe()
1065 INIT_DELAYED_WORK(&nic->dwork, nic_poll_for_link); in nic_probe()
1066 queue_delayed_work(nic->check_link, &nic->dwork, 0); in nic_probe()
1071 if (nic->flags & NIC_SRIOV_ENABLED) in nic_probe()
1074 nic_unregister_interrupts(nic); in nic_probe()
1085 struct nicpf *nic = pci_get_drvdata(pdev); in nic_remove() local
1087 if (nic->flags & NIC_SRIOV_ENABLED) in nic_remove()
1090 if (nic->check_link) { in nic_remove()
1092 cancel_delayed_work_sync(&nic->dwork); in nic_remove()
1093 destroy_workqueue(nic->check_link); in nic_remove()
1096 nic_unregister_interrupts(nic); in nic_remove()