forked from torvalds/linux
-
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.
This arch-independent routine copies data to a memory-mapped I/O region, using 32-bit accesses. The naming is double-underscored to make it clear that it does not guarantee write ordering, nor does it perform a memory barrier afterwards; the kernel doc also explicitly states this. This style of access is required by some devices. This change also introduces include/linux/io.h, at Andrew's suggestion. It only has one occupant at the moment, but is a logical destination for oft-replicated contents of include/asm-*/{io,iomap}.h to migrate to. Signed-off-by: Bryan O'Sullivan <[email protected]> Cc: Andi Kleen <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Bryan O'Sullivan
authored and
Linus Torvalds
committed
Feb 1, 2006
1 parent
f7589f2
commit c27a0d7
Showing
3 changed files
with
68 additions
and
1 deletion.
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 |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* Copyright 2006 PathScale, Inc. All Rights Reserved. | ||
* | ||
* This file is free software; you can redistribute it and/or modify | ||
* it under the terms of version 2 of the GNU General Public License | ||
* as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | ||
*/ | ||
|
||
#ifndef _LINUX_IO_H | ||
#define _LINUX_IO_H | ||
|
||
#include <asm/io.h> | ||
|
||
void __iowrite32_copy(void __iomem *to, const void *from, size_t count); | ||
|
||
#endif /* _LINUX_IO_H */ |
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,42 @@ | ||
/* | ||
* Copyright 2006 PathScale, Inc. All Rights Reserved. | ||
* | ||
* This file is free software; you can redistribute it and/or modify | ||
* it under the terms of version 2 of the GNU General Public License | ||
* as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | ||
*/ | ||
|
||
#include <linux/io.h> | ||
#include <linux/module.h> | ||
|
||
/** | ||
* __iowrite32_copy - copy data to MMIO space, in 32-bit units | ||
* @to: destination, in MMIO space (must be 32-bit aligned) | ||
* @from: source (must be 32-bit aligned) | ||
* @count: number of 32-bit quantities to copy | ||
* | ||
* Copy data from kernel space to MMIO space, in units of 32 bits at a | ||
* time. Order of access is not guaranteed, nor is a memory barrier | ||
* performed afterwards. | ||
*/ | ||
void __attribute__((weak)) __iowrite32_copy(void __iomem *to, | ||
const void *from, | ||
size_t count) | ||
{ | ||
u32 __iomem *dst = to; | ||
const u32 *src = from; | ||
const u32 *end = src + count; | ||
|
||
while (src < end) | ||
__raw_writel(*src++, dst++); | ||
} | ||
EXPORT_SYMBOL_GPL(__iowrite32_copy); |