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()
145 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_software_isr()
147 /* disable the interrupt to prevent repeated re-triggering */ in lan743x_intr_software_isr()
149 intr->software_isr_flag = true; in lan743x_intr_software_isr()
150 wake_up(&intr->software_isr_wq); in lan743x_intr_software_isr()
155 struct lan743x_tx *tx = context; in lan743x_tx_isr() local
156 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_isr()
162 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_isr()
165 if (int_sts & INT_BIT_DMA_TX_(tx->channel_number)) { in lan743x_tx_isr()
166 u32 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number); in lan743x_tx_isr()
183 napi_schedule(&tx->napi); in lan743x_tx_isr()
191 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_isr()
196 struct lan743x_rx *rx = context; in lan743x_rx_isr() local
197 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_isr()
202 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
205 if (int_sts & INT_BIT_DMA_RX_(rx->channel_number)) { in lan743x_rx_isr()
206 u32 rx_frame_bit = DMAC_INT_BIT_RXFRM_(rx->channel_number); in lan743x_rx_isr()
223 napi_schedule(&rx->napi); in lan743x_rx_isr()
231 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
246 lan743x_rx_isr(&adapter->rx[channel], in lan743x_intr_shared_isr()
258 lan743x_tx_isr(&adapter->tx[channel], in lan743x_intr_shared_isr()
281 struct lan743x_adapter *adapter = vector->adapter; in lan743x_intr_entry_isr()
286 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ) { in lan743x_intr_entry_isr()
288 } else if (vector->flags & in lan743x_intr_entry_isr()
294 int_sts = vector->int_mask | INT_BIT_MAS_; in lan743x_intr_entry_isr()
300 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR) in lan743x_intr_entry_isr()
304 INT_VEC_EN_(vector->vector_index)); in lan743x_intr_entry_isr()
306 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_CLEAR) in lan743x_intr_entry_isr()
310 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK) { in lan743x_intr_entry_isr()
314 int_enables = vector->int_mask; in lan743x_intr_entry_isr()
318 int_sts &= vector->int_mask; in lan743x_intr_entry_isr()
320 if (vector->handler) { in lan743x_intr_entry_isr()
321 vector->handler(vector->context, in lan743x_intr_entry_isr()
322 int_sts, vector->flags); in lan743x_intr_entry_isr()
326 vector->int_mask); in lan743x_intr_entry_isr()
331 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_SET) in lan743x_intr_entry_isr()
335 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET) in lan743x_intr_entry_isr()
339 INT_VEC_EN_(vector->vector_index)); in lan743x_intr_entry_isr()
346 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_test_isr()
349 intr->software_isr_flag = false; in lan743x_intr_test_isr()
355 ret = wait_event_timeout(intr->software_isr_wq, in lan743x_intr_test_isr()
356 intr->software_isr_flag, in lan743x_intr_test_isr()
362 return ret > 0 ? 0 : -ENODEV; in lan743x_intr_test_isr()
371 struct lan743x_vector *vector = &adapter->intr.vector_list in lan743x_intr_register_isr()
375 vector->adapter = adapter; in lan743x_intr_register_isr()
376 vector->flags = flags; in lan743x_intr_register_isr()
377 vector->vector_index = vector_index; in lan743x_intr_register_isr()
378 vector->int_mask = int_mask; in lan743x_intr_register_isr()
379 vector->handler = handler; in lan743x_intr_register_isr()
380 vector->context = context; in lan743x_intr_register_isr()
382 ret = request_irq(vector->irq, in lan743x_intr_register_isr()
387 vector->handler = NULL; in lan743x_intr_register_isr()
388 vector->context = NULL; in lan743x_intr_register_isr()
389 vector->int_mask = 0; in lan743x_intr_register_isr()
390 vector->flags = 0; in lan743x_intr_register_isr()
398 struct lan743x_vector *vector = &adapter->intr.vector_list in lan743x_intr_unregister_isr()
401 free_irq(vector->irq, vector); in lan743x_intr_unregister_isr()
402 vector->handler = NULL; in lan743x_intr_unregister_isr()
403 vector->context = NULL; in lan743x_intr_unregister_isr()
404 vector->int_mask = 0; in lan743x_intr_unregister_isr()
405 vector->flags = 0; in lan743x_intr_unregister_isr()
414 if (adapter->intr.vector_list[index].int_mask & int_mask) in lan743x_intr_get_vector_flags()
415 return adapter->intr.vector_list[index].flags; in lan743x_intr_get_vector_flags()
422 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_close()
429 if (intr->flags & INTR_FLAG_IRQ_REQUESTED(index)) { in lan743x_intr_close()
431 intr->flags &= ~INTR_FLAG_IRQ_REQUESTED(index); in lan743x_intr_close()
435 if (intr->flags & INTR_FLAG_MSI_ENABLED) { in lan743x_intr_close()
436 pci_disable_msi(adapter->pdev); in lan743x_intr_close()
437 intr->flags &= ~INTR_FLAG_MSI_ENABLED; in lan743x_intr_close()
440 if (intr->flags & INTR_FLAG_MSIX_ENABLED) { in lan743x_intr_close()
441 pci_disable_msix(adapter->pdev); in lan743x_intr_close()
442 intr->flags &= ~INTR_FLAG_MSIX_ENABLED; in lan743x_intr_close()
449 struct lan743x_intr *intr = &adapter->intr; in lan743x_intr_open()
453 int ret = -ENODEV; in lan743x_intr_open()
457 intr->number_of_vectors = 0; in lan743x_intr_open()
464 ret = pci_enable_msix_range(adapter->pdev, in lan743x_intr_open()
470 intr->flags |= INTR_FLAG_MSIX_ENABLED; in lan743x_intr_open()
471 intr->number_of_vectors = ret; in lan743x_intr_open()
472 intr->using_vectors = true; in lan743x_intr_open()
473 for (index = 0; index < intr->number_of_vectors; index++) in lan743x_intr_open()
474 intr->vector_list[index].irq = msix_entries in lan743x_intr_open()
476 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
478 intr->number_of_vectors); in lan743x_intr_open()
482 if (!intr->number_of_vectors) { in lan743x_intr_open()
483 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_intr_open()
484 if (!pci_enable_msi(adapter->pdev)) { in lan743x_intr_open()
485 intr->flags |= INTR_FLAG_MSI_ENABLED; in lan743x_intr_open()
486 intr->number_of_vectors = 1; in lan743x_intr_open()
487 intr->using_vectors = true; in lan743x_intr_open()
488 intr->vector_list[0].irq = in lan743x_intr_open()
489 adapter->pdev->irq; in lan743x_intr_open()
490 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
492 intr->number_of_vectors); in lan743x_intr_open()
498 if (!intr->number_of_vectors) { in lan743x_intr_open()
499 intr->number_of_vectors = 1; in lan743x_intr_open()
500 intr->using_vectors = false; in lan743x_intr_open()
501 intr->vector_list[0].irq = intr->irq; in lan743x_intr_open()
502 netif_info(adapter, ifup, adapter->netdev, in lan743x_intr_open()
518 if (intr->using_vectors) { in lan743x_intr_open()
527 if (adapter->csr.flags & LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) { in lan743x_intr_open()
536 init_waitqueue_head(&intr->software_isr_wq); in lan743x_intr_open()
544 intr->flags |= INTR_FLAG_IRQ_REQUESTED(0); in lan743x_intr_open()
546 if (intr->using_vectors) in lan743x_intr_open()
550 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_intr_open()
570 if (intr->number_of_vectors > 1) { in lan743x_intr_open()
571 int number_of_tx_vectors = intr->number_of_vectors - 1; in lan743x_intr_open()
582 if (adapter->csr.flags & in lan743x_intr_open()
594 /* map TX interrupt to vector */ in lan743x_intr_open()
598 /* Remove TX interrupt from shared mask */ in lan743x_intr_open()
599 intr->vector_list[0].int_mask &= ~int_bit; in lan743x_intr_open()
602 &adapter->tx[index]); in lan743x_intr_open()
605 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector); in lan743x_intr_open()
612 if ((intr->number_of_vectors - LAN743X_USED_TX_CHANNELS) > 1) { in lan743x_intr_open()
613 int number_of_rx_vectors = intr->number_of_vectors - in lan743x_intr_open()
614 LAN743X_USED_TX_CHANNELS - 1; in lan743x_intr_open()
626 if (adapter->csr.flags & in lan743x_intr_open()
638 /* map RX interrupt to vector */ in lan743x_intr_open()
648 /* Remove RX interrupt from shared mask */ in lan743x_intr_open()
649 intr->vector_list[0].int_mask &= ~int_bit; in lan743x_intr_open()
652 &adapter->rx[index]); in lan743x_intr_open()
655 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector); in lan743x_intr_open()
676 return -EIO; in lan743x_dp_write()
688 return -EIO; in lan743x_dp_write()
722 struct lan743x_adapter *adapter = bus->priv; in lan743x_mdiobus_read()
745 struct lan743x_adapter *adapter = bus->priv; in lan743x_mdiobus_write()
777 ether_addr_copy(adapter->mac_address, addr); in lan743x_mac_set_address()
778 netif_info(adapter, drv, adapter->netdev, in lan743x_mac_set_address()
790 netdev = adapter->netdev; in lan743x_mac_init()
798 if (!is_valid_ether_addr(adapter->mac_address)) { in lan743x_mac_init()
801 adapter->mac_address[0] = mac_addr_lo & 0xFF; in lan743x_mac_init()
802 adapter->mac_address[1] = (mac_addr_lo >> 8) & 0xFF; in lan743x_mac_init()
803 adapter->mac_address[2] = (mac_addr_lo >> 16) & 0xFF; in lan743x_mac_init()
804 adapter->mac_address[3] = (mac_addr_lo >> 24) & 0xFF; in lan743x_mac_init()
805 adapter->mac_address[4] = mac_addr_hi & 0xFF; in lan743x_mac_init()
806 adapter->mac_address[5] = (mac_addr_hi >> 8) & 0xFF; in lan743x_mac_init()
811 } else if (!is_valid_ether_addr(adapter->mac_address)) { in lan743x_mac_init()
816 eth_random_addr(adapter->mac_address); in lan743x_mac_init()
818 lan743x_mac_set_address(adapter, adapter->mac_address); in lan743x_mac_init()
819 ether_addr_copy(netdev->dev_addr, adapter->mac_address); in lan743x_mac_init()
920 struct lan743x_phy *phy = &adapter->phy; in lan743x_phy_update_flowcontrol()
923 if (phy->fc_autoneg) in lan743x_phy_update_flowcontrol()
926 cap = phy->fc_request_control; in lan743x_phy_update_flowcontrol()
941 struct phy_device *phydev = netdev->phydev; in lan743x_phy_link_status_change()
945 if (phydev->state == PHY_RUNNING) { in lan743x_phy_link_status_change()
961 if (phydev->duplex) in lan743x_phy_link_status_change()
967 switch (phydev->speed) { in lan743x_phy_link_status_change()
986 linkmode_adv_to_mii_adv_t(phydev->advertising); in lan743x_phy_link_status_change()
988 linkmode_adv_to_mii_adv_t(phydev->lp_advertising); in lan743x_phy_link_status_change()
1000 struct net_device *netdev = adapter->netdev; in lan743x_phy_close()
1002 phy_stop(netdev->phydev); in lan743x_phy_close()
1003 phy_disconnect(netdev->phydev); in lan743x_phy_close()
1004 netdev->phydev = NULL; in lan743x_phy_close()
1009 struct net_device *netdev = adapter->netdev; in lan743x_phy_open()
1010 struct lan743x_phy *phy = &adapter->phy; in lan743x_phy_open()
1012 int ret = -EIO; in lan743x_phy_open()
1015 phydev = of_phy_get_and_connect(netdev, adapter->pdev->dev.of_node, in lan743x_phy_open()
1020 phydev = phy_find_first(adapter->mdiobus); in lan743x_phy_open()
1036 phy->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan743x_phy_open()
1037 phy->fc_autoneg = phydev->autoneg; in lan743x_phy_open()
1073 mac_addr = adapter->mac_address; in lan743x_rfe_update_mac_address()
1088 struct net_device *netdev = adapter->netdev; in lan743x_rfe_set_multicast()
1097 if (netdev->flags & IFF_PROMISC) { in lan743x_rfe_set_multicast()
1100 if (netdev->flags & IFF_ALLMULTI) in lan743x_rfe_set_multicast()
1116 data = ha->addr[3]; in lan743x_rfe_set_multicast()
1117 data = ha->addr[2] | (data << 8); in lan743x_rfe_set_multicast()
1118 data = ha->addr[1] | (data << 8); in lan743x_rfe_set_multicast()
1119 data = ha->addr[0] | (data << 8); in lan743x_rfe_set_multicast()
1122 data = ha->addr[5]; in lan743x_rfe_set_multicast()
1123 data = ha->addr[4] | (data << 8); in lan743x_rfe_set_multicast()
1128 u32 bitnum = (ether_crc(ETH_ALEN, ha->addr) >> in lan743x_rfe_set_multicast()
1164 return -EPERM; in lan743x_dmac_init()
1166 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_dmac_init()
1207 timeout--; in lan743x_dmac_tx_wait_till_stopped()
1210 result = -ENODEV; in lan743x_dmac_tx_wait_till_stopped()
1236 timeout--; in lan743x_dmac_rx_wait_till_stopped()
1239 result = -ENODEV; in lan743x_dmac_rx_wait_till_stopped()
1243 static void lan743x_tx_release_desc(struct lan743x_tx *tx, in lan743x_tx_release_desc() argument
1251 descriptor = &tx->ring_cpu_ptr[descriptor_index]; in lan743x_tx_release_desc()
1252 buffer_info = &tx->buffer_info[descriptor_index]; in lan743x_tx_release_desc()
1253 if (!(buffer_info->flags & TX_BUFFER_INFO_FLAG_ACTIVE)) in lan743x_tx_release_desc()
1256 descriptor_type = le32_to_cpu(descriptor->data0) & in lan743x_tx_release_desc()
1264 if (buffer_info->dma_ptr) { in lan743x_tx_release_desc()
1265 if (buffer_info->flags & in lan743x_tx_release_desc()
1267 dma_unmap_page(&tx->adapter->pdev->dev, in lan743x_tx_release_desc()
1268 buffer_info->dma_ptr, in lan743x_tx_release_desc()
1269 buffer_info->buffer_length, in lan743x_tx_release_desc()
1272 dma_unmap_single(&tx->adapter->pdev->dev, in lan743x_tx_release_desc()
1273 buffer_info->dma_ptr, in lan743x_tx_release_desc()
1274 buffer_info->buffer_length, in lan743x_tx_release_desc()
1277 buffer_info->dma_ptr = 0; in lan743x_tx_release_desc()
1278 buffer_info->buffer_length = 0; in lan743x_tx_release_desc()
1280 if (!buffer_info->skb) in lan743x_tx_release_desc()
1283 if (!(buffer_info->flags & TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED)) { in lan743x_tx_release_desc()
1284 dev_kfree_skb_any(buffer_info->skb); in lan743x_tx_release_desc()
1289 lan743x_ptp_unrequest_tx_timestamp(tx->adapter); in lan743x_tx_release_desc()
1290 dev_kfree_skb_any(buffer_info->skb); in lan743x_tx_release_desc()
1292 ignore_sync = (buffer_info->flags & in lan743x_tx_release_desc()
1294 lan743x_ptp_tx_timestamp_skb(tx->adapter, in lan743x_tx_release_desc()
1295 buffer_info->skb, ignore_sync); in lan743x_tx_release_desc()
1299 buffer_info->skb = NULL; in lan743x_tx_release_desc()
1302 buffer_info->flags &= ~TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_release_desc()
1309 static int lan743x_tx_next_index(struct lan743x_tx *tx, int index) in lan743x_tx_next_index() argument
1311 return ((++index) % tx->ring_size); in lan743x_tx_next_index()
1314 static void lan743x_tx_release_completed_descriptors(struct lan743x_tx *tx) in lan743x_tx_release_completed_descriptors() argument
1316 while (le32_to_cpu(*tx->head_cpu_ptr) != (tx->last_head)) { in lan743x_tx_release_completed_descriptors()
1317 lan743x_tx_release_desc(tx, tx->last_head, false); in lan743x_tx_release_completed_descriptors()
1318 tx->last_head = lan743x_tx_next_index(tx, tx->last_head); in lan743x_tx_release_completed_descriptors()
1322 static void lan743x_tx_release_all_descriptors(struct lan743x_tx *tx) in lan743x_tx_release_all_descriptors() argument
1326 original_head = tx->last_head; in lan743x_tx_release_all_descriptors()
1328 lan743x_tx_release_desc(tx, tx->last_head, true); in lan743x_tx_release_all_descriptors()
1329 tx->last_head = lan743x_tx_next_index(tx, tx->last_head); in lan743x_tx_release_all_descriptors()
1330 } while (tx->last_head != original_head); in lan743x_tx_release_all_descriptors()
1331 memset(tx->ring_cpu_ptr, 0, in lan743x_tx_release_all_descriptors()
1332 sizeof(*tx->ring_cpu_ptr) * (tx->ring_size)); in lan743x_tx_release_all_descriptors()
1333 memset(tx->buffer_info, 0, in lan743x_tx_release_all_descriptors()
1334 sizeof(*tx->buffer_info) * (tx->ring_size)); in lan743x_tx_release_all_descriptors()
1337 static int lan743x_tx_get_desc_cnt(struct lan743x_tx *tx, in lan743x_tx_get_desc_cnt() argument
1345 nr_frags = skb_shinfo(skb)->nr_frags; in lan743x_tx_get_desc_cnt()
1350 static int lan743x_tx_get_avail_desc(struct lan743x_tx *tx) in lan743x_tx_get_avail_desc() argument
1352 int last_head = tx->last_head; in lan743x_tx_get_avail_desc()
1353 int last_tail = tx->last_tail; in lan743x_tx_get_avail_desc()
1356 return tx->ring_size - last_tail + last_head - 1; in lan743x_tx_get_avail_desc()
1358 return last_head - last_tail - 1; in lan743x_tx_get_avail_desc()
1361 void lan743x_tx_set_timestamping_mode(struct lan743x_tx *tx, in lan743x_tx_set_timestamping_mode() argument
1366 tx->ts_flags |= TX_TS_FLAG_TIMESTAMPING_ENABLED; in lan743x_tx_set_timestamping_mode()
1368 tx->ts_flags &= ~TX_TS_FLAG_TIMESTAMPING_ENABLED; in lan743x_tx_set_timestamping_mode()
1370 tx->ts_flags |= TX_TS_FLAG_ONE_STEP_SYNC; in lan743x_tx_set_timestamping_mode()
1372 tx->ts_flags &= ~TX_TS_FLAG_ONE_STEP_SYNC; in lan743x_tx_set_timestamping_mode()
1375 static int lan743x_tx_frame_start(struct lan743x_tx *tx, in lan743x_tx_frame_start() argument
1383 * assuming tx->ring_lock has already been acquired. in lan743x_tx_frame_start()
1387 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_start()
1388 struct device *dev = &adapter->pdev->dev; in lan743x_tx_frame_start()
1391 tx->frame_flags |= TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_start()
1392 tx->frame_first = tx->last_tail; in lan743x_tx_frame_start()
1393 tx->frame_tail = tx->frame_first; in lan743x_tx_frame_start()
1395 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_start()
1396 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_start()
1400 return -ENOMEM; in lan743x_tx_frame_start()
1402 tx_descriptor->data1 = cpu_to_le32(DMA_ADDR_LOW32(dma_ptr)); in lan743x_tx_frame_start()
1403 tx_descriptor->data2 = cpu_to_le32(DMA_ADDR_HIGH32(dma_ptr)); in lan743x_tx_frame_start()
1404 tx_descriptor->data3 = cpu_to_le32((frame_length << 16) & in lan743x_tx_frame_start()
1407 buffer_info->skb = NULL; in lan743x_tx_frame_start()
1408 buffer_info->dma_ptr = dma_ptr; in lan743x_tx_frame_start()
1409 buffer_info->buffer_length = first_buffer_length; in lan743x_tx_frame_start()
1410 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_start()
1412 tx->frame_data0 = (first_buffer_length & in lan743x_tx_frame_start()
1418 tx->frame_data0 |= TX_DESC_DATA0_TSE_; in lan743x_tx_frame_start()
1421 tx->frame_data0 |= TX_DESC_DATA0_ICE_ | in lan743x_tx_frame_start()
1429 static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx, in lan743x_tx_frame_add_lso() argument
1434 * assuming tx->ring_lock has already been acquired. in lan743x_tx_frame_add_lso()
1440 tx->frame_data0 |= TX_DESC_DATA0_EXT_; in lan743x_tx_frame_add_lso()
1442 tx->frame_data0 |= TX_DESC_DATA0_LS_; in lan743x_tx_frame_add_lso()
1443 tx->frame_data0 |= TX_DESC_DATA0_IOC_; in lan743x_tx_frame_add_lso()
1445 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1446 tx_descriptor->data0 = cpu_to_le32(tx->frame_data0); in lan743x_tx_frame_add_lso()
1449 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_add_lso()
1450 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1451 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_add_lso()
1454 tx_descriptor->data1 = 0; in lan743x_tx_frame_add_lso()
1455 tx_descriptor->data2 = 0; in lan743x_tx_frame_add_lso()
1456 tx_descriptor->data3 = 0; in lan743x_tx_frame_add_lso()
1458 buffer_info->skb = NULL; in lan743x_tx_frame_add_lso()
1459 buffer_info->dma_ptr = 0; in lan743x_tx_frame_add_lso()
1460 buffer_info->buffer_length = 0; in lan743x_tx_frame_add_lso()
1461 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_add_lso()
1463 tx->frame_data0 = (frame_length & TX_DESC_DATA0_EXT_PAY_LENGTH_MASK_) | in lan743x_tx_frame_add_lso()
1470 static int lan743x_tx_frame_add_fragment(struct lan743x_tx *tx, in lan743x_tx_frame_add_fragment() argument
1475 * assuming tx->ring_lock has already been acquired in lan743x_tx_frame_add_fragment()
1479 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_add_fragment()
1480 struct device *dev = &adapter->pdev->dev; in lan743x_tx_frame_add_fragment()
1489 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1490 tx_descriptor->data0 = cpu_to_le32(tx->frame_data0); in lan743x_tx_frame_add_fragment()
1493 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_add_fragment()
1494 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1495 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_add_fragment()
1503 desc_index = tx->frame_first; in lan743x_tx_frame_add_fragment()
1504 while (desc_index != tx->frame_tail) { in lan743x_tx_frame_add_fragment()
1505 lan743x_tx_release_desc(tx, desc_index, true); in lan743x_tx_frame_add_fragment()
1506 desc_index = lan743x_tx_next_index(tx, desc_index); in lan743x_tx_frame_add_fragment()
1509 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_add_fragment()
1510 tx->frame_first = 0; in lan743x_tx_frame_add_fragment()
1511 tx->frame_data0 = 0; in lan743x_tx_frame_add_fragment()
1512 tx->frame_tail = 0; in lan743x_tx_frame_add_fragment()
1513 return -ENOMEM; in lan743x_tx_frame_add_fragment()
1516 tx_descriptor->data1 = cpu_to_le32(DMA_ADDR_LOW32(dma_ptr)); in lan743x_tx_frame_add_fragment()
1517 tx_descriptor->data2 = cpu_to_le32(DMA_ADDR_HIGH32(dma_ptr)); in lan743x_tx_frame_add_fragment()
1518 tx_descriptor->data3 = cpu_to_le32((frame_length << 16) & in lan743x_tx_frame_add_fragment()
1521 buffer_info->skb = NULL; in lan743x_tx_frame_add_fragment()
1522 buffer_info->dma_ptr = dma_ptr; in lan743x_tx_frame_add_fragment()
1523 buffer_info->buffer_length = fragment_length; in lan743x_tx_frame_add_fragment()
1524 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE; in lan743x_tx_frame_add_fragment()
1525 buffer_info->flags |= TX_BUFFER_INFO_FLAG_SKB_FRAGMENT; in lan743x_tx_frame_add_fragment()
1527 tx->frame_data0 = (fragment_length & TX_DESC_DATA0_BUF_LENGTH_MASK_) | in lan743x_tx_frame_add_fragment()
1535 static void lan743x_tx_frame_end(struct lan743x_tx *tx, in lan743x_tx_frame_end() argument
1541 * assuming tx->ring_lock has already been acquired in lan743x_tx_frame_end()
1545 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_frame_end()
1549 if ((tx->frame_data0 & TX_DESC_DATA0_DTYPE_MASK_) == in lan743x_tx_frame_end()
1551 tx->frame_data0 |= TX_DESC_DATA0_LS_; in lan743x_tx_frame_end()
1552 tx->frame_data0 |= TX_DESC_DATA0_IOC_; in lan743x_tx_frame_end()
1555 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; in lan743x_tx_frame_end()
1556 buffer_info = &tx->buffer_info[tx->frame_tail]; in lan743x_tx_frame_end()
1557 buffer_info->skb = skb; in lan743x_tx_frame_end()
1559 buffer_info->flags |= TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED; in lan743x_tx_frame_end()
1561 buffer_info->flags |= TX_BUFFER_INFO_FLAG_IGNORE_SYNC; in lan743x_tx_frame_end()
1563 tx_descriptor->data0 = cpu_to_le32(tx->frame_data0); in lan743x_tx_frame_end()
1564 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail); in lan743x_tx_frame_end()
1565 tx->last_tail = tx->frame_tail; in lan743x_tx_frame_end()
1569 if (tx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET) in lan743x_tx_frame_end()
1571 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) in lan743x_tx_frame_end()
1575 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number), in lan743x_tx_frame_end()
1576 tx_tail_flags | tx->frame_tail); in lan743x_tx_frame_end()
1577 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS; in lan743x_tx_frame_end()
1580 static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx, in lan743x_tx_xmit_frame() argument
1594 required_number_of_descriptors = lan743x_tx_get_desc_cnt(tx, skb); in lan743x_tx_xmit_frame()
1596 spin_lock_irqsave(&tx->ring_lock, irq_flags); in lan743x_tx_xmit_frame()
1598 lan743x_tx_get_avail_desc(tx)) { in lan743x_tx_xmit_frame()
1599 if (required_number_of_descriptors > (tx->ring_size - 1)) { in lan743x_tx_xmit_frame()
1603 tx->overflow_skb = skb; in lan743x_tx_xmit_frame()
1604 netif_stop_queue(tx->adapter->netdev); in lan743x_tx_xmit_frame()
1610 if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && in lan743x_tx_xmit_frame()
1611 (tx->ts_flags & TX_TS_FLAG_TIMESTAMPING_ENABLED) && in lan743x_tx_xmit_frame()
1612 (lan743x_ptp_request_tx_timestamp(tx->adapter))) { in lan743x_tx_xmit_frame()
1613 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; in lan743x_tx_xmit_frame()
1615 if (tx->ts_flags & TX_TS_FLAG_ONE_STEP_SYNC) in lan743x_tx_xmit_frame()
1620 nr_frags = skb_shinfo(skb)->nr_frags; in lan743x_tx_xmit_frame()
1624 start_frame_length = max(skb_shinfo(skb)->gso_size, in lan743x_tx_xmit_frame()
1628 if (lan743x_tx_frame_start(tx, in lan743x_tx_xmit_frame()
1629 skb->data, head_length, in lan743x_tx_xmit_frame()
1632 skb->ip_summed == CHECKSUM_PARTIAL)) { in lan743x_tx_xmit_frame()
1638 lan743x_tx_frame_add_lso(tx, frame_length, nr_frags); in lan743x_tx_xmit_frame()
1644 const skb_frag_t *frag = &(skb_shinfo(skb)->frags[j]); in lan743x_tx_xmit_frame()
1646 if (lan743x_tx_frame_add_fragment(tx, frag, frame_length)) { in lan743x_tx_xmit_frame()
1658 lan743x_tx_frame_end(tx, skb, do_timestamp, ignore_sync); in lan743x_tx_xmit_frame()
1661 spin_unlock_irqrestore(&tx->ring_lock, irq_flags); in lan743x_tx_xmit_frame()
1667 struct lan743x_tx *tx = container_of(napi, struct lan743x_tx, napi); in lan743x_tx_napi_poll() local
1668 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_napi_poll()
1673 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number); in lan743x_tx_napi_poll()
1675 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) in lan743x_tx_napi_poll()
1677 spin_lock_irqsave(&tx->ring_lock, irq_flags); in lan743x_tx_napi_poll()
1679 /* clean up tx ring */ in lan743x_tx_napi_poll()
1680 lan743x_tx_release_completed_descriptors(tx); in lan743x_tx_napi_poll()
1681 if (netif_queue_stopped(adapter->netdev)) { in lan743x_tx_napi_poll()
1682 if (tx->overflow_skb) { in lan743x_tx_napi_poll()
1683 if (lan743x_tx_get_desc_cnt(tx, tx->overflow_skb) <= in lan743x_tx_napi_poll()
1684 lan743x_tx_get_avail_desc(tx)) in lan743x_tx_napi_poll()
1687 netif_wake_queue(adapter->netdev); in lan743x_tx_napi_poll()
1690 spin_unlock_irqrestore(&tx->ring_lock, irq_flags); in lan743x_tx_napi_poll()
1694 lan743x_tx_xmit_frame(tx, tx->overflow_skb); in lan743x_tx_napi_poll()
1695 tx->overflow_skb = NULL; in lan743x_tx_napi_poll()
1696 netif_wake_queue(adapter->netdev); in lan743x_tx_napi_poll()
1704 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_napi_poll()
1711 static void lan743x_tx_ring_cleanup(struct lan743x_tx *tx) in lan743x_tx_ring_cleanup() argument
1713 if (tx->head_cpu_ptr) { in lan743x_tx_ring_cleanup()
1714 dma_free_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_cleanup()
1715 sizeof(*tx->head_cpu_ptr), tx->head_cpu_ptr, in lan743x_tx_ring_cleanup()
1716 tx->head_dma_ptr); in lan743x_tx_ring_cleanup()
1717 tx->head_cpu_ptr = NULL; in lan743x_tx_ring_cleanup()
1718 tx->head_dma_ptr = 0; in lan743x_tx_ring_cleanup()
1720 kfree(tx->buffer_info); in lan743x_tx_ring_cleanup()
1721 tx->buffer_info = NULL; in lan743x_tx_ring_cleanup()
1723 if (tx->ring_cpu_ptr) { in lan743x_tx_ring_cleanup()
1724 dma_free_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_cleanup()
1725 tx->ring_allocation_size, tx->ring_cpu_ptr, in lan743x_tx_ring_cleanup()
1726 tx->ring_dma_ptr); in lan743x_tx_ring_cleanup()
1727 tx->ring_allocation_size = 0; in lan743x_tx_ring_cleanup()
1728 tx->ring_cpu_ptr = NULL; in lan743x_tx_ring_cleanup()
1729 tx->ring_dma_ptr = 0; in lan743x_tx_ring_cleanup()
1731 tx->ring_size = 0; in lan743x_tx_ring_cleanup()
1734 static int lan743x_tx_ring_init(struct lan743x_tx *tx) in lan743x_tx_ring_init() argument
1739 int ret = -ENOMEM; in lan743x_tx_ring_init()
1741 tx->ring_size = LAN743X_TX_RING_SIZE; in lan743x_tx_ring_init()
1742 if (tx->ring_size & ~TX_CFG_B_TX_RING_LEN_MASK_) { in lan743x_tx_ring_init()
1743 ret = -EINVAL; in lan743x_tx_ring_init()
1746 if (dma_set_mask_and_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1748 if (dma_set_mask_and_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1750 dev_warn(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1752 ret = -ENOMEM; in lan743x_tx_ring_init()
1756 ring_allocation_size = ALIGN(tx->ring_size * in lan743x_tx_ring_init()
1760 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1763 ret = -ENOMEM; in lan743x_tx_ring_init()
1767 tx->ring_allocation_size = ring_allocation_size; in lan743x_tx_ring_init()
1768 tx->ring_cpu_ptr = (struct lan743x_tx_descriptor *)cpu_ptr; in lan743x_tx_ring_init()
1769 tx->ring_dma_ptr = dma_ptr; in lan743x_tx_ring_init()
1771 cpu_ptr = kcalloc(tx->ring_size, sizeof(*tx->buffer_info), GFP_KERNEL); in lan743x_tx_ring_init()
1773 ret = -ENOMEM; in lan743x_tx_ring_init()
1776 tx->buffer_info = (struct lan743x_tx_buffer_info *)cpu_ptr; in lan743x_tx_ring_init()
1778 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev, in lan743x_tx_ring_init()
1779 sizeof(*tx->head_cpu_ptr), &dma_ptr, in lan743x_tx_ring_init()
1782 ret = -ENOMEM; in lan743x_tx_ring_init()
1786 tx->head_cpu_ptr = cpu_ptr; in lan743x_tx_ring_init()
1787 tx->head_dma_ptr = dma_ptr; in lan743x_tx_ring_init()
1788 if (tx->head_dma_ptr & 0x3) { in lan743x_tx_ring_init()
1789 ret = -ENOMEM; in lan743x_tx_ring_init()
1796 lan743x_tx_ring_cleanup(tx); in lan743x_tx_ring_init()
1800 static void lan743x_tx_close(struct lan743x_tx *tx) in lan743x_tx_close() argument
1802 struct lan743x_adapter *adapter = tx->adapter; in lan743x_tx_close()
1806 DMAC_CMD_STOP_T_(tx->channel_number)); in lan743x_tx_close()
1807 lan743x_dmac_tx_wait_till_stopped(adapter, tx->channel_number); in lan743x_tx_close()
1811 DMAC_INT_BIT_TX_IOC_(tx->channel_number)); in lan743x_tx_close()
1813 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_close()
1814 napi_disable(&tx->napi); in lan743x_tx_close()
1815 netif_napi_del(&tx->napi); in lan743x_tx_close()
1818 FCT_TX_CTL_DIS_(tx->channel_number)); in lan743x_tx_close()
1820 FCT_TX_CTL_EN_(tx->channel_number), in lan743x_tx_close()
1823 lan743x_tx_release_all_descriptors(tx); in lan743x_tx_close()
1825 if (tx->overflow_skb) { in lan743x_tx_close()
1826 dev_kfree_skb(tx->overflow_skb); in lan743x_tx_close()
1827 tx->overflow_skb = NULL; in lan743x_tx_close()
1830 lan743x_tx_ring_cleanup(tx); in lan743x_tx_close()
1833 static int lan743x_tx_open(struct lan743x_tx *tx) in lan743x_tx_open() argument
1839 adapter = tx->adapter; in lan743x_tx_open()
1840 ret = lan743x_tx_ring_init(tx); in lan743x_tx_open()
1846 FCT_TX_CTL_RESET_(tx->channel_number)); in lan743x_tx_open()
1848 FCT_TX_CTL_RESET_(tx->channel_number), in lan743x_tx_open()
1853 FCT_TX_CTL_EN_(tx->channel_number)); in lan743x_tx_open()
1855 /* reset tx channel */ in lan743x_tx_open()
1857 DMAC_CMD_TX_SWR_(tx->channel_number)); in lan743x_tx_open()
1859 DMAC_CMD_TX_SWR_(tx->channel_number), in lan743x_tx_open()
1864 TX_BASE_ADDRH(tx->channel_number), in lan743x_tx_open()
1865 DMA_ADDR_HIGH32(tx->ring_dma_ptr)); in lan743x_tx_open()
1867 TX_BASE_ADDRL(tx->channel_number), in lan743x_tx_open()
1868 DMA_ADDR_LOW32(tx->ring_dma_ptr)); in lan743x_tx_open()
1871 data = lan743x_csr_read(adapter, TX_CFG_B(tx->channel_number)); in lan743x_tx_open()
1873 data |= ((tx->ring_size) & TX_CFG_B_TX_RING_LEN_MASK_); in lan743x_tx_open()
1874 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_tx_open()
1876 lan743x_csr_write(adapter, TX_CFG_B(tx->channel_number), data); in lan743x_tx_open()
1880 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_tx_open()
1886 lan743x_csr_write(adapter, TX_CFG_A(tx->channel_number), data); in lan743x_tx_open()
1890 TX_HEAD_WRITEBACK_ADDRH(tx->channel_number), in lan743x_tx_open()
1891 DMA_ADDR_HIGH32(tx->head_dma_ptr)); in lan743x_tx_open()
1893 TX_HEAD_WRITEBACK_ADDRL(tx->channel_number), in lan743x_tx_open()
1894 DMA_ADDR_LOW32(tx->head_dma_ptr)); in lan743x_tx_open()
1897 tx->last_head = lan743x_csr_read(adapter, TX_HEAD(tx->channel_number)); in lan743x_tx_open()
1900 tx->last_tail = 0; in lan743x_tx_open()
1901 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number), in lan743x_tx_open()
1902 (u32)(tx->last_tail)); in lan743x_tx_open()
1903 tx->vector_flags = lan743x_intr_get_vector_flags(adapter, in lan743x_tx_open()
1905 (tx->channel_number)); in lan743x_tx_open()
1906 netif_tx_napi_add(adapter->netdev, in lan743x_tx_open()
1907 &tx->napi, lan743x_tx_napi_poll, in lan743x_tx_open()
1908 tx->ring_size - 1); in lan743x_tx_open()
1909 napi_enable(&tx->napi); in lan743x_tx_open()
1912 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR) in lan743x_tx_open()
1914 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR) in lan743x_tx_open()
1916 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C) in lan743x_tx_open()
1918 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C) in lan743x_tx_open()
1920 lan743x_csr_write(adapter, TX_CFG_C(tx->channel_number), data); in lan743x_tx_open()
1922 if (!(tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET)) in lan743x_tx_open()
1924 INT_BIT_DMA_TX_(tx->channel_number)); in lan743x_tx_open()
1926 DMAC_INT_BIT_TX_IOC_(tx->channel_number)); in lan743x_tx_open()
1930 DMAC_CMD_START_T_(tx->channel_number)); in lan743x_tx_open()
1934 static int lan743x_rx_next_index(struct lan743x_rx *rx, int index) in lan743x_rx_next_index() argument
1936 return ((++index) % rx->ring_size); in lan743x_rx_next_index()
1939 static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index) in lan743x_rx_update_tail() argument
1943 lan743x_csr_write(rx->adapter, RX_TAIL(rx->channel_number), in lan743x_rx_update_tail()
1947 static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index, in lan743x_rx_init_ring_element() argument
1950 struct net_device *netdev = rx->adapter->netdev; in lan743x_rx_init_ring_element()
1951 struct device *dev = &rx->adapter->pdev->dev; in lan743x_rx_init_ring_element()
1958 buffer_length = netdev->mtu + ETH_HLEN + ETH_FCS_LEN + RX_HEAD_PADDING; in lan743x_rx_init_ring_element()
1960 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_init_ring_element()
1961 buffer_info = &rx->buffer_info[index]; in lan743x_rx_init_ring_element()
1964 return -ENOMEM; in lan743x_rx_init_ring_element()
1965 dma_ptr = dma_map_single(dev, skb->data, buffer_length, DMA_FROM_DEVICE); in lan743x_rx_init_ring_element()
1968 return -ENOMEM; in lan743x_rx_init_ring_element()
1970 if (buffer_info->dma_ptr) { in lan743x_rx_init_ring_element()
1972 if (le32_to_cpu(descriptor->data0) & RX_DESC_DATA0_LS_) in lan743x_rx_init_ring_element()
1978 (le32_to_cpu(descriptor->data0)), in lan743x_rx_init_ring_element()
1979 buffer_info->buffer_length); in lan743x_rx_init_ring_element()
1981 used_length = buffer_info->buffer_length; in lan743x_rx_init_ring_element()
1982 dma_sync_single_for_cpu(dev, buffer_info->dma_ptr, in lan743x_rx_init_ring_element()
1985 dma_unmap_single_attrs(dev, buffer_info->dma_ptr, in lan743x_rx_init_ring_element()
1986 buffer_info->buffer_length, in lan743x_rx_init_ring_element()
1991 buffer_info->skb = skb; in lan743x_rx_init_ring_element()
1992 buffer_info->dma_ptr = dma_ptr; in lan743x_rx_init_ring_element()
1993 buffer_info->buffer_length = buffer_length; in lan743x_rx_init_ring_element()
1994 descriptor->data1 = cpu_to_le32(DMA_ADDR_LOW32(buffer_info->dma_ptr)); in lan743x_rx_init_ring_element()
1995 descriptor->data2 = cpu_to_le32(DMA_ADDR_HIGH32(buffer_info->dma_ptr)); in lan743x_rx_init_ring_element()
1996 descriptor->data3 = 0; in lan743x_rx_init_ring_element()
1997 descriptor->data0 = cpu_to_le32((RX_DESC_DATA0_OWN_ | in lan743x_rx_init_ring_element()
1999 lan743x_rx_update_tail(rx, index); in lan743x_rx_init_ring_element()
2004 static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_reuse_ring_element() argument
2009 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_reuse_ring_element()
2010 buffer_info = &rx->buffer_info[index]; in lan743x_rx_reuse_ring_element()
2012 descriptor->data1 = cpu_to_le32(DMA_ADDR_LOW32(buffer_info->dma_ptr)); in lan743x_rx_reuse_ring_element()
2013 descriptor->data2 = cpu_to_le32(DMA_ADDR_HIGH32(buffer_info->dma_ptr)); in lan743x_rx_reuse_ring_element()
2014 descriptor->data3 = 0; in lan743x_rx_reuse_ring_element()
2015 descriptor->data0 = cpu_to_le32((RX_DESC_DATA0_OWN_ | in lan743x_rx_reuse_ring_element()
2016 ((buffer_info->buffer_length) & in lan743x_rx_reuse_ring_element()
2018 lan743x_rx_update_tail(rx, index); in lan743x_rx_reuse_ring_element()
2021 static void lan743x_rx_release_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_release_ring_element() argument
2026 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_release_ring_element()
2027 buffer_info = &rx->buffer_info[index]; in lan743x_rx_release_ring_element()
2031 if (buffer_info->dma_ptr) { in lan743x_rx_release_ring_element()
2032 dma_unmap_single(&rx->adapter->pdev->dev, in lan743x_rx_release_ring_element()
2033 buffer_info->dma_ptr, in lan743x_rx_release_ring_element()
2034 buffer_info->buffer_length, in lan743x_rx_release_ring_element()
2036 buffer_info->dma_ptr = 0; in lan743x_rx_release_ring_element()
2039 if (buffer_info->skb) { in lan743x_rx_release_ring_element()
2040 dev_kfree_skb(buffer_info->skb); in lan743x_rx_release_ring_element()
2041 buffer_info->skb = NULL; in lan743x_rx_release_ring_element()
2054 frame_length = max_t(int, 0, frame_length - ETH_FCS_LEN); in lan743x_rx_trim_skb()
2055 if (skb->len > frame_length) { in lan743x_rx_trim_skb()
2056 skb->tail -= skb->len - frame_length; in lan743x_rx_trim_skb()
2057 skb->len = frame_length; in lan743x_rx_trim_skb()
2062 static int lan743x_rx_process_buffer(struct lan743x_rx *rx) in lan743x_rx_process_buffer() argument
2064 int current_head_index = le32_to_cpu(*rx->head_cpu_ptr); in lan743x_rx_process_buffer()
2066 struct net_device *netdev = rx->adapter->netdev; in lan743x_rx_process_buffer()
2070 int extension_index = -1; in lan743x_rx_process_buffer()
2074 if (current_head_index < 0 || current_head_index >= rx->ring_size) in lan743x_rx_process_buffer()
2077 if (rx->last_head < 0 || rx->last_head >= rx->ring_size) in lan743x_rx_process_buffer()
2080 if (rx->last_head == current_head_index) in lan743x_rx_process_buffer()
2083 descriptor = &rx->ring_cpu_ptr[rx->last_head]; in lan743x_rx_process_buffer()
2084 if (le32_to_cpu(descriptor->data0) & RX_DESC_DATA0_OWN_) in lan743x_rx_process_buffer()
2086 buffer_info = &rx->buffer_info[rx->last_head]; in lan743x_rx_process_buffer()
2088 is_last = le32_to_cpu(descriptor->data0) & RX_DESC_DATA0_LS_; in lan743x_rx_process_buffer()
2089 is_first = le32_to_cpu(descriptor->data0) & RX_DESC_DATA0_FS_; in lan743x_rx_process_buffer()
2091 if (is_last && le32_to_cpu(descriptor->data0) & RX_DESC_DATA0_EXT_) { in lan743x_rx_process_buffer()
2093 int index = lan743x_rx_next_index(rx, rx->last_head); in lan743x_rx_process_buffer()
2098 desc_ext = &rx->ring_cpu_ptr[index]; in lan743x_rx_process_buffer()
2099 if (le32_to_cpu(desc_ext->data0) & RX_DESC_DATA0_OWN_) in lan743x_rx_process_buffer()
2102 if (!(le32_to_cpu(desc_ext->data0) & RX_DESC_DATA0_EXT_)) in lan743x_rx_process_buffer()
2107 /* Only the last buffer in a multi-buffer frame contains the total frame in lan743x_rx_process_buffer()
2114 RX_DESC_DATA0_FRAME_LENGTH_GET_(le32_to_cpu(descriptor->data0)); in lan743x_rx_process_buffer()
2115 buffer_length = buffer_info->buffer_length; in lan743x_rx_process_buffer()
2123 skb = buffer_info->skb; in lan743x_rx_process_buffer()
2124 if (lan743x_rx_init_ring_element(rx, rx->last_head, in lan743x_rx_process_buffer()
2130 lan743x_rx_reuse_ring_element(rx, rx->last_head); in lan743x_rx_process_buffer()
2132 dev_kfree_skb_irq(rx->skb_head); in lan743x_rx_process_buffer()
2133 rx->skb_head = NULL; in lan743x_rx_process_buffer()
2137 /* add buffers to skb via skb->frag_list */ in lan743x_rx_process_buffer()
2140 skb_put(skb, buffer_length - RX_HEAD_PADDING); in lan743x_rx_process_buffer()
2141 if (rx->skb_head) in lan743x_rx_process_buffer()
2142 dev_kfree_skb_irq(rx->skb_head); in lan743x_rx_process_buffer()
2143 rx->skb_head = skb; in lan743x_rx_process_buffer()
2144 } else if (rx->skb_head) { in lan743x_rx_process_buffer()
2146 if (skb_shinfo(rx->skb_head)->frag_list) in lan743x_rx_process_buffer()
2147 rx->skb_tail->next = skb; in lan743x_rx_process_buffer()
2149 skb_shinfo(rx->skb_head)->frag_list = skb; in lan743x_rx_process_buffer()
2150 rx->skb_tail = skb; in lan743x_rx_process_buffer()
2151 rx->skb_head->len += skb->len; in lan743x_rx_process_buffer()
2152 rx->skb_head->data_len += skb->len; in lan743x_rx_process_buffer()
2153 rx->skb_head->truesize += skb->truesize; in lan743x_rx_process_buffer()
2167 ts_sec = le32_to_cpu(desc_ext->data1); in lan743x_rx_process_buffer()
2168 ts_nsec = (le32_to_cpu(desc_ext->data2) & in lan743x_rx_process_buffer()
2170 if (rx->skb_head) in lan743x_rx_process_buffer()
2171 skb_hwtstamps(rx->skb_head)->hwtstamp = in lan743x_rx_process_buffer()
2173 lan743x_rx_reuse_ring_element(rx, extension_index); in lan743x_rx_process_buffer()
2174 rx->last_head = extension_index; in lan743x_rx_process_buffer()
2178 if (is_last && rx->skb_head) in lan743x_rx_process_buffer()
2179 rx->skb_head = lan743x_rx_trim_skb(rx->skb_head, frame_length); in lan743x_rx_process_buffer()
2181 if (is_last && rx->skb_head) { in lan743x_rx_process_buffer()
2182 rx->skb_head->protocol = eth_type_trans(rx->skb_head, in lan743x_rx_process_buffer()
2183 rx->adapter->netdev); in lan743x_rx_process_buffer()
2185 rx->skb_head->len); in lan743x_rx_process_buffer()
2186 napi_gro_receive(&rx->napi, rx->skb_head); in lan743x_rx_process_buffer()
2187 rx->skb_head = NULL; in lan743x_rx_process_buffer()
2192 rx->last_tail = rx->last_head; in lan743x_rx_process_buffer()
2193 rx->last_head = lan743x_rx_next_index(rx, rx->last_head); in lan743x_rx_process_buffer()
2201 struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi); in lan743x_rx_napi_poll() local
2202 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_napi_poll()
2207 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) { in lan743x_rx_napi_poll()
2210 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_napi_poll()
2213 result = lan743x_rx_process_buffer(rx); in lan743x_rx_napi_poll()
2217 rx->frame_count += count; in lan743x_rx_napi_poll()
2224 /* re-arm interrupts, must write to rx tail on some chip variants */ in lan743x_rx_napi_poll()
2225 if (rx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET) in lan743x_rx_napi_poll()
2227 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) { in lan743x_rx_napi_poll()
2231 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_napi_poll()
2235 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_napi_poll()
2236 rx_tail_flags | rx->last_tail); in lan743x_rx_napi_poll()
2241 static void lan743x_rx_ring_cleanup(struct lan743x_rx *rx) in lan743x_rx_ring_cleanup() argument
2243 if (rx->buffer_info && rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2246 for (index = 0; index < rx->ring_size; index++) in lan743x_rx_ring_cleanup()
2247 lan743x_rx_release_ring_element(rx, index); in lan743x_rx_ring_cleanup()
2250 if (rx->head_cpu_ptr) { in lan743x_rx_ring_cleanup()
2251 dma_free_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_cleanup()
2252 sizeof(*rx->head_cpu_ptr), rx->head_cpu_ptr, in lan743x_rx_ring_cleanup()
2253 rx->head_dma_ptr); in lan743x_rx_ring_cleanup()
2254 rx->head_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2255 rx->head_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2258 kfree(rx->buffer_info); in lan743x_rx_ring_cleanup()
2259 rx->buffer_info = NULL; in lan743x_rx_ring_cleanup()
2261 if (rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2262 dma_free_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_cleanup()
2263 rx->ring_allocation_size, rx->ring_cpu_ptr, in lan743x_rx_ring_cleanup()
2264 rx->ring_dma_ptr); in lan743x_rx_ring_cleanup()
2265 rx->ring_allocation_size = 0; in lan743x_rx_ring_cleanup()
2266 rx->ring_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2267 rx->ring_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2270 rx->ring_size = 0; in lan743x_rx_ring_cleanup()
2271 rx->last_head = 0; in lan743x_rx_ring_cleanup()
2274 static int lan743x_rx_ring_init(struct lan743x_rx *rx) in lan743x_rx_ring_init() argument
2279 int ret = -ENOMEM; in lan743x_rx_ring_init()
2282 rx->ring_size = LAN743X_RX_RING_SIZE; in lan743x_rx_ring_init()
2283 if (rx->ring_size <= 1) { in lan743x_rx_ring_init()
2284 ret = -EINVAL; in lan743x_rx_ring_init()
2287 if (rx->ring_size & ~RX_CFG_B_RX_RING_LEN_MASK_) { in lan743x_rx_ring_init()
2288 ret = -EINVAL; in lan743x_rx_ring_init()
2291 if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2293 if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2295 dev_warn(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2297 ret = -ENOMEM; in lan743x_rx_ring_init()
2301 ring_allocation_size = ALIGN(rx->ring_size * in lan743x_rx_ring_init()
2305 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2308 ret = -ENOMEM; in lan743x_rx_ring_init()
2311 rx->ring_allocation_size = ring_allocation_size; in lan743x_rx_ring_init()
2312 rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr; in lan743x_rx_ring_init()
2313 rx->ring_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2315 cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info), in lan743x_rx_ring_init()
2318 ret = -ENOMEM; in lan743x_rx_ring_init()
2321 rx->buffer_info = (struct lan743x_rx_buffer_info *)cpu_ptr; in lan743x_rx_ring_init()
2323 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev, in lan743x_rx_ring_init()
2324 sizeof(*rx->head_cpu_ptr), &dma_ptr, in lan743x_rx_ring_init()
2327 ret = -ENOMEM; in lan743x_rx_ring_init()
2331 rx->head_cpu_ptr = cpu_ptr; in lan743x_rx_ring_init()
2332 rx->head_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2333 if (rx->head_dma_ptr & 0x3) { in lan743x_rx_ring_init()
2334 ret = -ENOMEM; in lan743x_rx_ring_init()
2338 rx->last_head = 0; in lan743x_rx_ring_init()
2339 for (index = 0; index < rx->ring_size; index++) { in lan743x_rx_ring_init()
2340 ret = lan743x_rx_init_ring_element(rx, index, GFP_KERNEL); in lan743x_rx_ring_init()
2347 netif_warn(rx->adapter, ifup, rx->adapter->netdev, in lan743x_rx_ring_init()
2350 lan743x_rx_ring_cleanup(rx); in lan743x_rx_ring_init()
2354 static void lan743x_rx_close(struct lan743x_rx *rx) in lan743x_rx_close() argument
2356 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_close()
2359 FCT_RX_CTL_DIS_(rx->channel_number)); in lan743x_rx_close()
2361 FCT_RX_CTL_EN_(rx->channel_number), in lan743x_rx_close()
2365 DMAC_CMD_STOP_R_(rx->channel_number)); in lan743x_rx_close()
2366 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number); in lan743x_rx_close()
2369 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_close()
2371 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_close()
2372 napi_disable(&rx->napi); in lan743x_rx_close()
2374 netif_napi_del(&rx->napi); in lan743x_rx_close()
2376 lan743x_rx_ring_cleanup(rx); in lan743x_rx_close()
2379 static int lan743x_rx_open(struct lan743x_rx *rx) in lan743x_rx_open() argument
2381 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_open()
2385 rx->frame_count = 0; in lan743x_rx_open()
2386 ret = lan743x_rx_ring_init(rx); in lan743x_rx_open()
2390 netif_napi_add(adapter->netdev, in lan743x_rx_open()
2391 &rx->napi, lan743x_rx_napi_poll, in lan743x_rx_open()
2395 DMAC_CMD_RX_SWR_(rx->channel_number)); in lan743x_rx_open()
2397 DMAC_CMD_RX_SWR_(rx->channel_number), in lan743x_rx_open()
2402 RX_BASE_ADDRH(rx->channel_number), in lan743x_rx_open()
2403 DMA_ADDR_HIGH32(rx->ring_dma_ptr)); in lan743x_rx_open()
2405 RX_BASE_ADDRL(rx->channel_number), in lan743x_rx_open()
2406 DMA_ADDR_LOW32(rx->ring_dma_ptr)); in lan743x_rx_open()
2408 /* set rx write back address */ in lan743x_rx_open()
2410 RX_HEAD_WRITEBACK_ADDRH(rx->channel_number), in lan743x_rx_open()
2411 DMA_ADDR_HIGH32(rx->head_dma_ptr)); in lan743x_rx_open()
2413 RX_HEAD_WRITEBACK_ADDRL(rx->channel_number), in lan743x_rx_open()
2414 DMA_ADDR_LOW32(rx->head_dma_ptr)); in lan743x_rx_open()
2416 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) { in lan743x_rx_open()
2425 RX_CFG_A(rx->channel_number), data); in lan743x_rx_open()
2428 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number)); in lan743x_rx_open()
2435 data |= ((rx->ring_size) & RX_CFG_B_RX_RING_LEN_MASK_); in lan743x_rx_open()
2437 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) in lan743x_rx_open()
2440 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data); in lan743x_rx_open()
2441 rx->vector_flags = lan743x_intr_get_vector_flags(adapter, in lan743x_rx_open()
2443 (rx->channel_number)); in lan743x_rx_open()
2447 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR) in lan743x_rx_open()
2449 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR) in lan743x_rx_open()
2451 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C) in lan743x_rx_open()
2453 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C) in lan743x_rx_open()
2455 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data); in lan743x_rx_open()
2457 rx->last_tail = ((u32)(rx->ring_size - 1)); in lan743x_rx_open()
2458 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_open()
2459 rx->last_tail); in lan743x_rx_open()
2460 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number)); in lan743x_rx_open()
2461 if (rx->last_head) { in lan743x_rx_open()
2462 ret = -EIO; in lan743x_rx_open()
2466 napi_enable(&rx->napi); in lan743x_rx_open()
2469 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_open()
2471 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2473 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2475 DMAC_CMD_START_R_(rx->channel_number)); in lan743x_rx_open()
2479 FCT_RX_CTL_RESET_(rx->channel_number)); in lan743x_rx_open()
2481 FCT_RX_CTL_RESET_(rx->channel_number), in lan743x_rx_open()
2483 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number), in lan743x_rx_open()
2490 FCT_RX_CTL_EN_(rx->channel_number)); in lan743x_rx_open()
2494 netif_napi_del(&rx->napi); in lan743x_rx_open()
2495 lan743x_rx_ring_cleanup(rx); in lan743x_rx_open()
2506 lan743x_tx_close(&adapter->tx[0]); in lan743x_netdev_close()
2509 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_close()
2547 ret = lan743x_rx_open(&adapter->rx[index]); in lan743x_netdev_open()
2552 ret = lan743x_tx_open(&adapter->tx[0]); in lan743x_netdev_open()
2560 if (adapter->rx[index].ring_cpu_ptr) in lan743x_netdev_open()
2561 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_open()
2575 netif_warn(adapter, ifup, adapter->netdev, in lan743x_netdev_open()
2585 return lan743x_tx_xmit_frame(&adapter->tx[0], skb); in lan743x_netdev_xmit_frame()
2592 return -EINVAL; in lan743x_netdev_ioctl()
2595 return phy_mii_ioctl(netdev->phydev, ifr, cmd); in lan743x_netdev_ioctl()
2612 netdev->mtu = new_mtu; in lan743x_netdev_change_mtu()
2621 stats->rx_packets = lan743x_csr_read(adapter, STAT_RX_TOTAL_FRAMES); in lan743x_netdev_get_stats64()
2622 stats->tx_packets = lan743x_csr_read(adapter, STAT_TX_TOTAL_FRAMES); in lan743x_netdev_get_stats64()
2623 stats->rx_bytes = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2629 stats->tx_bytes = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2635 stats->rx_errors = lan743x_csr_read(adapter, STAT_RX_FCS_ERRORS) + in lan743x_netdev_get_stats64()
2643 stats->tx_errors = lan743x_csr_read(adapter, STAT_TX_FCS_ERRORS) + in lan743x_netdev_get_stats64()
2647 stats->rx_dropped = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2649 stats->tx_dropped = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2651 stats->multicast = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2655 stats->collisions = lan743x_csr_read(adapter, in lan743x_netdev_get_stats64()
2673 ether_addr_copy(netdev->dev_addr, sock_addr->sa_data); in lan743x_netdev_set_mac_address()
2674 lan743x_mac_set_address(adapter, sock_addr->sa_data); in lan743x_netdev_set_mac_address()
2697 mdiobus_unregister(adapter->mdiobus); in lan743x_mdiobus_cleanup()
2702 unregister_netdev(adapter->netdev); in lan743x_full_cleanup()
2712 struct lan743x_tx *tx; in lan743x_hardware_init() local
2716 adapter->intr.irq = adapter->pdev->irq; in lan743x_hardware_init()
2742 adapter->rx[index].adapter = adapter; in lan743x_hardware_init()
2743 adapter->rx[index].channel_number = index; in lan743x_hardware_init()
2746 tx = &adapter->tx[0]; in lan743x_hardware_init()
2747 tx->adapter = adapter; in lan743x_hardware_init()
2748 tx->channel_number = 0; in lan743x_hardware_init()
2749 spin_lock_init(&tx->ring_lock); in lan743x_hardware_init()
2757 adapter->mdiobus = devm_mdiobus_alloc(&adapter->pdev->dev); in lan743x_mdiobus_init()
2758 if (!(adapter->mdiobus)) { in lan743x_mdiobus_init()
2759 ret = -ENOMEM; in lan743x_mdiobus_init()
2763 adapter->mdiobus->priv = (void *)adapter; in lan743x_mdiobus_init()
2764 adapter->mdiobus->read = lan743x_mdiobus_read; in lan743x_mdiobus_init()
2765 adapter->mdiobus->write = lan743x_mdiobus_write; in lan743x_mdiobus_init()
2766 adapter->mdiobus->name = "lan743x-mdiobus"; in lan743x_mdiobus_init()
2767 snprintf(adapter->mdiobus->id, MII_BUS_ID_SIZE, in lan743x_mdiobus_init()
2768 "pci-%s", pci_name(adapter->pdev)); in lan743x_mdiobus_init()
2770 if ((adapter->csr.id_rev & ID_REV_ID_MASK_) == ID_REV_ID_LAN7430_) in lan743x_mdiobus_init()
2772 adapter->mdiobus->phy_mask = ~(u32)BIT(1); in lan743x_mdiobus_init()
2775 ret = mdiobus_register(adapter->mdiobus); in lan743x_mdiobus_init()
2784 /* lan743x_pcidev_probe - Device Initialization Routine
2799 int ret = -ENODEV; in lan743x_pcidev_probe()
2801 netdev = devm_alloc_etherdev(&pdev->dev, in lan743x_pcidev_probe()
2806 SET_NETDEV_DEV(netdev, &pdev->dev); in lan743x_pcidev_probe()
2809 adapter->netdev = netdev; in lan743x_pcidev_probe()
2810 adapter->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE | in lan743x_pcidev_probe()
2813 netdev->max_mtu = LAN743X_MAX_FRAME_SIZE; in lan743x_pcidev_probe()
2815 of_get_mac_address(pdev->dev.of_node, adapter->mac_address); in lan743x_pcidev_probe()
2833 adapter->netdev->netdev_ops = &lan743x_netdev_ops; in lan743x_pcidev_probe()
2834 adapter->netdev->ethtool_ops = &lan743x_ethtool_ops; in lan743x_pcidev_probe()
2835 adapter->netdev->features = NETIF_F_SG | NETIF_F_TSO | NETIF_F_HW_CSUM; in lan743x_pcidev_probe()
2836 adapter->netdev->hw_features = adapter->netdev->features; in lan743x_pcidev_probe()
2841 ret = register_netdev(adapter->netdev); in lan743x_pcidev_probe()
2861 * lan743x_pcidev_remove - Device Removal Routine
2866 * Hot-Plug event, or because the driver is going to be removed from
2886 * For instance, it is true when system goes to sleep by pm-suspend in lan743x_pcidev_shutdown()
2935 if (adapter->wolopts & WAKE_PHY) { in lan743x_pm_set_wol()
2939 if (adapter->wolopts & WAKE_MAGIC) { in lan743x_pm_set_wol()
2944 if (adapter->wolopts & WAKE_UCAST) { in lan743x_pm_set_wol()
2950 if (adapter->wolopts & WAKE_BCAST) { in lan743x_pm_set_wol()
2956 if (adapter->wolopts & WAKE_MCAST) { in lan743x_pm_set_wol()
2986 if (adapter->wolopts & WAKE_ARP) { in lan743x_pm_set_wol()
3025 if (adapter->wolopts) in lan743x_pm_suspend()
3045 netif_err(adapter, probe, adapter->netdev, in lan743x_pm_resume()
3052 * For instance, it is true when system wakesup after pm-suspend in lan743x_pm_resume()