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
e6cc3360
Commit
e6cc3360
authored
Sep 10, 2004
by
Linus Torvalds
Committed by
Linus Torvalds
Sep 10, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ppc64: PCI memory annotation infrastructure
parent
ad3754d9
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
151 additions
and
123 deletions
+151
-123
arch/ppc64/kernel/eeh.c
arch/ppc64/kernel/eeh.c
+3
-3
arch/ppc64/kernel/iSeries_pci.c
arch/ppc64/kernel/iSeries_pci.c
+18
-23
arch/ppc64/mm/init.c
arch/ppc64/mm/init.c
+27
-22
include/asm-ppc64/eeh.h
include/asm-ppc64/eeh.h
+28
-27
include/asm-ppc64/iSeries/iSeries_io.h
include/asm-ppc64/iSeries/iSeries_io.h
+9
-9
include/asm-ppc64/io.h
include/asm-ppc64/io.h
+66
-39
No files found.
arch/ppc64/kernel/eeh.c
View file @
e6cc3360
...
@@ -473,7 +473,7 @@ EXPORT_SYMBOL(eeh_dn_check_failure);
...
@@ -473,7 +473,7 @@ EXPORT_SYMBOL(eeh_dn_check_failure);
*
*
* Note this routine is safe to call in an interrupt context.
* Note this routine is safe to call in an interrupt context.
*/
*/
unsigned
long
eeh_check_failure
(
void
*
token
,
unsigned
long
val
)
unsigned
long
eeh_check_failure
(
const
volatile
void
__iomem
*
token
,
unsigned
long
val
)
{
{
unsigned
long
addr
;
unsigned
long
addr
;
struct
pci_dev
*
dev
;
struct
pci_dev
*
dev
;
...
@@ -739,7 +739,7 @@ EXPORT_SYMBOL(eeh_remove_device);
...
@@ -739,7 +739,7 @@ EXPORT_SYMBOL(eeh_remove_device);
* Remap the addr (trivially) to the EEH region if EEH checking enabled.
* Remap the addr (trivially) to the EEH region if EEH checking enabled.
* For addresses not known to PCI the vaddr is simply returned unchanged.
* For addresses not known to PCI the vaddr is simply returned unchanged.
*/
*/
void
*
eeh_ioremap
(
unsigned
long
addr
,
void
*
vaddr
)
void
__iomem
*
eeh_ioremap
(
unsigned
long
addr
,
void
__iomem
*
vaddr
)
{
{
struct
pci_dev
*
dev
;
struct
pci_dev
*
dev
;
struct
device_node
*
dn
;
struct
device_node
*
dn
;
...
@@ -763,7 +763,7 @@ void *eeh_ioremap(unsigned long addr, void *vaddr)
...
@@ -763,7 +763,7 @@ void *eeh_ioremap(unsigned long addr, void *vaddr)
}
}
pci_dev_put
(
dev
);
pci_dev_put
(
dev
);
return
(
void
*
)
IO_ADDR_TO_TOKEN
(
vaddr
);
return
(
void
__iomem
*
)
IO_ADDR_TO_TOKEN
(
vaddr
);
}
}
static
int
proc_eeh_show
(
struct
seq_file
*
m
,
void
*
v
)
static
int
proc_eeh_show
(
struct
seq_file
*
m
,
void
*
v
)
...
...
arch/ppc64/kernel/iSeries_pci.c
View file @
e6cc3360
...
@@ -419,46 +419,39 @@ static int iSeries_Scan_Bridge_Slot(HvBusNumber Bus,
...
@@ -419,46 +419,39 @@ static int iSeries_Scan_Bridge_Slot(HvBusNumber Bus,
* I/0 Memory copy MUST use mmio commands on iSeries
* I/0 Memory copy MUST use mmio commands on iSeries
* To do; For performance, include the hv call directly
* To do; For performance, include the hv call directly
*/
*/
void
*
iSeries_memset_io
(
void
*
dest
,
char
c
,
size_t
Count
)
void
iSeries_memset_io
(
volatile
void
__iomem
*
dest
,
char
c
,
size_t
Count
)
{
{
u8
ByteValue
=
c
;
u8
ByteValue
=
c
;
long
NumberOfBytes
=
Count
;
long
NumberOfBytes
=
Count
;
char
*
IoBuffer
=
dest
;
while
(
NumberOfBytes
>
0
)
{
while
(
NumberOfBytes
>
0
)
{
iSeries_Write_Byte
(
ByteValue
,
(
void
*
)
IoBuffer
);
iSeries_Write_Byte
(
ByteValue
,
dest
++
);
++
IoBuffer
;
--
NumberOfBytes
;
--
NumberOfBytes
;
}
}
return
dest
;
}
}
EXPORT_SYMBOL
(
iSeries_memset_io
);
EXPORT_SYMBOL
(
iSeries_memset_io
);
void
*
iSeries_memcpy_toio
(
void
*
dest
,
void
*
source
,
size_t
count
)
void
iSeries_memcpy_toio
(
volatile
void
__iomem
*
dest
,
void
*
source
,
size_t
count
)
{
{
char
*
dst
=
dest
;
char
*
src
=
source
;
char
*
src
=
source
;
long
NumberOfBytes
=
count
;
long
NumberOfBytes
=
count
;
while
(
NumberOfBytes
>
0
)
{
while
(
NumberOfBytes
>
0
)
{
iSeries_Write_Byte
(
*
src
++
,
(
void
*
)
d
st
++
);
iSeries_Write_Byte
(
*
src
++
,
de
st
++
);
--
NumberOfBytes
;
--
NumberOfBytes
;
}
}
return
dest
;
}
}
EXPORT_SYMBOL
(
iSeries_memcpy_toio
);
EXPORT_SYMBOL
(
iSeries_memcpy_toio
);
void
*
iSeries_memcpy_fromio
(
void
*
dest
,
void
*
source
,
size_t
count
)
void
iSeries_memcpy_fromio
(
void
*
dest
,
const
volatile
void
__iomem
*
src
,
size_t
count
)
{
{
char
*
dst
=
dest
;
char
*
dst
=
dest
;
char
*
src
=
source
;
long
NumberOfBytes
=
count
;
long
NumberOfBytes
=
count
;
while
(
NumberOfBytes
>
0
)
{
while
(
NumberOfBytes
>
0
)
{
*
dst
++
=
iSeries_Read_Byte
(
(
void
*
)
src
++
);
*
dst
++
=
iSeries_Read_Byte
(
src
++
);
--
NumberOfBytes
;
--
NumberOfBytes
;
}
}
return
dest
;
}
}
EXPORT_SYMBOL
(
iSeries_memcpy_fromio
);
EXPORT_SYMBOL
(
iSeries_memcpy_fromio
);
...
@@ -612,17 +605,19 @@ static int CheckReturnCode(char *TextHdr, struct iSeries_Device_Node *DevNode,
...
@@ -612,17 +605,19 @@ static int CheckReturnCode(char *TextHdr, struct iSeries_Device_Node *DevNode,
* Note: Make sure the passed variable end up on the stack to avoid
* Note: Make sure the passed variable end up on the stack to avoid
* the exposure of being device global.
* the exposure of being device global.
*/
*/
static
inline
struct
iSeries_Device_Node
*
xlateIoMmAddress
(
void
*
IoAddress
,
static
inline
struct
iSeries_Device_Node
*
xlateIoMmAddress
(
const
volatile
void
__iomem
*
IoAddress
,
u64
*
dsaptr
,
u64
*
BarOffsetPtr
)
u64
*
dsaptr
,
u64
*
BarOffsetPtr
)
{
{
unsigned
long
OrigIoAddr
;
unsigned
long
BaseIoAddr
;
unsigned
long
BaseIoAddr
;
unsigned
long
TableIndex
;
unsigned
long
TableIndex
;
struct
iSeries_Device_Node
*
DevNode
;
struct
iSeries_Device_Node
*
DevNode
;
if
(((
unsigned
long
)
IoAddress
<
iSeries_Base_Io_Memory
)
||
OrigIoAddr
=
(
unsigned
long
__force
)
IoAddress
;
((
unsigned
long
)
IoAddress
>=
iSeries_Max_Io_Memory
))
if
((
OrigIoAddr
<
iSeries_Base_Io_Memory
)
||
(
OrigIoAddr
>=
iSeries_Max_Io_Memory
))
return
NULL
;
return
NULL
;
BaseIoAddr
=
(
unsigned
long
)
IoAddress
-
iSeries_Base_Io_Memory
;
BaseIoAddr
=
OrigIoAddr
-
iSeries_Base_Io_Memory
;
TableIndex
=
BaseIoAddr
/
iSeries_IoMmTable_Entry_Size
;
TableIndex
=
BaseIoAddr
/
iSeries_IoMmTable_Entry_Size
;
DevNode
=
iSeries_IoMmTable
[
TableIndex
];
DevNode
=
iSeries_IoMmTable
[
TableIndex
];
...
@@ -644,7 +639,7 @@ static inline struct iSeries_Device_Node *xlateIoMmAddress(void *IoAddress,
...
@@ -644,7 +639,7 @@ static inline struct iSeries_Device_Node *xlateIoMmAddress(void *IoAddress,
* iSeries_Read_Word = Read Word (16 bit)
* iSeries_Read_Word = Read Word (16 bit)
* iSeries_Read_Long = Read Long (32 bit)
* iSeries_Read_Long = Read Long (32 bit)
*/
*/
u8
iSeries_Read_Byte
(
void
*
IoAddress
)
u8
iSeries_Read_Byte
(
const
volatile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
@@ -673,7 +668,7 @@ u8 iSeries_Read_Byte(void *IoAddress)
...
@@ -673,7 +668,7 @@ u8 iSeries_Read_Byte(void *IoAddress)
}
}
EXPORT_SYMBOL
(
iSeries_Read_Byte
);
EXPORT_SYMBOL
(
iSeries_Read_Byte
);
u16
iSeries_Read_Word
(
void
*
IoAddress
)
u16
iSeries_Read_Word
(
const
volatile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
@@ -703,7 +698,7 @@ u16 iSeries_Read_Word(void *IoAddress)
...
@@ -703,7 +698,7 @@ u16 iSeries_Read_Word(void *IoAddress)
}
}
EXPORT_SYMBOL
(
iSeries_Read_Word
);
EXPORT_SYMBOL
(
iSeries_Read_Word
);
u32
iSeries_Read_Long
(
void
*
IoAddress
)
u32
iSeries_Read_Long
(
const
volatile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
@@ -740,7 +735,7 @@ EXPORT_SYMBOL(iSeries_Read_Long);
...
@@ -740,7 +735,7 @@ EXPORT_SYMBOL(iSeries_Read_Long);
* iSeries_Write_Word = Write Word(16 bit)
* iSeries_Write_Word = Write Word(16 bit)
* iSeries_Write_Long = Write Long(32 bit)
* iSeries_Write_Long = Write Long(32 bit)
*/
*/
void
iSeries_Write_Byte
(
u8
data
,
vo
id
*
IoAddress
)
void
iSeries_Write_Byte
(
u8
data
,
vo
latile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
@@ -767,7 +762,7 @@ void iSeries_Write_Byte(u8 data, void *IoAddress)
...
@@ -767,7 +762,7 @@ void iSeries_Write_Byte(u8 data, void *IoAddress)
}
}
EXPORT_SYMBOL
(
iSeries_Write_Byte
);
EXPORT_SYMBOL
(
iSeries_Write_Byte
);
void
iSeries_Write_Word
(
u16
data
,
vo
id
*
IoAddress
)
void
iSeries_Write_Word
(
u16
data
,
vo
latile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
@@ -794,7 +789,7 @@ void iSeries_Write_Word(u16 data, void *IoAddress)
...
@@ -794,7 +789,7 @@ void iSeries_Write_Word(u16 data, void *IoAddress)
}
}
EXPORT_SYMBOL
(
iSeries_Write_Word
);
EXPORT_SYMBOL
(
iSeries_Write_Word
);
void
iSeries_Write_Long
(
u32
data
,
vo
id
*
IoAddress
)
void
iSeries_Write_Long
(
u32
data
,
vo
latile
void
__iomem
*
IoAddress
)
{
{
u64
BarOffset
;
u64
BarOffset
;
u64
dsa
;
u64
dsa
;
...
...
arch/ppc64/mm/init.c
View file @
e6cc3360
...
@@ -117,18 +117,18 @@ void show_mem(void)
...
@@ -117,18 +117,18 @@ void show_mem(void)
#ifdef CONFIG_PPC_ISERIES
#ifdef CONFIG_PPC_ISERIES
void
*
ioremap
(
unsigned
long
addr
,
unsigned
long
size
)
void
__iomem
*
ioremap
(
unsigned
long
addr
,
unsigned
long
size
)
{
{
return
(
void
*
)
addr
;
return
(
void
__iomem
*
)
addr
;
}
}
extern
void
*
__ioremap
(
unsigned
long
addr
,
unsigned
long
size
,
extern
void
__iomem
*
__ioremap
(
unsigned
long
addr
,
unsigned
long
size
,
unsigned
long
flags
)
unsigned
long
flags
)
{
{
return
(
void
*
)
addr
;
return
(
void
__iomem
*
)
addr
;
}
}
void
iounmap
(
vo
id
*
addr
)
void
iounmap
(
vo
latile
void
__iomem
*
addr
)
{
{
return
;
return
;
}
}
...
@@ -182,7 +182,7 @@ static void map_io_page(unsigned long ea, unsigned long pa, int flags)
...
@@ -182,7 +182,7 @@ static void map_io_page(unsigned long ea, unsigned long pa, int flags)
}
}
static
void
*
__ioremap_com
(
unsigned
long
addr
,
unsigned
long
pa
,
static
void
__iomem
*
__ioremap_com
(
unsigned
long
addr
,
unsigned
long
pa
,
unsigned
long
ea
,
unsigned
long
size
,
unsigned
long
ea
,
unsigned
long
size
,
unsigned
long
flags
)
unsigned
long
flags
)
{
{
...
@@ -197,20 +197,20 @@ static void * __ioremap_com(unsigned long addr, unsigned long pa,
...
@@ -197,20 +197,20 @@ static void * __ioremap_com(unsigned long addr, unsigned long pa,
map_io_page
(
ea
+
i
,
pa
+
i
,
flags
);
map_io_page
(
ea
+
i
,
pa
+
i
,
flags
);
}
}
return
(
void
*
)
(
ea
+
(
addr
&
~
PAGE_MASK
));
return
(
void
__iomem
*
)
(
ea
+
(
addr
&
~
PAGE_MASK
));
}
}
void
*
void
__iomem
*
ioremap
(
unsigned
long
addr
,
unsigned
long
size
)
ioremap
(
unsigned
long
addr
,
unsigned
long
size
)
{
{
void
*
ret
=
__ioremap
(
addr
,
size
,
_PAGE_NO_CACHE
);
void
__iomem
*
ret
=
__ioremap
(
addr
,
size
,
_PAGE_NO_CACHE
);
if
(
mem_init_done
)
if
(
mem_init_done
)
return
eeh_ioremap
(
addr
,
ret
);
/* may remap the addr */
return
eeh_ioremap
(
addr
,
ret
);
/* may remap the addr */
return
ret
;
return
ret
;
}
}
void
*
void
__iomem
*
__ioremap
(
unsigned
long
addr
,
unsigned
long
size
,
unsigned
long
flags
)
__ioremap
(
unsigned
long
addr
,
unsigned
long
size
,
unsigned
long
flags
)
{
{
unsigned
long
pa
,
ea
;
unsigned
long
pa
,
ea
;
...
@@ -353,11 +353,12 @@ static void unmap_im_area_pmd(pgd_t *dir, unsigned long address,
...
@@ -353,11 +353,12 @@ static void unmap_im_area_pmd(pgd_t *dir, unsigned long address,
*
*
* XXX what about calls before mem_init_done (ie python_countermeasures())
* XXX what about calls before mem_init_done (ie python_countermeasures())
*/
*/
void
iounmap
(
vo
id
*
addr
)
void
iounmap
(
vo
latile
void
__iomem
*
token
)
{
{
unsigned
long
address
,
start
,
end
,
size
;
unsigned
long
address
,
start
,
end
,
size
;
struct
mm_struct
*
mm
;
struct
mm_struct
*
mm
;
pgd_t
*
dir
;
pgd_t
*
dir
;
void
*
addr
;
if
(
!
mem_init_done
)
{
if
(
!
mem_init_done
)
{
return
;
return
;
...
@@ -365,7 +366,7 @@ void iounmap(void *addr)
...
@@ -365,7 +366,7 @@ void iounmap(void *addr)
/* addr could be in EEH or IO region, map it to IO region regardless.
/* addr could be in EEH or IO region, map it to IO region regardless.
*/
*/
addr
=
(
void
*
)
(
IO_TOKEN_TO_ADDR
(
addr
)
&
PAGE_MASK
);
addr
=
(
void
*
)
(
IO_TOKEN_TO_ADDR
(
token
)
&
PAGE_MASK
);
if
((
size
=
im_free
(
addr
))
==
0
)
{
if
((
size
=
im_free
(
addr
))
==
0
)
{
return
;
return
;
...
@@ -391,38 +392,39 @@ void iounmap(void *addr)
...
@@ -391,38 +392,39 @@ void iounmap(void *addr)
return
;
return
;
}
}
static
int
iounmap_subset_regions
(
void
*
addr
,
unsigned
long
size
)
static
int
iounmap_subset_regions
(
unsigned
long
addr
,
unsigned
long
size
)
{
{
struct
vm_struct
*
area
;
struct
vm_struct
*
area
;
/* Check whether subsets of this region exist */
/* Check whether subsets of this region exist */
area
=
im_get_area
(
(
unsigned
long
)
addr
,
size
,
IM_REGION_SUPERSET
);
area
=
im_get_area
(
addr
,
size
,
IM_REGION_SUPERSET
);
if
(
area
==
NULL
)
if
(
area
==
NULL
)
return
1
;
return
1
;
while
(
area
)
{
while
(
area
)
{
iounmap
(
area
->
addr
);
iounmap
(
(
void
__iomem
*
)
area
->
addr
);
area
=
im_get_area
(
(
unsigned
long
)
addr
,
size
,
area
=
im_get_area
(
addr
,
size
,
IM_REGION_SUPERSET
);
IM_REGION_SUPERSET
);
}
}
return
0
;
return
0
;
}
}
int
iounmap_explicit
(
vo
id
*
addr
,
unsigned
long
size
)
int
iounmap_explicit
(
vo
latile
void
__iomem
*
start
,
unsigned
long
size
)
{
{
struct
vm_struct
*
area
;
struct
vm_struct
*
area
;
unsigned
long
addr
;
int
rc
;
int
rc
;
/* addr could be in EEH or IO region, map it to IO region regardless.
/* addr could be in EEH or IO region, map it to IO region regardless.
*/
*/
addr
=
(
void
*
)
(
IO_TOKEN_TO_ADDR
(
addr
)
&
PAGE_MASK
);
addr
=
(
IO_TOKEN_TO_ADDR
(
start
)
&
PAGE_MASK
);
/* Verify that the region either exists or is a subset of an existing
/* Verify that the region either exists or is a subset of an existing
* region. In the latter case, split the parent region to create
* region. In the latter case, split the parent region to create
* the exact region
* the exact region
*/
*/
area
=
im_get_area
(
(
unsigned
long
)
addr
,
size
,
area
=
im_get_area
(
addr
,
size
,
IM_REGION_EXISTS
|
IM_REGION_SUBSET
);
IM_REGION_EXISTS
|
IM_REGION_SUBSET
);
if
(
area
==
NULL
)
{
if
(
area
==
NULL
)
{
/* Determine whether subset regions exist. If so, unmap */
/* Determine whether subset regions exist. If so, unmap */
...
@@ -430,14 +432,17 @@ int iounmap_explicit(void *addr, unsigned long size)
...
@@ -430,14 +432,17 @@ int iounmap_explicit(void *addr, unsigned long size)
if
(
rc
)
{
if
(
rc
)
{
printk
(
KERN_ERR
printk
(
KERN_ERR
"%s() cannot unmap nonexistent range 0x%lx
\n
"
,
"%s() cannot unmap nonexistent range 0x%lx
\n
"
,
__FUNCTION__
,
(
unsigned
long
)
addr
);
__FUNCTION__
,
addr
);
return
1
;
return
1
;
}
}
}
else
{
}
else
{
iounmap
(
area
->
addr
);
iounmap
(
(
void
__iomem
*
)
area
->
addr
);
}
}
/*
* FIXME! This can't be right:
iounmap(area->addr);
iounmap(area->addr);
* Maybe it should be "iounmap(area);"
*/
return
0
;
return
0
;
}
}
...
...
include/asm-ppc64/eeh.h
View file @
e6cc3360
...
@@ -31,7 +31,7 @@ struct device_node;
...
@@ -31,7 +31,7 @@ struct device_node;
* never actually mapped. Translation between IO <-> EEH region is 1 to 1.
* never actually mapped. Translation between IO <-> EEH region is 1 to 1.
*/
*/
#define IO_TOKEN_TO_ADDR(token) \
#define IO_TOKEN_TO_ADDR(token) \
(((unsigned long)(token) & ~(0xfUL << REGION_SHIFT)) | \
(((unsigned long
__force
)(token) & ~(0xfUL << REGION_SHIFT)) | \
(IO_REGION_ID << REGION_SHIFT))
(IO_REGION_ID << REGION_SHIFT))
#define IO_ADDR_TO_TOKEN(addr) \
#define IO_ADDR_TO_TOKEN(addr) \
...
@@ -43,9 +43,9 @@ struct device_node;
...
@@ -43,9 +43,9 @@ struct device_node;
#define EEH_MODE_NOCHECK (1<<1)
#define EEH_MODE_NOCHECK (1<<1)
extern
void
__init
eeh_init
(
void
);
extern
void
__init
eeh_init
(
void
);
unsigned
long
eeh_check_failure
(
void
*
token
,
unsigned
long
val
);
unsigned
long
eeh_check_failure
(
const
volatile
void
__iomem
*
token
,
unsigned
long
val
);
int
eeh_dn_check_failure
(
struct
device_node
*
dn
,
struct
pci_dev
*
dev
);
int
eeh_dn_check_failure
(
struct
device_node
*
dn
,
struct
pci_dev
*
dev
);
void
*
eeh_ioremap
(
unsigned
long
addr
,
void
*
vaddr
);
void
__iomem
*
eeh_ioremap
(
unsigned
long
addr
,
void
__iomem
*
vaddr
);
void
__init
pci_addr_cache_build
(
void
);
void
__init
pci_addr_cache_build
(
void
);
/**
/**
...
@@ -108,83 +108,83 @@ int eeh_set_option(struct pci_dev *dev, int options);
...
@@ -108,83 +108,83 @@ int eeh_set_option(struct pci_dev *dev, int options);
/*
/*
* MMIO read/write operations with EEH support.
* MMIO read/write operations with EEH support.
*/
*/
static
inline
u8
eeh_readb
(
void
*
addr
)
{
static
inline
u8
eeh_readb
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u8
*
vaddr
=
(
volatile
u8
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u8
*
vaddr
=
(
volatile
u8
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u8
val
=
in_8
(
vaddr
);
u8
val
=
in_8
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u8
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u8
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_writeb
(
u8
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_writeb
(
u8
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u8
*
vaddr
=
(
volatile
u8
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u8
*
vaddr
=
(
volatile
u8
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_8
(
vaddr
,
val
);
out_8
(
vaddr
,
val
);
}
}
static
inline
u16
eeh_readw
(
void
*
addr
)
{
static
inline
u16
eeh_readw
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u16
val
=
in_le16
(
vaddr
);
u16
val
=
in_le16
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u16
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u16
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_writew
(
u16
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_writew
(
u16
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_le16
(
vaddr
,
val
);
out_le16
(
vaddr
,
val
);
}
}
static
inline
u16
eeh_raw_readw
(
void
*
addr
)
{
static
inline
u16
eeh_raw_readw
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u16
val
=
in_be16
(
vaddr
);
u16
val
=
in_be16
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u16
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u16
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_raw_writew
(
u16
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_raw_writew
(
u16
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u16
*
vaddr
=
(
volatile
u16
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_be16
(
vaddr
,
val
);
out_be16
(
vaddr
,
val
);
}
}
static
inline
u32
eeh_readl
(
void
*
addr
)
{
static
inline
u32
eeh_readl
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u32
val
=
in_le32
(
vaddr
);
u32
val
=
in_le32
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u32
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u32
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_writel
(
u32
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_writel
(
u32
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_le32
(
vaddr
,
val
);
out_le32
(
vaddr
,
val
);
}
}
static
inline
u32
eeh_raw_readl
(
void
*
addr
)
{
static
inline
u32
eeh_raw_readl
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u32
val
=
in_be32
(
vaddr
);
u32
val
=
in_be32
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u32
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u32
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_raw_writel
(
u32
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_raw_writel
(
u32
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u32
*
vaddr
=
(
volatile
u32
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_be32
(
vaddr
,
val
);
out_be32
(
vaddr
,
val
);
}
}
static
inline
u64
eeh_readq
(
void
*
addr
)
{
static
inline
u64
eeh_readq
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u64
val
=
in_le64
(
vaddr
);
u64
val
=
in_le64
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u64
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u64
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_writeq
(
u64
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_writeq
(
u64
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_le64
(
vaddr
,
val
);
out_le64
(
vaddr
,
val
);
}
}
static
inline
u64
eeh_raw_readq
(
void
*
addr
)
{
static
inline
u64
eeh_raw_readq
(
const
volatile
void
__iomem
*
addr
)
{
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u64
val
=
in_be64
(
vaddr
);
u64
val
=
in_be64
(
vaddr
);
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u64
))
if
(
EEH_POSSIBLE_ERROR
(
addr
,
vaddr
,
val
,
u64
))
return
eeh_check_failure
(
addr
,
val
);
return
eeh_check_failure
(
addr
,
val
);
return
val
;
return
val
;
}
}
static
inline
void
eeh_raw_writeq
(
u64
val
,
vo
id
*
addr
)
{
static
inline
void
eeh_raw_writeq
(
u64
val
,
vo
latile
void
__iomem
*
addr
)
{
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
volatile
u64
*
vaddr
=
(
volatile
u64
*
)
IO_TOKEN_TO_ADDR
(
addr
);
out_be64
(
vaddr
,
val
);
out_be64
(
vaddr
,
val
);
}
}
...
@@ -192,7 +192,7 @@ static inline void eeh_raw_writeq(u64 val, void *addr) {
...
@@ -192,7 +192,7 @@ static inline void eeh_raw_writeq(u64 val, void *addr) {
#define EEH_CHECK_ALIGN(v,a) \
#define EEH_CHECK_ALIGN(v,a) \
((((unsigned long)(v)) & ((a) - 1)) == 0)
((((unsigned long)(v)) & ((a) - 1)) == 0)
static
inline
void
eeh_memset_io
(
vo
id
*
addr
,
int
c
,
unsigned
long
n
)
{
static
inline
void
eeh_memset_io
(
vo
latile
void
__iomem
*
addr
,
int
c
,
unsigned
long
n
)
{
void
*
vaddr
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
addr
);
void
*
vaddr
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
addr
);
u32
lc
=
c
;
u32
lc
=
c
;
lc
|=
lc
<<
8
;
lc
|=
lc
<<
8
;
...
@@ -215,9 +215,10 @@ static inline void eeh_memset_io(void *addr, int c, unsigned long n) {
...
@@ -215,9 +215,10 @@ static inline void eeh_memset_io(void *addr, int c, unsigned long n) {
}
}
__asm__
__volatile__
(
"sync"
:
:
:
"memory"
);
__asm__
__volatile__
(
"sync"
:
:
:
"memory"
);
}
}
static
inline
void
eeh_memcpy_fromio
(
void
*
dest
,
void
*
src
,
unsigned
long
n
)
{
static
inline
void
eeh_memcpy_fromio
(
void
*
dest
,
const
volatile
void
__iomem
*
src
,
unsigned
long
n
)
{
void
*
vsrc
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
src
);
void
*
vsrc
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
src
);
void
*
vsrcsave
=
vsrc
,
*
destsave
=
dest
,
*
srcsave
=
src
;
void
*
vsrcsave
=
vsrc
,
*
destsave
=
dest
;
const
volatile
void
__iomem
*
srcsave
=
src
;
unsigned
long
nsave
=
n
;
unsigned
long
nsave
=
n
;
while
(
n
&&
(
!
EEH_CHECK_ALIGN
(
vsrc
,
4
)
||
!
EEH_CHECK_ALIGN
(
dest
,
4
)))
{
while
(
n
&&
(
!
EEH_CHECK_ALIGN
(
vsrc
,
4
)
||
!
EEH_CHECK_ALIGN
(
dest
,
4
)))
{
...
@@ -253,7 +254,7 @@ static inline void eeh_memcpy_fromio(void *dest, void *src, unsigned long n) {
...
@@ -253,7 +254,7 @@ static inline void eeh_memcpy_fromio(void *dest, void *src, unsigned long n) {
}
}
}
}
static
inline
void
eeh_memcpy_toio
(
vo
id
*
dest
,
const
void
*
src
,
unsigned
long
n
)
{
static
inline
void
eeh_memcpy_toio
(
vo
latile
void
__iomem
*
dest
,
const
void
*
src
,
unsigned
long
n
)
{
void
*
vdest
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
dest
);
void
*
vdest
=
(
void
*
)
IO_TOKEN_TO_ADDR
(
dest
);
while
(
n
&&
(
!
EEH_CHECK_ALIGN
(
vdest
,
4
)
||
!
EEH_CHECK_ALIGN
(
src
,
4
)))
{
while
(
n
&&
(
!
EEH_CHECK_ALIGN
(
vdest
,
4
)
||
!
EEH_CHECK_ALIGN
(
src
,
4
)))
{
...
@@ -289,7 +290,7 @@ static inline u8 eeh_inb(unsigned long port) {
...
@@ -289,7 +290,7 @@ static inline u8 eeh_inb(unsigned long port) {
return
~
0
;
return
~
0
;
val
=
in_8
((
u8
*
)(
port
+
pci_io_base
));
val
=
in_8
((
u8
*
)(
port
+
pci_io_base
));
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u8
))
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u8
))
return
eeh_check_failure
((
void
*
)(
port
),
val
);
return
eeh_check_failure
((
void
__iomem
*
)(
port
),
val
);
return
val
;
return
val
;
}
}
...
@@ -304,7 +305,7 @@ static inline u16 eeh_inw(unsigned long port) {
...
@@ -304,7 +305,7 @@ static inline u16 eeh_inw(unsigned long port) {
return
~
0
;
return
~
0
;
val
=
in_le16
((
u16
*
)(
port
+
pci_io_base
));
val
=
in_le16
((
u16
*
)(
port
+
pci_io_base
));
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u16
))
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u16
))
return
eeh_check_failure
((
void
*
)(
port
),
val
);
return
eeh_check_failure
((
void
__iomem
*
)(
port
),
val
);
return
val
;
return
val
;
}
}
...
@@ -319,7 +320,7 @@ static inline u32 eeh_inl(unsigned long port) {
...
@@ -319,7 +320,7 @@ static inline u32 eeh_inl(unsigned long port) {
return
~
0
;
return
~
0
;
val
=
in_le32
((
u32
*
)(
port
+
pci_io_base
));
val
=
in_le32
((
u32
*
)(
port
+
pci_io_base
));
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u32
))
if
(
EEH_POSSIBLE_IO_ERROR
(
val
,
u32
))
return
eeh_check_failure
((
void
*
)(
port
),
val
);
return
eeh_check_failure
((
void
__iomem
*
)(
port
),
val
);
return
val
;
return
val
;
}
}
...
@@ -332,19 +333,19 @@ static inline void eeh_outl(u32 val, unsigned long port) {
...
@@ -332,19 +333,19 @@ static inline void eeh_outl(u32 val, unsigned long port) {
static
inline
void
eeh_insb
(
unsigned
long
port
,
void
*
buf
,
int
ns
)
{
static
inline
void
eeh_insb
(
unsigned
long
port
,
void
*
buf
,
int
ns
)
{
_insb
((
u8
*
)(
port
+
pci_io_base
),
buf
,
ns
);
_insb
((
u8
*
)(
port
+
pci_io_base
),
buf
,
ns
);
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u8
*
)
buf
)
+
ns
-
1
)),
u8
))
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u8
*
)
buf
)
+
ns
-
1
)),
u8
))
eeh_check_failure
((
void
*
)(
port
),
*
(
u8
*
)
buf
);
eeh_check_failure
((
void
__iomem
*
)(
port
),
*
(
u8
*
)
buf
);
}
}
static
inline
void
eeh_insw_ns
(
unsigned
long
port
,
void
*
buf
,
int
ns
)
{
static
inline
void
eeh_insw_ns
(
unsigned
long
port
,
void
*
buf
,
int
ns
)
{
_insw_ns
((
u16
*
)(
port
+
pci_io_base
),
buf
,
ns
);
_insw_ns
((
u16
*
)(
port
+
pci_io_base
),
buf
,
ns
);
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u16
*
)
buf
)
+
ns
-
1
)),
u16
))
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u16
*
)
buf
)
+
ns
-
1
)),
u16
))
eeh_check_failure
((
void
*
)(
port
),
*
(
u16
*
)
buf
);
eeh_check_failure
((
void
__iomem
*
)(
port
),
*
(
u16
*
)
buf
);
}
}
static
inline
void
eeh_insl_ns
(
unsigned
long
port
,
void
*
buf
,
int
nl
)
{
static
inline
void
eeh_insl_ns
(
unsigned
long
port
,
void
*
buf
,
int
nl
)
{
_insl_ns
((
u32
*
)(
port
+
pci_io_base
),
buf
,
nl
);
_insl_ns
((
u32
*
)(
port
+
pci_io_base
),
buf
,
nl
);
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u32
*
)
buf
)
+
nl
-
1
)),
u32
))
if
(
EEH_POSSIBLE_IO_ERROR
((
*
(((
u32
*
)
buf
)
+
nl
-
1
)),
u32
))
eeh_check_failure
((
void
*
)(
port
),
*
(
u32
*
)
buf
);
eeh_check_failure
((
void
__iomem
*
)(
port
),
*
(
u32
*
)
buf
);
}
}
#endif
/* _PPC64_EEH_H */
#endif
/* _PPC64_EEH_H */
include/asm-ppc64/iSeries/iSeries_io.h
View file @
e6cc3360
...
@@ -31,16 +31,16 @@
...
@@ -31,16 +31,16 @@
/* Created December 28, 2000 */
/* Created December 28, 2000 */
/* End Change Activity */
/* End Change Activity */
/************************************************************************/
/************************************************************************/
extern
u8
iSeries_Read_Byte
(
void
*
IoAddress
);
extern
u8
iSeries_Read_Byte
(
const
volatile
void
__iomem
*
IoAddress
);
extern
u16
iSeries_Read_Word
(
void
*
IoAddress
);
extern
u16
iSeries_Read_Word
(
const
volatile
void
__iomem
*
IoAddress
);
extern
u32
iSeries_Read_Long
(
void
*
IoAddress
);
extern
u32
iSeries_Read_Long
(
const
volatile
void
__iomem
*
IoAddress
);
extern
void
iSeries_Write_Byte
(
u8
IoData
,
void
*
IoAddress
);
extern
void
iSeries_Write_Byte
(
u8
IoData
,
volatile
void
__iomem
*
IoAddress
);
extern
void
iSeries_Write_Word
(
u16
IoData
,
void
*
IoAddress
);
extern
void
iSeries_Write_Word
(
u16
IoData
,
volatile
void
__iomem
*
IoAddress
);
extern
void
iSeries_Write_Long
(
u32
IoData
,
void
*
IoAddress
);
extern
void
iSeries_Write_Long
(
u32
IoData
,
volatile
void
__iomem
*
IoAddress
);
extern
void
*
iSeries_memset_io
(
void
*
dest
,
char
x
,
size_t
n
);
extern
void
iSeries_memset_io
(
volatile
void
__iomem
*
dest
,
char
x
,
size_t
n
);
extern
void
*
iSeries_memcpy_toio
(
void
*
dest
,
void
*
source
,
size_t
n
);
extern
void
iSeries_memcpy_toio
(
volatile
void
__iomem
*
dest
,
void
*
source
,
size_t
n
);
extern
void
*
iSeries_memcpy_fromio
(
void
*
dest
,
void
*
source
,
size_t
n
);
extern
void
iSeries_memcpy_fromio
(
void
*
dest
,
const
volatile
void
__iomem
*
source
,
size_t
n
);
#endif
/* CONFIG_PPC_ISERIES */
#endif
/* CONFIG_PPC_ISERIES */
#endif
/* _ISERIES_IO_H */
#endif
/* _ISERIES_IO_H */
include/asm-ppc64/io.h
View file @
e6cc3360
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
*/
*/
#include <linux/config.h>
#include <linux/config.h>
#include <linux/compiler.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/byteorder.h>
#include <asm/byteorder.h>
#ifdef CONFIG_PPC_ISERIES
#ifdef CONFIG_PPC_ISERIES
...
@@ -41,21 +42,22 @@ extern unsigned long pci_io_base;
...
@@ -41,21 +42,22 @@ extern unsigned long pci_io_base;
#define __raw_writew(v, addr) { BUG(); 0; }
#define __raw_writew(v, addr) { BUG(); 0; }
#define __raw_writel(v, addr) { BUG(); 0; }
#define __raw_writel(v, addr) { BUG(); 0; }
#define __raw_writeq(v, addr) { BUG(); 0; }
#define __raw_writeq(v, addr) { BUG(); 0; }
#define readb(addr) iSeries_Read_Byte((void*)(addr))
#define readb(addr) iSeries_Read_Byte(addr)
#define readw(addr) iSeries_Read_Word((void*)(addr))
#define readw(addr) iSeries_Read_Word(addr)
#define readl(addr) iSeries_Read_Long((void*)(addr))
#define readl(addr) iSeries_Read_Long(addr)
#define writeb(data, addr) iSeries_Write_Byte(data,((void*)(addr)))
#define writeb(data, addr) iSeries_Write_Byte((data),(addr))
#define writew(data, addr) iSeries_Write_Word(data,((void*)(addr)))
#define writew(data, addr) iSeries_Write_Word((data),(addr))
#define writel(data, addr) iSeries_Write_Long(data,((void*)(addr)))
#define writel(data, addr) iSeries_Write_Long((data),(addr))
#define memset_io(a,b,c) iSeries_memset_io((void *)(a),(b),(c))
#define memset_io(a,b,c) iSeries_memset_io((a),(b),(c))
#define memcpy_fromio(a,b,c) iSeries_memcpy_fromio((void *)(a), (void *)(b), (c))
#define memcpy_fromio(a,b,c) iSeries_memcpy_fromio((a), (b), (c))
#define memcpy_toio(a,b,c) iSeries_memcpy_toio((void *)(a), (void *)(b), (c))
#define memcpy_toio(a,b,c) iSeries_memcpy_toio((a), (b), (c))
#define inb(addr) readb(((unsigned long)(addr)))
#define inw(addr) readw(((unsigned long)(addr)))
#define inb(addr) readb(((void __iomem *)(long)(addr)))
#define inl(addr) readl(((unsigned long)(addr)))
#define inw(addr) readw(((void __iomem *)(long)(addr)))
#define outb(data,addr) writeb(data,((unsigned long)(addr)))
#define inl(addr) readl(((void __iomem *)(long)(addr)))
#define outw(data,addr) writew(data,((unsigned long)(addr)))
#define outb(data,addr) writeb(data,((void __iomem *)(long)(addr)))
#define outl(data,addr) writel(data,((unsigned long)(addr)))
#define outw(data,addr) writew(data,((void __iomem *)(long)(addr)))
#define outl(data,addr) writel(data,((void __iomem *)(long)(addr)))
/*
/*
* The *_ns versions below don't do byte-swapping.
* The *_ns versions below don't do byte-swapping.
* Neither do the standard versions now, these are just here
* Neither do the standard versions now, these are just here
...
@@ -64,25 +66,50 @@ extern unsigned long pci_io_base;
...
@@ -64,25 +66,50 @@ extern unsigned long pci_io_base;
#define insw_ns(port, buf, ns) _insw_ns((u16 *)((port)+pci_io_base), (buf), (ns))
#define insw_ns(port, buf, ns) _insw_ns((u16 *)((port)+pci_io_base), (buf), (ns))
#define insl_ns(port, buf, nl) _insl_ns((u32 *)((port)+pci_io_base), (buf), (nl))
#define insl_ns(port, buf, nl) _insl_ns((u32 *)((port)+pci_io_base), (buf), (nl))
#else
#else
#define __raw_readb(addr) (*(volatile unsigned char *)(addr))
#define __raw_readw(addr) (*(volatile unsigned short *)(addr))
static
inline
unsigned
char
__raw_readb
(
const
volatile
void
__iomem
*
addr
)
#define __raw_readl(addr) (*(volatile unsigned int *)(addr))
{
#define __raw_readq(addr) (*(volatile unsigned long *)(addr))
return
*
(
unsigned
char
__force
*
)
addr
;
#define __raw_writeb(v, addr) (*(volatile unsigned char *)(addr) = (v))
}
#define __raw_writew(v, addr) (*(volatile unsigned short *)(addr) = (v))
static
inline
unsigned
short
__raw_readw
(
const
volatile
void
__iomem
*
addr
)
#define __raw_writel(v, addr) (*(volatile unsigned int *)(addr) = (v))
{
#define __raw_writeq(v, addr) (*(volatile unsigned long *)(addr) = (v))
return
*
(
unsigned
short
__force
*
)
addr
;
#define readb(addr) eeh_readb((void*)(addr))
}
#define readw(addr) eeh_readw((void*)(addr))
static
inline
unsigned
int
__raw_readl
(
const
volatile
void
__iomem
*
addr
)
#define readl(addr) eeh_readl((void*)(addr))
{
#define readq(addr) eeh_readq((void*)(addr))
return
*
(
unsigned
int
__force
*
)
addr
;
#define writeb(data, addr) eeh_writeb((data), ((void*)(addr)))
}
#define writew(data, addr) eeh_writew((data), ((void*)(addr)))
static
inline
unsigned
long
__raw_readq
(
const
volatile
void
__iomem
*
addr
)
#define writel(data, addr) eeh_writel((data), ((void*)(addr)))
{
#define writeq(data, addr) eeh_writeq((data), ((void*)(addr)))
return
*
(
unsigned
long
__force
*
)
addr
;
#define memset_io(a,b,c) eeh_memset_io((void *)(a),(b),(c))
}
#define memcpy_fromio(a,b,c) eeh_memcpy_fromio((a),(void *)(b),(c))
static
inline
void
__raw_writeb
(
unsigned
char
v
,
volatile
void
__iomem
*
addr
)
#define memcpy_toio(a,b,c) eeh_memcpy_toio((void *)(a),(b),(c))
{
*
(
unsigned
char
__force
*
)
addr
=
v
;
}
static
inline
void
__raw_writew
(
unsigned
short
v
,
volatile
void
__iomem
*
addr
)
{
*
(
unsigned
short
__force
*
)
addr
=
v
;
}
static
inline
void
__raw_writel
(
unsigned
int
v
,
volatile
void
__iomem
*
addr
)
{
*
(
unsigned
int
__force
*
)
addr
=
v
;
}
static
inline
void
__raw_writeq
(
unsigned
long
v
,
volatile
void
__iomem
*
addr
)
{
*
(
unsigned
long
__force
*
)
addr
=
v
;
}
#define readb(addr) eeh_readb(addr)
#define readw(addr) eeh_readw(addr)
#define readl(addr) eeh_readl(addr)
#define readq(addr) eeh_readq(addr)
#define writeb(data, addr) eeh_writeb((data), (addr))
#define writew(data, addr) eeh_writew((data), (addr))
#define writel(data, addr) eeh_writel((data), (addr))
#define writeq(data, addr) eeh_writeq((data), (addr))
#define memset_io(a,b,c) eeh_memset_io((a),(b),(c))
#define memcpy_fromio(a,b,c) eeh_memcpy_fromio((a),(b),(c))
#define memcpy_toio(a,b,c) eeh_memcpy_toio((a),(b),(c))
#define inb(port) eeh_inb((unsigned long)port)
#define inb(port) eeh_inb((unsigned long)port)
#define outb(val, port) eeh_outb(val, (unsigned long)port)
#define outb(val, port) eeh_outb(val, (unsigned long)port)
#define inw(port) eeh_inw((unsigned long)port)
#define inw(port) eeh_inw((unsigned long)port)
...
@@ -149,7 +176,7 @@ extern void _outsl_ns(volatile u32 *port, const void *buf, int nl);
...
@@ -149,7 +176,7 @@ extern void _outsl_ns(volatile u32 *port, const void *buf, int nl);
#ifdef __KERNEL__
#ifdef __KERNEL__
extern
int
__ioremap_explicit
(
unsigned
long
p_addr
,
unsigned
long
v_addr
,
extern
int
__ioremap_explicit
(
unsigned
long
p_addr
,
unsigned
long
v_addr
,
unsigned
long
size
,
unsigned
long
flags
);
unsigned
long
size
,
unsigned
long
flags
);
extern
void
*
__ioremap
(
unsigned
long
address
,
unsigned
long
size
,
extern
void
__iomem
*
__ioremap
(
unsigned
long
address
,
unsigned
long
size
,
unsigned
long
flags
);
unsigned
long
flags
);
/**
/**
...
@@ -163,11 +190,11 @@ extern void *__ioremap(unsigned long address, unsigned long size,
...
@@ -163,11 +190,11 @@ extern void *__ioremap(unsigned long address, unsigned long size,
* address is not guaranteed to be usable directly as a virtual
* address is not guaranteed to be usable directly as a virtual
* address.
* address.
*/
*/
extern
void
*
ioremap
(
unsigned
long
address
,
unsigned
long
size
);
extern
void
__iomem
*
ioremap
(
unsigned
long
address
,
unsigned
long
size
);
#define ioremap_nocache(addr, size) ioremap((addr), (size))
#define ioremap_nocache(addr, size) ioremap((addr), (size))
extern
int
iounmap_explicit
(
vo
id
*
addr
,
unsigned
long
size
);
extern
int
iounmap_explicit
(
vo
latile
void
__iomem
*
addr
,
unsigned
long
size
);
extern
void
iounmap
(
vo
id
*
addr
);
extern
void
iounmap
(
vo
latile
void
__iomem
*
addr
);
extern
void
*
reserve_phb_iospace
(
unsigned
long
size
);
extern
void
*
reserve_phb_iospace
(
unsigned
long
size
);
/**
/**
...
@@ -377,7 +404,7 @@ static inline void out_be64(volatile unsigned long *addr, unsigned long val)
...
@@ -377,7 +404,7 @@ static inline void out_be64(volatile unsigned long *addr, unsigned long val)
* address should have been obtained by ioremap.
* address should have been obtained by ioremap.
* Returns 1 on a match.
* Returns 1 on a match.
*/
*/
static
inline
int
check_signature
(
unsigned
long
io_addr
,
static
inline
int
check_signature
(
const
volatile
void
__iomem
*
io_addr
,
const
unsigned
char
*
signature
,
int
length
)
const
unsigned
char
*
signature
,
int
length
)
{
{
int
retval
=
0
;
int
retval
=
0
;
...
...
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