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
8b766794
Commit
8b766794
authored
Feb 22, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://lia64.bkbits.net/to-linus-2.5
into ppc970.osdl.org:/home/torvalds/v2.5/linux
parents
6e9aed30
4ce0447a
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
39 deletions
+34
-39
arch/ia64/sn/io/machvec/pci_dma.c
arch/ia64/sn/io/machvec/pci_dma.c
+33
-39
include/asm-ia64/tlb.h
include/asm-ia64/tlb.h
+1
-0
No files found.
arch/ia64/sn/io/machvec/pci_dma.c
View file @
8b766794
...
...
@@ -225,13 +225,13 @@ sn_pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr
int
sn_pci_map_sg
(
struct
pci_dev
*
hwdev
,
struct
scatterlist
*
sg
,
int
nents
,
int
direction
)
{
int
i
;
vertex_hdl_t
vhdl
;
unsigned
long
phys_addr
;
struct
sn_device_sysdata
*
device_sysdata
;
pcibr_dmamap_t
dma_map
;
struct
scatterlist
*
saved_sg
=
sg
;
unsigned
dma_flag
;
/* can't go anywhere w/o a direction in life */
if
(
direction
==
PCI_DMA_NONE
)
...
...
@@ -243,34 +243,33 @@ sn_pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int dire
device_sysdata
=
SN_DEVICE_SYSDATA
(
hwdev
);
vhdl
=
device_sysdata
->
vhdl
;
/*
* 64 bit DMA mask can use direct translations
* PCI only
* 32 bit DMA mask might be able to use direct, otherwise use dma map
* PCI-X
* only 64 bit DMA mask supported; both direct and dma map will fail
*/
if
(
hwdev
->
dma_mask
==
~
0UL
)
dma_flag
=
PCIIO_DMA_DATA
|
PCIIO_DMA_A64
;
else
dma_flag
=
PCIIO_DMA_DATA
;
/*
* Setup a DMA address for each entry in the
* scatterlist.
*/
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
phys_addr
=
__pa
((
unsigned
long
)
page_address
(
sg
->
page
)
+
sg
->
offset
);
/*
* Handle 32-63 bit cards via direct mapping
*/
if
(
IS_PCI32G
(
hwdev
))
{
sg
->
dma_address
=
pcibr_dmatrans_addr
(
vhdl
,
NULL
,
phys_addr
,
sg
->
length
,
PCIIO_DMA_DATA
);
sg
->
dma_length
=
sg
->
length
;
/*
* See if we got a direct map entry
*/
sg
->
length
,
dma_flag
);
if
(
sg
->
dma_address
)
{
sg
->
dma_length
=
sg
->
length
;
continue
;
}
}
/*
* It is a 32 bit card and we cannot do direct mapping,
* so we use an ATE.
*/
dma_map
=
pcibr_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
PCIIO_DMA_DATA
);
dma_map
=
pcibr_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
PCIIO_DMA_DATA
|
MINIMAL_ATE_FLAG
(
phys_addr
,
sg
->
length
));
if
(
!
dma_map
)
{
printk
(
KERN_ERR
"sn_pci_map_sg: Unable to allocate "
"anymore 32 bit page map entries.
\n
"
);
...
...
@@ -356,38 +355,33 @@ sn_pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
unsigned
long
phys_addr
;
struct
sn_device_sysdata
*
device_sysdata
;
pcibr_dmamap_t
dma_map
=
NULL
;
unsigned
dma_flag
;
if
(
direction
==
PCI_DMA_NONE
)
BUG
();
/* SN cannot support DMA addresses smaller than 32 bits. */
if
(
IS_PCI32L
(
hwdev
))
return
0
;
/*
* find vertex for the device
*/
device_sysdata
=
SN_DEVICE_SYSDATA
(
hwdev
);
vhdl
=
device_sysdata
->
vhdl
;
/*
* Call our dmamap interface
*/
dma_addr
=
0
;
phys_addr
=
__pa
(
ptr
);
/*
* Devices that support 32 bit to 63 bit DMA addresses get
* 32 bit DMA addresses.
*
* First try to get a 32 bit direct map register.
*/
if
(
IS_PCI32G
(
hwdev
))
{
dma_addr
=
pcibr_dmatrans_addr
(
vhdl
,
NULL
,
phys_addr
,
size
,
PCIIO_DMA_DATA
);
* 64 bit DMA mask can use direct translations
* PCI only
* 32 bit DMA mask might be able to use direct, otherwise use dma map
* PCI-X
* only 64 bit DMA mask supported; both direct and dma map will fail
*/
if
(
hwdev
->
dma_mask
==
~
0UL
)
dma_flag
=
PCIIO_DMA_DATA
|
PCIIO_DMA_A64
;
else
dma_flag
=
PCIIO_DMA_DATA
;
dma_addr
=
pcibr_dmatrans_addr
(
vhdl
,
NULL
,
phys_addr
,
size
,
dma_flag
);
if
(
dma_addr
)
return
dma_addr
;
}
/*
* It's a 32 bit card and we cannot do direct mapping so
...
...
include/asm-ia64/tlb.h
View file @
8b766794
...
...
@@ -41,6 +41,7 @@
#include <linux/mm.h>
#include <linux/swap.h>
#include <asm/pgalloc.h>
#include <asm/processor.h>
#include <asm/tlbflush.h>
...
...
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