1 diff -ru usr/src/nv/nv-linux.h usr/src/nv.1175225/nv-linux.h
2 --- usr/src/nv/nv-linux.h 2004-11-03 22:53:00.000000000 +0100
3 +++ usr/src/nv.1175225/nv-linux.h 2004-12-21 21:03:33.000000000 +0100
6 #if defined(CONFIG_SWIOTLB)
8 +#define NV_SWIOTLB_MAX_RETRIES 16
13 sg_ptr->offset = (unsigned long)base & ~PAGE_MASK;
14 sg_ptr->length = num_pages * PAGE_SIZE;
16 +#if defined(NV_SWIOTLB)
17 + i = NV_SWIOTLB_MAX_RETRIES;
19 + if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0)
22 + if (sg_ptr->dma_address & ~PAGE_MASK)
24 + struct scatterlist sg_tmp;
25 + pci_unmap_sg(dev, sg_ptr, num_pages, PCI_DMA_BIDIRECTIONAL);
27 + memset(&sg_tmp, 0, sizeof(struct scatterlist));
28 + sg_tmp.page = sg_ptr->page;
29 + sg_tmp.offset = sg_ptr->offset;
30 + sg_tmp.length = 2048;
32 + if (pci_map_sg(dev, &sg_tmp, 1, PCI_DMA_BIDIRECTIONAL) == 0)
35 + if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0)
37 + pci_unmap_sg(dev, &sg_tmp, num_pages, PCI_DMA_BIDIRECTIONAL);
41 + pci_unmap_sg(dev, &sg_tmp, num_pages, PCI_DMA_BIDIRECTIONAL);
43 + } while (i-- && sg_ptr->dma_address & ~PAGE_MASK);
45 if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0)
51 + if (sg_ptr->dma_address & ~PAGE_MASK)
53 + nv_printf(NV_DBG_ERRORS,
54 + "NVRM: VM: nv_sg_map_buffer: failed to obtain aligned mapping\n");
55 + pci_unmap_sg(dev, sg_ptr, num_pages, PCI_DMA_BIDIRECTIONAL);
59 NV_FIXUP_SWIOTLB_VIRT_ADDR_BUG(sg_ptr->dma_address);