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
2d81c814
Commit
2d81c814
authored
May 03, 2002
by
David Mosberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ia64: Make pci_dma_supported() a platform-specific function. Patch
by Jesse Barnes.
parent
e3cdd503
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
56 additions
and
63 deletions
+56
-63
arch/ia64/hp/common/sba_iommu.c
arch/ia64/hp/common/sba_iommu.c
+7
-0
arch/ia64/lib/swiotlb.c
arch/ia64/lib/swiotlb.c
+12
-0
arch/ia64/sn/io/Makefile
arch/ia64/sn/io/Makefile
+1
-1
arch/ia64/sn/io/pci_dma.c
arch/ia64/sn/io/pci_dma.c
+24
-14
include/asm-ia64/machvec.h
include/asm-ia64/machvec.h
+9
-0
include/asm-ia64/machvec_hpzx1.h
include/asm-ia64/machvec_hpzx1.h
+2
-37
include/asm-ia64/pci.h
include/asm-ia64/pci.h
+1
-11
No files found.
arch/ia64/hp/common/sba_iommu.c
View file @
2d81c814
...
...
@@ -1389,6 +1389,12 @@ sba_dma_address (struct scatterlist *sg)
return
((
unsigned
long
)
sba_sg_iova
(
sg
));
}
int
sba_dma_supported
(
struct
pci_dev
*
dev
,
u64
mask
)
{
return
1
;
}
/**************************************************************
*
* Initialization and claim
...
...
@@ -1858,5 +1864,6 @@ EXPORT_SYMBOL(sba_unmap_single);
EXPORT_SYMBOL
(
sba_map_sg
);
EXPORT_SYMBOL
(
sba_unmap_sg
);
EXPORT_SYMBOL
(
sba_dma_address
);
EXPORT_SYMBOL
(
sba_dma_supported
);
EXPORT_SYMBOL
(
sba_alloc_consistent
);
EXPORT_SYMBOL
(
sba_free_consistent
);
arch/ia64/lib/swiotlb.c
View file @
2d81c814
...
...
@@ -478,6 +478,17 @@ swiotlb_dma_address (struct scatterlist *sg)
return
SG_ENT_PHYS_ADDRESS
(
sg
);
}
/*
* Return whether the given PCI device DMA address mask can be supported properly. For
* example, if your device can only drive the low 24-bits during PCI bus mastering, then
* you would pass 0x00ffffff as the mask to this function.
*/
int
swiotlb_pci_dma_supported
(
struct
pci_dev
*
hwdev
,
u64
mask
)
{
return
1
;
}
EXPORT_SYMBOL
(
swiotlb_init
);
EXPORT_SYMBOL
(
swiotlb_map_single
);
EXPORT_SYMBOL
(
swiotlb_unmap_single
);
...
...
@@ -488,3 +499,4 @@ EXPORT_SYMBOL(swiotlb_sync_sg);
EXPORT_SYMBOL
(
swiotlb_dma_address
);
EXPORT_SYMBOL
(
swiotlb_alloc_consistent
);
EXPORT_SYMBOL
(
swiotlb_free_consistent
);
EXPORT_SYMBOL
(
swiotlb_pci_dma_supported
);
arch/ia64/sn/io/Makefile
View file @
2d81c814
...
...
@@ -18,7 +18,7 @@ EXTRA_CFLAGS := -DLITTLE_ENDIAN
O_TARGET
:=
sgiio.o
ifeq
($(CONFIG_MODULES),y)
export-objs
=
pciio.o hcl.o
export-objs
=
pciio.o hcl.o
pci_dma.o
endif
obj-y
:=
stubs.o sgi_if.o pciio.o xtalk.o xbow.o xswitch.o klgraph_hack.o
\
...
...
arch/ia64/sn/io/pci_dma.c
View file @
2d81c814
...
...
@@ -4,6 +4,9 @@
* for more details.
*
* Copyright (C) 2000,2002 Silicon Graphics, Inc. All rights reserved.
*
* Routines for PCI DMA mapping. See Documentation/DMA-mapping.txt for
* a description of how these routines should be used.
*/
#include <linux/types.h>
...
...
@@ -12,6 +15,7 @@
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/module.h>
#include <asm/delay.h>
#include <asm/io.h>
...
...
@@ -46,7 +50,7 @@ get_free_pciio_dmamap(devfs_handle_t pci_bus)
/*
* Darn, we need to get the maps allocated for this bus.
*/
for
(
i
=
0
;
i
<
MAX_PCI_XWIDGET
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_PCI_XWIDGET
;
i
++
)
{
if
(
busnum_to_pcibr_vhdl
[
i
]
==
pci_bus
)
{
sn1_dma_map
=
busnum_to_atedmamaps
[
i
];
}
...
...
@@ -314,22 +318,18 @@ sn1_pci_map_sg (struct pci_dev *hwdev,
}
/*
* It is a 32
bit card and we cannot do Direct mapping.
*
Let's 32Bit Page map the request
.
* It is a 32
bit card and we cannot do direct mapping,
*
so we use an ATE
.
*/
dma_map
=
NULL
;
#ifdef CONFIG_IA64_SGI_SN1
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
PCIIO_BYTE_STREAM
|
PCIIO_DMA_DATA
);
#else
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
PCIIO_DMA_DATA
);
#endif
dma_map
=
0
;
dma_map
=
pciio_dmamap_alloc
(
vhdl
,
NULL
,
sg
->
length
,
DMA_DATA_FLAGS
);
if
(
!
dma_map
)
{
printk
(
"pci_map_sg: Unable to allocate anymore 32Bits Page Map entries.
\n
"
);
printk
(
KERN_ERR
"sn_pci_map_sg: Unable to allocate "
"anymore 32 bit page map entries.
\n
"
);
BUG
();
}
dma_addr
=
(
dma_addr_t
)
pciio_dmamap_addr
(
dma_map
,
temp_ptr
,
sg
->
length
);
/* printk("pci_map_sg: dma_map 0x%p Phys Addr 0x%p dma_addr 0x%p\n", dma_map, temp_ptr, dma_addr); */
dma_addr
=
pciio_dmamap_addr
(
dma_map
,
phys_addr
,
sg
->
length
);
sg
->
address
=
(
char
*
)
dma_addr
;
sg
->
page
=
(
char
*
)
dma_map
;
...
...
@@ -372,7 +372,17 @@ sn1_pci_unmap_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int
}
/*
/**
* sn_pci_map_single - map a single region for DMA
* @hwdev: device to map for
* @ptr: kernel virtual address of the region to map
* @size: size of the region
* @direction: DMA direction
*
* Map the region pointed to by @ptr for DMA and return the
* DMA address. Also known as platform_pci_map_single() by
* the IA64 machvec code.
*
* We map this to the one step pciio_dmamap_trans interface rather than
* the two step pciio_dmamap_alloc/pciio_dmamap_addr because we have
* no way of saving the dmamap handle from the alloc to later free
...
...
include/asm-ia64/machvec.h
View file @
2d81c814
...
...
@@ -18,6 +18,7 @@ struct pci_dev;
struct
pt_regs
;
struct
scatterlist
;
struct
irq_desc
;
struct
page
;
typedef
void
ia64_mv_setup_t
(
char
**
);
typedef
void
ia64_mv_cpu_init_t
(
void
);
...
...
@@ -45,6 +46,8 @@ typedef void ia64_mv_pci_unmap_sg (struct pci_dev *, struct scatterlist *, int,
typedef
void
ia64_mv_pci_dma_sync_single
(
struct
pci_dev
*
,
dma_addr_t
,
size_t
,
int
);
typedef
void
ia64_mv_pci_dma_sync_sg
(
struct
pci_dev
*
,
struct
scatterlist
*
,
int
,
int
);
typedef
unsigned
long
ia64_mv_pci_dma_address
(
struct
scatterlist
*
);
typedef
int
ia64_mv_pci_dma_supported
(
struct
pci_dev
*
,
u64
);
/*
* WARNING: The legacy I/O space is _architected_. Platforms are
* expected to follow this architected model (see Section 10.7 in the
...
...
@@ -101,6 +104,7 @@ extern void machvec_noop (void);
# define platform_pci_dma_sync_single ia64_mv.sync_single
# define platform_pci_dma_sync_sg ia64_mv.sync_sg
# define platform_pci_dma_address ia64_mv.dma_address
# define platform_pci_dma_supported ia64_mv.dma_supported
# define platform_irq_desc ia64_mv.irq_desc
# define platform_irq_to_vector ia64_mv.irq_to_vector
# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq
...
...
@@ -136,6 +140,7 @@ struct ia64_machine_vector {
ia64_mv_pci_dma_sync_single
*
sync_single
;
ia64_mv_pci_dma_sync_sg
*
sync_sg
;
ia64_mv_pci_dma_address
*
dma_address
;
ia64_mv_pci_dma_supported
*
dma_supported
;
ia64_mv_irq_desc
*
irq_desc
;
ia64_mv_irq_to_vector
*
irq_to_vector
;
ia64_mv_local_vector_to_irq
*
local_vector_to_irq
;
...
...
@@ -172,6 +177,7 @@ struct ia64_machine_vector {
platform_pci_dma_sync_single, \
platform_pci_dma_sync_sg, \
platform_pci_dma_address, \
platform_pci_dma_supported, \
platform_irq_desc, \
platform_irq_to_vector, \
platform_local_vector_to_irq, \
...
...
@@ -269,6 +275,9 @@ extern ia64_mv_pci_dma_address swiotlb_dma_address;
#ifndef platform_pci_dma_address
# define platform_pci_dma_address swiotlb_dma_address
#endif
#ifndef platform_pci_dma_supported
# define platform_pci_dma_supported swiotlb_pci_dma_supported
#endif
#ifndef platform_irq_desc
# define platform_irq_desc __ia64_irq_desc
#endif
...
...
include/asm-ia64/machvec_hpzx1.h
View file @
2d81c814
...
...
@@ -11,6 +11,7 @@ extern ia64_mv_pci_unmap_single sba_unmap_single;
extern
ia64_mv_pci_map_sg
sba_map_sg
;
extern
ia64_mv_pci_unmap_sg
sba_unmap_sg
;
extern
ia64_mv_pci_dma_address
sba_dma_address
;
extern
ia64_mv_pci_dma_supported
sba_dma_supported
;
/*
* This stuff has dual use!
...
...
@@ -33,42 +34,6 @@ extern ia64_mv_pci_dma_address sba_dma_address;
#define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop)
#define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop)
#define platform_pci_dma_address sba_dma_address
#endif
/* _ASM_IA64_MACHVEC_HPZX1_h */
#ifndef _ASM_IA64_MACHVEC_HPZX1_h
#define _ASM_IA64_MACHVEC_HPZX1_h
extern
ia64_mv_setup_t
dig_setup
;
extern
ia64_mv_pci_fixup_t
hpzx1_pci_fixup
;
extern
ia64_mv_map_nr_t
map_nr_dense
;
extern
ia64_mv_pci_alloc_consistent
sba_alloc_consistent
;
extern
ia64_mv_pci_free_consistent
sba_free_consistent
;
extern
ia64_mv_pci_map_single
sba_map_single
;
extern
ia64_mv_pci_unmap_single
sba_unmap_single
;
extern
ia64_mv_pci_map_sg
sba_map_sg
;
extern
ia64_mv_pci_unmap_sg
sba_unmap_sg
;
extern
ia64_mv_pci_dma_address
sba_dma_address
;
/*
* This stuff has dual use!
*
* For a generic kernel, the macros are used to initialize the
* platform's machvec structure. When compiling a non-generic kernel,
* the macros are used directly.
*/
#define platform_name "hpzx1"
#define platform_setup dig_setup
#define platform_pci_fixup hpzx1_pci_fixup
#define platform_map_nr map_nr_dense
#define platform_pci_dma_init ((ia64_mv_pci_dma_init *) machvec_noop)
#define platform_pci_alloc_consistent sba_alloc_consistent
#define platform_pci_free_consistent sba_free_consistent
#define platform_pci_map_single sba_map_single
#define platform_pci_unmap_single sba_unmap_single
#define platform_pci_map_sg sba_map_sg
#define platform_pci_unmap_sg sba_unmap_sg
#define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop)
#define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop)
#define platform_pci_dma_address sba_dma_address
#define platform_pci_dma_supported sba_dma_supported
#endif
/* _ASM_IA64_MACHVEC_HPZX1_h */
include/asm-ia64/pci.h
View file @
2d81c814
...
...
@@ -58,6 +58,7 @@ pcibios_penalize_isa_irq (int irq)
#define pci_dma_sync_single platform_pci_dma_sync_single
#define pci_dma_sync_sg platform_pci_dma_sync_sg
#define sg_dma_address platform_pci_dma_address
#define pci_dma_supported platform_pci_dma_supported
/* pci_unmap_{single,page} is not a nop, thus... */
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
...
...
@@ -73,17 +74,6 @@ pcibios_penalize_isa_irq (int irq)
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
(((PTR)->LEN_NAME) = (VAL))
/*
* Return whether the given PCI device DMA address mask can be supported properly. For
* example, if your device can only drive the low 24-bits during PCI bus mastering, then
* you would pass 0x00ffffff as the mask to this function.
*/
static
inline
int
pci_dma_supported
(
struct
pci_dev
*
hwdev
,
u64
mask
)
{
return
1
;
}
#define pci_map_page(dev,pg,off,size,dir) \
pci_map_single((dev), page_address(pg) + (off), (size), (dir))
#define pci_unmap_page(dev,dma_addr,size,dir) \
...
...
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