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
Kirill Smelkov
linux
Commits
d353084e
Commit
d353084e
authored
Jan 13, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-voyager.bkbits.net/dma-generic-mapping-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
2f4c2749
0a88e772
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
35 additions
and
27 deletions
+35
-27
Documentation/DMA-API.txt
Documentation/DMA-API.txt
+8
-2
arch/i386/kernel/pci-dma.c
arch/i386/kernel/pci-dma.c
+3
-2
arch/parisc/kernel/pci-dma.c
arch/parisc/kernel/pci-dma.c
+5
-5
drivers/parisc/ccio-dma.c
drivers/parisc/ccio-dma.c
+2
-2
drivers/scsi/53c700.c
drivers/scsi/53c700.c
+1
-1
drivers/scsi/sym53c8xx_comm.h
drivers/scsi/sym53c8xx_comm.h
+1
-1
include/asm-arm/dma-mapping.h
include/asm-arm/dma-mapping.h
+1
-3
include/asm-generic/dma-mapping.h
include/asm-generic/dma-mapping.h
+3
-2
include/asm-generic/pci-dma-compat.h
include/asm-generic/pci-dma-compat.h
+1
-1
include/asm-i386/dma-mapping.h
include/asm-i386/dma-mapping.h
+2
-2
include/asm-parisc/dma-mapping.h
include/asm-parisc/dma-mapping.h
+8
-6
No files found.
Documentation/DMA-API.txt
View file @
d353084e
...
@@ -22,7 +22,7 @@ To get the dma_ API, you must #include <linux/dma-mapping.h>
...
@@ -22,7 +22,7 @@ To get the dma_ API, you must #include <linux/dma-mapping.h>
void *
void *
dma_alloc_coherent(struct device *dev, size_t size,
dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle)
dma_addr_t *dma_handle
, int flag
)
void *
void *
pci_alloc_consistent(struct pci_dev *dev, size_t size,
pci_alloc_consistent(struct pci_dev *dev, size_t size,
dma_addr_t *dma_handle)
dma_addr_t *dma_handle)
...
@@ -43,6 +43,12 @@ Note: consistent memory can be expensive on some platforms, and the
...
@@ -43,6 +43,12 @@ Note: consistent memory can be expensive on some platforms, and the
minimum allocation length may be as big as a page, so you should
minimum allocation length may be as big as a page, so you should
consolidate your requests for consistent memory as much as possible.
consolidate your requests for consistent memory as much as possible.
The flag parameter (dma_alloc_coherent only) allows the caller to
specify the GFP_ flags (see kmalloc) for the allocation (the
implementation may chose to ignore flags that affect the location of
the returned memory, like GFP_DMA). For pci_alloc_consistent, you
must assume GFP_ATOMIC behaviour.
void
void
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr
dma_addr_t dma_handle)
dma_addr_t dma_handle)
...
@@ -261,7 +267,7 @@ API at all.
...
@@ -261,7 +267,7 @@ API at all.
void *
void *
dma_alloc_noncoherent(struct device *dev, size_t size,
dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle)
dma_addr_t *dma_handle
, int flag
)
Identical to dma_alloc_coherent() except that the platform will
Identical to dma_alloc_coherent() except that the platform will
choose to return either consistent or non-consistent memory as it sees
choose to return either consistent or non-consistent memory as it sees
...
...
arch/i386/kernel/pci-dma.c
View file @
d353084e
...
@@ -14,10 +14,11 @@
...
@@ -14,10 +14,11 @@
#include <asm/io.h>
#include <asm/io.h>
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_addr_t
*
dma_handle
,
int
gfp
)
{
{
void
*
ret
;
void
*
ret
;
int
gfp
=
GFP_ATOMIC
;
/* ignore region specifiers */
gfp
&=
~
(
__GFP_DMA
|
__GFP_HIGHMEM
);
if
(
dev
==
NULL
||
(
*
dev
->
dma_mask
<
0xffffffff
))
if
(
dev
==
NULL
||
(
*
dev
->
dma_mask
<
0xffffffff
))
gfp
|=
GFP_DMA
;
gfp
|=
GFP_DMA
;
...
...
arch/parisc/kernel/pci-dma.c
View file @
d353084e
...
@@ -349,7 +349,7 @@ pcxl_dma_init(void)
...
@@ -349,7 +349,7 @@ pcxl_dma_init(void)
__initcall
(
pcxl_dma_init
);
__initcall
(
pcxl_dma_init
);
static
void
*
pa11_dma_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
static
void
*
pa11_dma_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
unsigned
long
vaddr
;
unsigned
long
vaddr
;
unsigned
long
paddr
;
unsigned
long
paddr
;
...
@@ -358,7 +358,7 @@ static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_ad
...
@@ -358,7 +358,7 @@ static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_ad
order
=
get_order
(
size
);
order
=
get_order
(
size
);
size
=
1
<<
(
order
+
PAGE_SHIFT
);
size
=
1
<<
(
order
+
PAGE_SHIFT
);
vaddr
=
pcxl_alloc_range
(
size
);
vaddr
=
pcxl_alloc_range
(
size
);
paddr
=
__get_free_pages
(
GFP_ATOMIC
,
order
);
paddr
=
__get_free_pages
(
flag
,
order
);
flush_kernel_dcache_range
(
paddr
,
size
);
flush_kernel_dcache_range
(
paddr
,
size
);
paddr
=
__pa
(
paddr
);
paddr
=
__pa
(
paddr
);
map_uncached_pages
(
vaddr
,
size
,
paddr
);
map_uncached_pages
(
vaddr
,
size
,
paddr
);
...
@@ -482,18 +482,18 @@ struct hppa_dma_ops pcxl_dma_ops = {
...
@@ -482,18 +482,18 @@ struct hppa_dma_ops pcxl_dma_ops = {
};
};
static
void
*
fail_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
static
void
*
fail_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
return
NULL
;
return
NULL
;
}
}
static
void
*
pa11_dma_alloc_noncoherent
(
struct
device
*
dev
,
size_t
size
,
static
void
*
pa11_dma_alloc_noncoherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
void
*
addr
=
NULL
;
void
*
addr
=
NULL
;
/* rely on kmalloc to be cacheline aligned */
/* rely on kmalloc to be cacheline aligned */
addr
=
kmalloc
(
size
,
GFP_KERNEL
);
addr
=
kmalloc
(
size
,
flag
);
if
(
addr
)
if
(
addr
)
*
dma_handle
=
(
dma_addr_t
)
virt_to_phys
(
addr
);
*
dma_handle
=
(
dma_addr_t
)
virt_to_phys
(
addr
);
...
...
drivers/parisc/ccio-dma.c
View file @
d353084e
...
@@ -728,7 +728,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size,
...
@@ -728,7 +728,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size,
* This function implements the pci_alloc_consistent function.
* This function implements the pci_alloc_consistent function.
*/
*/
static
void
*
static
void
*
ccio_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
ccio_alloc_consistent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
void
*
ret
;
void
*
ret
;
#if 0
#if 0
...
@@ -741,7 +741,7 @@ ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle)
...
@@ -741,7 +741,7 @@ ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle)
return 0;
return 0;
}
}
#endif
#endif
ret
=
(
void
*
)
__get_free_pages
(
GFP_ATOMIC
,
get_order
(
size
));
ret
=
(
void
*
)
__get_free_pages
(
flag
,
get_order
(
size
));
if
(
ret
)
{
if
(
ret
)
{
memset
(
ret
,
0
,
size
);
memset
(
ret
,
0
,
size
);
...
...
drivers/scsi/53c700.c
View file @
d353084e
...
@@ -246,7 +246,7 @@ NCR_700_detect(Scsi_Host_Template *tpnt,
...
@@ -246,7 +246,7 @@ NCR_700_detect(Scsi_Host_Template *tpnt,
int
j
;
int
j
;
memory
=
dma_alloc_noncoherent
(
hostdata
->
dev
,
TOTAL_MEM_SIZE
,
memory
=
dma_alloc_noncoherent
(
hostdata
->
dev
,
TOTAL_MEM_SIZE
,
&
pScript
);
&
pScript
,
GFP_KERNEL
);
if
(
memory
==
NULL
)
{
if
(
memory
==
NULL
)
{
printk
(
KERN_ERR
"53c700: Failed to allocate memory for driver, detatching
\n
"
);
printk
(
KERN_ERR
"53c700: Failed to allocate memory for driver, detatching
\n
"
);
return
NULL
;
return
NULL
;
...
...
drivers/scsi/sym53c8xx_comm.h
View file @
d353084e
...
@@ -797,7 +797,7 @@ static m_addr_t ___dma_getp(m_pool_s *mp)
...
@@ -797,7 +797,7 @@ static m_addr_t ___dma_getp(m_pool_s *mp)
dma_addr_t
daddr
;
dma_addr_t
daddr
;
vp
=
(
m_addr_t
)
dma_alloc_coherent
(
mp
->
bush
,
vp
=
(
m_addr_t
)
dma_alloc_coherent
(
mp
->
bush
,
PAGE_SIZE
<<
MEMO_PAGE_ORDER
,
PAGE_SIZE
<<
MEMO_PAGE_ORDER
,
&
daddr
);
&
daddr
,
GFP_KERNEL
);
if
(
vp
)
{
if
(
vp
)
{
int
hc
=
VTOB_HASH_CODE
(
vp
);
int
hc
=
VTOB_HASH_CODE
(
vp
);
vbp
->
vaddr
=
vp
;
vbp
->
vaddr
=
vp
;
...
...
include/asm-arm/dma-mapping.h
View file @
d353084e
...
@@ -82,10 +82,8 @@ static inline int dma_is_consistent(dma_addr_t handle)
...
@@ -82,10 +82,8 @@ static inline int dma_is_consistent(dma_addr_t handle)
* device-viewed address.
* device-viewed address.
*/
*/
static
inline
void
*
static
inline
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
handle
)
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
handle
,
int
gfp
)
{
{
int
gfp
=
GFP_ATOMIC
;
if
(
dev
==
NULL
||
dmadev_is_sa1111
(
dev
)
||
*
dev
->
dma_mask
!=
0xffffffff
)
if
(
dev
==
NULL
||
dmadev_is_sa1111
(
dev
)
||
*
dev
->
dma_mask
!=
0xffffffff
)
gfp
|=
GFP_DMA
;
gfp
|=
GFP_DMA
;
...
...
include/asm-generic/dma-mapping.h
View file @
d353084e
...
@@ -30,7 +30,8 @@ dma_set_mask(struct device *dev, u64 dma_mask)
...
@@ -30,7 +30,8 @@ dma_set_mask(struct device *dev, u64 dma_mask)
}
}
static
inline
void
*
static
inline
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
BUG_ON
(
dev
->
bus
!=
&
pci_bus_type
);
BUG_ON
(
dev
->
bus
!=
&
pci_bus_type
);
...
@@ -121,7 +122,7 @@ dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems,
...
@@ -121,7 +122,7 @@ dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems,
/* Now for the API extensions over the pci_ one */
/* Now for the API extensions over the pci_ one */
#define dma_alloc_noncoherent(d, s, h
) dma_alloc_coherent(d, s, h
)
#define dma_alloc_noncoherent(d, s, h
, f) dma_alloc_coherent(d, s, h, f
)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
#define dma_is_consistent(d) (1)
#define dma_is_consistent(d) (1)
...
...
include/asm-generic/pci-dma-compat.h
View file @
d353084e
...
@@ -19,7 +19,7 @@ static inline void *
...
@@ -19,7 +19,7 @@ static inline void *
pci_alloc_consistent
(
struct
pci_dev
*
hwdev
,
size_t
size
,
pci_alloc_consistent
(
struct
pci_dev
*
hwdev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_addr_t
*
dma_handle
)
{
{
return
dma_alloc_coherent
(
hwdev
==
NULL
?
NULL
:
&
hwdev
->
dev
,
size
,
dma_handle
);
return
dma_alloc_coherent
(
hwdev
==
NULL
?
NULL
:
&
hwdev
->
dev
,
size
,
dma_handle
,
GFP_ATOMIC
);
}
}
static
inline
void
static
inline
void
...
...
include/asm-i386/dma-mapping.h
View file @
d353084e
...
@@ -3,11 +3,11 @@
...
@@ -3,11 +3,11 @@
#include <asm/cache.h>
#include <asm/cache.h>
#define dma_alloc_noncoherent(d, s, h
) dma_alloc_coherent(d, s, h
)
#define dma_alloc_noncoherent(d, s, h
, f) dma_alloc_coherent(d, s, h, f
)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
);
dma_addr_t
*
dma_handle
,
int
flag
);
void
dma_free_coherent
(
struct
device
*
dev
,
size_t
size
,
void
dma_free_coherent
(
struct
device
*
dev
,
size_t
size
,
void
*
vaddr
,
dma_addr_t
dma_handle
);
void
*
vaddr
,
dma_addr_t
dma_handle
);
...
...
include/asm-parisc/dma-mapping.h
View file @
d353084e
...
@@ -9,8 +9,8 @@
...
@@ -9,8 +9,8 @@
*/
*/
struct
hppa_dma_ops
{
struct
hppa_dma_ops
{
int
(
*
dma_supported
)(
struct
device
*
dev
,
u64
mask
);
int
(
*
dma_supported
)(
struct
device
*
dev
,
u64
mask
);
void
*
(
*
alloc_consistent
)(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
iova
);
void
*
(
*
alloc_consistent
)(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
iova
,
int
flag
);
void
*
(
*
alloc_noncoherent
)(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
iova
);
void
*
(
*
alloc_noncoherent
)(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
iova
,
int
flag
);
void
(
*
free_consistent
)(
struct
device
*
dev
,
size_t
size
,
void
*
vaddr
,
dma_addr_t
iova
);
void
(
*
free_consistent
)(
struct
device
*
dev
,
size_t
size
,
void
*
vaddr
,
dma_addr_t
iova
);
dma_addr_t
(
*
map_single
)(
struct
device
*
dev
,
void
*
addr
,
size_t
size
,
enum
dma_data_direction
direction
);
dma_addr_t
(
*
map_single
)(
struct
device
*
dev
,
void
*
addr
,
size_t
size
,
enum
dma_data_direction
direction
);
void
(
*
unmap_single
)(
struct
device
*
dev
,
dma_addr_t
iova
,
size_t
size
,
enum
dma_data_direction
direction
);
void
(
*
unmap_single
)(
struct
device
*
dev
,
dma_addr_t
iova
,
size_t
size
,
enum
dma_data_direction
direction
);
...
@@ -46,15 +46,17 @@ extern struct hppa_dma_ops pcx_dma_ops;
...
@@ -46,15 +46,17 @@ extern struct hppa_dma_ops pcx_dma_ops;
extern
struct
hppa_dma_ops
*
hppa_dma_ops
;
extern
struct
hppa_dma_ops
*
hppa_dma_ops
;
static
inline
void
*
static
inline
void
*
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_alloc_coherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
return
hppa_dma_ops
->
alloc_consistent
(
dev
,
size
,
dma_handle
);
return
hppa_dma_ops
->
alloc_consistent
(
dev
,
size
,
dma_handle
,
flag
);
}
}
static
inline
void
*
static
inline
void
*
dma_alloc_noncoherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
)
dma_alloc_noncoherent
(
struct
device
*
dev
,
size_t
size
,
dma_addr_t
*
dma_handle
,
int
flag
)
{
{
return
hppa_dma_ops
->
alloc_noncoherent
(
dev
,
size
,
dma_handle
);
return
hppa_dma_ops
->
alloc_noncoherent
(
dev
,
size
,
dma_handle
,
flag
);
}
}
static
inline
void
static
inline
void
...
...
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