[Bluetooth] Support create connection cancel command
[pandora-kernel.git] / lib / swiotlb.c
index 57216f3..1062578 100644 (file)
@@ -142,8 +142,7 @@ swiotlb_init_with_default_size (size_t default_size)
        /*
         * Get IO TLB memory from the low pages
         */
-       io_tlb_start = alloc_bootmem_low_pages_limit(io_tlb_nslabs *
-                                            (1 << IO_TLB_SHIFT), 0x100000000);
+       io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs * (1 << IO_TLB_SHIFT));
        if (!io_tlb_start)
                panic("Cannot allocate SWIOTLB buffer");
        io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT);
@@ -297,8 +296,7 @@ map_single(struct device *hwdev, char *buffer, size_t size, int dir)
        else
                stride = 1;
 
-       if (!nslots)
-               BUG();
+       BUG_ON(!nslots);
 
        /*
         * Find suitable number of IO TLB entries size that will fit this
@@ -417,14 +415,14 @@ sync_single(struct device *hwdev, char *dma_addr, size_t size,
        case SYNC_FOR_CPU:
                if (likely(dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL))
                        memcpy(buffer, dma_addr, size);
-               else if (dir != DMA_TO_DEVICE)
-                       BUG();
+               else
+                       BUG_ON(dir != DMA_TO_DEVICE);
                break;
        case SYNC_FOR_DEVICE:
                if (likely(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
                        memcpy(dma_addr, buffer, size);
-               else if (dir != DMA_FROM_DEVICE)
-                       BUG();
+               else
+                       BUG_ON(dir != DMA_FROM_DEVICE);
                break;
        default:
                BUG();
@@ -464,7 +462,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
                 */
                dma_addr_t handle;
                handle = swiotlb_map_single(NULL, NULL, size, DMA_FROM_DEVICE);
-               if (dma_mapping_error(handle))
+               if (swiotlb_dma_mapping_error(handle))
                        return NULL;
 
                ret = phys_to_virt(handle);
@@ -530,8 +528,7 @@ swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir)
        unsigned long dev_addr = virt_to_phys(ptr);
        void *map;
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
        /*
         * If the pointer passed in happens to be in the device's DMA window,
         * we can safely return the device addr and not worry about bounce
@@ -593,8 +590,7 @@ swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, size_t size,
 {
        char *dma_addr = phys_to_virt(dev_addr);
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
        if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
                unmap_single(hwdev, dma_addr, size, dir);
        else if (dir == DMA_FROM_DEVICE)
@@ -617,8 +613,7 @@ swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
 {
        char *dma_addr = phys_to_virt(dev_addr);
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
        if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
                sync_single(hwdev, dma_addr, size, dir, target);
        else if (dir == DMA_FROM_DEVICE)
@@ -649,8 +644,7 @@ swiotlb_sync_single_range(struct device *hwdev, dma_addr_t dev_addr,
 {
        char *dma_addr = phys_to_virt(dev_addr) + offset;
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
        if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
                sync_single(hwdev, dma_addr, size, dir, target);
        else if (dir == DMA_FROM_DEVICE)
@@ -697,15 +691,15 @@ swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nelems,
        unsigned long dev_addr;
        int i;
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
 
        for (i = 0; i < nelems; i++, sg++) {
                addr = SG_ENT_VIRT_ADDRESS(sg);
                dev_addr = virt_to_phys(addr);
                if (swiotlb_force || address_needs_mapping(hwdev, dev_addr)) {
-                       sg->dma_address = (dma_addr_t) virt_to_phys(map_single(hwdev, addr, sg->length, dir));
-                       if (!sg->dma_address) {
+                       void *map = map_single(hwdev, addr, sg->length, dir);
+                       sg->dma_address = virt_to_bus(map);
+                       if (!map) {
                                /* Don't panic here, we expect map_sg users
                                   to do proper error handling. */
                                swiotlb_full(hwdev, sg->length, dir, 0);
@@ -730,8 +724,7 @@ swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nelems,
 {
        int i;
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
 
        for (i = 0; i < nelems; i++, sg++)
                if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg))
@@ -753,8 +746,7 @@ swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sg,
 {
        int i;
 
-       if (dir == DMA_NONE)
-               BUG();
+       BUG_ON(dir == DMA_NONE);
 
        for (i = 0; i < nelems; i++, sg++)
                if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg))