Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2fc42814
Commit
2fc42814
authored
Dec 04, 2009
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'pending-dma-streaming' (early part) into devel
parents
c6baa196
29cb8d0d
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
21 deletions
+56
-21
arch/arm/common/dmabounce.c
arch/arm/common/dmabounce.c
+18
-3
arch/arm/include/asm/dma-mapping.h
arch/arm/include/asm/dma-mapping.h
+14
-12
arch/arm/include/asm/memory.h
arch/arm/include/asm/memory.h
+8
-6
arch/arm/mach-iop13xx/include/mach/memory.h
arch/arm/mach-iop13xx/include/mach/memory.h
+2
-0
arch/arm/mach-ks8695/include/mach/memory.h
arch/arm/mach-ks8695/include/mach/memory.h
+7
-0
arch/arm/plat-omap/include/mach/memory.h
arch/arm/plat-omap/include/mach/memory.h
+7
-0
No files found.
arch/arm/common/dmabounce.c
View file @
2fc42814
...
...
@@ -342,6 +342,22 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
}
EXPORT_SYMBOL
(
dma_map_single
);
/*
* see if a mapped address was really a "safe" buffer and if so, copy
* the data from the safe buffer back to the unsafe buffer and free up
* the safe buffer. (basically return things back to the way they
* should be)
*/
void
dma_unmap_single
(
struct
device
*
dev
,
dma_addr_t
dma_addr
,
size_t
size
,
enum
dma_data_direction
dir
)
{
dev_dbg
(
dev
,
"%s(ptr=%p,size=%d,dir=%x)
\n
"
,
__func__
,
(
void
*
)
dma_addr
,
size
,
dir
);
unmap_single
(
dev
,
dma_addr
,
size
,
dir
);
}
EXPORT_SYMBOL
(
dma_unmap_single
);
dma_addr_t
dma_map_page
(
struct
device
*
dev
,
struct
page
*
page
,
unsigned
long
offset
,
size_t
size
,
enum
dma_data_direction
dir
)
{
...
...
@@ -366,8 +382,7 @@ EXPORT_SYMBOL(dma_map_page);
* the safe buffer. (basically return things back to the way they
* should be)
*/
void
dma_unmap_single
(
struct
device
*
dev
,
dma_addr_t
dma_addr
,
size_t
size
,
void
dma_unmap_page
(
struct
device
*
dev
,
dma_addr_t
dma_addr
,
size_t
size
,
enum
dma_data_direction
dir
)
{
dev_dbg
(
dev
,
"%s(ptr=%p,size=%d,dir=%x)
\n
"
,
...
...
@@ -375,7 +390,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
unmap_single
(
dev
,
dma_addr
,
size
,
dir
);
}
EXPORT_SYMBOL
(
dma_unmap_
singl
e
);
EXPORT_SYMBOL
(
dma_unmap_
pag
e
);
int
dmabounce_sync_for_cpu
(
struct
device
*
dev
,
dma_addr_t
addr
,
unsigned
long
off
,
size_t
sz
,
enum
dma_data_direction
dir
)
...
...
arch/arm/include/asm/dma-mapping.h
View file @
2fc42814
...
...
@@ -15,20 +15,15 @@
* must not be used by drivers.
*/
#ifndef __arch_page_to_dma
#if !defined(CONFIG_HIGHMEM)
static
inline
dma_addr_t
page_to_dma
(
struct
device
*
dev
,
struct
page
*
page
)
{
return
(
dma_addr_t
)
__
virt_to_bus
((
unsigned
long
)
page_address
(
page
));
return
(
dma_addr_t
)
__
pfn_to_bus
(
page_to_pfn
(
page
));
}
#elif defined(__pfn_to_bus)
static
inline
dma_addr_t
page_to_dma
(
struct
device
*
dev
,
struct
page
*
page
)
static
inline
struct
page
*
dma_to_page
(
struct
device
*
dev
,
dma_addr_t
addr
)
{
return
(
dma_addr_t
)
__pfn_to_bus
(
page_to_pfn
(
page
));
return
pfn_to_page
(
__bus_to_pfn
(
addr
));
}
#else
#error "this machine class needs to define __arch_page_to_dma to use HIGHMEM"
#endif
static
inline
void
*
dma_to_virt
(
struct
device
*
dev
,
dma_addr_t
addr
)
{
...
...
@@ -45,6 +40,11 @@ static inline dma_addr_t page_to_dma(struct device *dev, struct page *page)
return
__arch_page_to_dma
(
dev
,
page
);
}
static
inline
struct
page
*
dma_to_page
(
struct
device
*
dev
,
dma_addr_t
addr
)
{
return
__arch_dma_to_page
(
dev
,
addr
);
}
static
inline
void
*
dma_to_virt
(
struct
device
*
dev
,
dma_addr_t
addr
)
{
return
__arch_dma_to_virt
(
dev
,
addr
);
...
...
@@ -257,9 +257,11 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
*/
extern
dma_addr_t
dma_map_single
(
struct
device
*
,
void
*
,
size_t
,
enum
dma_data_direction
);
extern
void
dma_unmap_single
(
struct
device
*
,
dma_addr_t
,
size_t
,
enum
dma_data_direction
);
extern
dma_addr_t
dma_map_page
(
struct
device
*
,
struct
page
*
,
unsigned
long
,
size_t
,
enum
dma_data_direction
);
extern
void
dma_unmap_
singl
e
(
struct
device
*
,
dma_addr_t
,
size_t
,
extern
void
dma_unmap_
pag
e
(
struct
device
*
,
dma_addr_t
,
size_t
,
enum
dma_data_direction
);
/*
...
...
@@ -352,7 +354,6 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
{
/* nothing to do */
}
#endif
/* CONFIG_DMABOUNCE */
/**
* dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
...
...
@@ -371,8 +372,9 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
static
inline
void
dma_unmap_page
(
struct
device
*
dev
,
dma_addr_t
handle
,
size_t
size
,
enum
dma_data_direction
dir
)
{
dma_unmap_single
(
dev
,
handle
,
size
,
dir
);
/* nothing to do */
}
#endif
/* CONFIG_DMABOUNCE */
/**
* dma_sync_single_range_for_cpu
...
...
arch/arm/include/asm/memory.h
View file @
2fc42814
...
...
@@ -136,6 +136,12 @@
#define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT)
#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT)
/*
* Convert a page to/from a physical address
*/
#define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page)))
#define phys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys)))
#ifndef __ASSEMBLY__
/*
...
...
@@ -196,7 +202,8 @@ static inline void *phys_to_virt(unsigned long x)
#ifndef __virt_to_bus
#define __virt_to_bus __virt_to_phys
#define __bus_to_virt __phys_to_virt
#define __pfn_to_bus(x) ((x) << PAGE_SHIFT)
#define __pfn_to_bus(x) __pfn_to_phys(x)
#define __bus_to_pfn(x) __phys_to_pfn(x)
#endif
static
inline
__deprecated
unsigned
long
virt_to_bus
(
void
*
x
)
...
...
@@ -294,11 +301,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
#endif
/* !CONFIG_DISCONTIGMEM */
/*
* For BIO. "will die". Kill me when bio_to_phys() and bvec_to_phys() die.
*/
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
/*
* Optional coherency support. Currently used only by selected
* Intel XSC3-based systems.
...
...
arch/arm/mach-iop13xx/include/mach/memory.h
View file @
2fc42814
...
...
@@ -64,6 +64,8 @@ static inline unsigned long __lbus_to_virt(dma_addr_t x)
(dma_addr_t)page_to_phys(page); \
})
#define __arch_dma_to_page(dev, addr) phys_to_page(addr)
#endif
/* CONFIG_ARCH_IOP13XX */
#endif
/* !ASSEMBLY */
...
...
arch/arm/mach-ks8695/include/mach/memory.h
View file @
2fc42814
...
...
@@ -41,6 +41,13 @@ extern struct bus_type platform_bus_type;
__dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \
__dma; })
#define __arch_dma_to_page(dev, x) \
({ dma_addr_t __dma = x; \
if (!is_lbus_device(dev)) \
__dma += PHYS_OFFSET - KS8695_PCIMEM_PA; \
phys_to_page(__dma); \
})
#endif
#endif
...
...
arch/arm/plat-omap/include/mach/memory.h
View file @
2fc42814
...
...
@@ -68,6 +68,13 @@
__dma = __dma - PHYS_OFFSET + OMAP1510_LB_OFFSET; \
__dma; })
#define __arch_dma_to_page(dev, addr) \
({ dma_addr_t __dma = addr; \
if (is_lbus_device(dev)) \
__dma += PHYS_OFFSET - OMAP1510_LB_OFFSET; \
phys_to_page(__dma); \
})
#define __arch_dma_to_virt(dev, addr) ({ (void *) (is_lbus_device(dev) ? \
lbus_to_virt(addr) : \
__phys_to_virt(addr)); })
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment