Lines Matching +full:rx +full:- +full:tx
1 /* SPDX-License-Identifier: GPL-2.0+ */
23 pci_release_selected_regions(adapter->pdev, in lan743x_pci_cleanup()
24 pci_select_bars(adapter->pdev, in lan743x_pci_cleanup()
26 pci_disable_device(adapter->pdev); in lan743x_pci_cleanup()
35 adapter->pdev = pdev; in lan743x_pci_init()
40 netif_info(adapter, probe, adapter->netdev, in lan743x_pci_init()
42 pdev->vendor, pdev->device); in lan743x_pci_init()
55 pci_disable_device(adapter->pdev); in lan743x_pci_init()
63 return ioread32(&adapter->csr.csr_address[offset]); in lan743x_csr_read()
69 iowrite32(data, &adapter->csr.csr_address[offset]); in lan743x_csr_write()
100 struct lan743x_csr *csr = &adapter->csr; in lan743x_csr_init()
104 bar_start = pci_resource_start(adapter->pdev, 0); in lan743x_csr_init()
105 bar_length = pci_resource_len(adapter->pdev, 0); in lan743x_csr_init()
106 csr->csr_address = devm_ioremap(&adapter->pdev->dev, in lan743x_csr_init()
108 if (!csr->csr_address) { in lan743x_csr_init()
109 result = -ENOMEM; in lan743x_csr_init()
113 csr->id_rev = lan743x_csr_read(adapter, ID_REV); in lan743x_csr_init()
114 csr->fpga_rev = lan743x_csr_read(adapter, FPGA_REV); in lan743x_csr_init()
115 netif_info(adapter, probe, adapter->netdev, in lan743x_csr_init()
117 csr->id_rev, FPGA_REV_GET_MAJOR_(csr->fpga_rev), in lan743x_csr_init()
118 FPGA_REV_GET_MINOR_(csr->fpga_rev)); in lan743x_csr_init()
119 if (!ID_REV_IS_VALID_CHIP_ID_(csr->id_rev)) { in lan743x_csr_init()
120 result = -ENODEV; in lan743x_csr_init()
124 csr->flags = LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR; in lan743x_csr_init()
125 switch (csr->id_rev & ID_REV_CHIP_REV_MASK_) { in lan743x_csr_init()
127 csr->flags |= LAN743X_CSR_FLAG_IS_A0; in lan743x_csr_init()
128 csr->flags &= ~LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR; in lan743x_csr_init()
131 csr->flags |= LAN743X_CSR_FLAG_IS_B0; in lan743x_csr_init()
146 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_software_isr()
151 /* disable the interrupt to prevent repeated re-triggering */ in lan743x_intr_software_isr()
153 intr->software_isr_flag = 1; in lan743x_intr_software_isr()
159 struct lan743x_tx *tx = context; in lan743x_tx_isr() local
160 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_isr()
166 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_isr()
169 if (int_sts & INT_BIT_DMA_TX_(tx->channel_number)) { in lan743x_tx_isr()
170 u32 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number); in lan743x_tx_isr()
187 napi_schedule(&tx->napi); in lan743x_tx_isr()
195 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_isr()
200 struct lan743x_rx *rx = context; in lan743x_rx_isr() local
201 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_isr()
206 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
209 if (int_sts & INT_BIT_DMA_RX_(rx->channel_number)) { in lan743x_rx_isr()
210 u32 rx_frame_bit = DMAC_INT_BIT_RXFRM_(rx->channel_number); in lan743x_rx_isr()
227 napi_schedule(&rx->napi); in lan743x_rx_isr()
235 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
250 lan743x_rx_isr(&adapter->rx[channel], in lan743x_intr_shared_isr()
262 lan743x_tx_isr(&adapter->tx[channel], in lan743x_intr_shared_isr()
285 struct lan743x_adapter *adapter = vector->adapter; in lan743x_intr_entry_isr()
290 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ) { in lan743x_intr_entry_isr()
292 } else if (vector->flags & in lan743x_intr_entry_isr()
298 int_sts = vector->int_mask | INT_BIT_MAS_; in lan743x_intr_entry_isr()
304 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR) in lan743x_intr_entry_isr()
308 INT_VEC_EN_(vector->vector_index)); in lan743x_intr_entry_isr()
310 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_CLEAR) in lan743x_intr_entry_isr()
314 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK) { in lan743x_intr_entry_isr()
318 int_enables = vector->int_mask; in lan743x_intr_entry_isr()
322 int_sts &= vector->int_mask; in lan743x_intr_entry_isr()
324 if (vector->handler) { in lan743x_intr_entry_isr()
325 vector->handler(vector->context, in lan743x_intr_entry_isr()
326 int_sts, vector->flags); in lan743x_intr_entry_isr()
330 vector->int_mask); in lan743x_intr_entry_isr()
335 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_SET) in lan743x_intr_entry_isr()
339 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET) in lan743x_intr_entry_isr()
343 INT_VEC_EN_(vector->vector_index)); in lan743x_intr_entry_isr()
350 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_test_isr()
351 int result = -ENODEV; in lan743x_intr_test_isr()
354 intr->software_isr_flag = 0; in lan743x_intr_test_isr()
361 while ((timeout > 0) && (!(intr->software_isr_flag))) { in lan743x_intr_test_isr()
363 timeout--; in lan743x_intr_test_isr()
366 if (intr->software_isr_flag) in lan743x_intr_test_isr()
380 struct lan743x_vector *vector = &adapter->intr.vector_list in lan743x_intr_register_isr()
384 vector->adapter = adapter; in lan743x_intr_register_isr()
385 vector->flags = flags; in lan743x_intr_register_isr()
386 vector->vector_index = vector_index; in lan743x_intr_register_isr()
387 vector->int_mask = int_mask; in lan743x_intr_register_isr()
388 vector->handler = handler; in lan743x_intr_register_isr()
389 vector->context = context; in lan743x_intr_register_isr()
391 ret = request_irq(vector->irq, in lan743x_intr_register_isr()
396 vector->handler = NULL; in lan743x_intr_register_isr()
397 vector->context = NULL; in lan743x_intr_register_isr()
398 vector->int_mask = 0; in lan743x_intr_register_isr()
399 vector->flags = 0; in lan743x_intr_register_isr()
407 struct lan743x_vector *vector = &adapter->intr.vector_list in lan743x_intr_unregister_isr()
410 free_irq(vector->irq, vector); in lan743x_intr_unregister_isr()
411 vector->handler = NULL; in lan743x_intr_unregister_isr()
412 vector->context = NULL; in lan743x_intr_unregister_isr()
413 vector->int_mask = 0; in lan743x_intr_unregister_isr()
414 vector->flags = 0; in lan743x_intr_unregister_isr()
423 if (adapter->intr.vector_list[index].int_mask & int_mask) in lan743x_intr_get_vector_flags()
424 return adapter->intr.vector_list[index].flags; in lan743x_intr_get_vector_flags()
431 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_close()
438 if (intr->flags & INTR_FLAG_IRQ_REQUESTED(index)) { in lan743x_intr_close()
440 intr->flags &= ~INTR_FLAG_IRQ_REQUESTED(index); in lan743x_intr_close()
444 if (intr->flags & INTR_FLAG_MSI_ENABLED) { in lan743x_intr_close()
445 pci_disable_msi(adapter->pdev); in lan743x_intr_close()
446 intr->flags &= ~INTR_FLAG_MSI_ENABLED; in lan743x_intr_close()
449 if (intr->flags & INTR_FLAG_MSIX_ENABLED) { in lan743x_intr_close()
450 pci_disable_msix(adapter->pdev); in lan743x_intr_close()
451 intr->flags &= ~INTR_FLAG_MSIX_ENABLED; in lan743x_intr_close()
458 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_open()
462 int ret = -ENODEV; in lan743x_intr_open()
466 intr->number_of_vectors = 0; in lan743x_intr_open()
473 ret = pci_enable_msix_range(adapter->pdev, in lan743x_intr_open()
479 intr->flags |= INTR_FLAG_MSIX_ENABLED; in lan743x_intr_open()
480 intr->number_of_vectors = ret; in lan743x_intr_open()
481 intr->using_vectors = true; in lan743x_intr_open()
482 for (index = 0; index < intr->number_of_vectors; index++) in lan743x_intr_open()
483 intr->vector_list[index].irq = msix_entries in lan743x_intr_open()
485 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
487 intr->number_of_vectors); in lan743x_intr_open()
491 if (!intr->number_of_vectors) { in lan743x_intr_open()
492 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_intr_open()
493 if (!pci_enable_msi(adapter->pdev)) { in lan743x_intr_open()
494 intr->flags |= INTR_FLAG_MSI_ENABLED; in lan743x_intr_open()
495 intr->number_of_vectors = 1; in lan743x_intr_open()
496 intr->using_vectors = true; in lan743x_intr_open()
497 intr->vector_list[0].irq = in lan743x_intr_open()
498 adapter->pdev->irq; in lan743x_intr_open()
499 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
501 intr->number_of_vectors); in lan743x_intr_open()
507 if (!intr->number_of_vectors) { in lan743x_intr_open()
508 intr->number_of_vectors = 1; in lan743x_intr_open()
509 intr->using_vectors = false; in lan743x_intr_open()
510 intr->vector_list[0].irq = intr->irq; in lan743x_intr_open()
511 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
527 if (intr->using_vectors) { in lan743x_intr_open()
536 if (adapter->csr.flags & LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) { in lan743x_intr_open()
551 intr->flags |= INTR_FLAG_IRQ_REQUESTED(0); in lan743x_intr_open()
553 if (intr->using_vectors) in lan743x_intr_open()
557 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_intr_open()
577 if (intr->number_of_vectors > 1) { in lan743x_intr_open()
578 int number_of_tx_vectors = intr->number_of_vectors - 1; in lan743x_intr_open()
589 if (adapter->csr.flags & in lan743x_intr_open()
601 /* map TX interrupt to vector */ in lan743x_intr_open()
605 /* Remove TX interrupt from shared mask */ in lan743x_intr_open()
606 intr->vector_list[0].int_mask &= ~int_bit; in lan743x_intr_open()
609 &adapter->tx[index]); in lan743x_intr_open()
612 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector); in lan743x_intr_open()
619 if ((intr->number_of_vectors - LAN743X_USED_TX_CHANNELS) > 1) { in lan743x_intr_open()
620 int number_of_rx_vectors = intr->number_of_vectors - in lan743x_intr_open()
621 LAN743X_USED_TX_CHANNELS - 1; in lan743x_intr_open()
633 if (adapter->csr.flags & in lan743x_intr_open()
645 /* map RX interrupt to vector */ in lan743x_intr_open()
655 /* Remove RX interrupt from shared mask */ in lan743x_intr_open()
656 intr->vector_list[0].int_mask &= ~int_bit; in lan743x_intr_open()
659 &adapter->rx[index]); in lan743x_intr_open()
662 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector); in lan743x_intr_open()
683 return -EIO; in lan743x_dp_write()
695 return -EIO; in lan743x_dp_write()
729 struct lan743x_adapter *adapter = bus->priv; in lan743x_mdiobus_read()
752 struct lan743x_adapter *adapter = bus->priv; in lan743x_mdiobus_write()
784 ether_addr_copy(adapter->mac_address, addr); in lan743x_mac_set_address()
785 netif_info(adapter, drv, adapter->netdev, in lan743x_mac_set_address()
797 netdev = adapter->netdev; in lan743x_mac_init()
805 if (!is_valid_ether_addr(adapter->mac_address)) { in lan743x_mac_init()
808 adapter->mac_address[0] = mac_addr_lo & 0xFF; in lan743x_mac_init()
809 adapter->mac_address[1] = (mac_addr_lo >> 8) & 0xFF; in lan743x_mac_init()
810 adapter->mac_address[2] = (mac_addr_lo >> 16) & 0xFF; in lan743x_mac_init()
811 adapter->mac_address[3] = (mac_addr_lo >> 24) & 0xFF; in lan743x_mac_init()
812 adapter->mac_address[4] = mac_addr_hi & 0xFF; in lan743x_mac_init()
813 adapter->mac_address[5] = (mac_addr_hi >> 8) & 0xFF; in lan743x_mac_init()
818 } else if (!is_valid_ether_addr(adapter->mac_address)) { in lan743x_mac_init()
823 eth_random_addr(adapter->mac_address); in lan743x_mac_init()
825 lan743x_mac_set_address(adapter, adapter->mac_address); in lan743x_mac_init()
826 ether_addr_copy(netdev->dev_addr, adapter->mac_address); in lan743x_mac_init()
928 struct lan743x_phy *phy = &adapter->phy; in lan743x_phy_update_flowcontrol()
931 if (phy->fc_autoneg) in lan743x_phy_update_flowcontrol()
934 cap = phy->fc_request_control; in lan743x_phy_update_flowcontrol()
949 struct phy_device *phydev = netdev->phydev; in lan743x_phy_link_status_change()
953 if (phydev->state == PHY_RUNNING) { in lan743x_phy_link_status_change()
961 if (phy_interface_mode_is_rgmii(adapter->phy_mode)) in lan743x_phy_link_status_change()
969 if (phydev->duplex) in lan743x_phy_link_status_change()
975 switch (phydev->speed) { in lan743x_phy_link_status_change()
994 linkmode_adv_to_mii_adv_t(phydev->advertising); in lan743x_phy_link_status_change()
996 linkmode_adv_to_mii_adv_t(phydev->lp_advertising); in lan743x_phy_link_status_change()
1008 struct net_device *netdev = adapter->netdev; in lan743x_phy_close()
1010 phy_stop(netdev->phydev); in lan743x_phy_close()
1011 phy_disconnect(netdev->phydev); in lan743x_phy_close()
1012 netdev->phydev = NULL; in lan743x_phy_close()
1017 struct lan743x_phy *phy = &adapter->phy; in lan743x_phy_open()
1021 int ret = -EIO; in lan743x_phy_open()
1023 netdev = adapter->netdev; in lan743x_phy_open()
1024 phynode = of_node_get(adapter->pdev->dev.of_node); in lan743x_phy_open()
1028 of_get_phy_mode(phynode, &adapter->phy_mode); in lan743x_phy_open()
1041 adapter->phy_mode); in lan743x_phy_open()
1047 phydev = phy_find_first(adapter->mdiobus); in lan743x_phy_open()
1051 adapter->phy_mode = PHY_INTERFACE_MODE_GMII; in lan743x_phy_open()
1054 adapter->phy_mode); in lan743x_phy_open()
1064 phy->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan743x_phy_open()
1065 phy->fc_autoneg = phydev->autoneg; in lan743x_phy_open()
1100 mac_addr = adapter->mac_address; in lan743x_rfe_update_mac_address()
1115 struct net_device *netdev = adapter->netdev; in lan743x_rfe_set_multicast()
1124 if (netdev->flags & IFF_PROMISC) { in lan743x_rfe_set_multicast()
1127 if (netdev->flags & IFF_ALLMULTI) in lan743x_rfe_set_multicast()
1143 data = ha->addr[3]; in lan743x_rfe_set_multicast()
1144 data = ha->addr[2] | (data << 8); in lan743x_rfe_set_multicast()
1145 data = ha->addr[1] | (data << 8); in lan743x_rfe_set_multicast()
1146 data = ha->addr[0] | (data << 8); in lan743x_rfe_set_multicast()
1149 data = ha->addr[5]; in lan743x_rfe_set_multicast()
1150 data = ha->addr[4] | (data << 8); in lan743x_rfe_set_multicast()
1155 u32 bitnum = (ether_crc(ETH_ALEN, ha->addr) >> in lan743x_rfe_set_multicast()
1191 return -EPERM; in lan743x_dmac_init()
1193 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_dmac_init()
1234 timeout--; in lan743x_dmac_tx_wait_till_stopped()
1237 result = -ENODEV; in lan743x_dmac_tx_wait_till_stopped()
1263 timeout--; in lan743x_dmac_rx_wait_till_stopped()
1266 result = -ENODEV; in lan743x_dmac_rx_wait_till_stopped()
1270 static void lan743x_tx_release_desc(struct lan743x_tx *tx, in lan743x_tx_release_desc() argument
1278 descriptor = &tx->ring_cpu_ptr[descriptor_index]; in lan743x_tx_release_desc()
1279 buffer_info = &tx->buffer_info[descriptor_index]; in lan743x_tx_release_desc()
1280 if (!(buffer_info->flags & TX_BUFFER_INFO_FLAG_ACTIVE)) in lan743x_tx_release_desc()
1283 descriptor_type = (descriptor->data0) & in lan743x_tx_release_desc()
1291 if (buffer_info->dma_ptr) { in lan743x_tx_release_desc()
1292 if (buffer_info->flags & in lan743x_tx_release_desc()
1294 dma_unmap_page(&tx->adapter->pdev->dev, in lan743x_tx_release_desc()
1295 buffer_info->dma_ptr, in lan743x_tx_release_desc()
1296 buffer_info->buffer_length, in lan743x_tx_release_desc()
1299 dma_unmap_single(&tx->adapter->pdev->dev, in lan743x_tx_release_desc()
1300 buffer_info->dma_ptr, in lan743x_tx_release_desc()
1301 buffer_info->buffer_length, in lan743x_tx_release_desc()
1304 buffer_info->dma_ptr = 0; in lan743x_tx_release_desc()
1305 buffer_info->buffer_length = 0; in lan743x_tx_release_desc()
1307 if (!buffer_info->skb) in lan743x_tx_release_desc()
1310 if (!(buffer_info->flags & TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED)) { in lan743x_tx_release_desc()
1311 dev_kfree_skb_any(buffer_info->skb); in lan743x_tx_release_desc()
1316 lan743x_ptp_unrequest_tx_timestamp(tx->adapter); in lan743x_tx_release_desc()
1317 dev_kfree_skb_any(buffer_info->skb); in lan743x_tx_release_desc()
1319 ignore_sync = (buffer_info->flags & in lan743x_tx_release_desc()
1321 lan743x_ptp_tx_timestamp_skb(tx->adapter, in lan743x_tx_release_desc()
1322 buffer_info->skb, ignore_sync); in lan743x_tx_release_desc()
1326 buffer_info->skb = NULL; in lan743x_tx_release_desc()
1329 buffer_info->flags &= ~TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_release_desc()
1336 static int lan743x_tx_next_index(struct lan743x_tx *tx, int index) in lan743x_tx_next_index() argument
1338 return ((++index) % tx->ring_size); in lan743x_tx_next_index()
1341 static void lan743x_tx_release_completed_descriptors(struct lan743x_tx *tx) in lan743x_tx_release_completed_descriptors() argument
1343 while ((*tx->head_cpu_ptr) != (tx->last_head)) { in lan743x_tx_release_completed_descriptors()
1344 lan743x_tx_release_desc(tx, tx->last_head, false); in lan743x_tx_release_completed_descriptors()
1345 tx->last_head = lan743x_tx_next_index(tx, tx->last_head); in lan743x_tx_release_completed_descriptors()
1349 static void lan743x_tx_release_all_descriptors(struct lan743x_tx *tx) in lan743x_tx_release_all_descriptors() argument
1353 original_head = tx->last_head; in lan743x_tx_release_all_descriptors()
1355 lan743x_tx_release_desc(tx, tx->last_head, true); in lan743x_tx_release_all_descriptors()
1356 tx->last_head = lan743x_tx_next_index(tx, tx->last_head); in lan743x_tx_release_all_descriptors()
1357 } while (tx->last_head != original_head); in lan743x_tx_release_all_descriptors()
1358 memset(tx->ring_cpu_ptr, 0, in lan743x_tx_release_all_descriptors()
1359 sizeof(*tx->ring_cpu_ptr) * (tx->ring_size)); in lan743x_tx_release_all_descriptors()
1360 memset(tx->buffer_info, 0, in lan743x_tx_release_all_descriptors()
1361 sizeof(*tx->buffer_info) * (tx->ring_size)); in lan743x_tx_release_all_descriptors()
1364 static int lan743x_tx_get_desc_cnt(struct lan743x_tx *tx, in lan743x_tx_get_desc_cnt() argument
1372 nr_frags = skb_shinfo(skb)->nr_frags; in lan743x_tx_get_desc_cnt()
1377 static int lan743x_tx_get_avail_desc(struct lan743x_tx *tx) in lan743x_tx_get_avail_desc() argument
1379 int last_head = tx->last_head; in lan743x_tx_get_avail_desc()
1380 int last_tail = tx->last_tail; in lan743x_tx_get_avail_desc()
1383 return tx->ring_size - last_tail + last_head - 1; in lan743x_tx_get_avail_desc()
1385 return last_head - last_tail - 1; in lan743x_tx_get_avail_desc()
1388 void lan743x_tx_set_timestamping_mode(struct lan743x_tx *tx, in lan743x_tx_set_timestamping_mode() argument
1393 tx->ts_flags |= TX_TS_FLAG_TIMESTAMPING_ENABLED; in lan743x_tx_set_timestamping_mode()
1395 tx->ts_flags &= ~TX_TS_FLAG_TIMESTAMPING_ENABLED; in lan743x_tx_set_timestamping_mode()
1397 tx->ts_flags |= TX_TS_FLAG_ONE_STEP_SYNC; in lan743x_tx_set_timestamping_mode()
1399 tx->ts_flags &= ~TX_TS_FLAG_ONE_STEP_SYNC; in lan743x_tx_set_timestamping_mode()
1402 static int lan743x_tx_frame_start(struct lan743x_tx *tx, in lan743x_tx_frame_start() argument
1410 * assuming tx->ring_lock has already been acquired. in lan743x_tx_frame_start()
1414 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_start()
1415 struct device *dev = &adapter->pdev->dev; in lan743x_tx_frame_start()
1418 tx->frame_flags |= TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_start()
1419 tx->frame_first = tx->last_tail; in lan743x_tx_frame_start()
1420 tx->frame_tail = tx->frame_first; in lan743x_tx_frame_start()
1422 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_start()
1423 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_start()
1427 return -ENOMEM; in lan743x_tx_frame_start()
1429 tx_descriptor->data1 = DMA_ADDR_LOW32(dma_ptr); in lan743x_tx_frame_start()
1430 tx_descriptor->data2 = DMA_ADDR_HIGH32(dma_ptr); in lan743x_tx_frame_start()
1431 tx_descriptor->data3 = (frame_length << 16) & in lan743x_tx_frame_start()
1434 buffer_info->skb = NULL; in lan743x_tx_frame_start()
1435 buffer_info->dma_ptr = dma_ptr; in lan743x_tx_frame_start()
1436 buffer_info->buffer_length = first_buffer_length; in lan743x_tx_frame_start()
1437 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_start()
1439 tx->frame_data0 = (first_buffer_length & in lan743x_tx_frame_start()
1445 tx->frame_data0 |= TX_DESC_DATA0_TSE_; in lan743x_tx_frame_start()
1448 tx->frame_data0 |= TX_DESC_DATA0_ICE_ | in lan743x_tx_frame_start()
1456 static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx, in lan743x_tx_frame_add_lso() argument
1461 * assuming tx->ring_lock has already been acquired. in lan743x_tx_frame_add_lso()
1467 tx->frame_data0 |= TX_DESC_DATA0_EXT_; in lan743x_tx_frame_add_lso()
1469 tx->frame_data0 |= TX_DESC_DATA0_LS_; in lan743x_tx_frame_add_lso()
1470 tx->frame_data0 |= TX_DESC_DATA0_IOC_; in lan743x_tx_frame_add_lso()
1472 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1473 tx_descriptor->data0 = tx->frame_data0; in lan743x_tx_frame_add_lso()
1476 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_add_lso()
1477 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1478 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1481 tx_descriptor->data1 = 0; in lan743x_tx_frame_add_lso()
1482 tx_descriptor->data2 = 0; in lan743x_tx_frame_add_lso()
1483 tx_descriptor->data3 = 0; in lan743x_tx_frame_add_lso()
1485 buffer_info->skb = NULL; in lan743x_tx_frame_add_lso()
1486 buffer_info->dma_ptr = 0; in lan743x_tx_frame_add_lso()
1487 buffer_info->buffer_length = 0; in lan743x_tx_frame_add_lso()
1488 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_add_lso()
1490 tx->frame_data0 = (frame_length & TX_DESC_DATA0_EXT_PAY_LENGTH_MASK_) | in lan743x_tx_frame_add_lso()
1497 static int lan743x_tx_frame_add_fragment(struct lan743x_tx *tx, in lan743x_tx_frame_add_fragment() argument
1502 * assuming tx->ring_lock has already been acquired in lan743x_tx_frame_add_fragment()
1506 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_add_fragment()
1507 struct device *dev = &adapter->pdev->dev; in lan743x_tx_frame_add_fragment()
1516 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1517 tx_descriptor->data0 = tx->frame_data0; in lan743x_tx_frame_add_fragment()
1520 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_add_fragment()
1521 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1522 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1530 desc_index = tx->frame_first; in lan743x_tx_frame_add_fragment()
1531 while (desc_index != tx->frame_tail) { in lan743x_tx_frame_add_fragment()
1532 lan743x_tx_release_desc(tx, desc_index, true); in lan743x_tx_frame_add_fragment()
1533 desc_index = lan743x_tx_next_index(tx, desc_index); in lan743x_tx_frame_add_fragment()
1536 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_add_fragment()
1537 tx->frame_first = 0; in lan743x_tx_frame_add_fragment()
1538 tx->frame_data0 = 0; in lan743x_tx_frame_add_fragment()
1539 tx->frame_tail = 0; in lan743x_tx_frame_add_fragment()
1540 return -ENOMEM; in lan743x_tx_frame_add_fragment()
1543 tx_descriptor->data1 = DMA_ADDR_LOW32(dma_ptr); in lan743x_tx_frame_add_fragment()
1544 tx_descriptor->data2 = DMA_ADDR_HIGH32(dma_ptr); in lan743x_tx_frame_add_fragment()
1545 tx_descriptor->data3 = (frame_length << 16) & in lan743x_tx_frame_add_fragment()
1548 buffer_info->skb = NULL; in lan743x_tx_frame_add_fragment()
1549 buffer_info->dma_ptr = dma_ptr; in lan743x_tx_frame_add_fragment()
1550 buffer_info->buffer_length = fragment_length; in lan743x_tx_frame_add_fragment()
1551 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_add_fragment()
1552 buffer_info->flags |= TX_BUFFER_INFO_FLAG_SKB_FRAGMENT; in lan743x_tx_frame_add_fragment()
1554 tx->frame_data0 = (fragment_length & TX_DESC_DATA0_BUF_LENGTH_MASK_) | in lan743x_tx_frame_add_fragment()
1562 static void lan743x_tx_frame_end(struct lan743x_tx *tx, in lan743x_tx_frame_end() argument
1568 * assuming tx->ring_lock has already been acquired in lan743x_tx_frame_end()
1572 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_end()
1576 if ((tx->frame_data0 & TX_DESC_DATA0_DTYPE_MASK_) == in lan743x_tx_frame_end()
1578 tx->frame_data0 |= TX_DESC_DATA0_LS_; in lan743x_tx_frame_end()
1579 tx->frame_data0 |= TX_DESC_DATA0_IOC_; in lan743x_tx_frame_end()
1582 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_end()
1583 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_end()
1584 buffer_info->skb = skb; in lan743x_tx_frame_end()
1586 buffer_info->flags |= TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED; in lan743x_tx_frame_end()
1588 buffer_info->flags |= TX_BUFFER_INFO_FLAG_IGNORE_SYNC; in lan743x_tx_frame_end()
1590 tx_descriptor->data0 = tx->frame_data0; in lan743x_tx_frame_end()
1591 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_end()
1592 tx->last_tail = tx->frame_tail; in lan743x_tx_frame_end()
1596 if (tx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET) in lan743x_tx_frame_end()
1598 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) in lan743x_tx_frame_end()
1602 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number), in lan743x_tx_frame_end()
1603 tx_tail_flags | tx->frame_tail); in lan743x_tx_frame_end()
1604 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_end()
1607 static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx, in lan743x_tx_xmit_frame() argument
1621 required_number_of_descriptors = lan743x_tx_get_desc_cnt(tx, skb); in lan743x_tx_xmit_frame()
1623 spin_lock_irqsave(&tx->ring_lock, irq_flags); in lan743x_tx_xmit_frame()
1625 lan743x_tx_get_avail_desc(tx)) { in lan743x_tx_xmit_frame()
1626 if (required_number_of_descriptors > (tx->ring_size - 1)) { in lan743x_tx_xmit_frame()
1630 tx->overflow_skb = skb; in lan743x_tx_xmit_frame()
1631 netif_stop_queue(tx->adapter->netdev); in lan743x_tx_xmit_frame()
1637 if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && in lan743x_tx_xmit_frame()
1638 (tx->ts_flags & TX_TS_FLAG_TIMESTAMPING_ENABLED) && in lan743x_tx_xmit_frame()
1639 (lan743x_ptp_request_tx_timestamp(tx->adapter))) { in lan743x_tx_xmit_frame()
1640 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; in lan743x_tx_xmit_frame()
1642 if (tx->ts_flags & TX_TS_FLAG_ONE_STEP_SYNC) in lan743x_tx_xmit_frame()
1647 nr_frags = skb_shinfo(skb)->nr_frags; in lan743x_tx_xmit_frame()
1651 start_frame_length = max(skb_shinfo(skb)->gso_size, in lan743x_tx_xmit_frame()
1655 if (lan743x_tx_frame_start(tx, in lan743x_tx_xmit_frame()
1656 skb->data, head_length, in lan743x_tx_xmit_frame()
1659 skb->ip_summed == CHECKSUM_PARTIAL)) { in lan743x_tx_xmit_frame()
1665 lan743x_tx_frame_add_lso(tx, frame_length, nr_frags); in lan743x_tx_xmit_frame()
1671 const skb_frag_t *frag = &(skb_shinfo(skb)->frags[j]); in lan743x_tx_xmit_frame()
1673 if (lan743x_tx_frame_add_fragment(tx, frag, frame_length)) { in lan743x_tx_xmit_frame()
1685 lan743x_tx_frame_end(tx, skb, do_timestamp, ignore_sync); in lan743x_tx_xmit_frame()
1688 spin_unlock_irqrestore(&tx->ring_lock, irq_flags); in lan743x_tx_xmit_frame()
1694 struct lan743x_tx *tx = container_of(napi, struct lan743x_tx, napi); in lan743x_tx_napi_poll() local
1695 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_napi_poll()
1700 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number); in lan743x_tx_napi_poll()
1702 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) in lan743x_tx_napi_poll()
1704 spin_lock_irqsave(&tx->ring_lock, irq_flags); in lan743x_tx_napi_poll()
1706 /* clean up tx ring */ in lan743x_tx_napi_poll()
1707 lan743x_tx_release_completed_descriptors(tx); in lan743x_tx_napi_poll()
1708 if (netif_queue_stopped(adapter->netdev)) { in lan743x_tx_napi_poll()
1709 if (tx->overflow_skb) { in lan743x_tx_napi_poll()
1710 if (lan743x_tx_get_desc_cnt(tx, tx->overflow_skb) <= in lan743x_tx_napi_poll()
1711 lan743x_tx_get_avail_desc(tx)) in lan743x_tx_napi_poll()
1714 netif_wake_queue(adapter->netdev); in lan743x_tx_napi_poll()
1717 spin_unlock_irqrestore(&tx->ring_lock, irq_flags); in lan743x_tx_napi_poll()
1721 lan743x_tx_xmit_frame(tx, tx->overflow_skb); in lan743x_tx_napi_poll()
1722 tx->overflow_skb = NULL; in lan743x_tx_napi_poll()
1723 netif_wake_queue(adapter->netdev); in lan743x_tx_napi_poll()
1731 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_napi_poll()
1738 static void lan743x_tx_ring_cleanup(struct lan743x_tx *tx) in lan743x_tx_ring_cleanup() argument
1740 if (tx->head_cpu_ptr) { in lan743x_tx_ring_cleanup()
1741 dma_free_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_cleanup()
1742 sizeof(*tx->head_cpu_ptr), tx->head_cpu_ptr, in lan743x_tx_ring_cleanup()
1743 tx->head_dma_ptr); in lan743x_tx_ring_cleanup()
1744 tx->head_cpu_ptr = NULL; in lan743x_tx_ring_cleanup()
1745 tx->head_dma_ptr = 0; in lan743x_tx_ring_cleanup()
1747 kfree(tx->buffer_info); in lan743x_tx_ring_cleanup()
1748 tx->buffer_info = NULL; in lan743x_tx_ring_cleanup()
1750 if (tx->ring_cpu_ptr) { in lan743x_tx_ring_cleanup()
1751 dma_free_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_cleanup()
1752 tx->ring_allocation_size, tx->ring_cpu_ptr, in lan743x_tx_ring_cleanup()
1753 tx->ring_dma_ptr); in lan743x_tx_ring_cleanup()
1754 tx->ring_allocation_size = 0; in lan743x_tx_ring_cleanup()
1755 tx->ring_cpu_ptr = NULL; in lan743x_tx_ring_cleanup()
1756 tx->ring_dma_ptr = 0; in lan743x_tx_ring_cleanup()
1758 tx->ring_size = 0; in lan743x_tx_ring_cleanup()
1761 static int lan743x_tx_ring_init(struct lan743x_tx *tx) in lan743x_tx_ring_init() argument
1766 int ret = -ENOMEM; in lan743x_tx_ring_init()
1768 tx->ring_size = LAN743X_TX_RING_SIZE; in lan743x_tx_ring_init()
1769 if (tx->ring_size & ~TX_CFG_B_TX_RING_LEN_MASK_) { in lan743x_tx_ring_init()
1770 ret = -EINVAL; in lan743x_tx_ring_init()
1773 ring_allocation_size = ALIGN(tx->ring_size * in lan743x_tx_ring_init()
1777 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1780 ret = -ENOMEM; in lan743x_tx_ring_init()
1784 tx->ring_allocation_size = ring_allocation_size; in lan743x_tx_ring_init()
1785 tx->ring_cpu_ptr = (struct lan743x_tx_descriptor *)cpu_ptr; in lan743x_tx_ring_init()
1786 tx->ring_dma_ptr = dma_ptr; in lan743x_tx_ring_init()
1788 cpu_ptr = kcalloc(tx->ring_size, sizeof(*tx->buffer_info), GFP_KERNEL); in lan743x_tx_ring_init()
1790 ret = -ENOMEM; in lan743x_tx_ring_init()
1793 tx->buffer_info = (struct lan743x_tx_buffer_info *)cpu_ptr; in lan743x_tx_ring_init()
1795 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1796 sizeof(*tx->head_cpu_ptr), &dma_ptr, in lan743x_tx_ring_init()
1799 ret = -ENOMEM; in lan743x_tx_ring_init()
1803 tx->head_cpu_ptr = cpu_ptr; in lan743x_tx_ring_init()
1804 tx->head_dma_ptr = dma_ptr; in lan743x_tx_ring_init()
1805 if (tx->head_dma_ptr & 0x3) { in lan743x_tx_ring_init()
1806 ret = -ENOMEM; in lan743x_tx_ring_init()
1813 lan743x_tx_ring_cleanup(tx); in lan743x_tx_ring_init()
1817 static void lan743x_tx_close(struct lan743x_tx *tx) in lan743x_tx_close() argument
1819 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_close()
1823 DMAC_CMD_STOP_T_(tx->channel_number)); in lan743x_tx_close()
1824 lan743x_dmac_tx_wait_till_stopped(adapter, tx->channel_number); in lan743x_tx_close()
1828 DMAC_INT_BIT_TX_IOC_(tx->channel_number)); in lan743x_tx_close()
1830 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_close()
1831 napi_disable(&tx->napi); in lan743x_tx_close()
1832 netif_napi_del(&tx->napi); in lan743x_tx_close()
1835 FCT_TX_CTL_DIS_(tx->channel_number)); in lan743x_tx_close()
1837 FCT_TX_CTL_EN_(tx->channel_number), in lan743x_tx_close()
1840 lan743x_tx_release_all_descriptors(tx); in lan743x_tx_close()
1842 if (tx->overflow_skb) { in lan743x_tx_close()
1843 dev_kfree_skb(tx->overflow_skb); in lan743x_tx_close()
1844 tx->overflow_skb = NULL; in lan743x_tx_close()
1847 lan743x_tx_ring_cleanup(tx); in lan743x_tx_close()
1850 static int lan743x_tx_open(struct lan743x_tx *tx) in lan743x_tx_open() argument
1856 adapter = tx->adapter; in lan743x_tx_open()
1857 ret = lan743x_tx_ring_init(tx); in lan743x_tx_open()
1863 FCT_TX_CTL_RESET_(tx->channel_number)); in lan743x_tx_open()
1865 FCT_TX_CTL_RESET_(tx->channel_number), in lan743x_tx_open()
1870 FCT_TX_CTL_EN_(tx->channel_number)); in lan743x_tx_open()
1872 /* reset tx channel */ in lan743x_tx_open()
1874 DMAC_CMD_TX_SWR_(tx->channel_number)); in lan743x_tx_open()
1876 DMAC_CMD_TX_SWR_(tx->channel_number), in lan743x_tx_open()
1881 TX_BASE_ADDRH(tx->channel_number), in lan743x_tx_open()
1882 DMA_ADDR_HIGH32(tx->ring_dma_ptr)); in lan743x_tx_open()
1884 TX_BASE_ADDRL(tx->channel_number), in lan743x_tx_open()
1885 DMA_ADDR_LOW32(tx->ring_dma_ptr)); in lan743x_tx_open()
1888 data = lan743x_csr_read(adapter, TX_CFG_B(tx->channel_number)); in lan743x_tx_open()
1890 data |= ((tx->ring_size) & TX_CFG_B_TX_RING_LEN_MASK_); in lan743x_tx_open()
1891 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_tx_open()
1893 lan743x_csr_write(adapter, TX_CFG_B(tx->channel_number), data); in lan743x_tx_open()
1897 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_tx_open()
1903 lan743x_csr_write(adapter, TX_CFG_A(tx->channel_number), data); in lan743x_tx_open()
1907 TX_HEAD_WRITEBACK_ADDRH(tx->channel_number), in lan743x_tx_open()
1908 DMA_ADDR_HIGH32(tx->head_dma_ptr)); in lan743x_tx_open()
1910 TX_HEAD_WRITEBACK_ADDRL(tx->channel_number), in lan743x_tx_open()
1911 DMA_ADDR_LOW32(tx->head_dma_ptr)); in lan743x_tx_open()
1914 tx->last_head = lan743x_csr_read(adapter, TX_HEAD(tx->channel_number)); in lan743x_tx_open()
1917 tx->last_tail = 0; in lan743x_tx_open()
1918 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number), in lan743x_tx_open()
1919 (u32)(tx->last_tail)); in lan743x_tx_open()
1920 tx->vector_flags = lan743x_intr_get_vector_flags(adapter, in lan743x_tx_open()
1922 (tx->channel_number)); in lan743x_tx_open()
1923 netif_tx_napi_add(adapter->netdev, in lan743x_tx_open()
1924 &tx->napi, lan743x_tx_napi_poll, in lan743x_tx_open()
1925 tx->ring_size - 1); in lan743x_tx_open()
1926 napi_enable(&tx->napi); in lan743x_tx_open()
1929 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR) in lan743x_tx_open()
1931 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR) in lan743x_tx_open()
1933 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C) in lan743x_tx_open()
1935 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C) in lan743x_tx_open()
1937 lan743x_csr_write(adapter, TX_CFG_C(tx->channel_number), data); in lan743x_tx_open()
1939 if (!(tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET)) in lan743x_tx_open()
1941 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_open()
1943 DMAC_INT_BIT_TX_IOC_(tx->channel_number)); in lan743x_tx_open()
1947 DMAC_CMD_START_T_(tx->channel_number)); in lan743x_tx_open()
1951 static int lan743x_rx_next_index(struct lan743x_rx *rx, int index) in lan743x_rx_next_index() argument
1953 return ((++index) % rx->ring_size); in lan743x_rx_next_index()
1956 static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx) in lan743x_rx_allocate_skb() argument
1961 return __netdev_alloc_skb(rx->adapter->netdev, in lan743x_rx_allocate_skb()
1965 static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index, in lan743x_rx_init_ring_element() argument
1973 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_init_ring_element()
1974 buffer_info = &rx->buffer_info[index]; in lan743x_rx_init_ring_element()
1975 buffer_info->skb = skb; in lan743x_rx_init_ring_element()
1976 if (!(buffer_info->skb)) in lan743x_rx_init_ring_element()
1977 return -ENOMEM; in lan743x_rx_init_ring_element()
1978 buffer_info->dma_ptr = dma_map_single(&rx->adapter->pdev->dev, in lan743x_rx_init_ring_element()
1979 buffer_info->skb->data, in lan743x_rx_init_ring_element()
1982 if (dma_mapping_error(&rx->adapter->pdev->dev, in lan743x_rx_init_ring_element()
1983 buffer_info->dma_ptr)) { in lan743x_rx_init_ring_element()
1984 buffer_info->dma_ptr = 0; in lan743x_rx_init_ring_element()
1985 return -ENOMEM; in lan743x_rx_init_ring_element()
1988 buffer_info->buffer_length = length; in lan743x_rx_init_ring_element()
1989 descriptor->data1 = DMA_ADDR_LOW32(buffer_info->dma_ptr); in lan743x_rx_init_ring_element()
1990 descriptor->data2 = DMA_ADDR_HIGH32(buffer_info->dma_ptr); in lan743x_rx_init_ring_element()
1991 descriptor->data3 = 0; in lan743x_rx_init_ring_element()
1992 descriptor->data0 = (RX_DESC_DATA0_OWN_ | in lan743x_rx_init_ring_element()
1994 skb_reserve(buffer_info->skb, RX_HEAD_PADDING); in lan743x_rx_init_ring_element()
1999 static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_reuse_ring_element() argument
2004 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_reuse_ring_element()
2005 buffer_info = &rx->buffer_info[index]; in lan743x_rx_reuse_ring_element()
2007 descriptor->data1 = DMA_ADDR_LOW32(buffer_info->dma_ptr); in lan743x_rx_reuse_ring_element()
2008 descriptor->data2 = DMA_ADDR_HIGH32(buffer_info->dma_ptr); in lan743x_rx_reuse_ring_element()
2009 descriptor->data3 = 0; in lan743x_rx_reuse_ring_element()
2010 descriptor->data0 = (RX_DESC_DATA0_OWN_ | in lan743x_rx_reuse_ring_element()
2011 ((buffer_info->buffer_length) & in lan743x_rx_reuse_ring_element()
2015 static void lan743x_rx_release_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_release_ring_element() argument
2020 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_release_ring_element()
2021 buffer_info = &rx->buffer_info[index]; in lan743x_rx_release_ring_element()
2025 if (buffer_info->dma_ptr) { in lan743x_rx_release_ring_element()
2026 dma_unmap_single(&rx->adapter->pdev->dev, in lan743x_rx_release_ring_element()
2027 buffer_info->dma_ptr, in lan743x_rx_release_ring_element()
2028 buffer_info->buffer_length, in lan743x_rx_release_ring_element()
2030 buffer_info->dma_ptr = 0; in lan743x_rx_release_ring_element()
2033 if (buffer_info->skb) { in lan743x_rx_release_ring_element()
2034 dev_kfree_skb(buffer_info->skb); in lan743x_rx_release_ring_element()
2035 buffer_info->skb = NULL; in lan743x_rx_release_ring_element()
2041 static int lan743x_rx_process_packet(struct lan743x_rx *rx) in lan743x_rx_process_packet() argument
2045 int current_head_index = *rx->head_cpu_ptr; in lan743x_rx_process_packet()
2048 int extension_index = -1; in lan743x_rx_process_packet()
2049 int first_index = -1; in lan743x_rx_process_packet()
2050 int last_index = -1; in lan743x_rx_process_packet()
2052 if (current_head_index < 0 || current_head_index >= rx->ring_size) in lan743x_rx_process_packet()
2055 if (rx->last_head < 0 || rx->last_head >= rx->ring_size) in lan743x_rx_process_packet()
2058 if (rx->last_head != current_head_index) { in lan743x_rx_process_packet()
2059 descriptor = &rx->ring_cpu_ptr[rx->last_head]; in lan743x_rx_process_packet()
2060 if (descriptor->data0 & RX_DESC_DATA0_OWN_) in lan743x_rx_process_packet()
2063 if (!(descriptor->data0 & RX_DESC_DATA0_FS_)) in lan743x_rx_process_packet()
2066 first_index = rx->last_head; in lan743x_rx_process_packet()
2067 if (descriptor->data0 & RX_DESC_DATA0_LS_) { in lan743x_rx_process_packet()
2068 last_index = rx->last_head; in lan743x_rx_process_packet()
2072 index = lan743x_rx_next_index(rx, first_index); in lan743x_rx_process_packet()
2074 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_process_packet()
2075 if (descriptor->data0 & RX_DESC_DATA0_OWN_) in lan743x_rx_process_packet()
2078 if (descriptor->data0 & RX_DESC_DATA0_LS_) { in lan743x_rx_process_packet()
2082 index = lan743x_rx_next_index(rx, index); in lan743x_rx_process_packet()
2086 descriptor = &rx->ring_cpu_ptr[last_index]; in lan743x_rx_process_packet()
2087 if (descriptor->data0 & RX_DESC_DATA0_EXT_) { in lan743x_rx_process_packet()
2089 int index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2092 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_process_packet()
2093 if (descriptor->data0 & in lan743x_rx_process_packet()
2097 if (descriptor->data0 & in lan743x_rx_process_packet()
2106 first_index = -1; in lan743x_rx_process_packet()
2107 last_index = -1; in lan743x_rx_process_packet()
2124 new_skb = lan743x_rx_allocate_skb(rx); in lan743x_rx_process_packet()
2130 lan743x_rx_reuse_ring_element(rx, first_index); in lan743x_rx_process_packet()
2134 buffer_info = &rx->buffer_info[first_index]; in lan743x_rx_process_packet()
2135 skb = buffer_info->skb; in lan743x_rx_process_packet()
2136 descriptor = &rx->ring_cpu_ptr[first_index]; in lan743x_rx_process_packet()
2139 if (buffer_info->dma_ptr) { in lan743x_rx_process_packet()
2140 dma_unmap_single(&rx->adapter->pdev->dev, in lan743x_rx_process_packet()
2141 buffer_info->dma_ptr, in lan743x_rx_process_packet()
2142 buffer_info->buffer_length, in lan743x_rx_process_packet()
2144 buffer_info->dma_ptr = 0; in lan743x_rx_process_packet()
2145 buffer_info->buffer_length = 0; in lan743x_rx_process_packet()
2147 buffer_info->skb = NULL; in lan743x_rx_process_packet()
2149 (descriptor->data0); in lan743x_rx_process_packet()
2150 skb_put(skb, packet_length - 4); in lan743x_rx_process_packet()
2151 skb->protocol = eth_type_trans(skb, in lan743x_rx_process_packet()
2152 rx->adapter->netdev); in lan743x_rx_process_packet()
2153 lan743x_rx_init_ring_element(rx, first_index, new_skb); in lan743x_rx_process_packet()
2166 lan743x_rx_reuse_ring_element(rx, in lan743x_rx_process_packet()
2168 index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2174 lan743x_rx_reuse_ring_element(rx, in lan743x_rx_process_packet()
2176 index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2184 descriptor = &rx->ring_cpu_ptr[extension_index]; in lan743x_rx_process_packet()
2185 buffer_info = &rx->buffer_info[extension_index]; in lan743x_rx_process_packet()
2187 ts_sec = descriptor->data1; in lan743x_rx_process_packet()
2188 ts_nsec = (descriptor->data2 & in lan743x_rx_process_packet()
2190 lan743x_rx_reuse_ring_element(rx, extension_index); in lan743x_rx_process_packet()
2203 hwtstamps->hwtstamp = ktime_set(ts_sec, ts_nsec); in lan743x_rx_process_packet()
2207 napi_gro_receive(&rx->napi, skb); in lan743x_rx_process_packet()
2212 rx->last_tail = real_last_index; in lan743x_rx_process_packet()
2213 rx->last_head = lan743x_rx_next_index(rx, real_last_index); in lan743x_rx_process_packet()
2221 struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi); in lan743x_rx_napi_poll() local
2222 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_napi_poll()
2226 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) { in lan743x_rx_napi_poll()
2229 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_napi_poll()
2233 int rx_process_result = lan743x_rx_process_packet(rx); in lan743x_rx_napi_poll()
2245 rx->frame_count += count; in lan743x_rx_napi_poll()
2252 if (rx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET) in lan743x_rx_napi_poll()
2254 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) { in lan743x_rx_napi_poll()
2258 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_napi_poll()
2262 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_napi_poll()
2263 rx_tail_flags | rx->last_tail); in lan743x_rx_napi_poll()
2268 static void lan743x_rx_ring_cleanup(struct lan743x_rx *rx) in lan743x_rx_ring_cleanup() argument
2270 if (rx->buffer_info && rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2273 for (index = 0; index < rx->ring_size; index++) in lan743x_rx_ring_cleanup()
2274 lan743x_rx_release_ring_element(rx, index); in lan743x_rx_ring_cleanup()
2277 if (rx->head_cpu_ptr) { in lan743x_rx_ring_cleanup()
2278 dma_free_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_cleanup()
2279 sizeof(*rx->head_cpu_ptr), rx->head_cpu_ptr, in lan743x_rx_ring_cleanup()
2280 rx->head_dma_ptr); in lan743x_rx_ring_cleanup()
2281 rx->head_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2282 rx->head_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2285 kfree(rx->buffer_info); in lan743x_rx_ring_cleanup()
2286 rx->buffer_info = NULL; in lan743x_rx_ring_cleanup()
2288 if (rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2289 dma_free_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_cleanup()
2290 rx->ring_allocation_size, rx->ring_cpu_ptr, in lan743x_rx_ring_cleanup()
2291 rx->ring_dma_ptr); in lan743x_rx_ring_cleanup()
2292 rx->ring_allocation_size = 0; in lan743x_rx_ring_cleanup()
2293 rx->ring_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2294 rx->ring_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2297 rx->ring_size = 0; in lan743x_rx_ring_cleanup()
2298 rx->last_head = 0; in lan743x_rx_ring_cleanup()
2301 static int lan743x_rx_ring_init(struct lan743x_rx *rx) in lan743x_rx_ring_init() argument
2306 int ret = -ENOMEM; in lan743x_rx_ring_init()
2309 rx->ring_size = LAN743X_RX_RING_SIZE; in lan743x_rx_ring_init()
2310 if (rx->ring_size <= 1) { in lan743x_rx_ring_init()
2311 ret = -EINVAL; in lan743x_rx_ring_init()
2314 if (rx->ring_size & ~RX_CFG_B_RX_RING_LEN_MASK_) { in lan743x_rx_ring_init()
2315 ret = -EINVAL; in lan743x_rx_ring_init()
2318 ring_allocation_size = ALIGN(rx->ring_size * in lan743x_rx_ring_init()
2322 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2325 ret = -ENOMEM; in lan743x_rx_ring_init()
2328 rx->ring_allocation_size = ring_allocation_size; in lan743x_rx_ring_init()
2329 rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr; in lan743x_rx_ring_init()
2330 rx->ring_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2332 cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info), in lan743x_rx_ring_init()
2335 ret = -ENOMEM; in lan743x_rx_ring_init()
2338 rx->buffer_info = (struct lan743x_rx_buffer_info *)cpu_ptr; in lan743x_rx_ring_init()
2340 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2341 sizeof(*rx->head_cpu_ptr), &dma_ptr, in lan743x_rx_ring_init()
2344 ret = -ENOMEM; in lan743x_rx_ring_init()
2348 rx->head_cpu_ptr = cpu_ptr; in lan743x_rx_ring_init()
2349 rx->head_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2350 if (rx->head_dma_ptr & 0x3) { in lan743x_rx_ring_init()
2351 ret = -ENOMEM; in lan743x_rx_ring_init()
2355 rx->last_head = 0; in lan743x_rx_ring_init()
2356 for (index = 0; index < rx->ring_size; index++) { in lan743x_rx_ring_init()
2357 struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx); in lan743x_rx_ring_init()
2359 ret = lan743x_rx_init_ring_element(rx, index, new_skb); in lan743x_rx_ring_init()
2366 lan743x_rx_ring_cleanup(rx); in lan743x_rx_ring_init()
2370 static void lan743x_rx_close(struct lan743x_rx *rx) in lan743x_rx_close() argument
2372 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_close()
2375 FCT_RX_CTL_DIS_(rx->channel_number)); in lan743x_rx_close()
2377 FCT_RX_CTL_EN_(rx->channel_number), in lan743x_rx_close()
2381 DMAC_CMD_STOP_R_(rx->channel_number)); in lan743x_rx_close()
2382 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number); in lan743x_rx_close()
2385 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_close()
2387 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_close()
2388 napi_disable(&rx->napi); in lan743x_rx_close()
2390 netif_napi_del(&rx->napi); in lan743x_rx_close()
2392 lan743x_rx_ring_cleanup(rx); in lan743x_rx_close()
2395 static int lan743x_rx_open(struct lan743x_rx *rx) in lan743x_rx_open() argument
2397 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_open()
2401 rx->frame_count = 0; in lan743x_rx_open()
2402 ret = lan743x_rx_ring_init(rx); in lan743x_rx_open()
2406 netif_napi_add(adapter->netdev, in lan743x_rx_open()
2407 &rx->napi, lan743x_rx_napi_poll, in lan743x_rx_open()
2408 rx->ring_size - 1); in lan743x_rx_open()
2411 DMAC_CMD_RX_SWR_(rx->channel_number)); in lan743x_rx_open()
2413 DMAC_CMD_RX_SWR_(rx->channel_number), in lan743x_rx_open()
2418 RX_BASE_ADDRH(rx->channel_number), in lan743x_rx_open()
2419 DMA_ADDR_HIGH32(rx->ring_dma_ptr)); in lan743x_rx_open()
2421 RX_BASE_ADDRL(rx->channel_number), in lan743x_rx_open()
2422 DMA_ADDR_LOW32(rx->ring_dma_ptr)); in lan743x_rx_open()
2424 /* set rx write back address */ in lan743x_rx_open()
2426 RX_HEAD_WRITEBACK_ADDRH(rx->channel_number), in lan743x_rx_open()
2427 DMA_ADDR_HIGH32(rx->head_dma_ptr)); in lan743x_rx_open()
2429 RX_HEAD_WRITEBACK_ADDRL(rx->channel_number), in lan743x_rx_open()
2430 DMA_ADDR_LOW32(rx->head_dma_ptr)); in lan743x_rx_open()
2432 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_rx_open()
2441 RX_CFG_A(rx->channel_number), data); in lan743x_rx_open()
2444 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number)); in lan743x_rx_open()
2451 data |= ((rx->ring_size) & RX_CFG_B_RX_RING_LEN_MASK_); in lan743x_rx_open()
2453 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_rx_open()
2456 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data); in lan743x_rx_open()
2457 rx->vector_flags = lan743x_intr_get_vector_flags(adapter, in lan743x_rx_open()
2459 (rx->channel_number)); in lan743x_rx_open()
2463 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR) in lan743x_rx_open()
2465 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR) in lan743x_rx_open()
2467 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C) in lan743x_rx_open()
2469 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C) in lan743x_rx_open()
2471 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data); in lan743x_rx_open()
2473 rx->last_tail = ((u32)(rx->ring_size - 1)); in lan743x_rx_open()
2474 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_open()
2475 rx->last_tail); in lan743x_rx_open()
2476 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number)); in lan743x_rx_open()
2477 if (rx->last_head) { in lan743x_rx_open()
2478 ret = -EIO; in lan743x_rx_open()
2482 napi_enable(&rx->napi); in lan743x_rx_open()
2485 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_open()
2487 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2489 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2491 DMAC_CMD_START_R_(rx->channel_number)); in lan743x_rx_open()
2495 FCT_RX_CTL_RESET_(rx->channel_number)); in lan743x_rx_open()
2497 FCT_RX_CTL_RESET_(rx->channel_number), in lan743x_rx_open()
2499 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number), in lan743x_rx_open()
2506 FCT_RX_CTL_EN_(rx->channel_number)); in lan743x_rx_open()
2510 netif_napi_del(&rx->napi); in lan743x_rx_open()
2511 lan743x_rx_ring_cleanup(rx); in lan743x_rx_open()
2522 lan743x_tx_close(&adapter->tx[0]); in lan743x_netdev_close()
2525 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_close()
2563 ret = lan743x_rx_open(&adapter->rx[index]); in lan743x_netdev_open()
2568 ret = lan743x_tx_open(&adapter->tx[0]); in lan743x_netdev_open()
2576 if (adapter->rx[index].ring_cpu_ptr) in lan743x_netdev_open()
2577 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_open()
2591 netif_warn(adapter, ifup, adapter->netdev, in lan743x_netdev_open()
2601 return lan743x_tx_xmit_frame(&adapter->tx[0], skb); in lan743x_netdev_xmit_frame()
2608 return -EINVAL; in lan743x_netdev_ioctl()
2611 return phy_mii_ioctl(netdev->phydev, ifr, cmd); in lan743x_netdev_ioctl()
2628 netdev->mtu = new_mtu; in lan743x_netdev_change_mtu()
2637 stats->rx_packets = lan743x_csr_read(adapter, STAT_RX_TOTAL_FRAMES); in lan743x_netdev_get_stats64()
2638 stats->tx_packets = lan743x_csr_read(adapter, STAT_TX_TOTAL_FRAMES); in lan743x_netdev_get_stats64()
2639 stats->rx_bytes = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2645 stats->tx_bytes = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2651 stats->rx_errors = lan743x_csr_read(adapter, STAT_RX_FCS_ERRORS) + in lan743x_netdev_get_stats64()
2659 stats->tx_errors = lan743x_csr_read(adapter, STAT_TX_FCS_ERRORS) + in lan743x_netdev_get_stats64()
2663 stats->rx_dropped = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2665 stats->tx_dropped = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2667 stats->multicast = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2671 stats->collisions = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2689 ether_addr_copy(netdev->dev_addr, sock_addr->sa_data); in lan743x_netdev_set_mac_address()
2690 lan743x_mac_set_address(adapter, sock_addr->sa_data); in lan743x_netdev_set_mac_address()
2713 mdiobus_unregister(adapter->mdiobus); in lan743x_mdiobus_cleanup()
2718 unregister_netdev(adapter->netdev); in lan743x_full_cleanup()
2728 struct lan743x_tx *tx; in lan743x_hardware_init() local
2732 adapter->intr.irq = adapter->pdev->irq; in lan743x_hardware_init()
2758 adapter->rx[index].adapter = adapter; in lan743x_hardware_init()
2759 adapter->rx[index].channel_number = index; in lan743x_hardware_init()
2762 tx = &adapter->tx[0]; in lan743x_hardware_init()
2763 tx->adapter = adapter; in lan743x_hardware_init()
2764 tx->channel_number = 0; in lan743x_hardware_init()
2765 spin_lock_init(&tx->ring_lock); in lan743x_hardware_init()
2773 adapter->mdiobus = devm_mdiobus_alloc(&adapter->pdev->dev); in lan743x_mdiobus_init()
2774 if (!(adapter->mdiobus)) { in lan743x_mdiobus_init()
2775 ret = -ENOMEM; in lan743x_mdiobus_init()
2779 adapter->mdiobus->priv = (void *)adapter; in lan743x_mdiobus_init()
2780 adapter->mdiobus->read = lan743x_mdiobus_read; in lan743x_mdiobus_init()
2781 adapter->mdiobus->write = lan743x_mdiobus_write; in lan743x_mdiobus_init()
2782 adapter->mdiobus->name = "lan743x-mdiobus"; in lan743x_mdiobus_init()
2783 snprintf(adapter->mdiobus->id, MII_BUS_ID_SIZE, in lan743x_mdiobus_init()
2784 "pci-%s", pci_name(adapter->pdev)); in lan743x_mdiobus_init()
2786 if ((adapter->csr.id_rev & ID_REV_ID_MASK_) == ID_REV_ID_LAN7430_) in lan743x_mdiobus_init()
2788 adapter->mdiobus->phy_mask = ~(u32)BIT(1); in lan743x_mdiobus_init()
2791 ret = mdiobus_register(adapter->mdiobus); in lan743x_mdiobus_init()
2800 /* lan743x_pcidev_probe - Device Initialization Routine
2816 int ret = -ENODEV; in lan743x_pcidev_probe()
2818 netdev = devm_alloc_etherdev(&pdev->dev, in lan743x_pcidev_probe()
2823 SET_NETDEV_DEV(netdev, &pdev->dev); in lan743x_pcidev_probe()
2826 adapter->netdev = netdev; in lan743x_pcidev_probe()
2827 adapter->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE | in lan743x_pcidev_probe()
2830 netdev->max_mtu = LAN743X_MAX_FRAME_SIZE; in lan743x_pcidev_probe()
2832 mac_addr = of_get_mac_address(pdev->dev.of_node); in lan743x_pcidev_probe()
2834 ether_addr_copy(adapter->mac_address, mac_addr); in lan743x_pcidev_probe()
2852 adapter->netdev->netdev_ops = &lan743x_netdev_ops; in lan743x_pcidev_probe()
2853 adapter->netdev->ethtool_ops = &lan743x_ethtool_ops; in lan743x_pcidev_probe()
2854 adapter->netdev->features = NETIF_F_SG | NETIF_F_TSO | NETIF_F_HW_CSUM; in lan743x_pcidev_probe()
2855 adapter->netdev->hw_features = adapter->netdev->features; in lan743x_pcidev_probe()
2860 ret = register_netdev(adapter->netdev); in lan743x_pcidev_probe()
2880 * lan743x_pcidev_remove - Device Removal Routine
2885 * Hot-Plug event, or because the driver is going to be removed from
2905 * For instance, it is true when system goes to sleep by pm-suspend in lan743x_pcidev_shutdown()
2954 if (adapter->wolopts & WAKE_PHY) { in lan743x_pm_set_wol()
2958 if (adapter->wolopts & WAKE_MAGIC) { in lan743x_pm_set_wol()
2963 if (adapter->wolopts & WAKE_UCAST) { in lan743x_pm_set_wol()
2969 if (adapter->wolopts & WAKE_BCAST) { in lan743x_pm_set_wol()
2975 if (adapter->wolopts & WAKE_MCAST) { in lan743x_pm_set_wol()
3005 if (adapter->wolopts & WAKE_ARP) { in lan743x_pm_set_wol()
3044 if (adapter->wolopts) in lan743x_pm_suspend()
3064 netif_err(adapter, probe, adapter->netdev, in lan743x_pm_resume()
3069 * For instance, it is true when system wakesup after pm-suspend in lan743x_pm_resume()