-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sh: Support I/O space swapping where needed.
This adopts a trimmed down version of the MIPS port mangling interface limited to the I/O swabbing for platforms that can't use little endian accessors. For platforms with mixed I/O spaces involving PCI it will still be necessary to enable byte swapping at the host controller level. Attention needs to be paid to all of host controller endianness, CPU endianness, and whether I/O accesses are explicitly swapped or not via SWAP_IO_SPACE. Fortunately the platforms that need this are in the minority. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
- Loading branch information
Paul Mundt
committed
Mar 29, 2012
1 parent
5e047fa
commit b7e68d6
Showing
3 changed files
with
62 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -162,6 +162,9 @@ config NO_IOPORT | |
config IO_TRAPPED | ||
bool | ||
|
||
config SWAP_IO_SPACE | ||
bool | ||
|
||
config DMA_COHERENT | ||
bool | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* SH version cribbed from the MIPS copy: | ||
* | ||
* This file is subject to the terms and conditions of the GNU General Public | ||
* License. See the file "COPYING" in the main directory of this archive | ||
* for more details. | ||
* | ||
* Copyright (C) 2003, 2004 Ralf Baechle | ||
*/ | ||
#ifndef __MACH_COMMON_MANGLE_PORT_H | ||
#define __MACH_COMMON_MANGLE_PORT_H | ||
|
||
/* | ||
* Sane hardware offers swapping of PCI/ISA I/O space accesses in hardware; | ||
* less sane hardware forces software to fiddle with this... | ||
* | ||
* Regardless, if the host bus endianness mismatches that of PCI/ISA, then | ||
* you can't have the numerical value of data and byte addresses within | ||
* multibyte quantities both preserved at the same time. Hence two | ||
* variations of functions: non-prefixed ones that preserve the value | ||
* and prefixed ones that preserve byte addresses. The latters are | ||
* typically used for moving raw data between a peripheral and memory (cf. | ||
* string I/O functions), hence the "__mem_" prefix. | ||
*/ | ||
#if defined(CONFIG_SWAP_IO_SPACE) | ||
|
||
# define ioswabb(x) (x) | ||
# define __mem_ioswabb(x) (x) | ||
# define ioswabw(x) le16_to_cpu(x) | ||
# define __mem_ioswabw(x) (x) | ||
# define ioswabl(x) le32_to_cpu(x) | ||
# define __mem_ioswabl(x) (x) | ||
# define ioswabq(x) le64_to_cpu(x) | ||
# define __mem_ioswabq(x) (x) | ||
|
||
#else | ||
|
||
# define ioswabb(x) (x) | ||
# define __mem_ioswabb(x) (x) | ||
# define ioswabw(x) (x) | ||
# define __mem_ioswabw(x) cpu_to_le16(x) | ||
# define ioswabl(x) (x) | ||
# define __mem_ioswabl(x) cpu_to_le32(x) | ||
# define ioswabq(x) (x) | ||
# define __mem_ioswabq(x) cpu_to_le32(x) | ||
|
||
#endif | ||
|
||
#endif /* __MACH_COMMON_MANGLE_PORT_H */ |