| .. | .. |
|---|
| 548 | 548 | static int hamachi_open(struct net_device *dev); |
|---|
| 549 | 549 | static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); |
|---|
| 550 | 550 | static void hamachi_timer(struct timer_list *t); |
|---|
| 551 | | -static void hamachi_tx_timeout(struct net_device *dev); |
|---|
| 551 | +static void hamachi_tx_timeout(struct net_device *dev, unsigned int txqueue); |
|---|
| 552 | 552 | static void hamachi_init_ring(struct net_device *dev); |
|---|
| 553 | 553 | static netdev_tx_t hamachi_start_xmit(struct sk_buff *skb, |
|---|
| 554 | 554 | struct net_device *dev); |
|---|
| .. | .. |
|---|
| 644 | 644 | hmp->mii_if.phy_id_mask = 0x1f; |
|---|
| 645 | 645 | hmp->mii_if.reg_num_mask = 0x1f; |
|---|
| 646 | 646 | |
|---|
| 647 | | - ring_space = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma); |
|---|
| 647 | + ring_space = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE, &ring_dma, |
|---|
| 648 | + GFP_KERNEL); |
|---|
| 648 | 649 | if (!ring_space) |
|---|
| 649 | 650 | goto err_out_cleardev; |
|---|
| 650 | 651 | hmp->tx_ring = ring_space; |
|---|
| 651 | 652 | hmp->tx_ring_dma = ring_dma; |
|---|
| 652 | 653 | |
|---|
| 653 | | - ring_space = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma); |
|---|
| 654 | + ring_space = dma_alloc_coherent(&pdev->dev, RX_TOTAL_SIZE, &ring_dma, |
|---|
| 655 | + GFP_KERNEL); |
|---|
| 654 | 656 | if (!ring_space) |
|---|
| 655 | 657 | goto err_out_unmap_tx; |
|---|
| 656 | 658 | hmp->rx_ring = ring_space; |
|---|
| .. | .. |
|---|
| 773 | 775 | return 0; |
|---|
| 774 | 776 | |
|---|
| 775 | 777 | err_out_unmap_rx: |
|---|
| 776 | | - pci_free_consistent(pdev, RX_TOTAL_SIZE, hmp->rx_ring, |
|---|
| 777 | | - hmp->rx_ring_dma); |
|---|
| 778 | + dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, hmp->rx_ring, |
|---|
| 779 | + hmp->rx_ring_dma); |
|---|
| 778 | 780 | err_out_unmap_tx: |
|---|
| 779 | | - pci_free_consistent(pdev, TX_TOTAL_SIZE, hmp->tx_ring, |
|---|
| 780 | | - hmp->tx_ring_dma); |
|---|
| 781 | + dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, hmp->tx_ring, |
|---|
| 782 | + hmp->tx_ring_dma); |
|---|
| 781 | 783 | err_out_cleardev: |
|---|
| 782 | 784 | free_netdev (dev); |
|---|
| 783 | 785 | err_out_iounmap: |
|---|
| .. | .. |
|---|
| 1001 | 1003 | /* Free the original skb. */ |
|---|
| 1002 | 1004 | skb = hmp->tx_skbuff[entry]; |
|---|
| 1003 | 1005 | if (skb) { |
|---|
| 1004 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1005 | | - leXX_to_cpu(hmp->tx_ring[entry].addr), |
|---|
| 1006 | | - skb->len, PCI_DMA_TODEVICE); |
|---|
| 1006 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1007 | + leXX_to_cpu(hmp->tx_ring[entry].addr), |
|---|
| 1008 | + skb->len, DMA_TO_DEVICE); |
|---|
| 1007 | 1009 | dev_kfree_skb(skb); |
|---|
| 1008 | 1010 | hmp->tx_skbuff[entry] = NULL; |
|---|
| 1009 | 1011 | } |
|---|
| .. | .. |
|---|
| 1042 | 1044 | add_timer(&hmp->timer); |
|---|
| 1043 | 1045 | } |
|---|
| 1044 | 1046 | |
|---|
| 1045 | | -static void hamachi_tx_timeout(struct net_device *dev) |
|---|
| 1047 | +static void hamachi_tx_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 1046 | 1048 | { |
|---|
| 1047 | 1049 | int i; |
|---|
| 1048 | 1050 | struct hamachi_private *hmp = netdev_priv(dev); |
|---|
| .. | .. |
|---|
| 1093 | 1095 | hmp->tx_ring[i].status_n_length &= cpu_to_le32(0x0000ffff); |
|---|
| 1094 | 1096 | skb = hmp->tx_skbuff[i]; |
|---|
| 1095 | 1097 | if (skb){ |
|---|
| 1096 | | - pci_unmap_single(hmp->pci_dev, leXX_to_cpu(hmp->tx_ring[i].addr), |
|---|
| 1097 | | - skb->len, PCI_DMA_TODEVICE); |
|---|
| 1098 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1099 | + leXX_to_cpu(hmp->tx_ring[i].addr), |
|---|
| 1100 | + skb->len, DMA_TO_DEVICE); |
|---|
| 1098 | 1101 | dev_kfree_skb(skb); |
|---|
| 1099 | 1102 | hmp->tx_skbuff[i] = NULL; |
|---|
| 1100 | 1103 | } |
|---|
| .. | .. |
|---|
| 1115 | 1118 | struct sk_buff *skb = hmp->rx_skbuff[i]; |
|---|
| 1116 | 1119 | |
|---|
| 1117 | 1120 | if (skb){ |
|---|
| 1118 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1119 | | - leXX_to_cpu(hmp->rx_ring[i].addr), |
|---|
| 1120 | | - hmp->rx_buf_sz, PCI_DMA_FROMDEVICE); |
|---|
| 1121 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1122 | + leXX_to_cpu(hmp->rx_ring[i].addr), |
|---|
| 1123 | + hmp->rx_buf_sz, DMA_FROM_DEVICE); |
|---|
| 1121 | 1124 | dev_kfree_skb(skb); |
|---|
| 1122 | 1125 | hmp->rx_skbuff[i] = NULL; |
|---|
| 1123 | 1126 | } |
|---|
| .. | .. |
|---|
| 1131 | 1134 | if (skb == NULL) |
|---|
| 1132 | 1135 | break; |
|---|
| 1133 | 1136 | |
|---|
| 1134 | | - hmp->rx_ring[i].addr = cpu_to_leXX(pci_map_single(hmp->pci_dev, |
|---|
| 1135 | | - skb->data, hmp->rx_buf_sz, PCI_DMA_FROMDEVICE)); |
|---|
| 1137 | + hmp->rx_ring[i].addr = cpu_to_leXX(dma_map_single(&hmp->pci_dev->dev, |
|---|
| 1138 | + skb->data, |
|---|
| 1139 | + hmp->rx_buf_sz, |
|---|
| 1140 | + DMA_FROM_DEVICE)); |
|---|
| 1136 | 1141 | hmp->rx_ring[i].status_n_length = cpu_to_le32(DescOwn | |
|---|
| 1137 | 1142 | DescEndPacket | DescIntr | (hmp->rx_buf_sz - 2)); |
|---|
| 1138 | 1143 | } |
|---|
| .. | .. |
|---|
| 1183 | 1188 | if (skb == NULL) |
|---|
| 1184 | 1189 | break; |
|---|
| 1185 | 1190 | skb_reserve(skb, 2); /* 16 byte align the IP header. */ |
|---|
| 1186 | | - hmp->rx_ring[i].addr = cpu_to_leXX(pci_map_single(hmp->pci_dev, |
|---|
| 1187 | | - skb->data, hmp->rx_buf_sz, PCI_DMA_FROMDEVICE)); |
|---|
| 1191 | + hmp->rx_ring[i].addr = cpu_to_leXX(dma_map_single(&hmp->pci_dev->dev, |
|---|
| 1192 | + skb->data, |
|---|
| 1193 | + hmp->rx_buf_sz, |
|---|
| 1194 | + DMA_FROM_DEVICE)); |
|---|
| 1188 | 1195 | /* -2 because it doesn't REALLY have that first 2 bytes -KDU */ |
|---|
| 1189 | 1196 | hmp->rx_ring[i].status_n_length = cpu_to_le32(DescOwn | |
|---|
| 1190 | 1197 | DescEndPacket | DescIntr | (hmp->rx_buf_sz -2)); |
|---|
| .. | .. |
|---|
| 1233 | 1240 | |
|---|
| 1234 | 1241 | hmp->tx_skbuff[entry] = skb; |
|---|
| 1235 | 1242 | |
|---|
| 1236 | | - hmp->tx_ring[entry].addr = cpu_to_leXX(pci_map_single(hmp->pci_dev, |
|---|
| 1237 | | - skb->data, skb->len, PCI_DMA_TODEVICE)); |
|---|
| 1243 | + hmp->tx_ring[entry].addr = cpu_to_leXX(dma_map_single(&hmp->pci_dev->dev, |
|---|
| 1244 | + skb->data, |
|---|
| 1245 | + skb->len, |
|---|
| 1246 | + DMA_TO_DEVICE)); |
|---|
| 1238 | 1247 | |
|---|
| 1239 | 1248 | /* Hmmmm, could probably put a DescIntr on these, but the way |
|---|
| 1240 | 1249 | the driver is currently coded makes Tx interrupts unnecessary |
|---|
| .. | .. |
|---|
| 1333 | 1342 | skb = hmp->tx_skbuff[entry]; |
|---|
| 1334 | 1343 | /* Free the original skb. */ |
|---|
| 1335 | 1344 | if (skb){ |
|---|
| 1336 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1337 | | - leXX_to_cpu(hmp->tx_ring[entry].addr), |
|---|
| 1338 | | - skb->len, |
|---|
| 1339 | | - PCI_DMA_TODEVICE); |
|---|
| 1340 | | - dev_kfree_skb_irq(skb); |
|---|
| 1345 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1346 | + leXX_to_cpu(hmp->tx_ring[entry].addr), |
|---|
| 1347 | + skb->len, |
|---|
| 1348 | + DMA_TO_DEVICE); |
|---|
| 1349 | + dev_consume_skb_irq(skb); |
|---|
| 1341 | 1350 | hmp->tx_skbuff[entry] = NULL; |
|---|
| 1342 | 1351 | } |
|---|
| 1343 | 1352 | hmp->tx_ring[entry].status_n_length = 0; |
|---|
| .. | .. |
|---|
| 1413 | 1422 | |
|---|
| 1414 | 1423 | if (desc_status & DescOwn) |
|---|
| 1415 | 1424 | break; |
|---|
| 1416 | | - pci_dma_sync_single_for_cpu(hmp->pci_dev, |
|---|
| 1417 | | - leXX_to_cpu(desc->addr), |
|---|
| 1418 | | - hmp->rx_buf_sz, |
|---|
| 1419 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1425 | + dma_sync_single_for_cpu(&hmp->pci_dev->dev, |
|---|
| 1426 | + leXX_to_cpu(desc->addr), |
|---|
| 1427 | + hmp->rx_buf_sz, DMA_FROM_DEVICE); |
|---|
| 1420 | 1428 | buf_addr = (u8 *) hmp->rx_skbuff[entry]->data; |
|---|
| 1421 | 1429 | frame_status = get_unaligned_le32(&(buf_addr[data_size - 12])); |
|---|
| 1422 | 1430 | if (hamachi_debug > 4) |
|---|
| .. | .. |
|---|
| 1483 | 1491 | "not good with RX_CHECKSUM\n", dev->name); |
|---|
| 1484 | 1492 | #endif |
|---|
| 1485 | 1493 | skb_reserve(skb, 2); /* 16 byte align the IP header */ |
|---|
| 1486 | | - pci_dma_sync_single_for_cpu(hmp->pci_dev, |
|---|
| 1487 | | - leXX_to_cpu(hmp->rx_ring[entry].addr), |
|---|
| 1488 | | - hmp->rx_buf_sz, |
|---|
| 1489 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1494 | + dma_sync_single_for_cpu(&hmp->pci_dev->dev, |
|---|
| 1495 | + leXX_to_cpu(hmp->rx_ring[entry].addr), |
|---|
| 1496 | + hmp->rx_buf_sz, |
|---|
| 1497 | + DMA_FROM_DEVICE); |
|---|
| 1490 | 1498 | /* Call copy + cksum if available. */ |
|---|
| 1491 | 1499 | #if 1 || USE_IP_COPYSUM |
|---|
| 1492 | 1500 | skb_copy_to_linear_data(skb, |
|---|
| .. | .. |
|---|
| 1496 | 1504 | skb_put_data(skb, hmp->rx_ring_dma |
|---|
| 1497 | 1505 | + entry*sizeof(*desc), pkt_len); |
|---|
| 1498 | 1506 | #endif |
|---|
| 1499 | | - pci_dma_sync_single_for_device(hmp->pci_dev, |
|---|
| 1500 | | - leXX_to_cpu(hmp->rx_ring[entry].addr), |
|---|
| 1501 | | - hmp->rx_buf_sz, |
|---|
| 1502 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1507 | + dma_sync_single_for_device(&hmp->pci_dev->dev, |
|---|
| 1508 | + leXX_to_cpu(hmp->rx_ring[entry].addr), |
|---|
| 1509 | + hmp->rx_buf_sz, |
|---|
| 1510 | + DMA_FROM_DEVICE); |
|---|
| 1503 | 1511 | } else { |
|---|
| 1504 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1512 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1505 | 1513 | leXX_to_cpu(hmp->rx_ring[entry].addr), |
|---|
| 1506 | | - hmp->rx_buf_sz, PCI_DMA_FROMDEVICE); |
|---|
| 1514 | + hmp->rx_buf_sz, |
|---|
| 1515 | + DMA_FROM_DEVICE); |
|---|
| 1507 | 1516 | skb_put(skb = hmp->rx_skbuff[entry], pkt_len); |
|---|
| 1508 | 1517 | hmp->rx_skbuff[entry] = NULL; |
|---|
| 1509 | 1518 | } |
|---|
| .. | .. |
|---|
| 1586 | 1595 | if (skb == NULL) |
|---|
| 1587 | 1596 | break; /* Better luck next round. */ |
|---|
| 1588 | 1597 | skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ |
|---|
| 1589 | | - desc->addr = cpu_to_leXX(pci_map_single(hmp->pci_dev, |
|---|
| 1590 | | - skb->data, hmp->rx_buf_sz, PCI_DMA_FROMDEVICE)); |
|---|
| 1598 | + desc->addr = cpu_to_leXX(dma_map_single(&hmp->pci_dev->dev, |
|---|
| 1599 | + skb->data, |
|---|
| 1600 | + hmp->rx_buf_sz, |
|---|
| 1601 | + DMA_FROM_DEVICE)); |
|---|
| 1591 | 1602 | } |
|---|
| 1592 | 1603 | desc->status_n_length = cpu_to_le32(hmp->rx_buf_sz); |
|---|
| 1593 | 1604 | if (entry >= RX_RING_SIZE-1) |
|---|
| .. | .. |
|---|
| 1704 | 1715 | skb = hmp->rx_skbuff[i]; |
|---|
| 1705 | 1716 | hmp->rx_ring[i].status_n_length = 0; |
|---|
| 1706 | 1717 | if (skb) { |
|---|
| 1707 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1708 | | - leXX_to_cpu(hmp->rx_ring[i].addr), |
|---|
| 1709 | | - hmp->rx_buf_sz, PCI_DMA_FROMDEVICE); |
|---|
| 1718 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1719 | + leXX_to_cpu(hmp->rx_ring[i].addr), |
|---|
| 1720 | + hmp->rx_buf_sz, DMA_FROM_DEVICE); |
|---|
| 1710 | 1721 | dev_kfree_skb(skb); |
|---|
| 1711 | 1722 | hmp->rx_skbuff[i] = NULL; |
|---|
| 1712 | 1723 | } |
|---|
| .. | .. |
|---|
| 1715 | 1726 | for (i = 0; i < TX_RING_SIZE; i++) { |
|---|
| 1716 | 1727 | skb = hmp->tx_skbuff[i]; |
|---|
| 1717 | 1728 | if (skb) { |
|---|
| 1718 | | - pci_unmap_single(hmp->pci_dev, |
|---|
| 1719 | | - leXX_to_cpu(hmp->tx_ring[i].addr), |
|---|
| 1720 | | - skb->len, PCI_DMA_TODEVICE); |
|---|
| 1729 | + dma_unmap_single(&hmp->pci_dev->dev, |
|---|
| 1730 | + leXX_to_cpu(hmp->tx_ring[i].addr), |
|---|
| 1731 | + skb->len, DMA_TO_DEVICE); |
|---|
| 1721 | 1732 | dev_kfree_skb(skb); |
|---|
| 1722 | 1733 | hmp->tx_skbuff[i] = NULL; |
|---|
| 1723 | 1734 | } |
|---|
| .. | .. |
|---|
| 1899 | 1910 | if (dev) { |
|---|
| 1900 | 1911 | struct hamachi_private *hmp = netdev_priv(dev); |
|---|
| 1901 | 1912 | |
|---|
| 1902 | | - pci_free_consistent(pdev, RX_TOTAL_SIZE, hmp->rx_ring, |
|---|
| 1903 | | - hmp->rx_ring_dma); |
|---|
| 1904 | | - pci_free_consistent(pdev, TX_TOTAL_SIZE, hmp->tx_ring, |
|---|
| 1905 | | - hmp->tx_ring_dma); |
|---|
| 1913 | + dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, hmp->rx_ring, |
|---|
| 1914 | + hmp->rx_ring_dma); |
|---|
| 1915 | + dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, hmp->tx_ring, |
|---|
| 1916 | + hmp->tx_ring_dma); |
|---|
| 1906 | 1917 | unregister_netdev(dev); |
|---|
| 1907 | 1918 | iounmap(hmp->base); |
|---|
| 1908 | 1919 | free_netdev(dev); |
|---|