]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-powerpc/dma-mapping.h
[TCP]: tcp_simple_retransmit can cause S+L
[linux-2.6-omap-h63xx.git] / include / asm-powerpc / dma-mapping.h
index d05891608f744ddd8c9c8e751d7434c35cc8a123..bbefb69bfb671e03e866ef54af3c1948c41d9940 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/cache.h>
 /* need struct page definitions */
 #include <linux/mm.h>
-#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
 #include <asm/io.h>
 
 #define DMA_ERROR_CODE         (~(dma_addr_t)0x0)
@@ -76,6 +76,11 @@ static inline struct dma_mapping_ops *get_dma_ops(struct device *dev)
        return dev->archdata.dma_ops;
 }
 
+static inline void set_dma_ops(struct device *dev, struct dma_mapping_ops *ops)
+{
+       dev->archdata.dma_ops = ops;
+}
+
 static inline int dma_supported(struct device *dev, u64 mask)
 {
        struct dma_mapping_ops *dma_ops = get_dma_ops(dev);
@@ -87,6 +92,9 @@ static inline int dma_supported(struct device *dev, u64 mask)
        return dma_ops->dma_supported(dev, mask);
 }
 
+/* We have our own implementation of pci_set_dma_mask() */
+#define HAVE_ARCH_PCI_SET_DMA_MASK
+
 static inline int dma_set_mask(struct device *dev, u64 dma_mask)
 {
        struct dma_mapping_ops *dma_ops = get_dma_ops(dev);
@@ -186,8 +194,6 @@ static inline void dma_unmap_sg(struct device *dev, struct scatterlist *sg,
 extern struct dma_mapping_ops dma_iommu_ops;
 extern struct dma_mapping_ops dma_direct_ops;
 
-extern unsigned long dma_direct_offset;
-
 #else /* CONFIG_PPC64 */
 
 #define dma_supported(dev, mask)       (1)
@@ -276,17 +282,18 @@ static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address,
 }
 
 static inline int
-dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
+dma_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
           enum dma_data_direction direction)
 {
+       struct scatterlist *sg;
        int i;
 
        BUG_ON(direction == DMA_NONE);
 
-       for (i = 0; i < nents; i++, sg++) {
-               BUG_ON(!sg->page);
-               __dma_sync_page(sg->page, sg->offset, sg->length, direction);
-               sg->dma_address = page_to_bus(sg->page) + sg->offset;
+       for_each_sg(sgl, sg, nents, i) {
+               BUG_ON(!sg_page(sg));
+               __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
+               sg->dma_address = page_to_bus(sg_page(sg)) + sg->offset;
        }
 
        return nents;
@@ -318,27 +325,29 @@ static inline void dma_sync_single_for_device(struct device *dev,
 }
 
 static inline void dma_sync_sg_for_cpu(struct device *dev,
-               struct scatterlist *sg, int nents,
+               struct scatterlist *sgl, int nents,
                enum dma_data_direction direction)
 {
+       struct scatterlist *sg;
        int i;
 
        BUG_ON(direction == DMA_NONE);
 
-       for (i = 0; i < nents; i++, sg++)
-               __dma_sync_page(sg->page, sg->offset, sg->length, direction);
+       for_each_sg(sgl, sg, nents, i)
+               __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
 }
 
 static inline void dma_sync_sg_for_device(struct device *dev,
-               struct scatterlist *sg, int nents,
+               struct scatterlist *sgl, int nents,
                enum dma_data_direction direction)
 {
+       struct scatterlist *sg;
        int i;
 
        BUG_ON(direction == DMA_NONE);
 
-       for (i = 0; i < nents; i++, sg++)
-               __dma_sync_page(sg->page, sg->offset, sg->length, direction);
+       for_each_sg(sgl, sg, nents, i)
+               __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
 }
 
 static inline int dma_mapping_error(dma_addr_t dma_addr)