Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
53ad0210
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
53ad0210
编写于
6月 01, 2007
作者:
S
Stefan Roese
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ppc4xx: Update in_be32() functions and friends to latest Linux version
Signed-off-by:
N
Stefan Roese
<
sr@denx.de
>
上级
91da09cf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
55 addition
and
34 deletion
+55
-34
include/asm-ppc/io.h
include/asm-ppc/io.h
+55
-34
未找到文件。
include/asm-ppc/io.h
浏览文件 @
53ad0210
...
...
@@ -105,6 +105,11 @@ static inline void sync(void)
__asm__
__volatile__
(
"sync"
:
:
:
"memory"
);
}
static
inline
void
isync
(
void
)
{
__asm__
__volatile__
(
"isync"
:
:
:
"memory"
);
}
/* Enforce in-order execution of data I/O.
* No distinction between read/write on PPC; use eieio for all three.
*/
...
...
@@ -114,74 +119,90 @@ static inline void sync(void)
/*
* 8, 16 and 32 bit, big and little endian I/O operations, with barrier.
*
* Read operations have additional twi & isync to make sure the read
* is actually performed (i.e. the data has come back) before we start
* executing any following instructions.
*/
extern
inline
int
in_8
(
volatile
u8
*
addr
)
#define __iomem
extern
inline
int
in_8
(
const
volatile
unsigned
char
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lbz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lbz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_8
(
volatile
u
8
*
addr
,
int
val
)
extern
inline
void
out_8
(
volatile
u
nsigned
char
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stb%U0%X0 %1,%0; eieio"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"stb%U0%X0 %1,%0; eieio"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
extern
inline
int
in_le16
(
volatile
u16
*
addr
)
extern
inline
int
in_le16
(
const
volatile
unsigned
short
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lhbrx %0,0,%1; eieio"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lhbrx %0,0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
}
extern
inline
int
in_be16
(
volatile
u16
*
addr
)
extern
inline
int
in_be16
(
const
volatile
unsigned
short
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lhz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lhz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_le16
(
volatile
u
16
*
addr
,
int
val
)
extern
inline
void
out_le16
(
volatile
u
nsigned
short
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"sthbrx %1,0,%2; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
__asm__
__volatile__
(
"sync; sthbrx %1,0,%2
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
}
extern
inline
void
out_be16
(
volatile
u
16
*
addr
,
int
val
)
extern
inline
void
out_be16
(
volatile
u
nsigned
short
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"sth%U0%X0 %1,%0; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"sync; sth%U0%X0 %1,%0
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
extern
inline
unsigned
in_le32
(
volatile
u32
*
addr
)
extern
inline
unsigned
in_le32
(
const
volatile
unsigned
__iomem
*
addr
)
{
unsigned
ret
;
unsigned
ret
;
__asm__
__volatile__
(
"lwbrx %0,0,%1; eieio"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lwbrx %0,0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
}
extern
inline
unsigned
in_be32
(
volatile
u32
*
addr
)
extern
inline
unsigned
in_be32
(
const
volatile
unsigned
__iomem
*
addr
)
{
unsigned
ret
;
unsigned
ret
;
__asm__
__volatile__
(
"lwz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lwz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_le32
(
volatile
unsigned
*
addr
,
int
val
)
extern
inline
void
out_le32
(
volatile
unsigned
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stwbrx %1,0,%2; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
__asm__
__volatile__
(
"sync; stwbrx %1,0,%2
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
}
extern
inline
void
out_be32
(
volatile
unsigned
*
addr
,
int
val
)
extern
inline
void
out_be32
(
volatile
unsigned
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stw%U0%X0 %1,%0; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"sync; stw%U0%X0 %1,%0
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录