diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-07-03 11:13:58 -0400 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-07-03 18:27:49 -0400 |
| commit | 8021a4a048a85906302bd0236f3d125473be65b1 (patch) | |
| tree | 3887c7e02e1358413f3c732fb30f2139b8df9750 | |
| parent | 178783622ce0fd629fad21b33b8f8f56b64c5e45 (diff) | |
ARM: dma-mapping: define dma_(un)?map_single in terms of dma_(un)?map_page
Use dma_map_page()/dma_unmap_page() internals to handle dma_map_single()
and dma_unmap_single().
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/common/dmabounce.c | 28 | ||||
| -rw-r--r-- | arch/arm/include/asm/dma-mapping.h | 31 |
2 files changed, 9 insertions, 50 deletions
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 841df7d21c2f..8a0588b007e4 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
| @@ -328,34 +328,6 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr, | |||
| 328 | * substitute the safe buffer for the unsafe one. | 328 | * substitute the safe buffer for the unsafe one. |
| 329 | * (basically move the buffer from an unsafe area to a safe one) | 329 | * (basically move the buffer from an unsafe area to a safe one) |
| 330 | */ | 330 | */ |
| 331 | dma_addr_t __dma_map_single(struct device *dev, void *ptr, size_t size, | ||
| 332 | enum dma_data_direction dir) | ||
| 333 | { | ||
| 334 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | ||
| 335 | __func__, ptr, size, dir); | ||
| 336 | |||
| 337 | BUG_ON(!valid_dma_direction(dir)); | ||
| 338 | |||
| 339 | return map_single(dev, ptr, size, dir); | ||
| 340 | } | ||
| 341 | EXPORT_SYMBOL(__dma_map_single); | ||
| 342 | |||
| 343 | /* | ||
| 344 | * see if a mapped address was really a "safe" buffer and if so, copy | ||
| 345 | * the data from the safe buffer back to the unsafe buffer and free up | ||
| 346 | * the safe buffer. (basically return things back to the way they | ||
| 347 | * should be) | ||
| 348 | */ | ||
| 349 | void __dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
| 350 | enum dma_data_direction dir) | ||
| 351 | { | ||
| 352 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | ||
| 353 | __func__, (void *) dma_addr, size, dir); | ||
| 354 | |||
| 355 | unmap_single(dev, dma_addr, size, dir); | ||
| 356 | } | ||
| 357 | EXPORT_SYMBOL(__dma_unmap_single); | ||
| 358 | |||
| 359 | dma_addr_t __dma_map_page(struct device *dev, struct page *page, | 331 | dma_addr_t __dma_map_page(struct device *dev, struct page *page, |
| 360 | unsigned long offset, size_t size, enum dma_data_direction dir) | 332 | unsigned long offset, size_t size, enum dma_data_direction dir) |
| 361 | { | 333 | { |
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 4fff837363ed..d2903d0c3085 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h | |||
| @@ -298,10 +298,6 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); | |||
| 298 | /* | 298 | /* |
| 299 | * The DMA API, implemented by dmabounce.c. See below for descriptions. | 299 | * The DMA API, implemented by dmabounce.c. See below for descriptions. |
| 300 | */ | 300 | */ |
| 301 | extern dma_addr_t __dma_map_single(struct device *, void *, size_t, | ||
| 302 | enum dma_data_direction); | ||
| 303 | extern void __dma_unmap_single(struct device *, dma_addr_t, size_t, | ||
| 304 | enum dma_data_direction); | ||
| 305 | extern dma_addr_t __dma_map_page(struct device *, struct page *, | 301 | extern dma_addr_t __dma_map_page(struct device *, struct page *, |
| 306 | unsigned long, size_t, enum dma_data_direction); | 302 | unsigned long, size_t, enum dma_data_direction); |
| 307 | extern void __dma_unmap_page(struct device *, dma_addr_t, size_t, | 303 | extern void __dma_unmap_page(struct device *, dma_addr_t, size_t, |
| @@ -328,13 +324,6 @@ static inline int dmabounce_sync_for_device(struct device *d, dma_addr_t addr, | |||
| 328 | } | 324 | } |
| 329 | 325 | ||
| 330 | 326 | ||
| 331 | static inline dma_addr_t __dma_map_single(struct device *dev, void *cpu_addr, | ||
| 332 | size_t size, enum dma_data_direction dir) | ||
| 333 | { | ||
| 334 | __dma_single_cpu_to_dev(cpu_addr, size, dir); | ||
| 335 | return virt_to_dma(dev, cpu_addr); | ||
| 336 | } | ||
| 337 | |||
| 338 | static inline dma_addr_t __dma_map_page(struct device *dev, struct page *page, | 327 | static inline dma_addr_t __dma_map_page(struct device *dev, struct page *page, |
| 339 | unsigned long offset, size_t size, enum dma_data_direction dir) | 328 | unsigned long offset, size_t size, enum dma_data_direction dir) |
| 340 | { | 329 | { |
| @@ -342,12 +331,6 @@ static inline dma_addr_t __dma_map_page(struct device *dev, struct page *page, | |||
| 342 | return pfn_to_dma(dev, page_to_pfn(page)) + offset; | 331 | return pfn_to_dma(dev, page_to_pfn(page)) + offset; |
| 343 | } | 332 | } |
| 344 | 333 | ||
| 345 | static inline void __dma_unmap_single(struct device *dev, dma_addr_t handle, | ||
| 346 | size_t size, enum dma_data_direction dir) | ||
| 347 | { | ||
| 348 | __dma_single_dev_to_cpu(dma_to_virt(dev, handle), size, dir); | ||
| 349 | } | ||
| 350 | |||
| 351 | static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, | 334 | static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, |
| 352 | size_t size, enum dma_data_direction dir) | 335 | size_t size, enum dma_data_direction dir) |
| 353 | { | 336 | { |
| @@ -373,14 +356,18 @@ static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, | |||
| 373 | static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, | 356 | static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, |
| 374 | size_t size, enum dma_data_direction dir) | 357 | size_t size, enum dma_data_direction dir) |
| 375 | { | 358 | { |
| 359 | unsigned long offset; | ||
| 360 | struct page *page; | ||
| 376 | dma_addr_t addr; | 361 | dma_addr_t addr; |
| 377 | 362 | ||
| 363 | BUG_ON(!virt_addr_valid(cpu_addr)); | ||
| 364 | BUG_ON(!virt_addr_valid(cpu_addr + size - 1)); | ||
| 378 | BUG_ON(!valid_dma_direction(dir)); | 365 | BUG_ON(!valid_dma_direction(dir)); |
| 379 | 366 | ||
| 380 | addr = __dma_map_single(dev, cpu_addr, size, dir); | 367 | page = virt_to_page(cpu_addr); |
| 381 | debug_dma_map_page(dev, virt_to_page(cpu_addr), | 368 | offset = (unsigned long)cpu_addr & ~PAGE_MASK; |
| 382 | (unsigned long)cpu_addr & ~PAGE_MASK, size, | 369 | addr = __dma_map_page(dev, page, offset, size, dir); |
| 383 | dir, addr, true); | 370 | debug_dma_map_page(dev, page, offset, size, dir, addr, true); |
| 384 | 371 | ||
| 385 | return addr; | 372 | return addr; |
| 386 | } | 373 | } |
| @@ -430,7 +417,7 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, | |||
| 430 | size_t size, enum dma_data_direction dir) | 417 | size_t size, enum dma_data_direction dir) |
| 431 | { | 418 | { |
| 432 | debug_dma_unmap_page(dev, handle, size, dir, true); | 419 | debug_dma_unmap_page(dev, handle, size, dir, true); |
| 433 | __dma_unmap_single(dev, handle, size, dir); | 420 | __dma_unmap_page(dev, handle, size, dir); |
| 434 | } | 421 | } |
| 435 | 422 | ||
| 436 | /** | 423 | /** |
