Lines Matching refs:wx

50 static void ngbe_init_type_code(struct wx *wx)  in ngbe_init_type_code()  argument
55 wx->mac.type = wx_mac_em; in ngbe_init_type_code()
56 type_mask = (u16)(wx->subsystem_device_id & NGBE_OEM_MASK); in ngbe_init_type_code()
57 ncsi_mask = wx->subsystem_device_id & NGBE_NCSI_MASK; in ngbe_init_type_code()
58 wol_mask = wx->subsystem_device_id & NGBE_WOL_MASK; in ngbe_init_type_code()
60 val = rd32(wx, WX_CFG_PORT_ST); in ngbe_init_type_code()
61 wx->mac_type = (val & BIT(7)) >> 7 ? in ngbe_init_type_code()
65 wx->wol_enabled = (wol_mask == NGBE_WOL_SUP) ? 1 : 0; in ngbe_init_type_code()
66 wx->ncsi_enabled = (ncsi_mask == NGBE_NCSI_MASK || in ngbe_init_type_code()
74 wx->gpio_ctrl = 1; in ngbe_init_type_code()
77 wx->gpio_ctrl = 0; in ngbe_init_type_code()
88 static inline int ngbe_init_rss_key(struct wx *wx) in ngbe_init_rss_key() argument
92 if (!wx->rss_key) { in ngbe_init_rss_key()
98 wx->rss_key = rss_key; in ngbe_init_rss_key()
108 static int ngbe_sw_init(struct wx *wx) in ngbe_sw_init() argument
110 struct pci_dev *pdev = wx->pdev; in ngbe_sw_init()
114 wx->mac.num_rar_entries = NGBE_RAR_ENTRIES; in ngbe_sw_init()
115 wx->mac.max_rx_queues = NGBE_MAX_RX_QUEUES; in ngbe_sw_init()
116 wx->mac.max_tx_queues = NGBE_MAX_TX_QUEUES; in ngbe_sw_init()
117 wx->mac.mcft_size = NGBE_MC_TBL_SIZE; in ngbe_sw_init()
118 wx->mac.rx_pb_size = NGBE_RX_PB_SIZE; in ngbe_sw_init()
119 wx->mac.tx_pb_size = NGBE_TDB_PB_SZ; in ngbe_sw_init()
122 err = wx_sw_init(wx); in ngbe_sw_init()
124 wx_err(wx, "read of internal subsystem device id failed\n"); in ngbe_sw_init()
129 ngbe_init_type_code(wx); in ngbe_sw_init()
132 wx->max_q_vectors = NGBE_MAX_MSIX_VECTORS; in ngbe_sw_init()
133 err = wx_get_pcie_msix_counts(wx, &msix_count, NGBE_MAX_MSIX_VECTORS); in ngbe_sw_init()
136 wx->mac.max_msix_vectors = msix_count; in ngbe_sw_init()
138 if (ngbe_init_rss_key(wx)) in ngbe_sw_init()
142 wx->rx_itr_setting = 1; in ngbe_sw_init()
143 wx->tx_itr_setting = 1; in ngbe_sw_init()
146 wx->tx_ring_count = NGBE_DEFAULT_TXD; in ngbe_sw_init()
147 wx->rx_ring_count = NGBE_DEFAULT_RXD; in ngbe_sw_init()
150 wx->tx_work_limit = NGBE_DEFAULT_TX_WORK; in ngbe_sw_init()
151 wx->rx_work_limit = NGBE_DEFAULT_RX_WORK; in ngbe_sw_init()
161 static void ngbe_irq_enable(struct wx *wx, bool queues) in ngbe_irq_enable() argument
168 wr32(wx, WX_GPIO_DDR, WX_GPIO_DDR_0); in ngbe_irq_enable()
169 wr32(wx, WX_GPIO_INTEN, WX_GPIO_INTEN_0 | WX_GPIO_INTEN_1); in ngbe_irq_enable()
170 wr32(wx, WX_GPIO_INTTYPE_LEVEL, 0x0); in ngbe_irq_enable()
171 wr32(wx, WX_GPIO_POLARITY, wx->gpio_ctrl ? 0 : 0x3); in ngbe_irq_enable()
173 wr32(wx, WX_PX_MISC_IEN, mask); in ngbe_irq_enable()
177 wx_intr_enable(wx, NGBE_INTR_ALL); in ngbe_irq_enable()
179 wx_intr_enable(wx, NGBE_INTR_MISC(wx)); in ngbe_irq_enable()
190 struct wx *wx = data; in ngbe_intr() local
194 q_vector = wx->q_vector[0]; in ngbe_intr()
195 pdev = wx->pdev; in ngbe_intr()
197 eicr = wx_misc_isb(wx, WX_ISB_VEC0); in ngbe_intr()
202 if (netif_running(wx->netdev)) in ngbe_intr()
203 ngbe_irq_enable(wx, true); in ngbe_intr()
206 wx->isb_mem[WX_ISB_VEC0] = 0; in ngbe_intr()
208 wr32(wx, WX_PX_INTA, 1); in ngbe_intr()
210 wx->isb_mem[WX_ISB_MISC] = 0; in ngbe_intr()
214 if (netif_running(wx->netdev)) in ngbe_intr()
215 ngbe_irq_enable(wx, false); in ngbe_intr()
222 struct wx *wx = data; in ngbe_msix_other() local
225 if (netif_running(wx->netdev)) in ngbe_msix_other()
226 ngbe_irq_enable(wx, false); in ngbe_msix_other()
238 static int ngbe_request_msix_irqs(struct wx *wx) in ngbe_request_msix_irqs() argument
240 struct net_device *netdev = wx->netdev; in ngbe_request_msix_irqs()
243 for (vector = 0; vector < wx->num_q_vectors; vector++) { in ngbe_request_msix_irqs()
244 struct wx_q_vector *q_vector = wx->q_vector[vector]; in ngbe_request_msix_irqs()
245 struct msix_entry *entry = &wx->msix_entries[vector]; in ngbe_request_msix_irqs()
257 wx_err(wx, "request_irq failed for MSIX interrupt %s Error: %d\n", in ngbe_request_msix_irqs()
263 err = request_irq(wx->msix_entries[vector].vector, in ngbe_request_msix_irqs()
264 ngbe_msix_other, 0, netdev->name, wx); in ngbe_request_msix_irqs()
267 wx_err(wx, "request_irq for msix_other failed: %d\n", err); in ngbe_request_msix_irqs()
276 free_irq(wx->msix_entries[vector].vector, in ngbe_request_msix_irqs()
277 wx->q_vector[vector]); in ngbe_request_msix_irqs()
279 wx_reset_interrupt_capability(wx); in ngbe_request_msix_irqs()
290 static int ngbe_request_irq(struct wx *wx) in ngbe_request_irq() argument
292 struct net_device *netdev = wx->netdev; in ngbe_request_irq()
293 struct pci_dev *pdev = wx->pdev; in ngbe_request_irq()
297 err = ngbe_request_msix_irqs(wx); in ngbe_request_irq()
300 netdev->name, wx); in ngbe_request_irq()
303 netdev->name, wx); in ngbe_request_irq()
306 wx_err(wx, "request_irq failed, Error %d\n", err); in ngbe_request_irq()
311 static void ngbe_disable_device(struct wx *wx) in ngbe_disable_device() argument
313 struct net_device *netdev = wx->netdev; in ngbe_disable_device()
317 for (i = 0; i < wx->num_rx_queues; i++) in ngbe_disable_device()
319 wx_disable_rx_queue(wx, wx->rx_ring[i]); in ngbe_disable_device()
321 wx_disable_rx(wx); in ngbe_disable_device()
322 wx_napi_disable_all(wx); in ngbe_disable_device()
325 if (wx->gpio_ctrl) in ngbe_disable_device()
326 ngbe_sfp_modules_txrx_powerctl(wx, false); in ngbe_disable_device()
327 wx_irq_disable(wx); in ngbe_disable_device()
329 for (i = 0; i < wx->num_tx_queues; i++) { in ngbe_disable_device()
330 u8 reg_idx = wx->tx_ring[i]->reg_idx; in ngbe_disable_device()
332 wr32(wx, WX_PX_TR_CFG(reg_idx), WX_PX_TR_CFG_SWFLSH); in ngbe_disable_device()
336 static void ngbe_down(struct wx *wx) in ngbe_down() argument
338 phy_stop(wx->phydev); in ngbe_down()
339 ngbe_disable_device(wx); in ngbe_down()
340 wx_clean_all_tx_rings(wx); in ngbe_down()
341 wx_clean_all_rx_rings(wx); in ngbe_down()
344 static void ngbe_up(struct wx *wx) in ngbe_up() argument
346 wx_configure_vectors(wx); in ngbe_up()
350 wx_napi_enable_all(wx); in ngbe_up()
352 netif_tx_start_all_queues(wx->netdev); in ngbe_up()
355 rd32(wx, WX_PX_IC); in ngbe_up()
356 rd32(wx, WX_PX_MISC_IC); in ngbe_up()
357 ngbe_irq_enable(wx, true); in ngbe_up()
358 if (wx->gpio_ctrl) in ngbe_up()
359 ngbe_sfp_modules_txrx_powerctl(wx, true); in ngbe_up()
361 phy_start(wx->phydev); in ngbe_up()
375 struct wx *wx = netdev_priv(netdev); in ngbe_open() local
378 wx_control_hw(wx, true); in ngbe_open()
380 err = wx_setup_resources(wx); in ngbe_open()
384 wx_configure(wx); in ngbe_open()
386 err = ngbe_request_irq(wx); in ngbe_open()
390 err = ngbe_phy_connect(wx); in ngbe_open()
394 err = netif_set_real_num_tx_queues(netdev, wx->num_tx_queues); in ngbe_open()
398 err = netif_set_real_num_rx_queues(netdev, wx->num_rx_queues); in ngbe_open()
402 ngbe_up(wx); in ngbe_open()
406 phy_disconnect(wx->phydev); in ngbe_open()
408 wx_free_irq(wx); in ngbe_open()
410 wx_free_resources(wx); in ngbe_open()
427 struct wx *wx = netdev_priv(netdev); in ngbe_close() local
429 ngbe_down(wx); in ngbe_close()
430 wx_free_irq(wx); in ngbe_close()
431 wx_free_resources(wx); in ngbe_close()
432 phy_disconnect(wx->phydev); in ngbe_close()
433 wx_control_hw(wx, false); in ngbe_close()
440 struct wx *wx = pci_get_drvdata(pdev); in ngbe_dev_shutdown() local
443 netdev = wx->netdev; in ngbe_dev_shutdown()
448 ngbe_down(wx); in ngbe_dev_shutdown()
450 wx_control_hw(wx, false); in ngbe_dev_shutdown()
457 struct wx *wx = pci_get_drvdata(pdev); in ngbe_shutdown() local
460 wake = !!wx->wol; in ngbe_shutdown()
496 struct wx *wx = NULL; in ngbe_probe() local
527 sizeof(struct wx), in ngbe_probe()
537 wx = netdev_priv(netdev); in ngbe_probe()
538 wx->netdev = netdev; in ngbe_probe()
539 wx->pdev = pdev; in ngbe_probe()
540 wx->msg_enable = BIT(3) - 1; in ngbe_probe()
542 wx->hw_addr = devm_ioremap(&pdev->dev, in ngbe_probe()
545 if (!wx->hw_addr) { in ngbe_probe()
550 wx->driver_name = ngbe_driver_name; in ngbe_probe()
567 wx->bd_number = func_nums; in ngbe_probe()
569 err = ngbe_sw_init(wx); in ngbe_probe()
574 err = wx_check_flash_load(wx, NGBE_SPI_ILDR_STATUS_PERST); in ngbe_probe()
577 err = wx_check_flash_load(wx, NGBE_SPI_ILDR_STATUS_PWRRST); in ngbe_probe()
581 err = wx_mng_present(wx); in ngbe_probe()
587 err = ngbe_reset_hw(wx); in ngbe_probe()
593 if (wx->bus.func == 0) { in ngbe_probe()
594 wr32(wx, NGBE_CALSUM_CAP_STATUS, 0x0); in ngbe_probe()
595 wr32(wx, NGBE_EEPROM_VERSION_STORE_REG, 0x0); in ngbe_probe()
597 e2rom_cksum_cap = rd32(wx, NGBE_CALSUM_CAP_STATUS); in ngbe_probe()
598 saved_ver = rd32(wx, NGBE_EEPROM_VERSION_STORE_REG); in ngbe_probe()
601 wx_init_eeprom_params(wx); in ngbe_probe()
602 if (wx->bus.func == 0 || e2rom_cksum_cap == 0) { in ngbe_probe()
604 err = ngbe_eeprom_chksum_hostif(wx); in ngbe_probe()
612 wx->wol = 0; in ngbe_probe()
613 if (wx->wol_enabled) in ngbe_probe()
614 wx->wol = NGBE_PSR_WKUP_CTL_MAG; in ngbe_probe()
616 wx->wol_enabled = !!(wx->wol); in ngbe_probe()
617 wr32(wx, NGBE_PSR_WKUP_CTL, wx->wol); in ngbe_probe()
619 device_set_wakeup_enable(&pdev->dev, wx->wol); in ngbe_probe()
627 wx_read_ee_hostif(wx, in ngbe_probe()
628 wx->eeprom.sw_region_offset + NGBE_EEPROM_VERSION_H, in ngbe_probe()
631 wx_read_ee_hostif(wx, in ngbe_probe()
632 wx->eeprom.sw_region_offset + NGBE_EEPROM_VERSION_L, in ngbe_probe()
635 wr32(wx, NGBE_EEPROM_VERSION_STORE_REG, etrack_id); in ngbe_probe()
637 snprintf(wx->eeprom_id, sizeof(wx->eeprom_id), in ngbe_probe()
640 eth_hw_addr_set(netdev, wx->mac.perm_addr); in ngbe_probe()
641 wx_mac_set_default_filter(wx, wx->mac.perm_addr); in ngbe_probe()
643 err = wx_init_interrupt_scheme(wx); in ngbe_probe()
648 err = ngbe_mdio_init(wx); in ngbe_probe()
656 pci_set_drvdata(pdev, wx); in ngbe_probe()
658 netif_info(wx, probe, netdev, in ngbe_probe()
660 wx->mac_type == em_mac_type_mdi ? "Internal" : "External"); in ngbe_probe()
661 netif_info(wx, probe, netdev, "%pM\n", netdev->dev_addr); in ngbe_probe()
666 wx_control_hw(wx, false); in ngbe_probe()
668 wx_clear_interrupt_scheme(wx); in ngbe_probe()
670 kfree(wx->mac_table); in ngbe_probe()
691 struct wx *wx = pci_get_drvdata(pdev); in ngbe_remove() local
694 netdev = wx->netdev; in ngbe_remove()
699 kfree(wx->mac_table); in ngbe_remove()
700 wx_clear_interrupt_scheme(wx); in ngbe_remove()